summaryrefslogtreecommitdiffstats
path: root/examples/dracut
diff options
context:
space:
mode:
Diffstat (limited to 'examples/dracut')
-rwxr-xr-xexamples/dracut/mgalive-parse.sh31
-rwxr-xr-xexamples/dracut/mgalive-root.sh84
2 files changed, 115 insertions, 0 deletions
diff --git a/examples/dracut/mgalive-parse.sh b/examples/dracut/mgalive-parse.sh
new file mode 100755
index 0000000..c5225ba
--- /dev/null
+++ b/examples/dracut/mgalive-parse.sh
@@ -0,0 +1,31 @@
+#!/bin/sh
+# live images are specified with
+# root=mgalive:backingdev
+
+[ -z "$root" ] && root=$(getarg root=)
+
+if [ "${root%%:*}" = "mgalive" ] ; then
+ liveroot=$root
+fi
+
+[ "${liveroot%%:*}" = "mgalive" ] || return
+
+modprobe -q loop
+
+case "$liveroot" in
+ mgalive:LABEL=*|LABEL=*) \
+ root="${root#mgalive:}"
+ root="$(echo $root | sed 's,/,\\x2f,g')"
+ root="mgalive:/dev/disk/by-label/${root#LABEL=}"
+ rootok=1 ;;
+ mgalive:UUID=*|UUID=*) \
+ root="${root#mgalive:}"
+ root="mgalive:/dev/disk/by-uuid/${root#UUID=}"
+ rootok=1 ;;
+esac
+info "root was $liveroot, is now $root"
+
+# make sure that init doesn't complain
+[ -z "$root" ] && root="mgalive"
+
+wait_for_dev /live/union
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