Files
Das-OS/scripts/container/build-packages.sh
T
dasandClaude Opus 5.5 ecced4e3f4 Stage 4: Calamares installer and Btrfs snapshots (0.2.0)
- Package Calamares 3.4.3 (Qt6, widgets UI) with xbps-src.
- das-installer: Calamares setup for Void/runit with Das OS branding and
  slides. It copies the clean live image (live-base), builds locales and the
  host-only initramfs, rewrites kernels without sparse tails (GRUB 2.12 cannot
  read Btrfs holes at the end of a file), then removes itself.
- das-snapshots: flat Btrfs layout (@, @home, @snapshots, @var_log,
  @var_cache_xbps), snapper with hourly snapshots via cronie, grub-btrfs menu,
  snapper-rollback, and a dracut module that boots read-only snapshots with
  a RAM overlay.
- das-settings 0.2.0: start LightDM with the system locale.
- Live image: GRUB, efibootmgr and the new packages; Das OS /etc/issue.
- Build: wipe stale destdirs before building packages.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 08:59:09 +03:00

63 lines
2.1 KiB
Bash
Executable File

#!/usr/bin/env bash
# Builds every template in srcpkgs/ with xbps-src into the local repository
# out/hostdir/binpkgs. Runs inside the builder container, see scripts/builder.sh.
#
# xbps-src needs the whole void-packages tree (build styles, shared hooks), so our
# templates are overlaid onto a shallow clone of it in out/void-packages.
set -euo pipefail
vp=/work/out/void-packages
hostdir=/work/out/hostdir
# xbps-src refuses to run as root. Like Void's own CI, build as an unprivileged
# member of xbuilder (allowed to use xbps-uchroot); the host's UID keeps out/ owned by the user.
useradd --uid "$HOST_UID" --groups xbuilder --no-create-home builder
as_builder() {
sudo --preserve-env=HOME -u builder "$@"
}
export HOME=/tmp
mkdir -p "$hostdir"
chown "$HOST_UID:$HOST_GID" /work/out "$hostdir"
if [[ -d $vp/.git ]]; then
echo "==> Updating void-packages"
as_builder git -C "$vp" fetch --quiet --depth 1 origin master
as_builder git -C "$vp" reset --quiet --hard FETCH_HEAD
as_builder git -C "$vp" clean --quiet -fd srcpkgs
else
echo "==> Cloning void-packages"
as_builder git clone --quiet --depth 1 https://github.com/void-linux/void-packages "$vp"
fi
cat > "$vp/etc/conf" <<CONF
XBPS_CHROOT_CMD=uchroot
XBPS_MAKEJOBS=$(nproc)
CONF
names=()
for dir in /work/srcpkgs/*/; do
name=$(basename "$dir")
if git -C "$vp" cat-file -e "HEAD:srcpkgs/$name/template" 2>/dev/null; then
echo "warning: $name is now in void-packages, consider dropping our template" >&2
fi
rm -rf "$vp/srcpkgs/$name"
as_builder cp -rL "$dir" "$vp/srcpkgs/$name"
names+=("$name")
done
cd "$vp"
# The bootstrapped masterdir stays in out/void-packages, so later builds skip this step
if [[ ! -f masterdir-x86_64/.xbps_chroot_init ]]; then
as_builder ./xbps-src -H "$hostdir" binary-bootstrap
fi
# A failed build leaves its destdir behind, and the next build of that package
# (also as a dependency of another one) would package the stale files
rm -rf masterdir-x86_64/destdir/*
for name in "${names[@]}"; do
echo "==> Building $name"
as_builder ./xbps-src -H "$hostdir" -f pkg "$name"
done
echo "==> Repository: $hostdir/binpkgs"
ls -1 "$hostdir"/binpkgs/*.xbps