return 0
fi
+ echo "Backing up (the old) container."
+
if [ -d $OLD_CONTAINER_BACKUP_PATH ]
then
rm -Rf ${OLD_CONTAINER_BACKUP_PATH}.old
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 \
"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 \
"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 \
clean all
;;
esac
+
+ echo "Copied files and installed packages."
}
create_build_path()
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
preinstall()
{
+ echo "Executing preinstall phase."
+
if [ -d $CONTAINER_SOURCE_PATH/preinstall ]
then
cp --archive $CONTAINER_SOURCE_PATH/preinstall $CONTAINER_BUILDROOT
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
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 ]
lxc-attach --name=$CONTAINER_NAME -- $FIRSTBOOT_SCRIPT
done
fi
+
+ echo "Finished firstboot phase."
}
set_variables $1
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)"