Knoppix 7.7.1 — загрузка x64-версии через PXE

Posted: 2017-04-20 in IT, Networks
Метки:,

В прошлой статье про PXE я описал массу способов сетевой загрузки самых разнообразных осей с USB-флешки домашнего роутера.
С тех пор вышел новый кноппикс — 7.7.1, и помимо обновления (с выхода версии 7.6 прошёл год), мне хотелось иметь возможность грузить полноценное рабочее место с x64-ядром, поскольку объёмы памяти и аппетиты приложений только растут.
Что из этого вышло — читаем ниже.

Как мы знаем, ключевой момент рефакторинга кноппикса под сетевую загрузку — сборка мини-образа miniroot.gz c помощью скрипта knoppix-terminalserver, с последующим вытаскиванием из /tftpboot собранного файла miniroot.gz и размещения его на tftp вместе с ядром, которое остаётся без изменений. Основная часть системы располагается на NFS-шаре.

Первая проблема, с которой я столкнулся — пересобранный Knoppix 7.7.1 отказался грузиться по сети в виртуалбоксе, ругаясь, что не может поднять сеть в nfsv4.ko. Оказалось, что данный модуль как раз таки на месте (он отвечает за монтирование NFS), а корень проблемы в том, что скрипт сборки не включает драйвер столь старой сетевой карты, как PCnet в состав мини-образа, а именно эту карту и эмулирует по умолчанию виртуалбокс.
Первое решение — поставить в свойствах ВМ модель сетевой карты Интел вместо древнющщего PCnet и не мучиться, сразу получив рабочую загрузку. Но поскольку ВМ несколько, и менять их свойства мне лениво, я решил попутно разобраться с пересборкой мини-образа и добавитьтуда таки несчастный файл.
Таким образом, второе решение — после запуска скрипта knoppix-terminalserver, указания всех драйверов на этапе setup и сборки, ищем файл драйвера (find / -type f -name «pcnet32.ko») и копируем его (например, из /KNOPPIX/lib/modules/4.7.9/kernel/drivers/net/ethernet/amd/pcnet32.ko) в /tmp/knoppix-terminalserver-miniroot/modules/net.

Теперь собираем мини-образ:

# cd /tmp/knoppix-terminalserver-miniroot/
# find . | sudo cpio -H newc -ov | gzip -9v > /tftpboot/miniroot.gz

Полученный файл miniroot.gz закидиваем на tftp и радуемся заработавшей загрузке на старой сетевой карте виртуалбокса. Вообще драйверов там безумно много, и обычно скрипт всё добавлял как надо. Тут же этот драйвер даже не показан в списке, и его пришлось добавить вручную. Не исключаю, что там есть драйверы для массы вымершего железа, но опция «включить всё» была бы не лишней.

Однако этот скрипт собирает исключительно 32-х битного клиента, тогда как в исходном DVD-образе есть возможность грузиться 64-х битным ядром. И мне остро зачесалось иметь возможность грузиться 64-х битным ядром в кноппиксе с домашнего роутера.

Тут уже потребуется небольшой хак. Что порадовало — образ основной системы, лежащий на NFS и весящий 4 Гб, является общим для обоих версий, так что его пересобирать не придётся.

Первое,что мы делаем — правим сам скрипт сборки терминального сервера.

# which knoppix-terminalserver
/usr/sbin/knoppix-terminalserver
# mcedit /usr/sbin/knoppix-terminalserver

Да, именно mcedit, да простят меня фанаты пикающего и всё_портящего редактора. =)

Комментим вот эту строчку под комментарием:

# We don't support 64 bit clients yet (needs duplicate space on initrd)
KERNEL="${KERNEL%%-64}"

И просто запускаем скрипт заново. Если надо — повторяем фокус из начала статьи с подсовыванием драйвера pcnet32 или ещё каких своих драйверов (обратите внимание, что в пути к модулю версия ядра должна содержать срочку -64, например, /KNOPPIX/lib/modules/4.7.9-64/kernel/drivers/net/ethernet/amd/pcnet32.ko).

Теперь вытаскиваем на наш tftp файл ядра linux64 и наш мини-образ, который лучше переименовать в miniroot64.gz.
прописываем в меню pxelinux, как обычно, не забывая исправлять имена файлов и подписи, как описано в предыдущей статье. Проверяем, убеждаемся, что система грузится как в сингле, так и в графике, и ядро у нас x64.

Радуемся.

Обсуждение закрыто.