Категорії
Thinstation

[Thinstation] Збираємо образ з нуля для завантаження через UEFI+PXE+HTTP

Обладнання: бездисковий компʼютер intel nuc7jy

Умови: швидке завантаження через UEFI по протоколу HTTP

Зазвичай для цього використовують якісь lightweight дистрибутиви на зразок Thinstation. Основна ідея зробити завантаження швидким і надійним. Протокол TFTP набагато повільніше за HTTP і має менше можливостей керувати завантаженнями (доступи, тюнинг,…).

Спочатку я пішов таким шляхом: беру готовий образ thinstation, звідти беру grubx64.efi і вантажу його через TFTP. Але при спробі завантажитися, були помилки на grub. Тоді беру grubx64.efi з образу Debian, і помилок вже немає, але неможливо вказати шлях до lib.squash (а я збирав з параметром fastboot для зменшення образу і це була ще одна моя помилка), оскільки це grub, то нічого ми передати не зможемо. На всяк випадок ось частина конфігу grub для завантаження через http

menuentry 'ThinStation' --class thinstation --class gnu-linux --class gnu --class os --unrestricted {
        set enable_progress_indicator=1
        set gfxpayload=keep
        set root=(http,192.168.1.2)
        linux /boot/vmlinuz  splash=silent,theme:default console=tty1 LM=$LM
        initrd /boot/initrd
}

Коли писав статтю, то наштовхнувся на таке

/build/packages/base/etc/init.d/fastboot: FILE_NET="$squash_server$squash_location"lib.squash

Можливо можна якось “підшаманити” з цими параметрами і завантажити lib.squash

Потім наштовхнувся на статтю , де замість grub використовувався завантажувач iPXE. І дійсно, з ним все пішло як треба. Ось конфіг dhcp:

subnet 192.168.1.0 netmask 255.255.255.0 {
        range 192.168.1.10 192.168.1.20;
        option routers 192.168.1.1;
        option domain-name-servers 8.8.4.4, 8.8.8.8;
        option subnet-mask 255.255.255.0;
        default-lease-time 86400;
        max-lease-time 86400;
        option tftp-server-name "192.168.1.2";
        next-server 192.168.1.2;
        filename "boot/efi64/ipxe.efi";
}

Після цього бездискова машина завантажується, але мережі немає, бо відсутній драйвер для мережевої карти в самому linux’i. Ще була спроба зібрати initrd виключно для машини intel nuc7jy (так, такий шаблон був у thinstation), але і тут драйвера теж не виявилося. Щоб дізнатися, який драйвер необхідний, вантажимося з LiveCD і через lspci -v. Але і тут був сюрприз: LiveCD показує r8169, який вже є і мережа працює нормально, а тут він теж є, але мережа не працює ((. Далі гуг нам підказує:

So to summarize.
 – If you have a RTL8111/8168/8411 card do not use the r8169 driver
– Install the r8168 driver instead

Беремо драйвера звідси і збираємо їх для того ядра, для якого вже зібраний образ thinstation, отже для 5.15.51TS, далі перезбираємо образ initrd і … драйвер є, але не підвантажується, бо …

probe failed with error 49 linux
modprobe key was rejected by service

а це нам каже, що увімкнений підпис драйверів у ядрі і просто так ми не зможемо підвантажити наш драйвер. Всі спроби як підписати драйвер для зібраного ядра thinstation були марні, тому, як це не прикро, треба збирати ядро без опції підпису. Примусовий підпис для модулів ядра можна прибрати через grub, передавши параметр module.sig_enforce=0, але у нас не grub ))), тому збираємо ядро. Конкретно те ядро швидко не знайшов, тому вирішив збирати 5.15.131TS. Ось тут написано як відключити. Ну і треба ще раз перезібрати сам модуль r8168 для мережевої карти, бо, навіть, якщо версії ядра відрізняються мінорно, модуль не підгружається (може це можна якось відключити, але я не знайшов).

Пару слів про нюанси роботи з thinstation.

збірка thinstation проходить в chroot’і

thinstation.conf.buildtime – файл, який використовується для задання параметрів після завантаження бездискової станції. Для того, щоб IP адреса отримувалася при завантаженні, потрібно це явно вказати (без цього просто не будете отримувати IP адресу, і не важливо, чи додали ви пакет dhcp чи ні). Тому додаємо таке:

NET_USE_DHCP=on                                                                                                                                                                                                                                                               
NET_DHCP_DELAY=3                                                                                                                                                                                                                                                              
NET_USE=BOTH                                                                                                                                                                                                                                                                  
NET_REMOTE_ACCESS_FROM=0.0.0.0                                                                                                                                                                                                                                                
NET_FILE_ENABLED=On                                                                                                                                                                                                                                                           
#NET_FILE_METHOD=tftp

build.conf – файл який використовується при збірці initrd, тобто впливає конфігурацію зібраного linux образу:

param basename       thinstation
param basepath       configs
param baseurl        http://192.168.1.2                                                                                                    
param initrdcmd      "gzip -9"
param bootverbosity  3
param bootimages     "pxe"
param bootserver     "192.168.1.2"

І після цього всього можна вантажити rdesktop, але… на нових windows при логіні через RDP показує сертифікат і немає кнопки прийняти його, тому прийшлося перейти на freerdp у якого в рази більше опцій.

Також були нюанси з роздільною здатністю монітора, але це було тому, що не був включений драйвер відеокарти до шаблону machine.

Статистика така: ядро vmlinux = 8.2Mb, образ ОС initrd = 320Mb. Час завантаження через http ~ 15-20 sec. В порівнянні з TFTP 2.5 min при initrd = 120Mb.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Домашняя страничка Andy
Записки молодого админа
Самостоятельная подготовка к Cisco CCNA
Самостоятельная подготовка к Cisco CCNP
Powered by Muff