Added Docker support (#40)
* Added Docker support - replaced necessity for devicemapper (through kpartx) by using parted and losetup with offsets - added Dockerfile - added dependency for parted and grep - added hints to README.md - common: loop through unmounts, fix shellcheck warnings * stage2: use debconf instead of console-setup patch. Fixes #41
This commit is contained in:
committed by
XECDesign
parent
bc8a74858e
commit
667318116a
@@ -1,10 +1,11 @@
|
||||
log (){
|
||||
date +"[%T] $@" | tee -a ${LOG_FILE}
|
||||
date +"[%T] $@" | tee -a "${LOG_FILE}"
|
||||
}
|
||||
export -f log
|
||||
|
||||
bootstrap(){
|
||||
local ARCH=$(dpkg --print-architecture)
|
||||
local ARCH
|
||||
ARCH=$(dpkg --print-architecture)
|
||||
|
||||
export http_proxy=${APT_PROXY}
|
||||
|
||||
@@ -22,12 +23,12 @@ bootstrap(){
|
||||
export -f bootstrap
|
||||
|
||||
copy_previous(){
|
||||
if [ ! -d ${PREV_ROOTFS_DIR} ]; then
|
||||
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}/
|
||||
mkdir -p "${ROOTFS_DIR}"
|
||||
rsync -aHAXx "${PREV_ROOTFS_DIR}/" "${ROOTFS_DIR}/"
|
||||
}
|
||||
export -f copy_previous
|
||||
|
||||
@@ -38,10 +39,11 @@ unmount(){
|
||||
DIR=$1
|
||||
fi
|
||||
|
||||
while mount | grep -q $DIR; do
|
||||
local LOCS=`mount | grep $DIR | cut -f 3 -d ' ' | sort -r`
|
||||
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
|
||||
umount "$loc"
|
||||
done
|
||||
done
|
||||
}
|
||||
@@ -50,42 +52,47 @@ 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})
|
||||
local LOOP_DEVICES
|
||||
LOOP_DEVICES=$(losetup -j "${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
|
||||
sleep 1
|
||||
kpartx -ds ${LOOP_DEV}
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
if ! mount | grep -q "$(realpath "${ROOTFS_DIR}"/sys)"; then
|
||||
mount --bind /sys "${ROOTFS_DIR}/sys"
|
||||
fi
|
||||
|
||||
capsh --drop=cap_setfcap --chroot=${ROOTFS_DIR}/ -- "$@"
|
||||
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
|
||||
local GIT_HASH
|
||||
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
|
||||
|
||||
|
Reference in New Issue
Block a user