#!/usr/bin/env bash # Установить firmware b43 для BCM4322 на Fedora (offline). # Запуск на Fedora MacBook (root): # tar xzf fedora-bcm4322-wifi-fix.tar.gz # cd fedora-bcm4322-wifi-fix # sudo bash install-bcm4322-firmware-fedora.sh set -euo pipefail die() { printf 'error: %s\n' "$*" >&2; exit 1; } if [ "$(id -u)" -ne 0 ]; then die "запустите с sudo" fi ROOT="$(cd "$(dirname "$0")" && pwd)" SRC="${1:-$ROOT/bundle/bcm4322-offline-bundle}" [ -d "$SRC/b43" ] || die "нет каталога $SRC/b43" [ -f "$SRC/b43/ucode16_mimo.fw" ] || die "нет $SRC/b43/ucode16_mimo.fw (BCM4322)" DEST="/lib/firmware/b43" BACKUP="/var/lib/bcm4322-firmware-backup-$(date +%Y%m%d-%H%M%S)" mkdir -p "$DEST" "$BACKUP" if [ -d "$DEST" ] && [ "$(ls -A "$DEST" 2>/dev/null | wc -l)" -gt 0 ]; then cp -a "$DEST/." "$BACKUP/" 2>/dev/null || true printf 'Резервная копия старых файлов: %s\n' "$BACKUP" fi cp -a "$SRC/b43/." "$DEST/" chmod 644 "$DEST"/*.fw 2>/dev/null || true restorecon -Rv /lib/firmware/b43 >/dev/null 2>&1 || true COUNT="$(find "$DEST" -maxdepth 1 -name '*.fw' | wc -l | tr -d ' ')" printf 'Установлено %s файлов в %s\n' "$COUNT" "$DEST" printf 'Ключевой файл: %s (%s bytes)\n' "$DEST/ucode16_mimo.fw" "$(stat -c%s "$DEST/ucode16_mimo.fw" 2>/dev/null || stat -f%z "$DEST/ucode16_mimo.fw")" printf 'Перезагрузка модуля b43 …\n' modprobe -r b43 2>/dev/null || true sleep 1 modprobe b43 sleep 2 if dmesg | tail -50 | grep -qi 'firmware file.*not found'; then die "ядро всё ещё не видит firmware — проверьте: sudo dmesg | grep -i b43" fi if command -v nmcli >/dev/null 2>&1; then nmcli device status || true WIFI_DEV="$(nmcli -t -f DEVICE,TYPE device | awk -F: '$2=="wifi"{print $1; exit}')" if [ -n "${WIFI_DEV:-}" ]; then printf 'Wi-Fi интерфейс появился: %s\n' "$WIFI_DEV" nmcli radio wifi on 2>/dev/null || true nmcli device wifi list 2>/dev/null | head -10 || true else printf 'Wi-Fi интерфейс пока не виден — нужна перезагрузка.\n' fi fi printf '\nГотово. Дальше:\n' printf ' sudo reboot\n' printf ' nmcli device wifi list\n' printf ' nmcli device wifi connect "SSID" password "пароль"\n'