Uživatelské nástroje

Nástroje pro tento web

Tato dokumentace již není udržována týmem projektu Turris (přestože ji lze i nadále používat pro sdílení komunitního obsahu). Aktuální oficiální dokumentace se nachází na docs.turris.cz.

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/.

Boot po síti

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.

K čemu to je dobré

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ě.

Co bude potřeba

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í.

Automount

Automatické mountování připojeného média se nastavuje v souboru /etc/config/fstab:

Soubor může vypadat např. takto:

/etc/config/fstab
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

Tipy pro ladění

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.

Příprava prostředí

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 menu
  • bios/com32/menu/menu.c32 – textová verze menu
  • bios/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.

Instalace a konfigurace potřebných nástrojů

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:

/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):

/etc/config/dhcp
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

Příprava image

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/.

Příprava boot menu

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.

/mnt/data/tftp/pxelinux.cfg/default
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 menu
  • TIMEOUT 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:

/mnt/data/tftp/pxelinux.cfg/ubuntu.cfg
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 menu
  • LABEL 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 mezi 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.

Spolupráce se síťovými instalátory

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.

Ostatní distribuce / Komplexní příklad

V této sekci se v podobě komplexního příkladu objeví návod pro další distribuce. Ukázky nepotřebují další komentář.

/mnt/data/tftp/pxelinux.cfg/default
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
/mnt/data/tftp/pxelinux.cfg/tools.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
/mnt/data/tftp/pxelinux.cfg/linux-min.cfg
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
/mnt/data/tftp/pxelinux.cfg/ubuntu.cfg
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