Vai al contenuto | Salta in fondo

Home

Main.FromSargeToEtch r1.4 - 22 Dec 2007 - 20:22 - FrancescoMinafra Fine pagina


Inizio pagina | Salta alle attività

From sarge to etch: cronaca di un dist--upgrade annunciato

Premessa

Questa cronaca si basa su due esperienze fatte per l'aggiornamento di due macchine casalinghe, sulle quali è installato Debian GNU/Linux e che andavano aggiornate dalla versione 3.1 alla versione 4.0.

Le due macchine si chiamano rispettivamente elaion e kubrick. Sulla prima ho fatto l'aggiornamento per vedere che danni riuscivo a combinare, sulla seconda ho ripetuto il tutto annotandomi i passi seguiti e le schermate di output che vedrete in questa cronaca. Buona lettura!

Scopo del gioco

Lo scopo di queste note e' quello di mostrare come effettuare l'aggiornamento di un sistema Debian Sarge sulla macchina kubrick alla nuova release candidata "stabile" che ha nome in codice "Etch". In sostanza aggiorniamo da Debian 3.1 a Debian 4.0

Replica della cache dei pacchetti

Per prima cosa ci allochiamo sulla macchina in questione e facciamo in modo da sfruttare, per le varie operazioni di aggiornamento, una cache dei pacchetti gia' presente su un altro sistema (elaion) per il quale e' gia' stato fatto in precedenza l'aggiornamento. Questo permette di velocizzare le cose e di risparmiare banda di rete, in quanto l'altro sistema si trova sulla stessa rete locale del nodo che si vuole aggiornare. Se il motivo di cio' non fosse ancora chiaro, basti pensare che un'aggiornamento di pacchetti da una release "stabile" ad una release "testing" per un sistema di tipo server, quindi senza molti fronzoli relativi ai desktop manager, comporta il download dalla rete di centinaia di megabyte di dati, il che non e' proprio agevole se si dispone di una connessione a banda limitata, come nel caso delle ADSL o peggio dei modem 56k (esiste ancora qualcuno che li usa...?).

fm@gridfm:~$ ssh fm@kubrick
Password:
Linux kubrick 2.6.8-15.k6.2.cic #1 Tue Dec 6 22:07:11 CET 2005 i586 GNU/Linux
                  _   _  _   _  ____   ____   _   ____  _   _
                 |_ _-  |_  |_ |_   - |_   - |_  -     |_ _-
Welcome to ..... |_-    |_  |_ |___-  |___-  |_ |-     |_-
                 |_-_   |_  |_ |_  -_ |_-_   |_ |-     |_-_
Have a good day! |_  -_  |___  |___-  |_  -_ |_  -____ |_  -_

No mail.

Last login: Mon Jan  1 09:42:06 2007 from 192.168.1.4

fm@kubrick:~$ mkdir cacheapt
fm@kubrick:~$ cd cacheapt/
fm@kubrick:~/cacheapt$ rsync -e ssh -avzp fm@elaion:/var/cache/apt/archives/ .
Password:

receiving file list ... done
./
adduser_3.100_all.deb
afterstep_2.2.2-2_i386.deb
...

Come si nota, per sincronizzare la cache remota con una lista locale di file, utilizziamo il comando rsync su protocollo ssh, che non fa altro che fare una copia dei file simile a quanto avviene con il comando scp, con la differenza che si occupa di copiare solo i file che sono stati aggiunti/variati nella locazione remota rispetto a quelli nella directory locale.

Eseguo il comando da utente normale, poi mi alloco come superutente per popolare la cache effettiva dei pacchetti del sistema:

fm@kubrick:~/cacheapt$ su -
Password:
kubrick:~# cd /var/cache/apt/archives/
kubrick:/var/cache/apt/archives# cp /home/fm/cacheapt/* .
kubrick:/var/cache/apt/archives# cd

Aggiornamento della release corrente

A questo punto possiamo procedere con le operazioni di aggiornamento, che prevedono dapprima l'aggiornamento dei pacchetti della release corrente alle ultime versioni, e poi le fasi che descriveremo in seguito:

kubrick:~# apt-get update
Ign file: debs/ Release
Get:1 http://security.debian.org stable/updates/main Packages [421kB]
...
Fetched 421kB in 23s (18.0kB/s)
Reading Package Lists... Done
kubrick:~# apt-get upgrade
Reading Package Lists... Done
Building Dependency Tree... Done
The following packages will be upgraded:
  gzip imagemagick info libapache2-mod-php4 libdevmapper1.01 libdps1 libfreetype6 libgcc1 libgnutls11 libice6
  libmagick6 libmysqlclient14 libmysqlclient14-dev libsm6 libssl0.9.7 libx11-6 libxaw7 libxext6 libxft1 libxi6 libxmu6
  libxmuu1 libxp6 libxpm4 libxrandr2 libxt6 libxtrap6 libxtst6 mozilla-firefox mysql-client-4.1 mysql-common-4.1
  mysql-server-4.1 openssl php4-cli php4-common php4-gd php4-imap php4-ldap php4-mcal php4-mhash php4-mysql php4-odbc
  php4-pear php4-recode php4-snmp php4-sybase ssh tar xfree86-common xlibs xlibs-data xutils
