blob: 248e9c0e5f1635573878524a11786f1b362cda0e (
plain) (
blame)
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
|
#!/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:"
|