5. Configurazione dei client
5.1 Creazione dell'immagine del kernel
Per preparare a dovere la configurazione per i client è necessario compilare il kernel (make menuconfig o make xconfig a vostro piacere) nel seguente modo:
Abilitare la scheda di rete presente sul pc e compilarla staticamente all'interno del kernel
sotto Networking options abilitare:
IP: kernel level autoconfiguration
IP: DHCP support
sotto Filesystems
sotto Network File systems abilitare:
NFS file system support
Root file system on NFS
Ricompilare il kernel con il seguente comando: make dep && make bzImage
A questo punto e' possibile creare l'immagine del kernel:
mknbi-linux --output=vmlinuz.prova --rootdir=/172.16.0.51 --ip=172.16.0.51:172.16.1.1:172.16.0.10:255.255.0.0:486 arch/i386/boot/bzImage
mknbi-linux possiamo scaricarlo da http://etherboot.sourceforge.net/
Analizziamo il comando:
--output=vmlinuz.prova e' il nome
dell'immagine del kernel che stiamo per creare
--rootdir=/172.16.0.51 e' la directory
(nel SERVER) del filesystem del client
--ip=172.16.0.51:172.16.1.1:172.16.0.10:255.255.0.0:486
questo parametro e' strutturato secondo la seguente maschera:
--ip=client:server:gateway:netmask:nome
client arch/i386/boot/bzImage indica la directory dove si trova la bzImage
creata con la compilazione del kernel
- Adesso ci ritroveremo nella directory
da dove abbiamo lanciato il comando un file di nome vmlinuz.prova che
sarà la nostra immagine del kernel da passare ai client nella directory /tftpboot/
Per ogni dubbio consulare il manuale di mknbi-linux (man mknbi-linux)
5.2 Creazione del floppy di avvio
Dobbiamo scaricare Etherboot da www.etherboot.org e, dopo averlo installato, seguire le istruzioni:
Per creare un floppy di boot nella distribuzione viene fornito uno speciale blocco di boot. Questo piccolo programma di 512 byte carica in memoria i blocchi del disco che lo seguono nel floppy e inizia l'esecuzione. Quindi, per fare un floppy di boot, uno deve solo concatenare il blocco di boot con il binario Etherboot contenente il driver per una scheda di rete, in questo modo:
# cat floppyload.bin 3c509.lzrom > /dev/fd0
3c509.lzrom indica il driver per la scheda di rete presente nel pc (client) che e' disponibile in etherboot;
floppyload.bin indica il pacchetto per il boot che si trova all'interno di etherboot.
Quindi, ricapitolando, arrivati a
questo punto, dovremmo avere (nel SERVER):
una directory chiamata /tftpboot/
all'interno di questa, le directory associate agli ip dei client; nel mio caso ho:
/tftpboot/172.16.0.51/
/tftpboot/???.??.?.??/
............. e cosi' via per ogni client
inoltre all'interno di /tftpboot/ ci deve essere l'immagine del kernel (vmlinuz.prova) preparata con il comando ' mknbi-linux'
i servizi di server dhcp, tftp e nfs attivi all'avvio.
Se tutto cio' e' presente
possiamo provare ad avviare il client
attraverso il boot da floppy (quello creato con etherboot) e vedere se carica
l'immagine del kernel che sta sul server DHCP.
Qua riceveremo un errore del tipo “VFS: cannot mount root filesystem” perche giustamente ancora non abbiamo creato la root filesystem del client all'interno della propria directory (/tftpboot/172.16.0.51/rootfilesystem).
Quindi basta creare la rootfilesystem
ed il gioco e' fatto.
5.3 Creazione della root file system
Io ho scelto di creare la rootfilesystem con i pacchetti di Slackware 9.0 .
Se volete seguirmi ho creato uno script che automatizza la creazione del filesystem (ricordo che le distribuzioni utilizzate sono: RedHat 7.3 per il server e Slackware 9.0 per i client), purche' siano scaricati e copiati su cd almeno i seguenti pacchetti:
aaa_base-9.0.0-noarch-1.tgz
apmd-3.0.2-i386-1.tgz
bash-2.05b-i386-2.tgz
bin-8.5.0-i386-1.tgz
binutils-2.13.90.0.18-i386-1.tgz
bootp-2.4.3-i386-1.tgz
bzip2-1.0.2-i386-4.tgz
cpio-2.5-i386-1.tgz
cxxlibs-5.0.2-i386-1.tgz
db1-1.85-i386-1.tgz
db2-2.4.14-i386-1.tgz
db3-3.3.11-i386-3.tgz
dcron-2.3.3-i386-4.tgz
devfsd-1.3.25-i386-2.tgz
devs-2.3.1-i386-13.tgz
dhcp-3.0pl2-i386-1.tgz
e2fsprogs-1.32-i386-2.tgz
elflibs-9.0.3-i386-1.tgz
etc-5.0-noarch-11.tgz
fileutils-4.1-i386-2.tgz
findutils-4.1.7-i386-1.tgz
floppy-5.4-i386-3.tgz
gawk-3.1.1-i386-2.tgz
gdbm-1.8.0-i386-3.tgz
glibc-2.3.1-i386-3.tgz
glibc-i18n-2.3.1-noarch-1.tgz
glibc-solibs-2.3.1-i386-3.tgz
glibc-zoneinfo-2.3.1-noarch-2.tgz
grep-2.5-i386-2.tgz
gzip-1.3.3-i386-2.tgz
iptables-1.2.7a-i386-2.tgz
kbd-1.08-i386-2.tgz
less-381-i386-1.tgz
lftp-2.6.5-i386-1.tgz
libtermcap-1.2.3-i386-5.tgz
links-0.98-i386-2.tgz
modutils-2.4.22-i386-1.tgz
nc-1.10-i386-1.tgz
ncftp-3.1.5-i386-1.tgz
ncurses-5.3-i386-1.tgz
nfs-utils-1.0.1-i386-1.tgz
nmap-3.00-i386-1.tgz
openssh-3.5p1-i386-2.tgz
openssl-0.9.7a-i386-2.tgz
openssl-solibs-0.9.7a-i386-2.tgz
perl-5.8.0-i386-3.tgz
pkgtools-9.0.0-i386-1.tgz
popt-1.7-i386-1.tgz
portmap-4.0-i386-2.tgz
procps-3.1.6-i386-1.tgz
python-2.2.2-i386-3.tgz
readline-4.3-i386-2.tgz
sed-4.0.5-i386-2.tgz
shadow-4.0.3-i386-6.tgz
sh-utils-2.0-i386-1.tgz
slang-1.4.5-i386-2.tgz
svgalib-1.4.3-i386-2.tgz
sysklogd-1.4.1-i386-7.tgz
sysvinit-2.84-i386-25.tgz
tar-1.13.25-i386-1.tgz
textutils-2.0-i386-1.tgz
util-linux-2.11z-i386-1.tgz
vim-6.1-i386-7.tgz
wget-1.8.2-i386-2.tgz
yptools-2.8-i386-2.tgz
zlib-1.1.4-i386-3.tgz
Se avete messo su cd i pacchetti e avete
montato il cd nel SERVER potete lanciare il mio script che vi creerà il file
system del client all'interno della sua directory (/tftpboot/172.16.0.51);
E' ESTREMAMENTE IMPORTANTE CHE LO SCRIPT VENGA LANCIATO DALLA DIRECTORY
/tftpboot/172.16.0.51/
LADDOVE 172.16.0.51 INDICA L'INDIRIZZO IP DEL CLIENT CHE IL SERVER DHCP ASSEGNA A LUI IN AUTOMATICO AL BOOTSTRAP.
INOLTRE LO SCRIPT VA INVOCATO SPECIFICANDO IL MOUNT POINT DEL CD-ROM:
Esempio: ./nomescript /mnt/cdrom
Questo e' lo SCRIPT:
###################################################################################################
# Questo script e' stato realizzato da Alessandro Illiano per la Yacme s.r.l. ed e' distribuito con licenza GPL. #
###################################################################################################
#!/bin/bash
#
mntpoint=$1
#
# Controllo dei parametri
if [ -z $mntpoint ]; then
echo "Non hai specificato il mount point del CD-ROM!"
echo -n "Mount point del CD-ROM: "
read x
if [ -z $x ] || [ ! -d $x ]; then
echo "Directory errata!"
exit 1
else
mntpoint=$x
fi
fi
#
# Chiede se si vuole cancellare tutto
echo -n "Vuoi cancellare il contenuto di `pwd`? [S/N] "
read x
if [ "$x" = "S" ] || [ "$x" = "s" ]; then
rm -rf *
find . -not -name '.' -not -name '..' -type f -exec 'rm -rf {}' \;
fi
#
# Scompatta i file nel CD-ROM
for i in ${mntpoint}/*.tgz; do
tar -xvzf $i
done
#
# Toglie .new dal nome del file
for i in `find . -name '*.new'`;do
nome=`echo $i | sed -e "s,.new,,"`
mv -f $i $nome
done
#
# Sposta le librerie
mv -f lib/incoming/* lib/
#
# Crea i riferimenti mancanti in ld.so.conf
cat >> etc/ld.so.conf << EOF
/lib
/usr/lib
EOF
#
# Crea la cache di ldconfig
ldconfig -r `pwd`
#
# Collegamento della shell
cd bin/
ln -sf bash2 sh
cd ..
#
# Cambia la shell di root
cp etc/passwd pippo
cat pippo | sed -e "s,bash,bash2," > etc/passwd
rm -f pippo
#
# Collegamento del comando mount
cd sbin
ln -s ../bin/mount mount
cd ..
#
# Creazione della directory proc
mkdir -p proc
chmod 555 proc
#
# Un pò di pulizia
mv -f etc-incoming/* etc/
rm -rf install
rm -rf etc-incoming
#
# Creazione etc/fstab
cat > etc/fstab << EOF
/dev/nfs / nfs defaults 0 0
none /proc proc defaults 0 0
EOF
####################################################################################################
© Alessandro Illiano