Smontiamo Mandriva Flash

Informatica

Madriva Flash è una pendrive USB da 2 GB con installato un sistema GNU/Linux completo e pronto per l'uso, basato sul Desktop KDE 3.5: dopo una iniziale configurazione, basta collegare la pendrive a un qualsiasi PC per avviare il nostro sistema operativo preferito.
Ne faccio una recensione, vi descrivo i dettagli tecnici e vi mostro come personalizzarla!
Lungo la strada, ho imparato molte cose su tune2fs, rpm e urpmi, squashfs, e molto altro, dunque anche se non sei interessato a conoscere Mandriva Flash, potresti trovare qui molte cose interessanti.

ATTENZIONE!!! A fine marzo 2007 è uscita una nuova versione di Mandriva Flash, basata su una pendrive da 4 GB, con un'unica partizione FAT32, configurata in modo che al primo avvio l'utente possa decidere quanto spazio allocare al sistema, e quanto spazio usare per lo scambio dati! Come detto, io non possiedo questa nuova versione da 4 GB (rossa), e non l'ho potuta ancora provare, dunque in queste pagine troverete la descrizione della versione precedente da 2 GB (blu). In ogni caso, le differenze dovrebbero essere minime, e non dovrebbe essere difficile adattare quanto scritto qui alla nuova versione.

Aggiornamento: siamo ormai a ottobre 2007, ed è uscita un nuova edizione di Mandriva Flash, basata sull'ultima Mandriva. Se qualcuno volesse farmi un regalo, io la proverei volentieri per voi... ;-)

Introduzione

Mandriva Flash è una pendrive Dane-Elec da 2 GB con su preinstallata una versione "dimagrita" di Mandriva Linux 2007. L'edizione che ho comprato io è costata 79 euro, e la consegna è avvenuta in tre giorni lavorativi. La pendrive sarà sicuramente ottima, e l'aspetto è piacevole e robusto, però sono rimasto molto male quando ho visto nel pacchetto SOLO la pendrive Dane-Elec nella sua confezione originale, e una brochure di "Linux Magazine" (www.linux-magazine.com).

L'unico segno di Mandriva era nel logo stampato sulla pendrive... peccato, almeno per una brochure con 4 righe di presentazione si potevano sprecare! Ok, è solo una questione di immagine, alla fine magari la brochure non l'avrei neanche letta :-), però secondo me è una questione di immagine importante!
Un'altra cosa che mi ha dato fastidio, è che qualche giorno dopo ho trovato che l'indirizzo che avevo fornito al momento dell'acquisto è stato iscritto alla newsletter di www.linux-magazine.com. Sinceramente, non ricordavo di aver letto niente in proposito al momento dell'acquisto, potrei non averci fatto caso. Ma, ancora una volta, sarebbe stato corretto che nel pacchetto ci fosse un foglio in cui mi ricordavano dell'iscrizione a questa newsletter (che tra l'altro, è abbastanza interessante).
Sarò paranoico, ma è brutto avere l'impressione che abbiano usato il tuo indirizzo e-mail senza averti avvisato.

Ok, adesso basta chiacchiere, e veniamo ai fatti.
I miei obiettivi sono:

  1. Studiare come è fatta Mandriva Flash
  2. Personalizzare il sistema, in modo da avere alcuni dei miei programmi preferiti nel minor spazio possibile, e al contrario massimizzare lo spazio per i miei dati e le mie personalizzazioni.

Com'è Fatta?

La pendrive contiene già il sistema, molto simile ai CD live Mandriva One, e in un'area accessibile anche ad altri sistemi operativi c'è la documentazione e una ISO da 2 MB per fare un CD avviabile, utile per avviare Mandriva Flash sui computer che non possono fare il boot da USB.
Su computer con porte USB ad alta velocità (come quelle che equipaggiano i PC più recenti) il sistema è più veloce dei vari CD-Live, mentre su porte USB 1 il sistema è tragicamente lento, proprio a causa della lentezza nel trasferimento di dati attraverso queste porte.

In questi ultimi giorni (primi di marzo 2007), è stata pubblicata nella pagina di Mandriva Flash sul sito di Mandriva una ISO da 40 MB con un CD avviabile utile per la manutenzione della pendrive (backup, restore, controlli vari, recupero password...). Il CD avviabile serve per controllare l'integrità fisica della pendrive, resettare il sistema alle impostazioni di default, modificare la password di root persa, e fare un backup delle personalizzazioni nello spazio di "scambio" della pendrive (che ovviamente deve essere vuoto allo scopo).

Mandriva Flash è una pendrive da 2 GB, così partizionata:

