017d3a4341
If proc is mounted in rootfs (e.g., via chroot), rsync will try copying kcore when permitted to cross file system boundaries.
92 lines
1.9 KiB
Plaintext
92 lines
1.9 KiB
Plaintext
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
|
|
|
|
${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
|
|
|
|
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
|