Più di una volta mi è capitato di dover installare Slackware su una macchina che:
In questi casi sarebbe utile poter installare Slackware senza dover riavviare per fare il boot da cd.
L'idea è quella di sfruttare la semplicità dell'installer di Slackware.
Quando si fa il boot da cd, viene caricato in ram un piccolo filesystem (initrd) che contiene il minimo indispensabile per caricare il setup.
Noi scaricheremo quel filesystem e lo scompatteremo in una sottodirectory della root e lo sfrutteremo in ambiente chroot.
Un ambiente chrootato ci consentirà di trasformare, per una sessione, tale sottodirectory nel quale abbiamo scompattato l'initrd, in una root directory, avendo così l'impressione di avere davanti il sistema avviato da cd.
Quì tratteremo l'installazione di una slackware 12.1, ma la stessa procedura è valida per la -current, o almeno resterà valida fintanto che l'installer non subirà modifiche sostanziali alla sua struttura.
Non è necessario che la distribuzione padre sia una Slackware... questo tutorial l'ho scritto mentre avevo running una SuSE 10.3
Prima di cominciare dovremo assicurarci che abbiamo running un kernel 2.6.16, in quanto le librerie della 12.1 sono compilate per NON supportare un kernel inferiore. In caso contrario procediamo quindi ad aggiornare il kernel della nostra distribuzione prima di procedere.
Per effettuare questa installazione dovremo chiaramente avere il dvd di slackware o la iso del dvd o tutti i file scaricati (è sufficiente la slackware/ e la isolinux/initrd.img). Ognuno ha il suo modo di scaricare slackware.. ognuno utilizzi il suo preferito. In Appendice ne scrivo uno.
Indipendentemente dal metodo, al termine, i nostri file dovranno trovarsi sotto /SLACK/INSTALL, quindi diamo un
# mkdir -p /SLACK/INSTALL
poi se li scarichiamo li mettiamo quì dentro, se invece abbiamo un dvd diamo:
# mount /dev/cdrom /SLACK/INSTALL
se abbiamo una iso:
# mount -o loop slackware-12.1-install-dvd.iso /SLACK/INSTALL
E' chiaro, come dicevo, che avremo l'IMPRESSIONE di stare davanti ad un sistema avviato da cd, ma non ci siamo in realtà. Proprio per questo dovremo fare alcune operazioni che non faremmo se facessimo partire una installazione classica.
Cominciamo con il simulare il boot.
Scompattiamo la miniroot.
# mkdir -p /SLACK/INSTALL ; cd /SLACK # gzip -cd /SLACK/INSTALL/isolinux/initrd.img|cpio -i 66656 blocks # ls INSTALL/ cdrom@ floppy/ lost+found/ proc/ scripts/ tmp/ bin/ dev/ init@ mnt/ root/ sys/ usr/ boot@ etc/ lib/ nfs@ sbin/ tag/ var/
A questo punto dobbiamo lavorare come se avessimo fatto il boot da cd. Per far questo utilizziamo il chroot.
# cd / # chroot /SLACK /bin/sh $ pwd / $ ls INSTALL boot dev floppy lib mnt proc sbin sys tmp var bin cdrom etc init lost+found nfs root scripts tag usr
Per distinguere quando sono in ambiente chroot e quando sono in quello della macchina reale, utilizzerà il prompt "$" per il primo e "#" per il secondo.
Montiamo il proc filesystem e carichiamo il profilo.
$ mount -t proc proc /proc $ . /etc/profile
In caso si debba reiniziare, si consiglia di ricancellare tutto all'infuori della directory INSTALL per reinizializzare tutto l'ambiente allo stato originale
$ umount /proc $ exit # cd /SLACK # rm -r [a-z]* # ls INSTALL # gzip -cd /SLACK/INSTALL/isolinux/initrd.img|cpio -i # cd / # chroot /SLACK /bin/sh $ mount -t proc proc /proc $ . /etc/profile
Per aprire una seconda shell in chroot non è necessario rieffettuare il mount della proc
# cd / # chroot /SLACK /bin/sh $ . /etc/profile
così come non si deve smontare la proc uscendo dall'ambiente chroot se non alla chiusura dell'ultima sessione.
$ exit
A questo punto l'inizializzazione è completata e siamo pronti per far partire l'installazione.
Come una installazione standard, lanciamo il comando
$ setup
Il sistema potrebbe mostrare il messaggio "NO LINUX PARTITIONS DETECTED"... ignoriamolo. Procediamo con KEYMAP e SWAP. A seconda dei casi potrebbe comparire la schermata di scelta TARGET. In tal caso scegliamo CONTINUE senza scegliere alcuna partizione. Se invece non compare, saltiamo il passaggio. In entrambi i casi, prendiamo un'altra shell e digitiamo:
# touch /SLACK/tmp/SeTnative
cioè facciamo credere che abbiamo scelto e montato la partizione. Il setup installerà slackware in /mnt (ovvero /SLACK/mnt) Quindi andiamo avanti con SOURCE, scegliamo 5 (Install from a premounted directory) ed inseriamo /cdrom/slackware. Da quì andiamo avanti come in una installazione classica. Un'attenzione particolare richiede LILO. Per ora saltiamolo. Lo configureremo a posteriori.
L'installazione è completa, ma dobbiamo fare ancora qualche passo che il setup non ha potuto fare.
Possiamo uscire dal chroot dell'installer:
$ umount /proc $ exit
dovremo aggiungere la root-partition (che NON abbiamo scelto in fase di installazione) nella fstab e dobbiamo costruire il lilo.conf attenzione anche alla swap; molte distribuzioni vedono il disco come sda anzichè hda; nel mio caso, quindi, io mi ritrovo con la swap configurata in sda1 mentre slackware la vedrà come hda1.
# vi /SLACK/mnt/etc/fstab /dev/hda2 / ext3 defaults 1 1 /dev/hda1 swap swap defaults 0 0
# vi /SLACK/etc/lilo.conf boot = /dev/sda prompt timeout = 300 change-rules reset vga = 791 image = /boot/vmlinuz-huge-smp-2.6.24.5-smp append="root=/dev/hda2" label = Linux read-only
per ora dovremo utilizzare il kernel huge; dopo il reboot ognuno sceglierà se continuare ad usare l'huge o il generic. Notare la riga boot=/dev/sda !!! non è un errore. La mia distribuzione, come tante altre recenti, vedono tutti i dischi come scsi, compresi quelli ide. In boot= dobbiamo metterci quello che vede al momento il sistema. Se il sistema invece la vede come hda, allora mettiamoci hda. Mentre per root= va messo come lo vede slackware, però va messo dentro un 'append=' altrimente non lo accetta.
Come già specificato sopra, assicuriamoci di avere almeno il kernel 2.6.16 running, altrimenti avrete problemi durante l'installazione del bootloader e dovrete fare il boot da cd, il che vanificherebbe tutti gli sforzi.
Siamo arrivati al punto più critico, cioè lo scambio di distribuzione. Dovremo spostare tutte le directory dell'attuale rootfs in una directory di appoggio, e poi tutte quelle di slackware al rootfs principale.
Questa operazione ci conviene farla loggati come root. Molto probabilmente finora avete fatto queste operazioni in console grafica oppure connessi in ssh come utente e poi avete dato un su - Nel primo caso è sufficiente dare un 'init 3' per tornare in modalità testo. Nel secondo caso dobbiamo assicurarci di potersi loggare da remoto in ssh. Editiamo il file /etc/ssh/sshd_config e assicuriamoci che ci sia la riga
PermitRootLogin yes
e poi, a seconda della distribuzione, diamo uno dei seguenti comandi:
/etc/init.d/sshd reload /etc/init.d/ssh reload /etc/rc.d/rc.sshd restart
ora slogghiamoci e rientriamo come root
Dovremo anche assicurarci che al reboot, con la slackware, possiamo rientrare come root. Con la slackware è così di default, ma una controllata non fa male. Assicuriamoci quindi che sia presente "PermitRootLogin yes" (anche commentata va bene) in /SLACK/mnt/etc/ssh/sshd_config e che /SLACK/mnt/etc/rc.d/rc.sshd sia eseguibile.
E' consigliabile, in entrambi i casi, di stoppare più applicazioni possibili (ssh escluso), perchè lentamente, durante lo scambio, comincerà a non funzionare più niente.
Io per esperimento (riuscito) non ho fermato nessuna applicazione né chiuso l'interfaccia grafica, ma tale procedura non è consigliabile.
Ora che è tutto pronto possiamo procedere con lo scambio. Sia che stiamo in ssh, sia che stiamo in console, apriamo più shell possibili e custodiamole gelosamente e chrootiamole, perchè né durante né dopo lo scambio potremo aprirne farlo.
Rientriamo in chroot nell'installer.
# cd / # chroot /SLACK /bin/sh $ . /etc/profile
notare che non abbiamo bisogno di rimontare la proc perchè l'abbiamo già fatto prima.
Da dentro il chroot possiamo vedere la nuova installazione ma non possiamo vedere quella originale, quindi dobbiamo montare l'attuale rootpartition in una nuova directory. Anche se tale partizione è già montata, il sistema ci consentirà di rimontarla.
$ mkdir /NEW $ mount /dev/sda2 /NEW
a questo punto dentro /NEW rivediamo tutto il disco, come se fossimo fuori del chroot, ad eccezione del fatto che la /proc, la /sys e la /dev non risultano montate.
In particolare troviamo anche la directory /NEW/SLACK/mnt, nella quale abbiamo installato la nostra slackware.
creiamo ora una directory dove spostare la vecchia distribuzione.
$ mkdir /NEW/VECCHIA
Sposteremo la directory un po' per volta; se siamo fortunati potremmo avere poche complicazioni; se siamo ancora più fortunati potremo cominciare a lavorare con la nostra slackware senza nemmeno dover rebootare. Questo potrebbe succedere in caso la nostra distribuzione sia sufficientemente aggiornata. Io sto utilizzando SuSE 10.3 aggiornata a pochi giorni fa, quindi le librerie sono sufficientemente nuove.
cominciamo con i binari
$ cd /NEW /NEW $ mv bin VECCHIA ; mv SLACK/mnt/bin .
molto probabilmente non funzionerà più la distribuzione padre, in parte. Quella chrootata funzionerà perchè ha librerie sue.
ora spostiamo le librerie.
/NEW $ mv lib VECCHIA ; mv SLACK/mnt/lib .
Se vi capita di incartarvi perchè avete sbagliato il trasporto delle librerie, potete dare
/NEW $ ldconfig <posizione dove avete messo le librerie>
c'è una probabilità che il sistema ora abbia ripreso a funzionare quasi del tutto, e che non avrete più grossi problemi. In teoria ora potremmo spostare le altre directory fuori del chroot, ma io eviterei.
andiamo con lo spostamento gli altri binari.
/NEW $ mv usr VECCHIA ; mv SLACK/mnt/usr . /NEW $ mv sbin VECCHIA ; mv SLACK/mnt/sbin . /NEW $ mv opt VECCHIA ; mv SLACK/mnt/opt .
ora spostiamo la /var; questa directory contiene i log e i dati di molti servizi, quindi qualcuno di questi non funzioneranno correttamente. compreso il sistema di login.
/NEW $ mv var VECCHIA ; mv SLACK/mnt/var .
le home utente e root
/NEW $ mv root VECCHIA ; mv SLACK/mnt/root . /NEW $ mv home VECCHIA ; mv SLACK/mnt/home .
procediamo con altre ultime directory "standard":
/NEW $ mv boot VECCHIA ; mv SLACK/mnt/boot . /NEW $ mv etc VECCHIA ; mv SLACK/mnt/etc . /NEW $ mv tmp VECCHIA ; mv SLACK/mnt/tmp . /NEW $ mv mnt VECCHIA ; mv SLACK/mnt/mnt . /NEW $ mv media VECCHIA ; mv SLACK/mnt/media . /NEW $ mv srv VECCHIA ; mv SLACK/mnt/srv .
sono rimaste solo le directory speciali. Queste non le possiamo togliere come le altre perchè sono mount point e sono in uso.
/NEW $ ls SLACK/mnt README dev/ proc/ sys/ lost+found/
la sys e la proc sono vuote quindi possiamo lasciarle dove sono. La proc già esiste nella distribuzione padre, mentre non è scontato che ci sia la sys. In tal caso la possiamo spostare.
/NEW $ mv SLACK/sys .
la dev invece non è vuota e non possiamo spostarla come tutte le altre. Dovremo spostare solamente il contenuto.
/NEW $ mkdir VECCHIA/dev /NEW $ mv dev/* VECCHIA/dev/
controllare che non siano rimasti file nascosti
/NEW $ ls -a dev
nel caso spostare anche quelli, poi portiamo quelli della nuova Slackware
/NEW $ mv SLACK/mnt/dev/* dev/
e verifichiamo che pure in quella di slack non ci siano file nascosti
/NEW $ ls -a SLACK/mnt/dev/
L'ultima cosa che resta da fare è quella di lanciare il comando lilo. Possiamo lavorare fuori del chroot. Diamo prima
# lilo -v -t
per vedere come va. Se è andato tutto bene, allora diamolo senza il -t
# lilo -v Boot image: /boot/vmlinuz-huge-smp-2.6.24.5-smp Added Linux * Writing boot sector.
Siamo pronti per riavviare. In questo momento il sistema è un po' "confuso", in quanto si aspetta cose che non ci sono, per cui il comando 'reboot' potrebbe non funzionare. Il mio consiglio è che se abbiamo accesso al pulsante "reset" del sistema (o ce l'ha qualcuno che possiamo chiamare per telefono) allora utiliziamo il comando
# shutdown -r now
così se la macchina non dovesse fare lo shutdown corretto possiamo resettare brutalmente. Se invece abbiamo l'accesso solamente in ssh e non siamo vicini alla macchina, allora diamo
# sync # sync # reboot -f
ovvero riavvia il sistema brutalmente senza fare la procedura di shutdown, effettuando solamente il sync dei dischi.
Se è andato tutto a buon fine ora abbiamo la nostra nuova slackware perfettamente funzionante. L'ultima cosa che dobbiamo fare è quella di risistemare lilo per farlo puntare ad hda invece di sda:
# vi /SLACK/etc/lilo.conf boot = /dev/hda [...] image = /boot/vmlinuz-huge-smp-2.6.24.5-smp root=/dev/hda2 label = Linux read-only
se si desidera poi utilizzare il simpatico logo di slackware su lilo, allora possiamo aggiungere, in testa a lilo.conf, le righe
bitmap = /boot/slack.bmp bmp-colors = 255,0,255,0,255,0 bmp-table = 60,6,1,16 bmp-timer = 65,27,0,255
o lanciare liloconfig.
Per chi lo desidera questo è il momento di cambiare il kernel e mettere generic ricordandosi di creare l'initrd con i driver per l'ext3.
Da quì in poi potete continuare da soli.. ormai è una installazione in tutto e per tutto uguale alle altre.
Come accennavo sopra, in questo appendice presenterò uno dei tanti modi per scaricare slackware. L'utilità è soprattutto per una current.. per le -stable abbiamo già i dvd e ci è sufficiente copiarci quello sul disco.
Quì presenterò un metodo per scaricare la current.
Quì utilizzerò come sorgente slackware.com ma suggerisco vivamente di scaricarla da un mirror. Nella variabile SOURCE settate il vostro preferito.
# mkdir -p /SLACK/INSTALL ; cd /SLACK/INSTALL # SOURCE=ftp://ftp.slackware.com/pub/slackware/slackware-current/ # wget $SOURCE/isolinux/initrd.img
Non scaricherò il KDEI. A posteriori preleverò solo quello che mi serve installerò quello che mi serve.
# rm cdrom ; mkdir cdrom ; cd cdrom/ # wget $SOURCE/FILELIST.TXT # wget $SOURCE/CHECKSUMS.md5 # cat FILELIST.TXT |grep slackware/|grep -v kdei/|sed 's|.*/slackware/||'|grep /|sed "s|^|$SOURCE/slackware/|" >urls # wget -nH -x -i urls # cd /SLACK/DOWNLOAD/INSTALL/pub/slackware/slackware-current # md5sum -c /SLACK/INSTALL/CHECKSUMS.md5 2>/dev/null|grep /slackware/|grep -v OK$|more # mv slackware/ /SLACK/INSTALL
Zerouno 22 Feb 2008