Contents
- Introduzione
- Utilizzo di rootstock
- Costruzione dell'immagine del filesystem di root invece dell'archivio
- Utilizzo di una immagine qemu
- Connettere la macchina virtuale ad una rete reale
- Utilizzo di Qemu per l'emulazione in modalità utente (con chroot)
- Scaricare una immagine precostruita
- Bugs e problemi
- Risorse
Introduzione
Questa pagina descrive come creare un file system di root Debian/Ubuntu per armel. Ciò consiste nel partire da zero, dato che non verrà usato un programma di installazione e non sarà necessario hardware specifico per costruirlo; il codice non viene ricostruito dato che pacchetti .deb precompilati verranno scaricati ed installati al suo posto.
Utilizzo di rootstock
Il modo più semplice e raccomandabile per creare la rootfs è quello di usare Rootstock.
Rootstock automatizza la creazione di un archivio rootfs e propone alcune opzioni di configurazione per modificare il file content/setup.
Con Ubuntu 9.10 o successive è possibile installare il pacchetto rootstock, il quale installerà anche le appropriate librerie.
Per l'installazione manuale o tramite un controllo bzr di rootstock, è necessario installare anche:
Per creare un archivio rootfs armel, per esempio, di ubuntu-desktop:
sudo rootstock \
--fqdn ubuntu \
--login ubuntu \
--password ubuntu \
--imagesize 3G \
--seed ubuntu-desktopConnettendosi alla rete, alcuni tipici flag per lo sviluppo senza intestazione sono:
--seed build-essential,openssh-server
Sarà necessario modificare il file /etc/network/interfaces ed impostare opportunamente il vostro dispositivo di rete.
Per utilizzare un ambiente grafico veramente leggero potreste scegliere Lxde, in questo caso il flag da utilizzare sarà:
--seed lxde,gdm
Le opzioni --fqdn (oppure -f), --login (oppure -l) e password (-p) vengono richieste per l'impostazione iniziale. L'avvio dello script con --help vi mostrerà tutte le opzioni addizionali per variare le impostazioni dell'archivio rootfs creato.
Cambiare la password al primo login. Le password usate nei sopraelencati esempi sono troppo semplici e vi espongono al rischio che altri utilizzatori possano accedere alla macchina dove viene eseguito rootstock.
Costruzione dell'immagine del filesystem di root invece dell'archivio
Per creare il solo filesystem di root da utilizzare in qemu senza un archivio rootfs, inserite --notarball in rootstock:
sudo rootstock --fqdn qemu-test \
--login qemu \
--password qemupwd \
--notarballÈ anche possibile la creazione di un filesystem di root da un archivio:
Creare un file immagine vuoto usando dd; questo esempio crea un immagine da 1 GB; impostare seek=3072 per una immagine da 3 GB oppure seek=2048 per una immagine da 2 GB, ecc.:
dd if=/dev/zero of=ubuntu-arm.img bs=1MB count=0 seek=1024
Creare un filesystem linux nell'immagine appena creata:
mkfs.ext4 -F ubuntu-arm.img
- È possibile passare a mkfs alcuni flag addizionali per modificare i blocchi riservati, le etichette, o altre opzioni del filesystem).
Ciclo per montare la nuova immagine:
sudo mount -o loop ubuntu-arm.img /mnt
Estrarre l'archivio rootfs nella directory montata e quindi smontarla:
sudo tar -C /mnt -zxf armel-rootfs-200904151837.tgz sudo umount /mntIl filesystem è pronto per l'uso di ubuntu-arm.img.
Utilizzo di una immagine qemu
Dopo aver creato l'immagine qemu, per avviare un ambiente di lavoro (per compilare paccheti o svilupare applicazioni) scaricare il kernel
wget http://ports.ubuntu.com/ubuntu-ports/dists/lucid/main/installer-armel/current/images/versatile/netboot/vmlinuz
ed avviare qemu con il seguente comando (è necessario rinominare rootfs img con ciò che avete scelto per l'immagine):
qemu-system-arm -M versatilepb -cpu cortex-a8 -kernel ./vmlinuz -hda arm-rootfs.img -m 256 -append "root=/dev/sda mem=256M devtmpfs.mount=0 rw"
Avviare l'immagine e autenticarsi con il nome e la password impostati durante la creazione dell'immagine.
Per poter copiare file da e per il sistema ospitante è utile installare il pacchetto openssh-server sul sistema ospitante ed usare il comando scp da qemu.
Connettere la macchina virtuale ad una rete reale
In via predefinita qemu usa per lo stack di rete la modalità utente non privilegiato in modo da consentire alla macchina virtuale l'accesso all'esterno. Per poter invece raggiungere la macchina virtuale dall'esterno dobbiamo usare la modalità tap e fare il bridging tra l'interfaccia tap e l'interfaccia di rete del sistema ospitante. Per prima cosa fare un bridge sul sistema ospitante modificando il file /etc/network/interfaces come qui specificato:
Prima
auto eth0 iface eth0 inet dhcp
Dopo
auto br0 iface br0 inet dhcp bridge_ports eth0 bridge_maxwait 0
Installare il pacchetto bridge-utils e riavviare l'interfaccia di rete:
ifdown eth0 ifup br0
Creare uno script call /etc/qemu-ifup da eseguire all'avvio di QEMU:
echo "Executing /etc/qemu-ifup" echo "Bringing up $1 for bridged mode..." sudo /sbin/ifconfig $1 0.0.0.0 promisc up echo "Adding $1 to br0..." sudo /usr/sbin/brctl addif br0 $1 sleep 2
Data la pericolosità dell'esecuzione di Qemu da superutente, bisogna creare il gruppo utente qemu ed autorizzare i comandi brctl e ifconfig da superutente. Per fare ciò aggiungere le seguenti linee a /etc/sudoers (editare il file usando visudo)
... Cmnd_Alias QEMU = /usr/sbin/brctl, /sbin/ifconfig %qemu ALL=NOPASSWD: QEMU
L'utilizzo di tap, in rete, richiede che il modulo tun sia caricato:
sudo modprobe tun
Per caricarlo automaticamente all'avvio, editare il file /etc/modules ed aggiungere la linea tun:
# /etc/modules: kernel modules to load at boot time. # # This file contains the names of kernel modules that should be loaded # at boot time, one per line. Lines beginning with "#" are ignored. lp tun
Avviare la macchina virtuale usando il seguente comando:
$ qemu-system-arm -M versatilepb -kernel ./vmlinuz-2.6.28-versatile -hda arm-rootfs.img -m 256 -append "root=/dev/sda mem=256M ro" -net nic,macaddr=00:16:3e:00:00:01 -net tap
Nel caso di utilizzo di una sola macchina virtuale non e necessario fornire alcun Mac address poichè QEMU userà quelo predefinito. Nel caso di utilizzo di più macchine virtuali (ricordiamo che QEMU può emulare anche altre architetture oltra ad ARM) bisognerà specificare un univoco MAC address per ogni macchina virtuale. È raccomandabile scegliere l'indirizo nella gamma 00:16:3e:xx:xx:xx, che è stata assegnata a Xen.
Utilizzo di Qemu per l'emulazione in modalità utente (con chroot)
Se non si desisera usare Qemu in emulazione completa, è possibile utilizzarlo in modalità di emulazione 'utente' con chroot, che rende possibile la compilazione di pachetti e la creazione di applicazioni.
Innanzitutto estrarre l'archivio tar rootfs
mkdir /tmp/rootfs sudo tar -C /tmp/rootfs -zxf armel-rootfs-200904151837.tgz
Copiare qemu-arm-static in rootfs, ciò consentirà l'utilizzo di Qemu
sudo cp $(which qemu-arm-static) /tmp/rootfs/usr/bin/
Montare il filesystem /proc:
sudo mount -t proc proc /tmp/rootfs/proc
Configurare resolv.conf
sudo cp /etc/resolv.conf /tmp/rootfs/etc/resolv.conf
Quindi entrare nell'ambiente emulato, con chroot
sudo chroot /tmp/rootfs /bin/bash
Ora è possibile installare applicazioni tramite apt-get e creare applicazioni.
Scaricare una immagine precostruita
È possibile ottenere una immagine precostruita di Ubuntu 9.10,è stata costruita seguendo i passi sopracitati. Contiene alcuni strumenti per la compilazione e l'esecuzione di software quali gcc, g++, X libraries, FLTK, sqlite3, ma non vi è WM. È possibile aggiungere software tramite apt-get. È utilizzabile tramite Qemu o chroot. Nell'archivio è incluso uno script per avviare Qemu senza dover scrivere l'intero comando.
wget -c http://w3.impa.br/~gabrield/data/click.php?id=4 tar jxfv ubuntu-arm-development-rootfs.tar.bz2 chmod +x run.sh ./run.sh
Al login l'utente è ubuntu e la password temppwd.
Bugs e problemi
Per qualsiasi problema contattare "ogra" sul canale #ubuntu-arm su irc.freenode.net oppure inviare una mail a ogra@ubuntu.com
In caso di errore vi preghiamo di riportare il log della costruzione errata.
La gestione dei pacchetti linguaggio non è ancora implementata, è possibile comunque installarli manualmente in un secondo tempo.
