Bumblebee в Fedora 25 устанавливаем nvidia с Secure Boot

Привет.
Сегодня я, все-таки, нашел время пройти путь и описать установку всего это хозяйства: bumblebee + nvidia в Fedora 25, но с Secure Boot. Ну не нравится мне идея его отключения.

Что нам понадобится:

  • установленная Fedora/RFRemix 24/25;
  • подключение к интернету;
  • установленные пакеты openssl, mokutil;
  • терпение.

Secure boot

Зараза из зараз, в чем суть, почему многие просто отключают его?
Да просто все, это зараза не дает загружать неподписанные модули ядра.
Поэтому нам надо сформировать собственный ключ, вписать его в MOK UEFI и подписывать ключами модули.

Формируем ключ. Информация взята отсюда.

Создадим каталог, где будем хранить эти важные данные (конечно все делаем от root‘а) и заходим в созданный каталог:

1
2
mkdir /etc/pki/my-secureboot
cd /etc/pki/my-secureboot

Создаем файл с именем configuration_file.config и с таким содержимым:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
prompt = no
string_mask = utf8only
x509_extensions = myexts

[ req_distinguished_name ]
O = Organization
CN = Organization signing key
emailAddress = E-mail address

[ myexts ]
basicConstraints=critical,CA:FALSE
keyUsage=digitalSignature
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid

Только поменяй O=, CN=, emailAddress= на свои.

Формируем ключи такой командой:

1
openssl req -x509 -new -nodes -utf8 -sha256 -days 36500 -batch -config configuration_file.config -outform DER -out public_key.der -keyout private_key.priv

У нас есть ключи, надо добавить ключ в UEFI. Страшно, аж жуть.
На самом деле, это делается одной командой. Все уже придумано за нас (информация взята отсюда):

1
mokutil --import public_key.der

ВНИМАНИЕ!!! Команда дважды запросит пароль. Сильно над ним думать не стоит, но запомнить обязательно!

Не знал, что скажу это линуксоидам: перезагружаем машинку!
При перезагрузке UEFI попросит нас кое что сделать необычное, что-то вроде такой надписи должно там быть: MOK key enrollment
Выбираем, нас попросят ввести пароль. Ну ты же его запомнил, вводи.

Все, теперь у нас есть ключик, который знает наш secure boot. И которым мы в будущем будем подписывать все наши внешние модули.

А теперь начинается почти стандартный инструкция по установке с этой страницы.

Ставим репы Bumblebee:

1
2
dnf -y --nogpgcheck install http://install.linux.ncsu.edu/pub/yum/itecs/public/bumblebee/fedora25/noarch/bumblebee-release-1.2-1.noarch.rpm
dnf -y --nogpgcheck install http://install.linux.ncsu.edu/pub/yum/itecs/public/bumblebee-nonfree/fedora25/noarch/bumblebee-nonfree-release-1.2-1.noarch.rpm

Для архитектуры x86_64 ставим пакеты вместе с multilib:

1
dnf install bumblebee-nvidia bbswitch-dkms VirtualGL.x86_64 VirtualGL.i686 primus.x86_64 primus.i686 kernel-devel dkms @development-tools

Для 32-х битной x86 (а такие еще есть? О_о) ставим пакеты так:

1
dnf install bumblebee-nvidia bbswitch-dkms VirtualGL primus kernel-devel dkms @development-tools

Ну теперь заживем! Только перезагружаться еще рано. Надо, чтобы два модуля подписывались нашим ключем от secure boot.

Для nvidia редактируем файл /etc/bumblebee/bumblebee-nvidia-sign.conf и вписываем в него наши ключи, приватный и публичный:

1
2
3
4
## Public and private keys to sing the drivers for systems with secure boot (full path)
## Note: the created public key must be imported into the UEFI.
Publickey=/etc/pki/my-secureboot/public_key.der
Privatekey=/etc/pki/my-secureboot/private_key.priv

