qubes-linux-template-builder/qubeize_image

129 lines
3.8 KiB
Bash
Executable File

#!/bin/sh
# ------------------------------------------------------------------------------
# Configurations and Conditionals
# ------------------------------------------------------------------------------
export CLEANIMG="$1"
export NAME="$2"
export LC_ALL=POSIX
. ./builder_setup >/dev/null
. ./umount_kill.sh >/dev/null
if [ "$VERBOSE" -ge 2 -o "$DEBUG" == "1" ]; then
set -x
else
set -e
fi
if [ $# -eq 0 ]; then
echo "usage $0 <clean_image_file> <template_name>"
exit
fi
if [ "x$CLEANIMG" = x ]; then
echo "Image file not specified!"
exit 1
fi
if [ "x$NAME" = x ]; then
echo "Name not given!"
exit 1
fi
ID=$(id -ur)
if [ $ID != 0 ] ; then
echo "This script should be run as root user."
exit 1
fi
if [ "$VERBOSE" == "1" ]; then
export YUM_OPTS="$YUM_OPTS -q"
fi
# ------------------------------------------------------------------------------
# Cleanup function
# ------------------------------------------------------------------------------
function cleanup() {
umount_kill "$PWD/mnt" || :
}
trap cleanup ERR
# ------------------------------------------------------------------------------
# Mount qubeized_image
# ------------------------------------------------------------------------------
# NEW: continue installation from last point if UPDATE="false"
# if UPDATE does not exist (keep it backwards compatible for fedora script)
# - OR -
# update="true", copy over prepared image as normal
export IMG="qubeized_images/$NAME-root.img"
[ "$UPDATE" ] && UPDATE=$(echo $UPDATE | awk '{print tolower($0)}')
if [ "$IMG" -nt "$CLEANIMG" -a "$UPDATE" == "false" ]; then
echo "--> Using original $IMG... (UPDATE=false and qubized_image is newer than prepared_image)"
else
echo "--> Copying $CLEANIMG to $IMG..."
cp "$CLEANIMG" "$IMG" || exit 1
fi
echo "--> Mounting $IMG"
mkdir -p mnt
mount -o loop "$IMG" mnt || exit 1
export INSTALLDIR=mnt
# ------------------------------------------------------------------------------
# Run qubeize script
# ------------------------------------------------------------------------------
"$SCRIPTSDIR/04_install_qubes.sh" || { umount "$INSTALLDIR"; exit 1; }
# ------------------------------------------------------------------------------
# Create App Menus
# ------------------------------------------------------------------------------
echo "--> Copying the Apps Menu shortcuts..."
export APPSORIG="qubeized_images/$NAME-apps.orig"
export APPSTEMPL="qubeized_images/$NAME-apps.templates"
mkdir -p "$APPSORIG"
cp -r "$(pwd)"/mnt/usr/share/applications/* "$APPSORIG"
echo "--> Creating the Apps Menu templates..."
"./create_apps_templates.sh" "$APPSORIG" "$APPSTEMPL"
echo "--> Choosing appmenus whitelists..."
rm -f appmenus
if [ -d "appmenus_${DIST}_${TEMPLATE_FLAVOR}" ]; then
ln -s "appmenus_${DIST}_${TEMPLATE_FLAVOR}" appmenus
elif [ -d "appmenus_$DIST" ]; then
ln -s "appmenus_$DIST" appmenus
else
ln -s "appmenus_generic" appmenus
fi
# ------------------------------------------------------------------------------
# Link directories so they can be mounted
# ------------------------------------------------------------------------------
echo "--> Linking /home to /rw/home..."
mv mnt/home mnt/home.orig
ln -sf /rw/home mnt/home
echo "--> Linking /usr/local to /rw/usrlocal..."
mv mnt/usr/local mnt/usr/local.orig
ln -sf /rw/usrlocal mnt/usr/local
if [ -e mnt/etc/sysconfig/i18n ]; then
echo "--> Setting up default locale..."
echo LC_CTYPE=en_US.UTF-8 > mnt/etc/sysconfig/i18n
fi
# ------------------------------------------------------------------------------
# Finsh - unmount image
# ------------------------------------------------------------------------------
echo "--> Unmounting $IMG"
cleanup
echo "Qubeized image stored at: $IMG"
echo "Reducing image size (calling cleanup_image)..."
./cleanup_image "$IMG"