52 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 27.3MB/50.2MB of archives.
After unpacking 713kB of additional disk space will be used.
Do you want to continue? [Y/n] y

come si vede, il fatto di aver usato la cache di un altro sistema, anche se non configurato in maniera proprio identica, ha portato a risparmiare il download di circa la meta' dei 50 MB di pacchetti necessari per aggiornare il sistema...

OK facciamo andare questo aggiornamento e nel frattempo concediamoci una fetta di panettone wink

Adesso abbiamo un sistema "sarge" up-to date, pronto per essere aggiornato ad "etch".

Modifica dei repository

Il passo successivo da fare e' quello di cambiare gli indirizzi dei repository dei pacchetti modificando il file /etc/apt/sources.list

Prima delle modifiche avevamo:

deb http://security.debian.org/ stable/updates main contrib non-free
deb ftp://ftp.it.debian.org/debian/ sarge main contrib non-free

mentre dopo, le due righe precedenti diventano:

deb http://security.debian.org/ etch/updates main contrib non-free
deb ftp://ftp.it.debian.org/debian/ etch main contrib non-free

Inoltre se nel file /etc/apt/apt.conf vi fosse una riga del tipo:

APT::Default-Release "sarge";

essa andrebbe aggiornata di conseguenza.

Inizio aggiornamento ad etch

Possiamo ora aggiornare il database dei pacchetti in modo che rispecchi quello della nuova release:

kubrick:~# apt-get update
Ign file: debs/ Release
...
Fetched 5840kB in 1m15s (77.4kB/s)
Reading Package Lists... Done

e quindi procedere all'upgrade dei pacchetti:

kubrick:~# apt-get upgrade
Reading Package Lists... Done
Building Dependency Tree... Done
The following packages have been kept back:
  adduser anacron apache2 apache2-mpm-prefork apache2-utils apt apt-utils aptitude at base-passwd bash bc binutils
  bsdmainutils bsdutils bzip2 console-common console-tools coreutils cpio cpp cpp-3.3 cron curl cvs debhelper
...
The following packages will be upgraded:
  apache2-doc asr-manpages autoconf automake1.4 autotools-dev base-files console-data debconf debconf-i18n
...
62 upgraded, 0 newly installed, 0 to remove and 249 not upgraded.
Need to get 16.0MB/42.3MB of archives.
After unpacking 3662kB disk space will be freed.
Do you want to continue? [Y/n] y

come si nota, anche in questo caso gran parte dei pacchetti da aggiornare vengono presi dalla cache locale che abbiamo provveduto a popolare in precedenza, ed il download dalla rete e' limitato a 16 MB di dati, su un totale di 42 MB...

Con questo upgrade vengono aggiornati solo quei pacchetti che non hanno dipendenze critiche derivanti dal passaggio alla nuova versione. Ad esempio pacchetti di documentazione, o manpages etc...

Il fatto di procedere all'aggiornamento in piu' passi puo' costituire un vantaggio, dal momento che se qualcosa va storto si limitano i danni.... Ma questo non significa che qualcosa debba andare storto... dopo tutto Debian e i suoi sistemi di aggiornamento sono infallibili, non e' vero? wink

Aggiornamento del kernel

Il passo successivo sarebbe quello di lanciare il comando:

apt-get dist-upgrade

ed incrociare le dita.... Tuttavia molti in rete consigliano di lanciare prima l'aggiornamento del kernel e poi procedere con il dist-upgrade (a dire la verità anche nelle release notes di etch alla data odierna --2-1-2007-- non viene presa una posizione netta su come sia giusto procedere). Tutto cio' sempre nella logica di procedere per passi all'aggiornamento della distribuzione, ed anche per un motivo che andiamo di seguito ad illustrare...

Il kernel di default della "Etch" ha numero di versione 2.6.18. Il pacchetto relativo richiede le libc6, le quali vanno in conflitto con gli "initrd-tools", che potrebbero essere richiesti affinche' un kernel 2.6.8 (quello di default di Sarge) possa rimanere installato sul sistema (ovviamente cio' non vale se non si usa initrd per l'avvio). Conseguenza: se tentiamo di installare un kernel 2.6.18 su un sistema che usa un kernel 2.6.8 ed un disco ram iniziale per il caricamento dei moduli, APT tentera' di rimuovere i pacchetti di tutti i kernel 2.6.8 installati sul sistema che facciano uso degli initrd-tools, compreso quello in uso! APT avvisa che questa puo' essere una operazione catastrofica....

Questo e' quanto mi e' capitato sul sistema elaion al quale stavo facendo l'aggiornamento e che aveva un kernel installato preso dai repository ufficiali di sarge (tali kernel usano un disco ram iniziale, detto anche initrd, per fare in modo da poter essere adatti alla maggior parte dei sistemi su cui andra' a girare. Il disco ram iniziale, infatti contiene niente altro che moduli del kernel per i piu' disparati dispositivi hardware...)

