Multistrap: come ti creo un rootfs Debian dal nulla

Una volta c’era debootstrap, un tool fantastico che permetteva di creare un rootfs Debian di base in una directory qualsiasi di un sistema già funzionante; gli utilizzi potevano essere molteplici: crearsi un  ambiente protetto da chroot, oppure creare una Debian di base per poi montarla via NFS, anche da una architettura diversa dal sistema ospite.

Poi è nato multistrap, un tool che fa quasi tutto quello che fa debootstrap ma, in più, permette di scaricare i pacchetti Debian da più repository! Non che debootstrap non ci sia più ,intendiamoci… ma questo nuovo tool merita senz’altro un po’ di attenzione. :)

Vediamo allora come si usa.

Innanzi tutto scarichiamocelo ed installiamolo sulla nostra macchina di lavoro. Se avete una Debian/Ubuntu la cosa è abbastanza semplice:

# aptitude install multistrap

(da notare che in Debian il pacchetto è disponibile solo in squeeze e sid, mentre in ubuntu è presente sin dalla 8.10)

Se avete un’altra distribuzione non vi resta che verificare se è dispobile e come installarlo.

Una volta finito il processo di installazione verifichiamo che il programma funzioni:

$ multistrap -h
em_multistrap version 0.0.6

Usage:
em_multistrap [-a ARCH] [-d DIR] -f CONFIG_FILE
em_multistrap -?|-h|–help|–version

Command:
-f|–file CONFIG_FILE:  path the the multistrap configuration file.

Options:
-a|–arch ARCHITECTURE: override the configuration file architecture.
-d|–dir PATH:          override the configuration file directory.
   –no-auth:           do not use Secure Apt for any repositories
   –tidy-up:           remove apt cache data and downloaded archives.
-?|-h|–help:           print this usage message and exit
–version:              print this usage message and exit

(ho tagliato un po’ di output)

Già da questa schermata si vede che la cosa è abbastanza semplice, basta dire a multistrap a quale architettura siamo interessati e dove installare il tutto, poi, con un file di configurazione ad hoc, gli diciamo cosa e da dove installare.

Per spiegare come è fatto il file di configurazione di multistrap facciamo un esempio concreto (e tratto da un caso reale): supponiamo di avere la necessità di installare una Debian versione lenny con, in aggiunta, dei pacchetti di nostra produzione e che risiedono in un repository ospitato su di un nostro server.

Come repository Debian useremo http://ftp.us.debian.org/debian mentre per il nostro repository supponiamo di averlo correttamente installato su http://support.caenrfid.it/debian. Supponiamo poi di voler aggiungere i pacchetti:

aptitude netbase net-tools ifupdown dhcp-client openssh-server initramfs-tools grub lshw usbutils pciutils minicom less rsync boa vim

alla Debian di base e di voler installare i pacchetti:

ion caenrfidc-cgi libcaenrfid0

dal nostro repository locale; ecco allora come appare il file di configurazione di Multistrap:

[General]
# keyring packages listed in each debootstrap will still be installed.
noauth=true

# extract all downloaded archives (default is true)
unpack=true

# aptsources is a list of sections to be used for downloading packages
# and lists and placed in the /etc/apt/sources.list.d/multistrap.sources.list
# of the target. Order is not important
aptsources=Debian CAENRFID

# the order of sections is not important.
# the debootstrap option determines which repository
# is used to calculate the list of Priority: required packages.
debootstrap=Debian CAENRFID

[Debian]
packages=aptitude netbase net-tools ifupdown dhcp-client openssh-server initramfs-tools grub lshw usbutils pciutils minicom less rsync boa vim
source=http://ftp.us.debian.org/debian
keyring=debian-archive-keyring
suite=lenny

[CAENRFID]
packages=ion caenrfidc-cgi libcaenrfid0
source=http://support.caenrfid.it/debian
#keyring=debian-archive-keyring
suite=unstable

Si evidenziamo subito tre sezioni: General, Debian e CAENRFID. La prima è una sezione di configurazione generale dove ho specificato alcune direttive per disabilitare il keyring e forzare l’estrazione di tutti i pacchetti scaricati, più la specifica dei repository da utilizzare per la creazione del systema Debian di base.

I repository sono indicati nelle successive due sezioni denominate Debian e CAENRFID. La prima è un repository ufficiale Debian, mentre la seconda indica il nostro repository speciale.

Una volta salvato il file di configurazione nel file mydebian.conf lanciamo il comando:

$ multistrap -a i386 -d /tmp/temp -f mydebian.conf

Il sistema inizierà quindi a scaricarsi i pacchetti specificati e poi ad installarli, come si vede nell’output riportato di seguito:

em_multistrap 2.0.9 using /home/giometti/mydebian.conf
Defaulting architecture to native: i386
em_multistrap building i386 multistrap on ‘i386’
INF: Setting ./lib64 -> ./lib symbolic link.
Getting package lists: apt-get  -o Apt::Architecture=i386 -o Apt::Get::AllowUnauthenticated=true -o Apt::Get::Download-Only=true -o Apt::Install-Recommends=false -o Dir=/tmp/temp/ -o Dir::Etc=/tmp/temp/etc/apt/ -o Dir::Etc::SourceList=/tmp/temp/etc/apt/sources.list.d/multistrap.sources.list -o Dir::State=/tmp/temp/var/lib/apt/ -o Dir::State::Status=/tmp/temp/var/lib/dpkg/status -o Dir::Cache=/tmp/temp/var/cache/apt/ update
Ign http://support.caenrfid.it unstable Release.gpg
Get:1 http://support.caenrfid.it unstable Release [2275B]
Ign http://support.caenrfid.it unstable/main Packages
Ign http://support.caenrfid.it unstable/main Sources
Ign http://support.caenrfid.it unstable/main Packages
Ign http://support.caenrfid.it unstable/main Sources
Get:2 http://support.caenrfid.it unstable/main Packages [1558B]
Get:3 http://support.caenrfid.it unstable/main Sources [1476B]
Get:4 http://ftp.us.debian.org lenny Release.gpg [1033B]
Get:5 http://ftp.us.debian.org lenny Release [73.8kB]
Get:6 http://ftp.us.debian.org lenny/main Packages [5196kB]
Get:7 http://ftp.us.debian.org lenny/main Sources [2308kB]

