ns-prepare - ns-tools - Namespace utilities to reuse Open Source packaging efforts.
(HTM) git clone git://r-36.net/ns-tools
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
ns-prepare (1842B)
---
1 #!/bin/sh
2
3 doforce=0
4 doforceonboot=0
5 [ "$1" = "-f" ] && doforce=1 && shift 1
6 [ "$1" = "-b" ] && doforceonboot=1 && shift 1
7
8 if [ $# -lt 1 ];
9 then
10 printf "usage: %s [-f] ns\n" "$(basename $0)" >&2
11 exit 1
12 fi
13
14 nsroot="$(ns-root "$1")"
15 [ $? -gt 0 ] && exit $?
16
17 shift 1
18
19 [ -e "$nsroot/.ns/prepared" \
20 -a $doforce -eq 0 \
21 -a $doforceonboot -eq 0 ] && exit 0
22
23 if [ $(id -u) -ne 0 ];
24 then
25 printf "ns-prepare needs to be run with root rights.\n" 2>&1
26 exit 1
27 fi
28
29 MOUNTFS=""
30 UMOUNTFS=""
31 TOUCHFILES=""
32 COPYFILES=""
33 LINKFILES=""
34 ONBOOT=0
35
36 [ -e "$nsroot/.ns/rc.conf" ] && . "$nsroot/.ns/rc.conf"
37 [ $ONBOOT -eq 0 -a $doforceonboot -gt 0 ] && exit 0
38
39 if [ ! -d "$nsroot" ];
40 then
41 printf "$nsroot does not seem to be a valid directory.\n" >&2
42 exit 1
43 fi
44
45 if [ ! -d "$nsroot/.ns" ];
46 then
47 mkdir -p "$nsroot/.ns"
48 cat > "$nsroot/.ns/rc.conf" <<!__EOF__
49 MOUNTFS=""
50 UMOUNTFS=""
51 TOUCHFILES=""
52 COPYFILES=""
53 LINKFILES=""
54 !__EOF__
55 fi
56
57 filesystems="$MOUNTFS proc sys tmp dev dev/pts mnt home run devel nix usr/share/terminfo"
58 for m in $filesystems;
59 do
60 mkdir -p "$nsroot/$m"
61 if test -d "/$m"; then
62 mountpoint -q "$nsroot/$m" || mount -o rbind "/$m" "$nsroot/$m"
63 fi
64 done
65
66 #[ -d "$nsroot/mnt/root" ] || mkdir -p "$nsroot/mnt/root"
67 #mountpoint -q "$nsroot/mnt/root" || mount -o rbind / "$nsroot/mnt/root"
68
69 tfs="etc/mtab $TOUCHFILES";
70 for f in $tfs;
71 do
72 touch "$nsroot/$f"
73 done
74
75 cfs="bin/nssh bin/capchroot $COPYFILES"
76 for f in $cfs;
77 do
78 [ -e "/$f" ] && cp -f "/$f" "$nsroot/$f"
79 done
80
81 lnfs="etc/resolv.conf etc/hostname etc/localtime etc/capchroot.allow etc/hosts etc/locale.gen $LINKFILES"
82 for f in $lnfs;
83 do
84 [ -e "/$f" ] && ln -f "/$f" "$nsroot/$f"
85 done
86
87 [ -x /bin/setcap ] && setcap cap_sys_chroot=ep "$nsroot/bin/capchroot"
88
89 touch "$nsroot/.ns/prepared"
90 [ $ONBOOT -gt 0 ] && touch "$nsroot/.ns/preparedonboot"
91 printf "$nsroot has been prepared.\n"
92
93 exit 0
94