Wiki Ubuntu-it

Indice
Partecipa
FAQ
Wiki Blog
------------------
Ubuntu-it.org
Forum
Chiedi
Chat
Cerca
Planet
  • Pagina non alterabile
  • Informazioni
  • Allegati
  • Differenze per "Repository/NonUfficiali"
Differenze tra le versioni 1 e 22 (in 21 versioni)
Versione 1 del 26/08/2007 22.04.49
Dimensione: 9182
Commento: Prima stesura
Versione 22 del 07/04/2015 20.40.26
Dimensione: 9605
Commento: aggiunto riferimento Ubuntu Software Center
Le cancellazioni sono segnalate in questo modo. Le aggiunte sono segnalate in questo modo.
Linea 1: Linea 1:
## page was renamed from Repository/RepositoryNonUfficiali
#format wiki
#LANGUAGE it
<<BR>>
<<Indice(depth=2)>>

= Introduzione =
Linea 11: Linea 19:
 * ''tzdata''
Linea 13: Linea 20:
 * ''gdb''
Linea 16: Linea 24:
Ognuno di questi pacchetti è indispensabile per il corretto funzionamento del sistema e del kernel e una rimozione accidentale o un aggiornamento non autorizzato può provocare l'instabilità permanente del sistema e perdita di dati. Gli aggiornamenti di questi pacchetti devono essere necessariamente rilasciati dagli sviluppatori di Ubuntu, per nessuna ragione è consigliabile utilizzare versioni precedenti o superiori provenienti da terze parti, a meno di non ricompilare ogni pacchetto per la nuova toolchain, il cui processo richiede giorni e giorni di lavoro. Ognuno di questi pacchetti è indispensabile per il corretto funzionamento del sistema e del kernel; una rimozione accidentale o un aggiornamento non autorizzato può provocare l'instabilità permanente del sistema e perdita di dati. Gli aggiornamenti di questi pacchetti devono essere necessariamente rilasciati dagli sviluppatori di Ubuntu, per nessuna ragione è consigliabile utilizzare versioni provenienti da terze parti, a meno di non ricompilare ogni pacchetto per la nuova toolchain, il cui processo richiede giorni e giorni di lavoro.
Linea 20: Linea 28:
Anche gli sviluppatori non possono rilasciare un aggiornamento che implichi una ricompilazione dell'intero parco software, ci si limita a bugfix singoli che non comportano cambiamenti sostanziali nella struttura dei pacchetti. Le funzionalità abilitate, le opzioni di compilazione e i parametri non possono essere rivisti per nessun motivo. Anche gli sviluppatori non possono rilasciare un aggiornamento che comporti una ricompilazione dell'intero parco software, ci si limita a singoli bugfix che non comportano cambiamenti sostanziali nella struttura dei pacchetti. Le funzionalità abilitate, le opzioni di compilazione e i parametri non possono essere rivisti per nessun motivo.
Linea 26: Linea 34:
== Il processo di compilazione dei pacchetti == == Processo di compilazione dei pacchetti ==
Linea 30: Linea 38:
Si supponga che la libreria venga aggiornata ad una nuova versione. Il pacchetto deve necessariamente essere ricompilato per poter usufruire della nuova libreria. Un esempio pratico è dato dal [https://launchpad.net/bugs/73722 bug #73722], nel quale il pacchetto ''openmcu'' non è stato ricompilato dopo l'aggiornamento della libreria ''libpt'', rendendo di fatto inusabile il software in questione. Si supponga che la libreria venga aggiornata ad una nuova versione. Il pacchetto deve necessariamente essere ricompilato per poter usufruire della nuova libreria. Un esempio pratico è dato dal [[https://launchpad.net/bugs/73722|bug #73722]], nel quale il pacchetto ''openmcu'' non è stato ricompilato dopo l'aggiornamento della libreria ''libpt'', rendendo di fatto inusabile il software in questione.
Linea 34: Linea 42:
La [http://www.debian.org/doc/debian-policy/ policy di Debian], il documento di riferimento per gli sviluppatori di Debian e Ubuntu, tratta nel [http://www.debian.org/doc/debian-policy/ch-sharedlibs.html capitolo 8] lo spinoso problema della gestione dei pacchetti di libreria. In particolare, l'aggiornamento di una libreria richiede di rinominare il pacchetto, siccome la policy richiede espressamente che il ''soname'' della libreria venga rispettato nel nome del pacchetto (si veda la [http://www.debian.org/doc/debian-policy/footnotes.html#f44 footnote #44] in merito). La [[http://www.debian.org/doc/debian-policy/|policy di Debian]], il documento di riferimento per gli sviluppatori di Debian e Ubuntu, tratta nel [[http://www.debian.org/doc/debian-policy/ch-sharedlibs.html|capitolo 8]] lo spinoso problema della gestione dei pacchetti di libreria. In particolare, l'aggiornamento di una libreria richiede di rinominare il pacchetto, siccome la policy richiede espressamente che il ''SONAME'' della libreria venga rispettato nel nome del pacchetto (si veda la [[http://www.debian.org/doc/debian-policy/footnotes.html#f45|footnote #45]] in merito).
Linea 38: Linea 46:
Si veda ora questo messaggio di errore relativo al pacchetto ''exaile'': Si veda ora questo messaggio di errore relativo al pacchetto ''exaile'' ([[https://bugs.launchpad.net/ubuntu/+source/pycairo/+bug/129816|bug #129816]]):
Linea 51: Linea 59:
In questo caso l'aggiornamento di ''libcairo'', una libreria grafica utilizzata dal desktop manager di GNOME, ha messo in crisi ogni singola applicazione scritta in python a causa di un duplice errore di pacchettizzazione: In questo caso l'aggiornamento di ''libcairo'', una libreria grafica utilizzata dal desktop manager di GNOME, ha messo in crisi ogni singola applicazione scritta in Python a causa di un duplice errore di pacchettizzazione:
Linea 53: Linea 61:
 1. ''cattivo posizionamento'': la libreria è stata posizionata in `/usr/local/lib` invece che nella canonica `/usr/lib`  1. ''cattivo posizionamento'': la libreria è stata posizionata in `/usr/local/lib` invece che nella canonica `/usr/lib`.
Linea 67: Linea 75:
 1. ''librerie errate'': a volte i pacchetti non vengono compilati usando software sicuri quali [http://wiki.ubuntu-it.org/PbuilderHowto pbuilder], bensì compilati direttamente su un sistema al quale possono essere state aggiunte librerie differenti da quelle distribuite ufficialmente da Ubuntu. I sintomi di questo problema sono errori quali ''undefined symbol'' in fase di avvio o crash dell'applicazione durante il suo utilizzo. I motivi di ciò sono spiegati nella sezione precedente.  1. ''librerie errate'': a volte i pacchetti non vengono compilati usando software sicuri quali [[Programmazione/Pbuilder|pbuilder]], bensì compilati direttamente su un sistema al quale possono essere state aggiunte librerie differenti da quelle distribuite ufficialmente da Ubuntu. I sintomi di questo problema sono errori quali ''undefined symbol'' in fase di avvio o crash dell'applicazione durante il suo utilizzo. I motivi di ciò sono spiegati nella sezione precedente.
Linea 69: Linea 77:
 1. ''cattivo posizionamento'': un pacchetto deve rispettare la posizione canonica dei file, definito dal [http://www.pathname.com/fhs/ Filesystem Hierarchy Standard], in caso contrario potrebbero venir meno alcune funzionalità o insorgere problemi di varia natura.  1. ''cattivo posizionamento'': un pacchetto deve rispettare la posizione canonica dei file, definito dal [[http://www.pathname.com/fhs/|Filesystem Hierarchy Standard]], in caso contrario potrebbero venir meno alcune funzionalità o insorgere problemi di varia natura.
Linea 73: Linea 81:
Un problema ampiamente diffuso è la distribuzione di pacchetti con numeri di versione che possono confliggere con quelli distribuiti da Ubuntu. Si supponga che il pacchetto ''foo_0.1-0ubuntu1'' sia ufficialmente distribuito da Ubuntu. Nel caso venisse pacchettizzata la versione ''0.2-0ubuntu1'' in un repository di terze parti, nel caso in cui Ubuntu decidesse di distribuire la nuova versione, si utilizzerebbe lo stesso numero di versione per due pacchetti differenti. Per ovviare a questo problema, la soluzione migliore è usare il simbolo della tilde (~) nella versione, in modo che la versione del pacchetto diventi ''0.2-0ubuntu1~mypackage1''. Un problema ampiamente diffuso è la distribuzione di pacchetti con numeri di versione che possono confliggere con quelli distribuiti da Ubuntu. Si supponga che il pacchetto ''foo_0.1-0ubuntu1'' sia ufficialmente distribuito e la versione ''0.2-0ubuntu1'' venga resa disponibile in un repository di terze parti. nel caso in cui Ubuntu decidesse di distribuire la nuova versione, si verrebbe ad utilizzare lo stesso numero di versione per due pacchetti differenti. Per ovviare a questo problema, la soluzione migliore è usare il simbolo della tilde (~) nella versione, in modo che la versione del pacchetto diventi ''0.2-0ubuntu1~mypackage1''.
Linea 77: Linea 85:
Oltre al numero di versione, per effettuare l'aggiornamento si tiene conto anche del ''timestamp'', il quale è la data di creazione del pacchetto espresso in numero di secondi trascorsi dalla ''Unix Epoch'' (1 gennaio 1970). Si supponga che il pacchetto foo_0.1-0ubuntu1, che dipende da libc6, sia appena stato inserito nella versione di sviluppo con timestamp 1000 (semplificazione) e che pochi giorni dopo ne venga realizzato un backport non ufficiale con la stessa versione e timestamp 1100. Durante l'aggiornamento di Ubuntu alla versione successiva, il pacchetto ''foo'' non viene considerato siccome ha la medesima numerazione e il timestamp è maggiore. Eseguendo l'applicazione, è molto facile incorrere in crash inspiegabili siccome è stato compilato usando la toolchain della precedente versione stabile. Oltre al numero di versione, per effettuare l'aggiornamento si tiene conto anche del ''timestamp'', il quale rappresenta la data di creazione del pacchetto espresso in numero di secondi trascorsi dalla ''Unix Epoch'' (1 gennaio 1970). Si supponga che il pacchetto foo_0.1-0ubuntu1, che dipende da libc6, sia appena stato inserito nella versione di sviluppo con timestamp 1000 (semplificazione) e che pochi giorni dopo ne venga realizzato un backport non ufficiale con la stessa versione e timestamp 1100. Durante l'aggiornamento di Ubuntu alla versione successiva, il pacchetto ''foo'' non viene considerato siccome ha la medesima numerazione e il timestamp è maggiore. Eseguendo l'applicazione, è molto facile imbattersi in crash inspiegabili dato che è stato compilato usando la toolchain della precedente versione stabile.
Linea 79: Linea 87:
<<Anchor(aggiornamento-release)>>
Linea 81: Linea 90:
Come ultimo accorgimento, è consigliabile rimuovere i repository di terze parti e i pacchetti da essi forniti durante un aggiornamento di distribuzione (per esempio, da Feisty a Gutsy). Per fare ciò, è sufficiente agire sul file `/etc/apt/sources.list` rimuovendo le righe non relative a repository ufficiali di Ubuntu o usando il comando
Come ultimo accorgimento, è consigliabile rimuovere i repository di terze parti e i pacchetti da essi forniti durante un aggiornamento di distribuzione (per esempio, da Ubuntu 10.04 a Ubuntu 10.10). Per fare ciò, è sufficiente agire sul file `/etc/apt/sources.list` rimuovendo le righe non relative a repository ufficiali di Ubuntu o usando il seguente comando:
Linea 87: Linea 95:
Una volta effettuata questa operazione e ricaricato l'elenco dei pacchetti (con il comando `sudo apt-get update`), è possibile rimuovere i pacchetti non ufficiali con un qualsiasi gestore di pacchetti. Synaptic raccoglie tali pacchetti sotto la categoria ''Installato (locale o obsoleto)''. Una volta effettuata questa operazione e ricaricato l'elenco dei pacchetti (con il comando `sudo apt-get update`), è possibile rimuovere i pacchetti non ufficiali con un qualsiasi [[AmministrazioneSistema/InstallareProgrammi#grafica|gestore di pacchetti]]. <<BR>>'''Synaptic''' elenca tali pacchetti sotto la categoria '''Installato (locale o obsoleto)'''. <<BR>>'''Ubuntu Software Center''' elenca tali pacchetti sotto la categoria '''Installato → Sconosciuto'''.
Linea 89: Linea 98:
CategoryNuoviDocumenti CategoryAmministrazione


Introduzione

Ubuntu fornisce una notevole quantità di pacchetti software ma a volte, per problematiche legate alle policy e a fattori esterni, non è possibile includere un determinato nuovo pacchetto o un aggiornamento di un'applicazione già presente negli archivi. Per risolvere il problema, diversi utenti si affidano a pacchetti fatti in casa o a repository di terze parti, i quali risolvono una lacuna ma rischiano di arrecare al sistema più danni che benefici.

In questo documento si analizzeranno le situazioni in cui è facile incappare utilizzando software non distribuito da Ubuntu, insieme ai potenziali rischi e problemi più comuni. Il consiglio è quello di rileggere con attenzione questa pagina durante un aggiornamento di alcuni pacchetti per diagnosticare velocemente eventuali problemi introdotti.

I contenuti sono anche rivolti a coloro interessati alla pacchettizzazione di software in modo da fornire accorgimenti utili ad alcuni problemi di difficile diagnosi.

Toolchain

Ogni distribuzione GNU/Linux, e Ubuntu non fa eccezione, comprende alcuni software essenziali per il corretto funzionamento del kernel e dell'intero parco software. L'insieme di questi software viene definito toolchain ed è la base sulla quale viene sviluppata una distribuzione. In Debian e Ubuntu, i pacchetti sorgente che formano la toolchain sono i seguenti:

  • gcc-defaults (gcc, g++, ...)

  • gdb

  • glibc (libc6)

  • binutils

Ognuno di questi pacchetti è indispensabile per il corretto funzionamento del sistema e del kernel; una rimozione accidentale o un aggiornamento non autorizzato può provocare l'instabilità permanente del sistema e perdita di dati. Gli aggiornamenti di questi pacchetti devono essere necessariamente rilasciati dagli sviluppatori di Ubuntu, per nessuna ragione è consigliabile utilizzare versioni provenienti da terze parti, a meno di non ricompilare ogni pacchetto per la nuova toolchain, il cui processo richiede giorni e giorni di lavoro.

Politiche di aggiornamento

Anche gli sviluppatori non possono rilasciare un aggiornamento che comporti una ricompilazione dell'intero parco software, ci si limita a singoli bugfix che non comportano cambiamenti sostanziali nella struttura dei pacchetti. Le funzionalità abilitate, le opzioni di compilazione e i parametri non possono essere rivisti per nessun motivo.

Librerie

Le librerie sono strumenti importanti in una distribuzione GNU/Linux perchè permettono a più programmi di avere un'interfaccia comune a una o più funzioni. Nelle distribuzioni derivate da Debian (come Ubuntu), il ruolo delle librerie è ancora più importante e delicato.

Processo di compilazione dei pacchetti

Gran parte dei pacchetti distribuiti da Ubuntu ha come dipendenze una o più librerie. Esse vengono generate automaticamente dal processo di creazione del pacchetto sulla base delle dipendenze di compilazione, indicate nel campo Build-depends: del pacchetto sorgente. Il pacchetto risultante si aspetta di trovare la versione della libreria sulla base della quale è stato compilato.

Si supponga che la libreria venga aggiornata ad una nuova versione. Il pacchetto deve necessariamente essere ricompilato per poter usufruire della nuova libreria. Un esempio pratico è dato dal bug #73722, nel quale il pacchetto openmcu non è stato ricompilato dopo l'aggiornamento della libreria libpt, rendendo di fatto inusabile il software in questione.

La policy di Debian dice che...

La policy di Debian, il documento di riferimento per gli sviluppatori di Debian e Ubuntu, tratta nel capitolo 8 lo spinoso problema della gestione dei pacchetti di libreria. In particolare, l'aggiornamento di una libreria richiede di rinominare il pacchetto, siccome la policy richiede espressamente che il SONAME della libreria venga rispettato nel nome del pacchetto (si veda la footnote #45 in merito).

Problemi derivanti dall'aggiornamento

Si veda ora questo messaggio di errore relativo al pacchetto exaile (bug #129816):

Traceback (most recent call last):
  File "exaile.py", line 44, in <module>
    import gtk, gtk.glade, pango, dbus
  File "/var/lib/python-support/python2.5/gtk-2.0/gtk/__init__.py", line 48, in <module>
    from gtk import _gtk
  File "/usr/lib/python2.5/site-packages/cairo/__init__.py", line 1, in <module>
    from _cairo import *
ImportError: /usr/lib/python2.5/site-packages/cairo/_cairo.so: undefined symbol: cairo_clip_extents

In questo caso l'aggiornamento di libcairo, una libreria grafica utilizzata dal desktop manager di GNOME, ha messo in crisi ogni singola applicazione scritta in Python a causa di un duplice errore di pacchettizzazione:

  1. cattivo posizionamento: la libreria è stata posizionata in /usr/local/lib invece che nella canonica /usr/lib.

  2. mancata transizione: la versione della libreria è differente rispetto a quella usata per la compilazione dei pacchetti e non si è provveduto ad una ricompilazione dei software che da essa dipendevano (in questo caso, 180 pacchetti).

Come aggiornare le librerie

Nel caso sia necessario utilizzare una libreria aggiornata rispetto a quella fornita da Ubuntu, è consigliabile la sua installazione manuale nella directory /usr/local/lib, mantenendo intatta la versione corrente per evitare problemi di compatibilità con le altre applicazioni.

Singoli pacchetti

L'aggiornamento di un singolo pacchetto non è causa di forti preoccupazioni dato che gli eventuali problemi sono circoscritti ad una singola applicazione, ma è comunque poco piacevole vedere il proprio software preferito chiudersi inaspettatamente e non riuscire a venirne a capo.

I problemi più comuni legati alla pacchettizzazione di singoli pacchetti sono i seguenti

  1. librerie errate: a volte i pacchetti non vengono compilati usando software sicuri quali pbuilder, bensì compilati direttamente su un sistema al quale possono essere state aggiunte librerie differenti da quelle distribuite ufficialmente da Ubuntu. I sintomi di questo problema sono errori quali undefined symbol in fase di avvio o crash dell'applicazione durante il suo utilizzo. I motivi di ciò sono spiegati nella sezione precedente.

  2. cattivo posizionamento: un pacchetto deve rispettare la posizione canonica dei file, definito dal Filesystem Hierarchy Standard, in caso contrario potrebbero venir meno alcune funzionalità o insorgere problemi di varia natura.

I numeri di versione dei pacchetti

Un problema ampiamente diffuso è la distribuzione di pacchetti con numeri di versione che possono confliggere con quelli distribuiti da Ubuntu. Si supponga che il pacchetto foo_0.1-0ubuntu1 sia ufficialmente distribuito e la versione 0.2-0ubuntu1 venga resa disponibile in un repository di terze parti. nel caso in cui Ubuntu decidesse di distribuire la nuova versione, si verrebbe ad utilizzare lo stesso numero di versione per due pacchetti differenti. Per ovviare a questo problema, la soluzione migliore è usare il simbolo della tilde (~) nella versione, in modo che la versione del pacchetto diventi 0.2-0ubuntu1~mypackage1.

Analisi di un caso limite

Oltre al numero di versione, per effettuare l'aggiornamento si tiene conto anche del timestamp, il quale rappresenta la data di creazione del pacchetto espresso in numero di secondi trascorsi dalla Unix Epoch (1 gennaio 1970). Si supponga che il pacchetto foo_0.1-0ubuntu1, che dipende da libc6, sia appena stato inserito nella versione di sviluppo con timestamp 1000 (semplificazione) e che pochi giorni dopo ne venga realizzato un backport non ufficiale con la stessa versione e timestamp 1100. Durante l'aggiornamento di Ubuntu alla versione successiva, il pacchetto foo non viene considerato siccome ha la medesima numerazione e il timestamp è maggiore. Eseguendo l'applicazione, è molto facile imbattersi in crash inspiegabili dato che è stato compilato usando la toolchain della precedente versione stabile.

Note sull'aggiornamento di release

Come ultimo accorgimento, è consigliabile rimuovere i repository di terze parti e i pacchetti da essi forniti durante un aggiornamento di distribuzione (per esempio, da Ubuntu 10.04 a Ubuntu 10.10). Per fare ciò, è sufficiente agire sul file /etc/apt/sources.list rimuovendo le righe non relative a repository ufficiali di Ubuntu o usando il seguente comando:

sudo sed -i '/archive.ubuntu.com/!d' /etc/apt/sources.list

Una volta effettuata questa operazione e ricaricato l'elenco dei pacchetti (con il comando sudo apt-get update), è possibile rimuovere i pacchetti non ufficiali con un qualsiasi gestore di pacchetti.
Synaptic elenca tali pacchetti sotto la categoria Installato (locale o obsoleto).
Ubuntu Software Center elenca tali pacchetti sotto la categoria Installato → Sconosciuto.


CategoryAmministrazione