This commit is contained in:
62
scripts/create-profile.sh
Executable file
62
scripts/create-profile.sh
Executable file
@@ -0,0 +1,62 @@
|
||||
#!/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"
|
||||
Reference in New Issue
Block a user