From a4f442d5c38c480725d8ee0ad9376ba72053f39d Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zolt=C3=A1n=20Felleg?= Date: Mon, 7 Feb 2022 12:32:41 +0100 Subject: [PATCH] Updated create-container.sh. --- scripts/create-container.sh | 125 ++++++++++++++++-------------------- 1 file changed, 54 insertions(+), 71 deletions(-) diff --git a/scripts/create-container.sh b/scripts/create-container.sh index ced6965..a401773 100755 --- a/scripts/create-container.sh +++ b/scripts/create-container.sh @@ -22,6 +22,8 @@ backup_old_container() return 0 fi + echo "Backing up (the old) container." + if [ -d $OLD_CONTAINER_BACKUP_PATH ] then rm -Rf ${OLD_CONTAINER_BACKUP_PATH}.old @@ -45,31 +47,38 @@ backup_old_container() esac mv $OLD_CONTAINER_PATH $OLD_CONTAINER_BACKUP_PATH + + echo "(The old) container has been backed up." } copy_and_install() { + echo "Copying base container files." + + for FQ_DIRECTORY in $BASE_CONTAINER_PATH/rootfs/* + do + DIRECTORY=$(basename $FQ_DIRECTORY) + case "$DIRECTORY" in + "usr") + # common for all containers + cp --archive --link $FQ_DIRECTORY $CONTAINER_BUILDROOT + ;; + "dev" | "proc") + # already mounted, skip + ;; + *) + # each container must have its own version + cp --archive $FQ_DIRECTORY $CONTAINER_BUILDROOT + ;; + esac + done + + echo "Installing special packages." + case "$DISTRIBUTION" in "CentOS") YUM_CONFIG=$SCRIPT_PATH/yum.conf.centos YUM_RELEASEVER=$DISTRIBUTION_VERSION - for FQ_DIRECTORY in $BASE_CONTAINER_PATH/rootfs/* - do - DIRECTORY=$(basename $FQ_DIRECTORY) - case "$DIRECTORY" in - "usr") - # common for all containers - cp --archive --link $FQ_DIRECTORY $CONTAINER_BUILDROOT - ;; - "dev" | "proc") - # already mounted, skip - ;; - *) - # each container must have its own version - cp --archive $FQ_DIRECTORY $CONTAINER_BUILDROOT - ;; - esac - done if [ -n "$SPEC_PACKAGES" ] then yum --assumeyes \ @@ -91,23 +100,6 @@ copy_and_install() "Fedora") DNF_CONFIG=$SCRIPT_PATH/dnf.conf.fedora DNF_RELEASEVER=$DISTRIBUTION_VERSION - for FQ_DIRECTORY in $BASE_CONTAINER_PATH/rootfs/* - do - DIRECTORY=$(basename $FQ_DIRECTORY) - case "$DIRECTORY" in - "usr") - # common for all containers - cp --archive --link $FQ_DIRECTORY $CONTAINER_BUILDROOT - ;; - "dev" | "proc") - # already mounted, skip - ;; - *) - # each container must have its own version - cp --archive $FQ_DIRECTORY $CONTAINER_BUILDROOT - ;; - esac - done if [ -n "$SPEC_PACKAGES" ] then dnf --assumeyes \ @@ -129,23 +121,6 @@ copy_and_install() "Rocky") YUM_CONFIG=$SCRIPT_PATH/yum.conf.rocky YUM_RELEASEVER=$DISTRIBUTION_VERSION - for FQ_DIRECTORY in $BASE_CONTAINER_PATH/rootfs/* - do - DIRECTORY=$(basename $FQ_DIRECTORY) - case "$DIRECTORY" in - "usr") - # common for all containers - cp --archive --link $FQ_DIRECTORY $CONTAINER_BUILDROOT - ;; - "dev" | "proc") - # already mounted, skip - ;; - *) - # each container must have its own version - cp --archive $FQ_DIRECTORY $CONTAINER_BUILDROOT - ;; - esac - done if [ -n "$SPEC_PACKAGES" ] then yum --assumeyes \ @@ -165,6 +140,8 @@ copy_and_install() clean all ;; esac + + echo "Copied files and installed packages." } create_build_path() @@ -300,7 +277,7 @@ set_variables() if [ ! -d $BASE_CONTAINER_PATH ] then - echo "The container does not have a base container." >&2 + echo "The container does not have a base container (base.${CONTAINER_OS})." >&2 return 8 fi @@ -336,6 +313,8 @@ set_variables() preinstall() { + echo "Executing preinstall phase." + if [ -d $CONTAINER_SOURCE_PATH/preinstall ] then cp --archive $CONTAINER_SOURCE_PATH/preinstall $CONTAINER_BUILDROOT @@ -351,28 +330,39 @@ preinstall() mkdir $CONTAINER_BUILDROOT/proc mount -o bind /dev $CONTAINER_BUILDROOT/dev mount -t proc proc $CONTAINER_BUILDROOT/proc + + echo "Finished preinstall phase." } postinstall() { + echo "Executing postinstall phase." + if [ -d $CONTAINER_SOURCE_PATH/postinstall ] then cp --archive $CONTAINER_SOURCE_PATH/postinstall $CONTAINER_BUILDROOT - if [ -f $CONTAINER_SOURCE_PATH/postinstall/copy.list ] + if [ -f $CONTAINER_BUILDROOT/postinstall/run.list ] + then + grep -v '^#' $CONTAINER_BUILDROOT/postinstall/run.list | while read LINE + do + TGT_HOST=$(echo "$LINE" | cut -f 1 -d ' ') + TGT_USER=$(echo "$LINE" | cut -f 2 -d ' ') + TGT_EXECUTABLE=$(echo "$LINE" | cut -f 3 -d ' ') + ssh -i $SSH_KEYS_PATH/scripts -l $TGT_USER $TGT_HOST $TGT_EXECUTABLE + done + fi + if [ -f $CONTAINER_BUILDROOT/postinstall/copy.list ] then - grep -v '^#' $CONTAINER_SOURCE_PATH/postinstall/copy.list | while read LINE + grep -v '^#' $CONTAINER_BUILDROOT/postinstall/copy.list | while read LINE do SRC_HOST=$(echo "$LINE" | cut -f 1 -d ' ') SRC_PATH=$(echo "$LINE" | cut -f 2 -d ' ') TGT_PATH=$(echo "$LINE" | cut -f 3 -d ' ') - scp -pr -i $SSH_KEYS_PATH/scripts \ + scp -i $SSH_KEYS_PATH/scripts -p -r \ root@${SRC_HOST}:$SRC_PATH \ $CONTAINER_BUILDROOT/postinstall/install/$TGT_PATH done fi - fi - if [ -d $CONTAINER_BUILDROOT/postinstall ] - then chmod 755 $CONTAINER_BUILDROOT/postinstall/*.sh for SCRIPT in $CONTAINER_BUILDROOT/postinstall/*.sh do @@ -384,10 +374,14 @@ postinstall() umount $CONTAINER_BUILDROOT/dev umount $CONTAINER_BUILDROOT/proc + + echo "Finished postinstall phase." } firstboot() { + echo "Executing firstboot phase." + CONTAINER_ROOTFS=$CONTAINER_PATH/rootfs if [ -d $CONTAINER_SOURCE_PATH/firstboot ] @@ -401,6 +395,8 @@ firstboot() lxc-attach --name=$CONTAINER_NAME -- $FIRSTBOOT_SCRIPT done fi + + echo "Finished firstboot phase." } set_variables $1 @@ -425,29 +421,16 @@ postinstall backup_old_container -################################################################ -# move the new container to its place # -################################################################ mv $CONTAINER_BUILD_PATH $CONTAINER_PATH -################################################################ -# start up the new container # -################################################################ echo "Starting (the new) container $CONTAINER_NAME" lxc-start --name=$CONTAINER_NAME --daemon echo "Waiting for (the new) container $CONTAINER_NAME to start up." lxc-wait --name=$CONTAINER_NAME --state=RUNNING -################################################################ -# execute firstboot phase # -################################################################ -echo "Executing firstboot phase." firstboot -################################################################ -# remove the environment file # -################################################################ rm -f $ENV_FILE echo "Finishing at $(date)" -- 2.54.0