Выяснилось, что занесенные в черный список модули были явно загружены одной из служб Systemd/Network Manager:pullin-bcm43xx-firmware.service
.
Я просто отключил подозрительную службу с помощью вызова systemd:systemctl disable pullin-bcm43xx-firmware.service
и перезагрузил..и вуаля..драйверы b43 больше не грузятся; ssb, b43, b43legacy, mac80211; присутствует только wl. Счастливый конец.. пока.
Как я нашел pullin-bcm43xx-firmware.service
? Немного детективной работы. Путем поиска в системном журнале journalctl -b
, поиска b43
. Я нашел эту подозрительную строку:install_bcm43xx_firmware_wrapper
/etc/systemd/system/multi-user.target.wants/pullin-bcm43xx-firmware.service
: Downloading b43 firmware
сразу после запуска Network Manager. Поиск install_bcm43xx_firmware_wrapper
в /etc
дал /etc/systemd/system/multi-user.target.wants/pullin-bcm43xx-firmware.service
... а остальное вы уже знаете.
Что беспокоит, я нашел его в основном по счастливой случайности. Если бы этот скрипт не упоминал b43
и его имя, я мог бы делать любые ссылки. Беспокоит отсутствие формальной лог-трассировки того, какие драйверы были загружены, когда и кем:(
Я также узнал, что черный список модулей — это немного неправильное название. Как пояснил мне Арвиджаар:
Blacklist only prevents loading of module due to hardware autodetection (strictly speaking, it tells modprobe to ignore internal aliases provided by module). It does not prohibit loading of module by any other means (explicit modprobe, install line in modprobe.conf, explicit alias in modprobe.conf).
Ядро должно иметь надлежащее средство внесения в черный список!
Код, начинающийся с [Unit]
, является служебным файлом systemd. Когда вы распространяете свой пакет, вам нужно использовать средства, специфичные для системы пакетов, будь то dpkg, RPM или что-то еще, чтобы поместить служебный файл в соответствующий каталог (скорее всего /usr/lib/systemd/system )и запустите его автоматически в соответствии с разделом [Install](systemctl enable
). Обратитесь к документации systemd и рассматриваемой системы пакетов.
Расширение служебного файла должно быть .service
.
Расширение не имеет значения. Чтобы файл был исполняемым, он должен иметь установленный бит разрешения на выполнение для того, кто пытается его запустить, иначе он должен использоваться в качестве аргумента для двоичного файла языка или оболочки, под которой он должен работать.
Для первого примера с установленными разрешениями на выполнение:
Текущий каталог:
./installed_file
Любой другой каталог:
/path/to/installed_file
Без набора разрешений на выполнение:
bash installed_file
python /path/to/installed_file
Последние два исполняют файл с помощью Bash или Python.
Если вы пытаетесь установить его с помощью менеджера пакетов, такого как yum, dnf, rpm, apt, dpkg, zypper, pacman, вам понадобится sudo или, как вы его называете, admin.
То же самое верно, если вы собираетесь создать его иначе и поместить в каталог, где только root имеет право записи, например /usr/bin
, /usr/sbin
, /usr/local/bin
, /usr/local/sbin
, /opt/
и т. д.