Installare Debian Squeeze via PXE e TFTP

Da Skypedia.

Per installare Debian tramite netinstall, avendo a disposizione un PC con porta seriale RS232 o un adattatore USB-seriale che fornisca un accesso alla macchina su cui verrà eseguita l'installazione tramite interfaccia PXE, servono alcuni componenti di base necessari all'installazione.

Il primo di questi è sicuramente un accesso alla seriale con cavo null-modem e un programma adatto all'invio e ricezione dei dati che arrivino da quest'interfaccia di rete. Tipicamente tali interfacce su macchine Linux debian-like come Ubuntu si trovano sulle /dev/ttySX, dove X è un numero pari al numero di porte. Per capire quali siano le reali porte del sistema messe a disposizione basta quindi andare a cercare su dmesg con grep tty.

Fatto ciò sapremo effettivamente quale sia l'interfaccia di rete alla quale associarsi per ascoltare o inviare comandi. L'unica cosa che ci serve ora è un programma che ci consenta di far ciò evitando dei controlli sul flusso sia software che hardware e che ci consenta di fissare il baud-rate che dovrà mantenere per tutta la connessione.

Il primo programma utile a far ciò è cu, ma risulta sicuramente superiore minicom. Una volta apt-gettati i due programmi o installati tramite sorgente, pacman, yum, emerge o quello che più vi aggrada dovrete assicurarvi di avere i permessi giusti per utilizzare tali terminali.

# addgroup $USERNAME dialout
# vim /etc/udev/rules.d/40-permissions.rules

Aggiungere questa riga per i permessi:

KERNEL=="ttyS[0-9]", GROUP="dialout", MODE="0777" 

e infine riavviare il servizio udev per rendere effettive le modifiche:

# /etc/init.d/udev restart
Debian netinst via minicom
Una volta fatto ciò il consiglio è quello di prendere sotto mano un bel dispositivo che consenta di settare il proprio BIOS per il PXE, nel nostro caso utilizzeremo un Soekris net5501, e mettersi in ascolto sul nostro null-modem tramite il veloce e comodo cu. Se tutto va come si spera, cosa che al primo colpo è sempre difficile, potremo passare a configurare il più avanzato e meno problematico nell'utilizzo intensivo minicom.

Connettersi tramite cu

Per connettersi al dispositivo scelto tramite seriale basta dare il seguente comando (interfaccia /dev/ttyS0):

cu -l /dev/ttyS0 -s 19200

Se si utilizza un adattatore seriale-usb normalmente il comando è riferito alle interfacce /dev/ttyUSB<N>:

cu -l /dev/ttyUSB0 -s 19200

Nota: per gli utenti Arch il pacchetto è uucp. Per uscire da cu bisogna dare il comando ~.

Connettersi tramite Minicom

Le preferenze di minicom sono configurabili utilizzando la combinazione di tasti "CTRL+A Z" e poi premendo il tasto O si accede alla vera configurazione. La configurazione prevede che si impostino i seguenti parametri per il funzionamento corretto di minicom e la connessione tramite seriale RS 232 (NULL MODEM):

  • COM1 --> ttys0
  • 19200 bps
  • 8/N/1
  • Nessun controllo di flusso (HW SW flow control NO)

Per configurare correttamente il baud rate bisogna cambiare manualmente il parametro dal file di configurazione (minicom -s non lo permette). Lanciate minicom da root e salvate la configurazione settando il possibile, fatelo come default. Minicom provvederà a creare un file di configurazione che troverete su /etc/minicom/minirc.dfl. Modificatelo come segue:

# Machine-generated file - use "minicom -s" to change parameters.
pu port             /dev/ttyS0
pu baudrate         19200
pu bits             8
pu parity           N
pu stopbits         1
pu rtscts           No

Il baudrate ora sarà 19200.

Important: There are baud rate issues when working with installing any OS to a Soekris box. Often when there's a mismatched baud rate, the screen will fill with garbage instead of readable characters, but at other times it's entirely possible a baud rate mismatch will lead to a blank screen, leaving one to wonder if something went wrong with the boot process or if it's a communications problem.

http://wiki.soekris.info/Connecting_to_the_serial_console

Installare TFTP

Per consentire la copia diretta dei file sul dispositivo connesso via seriale e tramite Ethernet serve un server FTP senza autenticazione che fornisca in automatico una cartella in lettura all'host che verrà configurato tramite DHCP server.

# apt-get install tftpd-hpa

Bisogna avere anche inetd installato (openbsd-inetd) e configurarlo poi su /etc/inetd.conf come segue:

tftp           dgram   udp     wait    root  /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /tftpserv

Si deve poi farlo partire:

# /etc/init.d/openbsd-inetd start

e configurare nella cartella /tftpserv (nel nostro caso) la configurazione dei file tftp che devono essere caricati al boot, dunque quelli relativi a Debian netinst.

Fatto ciò dovremmo avere una directory debian, un file boot.txt, uno pxelinux.0 e una directory pxelinux.cfg che contiene il file di configurazione corretto per l'installazione via PXE.

