aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/common
blob: 0920fb0bd056e2c9bfdc77ad0cc9c3d26900b5fa (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
log (){
	date +"[%T] $@" | tee -a ${LOG_FILE}
}
export -f log

bootstrap(){
	local ARCH=$(dpkg --print-architecture)

	export http_proxy=${APT_PROXY}

	if [ "$ARCH" !=  "armhf" ]; then
		local BOOTSTRAP_CMD=qemu-debootstrap
	else
		local BOOTSTRAP_CMD=debootstrap
	fi

	capsh --drop=cap_setfcap -- -c "${BOOTSTRAP_CMD} --components=main,contrib,non-free \
		--arch armhf\
		--no-check-gpg \
		$1 $2 $3"
}
export -f bootstrap

copy_previous(){
	if [ ! -d ${PREV_ROOTFS_DIR} ]; then
		echo "Previous stage rootfs not found"
		false
	fi
	mkdir -p ${ROOTFS_DIR}
	rsync -aHAXx ${PREV_ROOTFS_DIR}/ ${ROOTFS_DIR}/
}
export -f copy_previous

unmount(){
	if [ -z "$1" ]; then
		DIR=$PWD
	else
		DIR=$1
	fi

	while mount | grep -q $DIR; do
		local LOCS=`mount | grep $DIR | cut -f 3 -d ' ' | sort -r`
		for loc in $LOCS; do
			umount $loc
		done
	done
}
export -f unmount

unmount_image(){
	sync
	sleep 1
	local LOOP_DEV=$(losetup -j ${1} | cut -f1 -d':')
	if [ -n "${LOOP_DEV}" ]; then
		local MOUNTED_DIR=$(mount | grep $(basename ${LOOP_DEV}) | head -n 1 | cut -f 3 -d ' ')
		if [ -n "${MOUNTED_DIR}" ]; then
			unmount $(dirname ${MOUNTED_DIR})
		fi
		sleep 1
		kpartx -ds ${LOOP_DEV}
		losetup -d ${LOOP_DEV}
	fi
}
export -f unmount_image

on_chroot() {
	if ! mount | grep -q `realpath ${ROOTFS_DIR}/proc`; then
		mount -t proc proc ${ROOTFS_DIR}/proc
	fi

	if ! mount | grep -q `realpath ${ROOTFS_DIR}/dev`; then
		mount --bind /dev ${ROOTFS_DIR}/dev
	fi
	
	if ! mount | grep -q `realpath ${ROOTFS_DIR}/dev/pts`; then
		mount --bind /dev/pts ${ROOTFS_DIR}/dev/pts
	fi

	if ! mount | grep -q `realpath ${ROOTFS_DIR}/sys`; then
		mount --bind /sys ${ROOTFS_DIR}/sys
	fi

	capsh --drop=cap_setfcap --chroot=${ROOTFS_DIR}/ -- "$@"
}
export -f on_chroot

update_issue() {
	local GIT_HASH=$(git rev-parse HEAD)
	echo -e "Raspberry Pi reference ${IMG_DATE}\nGenerated using pi-gen, https://github.com/RPi-Distro/pi-gen, ${GIT_HASH}, ${1}" > ${ROOTFS_DIR}/etc/rpi-issue
}
export -f update_issue