# fdisk -l /dev/sdb

Disk /dev/sdb: 2063 MB, 2063597568 bytes
4 heads, 16 sectors/track, 62976 cylinders
Units = cilindri of 64 * 512 = 32768 bytes

Dispositivo Boot      Start         End      Blocks   Id  System
/dev/sdb1               1       25000      799992    b  W95 FAT32
/dev/sdb2           25001       60869     1147808    b  W95 FAT32

Due partizioni, formattate in FAT32, la prima da circa 780 MB e la seconda da circa 1 GB.

Le partizioni sono così etichettate:

# mlabel -s e:
 Volume label is Share
# mlabel -s f:
 Volume label is MDVUSBROOT

Per usare il comando mlabel ho configurato gli mtools in modo che e: punti a /dev/sdb1 e f: punti a /dev/sdb2. Le partizioni devono essere smontate per essere accessibili con gli mtools.

La prima partizione (Share) è l'unica visibile da MS Windows, ed è lasciata libera per dati accessibili da qualsiasi sistema. Contiene un po' di documentazione e un file immagine di un cd-rom per avviare il sistema sui computer che non avviano da USB. Al contrario, sui sistemi GNU/Linux e Mac Os X sono visibili entrambe le partizioni.

La seconda (MDVUSBROOT), è così fatta:

