Implemented a simple addon mechanism

If asked to do so, mkarchiso simply copies a
directory full of addons to the iso root.

On boot, after union-mounting /real_root, the
archiso hook will look for and source an addon
config file. This file is a plain old bash
script, which makes it quite flexible. The addon
config should be written to take care of any
mounting that needs to be done, an example of
typical tasks is also included.

Signed-off-by: Simo Leone <simo@archlinux.org>
This commit is contained in:
Simo Leone 2007-10-12 02:48:16 -05:00
parent 47d1d2b0f7
commit 413b2fd552
3 changed files with 33 additions and 1 deletions

17
addon_config Normal file
View File

@ -0,0 +1,17 @@
# This script gets run around the end of the archiso hook
# These are some typical examples of what addons may need
# installer package payload in a plain directory
mkdir -p /real_root/packages
mount -o bind $BOOT_MOUNT/addons/core /real_root/packages
# a squashed livecd-specific overlay for a pristine system
#TODO: we should keep track of used loop devices in case of multiple images
mkdir -p /tmpfs/mnt/live_overlay
if ! /bin/losetup /dev/loop1 "${BOOT_MOUNT}/addons/live_overlay.sqfs" >/dev/null 2>&1; then
echo "ERROR: Cannot mount loop device /dev/loop1...aborting"
fi
/bin/mount -r -t squashfs /dev/loop1 /tmpfs/mnt/live_overlay
mount -t unionfs -o remount,add=/tmpfs/squashfs_root:/tmpfs/mnt/live_overlay=ro none /real_root
# vim:ft=sh:ts=4:sw=4:et:

View File

@ -33,6 +33,12 @@ run_hook ()
/bin/modprobe -q unionfs >/dev/null 2>&1
/bin/mount -t unionfs -o dirs=/tmpfs=rw:/tmpfs/squashfs_root=ro none /real_root
addon_conf="${BOOT_MOUNT}/addons/config"
if [ -e "${addon_conf}" ]; then
msg ":: Mounting addons"
. $addon_conf
fi
if [ -d /proc/sys/dev/cdrom ]; then
echo 0 > /proc/sys/dev/cdrom/lock
echo 1 > /proc/sys/dev/cdrom/autoeject

View File

@ -6,6 +6,7 @@ PKGFILE="$(pwd)/packages.list"
PKGLIST=""
QUIET="y"
FORCE="n"
ADDON_DIR=""
command_name=""
work_dir=""
@ -22,6 +23,7 @@ usage ()
echo " -i CPIO_CONFIG Use CONFIG file for mkinitcpio. default: ${CPIOCONFIG}"
echo " -P PKGFILE File with list of packages to install. default: ${PKGFILE}"
echo " -p PACKAGE Additional package to install, can be used multiple times"
echo " -a ADDON_DIR Use addons from DIR. default: none"
echo " -v Enable verbose output."
echo " -h This message."
echo " commands:"
@ -32,11 +34,12 @@ usage ()
exit $1
}
while getopts 'i:P:p:fvh' arg; do
while getopts 'i:P:p:a:fvh' arg; do
case "${arg}" in
i) CPIOCONFIG="${OPTARG}" ;;
P) PKGFILE="${OPTARG}" ;;
p) PKGLIST="${PKGLIST} ${OPTARG}" ;;
a) ADDON_DIR="${OPTARG}" ;;
f) FORCE="y" ;;
v) QUIET="n" ;;
h|?) usage 0 ;;
@ -172,6 +175,12 @@ if [ "${command_name}" = "install" -o "${command_name}" = "all" ]; then
rm -rf "${isoroot}/boot"
mv "${instroot}/boot" "${isoroot}"
fi
# TODO: this might belong somewhere else
if [ -d "${ADDON_DIR}" ]; then
echo "Copying addons from ${ADDON_DIR}..."
cp -r ${ADDON_DIR} ${isoroot}/addons
fi
fi
# Squash is the next step.