diff options
Diffstat (limited to 'src/backend/jailfuncs.sh')
-rw-r--r-- | src/backend/jailfuncs.sh | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/src/backend/jailfuncs.sh b/src/backend/jailfuncs.sh new file mode 100644 index 0000000..37b382b --- /dev/null +++ b/src/backend/jailfuncs.sh @@ -0,0 +1,113 @@ +#!/usr/bin/env bash + +checkifroot () { + if [[ "$(whoami)" != root ]] ; then + eerror "I won't do that, unless you're root!" + exit 1 + fi +} + +checkkerncfg () { + if [[ $(zgrep 'CONFIG_OVERLAY_FS=' /proc/config.gz) && $(zgrep "CONFIG_SQUASHFS=" /proc/config.gz) && $(zgrep "CONFIG_BLK_DEV_LOOP=" /proc/config.gz) ]] ; then + einfo "Kernel config OK, moving on" + else + eerror "I won't do that with the current kernel" + eerror "I want a kernel with OVERLAYFS && SQUASHFS && LOOP DEVICES enabled" + exit 1 + fi +} + +checkiflive () { + if [[ -L /dev/mapper/live-base ]] ; then + eerror "I won't do that on a live system" + exit 1 + fi +} + +checkjailsum () { + if [[ -f "$jailx64" && -f "$jailx64sum" ]] ; then + if [[ "$(md5sum -c "$jailx64sum")" ]] ; then + einfo "Jail integrity OK, moving on" + else + eerror "I won't do that with a corrupted jail" + exit 1 + fi + else + eerror "I won't do that with a missing jail" + exit 1 + fi +} + +jaildkmsbuild () { + checkifroot + if [[ -x /usr/sbin/dkms ]] ; then + for i in $(dkms status | cut -d " " -f1,2 | sed -e 's/,//g' | sed -e 's/ /\//g' | sed -e 's/://g') ; do + dkms install $i + done + fi +} + +jailpkgprep () { + while : true ; do + if [[ ! -d "$ropath" && ! -d "$rwpath" && ! -d "$workpath" && ! -d "$overlaypath" ]] ; then + for i in "$ropath" "$rwpath" "$workpath" "$overlaypath" ; do + mkdir "$i" + done + jailpkgmnt + break + elif [[ -d "$ropath" && -d "$rwdpath" && -d "$workpath" && -d "$overlaypath" ]] ; then + jailpkgdmnt + for i in "$ropath" "$rwpath" "$workpath" "$overlaypath" ; do + rm -rf "$i" + done + continue + fi + done +} + +jailpkgmnt () { + mount -t squashfs "$jailx64" "$ropath" + mount -t overlay -o lowerdir="$ropath",upperdir="$rwpath",workdir="$workpath" overlay "$overlaypath" + mount -o bind packages "$overlaypath"/var/cache/packages + mount -o bind distfiles "$overlaypath"/var/cache/distfiles + mount -t proc proc "$overlaypath"/proc + mount -t sysfs sysfs "$overlaypath"/sys + mount -t devtmpfs -o relatime,size=3055348k,nr_inodes=763837,mode=755 none "$overlaypath"/dev + mount -t devpts -o nosuid,noexec,relatime,gid=5,mode=620 none "$overlaypath"/dev/pts + mount -t tmpfs -o nosuid,nodev none "$overlaypath"/dev/shm +} + +jailpkgdmnt () { + umount -l "$overlaypath"/proc > /dev/null 2>&1 + umount -l "$overlaypath"/sys > /dev/null 2>&1 + umount -l "$overlaypath"/dev/pts > /dev/null 2>&1 + umount -l "$overlaypath"/dev/shm > /dev/null 2>&1 + umount -l "$overlaypath"/dev > /dev/null 2>&1 + umount -l "$overlaypath"/var/cache/packages > /dev/null 2>&1 + umount -l "$overlaypath"/var/cache/distfiles > /dev/null 2>&1 + umount -l "$overlaypath" > /dev/null 2>&1 + umount -l "$ropath" > /dev/null 2>&1 +} + +jailpkgsrcmode () { + chroot "$overlaypath" su - "$jailuser" -c "$jailsrcmodecmd" +} + +jailpkgbuild () { + chroot "$overlaypath" su - "$jailuser" -c "$jailportagecmd" +} + +jailpkgstart () { + einfo "Oh no, I'm in jail!" + chroot "$overlaypath" su - "$jailuser" +} + +jailmakepkg () { + checkifroot + checkjailsum + jailpkgprep + jailpkgsrcmode + jailpkgbuild + jailpkgstart + jailpkgdmnt +} |