{"id":43,"date":"2011-01-26T21:50:01","date_gmt":"2011-01-26T21:50:01","guid":{"rendered":"http:\/\/www.budus.it\/Blog\/?p=43"},"modified":"2017-06-18T08:01:46","modified_gmt":"2017-06-18T08:01:46","slug":"network-boot-tramite-tftp-pxe","status":"publish","type":"post","link":"https:\/\/www.budus.it\/Blog\/network-boot-tramite-tftp-pxe\/","title":{"rendered":"Network Boot tramite TFTP \/ PXE"},"content":{"rendered":"<p><strong>D<\/strong>unque, mi trovo con la seguente situazione:<\/p>\n<ul>\n<li>Portatile con Hard-Disk (IDE, nuovo, da 160Gb) completamente andato.<\/li>\n<li>Cd-Rom non funzionante.<\/li>\n<\/ul>\n<p>Ho una missione: fare in modo che questo portatile &#8211; che appartiene ad un mio amico &#8211; sia in grado di far girare un gioco per Windows (PokerStar.it) collegandosi ad internet tramite una chiavetta USB Olicard 100 TIM.<\/p>\n<p><!--more--><\/p>\n<p>In <a title=\"Linux, Chiavetta Internet USB, TIM, VODAFONE, GPRS o UMTS, Bluetooth\" href=\"https:\/\/www.budus.it\/Blog\/?p=41\" target=\"_blank\" rel=\"noopener\">un altro articolo<\/a> ho spiegato, a grandi linee, come sistemare una GNU\/Linux Debian 5.0 per funzionare con suddetta chiavetta. Dato che il gioco in questione funziona perfettamente &#8211; tramite Wine &#8211; su Linux, che la chiavetta in questione \u00e8 supportata da Debian (\u00e8 sufficiente fare il downgrade del Kernel di una versione, poco male &#8230;) e che non saprei come installare Windows senza CD-Rom (in giro c&#8217;\u00e8 qualche guida che spiega come farlo con una chiavetta USB, ma la cosa non mi &#8220;intriga&#8221; quindi non ho indagato oltre), ho deciso di cimentarmi nell&#8217;installazione della Debian 5.0 facendo il boot tramite LAN, in altri termini: <strong>fare in modo che il portatile faccia il boot di installazione della Debian sfruttando il mio PC Desktop<\/strong> (che \u00e8 poi un mezzo Server, se considero tutti i servizi installati e funzionanti, che fa girare una bella Gentoo, installata nel 2005 e mantenuta &#8220;perfettamente&#8221; aggiornata).<\/p>\n<p>Non avendo mai realizzato il boot di una macchina tramite rete ed essendo un argomento a me piuttosto ignoto, ho dovuto cimentarmi nella lettura di parecchie guide\/howto\/ecc&#8230;, nonch\u00e8 parecchie ore di &#8220;smanettamento&#8221;, prima di saltarci fuori ma ce l&#8217;ho fatta !<\/p>\n<p>Ecco, scrivo qui la mia esperienza, cos\u00ec che anche altri possano farsi un&#8217;idea &#8211; pur non prendendo il tutto come oro colato, mi raccomando &#8211; di come operare.<\/p>\n<p>La prima cosa \u00e8 il Server che deve consentire il BOOT via rete (da ora lo chiamo boot_server). Nel mio caso si tratta di una Gentoo. E&#8217; necessario fare in modo che la macchina esegua il servizio di Server DHCP; io ho installato <em><strong>net-misc\/dhcp<\/strong><\/em> ( <strong>emerge net-misc\/dhcp<\/strong> ) e l&#8217;ho configurato come segue (<strong>\/etc\/dhcp\/dhcpd.conf<\/strong>):<\/p>\n<pre>ddns-update-style ad-hoc;\r\noption domain-name \"udasoftware.net\";\r\ndefault-lease-time 600;\r\nmax-lease-time 7200;\r\nallow booting;\r\nallow bootp;\r\nsubnet 192.168.96.0 netmask 255.255.255.0 {\r\n}\r\n\r\nsubnet 192.168.243.0 netmask 255.255.255.0 {\r\n}\r\n\r\nsubnet 192.168.0.0 netmask 255.255.255.0 {\r\n  range 192.168.0.200 192.168.0.250;\r\n  option broadcast-address 192.168.0.255;\r\n# the gateway address which can be different\r\n# (access to the internet for instance)\r\n  option routers 192.168.0.2;\r\n# indicate the dns you want to use\r\n  option domain-name-servers 208.67.222.222;\r\n}\r\n\r\ngroup {\r\n next-server 192.168.0.1;\r\n filename \"\/tftproot\/pxelinux.0\";\r\n\r\n host tftpclient {\r\n  hardware ethernet 00:0e:7f:7a:af:c6;\r\n  fixed-address 192.168.0.253;\r\n }\r\n}<\/pre>\n<p>Pi\u00f9 o meno dovrebbe andare bene cos\u00ec, sar\u00e0 giusto da &#8220;personalizzare&#8221; (cambiando indirizzi\/nomi) ma credo sia una buona base di partenza; in particolare abbiamo da personalizzare:<\/p>\n<ul>\n<li>&#8220;udasoftware.net&#8221; \u00e8 il nome che ho dato alla mia LAN<\/li>\n<li>192.168.96.0 e 192.168.243.0 che sono delle reti installate da VMWare (il software di virtualizzazione). Ho aggiunto quelle righe perch\u00e8 altrimenti DHCP rompeva &#8230;.<\/li>\n<li>192.168.0.0 \u00e8 l&#8217;indirizzo della LAN reale (della quale fa parte anche il router ethernet D-Link)<\/li>\n<li>Dato che il router DHCP gi\u00e0 ha un suo DHCP (con un &#8220;range&#8221; che va da 192.168.0.1 a 192.168.0.100) ho deciso che in questo caso davo da .200 a .250, giusto per non avere &#8220;conflitti&#8221;.<\/li>\n<li>192.168.0.255 \u00e8 l&#8217;indirizzo di broadcast.<\/li>\n<li>192.168.0.2 \u00e8 l&#8217;indirizzo del router Ethernet ADSL.<\/li>\n<li>208.67.222.222 \u00e8 un server DNS (open); \u00e8 fondamentale mettere un DNS affinch\u00e8 poi sia possibile installare la distro tramite Internet.<\/li>\n<li>Il percorso &#8220;\/tftproot\/pxelinux.0&#8221; \u00e8 laddove il client che dovr\u00e0 fare il boot (da ora lo chiamer\u00f2 boot_client) andr\u00e0 a cercare l&#8217;immagine del boot loader PXE.<\/li>\n<li>00:0e:7f:7a:af:c6 \u00e8 l&#8217;indirizzo MAC della scheda di rete del boot_client. Se non avete modo di individuarlo a priori, comunque lo riuscirete a vedere in <strong>\/var\/log\/syslog<\/strong> nel momento in cui il boot_client contatter\u00e0 il Server DHCP del boot_server.<\/li>\n<li>192.168.0.253 \u00e8 l&#8217;indirizzo IP che verr\u00e0 assegnato al boot_client che ha l&#8217;indirizzo MAC specificato; se inizialmente non si conosce quest&#8217;ultimo (e quindi non si \u00e8 configurato l&#8217;hardware ethernet) \u00e8 probabile che sar\u00e0 assegnato il 192.168.0.200 (vedi la riga dei range).<\/li>\n<\/ul>\n<p>Per verificare che la configurazione non contenga errori di sintassi usare <em><strong>\/etc\/init.d\/dhcpd configtest<\/strong><\/em> .<\/p>\n<p>Se non da errori, avviare il servizio con <em><strong>\/etc\/init.d\/dhcpd start<\/strong><\/em> . Gi\u00e0 ora pu\u00f2 essere una buona idea verificare che il boot_client riesca a fare il boot via rete, o meglio, che almeno riesca ad intercettare il Server DHCP e, successivamente, interrogare il TFTP Server (che ancora non abbiamo attibato). In questo modo, se non \u00e8 ancora stato fatto, si pu\u00f2 configurare opportunamente il MAC Address nel file di configurazione <strong>dhcp.conf<\/strong> e riavviare il server con <em><strong>\/etc\/init.d\/dhcpd restart<\/strong><\/em> .<\/p>\n<p>Ora che il Server DHCP \u00e8 sistemato, dobbiamo passare al Server TFTP. Io ho usato <strong>net-ftp\/atftp<\/strong> ( <strong>emerge atftp<\/strong> ). Una volta che lo si \u00e8 installato \u00e8 necessario procedere in questo modo:<\/p>\n<ol>\n<li>Creare la cartella che dovr\u00e0 contenere i files di Boot ( <strong>\/tftproot<\/strong> ) e impostare come user e group rispettivamente <em><strong>nobody<\/strong><\/em>e <strong><em>nobody<\/em><\/strong> .<\/li>\n<li>All&#8217;interno di questa cartella va collocato il file <strong>pxelinux.0<\/strong> (io l&#8217;ho trovato, installando <strong><em>sys-boot\/syslinux<\/em><\/strong> nella cartella <strong>\/usr\/share\/syslinux\/<\/strong> ).<\/li>\n<li>Il file <strong>pxelinux.0<\/strong> \u00e8 il Boot Loader che viene trasmesso al boot_client tramite protocollo TFTP; quando il boot_client lo riceve ed esegue, si ricollega &#8211; sempre tramite TFTP &#8211; al boot_server e va a cercare nella cartella <strong>\/tftproot\/pxelinux.cfg\/<\/strong> (non \u00e8 il nome di un file \u00e8 proprio una cartella !) un file che ha &#8220;un nome particolare&#8221;. Purtroppo non \u00e8 possibile predire il nome del file di configurazione che il boot_client andr\u00e0 a cercare perch\u00e8 dipende dal suo MAC Address (in prima istanza) o dal suo Indirizzo IP (in seconda istanza). Tuttavia uno dovrebbe riuscire a capire &#8220;cosa cerca&#8221; semplicemente provando. Una volta individuato (ad esempio, nel mio caso, il file di configurazione l&#8217;ho dovuto chiamare <strong>00f1ff4d-751c-d811-95fb-000e7f7aafc6<\/strong> ) bisogna crearlo e scrivere delle righe come le seguenti:\n<ol>\n<li>default install<\/li>\n<li>label install<\/li>\n<li>menu label ^Install<\/li>\n<li>menu default<\/li>\n<li>kernel debian-installer\/i386\/linux<\/li>\n<li>append vga=normal initrd=debian-installer\/i386\/initrd.gz &#8212; quiet<\/li>\n<\/ol>\n<ul>\n<li>NB: Nel mio caso, dovendo installare debian, ho creato delle sotto-cartelle ( \/tftproot\/debian-installer\/i386\/ ) dove sono andato a collocare i files di boot prelevati dal sito Debian, nella sezione NetInst (vedere: <a title=\"NetBoot Debian Lenny\" href=\"http:\/\/ftp.nl.debian.org\/debian\/dists\/lenny\/main\/installer-i386\/current\/images\/netboot\/debian-installer\/i386\/\" target=\"_blank\" rel=\"noopener\">netboot Debian<\/a> ). Alla fine, quello che importa, \u00e8 procurarsi un kernel linux (in genere, sui CD di installazione, si chiama <em><strong>vmlinuz<\/strong><\/em>) e un&#8217;immagine con la base per il boot (generalmente <em><strong>initrd.gz<\/strong><\/em> ), collocarli nella directory del Server TFTP e, nel file di configurazione sopra, specificare il percorso completo per il kernel (omonimo comando) e l&#8217;immagine ( <strong>append initrd=&#8230;<\/strong> ).<\/li>\n<\/ul>\n<\/li>\n<li>Procurarsi i files che il boot loader dovr\u00e0 caricare e collocarli opportunamente, secondo quanto scritto nel file di configurazione del punto precedente.<\/li>\n<li>Avviare il servizio con <strong>\/etc\/init.d\/atftpd start<\/strong> . Controllare <em><strong>syslog<\/strong><\/em> per verificare che tutto sia ok. Per avere un &#8220;monitor&#8221; durante il boot del boot_client, si pu\u00f2 usare questo comando: <strong>tail -f \/var\/log\/syslog<\/strong><\/li>\n<\/ol>\n<p>NB: Se sul boot_server \u00e8 presente un Firewall (ad esempio <em><strong>shorewall<\/strong><\/em>) ricordarsi di configurare una regola per aprire la porta 69\/UDP .<br \/>\nA questo punto il boot_server dovrebbe essere pronto e non resta che avviare il boot_client specificando di eseguire il boot tramite LAN (in genere va configurato il BIOS o si deve premere F12).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dunque, mi trovo con la seguente situazione: Portatile con Hard-Disk (IDE, nuovo, da 160Gb) completamente andato. Cd-Rom non funzionante. Ho una missione: fare in modo che questo portatile &#8211; che appartiene ad un mio amico &#8211; sia in grado di far girare un gioco per Windows (PokerStar.it) collegandosi ad internet tramite una chiavetta USB Olicard &hellip; <a href=\"https:\/\/www.budus.it\/Blog\/network-boot-tramite-tftp-pxe\/\" class=\"more-link\">Leggi tutto<span class=\"screen-reader-text\"> &#8220;Network Boot tramite TFTP \/ PXE&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,25],"tags":[41,44,9,42,43,24],"class_list":["post-43","post","type-post","status-publish","format-standard","hentry","category-networking","category-operating-system","tag-boot","tag-firewall","tag-linux","tag-server-dhcp","tag-server-tftp","tag-vmware"],"_links":{"self":[{"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/posts\/43","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/comments?post=43"}],"version-history":[{"count":3,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/posts\/43\/revisions"}],"predecessor-version":[{"id":954,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/posts\/43\/revisions\/954"}],"wp:attachment":[{"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/media?parent=43"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/categories?post=43"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/tags?post=43"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}