#!/usr/bin/env bash # Build a Furtka live ISO. # # From the repo root or from iso/ on any host with Docker: # ./iso/build.sh # # The build runs inside a privileged `archlinux:latest` container because # mkarchiso needs root + loop mounts + an Arch package manager, which # Ubuntu doesn't provide natively. Output ISO goes to iso/out/. set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" OUT_DIR="$SCRIPT_DIR/out" if [[ "${FURTKA_ISO_INNER:-0}" != "1" ]]; then mkdir -p "$OUT_DIR" echo "==> Launching build container" exec docker run --rm --privileged \ -v "$REPO_ROOT:/work" \ -w /work \ -e FURTKA_ISO_INNER=1 \ archlinux:latest \ bash /work/iso/build.sh fi # ---- inside the container from here on ---- echo "==> Syncing pacman, installing archiso" pacman -Syu --noconfirm --needed archiso PROFILE_SRC="/usr/share/archiso/configs/releng" PROFILE_WORK="/tmp/furtka-profile" BUILD_WORK="/tmp/furtka-build" OUT_IN_CONTAINER="/work/iso/out" rm -rf "$PROFILE_WORK" "$BUILD_WORK" cp -a "$PROFILE_SRC" "$PROFILE_WORK" echo "==> Overlaying Furtka customizations" cat "$SCRIPT_DIR/overlay/packages.extra" >> "$PROFILE_WORK/packages.x86_64" cat "$SCRIPT_DIR/overlay/profiledef.sh" >> "$PROFILE_WORK/profiledef.sh" cp -a "$SCRIPT_DIR/overlay/airootfs/." "$PROFILE_WORK/airootfs/" mkdir -p "$PROFILE_WORK/airootfs/opt/furtka" cp -a "$REPO_ROOT/webinstaller/." "$PROFILE_WORK/airootfs/opt/furtka/" rm -rf "$PROFILE_WORK/airootfs/opt/furtka/__pycache__" mkdir -p "$PROFILE_WORK/airootfs/etc/systemd/system/avahi-daemon.service.d" ln -sf /usr/lib/systemd/system/avahi-daemon.service \ "$PROFILE_WORK/airootfs/etc/systemd/system/multi-user.target.wants/avahi-daemon.service" echo "==> Building ISO (mkarchiso)" mkdir -p "$OUT_IN_CONTAINER" mkarchiso -v -w "$BUILD_WORK" -o "$OUT_IN_CONTAINER" "$PROFILE_WORK" echo echo "==> Done. ISO(s) in $OUT_IN_CONTAINER (on host: iso/out/):" ls -lh "$OUT_IN_CONTAINER"