lns-mount-chroot (1768B)
1 #!/command/execlineb -S1 2 3 multisubstitute { 4 importas -i 1 1 # require first argument 5 importas -D /mnt/chroot LNS_ROOT LNS_ROOT 6 } 7 shift -n 1 # remove first argument so we don't have to deal with it with runblock 8 9 lns-mounts-to-env 10 11 if { mount -o rbind $1 $NS_ROOT } 12 13 # /proc 14 if { mount -t proc proc ${LNS_ROOT}/proc } 15 16 # /dev 17 if { s6-mount -nwt tmpfs -o nosuid,dev,mode=0755 dev ${LNS_ROOT}/dev } 18 if { mknod -m 666 ${LNS_ROOT}/dev/null c 1 3 } 19 if { mknod -m 666 ${LNS_ROOT}/dev/full c 1 7 } 20 if { mknod -m 666 ${LNS_ROOT}/dev/ptmx c 5 2 } 21 if { mknod -m 644 ${LNS_ROOT}/dev/random c 1 8 } 22 if { mknod -m 644 ${LNS_ROOT}/dev/urandom c 1 9 } 23 if { mknod -m 666 ${LNS_ROOT}/dev/zero c 1 5 } 24 if { mknod -m 666 ${LNS_ROOT}/dev/tty c 5 0 } 25 if { s6-ln -sf /proc/self/fd ${LNS_ROOT}/dev/fd } 26 if { s6-ln -sf /proc/self/fd/0 ${LNS_ROOT}/dev/stdin } 27 if { s6-ln -sf /proc/self/fd/1 ${LNS_ROOT}/dev/stout } 28 if { s6-ln -sf /proc/self/fd/2 ${LNS_ROOT}/dev/stderr } 29 if { s6-ln -sf ../run/shm ${LNS_ROOT}/dev/shm } 30 31 # dev/shm is intentionally ommited to allow custom mount or symlink 32 # pts and mqueue are provided below 33 34 # Create top-level /dev directories. Many may be bind-mounted from host if neededx. 35 if { 36 mkdir 37 38 ${LNS_ROOT}/dev/pts 39 ${LNS_ROOT}/dev/mqueue 40 41 ${LNS_ROOT}/dev/block 42 ${LNS_ROOT}/dev/bus 43 ${LNS_ROOT}/dev/bus/usb 44 ${LNS_ROOT}/dev/char 45 ${LNS_ROOT}/dev/dri 46 ${LNS_ROOT}/dev/input 47 ${LNS_ROOT}/dev/loop 48 ${LNS_ROOT}/dev/net 49 ${LNS_ROOT}/dev/snd 50 ${LNS_ROOT}/dev/usb 51 52 } 53 if { mount -t devpts devpts ${LNS_ROOT}/dev/pts } 54 if { s6-mount -nwt mqueue -o nosuid,nodev,noexec mqueue ${LNS_ROOT}/dev/mqueue } 55 56 # run 57 if { 58 cd $NS_ROOT 59 runblock 1 60 } 61 62 # now we can make /dev immutable 63 if { mount -o remount,ro ${LNS_ROOT}/dev } 64 65 # chainload into the rest of the argv 66 runblock -r 1