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:
parent
47d1d2b0f7
commit
413b2fd552
17
addon_config
Normal file
17
addon_config
Normal 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:
|
@ -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
|
||||
|
11
mkarchiso
11
mkarchiso
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user