|
root / base / hammerhead-kernel
hammerhead-kernel Plain Text 113 lines 3.9 KB
  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
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!/bin/ksh93
# Build script for hammerhead-kernel
# Packages kernel modules, boot infrastructure, and CPU microcode from proto area
#
# Requires PROTO_AREA to be set to the hammerhead proto path, e.g.:
#   export PROTO_AREA=/usr/src/hammerhead-build/root_amd64
#
# Optional: ROOTFS_DIR for rootfs overlay (boot archive filelist, etc.)
#   export ROOTFS_DIR=/usr/src/hammerhead/rootfs

set -e

PROTO_AREA="${PROTO_AREA:?PROTO_AREA must be set to hammerhead proto path}"

# Validate required directories
for dir in kernel boot; do
    if [ ! -d "$PROTO_AREA/$dir" ]; then
        printf "ERROR: %s/%s does not exist\n" "$PROTO_AREA" "$dir"
        printf "Has the hammerhead build completed successfully?\n"
        exit 1
    fi
done

# Validate critical files
for f in kernel/genunix kernel/unix boot/loader64.efi; do
    if [ ! -f "$PROTO_AREA/$f" ]; then
        printf "ERROR: %s not found in proto area\n" "$f"
        exit 1
    fi
done

# --- Kernel modules (includes driver .conf files) ---
printf "Packaging kernel modules...\n"
mkdir -p "$PKGDIR/kernel"
(cd "$PROTO_AREA/kernel" && find . | cpio -pdm "$PKGDIR/kernel" 2>/dev/null)

# Set ownership: kernel modules are root:sys
chown -R root:sys "$PKGDIR/kernel"

# --- Boot infrastructure (loader, fonts, splash, forth scripts) ---
printf "Packaging boot files...\n"
mkdir -p "$PKGDIR/boot"
(cd "$PROTO_AREA/boot" && find . | cpio -pdm "$PKGDIR/boot" 2>/dev/null)

# Apply rootfs overlay for boot files (filelist.ramdisk, etc.)
if [ -n "$ROOTFS_DIR" ] && [ -d "$ROOTFS_DIR/boot" ]; then
    printf "Applying rootfs overlay for boot...\n"
    (cd "$ROOTFS_DIR/boot" && find . | cpio -pdm "$PKGDIR/boot" 2>/dev/null)
fi

chown -R root:sys "$PKGDIR/boot"

# --- CPU microcode ---
if [ -d "$PROTO_AREA/platform/amd64/ucode" ]; then
    printf "Packaging CPU microcode...\n"
    mkdir -p "$PKGDIR/platform/amd64/ucode"
    (cd "$PROTO_AREA/platform/amd64/ucode" && find . | cpio -pdm "$PKGDIR/platform/amd64/ucode" 2>/dev/null)
    chown -R root:sys "$PKGDIR/platform/amd64/ucode"
fi

# --- Post-install script ---
mkdir -p "$PKGDIR/.SCRIPTS"
cat > "$PKGDIR/.SCRIPTS/post-install.sh" << 'SCRIPT'
#!/bin/ksh93
# Update boot archive to include new kernel modules
# Only run if we're on a live system (not during initial install to altroot)
if [ -f /kernel/genunix ]; then
    # Generate boot archive using cpio method (not bootadm)
    if [ -f /boot/solaris/filelist.ramdisk ]; then
        printf "Regenerating boot archive...\n"
        tmpfilelist=/tmp/boot_archive_files.$$
        tmparchive=/tmp/boot_archive.$$
        (cd / && while IFS= read -r line; do
            [[ -z "$line" || "$line" = \#* ]] && continue
            [[ -e "$line" ]] && printf "%s\n" "$line"
        done < /boot/solaris/filelist.ramdisk) > "$tmpfilelist"
        (cd / && cpio -o -H odc < "$tmpfilelist" 2>/dev/null) > "$tmparchive"
        digest -a sha1 "$tmparchive" > /boot/boot_archive.hash
        gzip -9 -c "$tmparchive" > /boot/boot_archive
        rm -f "$tmpfilelist" "$tmparchive"
        printf "Boot archive updated.\n"
    fi
fi
printf "Kernel updated. A reboot is required to load the new kernel.\n"
SCRIPT
chmod 755 "$PKGDIR/.SCRIPTS/post-install.sh"

# --- Summary ---
MODULES=$(find "$PKGDIR/kernel" -type f | wc -l)
BOOT_FILES=$(find "$PKGDIR/boot" -type f | wc -l)
SIZE=$(du -sh "$PKGDIR" | cut -f1)
printf "Packaged %d kernel files, %d boot files (%s total)\n" "$MODULES" "$BOOT_FILES" "$SIZE"
# hammerhead-kernel - Kernel modules, boot infrastructure, and microcode
# https://git.sharkos.one/zygaena/hammerhead

[package]
name = "hammerhead-kernel"
version = "0.1.0"
release = 1
description = "Hammerhead kernel modules, boot loader, and CPU microcode"
url = "https://git.sharkos.one/zygaena/hammerhead"
license = "CDDL-1.0"
maintainer = "Chris Tusa <chris.tusa@leafscale.com>"
arch = "x86_64"
conflicts = ["illumos-kernel", "illumos-platform", "illumos-boot"]

[dependencies]
runtime = []
build = []

[build]
parallel = false