$ tree /mnt/MDVUSBROOT/
/mnt/MDVUSBROOT/
|-- boot
|   |-- grub
|   |   |-- e2fs_stage1_5
|   |   |-- fat_stage1_5
|   |   |-- ffs_stage1_5
|   |   |-- install.sh
|   |   |-- iso9660_stage1_5
|   |   |-- jfs_stage1_5
|   |   |-- menu.lst
|   |   |-- minix_stage1_5
|   |   |-- reiserfs_stage1_5
|   |   |-- splash.xpm.gz
|   |   |-- stage1
|   |   |-- stage2
|   |   |-- ufs2_stage1_5
|   |   |-- vstafs_stage1_5
|   |   `-- xfs_stage1_5
|   |-- help.msg
|   |-- usb
|   |   |-- initrd.gz
|   |   |-- syslinux-boot-cdrom.cfg
|   |   `-- syslinux.cfg
|   `-- vmlinuz
`-- loopbacks
    |-- distrib.sqfs
    `-- system.loop

4 directories, 22 files

Ovviamente, il contenuto di /boot serve per avviare il sistema, mentre nella directory /loopbacks ci sono i due file distrib.sqfs e system.loop, destinati a contenere il sistema e le personalizzazioni dell'utente.
In particolare, il file distrib.sqfs, da 725 MB è un file system compresso squashfs:

$ file distrib.sqfs
distrib.sqfs: Squashfs filesystem, little endian, version 3.0, 0 bytes, 
95835 inodes, blocksize: 65536 bytes, created: Wed Nov 29 15:33:34 2006

Contiene il sistema completo, ed è accessibile in sola lettura. Le personalizzazioni e la home dell'utente vengono registrate sull'altro file, system.loop, da 382 MB:

$ file system.loop
system.loop: Linux rev 1.0 ext2 filesystem data (mounted or unclean)

La capacità del sistema e la possibilità di personalizzazioni è limitata dalla capacità di quest'ultimo file.
I due file system contenuti in distrib.sqfs (in sola lettura) e system.loop (in lettura-scrittura) sono "sovrapposti" e durante l'uso appaiono come un unico file system. system.loop ha la priorità più alta, e se si aggiunge un file al sistema, sarà scritto qui. Se un file esiste sia su distrib.sqfs che in system.loop, il sistema userà la versione in system.loop. Questo è reso possibile grazie a unionfs.

Poiché il file system squashfs è accessibile in sola lettura, non è possibile rimuovere nulla "per fare spazio" (per esempio, rimuovendo i file di localizzazione indesiderati e tenendo solo la localizzazione italiana e inglese).

Avviando il sistema dal disco USB, il sistema fa alcune domande simili a quelle poste dai CD live di Mandriva, o dal programma di installazione, e configura il sistema di conseguenza, salvando tutto in system.loop.

Prima di cominciare a lavorare con Mandriva Flash, riavvio dentro il mio sistema normale, e copio i due file (distrib.sqfs e system.loop) sul disco, facendone una copia di riserva. Poi, comincio a sperimentare, pasticciando parecchio. :-)

Ora però, voglio ricominciare a lavorare con Mandriva Flash, in modo da ottimizzare configurazione, programmi e spazio disponibile.

Prima di ogni cosa, copio i file distrib.sqfs e system.loop in un posto sicuro, e modifico i permessi in read-only in modo da evitare di fare pasticci:

$ cp /mnt/MDVUSBROOT/loopbacks/* /home/gerlos/mdvflash_bk/
$ chmod -w /home/gerlos/mdvflash_bk/*

Per prima cosa, cerco di creare un altro file system di loopback pulito, in modo da ricominciare da un sistema il più "intatto" possibile.

Per far questo, creo il file con dd. Quanto deve essere grande?

$ ls -lk /mnt/MDVUSBROOT/loopbacks/system.loop
-rwxr-xr-x 1 gerlos root 390625 nov 30 03:52 /mnt/MDVUSBROOT/loopbacks/system.loop*

Creo il file con dd:

$ dd if=/dev/zero of=system.loop bs=1k count=390625
390625+0 records in
390625+0 records out
400000000 bytes (400 MB) copied, 4,22393 seconds, 94,7 MB/s

Collego il file al dispositivo di loopback:

# losetup /dev/loop0 /home/gerlos/system.loop

Formatto il nuovo system.loop. Con che opzioni? Chiedo a tune2fs di mostrarmi il super blocco del file originario:

# tune2fs -l ../originali/system.loop
tune2fs 1.39 (29-May-2006)
Filesystem volume name:   
Last mounted on:          
Filesystem UUID:          9e930e28-a39b-4c3b-a956-712335469528
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      resize_inode dir_index filetype sparse_super
Default mount options:    (none)
Filesystem state:         not clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              97920
Block count:              390624
Reserved block count:     0
Free blocks:              254633
Free inodes:              84832
First block:              1
Block size:               1024
Fragment size:            1024
Reserved GDT blocks:      256
Blocks per group:         8192
Fragments per group:      8192
Inodes per group:         2040
Inode blocks per group:   255
Filesystem created:       Wed Nov 29 15:33:35 2006
Last mount time:          Tue Feb  6 18:39:10 2007
Last write time:          Thu Feb  8 04:35:37 2007
Mount count:              3
Maximum mount count:      27
Last checked:             Tue Feb  6 18:39:05 2007
Check interval:           15552000 (6 months)
Next check after:         Sun Aug  5 19:39:05 2007
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               128
Default directory hash:   tea
Directory Hash Seed:      b1fb8c5d-ee3c-44aa-b792-24d0e60981f6

Provo a formattare system.loop devo usando questo comando:

# mke2fs /dev/loop0
mke2fs 1.39 (29-May-2006)
Etichetta del filesystem=
Tipo SO: Linux
Dimensione blocco=1024 (log=0)
Dimensione frammento=1024 (log=0)
97920 inode, 390624 blocchi
19531 blocchi (5.00%) riservati per l'utente root
Primo blocco dati=1
Maximum filesystem blocks=67633152
48 gruppi di blocchi
8192 blocchi per gruppo, 8192 frammenti per gruppo
2040 inode per gruppo
Backup del superblocco salvati nei blocchi:
        8193, 24577, 40961, 57345, 73729, 204801, 221185

Scrittura delle tavole degli inode: fatto
Scrittura delle informazioni dei superblocchi e dell'accounting del filesystem: fatto

Questo filesystem verrà automaticamente controllato ogni 31 mount, o
180 giorni, a seconda di quale venga prima. Usare tune2fs -c o -i per cambiare.

Controllo che le opzioni rilevanti siano le stesse dell'originale:

# tune2fs -l system.loop

Non mi piace che questo file system venga controllato ogni 31 mount (vedi Maximum mount count nell'output di tune2fs), mi sembra troppo frequente (e oltre a rallentare l'avvio ogni tanto, rischia di rovinare il disco USB prima del tempo a causa delle troppe scritture). Modifico l'impostazione con tune2fs (spiego come usare tune2fs per questi scopi qui):

# tune2fs -c 61 system.loop
tune2fs 1.39 (29-May-2006)
Impostazione del numero massimo di mount a 61

Provo a montare il nuovo file system ora creato:

# mount -v /dev/loop0 /mnt/prova/ -t ext2
/dev/loop0 on /mnt/mdvflash type ext2 (rw)
# umount /dev/loop0

Stacco il file dal device di loopback:

# losetup -d /dev/loop0

Metto il nuovo file system.loop al posto dell'originale nella pendrive:

# cp system.loop /mnt/MDVUSBROOT/loopbacks/system.loop
cp: sovrascrivo `/mnt/MDVUSBROOT/loopbacks/system.loop'? y

Smonto la pendrive e riavvio, provando se funziona come mi aspetto.

