Skip to content
Snippets Groups Projects
common 2.58 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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" ] && [ "$(dpkg --print-architecture)" !=  "arm64" ]; then
    
    		BOOTSTRAP_CMD=qemu-debootstrap
    	fi
    
    
    	BOOTSTRAP_ARGS+=(--arch arm64)
    	BOOTSTRAP_ARGS+=(--include gnupg)
    
    	BOOTSTRAP_ARGS+=(--components "main,contrib,non-free")
    
    	#BOOTSTRAP_ARGS+=(--keyring "${STAGE_DIR}/files/raspberrypi.gpg")
    	BOOTSTRAP_ARGS+=(--exclude=info)
    
    	BOOTSTRAP_ARGS+=("$@")
    	printf -v BOOTSTRAP_STR '%q ' "${BOOTSTRAP_ARGS[@]}"
    
    
    	capsh --drop=cap_setfcap -- -c "'${BOOTSTRAP_CMD}' $BOOTSTRAP_STR" || true
    
    
    	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
    }
    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
    
    
    Daniel Müller's avatar
    Daniel Müller committed
    	capsh --drop=cap_setfcap "--chroot=${ROOTFS_DIR}/" -- -e "$@"
    
    }
    export -f on_chroot
    
    update_issue() {
    	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