ARM/Rootfs_da_zero

Creare ARM/Rootfs da zero

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 necessiteremo di 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 /sudorootstock.

Rootstock automatizza la creazione di un archivio rootfs e propone alcune opzioni di configurazione per modificare il file content/setup.

Con Ubuntu 9.10 (Karmic) o successive è possibile installare, dai repository, 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 di, per esempio, Xubuntu-desktop:

sudo rootstock \
        --fqdn myhostname \
        --login ubuntu \
        --password temppwd \
        --imagesize 2G \
        --seed xubuntu-desktop

Un'altro esempio per Ubuntu-desktop:

sudo rootstock \
        --fqdn ubuntu \
        --login ubuntu \
        --password ubuntu \
        --imagesize 3G \
        --seed ubuntu-desktop

Alcuni tipici flag per lo sviluppo senza intestazione: (connettendosi alla rete)

--seed build-essential,openssh-server

È necessario editare /etc/network/interfaces ed impostare opportunamente il vostro dispositivo di rete.

Per avere un ambiente desktop veramente leggero (Lxde), allora:

--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, come specificato in seguito:

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 /mnt

Il filesystem è pronto per l'uso di ubuntu-arm.img, consultare il seguente capitolo "Utilizzo di una immagine qemu" per i comandi appropriati.

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 kenel da: qemu 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.

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:

# apt-get install bridge-utils
# 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.

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.

Risorse

Documento Originale


CategoryHomepage

FabioMarconi/prove5 (l'ultima modifica è del 14/03/2011 12.55.00, fatta da localhost)