lnstools

Linux namespace tools
git clone https://ccx.te2000.cz/git/lnstools
Log | Files | Refs | README

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