Vyatta‎ > ‎

Creare un'immagine Vyatta per Netkit

È possibile creare un'immagine filesystem di vyatta da utilizzare con netkit (http://www.netkit.org).
Per prima cosa, Vyatta richiede un kernel con supporto unionfs, quindi ho provveduto a ricompilare uno dei kernel netkit patchandolo unionfs. La ricompilazione del kernel per netkit è semplicissima:
come prima cosa scarichiamo la path unionfs per il nostro kernel netkit (al momento è il kernel 2.6.26.5), decomprimiamola e copiamo il file diff all'interno della cartella kernel/patches della nostra installazione netkit.
Per lanciare la compilazione, sempre dalla directory kernel, basta digitare

# make -f Makefile.devel kernel

(problemi con bash4, è necessario compilare con bash3)

La creazione dell'immagine filesystem è la cosa più complicata (ma neanche troppo). Partiamo dall'immagine vyatta per VMWare, scaricabile dal sito di Vyatta. Utilizzando poi il tool qemu-img convertiamola in formato raw.

# qemu-img convert -O raw VyattaCommunity5.vmdk VyattaCommunity5.img

andiamo poi a vedere quella che è la tabella delle partizioni della nostra immagine:

# fdisk -lu VyattaCommunity5.img
Disco VyattaCommunity5.img: 0 MB, 0 byte
255 testine, 63 settori/tracce, 0 cilindri, totale 0 settori
Unità = settori di 1 * 512 = 512 byte
Identificativo disco: 0x0000df0c

          Dispositivo Boot      Start         End      Blocks   Id  System
VyattaCommunity5.img1              63     4192964     2096451   83  Linux

creiamo un'immagine sparse, montiamo poi la partizione vyatta che ci interessa e copiamo i dati nell'immagine sparse:

# dd if=/dev/zero of=vyatta-root-fs bs=1M count=1 seek=2000
# mke2fs -j -O large_file vyatta-root-fs
# mkdir mnt1 mnt2
# mount -o loop,offset=32256 VyattaCommunity5.img mnt1/
# mount -o loop vyatta-root-fs mnt2/
# rsync -vatP mnt1/ mnt2/
# umount mnt1

(l'offset è trovato moltiplicando 63 * 512)

dobbiamo ora apportare qualche modifica al filesystem vyatta: spostiamoci nel punto di mount:

# cd mnt2

creiamo ora alcuni device necessari:

# cd dev
# mknod ubda b 98 0
# cd ..

modifichiamo il file etc/fstab rendendolo simile a quanto segue:

/dev/ubda    /    ext3    defaults    0 1

copiamo poi i moduli del nostro kernel netkit nella cartella lib/modules (supponendo che la nostra installazione netkit sia su /opt/netkit)

# cd lib/modules
# cp -a /opt/netkit/kernel/modules/lib/modules/2.6.26.5-netkit-K2.7 .
# cd ../..

dobbiamo poi copiare alcuni script di init:

# cd etc/init.d
# cp /opt/netkit/fs/fs-build/netkit-tweaks/filesystem-tweaks/etc/init.d/netkit-phase1 .
# cp /opt/netkit/fs/fs-build/netkit-tweaks/filesystem-tweaks/etc/init.d/netkit-phase2 .
# cd ../rc2.d
# ln -s ../init.d/netkit-phase1 S00netkit-phase1
# ln -s ../init.d/netkit-phase2 S99netkit-phase2
# cd ../..

dobbiamo ora fare un chroot nella nostra immagine, in modo da poter installare il pacchetto debian mingetty:

# chroot .
(chroot)# echo "nameserver 194.20.8.1" > /etc/resolv.conf
(chroot)# mount -t proc proc /proc
(chroot)# cd /root
(chroot)# wget http://debian.fastweb.it/debian/pool/main/m/mingetty/mingetty_1.07-1_i386.deb
(chroot)# dpkg -i mingetty_1.07-1_i386.deb
(chroot)# rm mingetty_1.07-1_i386.deb
(chroot)# umunt /proc
(chroot)# exit

e come ultima cosa modifichiamo il file etc/inittab, cercando le linee che definiscono le console di sistema (tty) e facendole diventare simili alle seguenti:

1:2345:respawn:/sbin/mingetty --noclear --noissue --autologin vyatta tty0
2:23:respawn:/sbin/getty 38400 tty1
#3:23:respawn:/sbin/getty 38400 tty3
#4:23:respawn:/sbin/getty 38400 tty4
#5:23:respawn:/sbin/getty 38400 tty5
#6:23:respawn:/sbin/getty 38400 tty6

dobbiamo inoltre commentare la riga che crea una console seriale:
#T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100

possiamo ora smontare la nostra immagine

# umount mnt2

e testarla con netkit :)

$ vstart vyatta1 --verbose -M 64 -m vyatta-root-fs --eth0=lan1 --eth1=lan2



ċ
netkit-kernel-i386-K2.7.tar.bz2
(2887k)
Stefano Sasso,
20 set 2009, 04:20