{"id":244,"date":"2011-08-02T09:32:34","date_gmt":"2011-08-02T09:32:34","guid":{"rendered":"http:\/\/www.budus.it\/Blog\/?p=244"},"modified":"2017-06-18T07:55:24","modified_gmt":"2017-06-18T07:55:24","slug":"ubuntu-installiamo-linux-tramite-network-boot-dhcp-pxe-tftp-nfs","status":"publish","type":"post","link":"https:\/\/www.budus.it\/Blog\/ubuntu-installiamo-linux-tramite-network-boot-dhcp-pxe-tftp-nfs\/","title":{"rendered":"Ubuntu: Installiamo Linux tramite Network Boot (DHCP + PXE + TFTP + NFS)"},"content":{"rendered":"<p>E&#8217; gi\u00e0 stato trattato in <a title=\"Network Boot tramite TFTP \/ PXE\" href=\"https:\/\/www.budus.it\/Blog\/?p=43\" target=\"_blank\" rel=\"noopener\">un altro articolo<\/a> di questo Blog l&#8217;installazione di una <a title=\"Debian\" href=\"http:\/\/www.debian.org\/\" target=\"_blank\" rel=\"noopener\">Debian<\/a> usando una distribuzione <a title=\"Gentoo\" href=\"http:\/\/www.gentoo.org\/\" target=\"_blank\" rel=\"noopener\">Gentoo<\/a> come server di boot.<\/p>\n<p><!--more--><\/p>\n<p>Avendo un PC o Laptop (o comunque similare) che non possiede CD-Rom (o che non funziona, come nel mio caso) e non avendo possibilit\u00e0 di fare il boot direttamente da USB (ad esempio, nel mio caso, il BIOS \u00e8 bloccato da password e &#8211; per il momento &#8211; non la conosco), probabilmente &#8211; se supportata &#8211; l&#8217;unica soluzione che rimane \u00e8 quella di eseguire il boot della macchina tramite rete LAN (Ethernet).<\/p>\n<p>Nel mio caso ho usato una distribuzione Debian\/Lenny per fare da boot server.<\/p>\n<p>Sommariamente i passaggi da fare sono i seguenti:<\/p>\n<ol>\n<li>Procurarsi la ISO della distribuzione (nel mio caso &#8220;<a title=\"Ubuntu\" href=\"http:\/\/www.ubuntu.it\/scopri-ubuntu\/download\" target=\"_blank\" rel=\"noopener\">ubuntu-11.04-desktop-i386.iso<\/a>&#8220;)<\/li>\n<li>Installare il Server DHCP (io ho usato <strong>udhcpd<\/strong>) e configurarlo<\/li>\n<li>Installare il Server TFTP (io ho usato <strong>atftpd<\/strong>)<\/li>\n<li>Preparare la directory che deve contenere i files di configurazione e i dati per il boot (boot-manager, configurazione, kernel linux, ecc&#8230;): <strong>tftpboot<\/strong><\/li>\n<li>Installare il pacchetto per il bootloader <strong>Syslinux<\/strong><\/li>\n<li>Montare la ISO e condividerla con NFS via rete<\/li>\n<li>Eseguire il BOOT di rete con il computer su cui si vuole installare Linux (in genere, appena lo si accende, bisogna premere <strong>F12<\/strong> per effettuare il Network Boot).<\/li>\n<\/ol>\n<p>Alla fine, nel mio caso, \u00e8 stato un totale fallimento perch\u00e9 Ubuntu sparava valanghe di errori &#8211; che non ho ben capito a cosa erano dovuti &#8211; ma sono arrivato &#8211; anche se per poco, perch\u00e9 poi \u00e8 crashato &#8211; alla schermata desktop dove c&#8217;era &#8220;Installa Ubuntu&#8221;.<\/p>\n<p>Sintenticamente, elenco le cose salienti nel dettaglio.<\/p>\n<p>Installato il Server <strong>udhcpd<\/strong> (il classico:\u00a0<em>apt-get install udhcpd<\/em> ) bisogna creare un file di configurazione ( <strong>\/etc\/udhcpd.conf<\/strong> ) <em>simile<\/em> al seguente:<\/p>\n<pre>start\u00a0\u00a0\u00a0\u00a0\u00a0 192.168.0.201\r\nend\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 192.168.0.254\r\ninterface\u00a0 eth0\r\nmax_leases 54\r\nsiaddr\u00a0\u00a0\u00a0\u00a0 192.168.0.200\r\nboot_file\u00a0 pxelinux.0\r\noption\u00a0\u00a0\u00a0\u00a0 subnet\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 255.255.255.0\r\noption\u00a0\u00a0\u00a0\u00a0 dns\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 208.67.222.222<\/pre>\n<p>Dove:<\/p>\n<ul>\n<li>&#8220;start&#8221; ed &#8220;end&#8221; indicano il range di indirizzi IP che il Server DHCP potr\u00e0 assegnare alla macchina che deve eseguire il boot. Nel mio caso ho dato da .201 a .254 (compresi) per evitare che non fossero in conflitto con il Server DHCP del Router ADSL (che si ferma a .199, nel mio caso).<\/li>\n<li>&#8220;interface&#8221; \u00e8 la scheda di rete da usare, solitamente &#8220;eth0&#8221;.<\/li>\n<li>&#8220;max_leases&#8221; \u00e8 il numero di IP massimo assegnabile.<\/li>\n<li>&#8220;siaddr&#8221; \u00e8 l&#8217;IP del Server Boot (nel mio caso la Debian che sta all&#8217;IP 192.168.0.200)<\/li>\n<li>&#8220;boot_file&#8221; \u00e8 il file di boot che poi vedremo in seguito.<\/li>\n<li>&#8220;option subnet&#8221; \u00e8 la maschera di rete<\/li>\n<li>&#8220;option dns&#8221; \u00e8 importante e rappresenta il Server DNS affinch\u00e9 sia possibile poi navigare su Internet; qui andrebbe personalizzato, anche se quello sopra dovrebbe funzionare perfettamente.<\/li>\n<\/ul>\n<p>Il servizio si avvia con:<\/p>\n<pre>\/etc\/init.d\/udhcpd start<\/pre>\n<p>Installare <strong>atftpd<\/strong> ( <em>apt-get install atftpd<\/em> ) e verificare che nel file &#8220;<em>\/etc\/inetd.conf<\/em>&#8221; sia presente questa riga (cambiarla, se necessario, e ri-avviare il servizio <strong>inetd<\/strong> ):<\/p>\n<pre>tftp\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 dgram\u00a0\u00a0 udp4\u00a0\u00a0\u00a0 wait\u00a0\u00a0\u00a0 nobody \/usr\/sbin\/tcpd \/usr\/sbin\/in.tftpd --tftpd-timeout 300 --retry-timeout 5 --mcast-port 1758 --mcast-addr 239.239.239.0-255 --mcast-ttl 1 --maxthread 100 --verbose=5 --logfile \/var\/log\/atftpd.log \/tftpboot<\/pre>\n<p>In particolare bisogna fare attenzione a dove il server tftp prevede sia la directory radice (spesso \u00e8 &#8220;<em>\/var\/lib\/tftpboot<\/em>&#8221; e ci\u00f2 non funziona con i files di configurazione che fornisco).<\/p>\n<p>Da utente root, creare la cartella &#8220;<em>\/tftpboot<\/em>&#8221; con:<\/p>\n<pre>mkdir \/tftpboot\r\nmkdir \/tftpboot\/pxelinux.cfg\r\nmkdir \/tftpboot\/ubuntu-installer\r\nmkdir \/tftpboot\/ubuntu-installer\/iso<\/pre>\n<p>Se, come nel mio caso, avete problemi con Ubuntu, potete prevedere anche la possibilit\u00e0 di usare Debian con le seguenti directory aggiuntive:<\/p>\n<pre>mkdir \/tftpboot\/debian-installer\r\nmkdir \/tftpboot\/debian-installer\/i386<\/pre>\n<p>Ora andiamo a riempire queste cartelle; per prima cosa andiamo a creare i files di configurazione.<\/p>\n<p>E&#8217; il passaggio pi\u00f9 complicato perch\u00e9: <strong>il nome del file di configurazione dipende dal MAC address della macchina che deve eseguire il boot.<\/strong><\/p>\n<p>In altri termini: la macchina sulla quale dobbiamo installare Ubuntu ha un <em>indirizzo fisico di rete<\/em> fisso che va utilizzato per determinare il nome del file di configurazione.<\/p>\n<p>Ad esempio, nel mio caso, l&#8217;indirizzo \u00e8 &#8220;<em>00f1ff4d-751c-d811-95fb-000e7f7aafc6<\/em>&#8220;; \u00e8 un qualcosa che si dovrebbe leggere sulla macchina che esegue il boot &#8211; durante lo stesso &#8211; o anche in un qualche file di LOG su Linux (vedere pure <a title=\"Network Boot tramite TFTP \/ PXE\" href=\"https:\/\/www.budus.it\/Blog\/?p=43\" target=\"_blank\" rel=\"noopener\">l&#8217;altra guida<\/a> per questo aspetto).<\/p>\n<p>Io ho creato 2 file (uno per Ubuntu e uno per Debian); quello per Ubuntu l&#8217;ho chiamato &#8220;<em>00f1ff4d-751c-d811-95fb-000e7f7aafc6.ubuntu<\/em>&#8221; e il suo contenuto \u00e8 il seguente:<\/p>\n<pre>default install\r\nlabel install\r\nmenu label ^Install\r\nmenu default\r\nkernel ubuntu-installer\/linux\r\nappend root=\/dev\/nfs boot=casper netboot=nfs nfsroot=192.168.0.200:\/tftpboot\/ubuntu-installer\/iso initrd=\/tftpboot\/ubuntu-installer\/iso\/casper\/initrd.lz quiet splash --<\/pre>\n<p>mentre, quello di Debian, l&#8217;ho chiamato &#8220;<em>00f1ff4d-751c-d811-95fb-000e7f7aafc6.debian<\/em>&#8221; e contiene:<\/p>\n<pre>default install\r\nlabel install\r\nmenu label ^Install\r\nmenu default\r\nkernel debian-installer\/i386\/linux\r\nappend vga=normal initrd=debian-installer\/i386\/initrd.gz \u2014 quiet<\/pre>\n<p>Per stabilire quale dei due files di configurazione utilizzare per il boot, si rende necessario creare un link simbolico di questo tipo:<\/p>\n<pre>ln -s <em>00f1ff4d-751c-d811-95fb-000e7f7aafc6.ubuntu <em>00f1ff4d-751c-d811-95fb-000e7f7aafc6<\/em><\/em><\/pre>\n<p>Per chi \u00e8 interessato a Debian \u00e8 necessario <a title=\"Debian Network Boot Files\" href=\"http:\/\/ftp.nl.debian.org\/debian\/dists\/lenny\/main\/installer-i386\/current\/images\/netboot\/debian-installer\/i386\/\" target=\"_blank\" rel=\"noopener\">prelevare dal sito<\/a> i files per il boot e collocarli in &#8220;<em>\/tftpboot\/debian-installer\/i386<\/em>&#8220;; ottenendo:<\/p>\n<pre># ls -l \/tftpboot\/debian-installer\/i386\r\ntotale 7360\r\ndrwxrwxrwx 2 nobody nogroup\u00a0\u00a0\u00a0 1024 2011-07-31 16:50 boot-screens\r\n-rwxrwxrwx 1 nobody nogroup 6014747 2010-11-24 22:09 initrd.gz\r\n-rwxrwxrwx 1 nobody nogroup 1469808 2010-11-24 22:13 linux\r\n-rwxrwxrwx 1 nobody nogroup\u00a0\u00a0 15820 2010-11-24 22:15 pxelinux.0\r\ndrwxrwxrwx 2 nobody nogroup\u00a0\u00a0\u00a0 1024 2011-07-31 16:50 pxelinux.cfg<\/pre>\n<p>Ora installiamo <strong>syslinux<\/strong> ( <em>apt-get install syslinux<\/em> ) e copiamo il bootloader:<\/p>\n<pre>cp \/usr\/lib\/syslinux\/pxelinux.0 \/tftpboot\/<\/pre>\n<p>Se non si trova dove previsto, cercarlo con:<\/p>\n<pre>find \/usr -iname pxelinux.0<\/pre>\n<p>Dobbiamo quindi impostare correttamente i permessi e gli utenti delle cartelle e files creati con:<\/p>\n<pre>chown -R nobody:nogroup \/tftpboot\r\nchmod -R 777 \/tftpboot<\/pre>\n<p>Per quanto riguarda Ubuntu bisogna prendere la iso e copiarla dentro &#8220;<em>\/tftpboot\/ubuntu-installer<\/em>&#8220;, quindi, montarla con questo comando:<\/p>\n<pre>mount -t iso9660 \/tftpboot\/ubuntu-installer\/ubuntu-11.04-desktop-i386.iso \/tftpboot\/ubuntu-installer\/iso\/ -o loop=\/dev\/loop1,ro<\/pre>\n<p>quindi configurare il Server NFS (per installarlo: <em>apt-get install nfs-kernel-server<\/em> ) aggiungendo questa riga al file &#8220;<em>\/etc\/exports<\/em>&#8220;:<\/p>\n<pre>\/tftpboot *(ro,sync,no_wdelay,insecure_locks,no_root_squash,insecure,subtree_check)<\/pre>\n<p>e riavviare il Server NFS con:<\/p>\n<pre>\/etc\/init.d\/nfs-kernel-server restart<\/pre>\n<p>Per completare la sistemazione della cartella di boot, dobbiamo creare un link simbolico al kernel linux per Ubuntu:<\/p>\n<pre>ln -s \/tftpboot\/ubuntu-installer\/iso\/casper\/vmlinuz \/tftpboot\/ubuntu-installer\/linux<\/pre>\n<p>Bene, ora \u00e8 giunto il momento di eseguire il boot della macchina e incrociare le dita (pi\u00f9 giri, fino a quando non si staccano &#8230;) e pregare.<\/p>\n<p>Non per &#8220;tirarla&#8221; ma \u00e8 quasi impossibile vada al primo colpo. Bisogna armarsi di pazienza e capire cosa non funziona come previsto. Spesso \u00e8 un problema di percorso o di permesso. Nel mio caso sono &#8220;abbastanza attrezzato&#8221; perch\u00e9 ho un router, uno switch, ecc&#8230;, ma qualcuno potrebbe essere in situazioni pi\u00f9 critiche &#8220;computer -&gt; computer&#8221; e, in questo caso, magari servono cavi di rete incrociati, ecc&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>E&#8217; gi\u00e0 stato trattato in un altro articolo di questo Blog l&#8217;installazione di una Debian usando una distribuzione Gentoo come server di boot.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,25],"tags":[29,9,127,126,125,42,43,28],"class_list":["post-244","post","type-post","status-publish","format-standard","hentry","category-networking","category-operating-system","tag-debian","tag-linux","tag-network-boot","tag-nfs","tag-pxe","tag-server-dhcp","tag-server-tftp","tag-ubuntu"],"_links":{"self":[{"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/posts\/244","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\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/comments?post=244"}],"version-history":[{"count":5,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/posts\/244\/revisions"}],"predecessor-version":[{"id":937,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/posts\/244\/revisions\/937"}],"wp:attachment":[{"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/media?parent=244"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/categories?post=244"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.budus.it\/Blog\/wp-json\/wp\/v2\/tags?post=244"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}