2023-06-30 13:58:30 +02:00
|
|
|
#!/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
|
|
|
|
umount -fl "${BUILD_DIR}" || true
|
|
|
|
rm -rf "${BUILD_DIR}" || true
|
|
|
|
mkdir -p "${BUILD_DIR}"
|
|
|
|
rm x86kiosk.img || true
|
|
|
|
|
|
|
|
truncate -s 10G x86kiosk.img
|
|
|
|
|
|
|
|
PARTLAYOUT=$(cat <<-END
|
|
|
|
label: gpt
|
|
|
|
label-id: 3BC7D7CD-4BF8-4E92-AAEB-2ACD5F8D05AA
|
|
|
|
device: x86kiosk.img
|
|
|
|
unit: sectors
|
|
|
|
first-lba: 34
|
|
|
|
last-lba: 20971486
|
|
|
|
sector-size: 512
|
|
|
|
|
|
|
|
x86kiosk.img1 : start= 2048, size= 2095105, type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B, uuid=9C99F1BB-11A8-4BB5-82C2-555D7A38F85C, name="EFI system partition"
|
|
|
|
x86kiosk.img2 : start= 2099200, size= 18870272, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=93A9AB2C-BC29-4C6C-B6DD-1B4EDDED9A1E, name="Linux filesystem"
|
|
|
|
END
|
|
|
|
)
|
|
|
|
echo "${PARTLAYOUT}" | sfdisk x86kiosk.img
|
|
|
|
|
|
|
|
# Setup loop device for x86 image (with partition scanning)
|
|
|
|
ld=$(sudo losetup -P --show -f x86kiosk.img)
|
|
|
|
|
|
|
|
# Create filesystems
|
2023-06-30 14:35:02 +02:00
|
|
|
sudo mkfs.ext4 "${ld}p2"
|
|
|
|
sudo mkfs.fat -F 32 "${ld}p1"
|
2023-06-30 13:58:30 +02:00
|
|
|
|
|
|
|
# Mount partitions
|
|
|
|
sudo mount "${ld}p2" "${BUILD_DIR}"
|
|
|
|
sudo mkdir "${BUILD_DIR}/boot"
|
|
|
|
sudo mount "${ld}p1" "${BUILD_DIR}/boot"
|
|
|
|
|
|
|
|
# Debootstrap debian
|
|
|
|
sudo debootstrap --include=linux-image-amd64,grub-efi,sudo --arch amd64 bookworm "${BUILD_DIR}" http://deb.debian.org/debian/
|
|
|
|
|
|
|
|
# Copy the skeleton files
|
|
|
|
sudo rsync -a "${SCRIPT_DIR}/x86_skeleton/." "${BUILD_DIR}"
|
|
|
|
sudo rsync -a "${SCRIPT_DIR}/kiosk_skeleton/." "${BUILD_DIR}/kiosk_skeleton"
|
|
|
|
|
|
|
|
# Create fstab
|
|
|
|
fat_uuid=$(lsblk -no UUID "${ld}p1")
|
|
|
|
ext_uuid=$(lsblk -no UUID "${ld}p2")
|
|
|
|
|
|
|
|
echo "UUID=${fat_uuid} /boot vfat ro,defaults 0 2" | sudo tee "${BUILD_DIR}/etc/fstab"
|
|
|
|
echo "UUID=${ext_uuid} / ext4 ro,defaults,noatime 0 1" | sudo tee -a "${BUILD_DIR}/etc/fstab"
|
|
|
|
|
|
|
|
# Include git repo version info
|
2023-06-30 14:35:02 +02:00
|
|
|
echo -n "AnotterKiosk x86 version: " > "${BUILD_DIR}/version-info"
|
2023-06-30 13:58:30 +02:00
|
|
|
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}" /setup.sh
|
|
|
|
sudo chroot "${BUILD_DIR}" /kiosk_skeleton/build.sh
|
|
|
|
|
|
|
|
sudo rm -r "${BUILD_DIR}/kiosk_skeleton"
|
|
|
|
|
2023-06-30 14:35:02 +02:00
|
|
|
cp "${BUILD_DIR}/version-info" version-info
|
2023-06-30 13:58:30 +02:00
|
|
|
|
|
|
|
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 "${ld}"
|
2023-06-30 14:35:02 +02:00
|
|
|
|
|
|
|
tag=$(git describe --abbrev=4 --dirty --always --tags)
|
|
|
|
mv x86kiosk.img anotterkiosk-${tag}-x86.img
|
|
|
|
pigz -4 anotterkiosk-${tag}-x86.img
|