2016-04-11 06:21:07 +00:00
|
|
|
log (){
|
|
|
|
date +"[%T] $@" | tee -a ${LOG_FILE}
|
|
|
|
}
|
2016-05-04 14:51:41 +00:00
|
|
|
export -f log
|
2016-04-11 06:21:07 +00:00
|
|
|
|
|
|
|
bootstrap(){
|
2016-05-27 10:54:56 +00:00
|
|
|
local ARCH=$(dpkg --print-architecture)
|
2016-04-11 06:21:07 +00:00
|
|
|
|
|
|
|
export http_proxy=${APT_PROXY}
|
|
|
|
|
|
|
|
if [ "$ARCH" != "armhf" ]; then
|
2016-05-27 10:54:56 +00:00
|
|
|
local BOOTSTRAP_CMD=qemu-debootstrap
|
2016-04-11 06:21:07 +00:00
|
|
|
else
|
2016-05-27 10:54:56 +00:00
|
|
|
local BOOTSTRAP_CMD=debootstrap
|
2016-04-11 06:21:07 +00:00
|
|
|
fi
|
|
|
|
|
2016-11-14 23:55:45 +00:00
|
|
|
capsh --drop=cap_setfcap -- -c "${BOOTSTRAP_CMD} --components=main,contrib,non-free \
|
2016-04-11 06:21:07 +00:00
|
|
|
--arch armhf\
|
|
|
|
--no-check-gpg \
|
2016-11-14 23:55:45 +00:00
|
|
|
$1 $2 $3"
|
2016-04-11 06:21:07 +00:00
|
|
|
}
|
2016-05-04 14:51:41 +00:00
|
|
|
export -f bootstrap
|
2016-04-11 06:21:07 +00:00
|
|
|
|
|
|
|
copy_previous(){
|
|
|
|
if [ ! -d ${PREV_ROOTFS_DIR} ]; then
|
|
|
|
echo "Previous stage rootfs not found"
|
|
|
|
false
|
|
|
|
fi
|
|
|
|
mkdir -p ${ROOTFS_DIR}
|
2016-10-09 21:09:25 +00:00
|
|
|
rsync -aHAXx ${PREV_ROOTFS_DIR}/ ${ROOTFS_DIR}/
|
2016-04-11 06:21:07 +00:00
|
|
|
}
|
2016-05-04 14:51:41 +00:00
|
|
|
export -f copy_previous
|
2016-04-11 06:21:07 +00:00
|
|
|
|
|
|
|
unmount(){
|
|
|
|
if [ -z "$1" ]; then
|
|
|
|
DIR=$PWD
|
|
|
|
else
|
|
|
|
DIR=$1
|
|
|
|
fi
|
|
|
|
|
|
|
|
while mount | grep -q $DIR; do
|
2016-05-27 10:54:56 +00:00
|
|
|
local LOCS=`mount | grep $DIR | cut -f 3 -d ' ' | sort -r`
|
2016-04-11 06:21:07 +00:00
|
|
|
for loc in $LOCS; do
|
2016-05-04 14:51:41 +00:00
|
|
|
umount $loc
|
2016-04-11 06:21:07 +00:00
|
|
|
done
|
|
|
|
done
|
|
|
|
}
|
2016-05-04 14:51:41 +00:00
|
|
|
export -f unmount
|
|
|
|
|
|
|
|
unmount_image(){
|
|
|
|
sync
|
|
|
|
sleep 1
|
2016-05-27 10:54:56 +00:00
|
|
|
local LOOP_DEV=$(losetup -j ${1} | cut -f1 -d':')
|
2016-05-04 14:51:41 +00:00
|
|
|
if [ -n "${LOOP_DEV}" ]; then
|
2016-10-06 09:14:43 +00:00
|
|
|
local MOUNTED_DIR=$(mount | grep $(basename ${LOOP_DEV}) | head -n 1 | cut -f 3 -d ' ')
|
2016-05-27 10:54:56 +00:00
|
|
|
if [ -n "${MOUNTED_DIR}" ]; then
|
|
|
|
unmount $(dirname ${MOUNTED_DIR})
|
|
|
|
fi
|
2016-05-04 14:51:41 +00:00
|
|
|
sleep 1
|
|
|
|
kpartx -ds ${LOOP_DEV}
|
|
|
|
losetup -d ${LOOP_DEV}
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
export -f unmount_image
|
2016-04-11 06:21:07 +00:00
|
|
|
|
|
|
|
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
|
2016-04-16 14:02:48 +00:00
|
|
|
|
|
|
|
if ! mount | grep -q `realpath ${ROOTFS_DIR}/dev/pts`; then
|
|
|
|
mount --bind /dev/pts ${ROOTFS_DIR}/dev/pts
|
|
|
|
fi
|
2016-04-11 06:21:07 +00:00
|
|
|
|
|
|
|
if ! mount | grep -q `realpath ${ROOTFS_DIR}/sys`; then
|
|
|
|
mount --bind /sys ${ROOTFS_DIR}/sys
|
|
|
|
fi
|
|
|
|
|
2016-11-14 23:55:45 +00:00
|
|
|
capsh --drop=cap_setfcap --chroot=${ROOTFS_DIR}/ -- "$@"
|
2016-04-11 06:21:07 +00:00
|
|
|
}
|
2016-05-04 14:51:41 +00:00
|
|
|
export -f on_chroot
|
2016-04-11 06:21:07 +00:00
|
|
|
|
|
|
|
update_issue() {
|
2016-05-27 10:54:56 +00:00
|
|
|
local GIT_HASH=$(git rev-parse HEAD)
|
2016-05-05 13:55:53 +00:00
|
|
|
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
|
2016-04-11 06:21:07 +00:00
|
|
|
}
|
2016-05-04 14:51:41 +00:00
|
|
|
export -f update_issue
|