summaryrefslogtreecommitdiff
path: root/procedures/buildandbpack.sh
diff options
context:
space:
mode:
Diffstat (limited to 'procedures/buildandbpack.sh')
-rwxr-xr-xprocedures/buildandbpack.sh59
1 files changed, 59 insertions, 0 deletions
diff --git a/procedures/buildandbpack.sh b/procedures/buildandbpack.sh
new file mode 100755
index 0000000..cdc3564
--- /dev/null
+++ b/procedures/buildandbpack.sh
@@ -0,0 +1,59 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+# 🔧 CONFIGURATION
+FREEBSD_BRANCH="stable/14"
+KERNCONF="STORAGE_ZFS"
+MAKEJOBS=$(nproc)
+BUILDROOT="$HOME/freebsd-kernel-build"
+OBJDIR="/tmp/obj"
+TOOLCHAIN_BIN="/tmp/amd64.amd64/usr/bin"
+
+# 🌱 Step 1: Prep Environment
+mkdir -p "$BUILDROOT"
+cd "$BUILDROOT"
+
+# 🔻 Step 2: Get FreeBSD source
+if [ ! -d "src" ]; then
+ git clone https://git.freebsd.org/src.git
+ cd src
+ git checkout "$FREEBSD_BRANCH"
+else
+ cd src
+ git fetch
+ git checkout "$FREEBSD_BRANCH"
+ git pull
+fi
+
+# 🛠️ Step 3: Build FreeBSD toolchain (only once)
+if [ ! -d "$TOOLCHAIN_BIN" ]; then
+ echo "[*] Bootstrapping FreeBSD native-xtools..."
+ bmake XDEV=amd64 XDEV_ARCH=amd64 native-xtools
+else
+ echo "[*] Toolchain already built. Skipping..."
+fi
+
+# 🔁 Step 4: Prepare kernel config
+cd "$BUILDROOT/src/sys/amd64/conf"
+if [ ! -f "$KERNCONF" ]; then
+ cp GENERIC "$KERNCONF"
+ echo "[*] Created new kernel config from GENERIC: $KERNCONF"
+fi
+
+# 🧠 Step 5: Build the kernel
+export PATH="$TOOLCHAIN_BIN:$PATH"
+export MAKEOBJDIRPREFIX="$OBJDIR"
+
+cd "$BUILDROOT/src"
+bmake -j"$MAKEJOBS" buildkernel TARGET=amd64 TARGET_ARCH=amd64 KERNCONF="$KERNCONF"
+
+# 📦 Step 6: Package the kernel
+KERNEL_OUT="$OBJDIR/$BUILDROOT/src/amd64.amd64/sys/$KERNCONF"
+PACKAGE_NAME="freebsd-kernel-$(date +%Y%m%d-%H%M%S).tar.gz"
+
+tar czf "$BUILDROOT/$PACKAGE_NAME" -C "$KERNEL_OUT" kernel
+
+# 📣 Done
+echo "✅ Kernel build and package complete."
+echo "➡️ Output: $BUILDROOT/$PACKAGE_NAME"
+