diff options
| author | Ahmed Abdelhalim <[email protected]> | 2026-04-20 14:43:52 +0200 |
|---|---|---|
| committer | Ahmed Abdelhalim <[email protected]> | 2026-04-20 14:48:09 +0200 |
| commit | 8ee10fb59163977fb95fa688fcd6ee2409b48f02 (patch) | |
| tree | f1c285250060eb74a0315b53b9424e808289b19a /hacks/ubuntu/mac-drivers.sh | |
| parent | 5c2f4c0d74bcc321f3c34526c427456d3b03e9b9 (diff) | |
Add mac ubuntu install tasks
Add the hack scripts to download and install wifi drivers on Mac
For ubuntu ISO, unlike archlinux, it doesn't ship with the wl drivers
required for wifi to work on ubuntu, this is a hack workaround to
download the missing dependencies on an external USB and use it on the
Live ISO to install the missing drivers, allowing for the rest of
automation to take place.
Assisted-by: Claude (Sonnet 4.6)
Diffstat (limited to 'hacks/ubuntu/mac-drivers.sh')
| -rwxr-xr-x | hacks/ubuntu/mac-drivers.sh | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/hacks/ubuntu/mac-drivers.sh b/hacks/ubuntu/mac-drivers.sh new file mode 100755 index 0000000..248e9c0 --- /dev/null +++ b/hacks/ubuntu/mac-drivers.sh @@ -0,0 +1,101 @@ +#!/usr/bin/env bash +set -euo pipefail + +usage() { + echo "Usage: $0 <kernel-version>" + echo " kernel-version: output of 'uname -r' on target machine" + echo " Example: $0 6.11.0-17-generic" + exit 1 +} + +[[ $# -ne 1 ]] && usage + +KERNEL_VERSION="$1" +OUTPUT_DIR="/tmp/bcmwl-drivers" +BASE_URL="http://archive.ubuntu.com/ubuntu" +DISTRO="noble" +INDEX_DIR=$(mktemp -d) + +cleanup() { rm -rf "$INDEX_DIR"; } + +fetch_index() { + local pocket="$1" component="$2" + local dest="${INDEX_DIR}/${pocket}-${component}.txt" + echo "Fetching ${pocket}/${component} index..." >&2 + curl -fsSL "${BASE_URL}/dists/${pocket}/${component}/binary-amd64/Packages.gz" \ + | gzip -d > "$dest" + echo "$dest" +} + +pkg_field() { + local index="$1" pkg_name="$2" field="$3" + awk '/^Package: '"$pkg_name"'$/{found=1} found && /^'"$field"':/{print; found=0; exit}' "$index" +} + +pkg_filename() { + pkg_field "$1" "$2" "Filename" | awk '{print $2}' +} + +download_pkg() { + local pkg_name="$1" + local filename="" + for index in "${INDEXES[@]}"; do + filename=$(pkg_filename "$index" "$pkg_name") + [[ -n "$filename" ]] && break + done + if [[ -z "$filename" ]]; then + echo "WARNING: $pkg_name not found in any index, skipping" >&2 + return 0 + fi + local deb + deb=$(basename "$filename") + if [[ -f "${OUTPUT_DIR}/${deb}" ]]; then + echo " (cached) $deb" + return 0 + fi + echo "Downloading $deb..." + curl -fL -o "${OUTPUT_DIR}/${deb}" "${BASE_URL}/${filename}" +} + +# Create out directory and configure trap signal +mkdir -p "$OUTPUT_DIR" +trap cleanup EXIT + +# Fetch indexes +main_index=$(fetch_index "$DISTRO" "main") +main_updates=$(fetch_index "${DISTRO}-updates" "main") +restricted_updates=$(fetch_index "${DISTRO}-updates" "restricted") +INDEXES=("$main_updates" "$main_index" "$restricted_updates") + +# Kernel headers +download_pkg "linux-headers-${KERNEL_VERSION}" + +# Auto-discover base headers from Depends: field +BASE_HEADERS_PKG=$(pkg_field "$main_updates" "linux-headers-${KERNEL_VERSION}" "Depends" \ + | grep -o 'linux-hwe-[^ ,)]*' | head -1) +if [[ -n "$BASE_HEADERS_PKG" ]]; then + echo "Base headers: $BASE_HEADERS_PKG" + download_pkg "$BASE_HEADERS_PKG" +fi + +# Broadcom source +download_pkg "broadcom-sta-dkms" + +# Build tools (not pre-installed on Ubuntu live ISO) +echo "Downloading build tools..." +for pkg in \ + make \ + gcc-13-base \ + cpp-13-x86-64-linux-gnu cpp-13 cpp-x86-64-linux-gnu cpp \ + gcc-13-x86-64-linux-gnu gcc-13 gcc-x86-64-linux-gnu gcc \ + binutils-common libsframe1 libbinutils libctf-nobfd0 libctf0 \ + libjansson4 libgprofng0 binutils-x86-64-linux-gnu binutils \ + libcc1-0 libisl23 libmpfr6 libmpc3 libgcc-13-dev lto-disabled-list; do + download_pkg "$pkg" +done + +# Copy install script alongside the debs +cp "$(dirname "$0")/install-wl.sh" "$OUTPUT_DIR/" +chmod +x "$OUTPUT_DIR/install-wl.sh" +echo "" +echo "Downloaded to $OUTPUT_DIR:" |
