Updated scripts/c3.sh (synchronized from/with qqcs-lxc).
authorZoltán Felleg <zoltan.felleg@userrendszerhaz.hu>
Sun, 9 Nov 2025 09:53:43 +0000 (10:53 +0100)
committerZoltán Felleg <zoltan.felleg@userrendszerhaz.hu>
Sun, 9 Nov 2025 09:53:43 +0000 (10:53 +0100)
scripts/c3.sh

index 1c1e694667e21085740385774bae298453f10b06..2e34dea67beed028c48c43f032cc76c28f959598 100755 (executable)
@@ -30,7 +30,7 @@ backup_old_container()
     if [ -d $OLD_CONTAINER_BACKUP_PATH ]
     then
         echo "  Removing the oldest container backup."
-        rm -Rf ${OLD_CONTAINER_BACKUP_PATH}.old
+        rm --force --recursive ${OLD_CONTAINER_BACKUP_PATH}.old
         mv $OLD_CONTAINER_BACKUP_PATH ${OLD_CONTAINER_BACKUP_PATH}.old
     fi
 
@@ -90,7 +90,7 @@ copy_and_install()
 
     case "$DISTRIBUTION" in
         "CentOS")
-            YUM_CONFIG=$SCRIPT_PATH/yum.conf.centos
+            YUM_CONFIG=$SCRIPT_PATH/yum.conf.centos.$SHORT_HOSTNAME
             YUM_RELEASEVER=$DISTRIBUTION_VERSION
             if [ -n "$SPEC_PACKAGES" ]
             then
@@ -111,7 +111,7 @@ copy_and_install()
                 clean all
             ;;
         "Fedora")
-            DNF_CONFIG=$SCRIPT_PATH/dnf.conf.fedora
+            DNF_CONFIG=$SCRIPT_PATH/dnf.conf.fedora.$SHORT_HOSTNAME
             DNF_RELEASEVER=$DISTRIBUTION_VERSION
             if [ -n "$SPEC_PACKAGES" ]
             then
@@ -132,7 +132,7 @@ copy_and_install()
                 clean all
             ;;
         "Rocky")
-            YUM_CONFIG=$SCRIPT_PATH/yum.conf.rocky
+            YUM_CONFIG=$SCRIPT_PATH/yum.conf.rocky.$SHORT_HOSTNAME
             YUM_RELEASEVER=$DISTRIBUTION_VERSION
             if [ -n "$SPEC_PACKAGES" ]
             then
@@ -163,11 +163,18 @@ create_and_populate_build_path()
 
     mkdir --parents $CONTAINER_BUILDROOT
 
+    if [ -f $CONTAINER_SOURCE_PATH/config.$SHORT_HOSTNAME ]
+    then
+        SOURCE_CONFIG=$CONTAINER_SOURCE_PATH/config.$SHORT_HOSTNAME
+    else
+        SOURCE_CONFIG=$CONTAINER_SOURCE_PATH/config
+    fi
+    cp --archive $SOURCE_CONFIG $CONTAINER_BUILD_PATH/config
     sed --expression="s|__CONTAINER_FILESYSTEMS_PATH__|$CONTAINER_FILESYSTEMS_PATH|" \
         --expression="s|__CONTAINER_PATH__|$CONTAINER_PATH|" \
         --expression="s|__CONTAINER_START_ORDER__|$CONTAINER_START_ORDER|" \
-        <$CONTAINER_SOURCE_PATH/config \
-        >$CONTAINER_BUILD_PATH/config
+        --in-place \
+        $CONTAINER_BUILD_PATH/config
     if [ -d $CONTAINER_SOURCE_PATH/hooks ]
     then
         cp --archive $CONTAINER_SOURCE_PATH/hooks $CONTAINER_BUILD_PATH
@@ -199,6 +206,7 @@ create_environment_file()
     echo "BACKUPS_PATH=$BACKUPS_PATH" >>$ENV_FILE
     echo "BUILD_PATH=$BUILD_PATH" >>$ENV_FILE
     echo "FILESYSTEMS_PATH=$FILESYSTEMS_PATH" >>$ENV_FILE
+    echo "SHORT_HOSTNAME=$SHORT_HOSTNAME" >>$ENV_FILE
     echo "SOURCES_PATH=$SOURCES_PATH" >>$ENV_FILE
     echo "SSH_KEYS_PATH=$SSH_KEYS_PATH" >>$ENV_FILE
     echo >>$ENV_FILE
@@ -297,6 +305,7 @@ set_variables()
     BACKUPS_PATH=$BASE_PATH/backups
     BUILD_PATH=$BASE_PATH/build
     FILESYSTEMS_PATH=$BASE_PATH/filesystems
+    SHORT_HOSTNAME=$(hostname --short)
     SOURCES_PATH=$BASE_PATH/sources
     SSH_KEYS_PATH=$BASE_PATH/user-ssh
 
@@ -309,7 +318,12 @@ set_variables()
         return 1
     fi
 
-    if [ ! -f $CONTAINER_SOURCE_PATH/config ]
+    SOURCE_CONFIG=$CONTAINER_SOURCE_PATH/config
+    if [ -f $CONTAINER_SOURCE_PATH/config.$SHORT_HOSTNAME ]
+    then
+        SOURCE_CONFIG=$CONTAINER_SOURCE_PATH/config.$SHORT_HOSTNAME
+    fi
+    if [ ! -f $SOURCE_CONFIG ]
     then
         echo "No config file found for $CONTAINER_BASENAME" >&2
         return 2
@@ -430,6 +444,22 @@ postinstall()
     POSTINSTALL_PATH=$CONTAINER_BUILDROOT/c3d/postinstall
     if [ -d $POSTINSTALL_PATH ]
     then
+        MD5SUMS_FILE=$POSTINSTALL_PATH/checksums/MD5SUMS
+        if [ -f $MD5SUMS_FILE ]
+        then
+            MD5SUMS_FILE=/c3d/postinstall/checksums/MD5SUMS
+            chroot $CONTAINER_BUILDROOT \
+                md5sum --check $MD5SUMS_FILE
+            RC=$?
+            if [ $RC -ne 0 ]
+            then
+                echo "File checksums differ, exiting" >&2
+                umount $CONTAINER_BUILDROOT/dev
+                umount $CONTAINER_BUILDROOT/proc
+                umount $CONTAINER_BUILDROOT/sys
+                return $RC
+            fi
+        fi
         RUN_LIST=$POSTINSTALL_PATH/ssh/run.list
         if [ -f $RUN_LIST ]
         then
@@ -566,6 +596,15 @@ firstboot()
             FIRSTBOOT_SCRIPT=$(echo $SCRIPT | sed "s|^$CONTAINER_ROOTFS||")
             echo lxc-attach --name=$CONTAINER_NAME -- $FIRSTBOOT_SCRIPT
             lxc-attach --name=$CONTAINER_NAME -- $FIRSTBOOT_SCRIPT
+            RC=$?
+            if [ $RC -ne 0 ]
+            then
+                read -p "$FIRSTBOOT_SCRIPTS returned ${RC}. Continue? [y/N]" ANSWER
+                if [ "$ANSWER" != "y" ]
+                then
+                    return $RC
+                fi
+            fi
         done
         shopt -u nullglob
     fi
@@ -603,6 +642,11 @@ copy_and_install
 set_c3d_ownership
 
 postinstall
+RC=$?
+if [ $RC -ne 0 ]
+then
+    exit $RC
+fi
 
 unprivilege