Come mi aspettavo, con il nuovo system.loop mi trovo con un sistema "nuovo"!!!
Riconfiguro tutto daccapo, seguendo il wizard e creando il mio utente. Voglio un sistema configurato correttamente, prima di avventurarmi in configurazioni più sofisticate.

Faccio una copia di riserva di questa configurazione:

$ cp /mnt/MDVUSBROOT/loopbacks/system.loop /home/gerlos/mdvflash_bk/system.loop_configurato

Ora mi avventuro nella personalizzazione del sistema contenuto in distrib.sqfs!

Ma perchè, non basta installare i programmi da dentro mandriva flash?
No, perchè al massimo abbiamo 380 MB e preferisco usare quelli per i dati nella mia home e per la configurazione in /etc.
I file che metteremo in distrib.sqfs saranno inoltre compressi, e dunque più veloci da leggere dalla pendrive. Inoltre ci sono diverse decine di MB di file di localizzazione inutili per me (tipo quella francese, tedesca o polacca), che posso rimuovere per fare spazio a un system.loop più grande (e dunque a più file nella mia home!).
Infine, così il sistema è più sicuro: distrib.sqfs è accessibile in sola lettura.

Prima di tutto, monto il file distrib.sqfs, in modo da accedere ai contenuti:

# mount -v /home/gerlos/mdvflash_bk/distrib.sqfs /mnt/prova/ -t squashfs -o loop
mount: si intende utilizzare il loop device /dev/loop0
/home/gerlos/mdvflash_bk/distrib.sqfs on /mnt/prova/ type squashfs (rw,loop=/dev/loop0)

Poi ne copio il contenuto in una directory di lavoro:

# mkdir /home/gerlos/mdvflash
# cp -aR /mnt/prova/* /home/gerlos/mdvflash

Ok, adesso facciamo chroot nella nostra directory di lavoro, e cominciamo a lavorarci come se fosse un sistema in esecuzione:

# mount -o bind /dev/ /home/gerlos/mdvflash/dev/
# mount -o bind /proc/ /home/gerlos/mdvflash/proc/
# mount -o bind /sys/ /home/gerlos/mdvflash/sys/
# chroot /home/gerlos/mdvflash /bin/bash
# source /etc/bashrc

La prima cosa è rimuovere i pacchetti linguistici indesiderati (di default ce ne sono installati oltre un centinaio!). Visto che i pacchetti di localizzazione base sono richiesti dagli altri vari pacchetti, come KDE e OpenOffice.org, basterà rimuovere quelli perchè rpm ci chieda di rimuovere anche questi.

Possiamo vedere i pacchetti di localizzazione di sistema installati usando rpm, sort e grep:

# rpm -qa | sort | grep locale
locales-2.4-2mdv2007.0
locales-aa-2.4-2mdv2007.0
locales-af-2.4-2mdv2007.0
[CUT]
locales-el-2.4-2mdv2007.0
locales-en-2.4-2mdv2007.0
locales-eo-2.4-2mdv2007.0
[CUT]
locales-is-2.4-2mdv2007.0
locales-it-2.4-2mdv2007.0
locales-iu-2.4-2mdv2007.0
[CUT]
locales-zh-2.4-2mdv2007.0
locales-zu-2.4-2mdv2007.0

A noi ci interessa tenere solo locales-2.4-2mdv2007.0, locales-en-2.4-2mdv2007.0 e locales-it-2.4-2mdv2007.0. Gli altri li vogliamo togliere. Come?

Passando a urpme l'output di rpm, filtrato più volte da grep:

# rpm -qa --queryformat '%{NAME}\n ' | sort | grep locales- | grep -v locales-en \
  | grep -v locales-it > lista_rimouvere
# urpme `cat lista_rimouvere `

urpme ci avvertirà che saranno rimossi 163 pacchetti, e ci chiederà conferma.

Ora passiamo ad installare qualche pacchetto che potrebbe servirci... Prima di tutto, configuriamo i repository remoti del sistema che andrà sulla pendrive, visitando il sito di easyurpmi:
http://easyurpmi.zarb.org/

Scegliamo i repository che ci servono (visto che conosco già i pacchetti che voglio, io ho scelto di usare i file "synthesis.hdlist.cz", che sono più piccoli da scaricare) e poi copiamo nel terminale i comandi indicati (personalmente, preferisco mettere tutto in uno script):

# cat easyurpmi.sh
#!/bin/bash
urpmi.addmedia main \
 ftp://ftp.rpmfind.net/linux/Mandrakelinux/official/2007.0/i586/media/main/release \
 with media_info/synthesis.hdlist.cz
