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..."