Tato dokumentace je jen pro Turris OS 3.x, který se už nenachází na nově prodávaných routerech. Novou dokumentaci najdete na https://docs.turris.cz/.
PXE je technologie, která umožňuje boot počítače ze sítě. Technologii lze využít pro spouštění diagnostických nástrojů, nebo pro instalaci operačního systému ze sítě. Stejně tak je možné spouštět celý operační systém na bezdiskovém stroji.
Nyní mi dovolte trochu subjektivní a hlavně odlehčený úvod. Domácnost dnešního průměrného IT nadšence je plná NASů, externích disků a multimediálních center. V jeho síti létají pravidelně desitky TB dat. V tomto prostředí je komplikované najít nějaké CD/DVD, na rozdíl od doby před pár lety, kdy se jednalo o jeden z hlavních způsobů přenosu a skladování dat v domácnosti a kdy se jich vždy našla velká zásoba někde ve skříni nebo kancelářském stole. Pokud zároveň patříte mezi osoby, které jsou ve svém okolí a příbuzenstvu vyhlášení svými znalostmi, tak jste jistě několikrát do roka zásobováni počítači, které jsou „rozbité“, „pomalé“ a nebo „prostě divné“, s prosbou o jejich opravu.
A v tomto bodě nastává problém. Často se hodí nabootovat nějaký instalátor, nebo žijící systém, ale CD/DVD doma žádné není, počítač je starší, často low-end, model a výrobce zásadně nepodporuje boot z USB úložiště. Alternativní scénář může vypadat např. tak, že jste připraveni, zásobu CD máte, ale přinesenému počítači „už pár let nefunguje CD mechanika“.
Pokud vám popsané situace nejsou cizí, je dobrou zprávou, že boot po síti je poměrně stará technologie a často bývá implementovaná i v low-end modelech.
A nyní již vážně.
Protože interní flash paměť routeru Turris je určená pro potřeby operačního systému její velikost absolutně nedostačuje pro uložení instalačních obrazů. Je nutné k routeru Turris připojit další úložiště – externí disk, NAS, flash disk, SD kartu.
Pokud plánujete mít boot v síti zprovozněný permanentně je nutné počítat s tím, že toto úložiště musí být pro OS vždy dostupné. Boot po síti je z dané části schopen zajistit DHCP server dnsmasq, který Turris používá. Ale je tu drobná komplikace: Pokud dnsmasq po restartu routeru nenalezne definované úložiště, tak se odmítne spustit. Počítače v lokální síti nedostanou dynamické adresy, nepošlou se informace o DNS serveru a z laického úhlu pohledu „přestane fungovat internet“, což je nežádoucí. Proto je nutné počítat s úložištěm, které může router používat za každých okolností.
S předchozím problémem souvisí i volba filesystému na dodaném médiu. Připojené médium musí být jednak k dispozici fyzicky, jednak ho musí OS být schopen při bootu přimountovat. Z toho důvodu není snadné provozovat úložiště s NTFS, protože systém neumí NTFS mountovat automaticky. Při troše snahy a experimentování by mělo být možné toto obejít stejnou metodou, která je popsaná v návodu na zprovoznění NASu (nápověda: disk je potřeba přimountovat před spuštěním služby dnsmasq).
Poznámka: Pokud budete chtít po síti mountovat root file systém, nebude NTFS možné použít vůbec – nebylo by pak možné nastavit pro data správné oprávnění.
Automatické mountování připojeného média se nastavuje v souboru
/etc/config/fstab
:
Soubor může vypadat např. takto:
config global option anon_swap '0' option anon_mount '0' option auto_swap '1' option auto_mount '1' option delay_root '5' option check_fs '1' config mount option enabled '1' option uuid '126c85e6-b7f8-4df9-b83a-25e4531f98d1' option target '/mnt/data'
Volba enabled
povoluje automatický mount, uuid
je identifikátor EXT oddílu a
target
umístěním, kam se má disk mountovat. Alternativně bude fungovat i
zápis /dev/sda1
apod.
TIP: Mount disku lze provést v administračním rozhraní LuCI na záložce Systém / Přípojné body. Podrobnosti v sekci Mount disku na stránce NAS
Pokud nemáte povolenou službu fstab
, tak ji tímto příkazem povolte:
/etc/init.d/fstab enable
Pokud budete během přípravy potřebovat testovat funkčnost jednotlivých komponent, mohu doporučit instalaci jednoho z virtualizačních nástrojů (v mém případě VirtualBox) a vytvořit si virtuální počítač, jeho síťovou kartu nakonfigurovat jako bridge mód a testovat boot po síti zde. Restart virtuálního počítače je prakticky okamžitý a celé nasazení zvládnete z jednoho počítače bez nutnosti používat další HW.
Nejdříve si připravme adresářovou strukturu v nějaké složce, kterou máte na
externím mediu vyhrazenou. V ukázkách budu používat adresář /mnt/data
.
cd /mnt/data mkdir tftp tftp/images tftp/pxelinux.cfg
Nyní je potřeba stáhnout Syslinux, což je sada zavaděčů, které jsou schopné bootovat z různých medií. Mimo jiné se zde nachází i zavaděč pro boot ze sítě pomocí PXE. Seznam dostupných balíčků se nachází na této stránce. Doporučuji stáhnout nejnovější verzi ve vámi preferovaném archivu.
Do připraveného adresáře /mnt/data/tftp
zkopírujte následující soubory z
vybaleného archivu Syslinux:
bios/core/pxelinux.0
bios/com32/elflink/ldlinux/ldlinux.c32
bios/com32/menu/vesamenu.c32
– grafická verze menubios/com32/menu/menu.c32
– textová verze menubios/com32/lib/libcom32.c32
bios/com32/libutil/libutil.c32
I když to vypadá neobvykle, soubory se z dané adresářové struktury kopírují opravdu do jednoho adresáře, bez dodržování struktury.
Ze souborů vesamenu.c32
a menu.c32
je možné zvolit pouze jednu variantu podle vašich preferencí. Upozornění: V poslední části návodu jsou využity obě varianty.
Jako dodatečné vybavení budeme potřebovat NFS server. Nainstalujte ho prostřednictvím aktivace balíku NAS v rozhraní Foris. Alternativně z příkazového řádku (pozor, pak se nebude balík automaticky aktualizovat) příkazem:
opkg install nfs-kernel-server
Nastavíme sdílení pro adresář s instalačními obrazy v souboru /etc/exports
:
/mnt/data/tftp/images *(ro,async,no_subtree_check)
Povolíme a spustíme / restartujeme nainstalované služby:
/etc/init.d/portmap enable /etc/init.d/portmap restart /etc/init.d/nfsd enable /etc/init.d/nfsd restart
Na závěr je potřeba upravit soubor /etc/config/dhcp
. Do sekce config dnsmasq
přibudou 2 řádky a přibude jedna nová sekce config boot
. Po úpravě bude soubor vypadat takto (s přihlédnutím k vaší dosavadní konfiguraci):
config dnsmasq option domainneeded '1' option boguspriv '1' option localise_queries '1' option rebind_protection '1' option rebind_localhost '1' option local '/lan/' option domain 'lan' option expandhosts '1' option authoritative '1' option readethers '1' option leasefile '/tmp/dhcp.leases' option resolvfile '/tmp/resolv.conf.auto' option port '0' option enable_tftp '1' option tftp_root '/mnt/data/tftp' config boot 'linux' option filename 'pxelinux.0' option serveraddress '192.168.1.1' option servername 'Turris' ...
Zbytek souboru bude beze změny. Službu je nutné restartovat:
/etc/init.d/dnsmasq restart
Nejdříve stáhneme image distribuce, kterou hodláme instalovat. Vše budu prezentovat na distribuci Ubuntu, protože se jedná o jednu z majoritních. Postup u jiných distribucí bude podobný.
Po stažení image ho přimountujeme jako loop device. Tento příkaz je nutné dělat jako root:
mount -o loop ubuntu-14.04.1-desktop-amd64.iso /mnt/mountpoint/
Image obsahuje zhruba tuto strukturu:
$ cd /mnt/mountpoint/ $ ls -l celkem 2548 -r--r--r-- 1 root root 134 čec 23 00:34 autorun.inf dr-xr-xr-x 1 root root 2048 čec 23 00:36 boot dr-xr-xr-x 1 root root 2048 čec 23 00:36 casper dr-xr-xr-x 1 root root 2048 čec 23 00:35 dists dr-xr-xr-x 1 root root 2048 čec 23 00:36 EFI dr-xr-xr-x 1 root root 2048 čec 23 00:36 install dr-xr-xr-x 1 root root 18432 čec 23 00:36 isolinux -r--r--r-- 1 root root 21426 čec 23 00:36 md5sum.txt dr-xr-xr-x 1 root root 2048 čec 23 00:35 pics dr-xr-xr-x 1 root root 2048 čec 23 00:35 pool dr-xr-xr-x 1 root root 2048 čec 23 00:35 preseed -r--r--r-- 1 root root 231 čec 23 00:35 README.diskdefines lr-xr-xr-x 1 root root 1 čec 23 00:35 ubuntu -> . -r--r--r-- 1 root root 2551408 dub 14 2014 wubi.exe
Určitě dále nebudou potřeba soubory wubi.exe
a autorun.inf
a dejte si velký pozor na položku ubuntu
– jedná se symbolický odkaz zpět na aktuální adresář a při pokusu o zkopírování dat by došlo k zacyklení. Zbytek souborů zkopírujte do adresáře /mnt/data/images/
a do vhodně pojmenovaného podadresáře, např. ubuntu-14.04-64
. Celkový příkaz může vypadat takto:
cp -r boot casper dists EFI install isolinux md5sum.txt pics pool preseed /mnt/data/tftp/images/ubuntu-14.04-64/.
První věc, která se zobrazí na počítači, který se zavádí ze sítě, je boot menu. Jak takové menu může vypadat si ukážeme na trochu pokročilejším příkladu s více úrovněmi. V ukázce budeme pokračovat s distribucí Ubuntu a navážeme tím na sekci Příprava image.
DEFAULT menu.c32 PROMPT 0 TIMEOUT 300 ONTIMEOUT local MENU TITLE Turris at lair-net PXE-Boot Menu LABEL local MENU LABEL Boot from local hard-drive LOCALBOOT 0 LABEL ubuntu MENU LABEL Ubuntu KERNEL menu.c32 APPEND pxelinux.cfg/ubuntu.cfg
Nyní řádek po řádku co jednotlivé volby znamenají:
DEFAULT menu.c32
– Značí, které menu se má vykreslit. menu.c32
pro textovou variantu, vesamenu.c32
pro grafickou variantu. Jedná se o ten soubor, který jste kopírovali z projektu Syslinux.PROMPT 0
– Vynechá prompt a rovnou zobrazí boot menuTIMEOUT 300
– Nastaví timeout, po který je možné zvolit nějakou akci (v desetinách vteřiny, tj. 300 = 30 sekund).ONTIMEOUT local
– Představuje defaultní akci, která se provede v případě vypršení timeoutu. Nastavení definuje, že se provede akce nastavená pod labelem local
.MENU TITLE Turris PXE-Boot Menu
– Titulek vašeho boot menu.LABEL local
– Definice položky menu.MENU LABEL Boot from local hard-drive
– Titulek, pod kterým se tato položka v menu ukazuje. Dál následuje soupis akcí, které se mají provést.LOCALBOOT 0
– Říká, že pro tento label má provést boot z lokálního disku.LABEL ubuntu
– Definice další položky.MENU LABEL Ubuntu
– Titulek…KERNEL menu.c32
– Přikazuje zavést nějaký kernel. V tomto případě zavedeme opět menu.c32
, tedy znovu ukážeme „nějaké“ menu.APPEND pxelinux.cfg/ubuntu.cfg
– Parametry předané kernelu. V případě kernelu pro menu zde bude další konfigurační soubor.
Label s názvem ubuntu
nás zavede na další obrazovku. Její podoba je definována zde:
MENU TITLE Ubuntu Images label ubuntu-14.04 MENU LABEL Ubuntu 14.04 LTS Live/Install DVD 64-Bit KERNEL images/ubuntu-14.04-64/casper/vmlinuz.efi APPEND boot=casper ide=nodma netboot=nfs nfsroot=192.168.1.1:/mnt/data/tftp/images/ubuntu-14.04-64/ initrd=images/ubuntu-14.04-64/casper/initrd.lz TEXT HELP Starts the Ubuntu 14.04 LTS Live DVD - 64-Bit ENDTEXT
MENU TITLE Ubuntu Images
– Titulek nového menuLABEL ubuntu-14.04
– Definice položky menu.MENU LABEL Ubuntu 14.04 LTS Live/Install DVD 64-Bit
– Titulek pro nový záznam.KERNEL images/ubuntu-14.04-64/casper/vmlinuz.efi
– Příkaz pro zavedení kernelu. Tento label už představuje boot operačního systému, proto se bude jednat o kernel získaný z image.APPEND boot=casper ide=nodma netboot=nfs nfsroot=192.168.1.1:/mnt/data/tftp/images/ubuntu-14.04-64/ initrd=images/ubuntu-14.04-64/casper/initrd.lz
– Parametry předané kernelu. Protože se jedná o reálný systém, musí dostat informaci o tom, kde se nachází initramdisk. Další informace jsou popis toho, jak získat data po síti. Přesné parametry pro kernel se budou lišit mezi distribucemi a je vhodné je dohledat na stránkách příslušné distribuce.TEXT HELP
a ENDTEXT
je nápověda zobrazovaná pro aktivní položku menu.Kompletní seznam dostupných voleb lze nalézt na wiki projektu Syslinux.
Některé distribuce, jako např. Debian, poskytují svůj vlastní síťový instalátor. Ten bývá velmi snadné zprovoznit – jedná se pouze o vybalení stažených souborů do rootu TFTP serveru. Instalátor obsahuje všechny potřebné součásti včetně souborů z projektu Syslinux. Pro mé nasazení je ovšem zajímavé začlenit síťový instalátor distribuce Debian do mého menu.
Po rozbalení síťového instalátoru je celkem snadné zjistit, že pxelinux.cfg/default
přes několik symbolických odkazů ukazuje na soubor debian-installer/amd64/boot-screens/syslinux.cfg
, který je připravený pro práci s grafickou variantou menu vesamenu.c32
.
Přidání celého síťového instalátoru distribuce Debian dosáhneme touto položkou v hlavním menu:
LABEL debian-netinst MENU LABEL Debian netinst KERNEL vesamenu.c32 APPEND debian-installer/amd64/boot-screens/syslinux.cfg
Ukázka předpokládá, že síťový instalátor je vybalen v adresáři /mnt/data/tftp/debian-installer
.
V této sekci se v podobě komplexního příkladu objeví návod pro další distribuce. Ukázky nepotřebují další komentář.
DEFAULT menu.c32 PROMPT 0 TIMEOUT 300 ONTIMEOUT local MENU TITLE Turris at lair-net PXE-Boot Menu LABEL local MENU LABEL Boot from local hard-drive LOCALBOOT 0 LABEL tools MENU LABEL Tools KERNEL menu.c32 APPEND pxelinux.cfg/tools.cfg LABEL debian-netinst-64 MENU LABEL Debian 7 "Wheezy" netinst (64-bit) KERNEL vesamenu.c32 APPEND debian-installer/amd64/boot-screens/syslinux.cfg LABEL debian-netinst-32 MENU LABEL Debian 7 "Wheezy" netinst (32-bit) KERNEL vesamenu.c32 APPEND debian-installer/i386/boot-screens/syslinux.cfg LABEL linux-mint MENU LABEL Linux Mint KERNEL menu.c32 APPEND pxelinux.cfg/linux-mint.cfg LABEL ubuntu MENU LABEL Ubuntu KERNEL menu.c32 APPEND pxelinux.cfg/ubuntu.cfg
MENU TITLE Tools Boot Menu LABEL systemrescuecd-4-tftp MENU LABEL System Rescue CD 4.0.0 32-bit (TFTP) KERNEL images/systemrescuecd-4.0.0/rescue32 APPEND netboot=tftp://192.168.1.1/images/systemrescuecd-4.0.0/sysrcd.dat initrd=images/systemrescuecd-4.0.0/initram.igz TEXT HELP Starts the System Rescue CD - 32-Bit ENDTEXT LABEL systemrescuecd-4-nfs MENU LABEL System Rescue CD 4.0.0 32-bit (NFS) KERNEL images/systemrescuecd-4.0.0/rescue32 APPEND netboot=nfs://192.168.1.1:/mnt/data/tftp/images/systemrescuecd-4.0.0 initrd=images/systemrescuecd-4.0.0/initram.igz TEXT HELP Starts the System Rescue CD - 32-Bit ENDTEXT
MENU TITLE Linux Mint Images LABEL linux-mint-17 MENU LABEL Linux Mint 17.1 Cinnamon Live/Install DVD 64-Bit KERNEL images/mint17-cinnamon-64/casper/vmlinuz APPEND boot=casper ide=nodma netboot=nfs nfsroot=192.168.1.1:/mnt/data/tftp/images/mint17-cinnamon-64/ initrd=images/mint17-cinnamon-64/casper/initrd.lz TEXT HELP Starts the Linux Mint 17 Live DVD - 64-Bit ENDTEXT LABEL linux-mint-16 MENU LABEL Linux Mint 16 Cinnamon Live/Install DVD 64-Bit KERNEL images/mint16-cinnamon-64/casper/vmlinuz APPEND boot=casper ide=nodma netboot=nfs nfsroot=192.168.1.1:/mnt/data/tftp/images/mint16-cinnamon-64/ initrd=images/mint16-cinnamon-64/casper/initrd.lz TEXT HELP Starts the Linux Mint 16 Live DVD - 64-Bit ENDTEXT
MENU TITLE Ubuntu Images LABEL ubuntu-14.04 MENU LABEL Ubuntu 14.04 LTS Live/Install DVD 64-Bit KERNEL images/ubuntu-14.04-64/casper/vmlinuz.efi APPEND boot=casper ide=nodma netboot=nfs nfsroot=192.168.1.1:/mnt/data/tftp/images/ubuntu-14.04-64/ initrd=images/ubuntu-14.04-64/casper/initrd.lz TEXT HELP Starts the Ubuntu 14.04 LTS Live DVD - 64-Bit ENDTEXT