7068086c94
Fixes #257 #104 #193 Instead of searching by full path, which is prone to fail, read full list and grep on filename.
102 lines
2.3 KiB
Text
102 lines
2.3 KiB
Text
log (){
|
|
date +"[%T] $*" | tee -a "${LOG_FILE}"
|
|
}
|
|
export -f log
|
|
|
|
bootstrap(){
|
|
local BOOTSTRAP_CMD=debootstrap
|
|
local BOOTSTRAP_ARGS=()
|
|
|
|
export http_proxy=${APT_PROXY}
|
|
|
|
if [ "$(dpkg --print-architecture)" != "armhf" ]; then
|
|
BOOTSTRAP_CMD=qemu-debootstrap
|
|
fi
|
|
|
|
BOOTSTRAP_ARGS+=(--arch armhf)
|
|
BOOTSTRAP_ARGS+=(--components "main,contrib,non-free")
|
|
BOOTSTRAP_ARGS+=(--keyring "${STAGE_DIR}/files/raspberrypi.gpg")
|
|
BOOTSTRAP_ARGS+=("$@")
|
|
|
|
capsh --drop=cap_setfcap -- "${BOOTSTRAP_CMD}" "${BOOTSTRAP_ARGS[@]}" || true
|
|
|
|
if [ -d "$2/debootstrap" ]; then
|
|
rmdir "$2/debootstrap"
|
|
fi
|
|
}
|
|
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 --exclude var/cache/apt/archives "${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
|
|
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_DEVICES
|
|
LOOP_DEVICES=$(losetup --list | grep "$(basename "${1}")" | cut -f1 -d' ')
|
|
for LOOP_DEV in ${LOOP_DEVICES}; do
|
|
if [ -n "${LOOP_DEV}" ]; then
|
|
local MOUNTED_DIR
|
|
MOUNTED_DIR=$(mount | grep "$(basename "${LOOP_DEV}")" | head -n 1 | cut -f 3 -d ' ')
|
|
if [ -n "${MOUNTED_DIR}" ] && [ "${MOUNTED_DIR}" != "/" ]; then
|
|
unmount "$(dirname "${MOUNTED_DIR}")"
|
|
fi
|
|
sleep 1
|
|
losetup -d "${LOOP_DEV}"
|
|
fi
|
|
done
|
|
}
|
|
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}/" -- -e "$@"
|
|
}
|
|
export -f on_chroot
|
|
|
|
update_issue() {
|
|
local GIT_HASH
|
|
GIT_HASH=$(git rev-parse HEAD)
|
|
echo -e "Raspberry Pi reference ${IMG_DATE}\nGenerated using ${PI_GEN}, ${PI_GEN_REPO}, ${GIT_HASH}, ${1}" > "${ROOTFS_DIR}/etc/rpi-issue"
|
|
}
|
|
export -f update_issue
|
|
|