clawdie-iso/installerconfig

92 lines
3.2 KiB
Text

PARTITIONS=DEFAULT
DISTRIBUTIONS="kernel.txz base.txz"
export nonInteractive="YES"
#!/bin/sh
# installerconfig — bsdinstall post-install hook
#
# bsdinstall sources this file automatically after base system installation
# completes. Runs in the context of the live USB environment, with the
# target HDD mounted at /mnt.
#
# PREAMBLE (for bsdinstall scripting):
# Set ZFS pool name to "clawdie" (project-specific, enables auto-detection)
export ZFSBOOT_POOL_NAME="clawdie"
#
# SETUP SCRIPT:
#
# Responsibilities:
# 1. Copy firstboot payload from USB to installed HDD
# 2. Enable the clawdie-firstboot rc.d service (runs once on first HDD boot)
# 3. That's it — all real work happens in firstboot.sh on first boot
set -e
set_config_line() {
_file="$1"
_assignment="$2"
_name=$(echo "$_assignment" | cut -d= -f1)
mkdir -p "$(dirname "$_file")"
touch "$_file"
if grep -q "^${_name}=" "$_file" 2>/dev/null; then
sed -i '' "s|^${_name}=.*|${_assignment}|" "$_file"
else
echo "$_assignment" >> "$_file"
fi
}
USB_SHARE="/usr/local/share/clawdie-iso"
HDD_SHARE="/mnt/usr/local/share/clawdie-iso"
HDD_RCD="/mnt/usr/local/etc/rc.d"
LIVE_INSTALLER_RUNTIME_DIR="${LIVE_INSTALLER_RUNTIME_DIR:-/var/run/clawdie-installer}"
LIVE_INSTALLER_PERSIST_DIR="/mnt/var/db/clawdie-installer"
LIVE_INSTALLER_PERSIST_HANDOFF="${LIVE_INSTALLER_PERSIST_DIR}/clawdie-handoff.sealed"
LIVE_INSTALLER_PROGRESS_FILE="${LIVE_INSTALLER_PROGRESS_FILE:-/var/log/clawdie-firstboot.progress}"
set_progress() {
[ -n "${LIVE_INSTALLER_PROGRESS_FILE:-}" ] || return 0
echo "PROGRESS=$1" >> "$LIVE_INSTALLER_PROGRESS_FILE"
}
echo "clawdie-iso: injecting firstboot payload..."
set_progress 4
# Copy firstboot scripts
mkdir -p "$HDD_SHARE"
cp -r "${USB_SHARE}/firstboot" "${HDD_SHARE}/"
cp -r "${USB_SHARE}/packages" "${HDD_SHARE}/"
cp "${USB_SHARE}/clawdie-ai.tar.gz" "${HDD_SHARE}/"
cp "${USB_SHARE}/build.cfg" "${HDD_SHARE}/"
[ -f "${USB_SHARE}/build-manifest.json" ] && cp "${USB_SHARE}/build-manifest.json" "${HDD_SHARE}/"
# Make all firstboot shell modules executable
chmod +x "${HDD_SHARE}/firstboot/firstboot.sh"
for sh in "${HDD_SHARE}/firstboot/shell-"*.sh; do
chmod +x "$sh"
done
chmod +x "${HDD_SHARE}/firstboot/zfs-pool-detect.sh" 2>/dev/null || true
chmod +x "${HDD_SHARE}/firstboot/zfs-pool-migrate.sh" 2>/dev/null || true
chmod +x "${HDD_SHARE}/firstboot/maintenance-mode.sh" 2>/dev/null || true
# Install firstboot rc.d service
mkdir -p "$HDD_RCD"
cp "${USB_SHARE}/firstboot/rc.d/clawdie-firstboot" "${HDD_RCD}/clawdie-firstboot"
chmod +x "${HDD_RCD}/clawdie-firstboot"
set_progress 5
if [ -f "${LIVE_INSTALLER_RUNTIME_DIR}/clawdie-handoff.sealed" ]; then
mkdir -p "$LIVE_INSTALLER_PERSIST_DIR"
cp "${LIVE_INSTALLER_RUNTIME_DIR}/clawdie-handoff.sealed" "$LIVE_INSTALLER_PERSIST_HANDOFF"
chmod 0600 "$LIVE_INSTALLER_PERSIST_HANDOFF"
set_progress 6
fi
# Enable mac_do framework at first HDD boot with no credential grants yet.
set_config_line /mnt/boot/loader.conf 'mac_do_load="YES"'
set_config_line /mnt/etc/sysctl.conf 'security.mac.do.rules='
# Enable service in rc.conf on HDD
echo 'clawdie_firstboot_enable="YES"' >> /mnt/etc/rc.conf
set_progress 7
echo "clawdie-iso: firstboot payload installed. Rebooting to HDD..."