Files
local_machine/docs/old_mac/scripts/install-bcm4322-firmware-fedora.sh

64 lines
2.3 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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'