Updated create-container.sh.
authorZoltán Felleg <zoltan.felleg@userrendszerhaz.hu>
Mon, 7 Feb 2022 11:32:41 +0000 (12:32 +0100)
committerZoltán Felleg <zoltan.felleg@userrendszerhaz.hu>
Mon, 7 Feb 2022 11:32:41 +0000 (12:32 +0100)
scripts/create-container.sh

index ced6965328fdf7eea129d1e7f34129c3fe62c86c..a401773831a417e2df32236cb5ec567631ef2369 100755 (executable)
@@ -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)"