jc.fish
· 1.4 KiB · Fish
Raw
function jc
# see https://git.io/JfHOu
set local
set MACH (sysctl -n hw.machine)
set ARCH (sysctl -n hw.machine_arch)
set DOMAIN skunkwerks.at
set RELEASE 14.0-RELEASE
set RELDATE 1400097
set FLAVOUR $RELEASE-$MACH-$ARCH
# grab the name
set JAIL $argv[1]
# the container
set TEMPLATE /jails/templates/$FLAVOUR
set INSTANCE /jails/instances/$FLAVOUR/$JAIL
# find the zpool for jails and jailed datasets
set ZPOOL (zfs list -Ho name /jails | cut -f 1 -d /)
# create a /jailed dataset to contain optional per-jail jailable datasets
# this can be located on an alternative zpool but must not be mountable
zfs list -Ho name -d1 |grep /jailed\$ > /dev/null 2>&1 \
|| doas zfs create -o mountpoint=none -o canmount=off $ZPOOL/jailed
# re-fetch after possible creation
set JAILED (zfs list -Ho name -d1 | grep /jailed\$)
# derive a hopefully non-clashing IP address
set IPA (echo -n $JAIL | sha512 | cut -c 1,2)
set IPB (echo -n $JAIL | sha512 | cut -c 3,4)
set IP6 $IPA$IPB
set IP (printf "%d.%d" 0x$IPA 0x$IPB)
# get the zt 6plane
set IFACE (ifconfig | sort -r | /usr/bin/egrep -o '^zt[a-z0-9]+' | head -1)
set SUBNET (ifconfig $IFACE inet6 | rg -Po 'fc\S+::' | uniq)
set ALIAS "$IFACE|$SUBNET$IP6"
# display config and try to start it
echo name=$JAIL ip=$IP ip6=$IP6 iface=$IFACE subnet=$SUBNET alias=$ALIAS
end
1 | function jc |
2 | # see https://git.io/JfHOu |
3 | set local |
4 | set MACH (sysctl -n hw.machine) |
5 | set ARCH (sysctl -n hw.machine_arch) |
6 | set DOMAIN skunkwerks.at |
7 | set RELEASE 14.0-RELEASE |
8 | set RELDATE 1400097 |
9 | set FLAVOUR $RELEASE-$MACH-$ARCH |
10 | # grab the name |
11 | set JAIL $argv[1] |
12 | # the container |
13 | set TEMPLATE /jails/templates/$FLAVOUR |
14 | set INSTANCE /jails/instances/$FLAVOUR/$JAIL |
15 | |
16 | # find the zpool for jails and jailed datasets |
17 | set ZPOOL (zfs list -Ho name /jails | cut -f 1 -d /) |
18 | |
19 | # create a /jailed dataset to contain optional per-jail jailable datasets |
20 | # this can be located on an alternative zpool but must not be mountable |
21 | zfs list -Ho name -d1 |grep /jailed\$ > /dev/null 2>&1 \ |
22 | || doas zfs create -o mountpoint=none -o canmount=off $ZPOOL/jailed |
23 | # re-fetch after possible creation |
24 | set JAILED (zfs list -Ho name -d1 | grep /jailed\$) |
25 | |
26 | # derive a hopefully non-clashing IP address |
27 | set IPA (echo -n $JAIL | sha512 | cut -c 1,2) |
28 | set IPB (echo -n $JAIL | sha512 | cut -c 3,4) |
29 | set IP6 $IPA$IPB |
30 | set IP (printf "%d.%d" 0x$IPA 0x$IPB) |
31 | # get the zt 6plane |
32 | set IFACE (ifconfig | sort -r | /usr/bin/egrep -o '^zt[a-z0-9]+' | head -1) |
33 | set SUBNET (ifconfig $IFACE inet6 | rg -Po 'fc\S+::' | uniq) |
34 | set ALIAS "$IFACE|$SUBNET$IP6" |
35 | # display config and try to start it |
36 | echo name=$JAIL ip=$IP ip6=$IP6 iface=$IFACE subnet=$SUBNET alias=$ALIAS |
37 | end |
1 | function jd |
2 | set local |
3 | set JAIL $argv[1] |
4 | doas sysrc jail_list-=$JAIL |
5 | for f in (zfs list -Ho name -r zroot/jails/instances | grep /$JAIL\$) |
6 | doas zfs destroy -Rvrf $f |
7 | end |
8 | end |
jr.fish
· 775 B · Fish
Raw
function jr
set local
set JAIL $argv[1]
set INSTANCE (jls -dj $JAIL path)
pkill -TERM -j $JAIL
sleep 3
doas jail -rv $JAIL
set MOUNTS (mount -p | grep $INSTANCE/ | cut -wf 2 | grep dev/fd)
for node in $MOUNTS
doas umount -f $node
end
set MOUNTS (mount -p | grep $INSTANCE/ | cut -wf 2 | grep dev/)
for node in $MOUNTS
doas umount -f $node
end
set MOUNTS (mount -p | grep $INSTANCE/ | cut -wf 2 | grep tmp/)
for node in $MOUNTS
doas umount -f $node
end
set MOUNTS (mount -p | grep $INSTANCE/ | cut -wf 2 | grep dev/fd)
for node in $MOUNTS
doas umount -f $node
end
end
1 | function jr |
2 | set local |
3 | set JAIL $argv[1] |
4 | set INSTANCE (jls -dj $JAIL path) |
5 | pkill -TERM -j $JAIL |
6 | sleep 3 |
7 | doas jail -rv $JAIL |
8 | |
9 | set MOUNTS (mount -p | grep $INSTANCE/ | cut -wf 2 | grep dev/fd) |
10 | for node in $MOUNTS |
11 | doas umount -f $node |
12 | end |
13 | set MOUNTS (mount -p | grep $INSTANCE/ | cut -wf 2 | grep dev/) |
14 | for node in $MOUNTS |
15 | doas umount -f $node |
16 | end |
17 | set MOUNTS (mount -p | grep $INSTANCE/ | cut -wf 2 | grep tmp/) |
18 | for node in $MOUNTS |
19 | doas umount -f $node |
20 | end |
21 | set MOUNTS (mount -p | grep $INSTANCE/ | cut -wf 2 | grep dev/fd) |
22 | for node in $MOUNTS |
23 | doas umount -f $node |
24 | end |
25 | end |
jz.fish
· 3.4 KiB · Fish
Raw
function jz
# see https://git.io/JfHOu
set local
set MACH (sysctl -n hw.machine)
set ARCH (sysctl -n hw.machine_arch)
set DOMAIN skunkwerks.at
set RELEASE 14.2-RELEASE
set RELDATE 1402000
set FLAVOUR $RELEASE-$MACH-$ARCH
# grab the name
set JAIL $argv[1]
# the container
set TEMPLATE /jails/templates/$FLAVOUR
set INSTANCE /jails/instances/$FLAVOUR/$JAIL
# find the zpool for jails and jailed datasets
set ZPOOL (zfs list -Ho name /jails | cut -f 1 -d /)
# create a /jailed dataset to contain optional per-jail jailable datasets
# this can be located on an alternative zpool but must not be mountable
zfs list -Ho name -d1 |grep /jailed\$ > /dev/null 2>&1 \
|| doas zfs create -o mountpoint=none -o canmount=off $ZPOOL/jailed
# re-fetch after possible creation
set JAILED (zfs list -Ho name -d1 | grep /jailed\$)
# create mountpoint if missing
zfs list -Ho name $ZPOOL/jails > /dev/null 2>&1 \
|| doas zfs create -o mountpoint=/jails -p $ZPOOL/jails
# clone a template if missing
test -d $INSTANCE \
|| doas zfs clone $ZPOOL$TEMPLATE@ready $ZPOOL$INSTANCE \
&& doas zfs snapshot $ZPOOL$INSTANCE@ready
# add a softlink if missing
test -L /jails/tags/$JAIL || ln -s $INSTANCE /jails/tags/$JAIL
# derive a hopefully non-clashing IP address
set IPA (echo -n $JAIL | sha512 | cut -c 1,2)
set IPB (echo -n $JAIL | sha512 | cut -c 3,4)
set IP6 $IPA$IPB
set IP (printf "%d.%d" 0x$IPA 0x$IPB)
# get the zt 6plane
set IFACE (ifconfig | sort -r | /usr/bin/egrep -o '^zt[a-z0-9]+' | head -1)
set SUBNET (ifconfig $IFACE inet6 | rg -Po 'fc\S+::' | uniq)
set ALIAS "$IFACE|$SUBNET$IP6"
# display config and try to start it
echo name=$JAIL ip=$IP ip6=$IP6 iface=$IFACE subnet=$SUBNET alias=$ALIAS
jls -j $JAIL > /dev/null 2>&1
if test $status = 0
doas jexec $JAIL tmux -u new-session -DAs default
else
doas jail -vcmr \
name=$JAIL \
path=$INSTANCE \
exec.created="zfs jail $JAIL $JAILED/$JAIL || true" \
exec.created="test -c $INSTANCE/dev/null || mount -t devfs devfs $INSTANCE/dev" \
exec.created="test -c $INSTANCE/tmp || mount -t tmpfs tmpfs $INSTANCE/tmp" \
exec.start="/bin/sh /etc/rc" \
exec.poststop="umount $INSTANCE/tmp" \
exec.poststop="umount $INSTANCE/dev" \
exec.poststop="logger -p info -t jz removed $JAIL" \
host.domainname=$DOMAIN \
host.hostid=0 \
host.hostname=$JAIL.$DOMAIN \
host.hostuuid=(uuidgen) \
ip4.addr="lo1|100.64.$IP" \
ip6.addr="$ALIAS" \
allow.chflags \
allow.mount \
allow.mount.devfs \
allow.mount.fdescfs \
allow.mount.nolinprocfs \
allow.mount.nullfs \
allow.mount.procfs \
allow.mount.tmpfs \
allow.mount.zfs \
allow.nomlock \
allow.noquotas \
allow.noread_msgbuf \
allow.noset_hostname \
allow.nosocket_af \
allow.nosysvipc \
allow.raw_sockets \
allow.reserved_ports \
allow.sysvipc=1 \
allow.novmm \
children.max=0 \
devfs_ruleset=4 \
enforce_statfs=1 \
osreldate=$RELDATE \
osrelease=$RELEASE \
persist \
securelevel=2 \
sysvmsg=disable \
sysvsem=disable \
command=/bin/sh -c "env -i TERM=$TERM tmux -u new-session -DAs default"
end
end
1 | function jz |
2 | # see https://git.io/JfHOu |
3 | set local |
4 | set MACH (sysctl -n hw.machine) |
5 | set ARCH (sysctl -n hw.machine_arch) |
6 | set DOMAIN skunkwerks.at |
7 | set RELEASE 14.2-RELEASE |
8 | set RELDATE 1402000 |
9 | set FLAVOUR $RELEASE-$MACH-$ARCH |
10 | # grab the name |
11 | set JAIL $argv[1] |
12 | # the container |
13 | set TEMPLATE /jails/templates/$FLAVOUR |
14 | set INSTANCE /jails/instances/$FLAVOUR/$JAIL |
15 | |
16 | # find the zpool for jails and jailed datasets |
17 | set ZPOOL (zfs list -Ho name /jails | cut -f 1 -d /) |
18 | |
19 | # create a /jailed dataset to contain optional per-jail jailable datasets |
20 | # this can be located on an alternative zpool but must not be mountable |
21 | zfs list -Ho name -d1 |grep /jailed\$ > /dev/null 2>&1 \ |
22 | || doas zfs create -o mountpoint=none -o canmount=off $ZPOOL/jailed |
23 | # re-fetch after possible creation |
24 | set JAILED (zfs list -Ho name -d1 | grep /jailed\$) |
25 | |
26 | # create mountpoint if missing |
27 | zfs list -Ho name $ZPOOL/jails > /dev/null 2>&1 \ |
28 | || doas zfs create -o mountpoint=/jails -p $ZPOOL/jails |
29 | |
30 | # clone a template if missing |
31 | test -d $INSTANCE \ |
32 | || doas zfs clone $ZPOOL$TEMPLATE@ready $ZPOOL$INSTANCE \ |
33 | && doas zfs snapshot $ZPOOL$INSTANCE@ready |
34 | |
35 | # add a softlink if missing |
36 | test -L /jails/tags/$JAIL || ln -s $INSTANCE /jails/tags/$JAIL |
37 | |
38 | # derive a hopefully non-clashing IP address |
39 | set IPA (echo -n $JAIL | sha512 | cut -c 1,2) |
40 | set IPB (echo -n $JAIL | sha512 | cut -c 3,4) |
41 | set IP6 $IPA$IPB |
42 | set IP (printf "%d.%d" 0x$IPA 0x$IPB) |
43 | # get the zt 6plane |
44 | set IFACE (ifconfig | sort -r | /usr/bin/egrep -o '^zt[a-z0-9]+' | head -1) |
45 | set SUBNET (ifconfig $IFACE inet6 | rg -Po 'fc\S+::' | uniq) |
46 | set ALIAS "$IFACE|$SUBNET$IP6" |
47 | # display config and try to start it |
48 | echo name=$JAIL ip=$IP ip6=$IP6 iface=$IFACE subnet=$SUBNET alias=$ALIAS |
49 | jls -j $JAIL > /dev/null 2>&1 |
50 | if test $status = 0 |
51 | doas jexec $JAIL tmux -u new-session -DAs default |
52 | else |
53 | doas jail -vcmr \ |
54 | name=$JAIL \ |
55 | path=$INSTANCE \ |
56 | exec.created="zfs jail $JAIL $JAILED/$JAIL || true" \ |
57 | exec.created="test -c $INSTANCE/dev/null || mount -t devfs devfs $INSTANCE/dev" \ |
58 | exec.created="test -c $INSTANCE/tmp || mount -t tmpfs tmpfs $INSTANCE/tmp" \ |
59 | exec.start="/bin/sh /etc/rc" \ |
60 | exec.poststop="umount $INSTANCE/tmp" \ |
61 | exec.poststop="umount $INSTANCE/dev" \ |
62 | exec.poststop="logger -p info -t jz removed $JAIL" \ |
63 | host.domainname=$DOMAIN \ |
64 | host.hostid=0 \ |
65 | host.hostname=$JAIL.$DOMAIN \ |
66 | host.hostuuid=(uuidgen) \ |
67 | ip4.addr="lo1|100.64.$IP" \ |
68 | ip6.addr="$ALIAS" \ |
69 | allow.chflags \ |
70 | allow.mount \ |
71 | allow.mount.devfs \ |
72 | allow.mount.fdescfs \ |
73 | allow.mount.nolinprocfs \ |
74 | allow.mount.nullfs \ |
75 | allow.mount.procfs \ |
76 | allow.mount.tmpfs \ |
77 | allow.mount.zfs \ |
78 | allow.nomlock \ |
79 | allow.noquotas \ |
80 | allow.noread_msgbuf \ |
81 | allow.noset_hostname \ |
82 | allow.nosocket_af \ |
83 | allow.nosysvipc \ |
84 | allow.raw_sockets \ |
85 | allow.reserved_ports \ |
86 | allow.sysvipc=1 \ |
87 | allow.novmm \ |
88 | children.max=0 \ |
89 | devfs_ruleset=4 \ |
90 | enforce_statfs=1 \ |
91 | osreldate=$RELDATE \ |
92 | osrelease=$RELEASE \ |
93 | persist \ |
94 | securelevel=2 \ |
95 | sysvmsg=disable \ |
96 | sysvsem=disable \ |
97 | command=/bin/sh -c "env -i TERM=$TERM tmux -u new-session -DAs default" |
98 | end |
99 | end |