127 lines
3.0 KiB
Plaintext
Raw Normal View History

2016-04-11 07:21:07 +01:00
log (){
2018-03-02 20:08:24 +00:00
date +"[%T] $*" | tee -a "${LOG_FILE}"
2016-04-11 07:21:07 +01:00
}
2016-05-04 15:51:41 +01:00
export -f log
2016-04-11 07:21:07 +01:00
bootstrap(){
local BOOTSTRAP_CMD=debootstrap
local BOOTSTRAP_ARGS=()
2016-04-11 07:21:07 +01:00
export http_proxy=${APT_PROXY}
BOOTSTRAP_ARGS+=(--arch armhf)
BOOTSTRAP_ARGS+=(--components "main,contrib,non-free")
BOOTSTRAP_ARGS+=(--keyring "${STAGE_DIR}/files/raspberrypi.gpg")
BOOTSTRAP_ARGS+=(--exclude=info)
BOOTSTRAP_ARGS+=(--include=ca-certificates)
BOOTSTRAP_ARGS+=("$@")
printf -v BOOTSTRAP_STR '%q ' "${BOOTSTRAP_ARGS[@]}"
setarch linux32 capsh $CAPSH_ARG -- -c "'${BOOTSTRAP_CMD}' $BOOTSTRAP_STR" || true
2021-06-22 15:48:09 +01:00
if [ -d "$2/debootstrap" ] && ! rmdir "$2/debootstrap"; then
cp "$2/debootstrap/debootstrap.log" "${STAGE_WORK_DIR}"
log "bootstrap failed: please check ${STAGE_WORK_DIR}/debootstrap.log"
return 1
fi
2016-04-11 07:21:07 +01:00
}
2016-05-04 15:51:41 +01:00
export -f bootstrap
2016-04-11 07:21:07 +01:00
copy_previous(){
if [ ! -d "${PREV_ROOTFS_DIR}" ]; then
2016-04-11 07:21:07 +01:00
echo "Previous stage rootfs not found"
false
fi
mkdir -p "${ROOTFS_DIR}"
2017-03-30 17:51:23 +01:00
rsync -aHAXx --exclude var/cache/apt/archives "${PREV_ROOTFS_DIR}/" "${ROOTFS_DIR}/"
2016-04-11 07:21:07 +01:00
}
2016-05-04 15:51:41 +01:00
export -f copy_previous
2016-04-11 07:21:07 +01:00
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)
2016-04-11 07:21:07 +01:00
for loc in $LOCS; do
umount "$loc"
2016-04-11 07:21:07 +01:00
done
done
}
2016-05-04 15:51:41 +01:00
export -f unmount
unmount_image(){
sync
sleep 1
LOOP_DEVICE=$(losetup --list | grep "$1" | cut -f1 -d' ')
if [ -n "$LOOP_DEVICE" ]; then
for part in "$LOOP_DEVICE"p*; do
if DIR=$(findmnt -n -o target -S "$part"); then
unmount "$DIR"
fi
done
losetup -d "$LOOP_DEVICE"
fi
2016-05-04 15:51:41 +01:00
}
export -f unmount_image
2016-04-11 07:21:07 +01:00
on_chroot() {
if ! mount | grep -q "$(realpath "${ROOTFS_DIR}"/proc)"; then
mount -t proc proc "${ROOTFS_DIR}/proc"
2016-04-11 07:21:07 +01:00
fi
if ! mount | grep -q "$(realpath "${ROOTFS_DIR}"/dev)"; then
mount --bind /dev "${ROOTFS_DIR}/dev"
2016-04-11 07:21:07 +01:00
fi
if ! mount | grep -q "$(realpath "${ROOTFS_DIR}"/dev/pts)"; then
mount --bind /dev/pts "${ROOTFS_DIR}/dev/pts"
fi
2016-04-11 07:21:07 +01:00
if ! mount | grep -q "$(realpath "${ROOTFS_DIR}"/sys)"; then
mount --bind /sys "${ROOTFS_DIR}/sys"
2016-04-11 07:21:07 +01:00
fi
2023-03-29 07:55:37 +01:00
if ! mount | grep -q "$(realpath "${ROOTFS_DIR}"/run)"; then
mount -t tmpfs tmpfs "${ROOTFS_DIR}/run"
fi
if ! mount | grep -q "$(realpath "${ROOTFS_DIR}"/tmp)"; then
mount -t tmpfs tmpfs "${ROOTFS_DIR}/tmp"
fi
setarch linux32 capsh $CAPSH_ARG "--chroot=${ROOTFS_DIR}/" -- -e "$@"
2016-04-11 07:21:07 +01:00
}
2016-05-04 15:51:41 +01:00
export -f on_chroot
2016-04-11 07:21:07 +01:00
update_issue() {
echo -e "${PI_GEN_RELEASE} ${IMG_DATE}\nGenerated using ${PI_GEN}, ${PI_GEN_REPO}, ${GIT_HASH}, ${1}" > "${ROOTFS_DIR}/etc/rpi-issue"
2016-04-11 07:21:07 +01:00
}
2016-05-04 15:51:41 +01:00
export -f update_issue
ensure_next_loopdev() {
local loopdev
loopdev="$(losetup -f)"
loopmaj="$(echo "$loopdev" | sed -E 's/.*[^0-9]*?([0-9]+)$/\1/')"
[[ -b "$loopdev" ]] || mknod "$loopdev" b 7 "$loopmaj"
}
export -f ensure_next_loopdev
ensure_loopdev_partitions() {
local line
local partition
local majmin
lsblk -r -n -o "NAME,MAJ:MIN" "$1" | grep -v "^${1#/dev/} " | while read -r line; do
partition="${line%% *}"
majmin="${line#* }"
if [ ! -b "/dev/$partition" ]; then
mknod "/dev/$partition" b "${majmin%:*}" "${majmin#*:}"
fi
done
}
export -f ensure_loopdev_partitions