- ZRAM Scaling (docs/QUICKSTART.md): Updated Step 9 with the current fixed-4096MB formula: `≤8 GB → 50%`, `>8 GB → 4096 MB fixed`. Replaced obsolete `ram_gb > 16 ? 25% : 50%` and `/4` vs `/2` logic with the new behavior (`ram_gb <= 8 ? 50% : 4096 MB`). Examples: 4GB → 2048 MB, 8GB → 4096 MB, 16GB → 4096 MB, 32GB → 4096 MB.
- GPU Configuration (docs/gpu.md): Added AMD GCN Migration subsection with duplicate guard (`content_differs-style` check) and sed fix logic. Added Secure Boot warning for NVIDIA DKMS (`mokutil --sb-state` detection). Documented `|| return 1` protection for `/etc/modprobe.d/nvidia-wayland.conf` writing. Renumbered duplicate sections 7 → 8 → 9 to avoid duplicate headings.
- Firmware Installation (docs/firmware.md): Updated Broadcom section with `_run_cmd` wrappers (`|| true`) for `apt install broadcom-sta-dkms` and `modprobe wl`. Added SSH network warning (`WARNING: SSH is not recommended on a router`) before `modprobe -r`. Updated Initramfs step with `_run_cmd` wrapper (`|| true`).
- Repo Configuration (docs/repos_config.md): Removed `REPOS_CONFIGURED=true` from the POST-EXECUTION PHASE diagram and Safety Mechanisms. Added `_write_branch_sources` with its `_restore_backup` rollback and "Branch Migration Rollback" safety note to the diagram.
- System Info & Pre-flight (docs/system_info.md): Added pre-flight init (auto-install whiptail + lsb-release). Added LSPCI_OUTPUT cache with `command -v lspci` guard. Added `_ensure_apt_updated` deduplication helper. Added `STATE_REFRESHED=true` flag mechanism across all menu branches.
- User Home Ownership (docs/user_priv_feed.md): Updated Option 3 (Repair Home Ownership) to use `getent passwd "${SUDO_USER:-$USER}"` instead of the insecure `eval echo "~$USER"` pattern. Added documentation note explaining the security rationale.
- QuickStart ZRAM (docs/QUICKSTART.md): Updated Step 9 ZRAM scaling to "50% of RAM (≤8 GB) or 4096 MB fixed (>8 GB)".
9.1 KiB
Option 5: Firmware, Wireless & Bluetooth
1. The Hidden Debian "Problem"
In standard Debian packaging, the meta-package firmware-linux-nonfree serves as a generic aggregator for hardware blobs. However, due to internal dependency resolution rules and conservative versioning strategies within the repository, this package often fails to automatically include vendor-specific firmware drivers for newer or niche network controllers (specifically Realtek Wi-Fi/Bluetooth and Intel Ethernet/Wi-Fi variants).
This script acts as an intelligent injector to bridge that gap. It does not rely solely on the meta-package's Recommends field; instead, it actively scans the hardware topology to identify missing dependencies. By decoupling the detection from the installation logic, the architecture ensures that even if the base package is installed, specific vendor blobs (e.g., firmware-iwlwifi, firmware-realtek) are explicitly pulled in only when their corresponding hardware IDs are confirmed present on the system. This prevents "half-baked" network connectivity where the interface exists but lacks the necessary firmware to initialize.
2. Dual Scan Engine (PCI & USB)
To ensure comprehensive hardware detection while minimizing false positives, the script utilizes a dual-scan engine that interrogates both PCI and USB buses with strict filtering logic:
- PCI Bus Scanning (
lspci): The engine parseslspci -nnoutput specifically targeting lines containing "network controller" or "ethernet controller". This captures both wireless adapters (e.g., Intel AX200) and wired NICs (e.g., Realtek RTL8125 2.5GbE), ensuring that Ethernet firmware requirements are also met during the process. - USB Bus Scanning (
lsusb): The USB scan applies keyword filtering to ignore peripherals unrelated to networking, such as audio devices or card readers. It specifically looks for terms like "wireless", "wifi", "802.11", and "wlan". Bluetooth devices are also detected separately throughPCI_BT_DEVSandUSB_BT_DEVS. - Deduplication: The collected device lists are merged into a single array (
dev_list) to prevent duplicate processing of the same hardware instance across different bus categories, ensuring a clean plan generation.
3. Dynamic Hardware Mapping Matrix
The script employs an associative mapping strategy in _detect_firmware_needs to translate raw vendor strings from lspci/lsusb into specific Debian package names. This matrix is critical for handling the "Intel Split" and other vendor-specific requirements:
- Vendor Filtering: The engine first filters out generic or unsupported vendors (e.g., non-Realtek, non-Intel, non-Atheros) to avoid unnecessary package pulls.
- Package Assignment Logic:
- Intel Wi-Fi Hardware ➔
firmware-iwlwifi(Specific driver for wireless chips). - Intel Ethernet Hardware ➔
firmware-intel-misc(Often pulled viaRecommendsof the base package, but explicitly tracked here). - Realtek Hardware ➔
firmware-realtek. - MediaTek / Ralink Hardware ➔
firmware-mediatek. - Atheros / Qualcomm Hardware ➔
firmware-atheros.
- Intel Wi-Fi Hardware ➔
This mapping ensures that if a system contains an Intel Wi-Fi 6 card, the script explicitly queues firmware-iwlwifi regardless of whether the base meta-package claims to cover it. The output is rendered as a deduplicated plan with visual indicators (e.g., [+] package ← hardware) for user clarity.
4. Installation Execution Flow (Atomic Pipeline)
The installation process follows a strict atomic pipeline defined in install_firmware, ensuring system stability and version consistency:
- Repository Validation: The script first verifies that
/etc/apt/sources.listor.d/contains thenon-freecomponent. If absent, it halts to prevent installation failures. - Plan Rendering & Confirmation: A diagnostic tree is generated showing detected controllers and planned packages. The user must explicitly confirm ("Apply the network & firmware plan?") before proceeding.
- Base Meta-Package Selection (Backports vs. Stable):
- If
firmware-linux-nonfreeis already installed, the script checks for a newer version in backports (${DEBIAN_CODENAME}-backports). It prompts to upgrade if available, as backports often contain firmware for very recent hardware not yet in stable. - If not installed, it presents a choice between Stable (Ultra-tested) and Backports (Recommended for modern hardware).
- If
- Sequential Injection: After the base package is secured, the script iterates through
_DETECTED_FW_PKGS. It usesapt-cache policyto validate availability before installing specific vendor packages (firmware-realtek, etc.), skipping those already present or unavailable in repositories.
5. Broadcom Wireless Support (DKMS Single-Path)
Broadcom chipsets require proprietary handling because no open-source driver covers most 14e4:* devices on modern kernels. The current implementation in firmware.sh:_handle_wireless uses a single-path DKMS flow (broadcom-sta-dkms + wl module) — not a 3-tier fallback:
-
Device detection — Iterates
PCI_NET_DEVS(parsed fromlspci -nnat startup) and extracts the Broadcom ID14e4:XXXX. Non-Broadcom devices are skipped. -
Dependency guard — Verifies
linux-headers-amd64anddkmsare available viaapt-cache show. If missing, shows:"linux-headers-amd64 or dkms are not available in your repositories." -
User confirmation —
whiptail --yesno "Install broadcom-sta-dkms, dkms, and wireless-tools?" -
Step-by-step install (allows partial failure without aborting the whole module):
_run_cmd "Broadcom Dependencies" "sudo DEBIAN_FRONTEND=noninteractive apt install -y dkms wireless-tools linux-headers-amd64" || true _run_cmd "Broadcom Driver" "sudo DEBIAN_FRONTEND=noninteractive apt install -y broadcom-sta-dkms" || true -
Blacklist persistence — Writes
/etc/modprobe.d/blacklist-broadcom.conf:blacklist b43 blacklist b43legacy blacklist brcmsmac blacklist bcma blacklist ssb -
SSH Warning + Module Switch — Before unloading current WiFi modules, the script warns about SSH disconnection. Then removes conflicting modules and loads the Broadcom driver:
_msg "Network Warning" "The script is about to unload current WiFi kernel modules to load the Broadcom driver.
If you are connected via SSH over WiFi, YOUR CONNECTION WILL DROP. Please reconnect after a few seconds." _run_cmd "Modprobe" "sudo modprobe -r b43 b43legacy b44 bcma brcmsmac brcmfmac ssb wl 2>/dev/null || true" || true _run_cmd "Modprobe" "sudo modprobe wl" || true
7. **Initramfs** — Rebuilds the initramfs to include the new `wl` module:
```bash
_run_cmd "Initramfs" "sudo update-initramfs -u" || true
-
Combo BT handling — If a Broadcom Bluetooth device is also present (
PCI_BT_DEVSgrepbroadcom), writessoftdep wl post: btusbto/etc/modprobe.d/broadcom-combo.conf -
Post-DKMS verification — Checks for
/lib/modules/$(uname -r)/updates/dkms/wl.ko*. If missing, shows the last 20 lines ofdmesgand offersdpkg-reconfigure broadcom-sta-dkms. On success, verifieslsmod | grep ^wland reportsBroadcom WiFi activated (wl module loaded)ordriver installed but wl module did not load — reboot required.
USB Broadcom (0a5c vendor, lsusb) is detected but not auto-installed — the script shows a message that Linux lacks native drivers for most USB Broadcom WiFi chips and that ndiswrapper may be needed.
Historical note: Earlier drafts of this document described a 3-tier system (
firmware-brcm80211→firmware-b43-installer→broadcom-sta-dkms). The current script has consolidated to the DKMS path only. The other firmware packages are still available via the basefirmware-linux-nonfreemetapackage and vendor-specific packages (firmware-realtek, etc.).
6. Bluetooth Stack Integration
Bluetooth support is handled through a dedicated module (bluetooth.sh) that integrates seamlessly with the firmware detection process:
- Hardware Detection: The script identifies both PCI and USB Bluetooth controllers using
PCI_BT_DEVSandUSB_BT_DEVSarrays, ensuring comprehensive coverage of all Bluetooth hardware types. - Base Stack Installation: When Bluetooth hardware is detected, the system installs the core stack (
bluez,bluez-utils,bluez-obexd) if not already present. - Desktop Environment Optimization: Based on the detected desktop environment:
- KDE: Installs
bluedeviland optionallypipewire-pulse+wireplumberfor Pipewire audio server integration. - GNOME: Uses built-in GNOME Bluetooth support in
gnome-control-center. - XFCE/Other: Installs
bluemanas the GTK Bluetooth manager.
- KDE: Installs
- Service Management: The script ensures the Bluetooth service is enabled and started automatically on boot, with session restart or reboot recommendation for desktop applets to load properly.
This modular approach keeps Bluetooth handling separate from network firmware while maintaining tight integration through shared device detection arrays and coordinated installation flow.