urpmi.addmedia --update main_updates \
 ftp://ftp.rpmfind.net/linux/Mandrakelinux/official/2007.0/i586/media/main/updates \
 with media_info/synthesis.hdlist.cz
urpmi.addmedia main_backports \
 ftp://ftp.rpmfind.net/linux/Mandrakelinux/official/2007.0/i586/media/main/backports \
 with media_info/synthesis.hdlist.cz
urpmi.addmedia contrib \
 ftp://ftp.rpmfind.net/linux/Mandrakelinux/official/2007.0/i586/media/contrib/release \
 with media_info/synthesis.hdlist.cz
urpmi.addmedia --update contrib_updates \
 ftp://ftp.rpmfind.net/linux/Mandrakelinux/official/2007.0/i586/media/contrib/updates \
 with media_info/synthesis.hdlist.cz
urpmi.addmedia contrib_backports \
 ftp://ftp.rpmfind.net/linux/Mandrakelinux/official/2007.0/i586/media/contrib/backports \
 with media_info/synthesis.hdlist.cz
urpmi.addmedia plf-free \
 ftp://ftp.univ-orleans.fr/logiciel-libre/plf/mandriva/2007.0/free/release/binary/i586/ \
 with synthesis.hdlist.cz
urpmi.addmedia plf-free_backports \
 ftp://ftp.univ-orleans.fr/logiciel-libre/plf/mandriva/2007.0/free/backports/binary/i586/ \
 with synthesis.hdlist.cz
urpmi.addmedia plf-nonfree \
 ftp://ftp.univ-orleans.fr/logiciel-libre/plf/mandriva/2007.0/non-free/release/binary/i586/ \
 with synthesis.hdlist.cz
urpmi.addmedia plf-nonfree_backports \
 ftp://ftp.univ-orleans.fr/logiciel-libre/plf/mandriva/2007.0/non-free/backports/binary/i586/ \
 with synthesis.hdlist.cz
echo FINITO

Eseguiamo lo script:

# . ./easyurpmi.sh

C'è un problema: non trova i repository!!! Perchè? Non lo so, ma ho verificato che è solo che non riesce a fare la risoluzione dei nomi. Ma non c'è problema... sostituiamo i nomi dei siti con i relativi indirizzi IP ricavati dal nostro sistema normale digitando in un altro terminale ad esempio (usando ping controlliamo anche che i server siano reperibili):

$ ping -c 1 ftp.univ-orleans.fr
PING gnou.univ-orleans.fr (194.167.30.140) 56(84) bytes of data.
64 bytes from ftp.univ-orleans.fr (194.167.30.140): icmp_seq=1 ttl=49 time=111 ms

--- gnou.univ-orleans.fr ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 111.473/111.473/111.473/0.000 ms

In questo caso, 194.167.30.140 è l'IP di ftp.univ-orleans.fr. Con l'aiuto del mio editor di testo preferito modifico lo script in modo da sostituire al nome del server il corrispondente IP:

# cat easyurpmi.sh
#!/bin/bash
urpmi.addmedia main \
 ftp://130.79.200.5/pub/linux/distributions/Mandriva/official/2007.0/i586/media/main/release \
 with media_info/synthesis.hdlist.cz
urpmi.addmedia --update main_updates \
 ftp://130.79.200.5/pub/linux/distributions/Mandriva/official/2007.0/i586/media/main/updates \
 with media_info/synthesis.hdlist.cz
urpmi.addmedia main_backports \
 ftp://130.79.200.5/pub/linux/distributions/Mandriva/official/2007.0/i586/media/main/backports \
 with media_info/synthesis.hdlist.cz
urpmi.addmedia contrib \
 ftp://130.79.200.5/pub/linux/distributions/Mandriva/official/2007.0/i586/media/contrib/release \
 with media_info/synthesis.hdlist.cz
urpmi.addmedia --update contrib_updates \
 ftp://130.79.200.5/pub/linux/distributions/Mandriva/official/2007.0/i586/media/contrib/updates \
 with media_info/synthesis.hdlist.cz
urpmi.addmedia contrib_backports \
 ftp://130.79.200.5/pub/linux/distributions/Mandriva/official/2007.0/i586/media/contrib/backports \
 with media_info/synthesis.hdlist.cz
urpmi.addmedia plf-free \
 ftp://194.167.30.140/logiciel-libre/plf/mandriva/2007.0/free/release/binary/i586/ \
 with synthesis.hdlist.cz
urpmi.addmedia plf-free_backports \
 ftp://194.167.30.140/logiciel-libre/plf/mandriva/2007.0/free/backports/binary/i586/ \
 with synthesis.hdlist.cz
urpmi.addmedia plf-nonfree \
 ftp://194.167.30.140/logiciel-libre/plf/mandriva/2007.0/non-free/release/binary/i586/ \
 with synthesis.hdlist.cz
urpmi.addmedia plf-nonfree_backports \
 ftp://194.167.30.140/logiciel-libre/plf/mandriva/2007.0/non-free/backports/binary/i586/ \
 with synthesis.hdlist.cz
echo FINITO

(Forse smanettando con /etc/resolv.conf si risolverebbe il problema, ma IMHO non ne vale la pena per contattare solo 2 server! Mi conservo lo script da qualche parte e così lo posso riutilizzare quando voglio)

Proviamo ad eseguire ora lo script:

# . ./easyurpmi.sh

Come dicevo, adesso funziona, e sta scaricando gli indici dei pacchetti disponibili dai siti indicati.

Mi fermo e faccio un backup di quanto fatto finora, così se in un secondo tempo ho qualche ripensamento, o voglio fare scelte diverse, posso facilmente tornare a questa situazione (per esempio, potrei voler preparare una versione di distrib.sqfs con programmi scientifici, una versione con giochi, una super-magra per avere più spazio per i dati,...). Esco dal chroot, smonto /dev, /proc e /sys e faccio il backup con tar:

# exit
# umount /home/gerlos/mdvflash/dev /home/gerlos/mdvflash/proc /home/gerlos/mdvflash/sys
# tar czvf mdvflash.tar.gz mdvflash

Ritorno a far chroot sul sistema per la pendrive:

# mount -o bind /dev/ /home/gerlos/mdvflash/dev/
# mount -o bind /proc/ /home/gerlos/mdvflash/proc/
# mount -o bind /sys/ /home/gerlos/mdvflash/sys/
# chroot /home/gerlos/mdvflash /bin/bash
# source /etc/bashrc

Ok, ora che installiamo?
Io scelgo di installare questi pacchetti (circa 70 MB):

openoffice.org-l10n-it-2.0.3-5mdv2007.0.i586
Localizzazione italiana di OpenOffice (occhio che se si sceglie il pacchetto più recente bisogna tirarsi giù tutta la versione più recente di openoffice, e il risparmio di spazio sul disco va a farsi benedire!).
units
Un potente convertitore di unità di misura per la console.
bc
Un calcolatore a precisione arbitraria.
mc
Midnight Commander, un ottimo file manager per la console.
sudo
Per consentire agli utenti normali di eseguire comandi come root in modo sicuro.
gnuplot
Un programma per fare grafici in modo interattivo da console.
yacas
Un programma CAS, simile a Maxima, Mathematica o Maple, ma più piccolo e semplice.
celestia
Una simulazione 3D dell'Universo.
stellarium
Un planetario fotorealistico.
xephem
Uno dei migliori programmi di astronomia in circolazione.
kgpg
Un frontend grafico per gpg.
dar
Un programma per fare o estrarre backup (è il programma di backup che uso sul mio PC, insieme a rsync).
testdisk
Un programma per recuperare partizioni o dati da dischi guasti o formattati erroneamente.
kipi-plugins
Un set di strumenti per manipolare immagini in KDE sotto konqueror, digikam, ecc.
kdeedu
(ma solo per kstars e kalzium)
Kstars
Un ottimo programma di planetario per KDE
Kalzium
Una tavola periodica degli elementi

Per installare kstars e kalzium serve installare tutto kdeedu (oltre 50 MB):

  • kdeaccessibility-kttsd-3.5.4-2mdv2007.0.i586
  • kdeedu-3.5.4-2mdv2007.0.i586
  • libboost1-1.33.1-3mdv2007.0.i586
  • libkdeaccessibility1-kttsd-3.5.4-2mdv2007.0.i586
  • libkdeedu1-3.5.4-2mdv2007.0.i586

Non c'è problema, toglieremo quello che non ci serve. Usiamo, sul nostro sistema il comando:

$ urpmq -l kdeedu > lista_file

Per vedere i file contenuti nel pacchetto kdeedu, e per metterci, con un po' di pazienza, a rimuovere manualmente dalla lista i file che vogliamo tenere e lasciare quelli da togliere (sì, al contrario!!!).

Successivamente, mettiamo il file lista_file in una directory accessibile al sistema "chrootato", e lasciamo il comando:

# for i in `cat lista_file `; do rm -f $i; done

Chiaramente, dovremmo ripetere il procedimento per tutti i pacchetti citati. Assicuriamoci che i programmi siano ancora eseguibili normalmente e non manchi alcun file necessario.

Ho verificato che così si fanno pasticci immani. Dopo un po' di prove, preferisco rimuovere i file manualmente, usando mc o konqueror.

Ok, se abbiamo finito di installare programmi, ed eventualmente di configurarli, è giunto il momento di fare un po' di pulizia nel sistema!

Rimuoviamo gli indici di urpmi:

# urpmi.removemedia -a
rimuovo il supporto "main"
rimuovo il supporto "main_updates"
rimuovo il supporto "main_backports"
rimuovo il supporto "contrib"
rimuovo il supporto "contrib_updates"
rimuovo il supporto "contrib_backports"
rimuovo il supporto "plf-free"
rimuovo il supporto "plf-free_backports"
rimuovo il supporto "plf-nonfree"
rimuovo il supporto "plf-nonfree_backports"
0 intestazioni trovate in cache
sto rimuovendo 0 intestazioni obsolete in cache
scrivi il file di configurazione [/etc/urpmi/urpmi.cfg]

Verifichiamo che non ci sia nulla in /var/cache/urpmi/rpms, ed eventualmente eliminiamo i file rpm che ci sono rimasti:

# ls /var/cache/urpmi/rpms/
# rm /var/cache/urpmi/rpms/*

... e ogni altro file o script di cui ci siamo serviti.

Usciamo dal sistema chrootato e smontiamo il tutto:

# exit
# umount /home/gerlos/mdvflash/dev/
# umount /home/gerlos/mdvflash/proc/
# umount /home/gerlos/mdvflash/sys/

Ok, ora è il momento di ricreare l'immagine squashfs, in questo modo:

# cd mdvflash
# mksquashfs * distrib.sqfs
# chmod a+rw distrib.sqfs

Ci vorrà un po', per esempio, sul mio computer ci è voluta una decina di minuti.

Il file risultante è più piccolo dell'originale (725 MB nel mio caso):

# ls -lh distrib.sqfs
-rwxrw-rw- 1 root root 637M mar  2 05:18 distrib.sqfs*

Nel mio caso, rimuovendo i pacchetti linguistici e aggiungendo i miei pacchetti preferiti, ho guadagnato 725 - 637 = 88 MB! Questo mi permette di usare un file system.loop più grande, visto che ora nella partizione MDVUSBROOT ho ben 478 MB liberi.

Ormai so come fare (creo un file system.loop da 476 MB = 487424 kB):

$ dd if=/dev/zero of=system.loop bs=1k count=487424
# losetup /dev/loop0 system.loop
# mke2fs /dev/loop0
# tune2fs -c 61 system.loop
# mount -v /dev/loop0 /mnt/prova/ -t ext2
/dev/loop0 on /mnt/prova type ext2 (rw)
# umount -v /dev/loop0
eseguito umount di /dev/loop0
# losetup -d /dev/loop0

Siamo al momento della verità: copiamo i nuovi file distrib.sqfs e system.loop sulla pendrive di Mandriva Flash, smontiamo la pendrive, riavviamo, incrociamo le dita, verifichiamo che tutto funzioni a dovere e congratuliamoci con noi stessi!!!

Riguardo alla copiatura di questi due file sulla pendrive: Poichè la partizione è formattata in FAT32, per ridurre la possibilità di frammentazione del file system, penso che sia una buona idea cancellare i file distrib.sqfs e system.loop originali (tanto l'abbiamo fatto un backup, VERO???) e copiare uno per volta i due file, lanciando tra una copia e l'altra il comando sync:

# cp distrib.sqfs /mnt/MDVUSBROOT/loopbacks/
# sync
# cp system.loop /mnt/MDVUSBROOT/loopbacks/
# sync

Non so se questo accorgimento è utile o meno, in ogni caso male non fa.

Un'ultima cosa da fare è preparare un CD con l'immagine boot.iso, in modo che possiamo avviare Mandriva Flash anche sui computer che non supportano il boot da USB (ci basta il boot da CD). La cosa in sé è semplice: masterizzo su un disco l'immagine boot.iso, e sono pronto.

Ma a me faceva tristezza "sprecare" un CD mettendoci SOLO 2.7 MB di dati... e poi perchè masterizzare 2 CD, uno per l'avvio e l'altro per il disco di ripristino/manutenzione, che richiede SOLO 37 MB? Da qui l'idea perversa: io mi porto sempre in giro un CD con una copia di SystemRescueCD, un livecd utilissimo per ripristinare sistemi in panne, o anche solo per scopi diagnostici. Tra l'altro, anche SystemRescueCD richiede poco spazio, poco più di 120 MB...
Avete già capito a cosa sto pensando? Sì, voglio mettere tutto su un solo, unico CD!

Come fare? Tutti e tre i live-cd usano isolinux come boot loader.
L'idea è di aggiungere all'albero delle directory di SystemRescueCD le directory prese dagli altri 2 CD avviabili, e modificare la configurazione di isolinux, in modo che dal menu di boot sia possibile avviare ANCHE gli altri 2 sistemi.

La cosa è piuttosto semplice da fare per il solo CD di boot e non mi ci dilungherò ulteriormente. Ho montato boot.iso e l'immagine di SystemRescueCD, e ho copiato il contenuto della directory mdvboot.
Poi sono andato a cercare il file isolinux.cfg di SystemRescueCD e ci ho aggiunto queste righe in coda:

label mdvboot
    kernel /mdvboot/vmlinuz
    append initrd=/mdvboot/usb/initrd.gz fastboot splash=silent vga=788

Fatto! Ho poi creato l'immagine ISO con mkisofs e l'ho masterizzata su un CD.

In questo modo, quando al boot di questo "nuovo" SystemRescueCD digitiamo mdvflash, il sistema provvederà a cercare la pendrive e ad avviare il computer da essa!

Conclusioni

Come avrete capito se siete arrivati sin qui, non sono un esperto di livecd e simili, ma piuttosto uno curioso che ha imparato mentre sperimentava. Per questo mi sono rimasti ancora diversi interrogativi, cui ancora non ho trovato risposta, vuoi per mia ignoranza (la ragione principale), vuoi perchè la documentazione che ho trovato in rete era poca o poco illuminante per me, o frammentaria. Ok, lo ammetto, anche per pigrizia davanti a certa documentazione! ;-)

Per esempio, come funziona il boot da USB? Dev'essere per forza diverso dal boot da disco e da CD, visto che per i dischi c'è un modo univoco di dare i nomi, mentre i dispositivi USB la cosa dovrebbe (?) essere diversa... o no?
Oppure: dove guardare per la configurazione di unionfs e squashfs?
Come potrei fare se volessi cambiare il partizionamento della pendrive, e magari fare un'unica, grande, partizione, e mettere il sistema insieme ai dati "normali"?
Come aggiornare il sistema all'ultima release della distribuzione?

Magari un giorno di questi provo a capirci di più, in ogni caso racconterò le mie esperienze in queste pagine.

Ciao e buon divertimento!

Riferimenti

Trackback URL for this post:

http://gerlos.altervista.org/trackback/226

commenti

ritratto di Anonimo

correzione

Correggi il 13° rigo

******************************
Aggiornamento: siamo ormai a ottobre 2008, ed è uscita un nuova edizione di Mandriva Flash, basata sull'ultima Mandriva. Se qualcuno volesse farmi un regalo, io la proverei volentieri per voi... ;-)
******************************
Mandriva 2008 ti ha mandato un po' in confusione... Ciao!

ritratto di gerlos

correzione

Correzione fatta!
Grazie!!!

ritratto di Anonimo

correzione Sta per uscire la

correzione

Sta per uscire la 2009.1 spring e la tua guida fa acqua |||

ritratto di gerlos

Re: correzione Sta per uscire la

Beh, ci mancherebbe che non facesse acqua: hai visto la data? È stata scritta il 19/10/2007!!! Sarebbe veramente triste se un progetto di software libero come Mandriva Flash rimanesse uguale per così tanto tempo!!!
Tra l'altro, in apertura, ho scritto esplicitamente che era uscita una nuova release, non avendola provata non potevo sapere se era fatta allo stesso modo, anche se mi aspettavo dei cambiamenti.

Ciò non toglie che l'approccio euristico usato per analizzare e modificare il funzionamento del dispositivo e del sistema sia corretto ancora oggi, e utilizzabile anche con distro diverse e più recenti: i risultati saranno diversi, ma il metodo sarà simile.

Invia nuovo commento

Il contenuto di questo campo è privato e non verrà mostrato pubblicamente.
  • Allowed HTML tags: <a> <em> <strong> <del> <cite> <code> <img> <ul> <ol> <li> <dl> <dt> <dd> <pre>
  • Linee e paragrafi vanno a capo automaticamente.
  • Insert Flickr images: [flickr-photo:id=230452326,size=s] or [flickr-photoset:id=72157594262419167,size=m].
  • Indirizzi web o e-mail vengono trasformati in link automaticamente

Maggiori informazioni sulle opzioni di formattazione.

CAPTCHA
Per provare che sei un visitatore umano, rispondi a questa domanda. È per evitare l'inserimento di messaggi spam.
Image CAPTCHA
Enter the characters shown in the image without spaces, also respect upper and lower case.