|
|
|
|
@@ -28,7 +28,8 @@
|
|
|
|
|
# Includes
|
|
|
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
. /usr/lib/rx3/docker_tools.bash
|
|
|
|
|
: "${RX3_LIB_DIR:=/usr/lib/rx3}"
|
|
|
|
|
. "${RX3_LIB_DIR}/docker_tools.bash"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -38,7 +39,7 @@
|
|
|
|
|
# Global Variables
|
|
|
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
declare -g VERSION=1.0.0
|
|
|
|
|
declare -g VERSION=1.0.1
|
|
|
|
|
declare -g NAME="MBI"
|
|
|
|
|
declare -g HELP="usage: mk_base_image [[-h | --help] | [-V | --version] | [-p | --pre] | [-P | --post] | [-s | --strip] | [-u | --unstrip]] [-D | --direct] [-d | --distrib <Distrib>] [-l | --lang <Lang>] [-L | --language <Langage>] [-m | --localtime <Local_Time>] [-r | --root <Root_Dir>] [-t | --tmp <Tmp_Dir>] [-T | --test] [-v | --verbose]"
|
|
|
|
|
|
|
|
|
|
@@ -51,10 +52,6 @@ declare -g LANGUAGE_DEF="en_US.UTF-8:en_US:en"
|
|
|
|
|
declare -g LOCALTIME_DEF="Europe/Paris"
|
|
|
|
|
|
|
|
|
|
declare -Ag CONTAINER_TAB
|
|
|
|
|
CONTAINER_TAB["Builder,Name"]='rx3-builder'
|
|
|
|
|
CONTAINER_TAB["Builder,Source"]='docker.io/library/mageia:9'
|
|
|
|
|
CONTAINER_TAB["Root,Name"]='rx3-mageia${DISTRIB}'
|
|
|
|
|
CONTAINER_TAB["Root,Source"]='scratch'
|
|
|
|
|
|
|
|
|
|
declare -g BUILDER_DIR="/"
|
|
|
|
|
declare -g ROOT_DIR="${ROOT_DIR_DEF}"
|
|
|
|
|
@@ -77,61 +74,7 @@ declare -g NAME_SERVER_1='8.8.8.8'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
# Func Exec
|
|
|
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
function mbi_func_exec()
|
|
|
|
|
{
|
|
|
|
|
func="$1"
|
|
|
|
|
arg="$2"
|
|
|
|
|
name="$3"
|
|
|
|
|
builder_mode="$4"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
echo_error "Executing Name: [${name}] Func: [${func}] Arg: [${arg}] Builder_Mode: [${builder_mode}]"
|
|
|
|
|
|
|
|
|
|
if [[ "${builder_mode}" == "TRUE" ]]
|
|
|
|
|
then
|
|
|
|
|
if [[ "${BUILDER_DIR}" != "/" ]]
|
|
|
|
|
then
|
|
|
|
|
echo_error "Only direct ${name} and '/' Builder Root dir supported: Recall in ..."
|
|
|
|
|
|
|
|
|
|
mkdir -p "${BUILDER_DIR}/${ROOT_DIR_DEF}"
|
|
|
|
|
mount --bind "${ROOT_DIR}" "${BUILDER_DIR}/${ROOT_DIR_DEF}"
|
|
|
|
|
|
|
|
|
|
cmd_exec chroot "${BUILDER_DIR}" mk_base_image ${arg} --direct --root "${ROOT_DIR_DEF}" ${RECALL_OPTS}
|
|
|
|
|
|
|
|
|
|
umount "${BUILDER_DIR}/${ROOT_DIR_DEF}"
|
|
|
|
|
|
|
|
|
|
return
|
|
|
|
|
fi
|
|
|
|
|
else
|
|
|
|
|
if [[ "${ROOT_DIR}" != "/" ]]
|
|
|
|
|
then
|
|
|
|
|
echo_error "Only direct ${name} and '/' Target Root dir supported: Recall..."
|
|
|
|
|
|
|
|
|
|
cmd_exec chroot "${ROOT_DIR}" mk_base_image ${arg} --direct --root "/" "${RECALL_OPTS}"
|
|
|
|
|
|
|
|
|
|
return
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
set +e
|
|
|
|
|
|
|
|
|
|
# find / 2>/dev/null | grep -v -e "^/dev" -e "^/proc" -e "^/run" -e "^/sys/" >/root/before
|
|
|
|
|
|
|
|
|
|
declare -f ${func} | sed -n '/^{/,/^}/p' | sed -e '1d;$d' -e 's/;$//' | grep -v -E '^$|^#' | while read -r line
|
|
|
|
|
do
|
|
|
|
|
sh_exec "${line}"
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
# find / 2>/dev/null | grep -v -e "^/dev" -e "^/proc" -e "^/run" -e "^/sys/" >/root/after
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
# Version
|
|
|
|
|
@@ -212,6 +155,22 @@ function mbi_args_parse()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
# Container Tab Init
|
|
|
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
mbi_container_tab_init()
|
|
|
|
|
{
|
|
|
|
|
CONTAINER_TAB["Builder,Name"]="rx3-builder"
|
|
|
|
|
CONTAINER_TAB["Builder,Source"]="docker.io/library/mageia:${DISTRIB_DEF}"
|
|
|
|
|
CONTAINER_TAB["Root,Name"]="rx3-mageia${DISTRIB}"
|
|
|
|
|
CONTAINER_TAB["Root,Source"]="scratch"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
# Env Init
|
|
|
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
@@ -286,8 +245,9 @@ function mbi_env_init()
|
|
|
|
|
|
|
|
|
|
echo_error "Making Builder..."
|
|
|
|
|
|
|
|
|
|
cmd_exec cp /etc/resolv.conf "${BUILDER_DIR}/etc/resolv.conf"
|
|
|
|
|
cmd_exec chroot "${BUILDER_DIR}" bash -c 'curl -L http://mirror.rx3.net/rx3/sbin/urpmi-setup-'${DISTRIB}' | bash'
|
|
|
|
|
cmd_exec chroot "${BUILDER_DIR}" urpmi --force docker_tools-devel
|
|
|
|
|
cmd_exec chroot "${BUILDER_DIR}" urpmi --force rx3-base
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
@@ -335,31 +295,47 @@ function mbi_env_deinit()
|
|
|
|
|
# Base Install Pre
|
|
|
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
function _mbi_base_install_pre()
|
|
|
|
|
{
|
|
|
|
|
rm /var/cache/urpmi/rpms/*
|
|
|
|
|
|
|
|
|
|
urpmi --root ${ROOT_DIR} --force --no-install --no-recommends --nolock --reinstall --download-all ${TMP_DIR} --downloader curl makedev filesystem curl urpmi rx3-base docker_tools-devel
|
|
|
|
|
|
|
|
|
|
rpm --root ${ROOT_DIR} --initdb
|
|
|
|
|
rpm --root ${ROOT_DIR} -Uvh --nodeps --noscripts ${TMP_DIR}/rpms/filesystem*
|
|
|
|
|
rm ${TMP_DIR}/rpms/filesystem*
|
|
|
|
|
|
|
|
|
|
rpm --root ${ROOT_DIR} -Uvh --nodeps --noscripts ${TMP_DIR}/rpms/makedev*
|
|
|
|
|
rm ${TMP_DIR}/rpms/makedev*
|
|
|
|
|
|
|
|
|
|
rpm --root ${ROOT_DIR} -Uvh --nodeps ${TMP_DIR}/rpms/*
|
|
|
|
|
rm -R ${TMP_DIR}
|
|
|
|
|
|
|
|
|
|
# Enable Neworking
|
|
|
|
|
echo -e "nameserver ${NAME_SERVER_0}\nnameserver ${NAME_SERVER_1}" >"${ROOT_DIR}/etc/resolv.conf"
|
|
|
|
|
echo -e "NETWORKING=yes" >"${ROOT_DIR}/etc/sysconfig/network"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function mbi_base_install_pre()
|
|
|
|
|
{
|
|
|
|
|
mbi_func_exec "_mbi_base_install_pre" "--pre" "pre-installing" "TRUE"
|
|
|
|
|
if [[ "${DIRECT}" == "FALSE" ]]
|
|
|
|
|
then
|
|
|
|
|
echo_error "Chrooting in Builder_Dir: [${BUILDER_DIR}] for Pre-Install.."
|
|
|
|
|
|
|
|
|
|
cmd_exec mkdir -p "${BUILDER_DIR}/${ROOT_DIR_DEF}"
|
|
|
|
|
cmd_exec mount --bind "${ROOT_DIR}" "${BUILDER_DIR}/${ROOT_DIR_DEF}"
|
|
|
|
|
|
|
|
|
|
chroot_cmd="chroot ${BUILDER_DIR}"
|
|
|
|
|
root_dir="${ROOT_DIR_DEF}"
|
|
|
|
|
else
|
|
|
|
|
echo_error "Direct Pre-Install..."
|
|
|
|
|
|
|
|
|
|
chroot_cmd=""
|
|
|
|
|
root_dir="${ROOT_DIR}"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmd_exec ${chroot_cmd} bash -c 'rm /var/cache/urpmi/rpms/* || true'
|
|
|
|
|
|
|
|
|
|
cmd_exec ${chroot_cmd} urpmi --root ${root_dir} --force --no-install --no-recommends --nolock --reinstall --download-all ${TMP_DIR} --downloader curl makedev filesystem curl urpmi rx3-base
|
|
|
|
|
|
|
|
|
|
cmd_exec ${chroot_cmd} bash -c 'rpm --root '${root_dir}' --initdb'
|
|
|
|
|
cmd_exec ${chroot_cmd} bash -c 'rpm --root '${root_dir}' -Uvh --nodeps --noscripts '${TMP_DIR}'/rpms/filesystem*'
|
|
|
|
|
cmd_exec ${chroot_cmd} bash -c 'rm '${TMP_DIR}'/rpms/filesystem*'
|
|
|
|
|
|
|
|
|
|
cmd_exec ${chroot_cmd} bash -c 'rpm --root '${root_dir}' -Uvh --nodeps --noscripts '${TMP_DIR}'/rpms/makedev*'
|
|
|
|
|
cmd_exec ${chroot_cmd} bash -c 'rm '${TMP_DIR}'/rpms/makedev*'
|
|
|
|
|
|
|
|
|
|
cmd_exec ${chroot_cmd} bash -c 'rpm --root '${root_dir}' -Uvh --nodeps '${TMP_DIR}'/rpms/*'
|
|
|
|
|
cmd_exec ${chroot_cmd} bash -c 'rm -R '${TMP_DIR}
|
|
|
|
|
|
|
|
|
|
# Enable Neworking
|
|
|
|
|
sh_exec 'echo -e "nameserver '${NAME_SERVER_0}'\nnameserver '${NAME_SERVER_1}'" >"'${ROOT_DIR}'/etc/resolv.conf"'
|
|
|
|
|
sh_exec 'echo -e "NETWORKING=yes" >"'${ROOT_DIR}'/etc/sysconfig/network"'
|
|
|
|
|
|
|
|
|
|
if [[ "${DIRECT}" == "FALSE" ]]
|
|
|
|
|
then
|
|
|
|
|
cmd_exec umount "${BUILDER_DIR}/${ROOT_DIR_DEF}"
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -370,22 +346,18 @@ function mbi_base_install_pre()
|
|
|
|
|
# Base Install Post
|
|
|
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
function _mbi_base_install_post()
|
|
|
|
|
{
|
|
|
|
|
urpmi-setup --verbose --distrib "${DISTRIB}"
|
|
|
|
|
|
|
|
|
|
urpmi --force --auto-update
|
|
|
|
|
|
|
|
|
|
urpmi --force basesystem-minimal locales locales-en shared-mime-info vim-minimal mpm
|
|
|
|
|
|
|
|
|
|
echo -e "LANG=${LANG}\nLANGUAGE=${LANGUAGE}" >"${ROOT_DIR}/etc/locale.conf"
|
|
|
|
|
ln -s /usr/share/zoneinfo/${LOCALTIME} "${ROOT_DIR}/etc/localtime"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function mbi_base_install_post()
|
|
|
|
|
{
|
|
|
|
|
mbi_func_exec "_mbi_base_install_post" "--post" "post-installing" "FALSE"
|
|
|
|
|
|
|
|
|
|
cmd_exec chroot ${ROOT_DIR} urpmi-setup --verbose --distrib "${DISTRIB}"
|
|
|
|
|
# cmd_exec chroot ${ROOT_DIR} bash -c 'curl -L http://mirror.rx3.net/rx3/sbin/urpmi-setup-'${DISTRIB}' | bash'
|
|
|
|
|
|
|
|
|
|
cmd_exec chroot ${ROOT_DIR} urpmi --force --auto-update
|
|
|
|
|
|
|
|
|
|
cmd_exec chroot ${ROOT_DIR} urpmi --force basesystem-minimal locales locales-en shared-mime-info vim-minimal mpm
|
|
|
|
|
|
|
|
|
|
sh_exec 'echo -e "LANG='${LANG}'\nLANGUAGE='${LANGUAGE}'" >"'"${ROOT_DIR}"'/etc/locale.conf"'
|
|
|
|
|
cmd_exec chroot ${ROOT_DIR} ln -s /usr/share/zoneinfo/${LOCALTIME} "/etc/localtime"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -396,47 +368,40 @@ function mbi_base_install_post()
|
|
|
|
|
# Base Strip
|
|
|
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
function _mbi_base_strip()
|
|
|
|
|
{
|
|
|
|
|
# RPM force uninstall
|
|
|
|
|
rpm -e --nodeps cracklib-dicts buildah
|
|
|
|
|
rpm -e dhcp-common dhcp-client cronie-anacron opencontainers-runc lib64gpgme11 gnupg2 lib64ksba8 lib64usb1.0_0 lib64npth0 lib64assuan0
|
|
|
|
|
|
|
|
|
|
# Docker mounts tmpfs at /dev and procfs at /proc so we can remove them
|
|
|
|
|
rm -rf /dev /proc 2>/dev/null
|
|
|
|
|
mkdir -p /dev /proc 2>/dev/null
|
|
|
|
|
|
|
|
|
|
# Keep only en_US.UTF8 locale
|
|
|
|
|
rm -rf /usr/share/locale/!("en_US.UTF-8"|"locale.alias"|"locale-archive")
|
|
|
|
|
|
|
|
|
|
rm -rf /usr/{{lib,lib64}/gconv,bin/localedef,sbin/build-locale-archive}
|
|
|
|
|
|
|
|
|
|
# Docs
|
|
|
|
|
rm -rf /usr/share/{man,doc,info,gnome/help}
|
|
|
|
|
|
|
|
|
|
# sln
|
|
|
|
|
rm -rf /sbin/sln
|
|
|
|
|
|
|
|
|
|
# ldconfig
|
|
|
|
|
rm -rf /etc/ld.so.cache /var/cache/ldconfig
|
|
|
|
|
mkdir -p --mode=0755 /var/cache/ldconfig
|
|
|
|
|
|
|
|
|
|
# UDev
|
|
|
|
|
rm -rf /usr/lib/udev
|
|
|
|
|
rm -rf /etc/udev/hwdb.bin
|
|
|
|
|
|
|
|
|
|
rm -rf /usr/lib/.build-id
|
|
|
|
|
|
|
|
|
|
# Cache & Tmp
|
|
|
|
|
rm -rf /var/cache/urpmi/rpms 2>/dev/null
|
|
|
|
|
rm -rf /tmp/*
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function mbi_base_strip()
|
|
|
|
|
{
|
|
|
|
|
mbi_func_exec "_mbi_base_strip" "--strip" "stripping" "FALSE"
|
|
|
|
|
# RPM force uninstall
|
|
|
|
|
cmd_exec chroot ${ROOT_DIR} rpm -e --nodeps cracklib-dicts
|
|
|
|
|
cmd_exec chroot ${ROOT_DIR} rpm -e dhcp-common dhcp-client cronie-anacron
|
|
|
|
|
|
|
|
|
|
# Docker mounts tmpfs at /dev and procfs at /proc so we can remove them
|
|
|
|
|
cmd_exec rm -rf "${ROOT_DIR}"/dev "${ROOT_DIR}"/proc 2>/dev/null
|
|
|
|
|
cmd_exec mkdir -p "${ROOT_DIR}"/dev "${ROOT_DIR}"/proc 2>/dev/null
|
|
|
|
|
|
|
|
|
|
# Keep only en_US.UTF8 locale
|
|
|
|
|
cmd_exec rm -rf "${ROOT_DIR}"/usr/share/locale/!("en_US.UTF-8"|"locale.alias"|"locale-archive")
|
|
|
|
|
|
|
|
|
|
cmd_exec rm -rf "${ROOT_DIR}"/usr/{{lib,lib64}/gconv,bin/localedef,sbin/build-locale-archive}
|
|
|
|
|
|
|
|
|
|
# Docs
|
|
|
|
|
cmd_exec rm -rf "${ROOT_DIR}"/usr/share/{man,doc,info,gnome/help}
|
|
|
|
|
|
|
|
|
|
# sln
|
|
|
|
|
cmd_exec rm -rf "${ROOT_DIR}"/sbin/sln
|
|
|
|
|
|
|
|
|
|
# ldconfig
|
|
|
|
|
cmd_exec rm -rf "${ROOT_DIR}"/etc/ld.so.cache "${ROOT_DIR}"/var/cache/ldconfig
|
|
|
|
|
cmd_exec mkdir -p --mode=0755 "${ROOT_DIR}"/var/cache/ldconfig
|
|
|
|
|
|
|
|
|
|
# UDev
|
|
|
|
|
cmd_exec rm -rf "${ROOT_DIR}"/usr/lib/udev
|
|
|
|
|
cmd_exec rm -rf "${ROOT_DIR}"/etc/udev/hwdb.bin
|
|
|
|
|
|
|
|
|
|
cmd_exec rm -rf "${ROOT_DIR}"/usr/lib/.build-id
|
|
|
|
|
|
|
|
|
|
# Cache & Tmp
|
|
|
|
|
cmd_exec rm -rf "${ROOT_DIR}"/var/cache/urpmi/rpms 2>/dev/null
|
|
|
|
|
cmd_exec rm -rf "${ROOT_DIR}"/tmp/*
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -447,22 +412,15 @@ function mbi_base_strip()
|
|
|
|
|
# Base UnStrip
|
|
|
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
function _mbi_base_unstrip()
|
|
|
|
|
{
|
|
|
|
|
urpmi.update -a
|
|
|
|
|
|
|
|
|
|
# Install uninstalled packages
|
|
|
|
|
urpmi --force cracklib-dicts buildah dhcp-common dhcp-client cronie-anacron buildah opencontainers-runc lib64gpgme11 gnupg2 lib64ksba8 lib64usb1.0_0 lib64npth0 lib64assuan0
|
|
|
|
|
|
|
|
|
|
# Force reinstall all packages
|
|
|
|
|
urpmi --force --replacepkgs $(rpm -qa | grep -v gpg-pubkey)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function mbi_base_unstrip()
|
|
|
|
|
{
|
|
|
|
|
mbi_func_exec "_mbi_base_unstrip" "--unstrip" "unstripping" "FALSE"
|
|
|
|
|
cmd_exec chroot ${ROOT_DIR} urpmi.update -a
|
|
|
|
|
|
|
|
|
|
# Install uninstalled packages
|
|
|
|
|
cmd_exec chroot ${ROOT_DIR} urpmi --force cracklib-dicts dhcp-common dhcp-client cronie-anacron
|
|
|
|
|
|
|
|
|
|
# Force reinstall all packages
|
|
|
|
|
cmd_exec chroot ${ROOT_DIR} urpmi --force --replacepkgs $(rpm -qa | grep -v gpg-pubkey)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -483,6 +441,7 @@ export LC_ALL="C"
|
|
|
|
|
|
|
|
|
|
mbi_args_parse "$@"
|
|
|
|
|
|
|
|
|
|
mbi_container_tab_init
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if [[ ${MODE} == "EXIT" ]]
|
|
|
|
|
@@ -494,8 +453,6 @@ fi
|
|
|
|
|
echo_error "MBI: Mode: [${MODE}] Verbose: [${VERBOSE}] Distrib: [${DISTRIB}] Direct: [${DIRECT}] Dry_Run: [${DRY_RUN}] Lang: [${LANG}] Language: [${LANGUAGE}] Local_Time: [${LOCALTIME}] Builder_Dir: [${BUILDER_DIR}] Root_Dir: [${ROOT_DIR}] Tmp_Dir: [${TMP_DIR}]"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
eval CONTAINER_TAB["Root,Name"]=${CONTAINER_TAB["Root,Name"]}
|
|
|
|
|
|
|
|
|
|
if [[ "${MODE}" == "DEFAULT" ]]
|
|
|
|
|
then
|
|
|
|
|
mbi_env_init "TRUE"
|
|
|
|
|
|