63 lines
4.1 KiB
Bash
Executable File
63 lines
4.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -Eeuo pipefail
|
|
ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)
|
|
DEST=${1:-$ROOT/build/profile}
|
|
[[ -d /usr/share/archiso/configs/releng ]] || { echo 'Install archiso first.' >&2; exit 1; }
|
|
[[ ! -e $DEST ]] || { echo "Profile already exists: $DEST" >&2; exit 1; }
|
|
bash "$ROOT/scripts/build-release.sh"
|
|
mkdir -p "$(dirname "$DEST")"
|
|
cp -a /usr/share/archiso/configs/releng "$DEST"
|
|
for pkg in cage seatd xorg-xwayland mesa vulkan-radeon vulkan-intel libglvnd fontconfig ttf-dejavu networkmanager curl ca-certificates sqlite smartmontools ffmpeg gcc glmark2 mpv pciutils util-linux e2fsprogs stress-ng memtester alsa-utils v4l-utils dmidecode python usbutils xdg-utils firefox; do
|
|
grep -qxF "$pkg" "$DEST/packages.x86_64" || echo "$pkg" >> "$DEST/packages.x86_64"
|
|
done
|
|
mkdir -p "$DEST/airootfs/usr/local/bin" "$DEST/airootfs/usr/local/lib/pc-intake" "$DEST/airootfs/etc/systemd/system/multi-user.target.wants"
|
|
install -m755 "$ROOT/scanner/target/release/pc-intake" "$DEST/airootfs/usr/local/bin/pc-intake"
|
|
install -m755 "$ROOT/controller/target/release/intake-controller" "$DEST/airootfs/usr/local/bin/intake-controller"
|
|
install -m755 "$ROOT/gui/target/release/intake-gui" "$DEST/airootfs/usr/local/bin/intake-gui"
|
|
install -m755 "$ROOT/scripts/intake-session.sh" "$DEST/airootfs/usr/local/bin/intake-session"
|
|
# The GUI must run in a real logind session, not a root system service attached to a TTY.
|
|
install -m755 "$ROOT/live/intake-prepare.sh" "$DEST/airootfs/usr/local/bin/intake-prepare"
|
|
install -m755 "$ROOT/live/intake-login.sh" "$DEST/airootfs/usr/local/bin/intake-login"
|
|
install -m644 "$ROOT/live/intake-prepare.service" "$DEST/airootfs/etc/systemd/system/intake-prepare.service"
|
|
mkdir -p "$DEST/airootfs/etc/systemd/system/getty@tty1.service.d"
|
|
install -m644 "$ROOT/live/autologin.conf" "$DEST/airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf"
|
|
ln -s ../intake-prepare.service "$DEST/airootfs/etc/systemd/system/multi-user.target.wants/intake-prepare.service"
|
|
rm -f "$DEST/airootfs/etc/systemd/system/getty@tty1.service"
|
|
rm -f "$DEST/airootfs/etc/systemd/system/multi-user.target.wants/pc-intake.service"
|
|
rm -f "$DEST/airootfs/etc/systemd/system/pc-intake.service"
|
|
# Archiso can override copied file modes. Record explicit permissions too.
|
|
cat >> "$DEST/profiledef.sh" <<'EOF'
|
|
file_permissions+=(
|
|
["/usr/local/bin/intake-session"]="0:0:755"
|
|
["/usr/local/bin/pc-intake"]="0:0:755"
|
|
["/usr/local/bin/intake-controller"]="0:0:755"
|
|
["/usr/local/bin/intake-gui"]="0:0:755"
|
|
["/usr/local/bin/intake-prepare"]="0:0:755"
|
|
["/usr/local/bin/intake-login"]="0:0:755"
|
|
)
|
|
EOF
|
|
for path in usr/local/bin/intake-session usr/local/bin/pc-intake usr/local/bin/intake-controller usr/local/bin/intake-gui usr/local/bin/intake-prepare usr/local/bin/intake-login; do
|
|
test -x "$DEST/airootfs/$path" || { echo "FATAL: missing executable $path" >&2; exit 1; }
|
|
done
|
|
# Optional operator-approved provisioning at build time; ISO secrets are extractable.
|
|
if [[ ${CSR_EMBED_INVENTORY_CONFIG:-0} == 1 ]]; then
|
|
: "${CSR_PRIVATE_CONFIG_DIR:?Set CSR_PRIVATE_CONFIG_DIR to local private folder}"
|
|
test -f "$CSR_PRIVATE_CONFIG_DIR/inventory.json"
|
|
test -f "$CSR_PRIVATE_CONFIG_DIR/inventory-api-key"
|
|
mkdir -p "$DEST/airootfs/etc/csr-intake"
|
|
install -m600 "$CSR_PRIVATE_CONFIG_DIR/inventory.json" "$DEST/airootfs/etc/csr-intake/inventory.json"
|
|
install -m600 "$CSR_PRIVATE_CONFIG_DIR/inventory-api-key" "$DEST/airootfs/etc/csr-intake/inventory-api-key"
|
|
cat >> "$DEST/profiledef.sh" <<'PERMS'
|
|
file_permissions+=( ["/etc/csr-intake/inventory.json"]="0:0:600" ["/etc/csr-intake/inventory-api-key"]="0:0:600" )
|
|
PERMS
|
|
fi
|
|
echo "Profile created at $DEST"
|
|
|
|
# Keep NetworkManager running in the live image for LAN/WLAN diagnostics.
|
|
mkdir -p "$DEST/airootfs/etc/systemd/system/multi-user.target.wants"
|
|
ln -sfn /usr/lib/systemd/system/NetworkManager.service "$DEST/airootfs/etc/systemd/system/multi-user.target.wants/NetworkManager.service"
|
|
|
|
mkdir -p "$DEST/airootfs/etc/csr-intake"
|
|
install -m644 "$ROOT/build/release.json" "$DEST/airootfs/etc/csr-intake/release.json"
|
|
python3 "$ROOT/scripts/release-manifest.py" --verify-profile "$DEST"
|