summaryrefslogtreecommitdiff
path: root/procedures/buildandbpack.sh
blob: cdc3564d98e3fe93513bb31ba28cdbc00be9d7ce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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"