87 lines
2.8 KiB
Bash
Executable File
87 lines
2.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Ubuntu HWE 6.17: optional apply user patch, build-dep, binary-generic debs, optional install.
|
|
# No default patch in-repo; set PATCH=/path/to/file.patch for apply.
|
|
# Run on Ubuntu (Noble or host with linux-hwe-6.17 sources); requires sudo for apt/dpkg.
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
PATCH="${PATCH:-}"
|
|
SRC="${SRC:-$REPO_ROOT/kernel-src/linux-hwe-6.17-6.17.0}"
|
|
JOBS="${CONCURRENCY_LEVEL:-$(nproc)}"
|
|
|
|
usage() {
|
|
echo "Usage: $0 [apply|deps|build|install|all]"
|
|
echo " apply - patch -p1 in SRC (requires PATCH=/abs/path/to.patch)"
|
|
echo " deps - sudo apt build-dep linux-hwe-6.17 + build tools"
|
|
echo " build - fakeroot debian/rules clean && binary-generic"
|
|
echo " install- sudo dpkg -i newest linux-image-* and linux-modules-* in parent of SRC"
|
|
echo " all - deps then build (does NOT apply patches; run apply separately if needed)"
|
|
echo "Env: PATCH=path SRC=path to linux-hwe-6.17-6.17.0 tree"
|
|
echo "See: patches/ubuntu-hwe-6.17/README.md"
|
|
}
|
|
|
|
if [[ ! -f "$SRC/debian/rules" ]]; then
|
|
echo "ERROR: kernel source not found at SRC=$SRC"
|
|
exit 1
|
|
fi
|
|
|
|
cmd_apply() {
|
|
if [[ -z "${PATCH}" ]]; then
|
|
echo "ERROR: apply requires PATCH=/absolute/path/to/your.patch" >&2
|
|
echo " Example: PATCH=\"$REPO_ROOT/patches/ubuntu-hwe-6.17/0001-foo.patch\" $0 apply" >&2
|
|
exit 1
|
|
fi
|
|
if [[ ! -f "$PATCH" ]]; then
|
|
echo "ERROR: PATCH file not found: $PATCH" >&2
|
|
exit 1
|
|
fi
|
|
cd "$SRC"
|
|
patch -p1 < "$PATCH"
|
|
echo "Applied: $PATCH"
|
|
}
|
|
|
|
cmd_deps() {
|
|
sudo apt-get update
|
|
sudo apt-get build-dep -y linux-hwe-6.17
|
|
sudo apt-get install -y fakeroot build-essential libncurses-dev libssl-dev ccache \
|
|
gawk debhelper libelf-dev libdw-dev flex bison bc python3-dev
|
|
}
|
|
|
|
cmd_build() {
|
|
cd "$SRC"
|
|
export CONCURRENCY_LEVEL="$JOBS"
|
|
fakeroot debian/rules clean
|
|
fakeroot debian/rules binary-generic
|
|
}
|
|
|
|
cmd_install() {
|
|
parent="$(dirname "$SRC")"
|
|
cd "$parent"
|
|
mapfile -t imgs < <(ls -t linux-image-*.deb 2>/dev/null || true)
|
|
mapfile -t mods < <(ls -t linux-modules-*.deb 2>/dev/null || true)
|
|
if [[ ${#imgs[@]} -eq 0 || ${#mods[@]} -eq 0 ]]; then
|
|
echo "No linux-image-*.deb or linux-modules-*.deb in $parent — build first."
|
|
exit 1
|
|
fi
|
|
echo "Installing: ${imgs[0]} ${mods[0]}"
|
|
sudo dpkg -i "${imgs[0]}" "${mods[0]}"
|
|
echo "Optional: sudo dpkg -i linux-headers-*.deb linux-modules-extra-*.deb from same directory"
|
|
echo "Then: sudo reboot"
|
|
}
|
|
|
|
case "${1:-}" in
|
|
apply) cmd_apply ;;
|
|
deps) cmd_deps ;;
|
|
build) cmd_build ;;
|
|
install) cmd_install ;;
|
|
all)
|
|
cmd_deps
|
|
cmd_build
|
|
echo "Build done. Debs should be in: $(dirname "$SRC")"
|
|
echo "Run: $0 install (after reviewing package names)"
|
|
echo "If you use a custom patch: PATCH=... $0 apply (before build, on a clean tree)"
|
|
;;
|
|
*) usage; exit 1 ;;
|
|
esac
|