summaryrefslogtreecommitdiff
path: root/src/backend/jailfuncs.sh
blob: 37b382bc1dcb28db91cd3b47f363f4f65a1926de (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
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
}