92 lines
3.2 KiB
Text
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..."
|