diff --git a/sys/kernel/live-boot/live-boot.hook b/sys/kernel/live-boot/live-boot.hook new file mode 100644 index 00000000..d5db8109 --- /dev/null +++ b/sys/kernel/live-boot/live-boot.hook @@ -0,0 +1,24 @@ +#!/bin/sh +set -e + +. /usr/share/initramfs-tools/hook-functions + +manual_add_modules "cdrom" +manual_add_modules "loop" +manual_add_modules "dm-snapshot" +manual_add_modules "overlay" +manual_add_modules "isofs" +manual_add_modules "squashfs" +manual_add_modules "hfsplus" +manual_add_modules "sr_mod" +manual_add_modules "dm_mod" +manual_add_modules "dm-raid" +manual_add_modules "raid0" +manual_add_modules "raid1" +manual_add_modules "raid10" +manual_add_modules "raid456" +manual_add_modules 'nls' +manual_add_modules 'overlayfs' +manual_add_modules 'udf' +manual_add_modules 'ext4' +manual_add_modules 'usb-storage' diff --git a/sys/kernel/live-boot/live-boot.script b/sys/kernel/live-boot/live-boot.script new file mode 100644 index 00000000..00e52056 --- /dev/null +++ b/sys/kernel/live-boot/live-boot.script @@ -0,0 +1,69 @@ +#!/bin/sh + +is_file_avaiable(){ + disktmp=$(mktemp) + rm -f $disktmp + mkdir -p $disktmp || true + timeout 10 mount -t auto "$1" $disktmp &>/dev/null + [ -f "$disktmp/$2" ] && [ -b "$1" ] + status=$? + umount -lf $disktmp 2>/dev/null + return $status +} + +mountroot() +{ + while [ "$root" == "" ] ; do + list=$(ls /sys/class/block/ | grep ".*[0-9]$" | grep -v loop | grep -v ram | grep -v nbd | grep -v fd | sed "s|^|/dev/|g") + for part in $list ; do + sleep 0.1 + echo "Looking for: $part" + if is_file_avaiable "$part" "/live/filesystem.squashfs" ; then + export root=$part + elif is_file_avaiable "$part" "/mount-me" ; then + export home=$part + fi + done + done +} + +mount_top() +{ + : +} + +mount_premount() +{ + if cat /proc/cmdline | grep "break=live" >/dev/null ; then + launch_interactive_shell + fi + for mod in dm_mod dm-raid raid0 raid1 raid456 loop ; do + modprobe $mod || true + done + if [ -f /ventoy/hook/arch/ventoy-disk.sh ] ; then + echo "Loading Ventoy hooks" + sh /ventoy/hook/arch/ventoy-disk.sh || true + sleep 0.3 + fi +} + +mount_bottom() +{ + mkdir -p /donkey/a # upper + mkdir -p /donkey/b # workdir + mkdir -p /live_root/ + mkdir -p ${rootmnt}/ + mkdir -p /source/ # lower + mount $root ${rootmnt}/ 2> /dev/null + mount ${rootmnt}/live/airootfs.sfs /source/ 2> /dev/null + mount -t overlay -o lowerdir=/source/,upperdir=/donkey/a/,workdir=/donkey/b overlay /live_root + mount -t tmpfs -o size=100% none /donkey/a + mount -t tmpfs -o size=100% none /donkey/b + [ -d /source/merge/ ] && cp -prfv /source/merge/* /live_root/ + mount --bind /live_root ${rootmnt}/ + mkdir ${rootmnt}/cdrom/ 2> /dev/null + mkdir ${rootmnt}/source/ 2> /dev/null + mount $root ${rootmnt}/cdrom/ 2> /dev/null + mount ${rootmnt}/live/filesystem.squashfs ${rootmnt}/source/ 2> /dev/null + [ "$home" != "" ] && mount $home ${rootmnt}/data/user 2>/dev/null +} diff --git a/sys/kernel/live-boot/ympbuild b/sys/kernel/live-boot/ympbuild new file mode 100644 index 00000000..bf12c30f --- /dev/null +++ b/sys/kernel/live-boot/ympbuild @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +name='live-boot' +release='1' +version='1.0' +url='https://gitlab.com/sulix' +description='initramfs tools live hooks' +email='aliriza.keskin@pardus.org.tr' +maintainer='aliriza' +license=('GPLv3') +source=('live-boot.script' + 'live-boot.hook' + ) +depends=(initramfs-tools) +makedepends=() +md5sums=('SKIP' + 'SKIP' + ) +group=() +uses=() +arch=('x86_64') + +package(){ + mkdir -p ${DESTDIR}/etc/initramfs-tools/scripts/ + mkdir -p ${DESTDIR}/usr/share/initramfs-tools/hooks/ + install live-boot.script ${DESTDIR}/etc/initramfs-tools/scripts/live + install live-boot.hook ${DESTDIR}/usr/share/initramfs-tools/hooks/live +} +