Dopo aver squadrato in lungo e in largo il problema, non ho trovato altra soluzione se non quella di accettare la disinstallazione del pacchetto del kernel in uso e lasciar fare l'aggiornamento al nuovo kernel, riservandomi di riavviare il sistema immediatamente dopo... Si intuisce che questa operazione e' abbastanza critica, in quanto se dovesse essere interrotta per qualche motivo... le conseguenze potrebbero essere davvero catastrofiche per il sistema. Ma per mia fortuna tutto e' andato liscio smile

Ritornando al nostro sistema kubrick, oggetto di questa cronaca, va detto che esso utilizza un kernel 2.6.8 ma che mi sono compilato dai sorgenti ufficiali debian. E nel fare questo ho omesso la creazione del disco ram iniziale, che e' abbastanza inutile per un kernel compilato per una sola macchina. Il pacchetto risultante quindi NON dipende dagli initrd-tools e quindi non dovrebbe verificarsi la situazione di criticita' descritta per la mia precedente esperienza di aggiornamento. Posso procedere allora con piu' tranquillita' all'installazione del nuovo kernel.

kubrick:~# apt-get install kernel-image-2.6-686
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
  busybox initramfs-tools klibc-utils libc6 libc6-dev libklibc libselinux1 libsepol1 libvolume-id0 linux-image-2.6-686
  linux-image-2.6.18-3-686 locales lsb-base module-init-tools tzdata udev
Suggested packages:
  linux-doc-2.6.18 grub
Recommended packages:
  libc6-i686
The following packages will be REMOVED:
  base-config hotplug
The following NEW packages will be installed:
  busybox initramfs-tools kernel-image-2.6-686 klibc-utils libklibc libselinux1 libsepol1 libvolume-id0
  linux-image-2.6-686 linux-image-2.6.18-3-686 lsb-base tzdata udev
The following packages will be upgraded:
  libc6 libc6-dev locales module-init-tools
4 upgraded, 13 newly installed, 2 to remove and 245 not upgraded.
Need to get 0B/29.6MB of archives.
After unpacking 55.0MB of additional disk space will be used.
Do you want to continue? [Y/n] y

Come si nota, questa volta APT non incontra problemi di dipendenze che coinvolgono il kernel attualmente in uso, dal momento che esso non fa uso di un disco ram iniziale. Quindi APT NON tenta di rimuovere il pacchetto del kernel che si sta usando.

Questa volta inoltre non e' necessario scaricare nemmeno un byte dai repository in rete wink

...
Setting up linux-image-2.6-686 (2.6.18+5) ...
Setting up kernel-image-2.6-686 (2.6.18+5) ...

OK tutto sembra andato per il meglio. Riavviamo con il nuovo kernel prima di procedere al restante upgrade dei pacchetti...

kubrick:~# reboot

Al riavvio notiamo subito che qualcosa e' cambiato. Il messaggio di issue in console presenta un bel:

Debian GNU/Linux 4.0 kubrick tty1

kubrick login:

invece del "vecchio" numero di versione 3.1 che aveva la Sarge.

Completamento degli upgrade

Adesso non mi resta che riallocarmi come utente root e completare l'operazione di aggiornamento tramite il comando:

kubrick:~# apt-get dist-upgrade

che installa le nuove versioni dei restanti pacchetti, affinche' possiate avere un sistema 'etch' nuovo fiammante!

Considerazioni finali

Infine aggiungo una piccola nota: ad essere sinceri il nuovo kernel 2.6.18 non funzionava "out of the box" cosi' come scaricato dai repository. Infatti esso presentava un problema di compatibilita' con il mio processore (AMD K6 II a 400 Mhz). Il problema deriva dal fatto che il pacchetto del kernel che ho utilizzato, ovvero linux-image-2.6-686, viene compilato di default con il supporto SMP abilitato. Questo fatto non influisce sul funzionamento con processori di classe pentium ma crea problemi se si va ad utilizzare questo kernel su processori con architettura 486 od anche AMD K6. Per aggirare questo problema si puo' installare l'apposito pacchetto del kernel linux-image-2.6-486, che risulta essere compilato senza il supporto SMP.

FrancescoLovergine: in alternativa si può aggiungere nosmp come argomento di boot.

Tuttavia ho preferito scaricare i sorgenti e ricompilarli ottimizzando per AMD K6 II, disabilitando l'uso del disco ram iniziale ed aggiustando alcune altre cosette.

Alla prossima!

Bibliografia

Release Notes for Debian GNU/Linux 4.0 ("etch"), Intel x86

Debian Reference

-- FrancescoMinafra - 02 Jan 2007

Inizio pagina


Sei qui: Main > TipsAndTricks > FromSargeToEtch



Inizio pagina

Copyright © 2008 dei contributori. Tutto il materiale di questo sito è sotto copyright dei rispettivi autori.
Idee, richieste, problemi riguardanti LUGBari? Invia suggerimenti