Uživatelské nástroje

Nástroje pro tento web


Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

cs:howto:network_boot [2016/09/20 13:17] (aktuální)
Řádek 1: Řádek 1:
 +====== 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:
 +
 +<file txt /​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'​
 +</​file>​
 +
 +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.
 +
 +<WRAP center tip 80%>
 +**TIP:** Mount disku lze provést v administračním rozhraní [[ssh|LuCI]] na záložce //Systém / Přípojné body//. Podrobnosti v sekci [[:​cs:​howto:​nas#​Mount disku|Mount disku na stránce NAS]]
 +</​WRAP>​
 +
 +
 +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 [[https://​www.kernel.org/​pub/​linux/​utils/​boot/​syslinux/​|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'':​
 +
 +<file txt /​etc/​exports>​
 +/​mnt/​data/​tftp/​images ​ *(ro,​async,​no_subtree_check)
 +</​file>​
 +
 +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):​
 +
 +<file txt /​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'​
 +...
 +</​file>​
 +
 +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]].
 +
 +<file txt /​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
 +</​file>​
 +
 +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:
 +
 +<file txt /​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
 +</​file>​
 +
 +  * ''​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 [[http://​www.syslinux.org/​wiki/​index.php/​Comboot/​menu.c32|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í [[http://​ftp.nl.debian.org/​debian/​dists/​wheezy/​main/​installer-amd64/​current/​images/​netboot/​netboot.tar.gz|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:
 +
 +<​code>​
 +LABEL debian-netinst
 + MENU LABEL Debian netinst
 + KERNEL vesamenu.c32
 + APPEND debian-installer/​amd64/​boot-screens/​syslinux.cfg
 +</​code>​
 +
 +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ář.
 +
 +<file txt /​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
 +</​file>​
 +
 +<file txt /​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
 +</​file>​
 +
 +<file txt /​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
 +
 +</​file>​
 +
 +<file txt /​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
 +
 +</​file>​