Debian-in-Debian
ovvero, come installare una
distribuzione Debian GNU/Linux versione 3.0 (Woody) su un disco
rigido o in una partizione di un disco rigido disponibile su un
computer sul quale sia già stata installata un'altra Debian (una
qualsiasi distribuzione GNU/Linux, in realtà)
Redatto nel marzo 2005
Prima revisione: aprile 2005
Ultime modifiche (piccole correzioni): 28 luglio 2010
Nel primo CD di avvio di Debian 3.0 "Woody" si trovano questi file
(supponendo che il CD Rom sia stato montato nella directory /mnt/cdrom):
$ ls -F /mnt/cdrom/install/
README.sbm compact.bin lin24
linux
rawrite2.txt sbm.bin
bf24.bin
doc/ lincompt
loadlin.exe rescue.bin setlang.bat
boot.bat idepci.bin
linpci rawrite2.exe root.bin
Ci interessano i file: bf24.bin,
compact.bin,
idepci.bin
e root.bin.
Questi file sono delle immagini di filesystem ext2 compressi:
$ file
/mnt/cdrom/install/{bf24,compact,idepci,root}.bin
/mnt/cdrom/install/bf24.bin:
gzip
compressed
data, from Unix, max compression
/mnt/cdrom/install/compact.bin: gzip compressed data, from Unix, max
compression
/mnt/cdrom/install/idepci.bin: gzip compressed data, from Unix,
max compression
/mnt/cdrom/install/root.bin: gzip compressed data,
from Unix, max compression
Questi file sono le immagini compresse dei filesystem temporanei
utilizzate dal programma di installazione avviato a partire dal CD-Rom
d'installazione. Corrispondono, nell'ordine, alle opzioni di
avvio: bf24,
compact,
idepci
e vanilla,
selezionabili
al
prompt boot:
mostrato all'avvio da CD Rom.
Ne ispezioneremo adesso il contenuto di uno, quello "bf24", che consente di
eseguire l'installazione con il kernel 2.4:
$ cp /mnt/cdrom/install/bf24.bin
/tmp/bf24.bin.gz
$ cd /tmp
$ gunzip bf24.bin.gz
$ file bf24.bin
bf24.bin: Linux rev 1.0 ext2
filesystem data
Adesso dobbiamo avere i diritti di superutente per poter
montare in loopback il file in una directory temporanea per potervi
accedere:
$ su -
Password:
# cd /tmp
# mkdir fsext2
# mount -t ext2 -o loop bf24.bin
fsext2
# ls -F fsext2
bin/
instmnt/ release_notes.de release_notes.pt type.txt
dev/
lib/ release_notes.en
root/
unifont-reduced.bgf
etc/
linuxrc* release_notes.es
sbin/
usr/
floppy/
mnt/ release_notes.fr
target/ var/
initrd/
proc/ release_notes.ja tmp/
Questo è il contenuto del filesystem temporaneo
disponibile in fase di installazione quando si è scelta
l'opzione "bf24".
Si
puó
andare a vedere:
# cd fsext2
# ls etc
dhclient-script*
ld.so.conf messages.fr
messages.ru pcmcia@
dhclient.conf
messages.ca
messages.gl
messages.sk
profile*
fstab
messages.cs
messages.hr
messages.sv
protocols
group
messages.da
messages.hu
messages.tr
resolv.conf@
init.d/
messages.de
messages.it
messages.zh_TW terminfo/
inittab
messages.en
messages.ja
modules.conf
inittab.install
messages.eo messages.ko mtab@
keymaps.tgz
messages.es
messages.pl
nsswitch.conf
ld.so.cache
messages.fi
messages.pt
passwd
Il file etc/inittab
contiene le istruzioni del primo programma avviato dal kernel dopo il
suo boot, ossia init, ed
è quindi il primo file da scrutare. Al suo interno si
vedono
queste righe in particolare:
# main setup program
::respawn:/sbin/udbootstrap
Quindi, il prossimo file che andremo ad ispezionare sarà sbin/udbootstrap,
sempre
nel
filesystem
che è stato montato in loopback:
# file sbin/udbootstrap
sbin/udbootstrap: Bourne shell
script text executable
# cat sbin/udbootstrap
#!/bin/sh
if (</dev/fb0) 2>/dev/null
&& ! grep -q console=ttyS /proc/cmdline 2>
/dev/null && ! grep -q nolangchooser
/proc/cmdline 2> /dev/null ; then
LC_CTYPE=C@utf-8
export LC_CTYPE
exec /usr/bin/bterm -f
/unifont-reduced.bgf /sbin/dbootstrap
fi
TERM=vt102
export TERM
exec /sbin/dbootstrap
Si vede che, dopo un paio di operazioni preliminari,
sostituisce a se stesso il programma "sbin/dbootstrap",
che
è
un file binario eseguibile:
# file sbin/dbootstrap
sbin/dbootstrap: ELF 32-bit LSB
executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.0.30,
dynamically linked (uses shared libs), stripped
Bene, per avviare il programma di installazione Debian 3.0 Woody
si deve quindi mandare in esecuzione questo programma. Si deve
però tenere a mente che questo programma deve accedere ai file
che si vedono nella directory /tmp/fsext2
come fossero nella sua root
directory, dobbiamo quindi mandare in esecuzione questo file binario in
una cosiddetta "gabbia chroot" con il comando che segue:
# chroot /tmp/fsext2
/sbin/dbootstrap
E: /proc does not appear to be mounted (No such file or directory)
Primo aggiustamento: si deve rendere disponibile il
filesystem virtuale /proc
ai programmi che saranno eseguiti entro la
gabbia di chroot:
# mount -t proc proc /tmp/fsext2/proc
ATTENZIONE: per avere una via d'uscita rapida e comoda dal
programma d'installazione, si
faccia in
modo di avere un secondo terminale disponibile nel computer sul quale
si sta operando (tornerebbe comodo si dovesse mandare un segnale di
terminazione al processo di installazione). Si lavorasse invece
su una macchina remota via
connessione seriale, ad esempio, questo non sarebbe possibile (anche se
si potrebbe usare screen
per poter fare una cosa simile).
Allora, si smonti adesso il CD Rom da dove lo si era montato,
perché servirà montato dentro la gabbia di chroot (ho
notato che questo non crea problemi su una Gentoo con Linux 2.4.29, ma
meglio fare le cose "per bene"):
# umount /mnt/cdrom
Un'altra cosa che servirà in futuro è di rendere
disponibili al programma di installazione i moduli del kernel sotto il
quale sta girando il programma di installazione. Si potrebbe
infatti
vedere saettare sotto gli occhi il messaggio:
modprobe: Can't open dependencies
file /lib/modules/2.4.29.0-yamuna/modules.dep (No such file or
directory)
Si potrebbe quindi pensare di copiare tutto l'albero dei moduli
nell'ambiente di chroot, ma il filesystem contenuto nell'immagine "bf24.bin"
potrebbe non
contenere lo spazio sufficiente:
# df fsext2
#
Filesystem
Size
Used
Avail Use% Mounted on
#
/tmp/bf24.bin
6.4M 4.6M 1.8M 73% /tmp/fsext2
Se non si ha la necessità di configurare dispositivi
peculiari, basterà copiare questi moduli (in un kernel 2.4.29
molto modularizzato) nella directory dei moduli del filesystem sul
quale sarà installato il sistema operativo base, che si suppone
essere il primo disco SCSI nella sua prima partizione, ossia il
dispositivo /dev/sda1,
che
si
suppone già preparato con un
filesystem ext2:
# MOD="/lib/modules/`uname
-r`/kernel/drivers"
# rm -f fsext2/lib/modules
removed `fsext2/lib/modules'
(nell'immagine del filesystem
di boot questo è un collegamento simbolico, ma in queste
operazioni serve una
vera directory)
# mkdir -p fsext2"$MOD"
# cp -a "$MOD"/scsi
fsext2"$MOD"
# cp -a "$MOD"/cdrom
fsext2"$MOD"
# cp -a "$MOD"/net
fsext2"$MOD"
Proviamo a generare il file "modules.dep":
# depmod --all --errsyms
--basedir /tmp/fsext2/
depmod: *** Unresolved symbols in
/tmp/fsext2/lib/modules/2.4.29.0-yamuna/kernel/scsi/imm.o
depmod:
parport_unregister_device
depmod:
parport_enumerate
depmod:
parport_register_device
depmod:
parport_claim
depmod:
parport_release
depmod: *** Unresolved symbols in
/tmp/fsext2/lib/modules/2.4.29.0-yamuna/kernel/scsi/ppa.o
depmod:
parport_unregister_device
depmod:
parport_enumerate
depmod:
parport_register_device
depmod:
parport_claim
depmod:
parport_release
depmod: *** Unresolved symbols in
/tmp/fsext2/lib/modules/2.4.29.0-yamuna/kernel/scsi/sr_mod.o
depmod:
cdrom_open
depmod:
cdrom_release
depmod:
register_cdrom
depmod:
cdrom_ioctl
depmod:
cdrom_media_changed
depmod:
unregister_cdrom
depmod:
cdrom_number_of_slots
I moduli mancanti sono relativi ai gestori del kernel per i
dispositivi su porta parallela. Nei miei esperimenti mi sono
pure
trovato in analoga difficoltà per i moduli relativi al supporto
del
protocollo PPP. Non avendo bisogno di tale supporto, alla fine ho
risolto cancellando i moduli che mi generavano questi simboli irrisolti:
# rm -f
/tmp/fsext2"$MOD"/net/plip.o
\
/tmp/fsext2"$MOD"/net/ppp_deflate.o \
/tmp/fsext2"$MOD"/scsi/imm.o \
/tmp/fsext2"$MOD"/scsi/ppa.o
Si riprovi a generare il file "modules.dep":
# depmod --all --errsyms
--basedir /tmp/fsext2/
#
Operazione
riuscita.
Adesso i moduli che potrebbero servire a lanciare il programma "dbootstrap"
sono a posto; mancano quelli da rendere disponibili al processo di
installazione. I primi sono stati aggiunti al filesystem montato
in loopback nella directory /tmp/fsext2,
i
secondi
si devono copiare nella partizione del disco rigido sul quale
si sta per installare il nuovo sistema nella partizione che
ospiterà la directory /lib/modules
(che si suppone sia la partizione /dev/sda1).
Lo
si
faccia, copiandoci tutti i moduli del kernel che si sta usando
adesso (la directory "target"
è quella dove il programma di
installazione Debian monta il filesystem nel quale deve installare il
sistema base):
# mount -t ext2 /dev/sda1
fsext2/target
# mkdir -p
fsext2/target/lib/modules
# cp -a /lib/modules/`uname -r`
fsext2/target/lib/modules/
# umount fsext2/target
Si puó adesso riprovare con il programma di installazione:
# chroot /tmp/fsext2
/sbin/dbootstrap
Ma si puó anche scegliere di lanciare in chroot una shell
prima,
per eseguire /sbin/dbootstrap
da essa; questo permetterà di uscire dal programma di
installazione tornando all'ambiente di chroot, come vedremo in
seguito. Adesso, si faccia così:
# chroot /tmp/fsext2 /bin/ash
\[\033[01;31m\]\h
\[\033[01;34m\]\W \$ \[\033[00m\]
La shell ash
ha ereditato il prompt della shell sotto la quale è stato
eseguito il
comando chroot, che però non è di aiuto in questa
shell. Lo si imposti allora a qualcosa di non fastidioso,
così, ad
esempio:
\[\033[01;31m\]\h
\[\033[01;34m\]\W \$ \[\033[00m\]export PS1='Prompt> '
Prompt>
Ed ora, si avvii il programma di installazione
Debian:
Prompt> /sbin/dbootstrap
+----------------------------+ Release Notes
+-----------------------------+
|
Software
in
the Public
Interest
#
|
presents
:
|
***
Debian
GNU/Linux 3.0
***
:
|
:
| This is the Debian installation system, somewhat
inaccurately
:
| named 'boot-floppies', version
3.0.23.
:
|
:
| This installation set was built on 2002-05-15 by Adam Di
Carlo :
|
<aph@debian.org>.
:
|
:
| Debian is created by a worldwide team of over 900
volunteers
:
| collaborating via the Internet. We have formed the
non-profit
:
| organization "Software in the Public Interest" to sponsor
this :
| development. We'd like to thank the many businesses,
universities, and :
| individuals who contributed the free software upon which
Debian is :
| based. The Free Software Foundation should also be recognized
for the :
| many programs they have contributed and for their pioneering
role in :
| developing the free software concept and the GNU
project.
:
|
<Continue>
+--------------------------------------------------------------------------+
Eureka! :-)
Si continui adesso con la fase
due:
< Torna al livello precedente <
<<
Torna alla prima pagina <<