Qui sopra multistrap si è collegato ai due repository ed ha iniziato a scaricarsi gli elenchi dei pacchetti disponibili. Poi inizia a scaricarsi i singoli pacchetti dai due repository che gli abbiamo indicato:

Get:1 http://support.caenrfid.it unstable/main libcaenrfid0 0.60.0 [12.1kB]
Get:2 http://support.caenrfid.it unstable/main caenrfidc-cgi 0.60.0 [30.8kB]
Get:3 http://support.caenrfid.it unstable/main caenrfidd 0.60.1 [39.2kB]
Get:4 http://support.caenrfid.it unstable/main ion-utils 0.81.0 [4720B]
Get:5 http://support.caenrfid.it unstable/main llrpd 0.20.0 [33.4kB]
Get:6 http://support.caenrfid.it unstable/main ion 0.81.0 [1922B]
Get:7 http://ftp.us.debian.org lenny/main gcc-4.3-base 4.3.2-1.1 [103kB]
Get:8 http://ftp.us.debian.org lenny/main libc6 2.7-18lenny1 [4555kB]
Get:9 http://ftp.us.debian.org lenny/main libgcc1 1:4.3.2-1.1 [25.8kB]
Get:10 http://ftp.us.debian.org lenny/main base-passwd 3.5.20 [39.7kB]
Get:11 http://ftp.us.debian.org lenny/main mawk 1.3.3-11.1 [80.2kB]
Get:12 http://ftp.us.debian.org lenny/main gawk 1:3.1.5.dfsg-4.1 [685kB]
Get:13 http://ftp.us.debian.org lenny/main base-files 5lenny5 [57.2kB]

In fine, come riportato sotto, li installa:

Get:122 http://ftp.us.debian.org lenny/main vim 1:7.1.314-3+lenny2 [777kB]
Get:123 http://ftp.us.debian.org lenny/main dhcp-client 3.1.1-6+lenny4 [23.2kB]
Fetched 51.4MB in 14min 11s (60.3kB/s)
Download complete and in download only mode
I: Calculating obsolete packages
Using directory /tmp/temp/ for unpacking operations
I: Extracting adduser_3.110_all.deb…
-> Processing conffiles for adduser
I: Extracting apt_0.7.20.2+lenny1_i386.deb…
-> Processing conffiles for apt
I: Extracting aptitude_0.4.11.11-1~lenny1_i386.deb…
-> Processing conffiles for aptitude
I: Extracting base-files_5lenny5_i386.deb…
-> Processing conffiles for base-files
I: Extracting base-passwd_3.5.20_i386.deb…
I: Extracting bash_3.2-4_i386.deb…
-> Processing conffiles for bash

Finito il download ha poi iniziato ad installare i pacchetti:

I: Unpacking complete.
I: Native mode – configuring unpacked packages . . .
I: dpkg configuration settings:
DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true LC_ALL=C LANGUAGE=C LANG=C
/tmp/temp/bin/sh found OK:
lrwxrwxrwx 1 root root 4 May 14 10:12 bin/sh -> bash
Setting up sysv-rc (2.86.ds1-61) …
Setting up ion-utils (0.81.0) …
Starting ION tools: gpioion-gpio; cannot find gpio support.
Setting up libklibc (1.5.12-2) …
Setting up klibc-utils (1.5.12-2) …
Setting up gcc-4.2-base (4.2.4-6) …
Setting up libpam-runtime (1.0.1-5+lenny1) …
Setting up gcc-4.3-base (4.3.2-1.1) …
Setting up mime-support (3.44-1) …

Alla fine otteniamo:

Hit http://ftp.us.debian.org lenny/main Packages
Hit http://ftp.us.debian.org lenny/main Sources
Reading package lists…

Multistrap system installed successfully in /tmp/temp/.

Perfetto! Il nostro nuovo sistema ora è pronto! Possiamo allora passare ad impacchettarlo come più ci aggrada per poterlo usare su di un’altra macchina oppure lo possiamo dare in pasto ad un server NFS.

Una nota finale: come vedete io ho aggiunto un po’ di pacchetti extra alla lista della sezione Debian poiché il sistema che multistrap installerebbe di suo è talmente di base che non ha neanche il supporto di rete!

Su Rodolfo Giometti

Ingegnere informatico libero professionista ed esperto GNU/Linux offre supporto per: - device drivers; - sistemi embedded; - sviluppo applicazioni industriali per controllo automatico e monitoraggio remoto; - corsi di formazione dedicati. Manutentore del progetto LinuxPPS (il sottosistema Pulse Per Second di Linux) contribuisce attivamente allo sviluppo del kernel Linux con diverse patch riguardanti varie applicazioni del kernel e dispositivi (switch, fisici di rete, RTC, USB, I2C, network, ecc.). Nei 15+ anni di esperienza su Linux ha lavorato con le piattaforme x86, ARM, MIPS & PowerPC.

Lascia un commento

Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. maggiori informazioni

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi