#!/usr/bin/env bash # Builds the Das OS live ISO with void-mklive from the profile in live/. # Runs inside the builder container, see scripts/builder.sh. set -euo pipefail repo=/work/out/hostdir/binpkgs version=$(< /work/VERSION) iso=/work/out/iso/dasos-${version}-x86_64.iso if ! compgen -G "$repo/*-repodata" >/dev/null; then echo "build-iso: the local package repository is missing, run 'make packages' first" >&2 exit 1 fi # Reads a list file: one item per line, '#' starts a comment read_list() { sed -e 's/#.*//' -e '/^[[:space:]]*$/d' "$1" | xargs } work=$(mktemp -d) mkdir -p /work/out/iso trap 'rm -rf "$work"; chown -R "$HOST_UID:$HOST_GID" /work/out/iso' EXIT # Root file system overlay: static files from live/include plus generated links include=$work/include cp -a /work/live/include "$include" ln -sf /usr/share/zoneinfo/Europe/Kyiv "$include/etc/localtime" # PipeWire as the sound server, wired up the same way as Void's own live images mkdir -p "$include"/etc/xdg/autostart "$include"/etc/pipewire/pipewire.conf.d "$include"/etc/alsa/conf.d ln -sf /usr/share/applications/pipewire.desktop "$include"/etc/xdg/autostart/ ln -sf /usr/share/examples/wireplumber/10-wireplumber.conf "$include"/etc/pipewire/pipewire.conf.d/ ln -sf /usr/share/examples/pipewire/20-pipewire-pulse.conf "$include"/etc/pipewire/pipewire.conf.d/ ln -sf /usr/share/alsa/alsa.conf.d/50-pipewire.conf "$include"/etc/alsa/conf.d/ ln -sf /usr/share/alsa/alsa.conf.d/99-pipewire-default.conf "$include"/etc/alsa/conf.d/ # The installer shows the Das OS version, which lives in VERSION, not in the package branding=usr/share/calamares/branding/dasos mkdir -p "$include/$branding" sed -e "s/@VERSION@/$version/g" -e "s/@SHORT_VERSION@/${version%.*}/g" \ "/work/srcpkgs/das-installer/files/calamares/branding/dasos/branding.desc" >"$include/$branding/branding.desc" # mklive's dracut module creates the live user, hostname and passwords at boot. # Rebrand its defaults in this container's copy (the image itself stays untouched). adduser=/opt/void-mklive/dracut/vmklive/adduser.sh for pattern in 'echo void-live >' 'voidlinux'; do if ! grep -q "$pattern" "$adduser"; then echo "build-iso: '$pattern' not found in $adduser, mklive changed; update this script" >&2 exit 1 fi done sed -i -e 's/echo void-live >/echo dasos >/' -e 's/voidlinux/live/g' "$adduser" # mklive copies its /etc/issue (Void live logins) into the image, and the # installer copies the image to disk, so use a neutral Das OS one. cp /work/live/branding/issue /opt/void-mklive/data/issue rsvg-convert /work/live/branding/splash.svg --output "$work/splash.png" rm -f "$iso" cd /opt/void-mklive SPLASH_IMAGE=$work/splash.png ./mklive.sh \ -a x86_64 \ -r "$repo" \ -c /var/cache/xbps \ -p "$(read_list /work/live/packages.x86_64)" \ -S "$(read_list /work/live/services)" \ -I "$include" \ -l uk_UA.UTF-8 \ -k us \ -T "Das OS" \ -C "live.user=live quiet loglevel=3" \ -o "$iso"