Updated create-container.sh to link-copy only /usr.
authorZoltán Felleg <zoltan.felleg@userrendszerhaz.hu>
Thu, 13 Jan 2022 16:56:29 +0000 (17:56 +0100)
committerZoltán Felleg <zoltan.felleg@userrendszerhaz.hu>
Thu, 13 Jan 2022 16:56:29 +0000 (17:56 +0100)
scripts/create-container.sh

index bbe698c5cfa26fe4b2a2dbc1970e6a85b7e7d095..ced6965328fdf7eea129d1e7f34129c3fe62c86c 100755 (executable)
@@ -34,7 +34,7 @@ backup_old_container()
         "RUNNING")
             echo "Stopping (the old) container $OLD_CONTAINER_NAME"
             lxc-stop --name=$OLD_CONTAINER_NAME
-           echo "Stopped (the old) container $OLD_CONTAINER_NAME"
+            echo "Stopped (the old) container $OLD_CONTAINER_NAME"
             ;;
         "STOPPED")
             ;;
@@ -53,9 +53,23 @@ copy_and_install()
         "CentOS")
             YUM_CONFIG=$SCRIPT_PATH/yum.conf.centos
             YUM_RELEASEVER=$DISTRIBUTION_VERSION
-            cp --archive --link \
-                $LXC_PATH/base.$CONTAINER_OS/rootfs/* \
-                $CONTAINER_BUILDROOT
+            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 \
@@ -77,9 +91,23 @@ copy_and_install()
         "Fedora")
             DNF_CONFIG=$SCRIPT_PATH/dnf.conf.fedora
             DNF_RELEASEVER=$DISTRIBUTION_VERSION
-            cp --archive --link \
-                $LXC_PATH/base.$CONTAINER_OS/rootfs/* \
-                $CONTAINER_BUILDROOT
+            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 \
@@ -101,9 +129,23 @@ copy_and_install()
         "Rocky")
             YUM_CONFIG=$SCRIPT_PATH/yum.conf.rocky
             YUM_RELEASEVER=$DISTRIBUTION_VERSION
-            cp --archive --link \
-                $LXC_PATH/base.$CONTAINER_OS/rootfs/* \
-                $CONTAINER_BUILDROOT
+            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 \
@@ -254,7 +296,9 @@ set_variables()
     DISTRIBUTION_FIRST_CHAR=$(echo "$DISTRIBUTION" | cut -c 1 | tr '[A-Z]' '[a-z]')
     CONTAINER_OS="${DISTRIBUTION_FIRST_CHAR}$DISTRIBUTION_VERSION"
 
-    if [ ! -d $LXC_PATH/base.$CONTAINER_OS ]
+    BASE_CONTAINER_PATH=$LXC_PATH/base.$CONTAINER_OS
+
+    if [ ! -d $BASE_CONTAINER_PATH ]
     then
         echo "The container does not have a base container." >&2
         return 8
@@ -344,13 +388,15 @@ postinstall()
 
 firstboot()
 {
+    CONTAINER_ROOTFS=$CONTAINER_PATH/rootfs
+
     if [ -d $CONTAINER_SOURCE_PATH/firstboot ]
     then
-        cp --archive $CONTAINER_SOURCE_PATH/firstboot $CONTAINER_BUILDROOT
-        chmod 755 $CONTAINER_BUILDROOT/firstboot/*.sh
-        for SCRIPT in $CONTAINER_BUILDROOT/firstboot/*.sh
+        cp --archive $CONTAINER_SOURCE_PATH/firstboot $CONTAINER_ROOTFS
+        chmod 755 $CONTAINER_ROOTFS/firstboot/*.sh
+        for SCRIPT in $CONTAINER_ROOTFS/firstboot/*.sh
         do
-            FIRSTBOOT_SCRIPT=$(echo $SCRIPT | sed "s|^$CONTAINER_BUILDROOT||")
+            FIRSTBOOT_SCRIPT=$(echo $SCRIPT | sed "s|^$CONTAINER_ROOTFS||")
             echo lxc-attach --name=$CONTAINER_NAME -- $FIRSTBOOT_SCRIPT
             lxc-attach --name=$CONTAINER_NAME -- $FIRSTBOOT_SCRIPT
         done