Installare DHCP3-server

Tutto ciò che serve per installare e configurare un DHCP server ecc. Bisogna installare dhcp3-server e configurarlo tramite il file /ect/dhcp3/dhcpd.conf:

ddns-update-style none;
# option definitions common to all supported networks...
# option domain-name "example.org";
option domain-name-servers 192.168.0.1;
default-lease-time 600;
max-lease-time 7200;
allow booting;
allow bootp;

log-facility local7;

# No service will be given on this subnet, but declaring it helps the 
# DHCP server to understand the network topology.

subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.10 192.168.1.20;
  option broadcast-address 192.168.1.255;
  option routers 192.168.1.1;
  option domain-name-servers 192.168.0.1;
}

host soekris {
 #   tftp client hardware address
     hardware ethernet 00:00:24:CB:C6:A8;
     filename "pxelinux.0";
}

Così avremo gatewat 192.168.1.1 e netmask 255.255.255.0. Poi configuriamo l'host a cui accedere in automatico tramite MAC address. Bisogna dunque conoscere l'indirizzo HW del NIC relativo alla porta Ethernet a cui avete collegato il vostro Soekris. Per farlo bisogna andare a utilizzare la combinazione CTRL-P quando richiesto all'avvio (dobbiamo già essere connessi in seriale) e poi andare a fare un boot F0 per trovare l'HW address corretto, copiandolo poi nella configurazione del nostro server DHCP.

L'ultima riga è relativa al file da caricare per PXE.



http://andys.org.uk/wiki/Guide:PXE_network_booting_Debian_install

Installare Debian Squeeze via TFTP

Adesso non rimane che scollegare qualsiasi DHCP server sulla rete a cui è connesso il nostro Soekris e di conseguenza anche il server TFT e procedere all'installazione tramite rete. Per farlo non bisogna far altro che connettersi in seriale al Soekris, facendolo entrare in modalità comBIOS monitor con CTRL-P prima dei fatidici 5 secondi per il boot da HD, poi assicurarsi di avere in esecuzione sia il server DHCP3 che il TFTP (inetd).

Con "boot F0" inizia la procedura di installazione PXE e il soekris cerca un server DHCP e un file pxelinux che faccia poi partire il nostro installer.

Ad un certo punto il netinstall vorrà configurare la rete per accedere a Internet e scaricare poi i pacchetti deb dai repository Debian. Anche configurando iptables della macchina che fornisce il server DHCP3 e TFTP e che consente di avviare l'installazione da netinst non si riesce a fare un bridge per la connessione.

Si potrebbe ovviare dalla stessa configurazione di DHCPD, ma la soluzione più sicura è quella di connettere il Soekris direttamente ad un modem via Ethernet e far configurare allo stesso installer la connessione.

Sarebbe meglio allocare almeno tre partizioni:

/boot
/
swap

e io metterei anche una home, che torna sempre utile.

Configurare GRUB2 e le interfacce tty

Una volta installato Debian sul dispositivo sarà necessario avere un accesso, qualora non vi fosse alcuna uscita video e input da tastiera, via porta seriale sfruttando cu o minicom per amministrare da remoto il sistema e avere in ogni caso un punto d'accesso alla macchina e al login del sistema operativo appena installato.

Per far questo si dovrà configurare GRUB2 affinché all'avvio setti i parametri per ogni voce del menu in modo che l'output e l'input siano la seriale e che il baud-rate e i parametri siano corretti per la visualizzazione delle informazioni sul sistema. Modifichiamo /etc/default/grub:

GRUB_CMDLINE_LINUX='console=tty0 console=ttyS0,19200n8 acpi=off'
GRUB_TERMINAL=serial
GRUB_SERIAL_COMMAND="serial --speed=19200 --unit=0 --word=8 --parity=no --stop=1"

Molte volte vi è anche la necessità di settare il timeout di GRUB a zero in modo che non rimanga "appeso" durante il boot in attesa di una connessione ttyS a cui mostrare quel timeout (cosa che non vogliamo accada). Basterà dunque porre a zero la rispettiva variabile:

GRUB_TIMEOUT=0

Bisogna tenere a mente questa modifica, in quanto se qualcosa andasse storto all'avvio di GRUB, si dovrebbe provvedere a ripristinare il timeout di grub o intervenire prima della comparsa del menu di scelta con il pulsante di editing "e".

Una volta modificato il file di configurazione di grub si dovrà dare il comando update-grub affinché siano realmente effettive.

Entrare nella directory /etc/event.d/ e modificare tutti i file tty1-tty6 commentando le linee start, respawn ed exec come da esempio: Codice:

  1. tty1 - getty
  2. This service maintains a getty on tty1 from the point the system is
  3. started until it is shut down again.
  1. start on stopped rc2
  2. start on stopped rc3
  3. start on stopped rc4
  4. start on stopped rc5

stop on runlevel 0 stop on runlevel 1 stop on runlevel 6

  1. respawn
  2. exec /sbin/getty 38400 tty1

Risorse