mirror of
				https://github.com/karl0ss/AnotterKiosk.git
				synced 2025-10-25 12:43:58 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			90 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| # *sigh*, some docker containers don't seem to have sbin in their PATH
 | |
| export PATH=$PATH:/usr/sbin
 | |
| 
 | |
| SCRIPT_DIR="$(dirname "$(realpath "$0")")"
 | |
| BUILD_DIR="${SCRIPT_DIR}/work/root/"
 | |
| 
 | |
| # cleanup any previous build attempts
 | |
| sudo umount -fl "${BUILD_DIR}" || true
 | |
| sudo losetup -D /dev/loop0 || true
 | |
| sudo rm -rf "${BUILD_DIR}" || true
 | |
| sudo mkdir -p "${BUILD_DIR}"
 | |
| 
 | |
| # download a modern RaspiOS build
 | |
| if [ ! -f raspios.img.xz ]
 | |
| then
 | |
| 	wget -O raspios.img.xz "https://downloads.raspberrypi.org/raspios_lite_arm64/images/raspios_lite_arm64-2024-03-15/2024-03-15-raspios-bookworm-arm64-lite.img.xz"
 | |
| 	wget -O raspios.img.xz.sha256 "https://downloads.raspberrypi.org/raspios_lite_arm64/images/raspios_lite_arm64-2024-03-15/2024-03-15-raspios-bookworm-arm64-lite.img.xz.sha256"
 | |
| 	sed -i 's/2024-03-15-raspios-bookworm-arm64-lite.img.xz/raspios.img.xz/g' raspios.img.xz.sha256
 | |
| 	sha256sum --check --status raspios.img.xz.sha256
 | |
| 	if [ $? -ne 0 ]
 | |
| 	then
 | |
| 	    echo "downloaded raspios does not match checksum";
 | |
| 	    exit -1;
 | |
| 	fi
 | |
| 	rm raspios.img.xz.sha256
 | |
| fi
 | |
| 
 | |
| rm -f raspios.img
 | |
| xz -kd raspios.img.xz
 | |
| 
 | |
| # Repartition image
 | |
| export LIBGUESTFS_BACKEND_SETTINGS=force_tcg
 | |
| truncate -r raspios.img raspikiosk.img
 | |
| truncate -s +3G raspikiosk.img
 | |
| 
 | |
| virt-resize --expand /dev/sda2 raspios.img raspikiosk.img
 | |
| rm -f raspios.img
 | |
| 
 | |
| # Setup loop device for Raspberry Pi image (with partition scanning)
 | |
| sudo losetup -P /dev/loop0 raspikiosk.img
 | |
| 
 | |
| # Mount partitions
 | |
| sudo mount /dev/loop0p2 "${BUILD_DIR}"
 | |
| sudo mount /dev/loop0p1 "${BUILD_DIR}/boot"
 | |
| 
 | |
| # Copy the (raspberry pi-specific) skeleton files
 | |
| sudo rsync -rl --exclude ".DS_Store" --exclude "boot" "${SCRIPT_DIR}/raspberry_pi_skeleton/." "${BUILD_DIR}"
 | |
| sudo rsync -rl --exclude ".DS_Store" "${SCRIPT_DIR}/kiosk_skeleton/." "${BUILD_DIR}/kiosk_skeleton"
 | |
| sudo cp "${SCRIPT_DIR}/raspberry_pi_skeleton/boot/config.txt" "${BUILD_DIR}/boot/config.txt"
 | |
| sudo cp "${SCRIPT_DIR}/raspberry_pi_skeleton/boot/ssh" "${BUILD_DIR}/boot/ssh"
 | |
| sudo sed -i '$ s/$/ logo.nologo consoleblank=0 loglevel=0 quiet/' "${BUILD_DIR}/boot/cmdline.txt"
 | |
| 
 | |
| # Make fstab read-only
 | |
| sed -i 's/vfat    defaults/vfat    ro,defaults/g' "${BUILD_DIR}/etc/fstab"
 | |
| sed -i 's/ext4    defaults/ext4    ro,defaults/g' "${BUILD_DIR}/etc/fstab"
 | |
| 
 | |
| # Include git repo version info
 | |
| echo -n "N-AnotterKiosk Raspberry Pi version: " > "${BUILD_DIR}/version-info"
 | |
| git describe --abbrev=4 --dirty --always --tags >> "${BUILD_DIR}/version-info"
 | |
| 
 | |
| # Mount system partitions (from the build host)
 | |
| sudo mount proc -t proc -o nosuid,noexec,nodev "${BUILD_DIR}/proc/"
 | |
| sudo mount sys -t sysfs -o nosuid,noexec,nodev,ro "${BUILD_DIR}/sys/"
 | |
| sudo mount devpts -t devtmpfs -o mode=0755,nosuid "${BUILD_DIR}/dev/"
 | |
| 
 | |
| # and then actually install everything.
 | |
| sudo chroot "${BUILD_DIR}" /kiosk_skeleton/build.sh
 | |
| 
 | |
| sudo rm -r "${BUILD_DIR}/kiosk_skeleton"
 | |
| 
 | |
| cp "${BUILD_DIR}/version-info" version-info
 | |
| 
 | |
| sudo umount -fl "${BUILD_DIR}/proc"
 | |
| sudo umount -fl "${BUILD_DIR}/sys"
 | |
| sudo umount -fl "${BUILD_DIR}/dev"
 | |
| 
 | |
| sudo umount "${BUILD_DIR}/proc"
 | |
| sudo umount "${BUILD_DIR}/sys"
 | |
| sudo umount "${BUILD_DIR}/dev"
 | |
| 
 | |
| sudo umount "${BUILD_DIR}/boot"
 | |
| sudo umount "${BUILD_DIR}"
 | |
| 
 | |
| sudo losetup -D /dev/loop0
 | |
| 
 | |
| tag=$(git describe --abbrev=4 --dirty --always --tags)
 | |
| mv raspikiosk.img n-anotterkiosk-${tag}-arm64-raspberrypi.img
 | |
| pigz -4 n-anotterkiosk-${tag}-arm64-raspberrypi.img |