А еще у нас есть модуль bbswitch, который умеет отключать неиспользуемую карту для экономии энергии.
Его нам тоже надо подписывать. Мне не удалось сделать это «штатно». Вроде как разработчики уверяют, что все работает, но у меня само не взлетело. Поэтому я сделал дополнительный контрольный скрипт, хук, который при обновлении и пересборке модуля будет каждый раз сам его подписывать.
Имя скрипта /etc/kernel/postinst.d/z-bbswitch-sign и его содержимое:

1
2
3
4
#!/bin/bash
KVER=$1
KEYPATH=/etc/pki/my-secureboot
/usr/src/kernels/$KVER/scripts/sign-file sha256 $KEYPATH/private_key.priv $KEYPATH/public_key.der /lib/modules/$KVER/extra/bbswitch.ko

Делаем его запускаемым:

1
chmod +x /etc/kernel/postinst.d/z-bbswitch-sign

Важно! Этот скрипт должен исполняться после хука dkms, иначе ему нечего будет подписывать.
Поэтому он носит такое стремное название: z-bbswitch-sign

Проверим, на всякий случай, что systemd-сервисы есть в автозагрузке:

1
systemctl enable bumblebee-nvidia.service bumblebeed.service

Все. Мы все сделали, чтобы уже перезагрузиться и насладиться нашим оптимусом.

1
reboot

Проверяем, в запущенной системе, от пользователя выполняем команду:

1
optirun -b none nvidia-settings -c :8

Должно запуститься приложение nvidia-settings и показать нам параметры нашей nvidia-карты.
На этом все.
Я буду рад ответить на вопросы в комментариях. Если найдете ошибки, то тоже буду рад их исправить.

Bumblebee в Fedora 25 устанавливаем nvidia с Secure Boot: 12 комментариев

  1. Михаил

    Скажите, пожалуйста, какую команду надо использовать для добавления ключа в BIOS
    вместо mokutil —import public_key.der?

      1. Михаил

        При попытке использовать эту команду выдается ошибка:
        EFI variables are not supported on this system

        Хотелось бы узнать аналог этой команды для компьютеров без UEFI. Или эту ошибку возможно как-то обойти?

        1. Алексей Автор записи

          А так суть инструкции в том, чтобы сделать это для систем с UEFI без выключения Secure Boot! Без UEFI сертификаты, их запись в MOK и указание при сборке модулей — не нужны. Т.е. ставишь пакеты, включаешь systemd-юниты и все.

          1. Михаил

            У меня возникла довольно странная проблема:
            optirun -b none nvidia-settings -c :8
            [ 913.507130] [ERROR]The Bumblebee daemon has not been started yet or the socket path /var/run/bumblebee.socket was incorrect.
            [ 913.507180] [ERROR]Could not connect to bumblebee daemon — is it running?

            Похожие сообщения об ошибках возникают у людей при использовании Secure Boot, но у меня в BIOS даже такого пункта нет.

          2. Алексей Автор записи

            При возникновении этой ошибки надо перезапустить сервисы:

            1
            systemctl restart bumblebee-nvidia.service bumblebeed.service

            . Пока не разбирался, что там, но при старте — не пересобирает модуль nvidia, у меня тоже выскочило при обновлении ядра.

          3. Михаил

            К сожалению, перезапуск не помог.
            Даже если их просто запускать — ничего не происходит, только при
            sudo systemctl start bumblebee-nvidia
            компьютер ‘зависает’ на несколько секунд.

          4. Алексей Автор записи

            Ну тут я тебе не помогу. Иди в jabber-конфу: fedora@conference.jabber.ru попробую там помочь.
            Еще проверь, что у тебя установлены пакеты для сборки модуля: dnf install @development-tools dkms kernel-devel.

  2. Михаил

    Возможно, у Вас опечатка, и в строке
    systemctd enable bumblebee-nvidia.service bumblebeed.service
    имелось ввиду systemctl.

    1. Алексей Автор записи

      Слушай, вроде работало, но у меня сейчас этот ноут в ремонте, прямо точно на 100% не скажу, но там gnome и 25.

Добавить комментарий