#!/bin/bash # Runs INSIDE the docker container (as root). Invoked by iso/build-live-iso.sh. # Expects the project bind-mounted at /work and the cache at /cache. # # Required env (set by build-live-iso.sh): # ARCH, REPO_URL, KEYMAP, LOCALE, ISO_PKGS, ISO_TITLE, OUT_ISO_REL, # INCLUDE_DIR_REL set -Eeuo pipefail : "${ARCH:?}"; : "${REPO_URL:?}"; : "${KEYMAP:?}"; : "${LOCALE:?}" : "${ISO_PKGS:?}"; : "${ISO_TITLE:?}"; : "${OUT_ISO_REL:?}" : "${INCLUDE_DIR_REL:?}" CACHE_DIR=/cache PROJECT_DIR=/work MKLIVE_DIR="$CACHE_DIR/void-mklive" INCLUDE_DIR="$PROJECT_DIR/$INCLUDE_DIR_REL" OUT_ISO="$PROJECT_DIR/$OUT_ISO_REL" export PATH="$CACHE_DIR/xbps-static/usr/bin:$PATH" [[ -d "$MKLIVE_DIR" ]] || { echo "ERROR: $MKLIVE_DIR missing"; exit 1; } [[ -d "$INCLUDE_DIR" ]] || { echo "ERROR: $INCLUDE_DIR missing"; exit 1; } command -v xbps-install.static >/dev/null \ || { echo "ERROR: xbps-install.static not on PATH"; exit 1; } mkdir -p "$(dirname "$OUT_ISO")" # Compile dconf system-db inside the include dir so it ships compiled. # Debian's dconf-cli provides 'dconf compile '. if command -v dconf >/dev/null 2>&1 && [[ -d "$INCLUDE_DIR/etc/dconf/db/local.d" ]]; then dconf compile "$INCLUDE_DIR/etc/dconf/db/local" \ "$INCLUDE_DIR/etc/dconf/db/local.d" 2>/dev/null \ && echo "dconf: compiled system-db/local" \ || echo "dconf: compile failed (non-fatal)" fi cd "$MKLIVE_DIR" _cleanup_mklive_builds() { local d sub for d in "$MKLIVE_DIR"/mklive-build.*/; do [[ -d "$d" ]] || continue for sub in tmp-rootfs/sys tmp-rootfs/proc tmp-rootfs/dev tmp-rootfs/run \ image/rootfs/sys image/rootfs/proc image/rootfs/dev image/rootfs/run; do [[ -d "$d$sub" ]] && umount -R --lazy "$d$sub" 2>/dev/null || true done rm -rf "$d" 2>/dev/null || true done } trap _cleanup_mklive_builds EXIT ./mklive.sh \ -a "$ARCH" \ -r "$REPO_URL" \ -r "${REPO_URL%/current}/current/nonfree" \ -c "$CACHE_DIR/xbps-live-pkgs" \ -H "$CACHE_DIR/xbps-host-pkgs" \ -k "$KEYMAP" \ -l "$LOCALE" \ -T "$ISO_TITLE" \ -p "$ISO_PKGS" \ -I "$INCLUDE_DIR" \ -C "${BOOT_CMDLINE:-}" \ -o "$OUT_ISO" chown "$(stat -c '%u:%g' "$PROJECT_DIR")" "$OUT_ISO" "${OUT_ISO}".* 2>/dev/null || true