this seems to work in simple trials. i'm unsure tho if udev and kernel
modules will be working from the right hierarchy, no doubt some of you will
know..
>#!/bin/bash -f
>#set a subdirectory as root directory (with no change to initrd)(multiple
installs don't need partitions)
>#simply specify on the kernel commandline:
># init=pat pathname from partition root to this script (chmod 744)
># subroot=foo pathname to become root directory
># partroot=par mountpoint within subroot where partition root will be
left mounted
>#menuentry "subroot foo" { #copy /etc/grub.d/40_custom to
/etc/grub.d/07_custom and add menuentries like this example
># echo "subroot foo"
># set sub=foo
># search --no-floppy --fs-uuid --set=root
22e7c84a-a416-43e9-ae9d-ee0119fc3894 #use your partition's uuid
># linux /$sub/vmlinuz ro
root=UUID=22e7c84a-a416-43e9-ae9d-ee0119fc3894 init=pat subroot=foo
partroot=par
># echo "initrd /$sub/initrd.img"
># initrd /$sub/initrd.img #works in recent releases where
this link is relative
>#}
>subroot(){ for a in $(<proc/cmdline)
> do [[ $a = subroot=* ]]&& subroot=${a#*=}
> [[ $a = partroot=* ]]&&partroot=${a#*=}
> done
> [[ $subroot ]]||{ echo no subroot on kernel cmdline;return 1;}
> [[ $partroot ]]||{ echo no partroot on kernel cmdline;return 1;}
> (set -x;mount --bind $subroot mnt)||return
> for m in $(while read -r r;do r=($r)
> [[ ${r[1]} = /?(mnt) ]]||echo ${r[1]} #excluding
/ and /mnt
> done<proc/mounts)
> do (set -x;mount --bind $m mnt$m)||return #--bind
whatever's already mounted
> done
> set -x
> cd mnt||return
> pivot_root . $partroot
>}
>subroot&&exec chroot . init "$@"||exec bash
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.mn-linux.org/pipermail/tclug-list/attachments/20180415/1c8d8faf/attachment.html>