diff options
author | Martin Whitaker <mageia@martin-whitaker.me.uk> | 2018-04-15 22:03:06 +0100 |
---|---|---|
committer | Martin Whitaker <mageia@martin-whitaker.me.uk> | 2018-04-15 22:06:36 +0100 |
commit | d3ef216c34d9b8e0c720cbb3b9b3b88da63b08a2 (patch) | |
tree | f48ed764413d3491ca7a7e4e1bbd9432a7e32901 /examples/dracut/mgalive-root.sh | |
parent | e8776cdc56be26520efb4007c319d2356a30055a (diff) | |
download | drakiso-d3ef216c34d9b8e0c720cbb3b9b3b88da63b08a2.tar drakiso-d3ef216c34d9b8e0c720cbb3b9b3b88da63b08a2.tar.gz drakiso-d3ef216c34d9b8e0c720cbb3b9b3b88da63b08a2.tar.bz2 drakiso-d3ef216c34d9b8e0c720cbb3b9b3b88da63b08a2.tar.xz drakiso-d3ef216c34d9b8e0c720cbb3b9b3b88da63b08a2.zip |
Support persistance and multiboot USB sticks in examples.
Diffstat (limited to 'examples/dracut/mgalive-root.sh')
-rwxr-xr-x | examples/dracut/mgalive-root.sh | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/examples/dracut/mgalive-root.sh b/examples/dracut/mgalive-root.sh new file mode 100755 index 0000000..a8fee5c --- /dev/null +++ b/examples/dracut/mgalive-root.sh @@ -0,0 +1,84 @@ +#!/bin/sh + +. /lib/dracut-lib.sh + +[ -f /tmp/root.info ] && . /tmp/root.info + +PATH=/usr/sbin:/usr/bin:/sbin:/bin + +[ -z "$1" ] && exit 1 +livedev="$1" + +# Create the live tree +mkdir -m 0755 -p /live/distrib +mkdir -m 0755 -p /live/media +mkdir -m 0755 -p /live/overlay +mkdir -m 0755 -p /live/union +mkdir -m 0755 -p /run/mgalive/ovlsize + +# Get the base device name +basedev=$(echo $livedev | sed 's,\(/dev/sd[a-z]\)1,\1,g') + +# Get the base directory for locating the loopback file. In normal use this is +# the root directory, but a multi-boot USB stick may want to override this. +basedir=$(getarg mgalive.basedir) +if [ -z "$basedir" ] ; then + basedir="/" +fi + +# Get the device or path used for persistant storage (if it exists). In normal +# use this is another partition on the same base device, but a multi-boot USB +# stick may want to override this. +overlay=$(getarg mgalive.overlay) +if [ -z "$overlay" ] ; then + overlay=`blkid -t LABEL=Mageia-Persist -o device | grep $basedev` +else + overlay=$livedev$overlay +fi + +if [ "$basedir" = "/" -a -z "$overlay" ] ; then + # Fix udev isohybrid LABEL issues (mga #3334) + # (things have moved on - this may not be needed now) + media=$basedev +else + media=$livedev +fi + +info "mgalive basedev is $basedev" +info "mgalive livedev is $livedev" +info "mgalive basedir is $basedir" +info "mgalive overlay is $overlay" + +# Mount the live media +mount -n -o ro $media /live/media + +# Mount the loopback filesystem +LOOPDEV=$( losetup -f ) +if [ -e /live/media$basedir/loopbacks/distrib-lzma.sqfs ] ; then + # Retain support for original draklive. Note that despite the file + # name, it too uses xz compression. + losetup -r $LOOPDEV /live/media$basedir/loopbacks/distrib-lzma.sqfs +else + losetup -r $LOOPDEV /live/media$basedir/loopbacks/distrib.sqfs +fi +mount -n -t squashfs -o ro $LOOPDEV /live/distrib +mount -n -t squashfs -o ro $LOOPDEV /run/mgalive/ovlsize + +# Mount the overlay filesystem +if [ -z "$overlay" ] ; then + mount -n -t tmpfs -o mode=755 none /live/overlay +else + mount -n -o noatime $overlay /live/overlay +fi +# work and memory must be on same root +mkdir -m 0755 -p /live/overlay/work +mkdir -m 0755 -p /live/overlay/memory +mount -n -t overlay overlay -o lowerdir=/live/distrib,upperdir=/live/overlay/memory,workdir=/live/overlay/work,noatime /live/union + +ln -s /live/union /dev/root + +printf '/bin/mount --rbind /live/union %s\n' "$NEWROOT" > $hookdir/mount/01-$$-live.sh + +need_shutdown + +exit 0 |