Old:APT uso avanzato: mixare releases diverse: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
Nessun oggetto della modifica
m (spaziatura/box iniziale)
 
(31 versioni intermedie di 11 utenti non mostrate)
Riga 1: Riga 1:
==Introduzione==
{{Old|Leggere la guida sul [[Repository & pinning|pinning]].}}
__TOC__
== Introduzione ==


ACPI ('''Advanced Configuration and Power Interface''') � uno standard industriale aperto che definisce l'interfaccia tra S.O. e BIOS per l'amministrazione e la configurazione delle risorse di un PC. ACPI prevede che le informazioni a basso livello sul sistema (batteria, luminosit� LCD, pulsanti Fn, ecc.) siano contenute nella DSTD ('''Differentiated System Description Table''').  
Spesso abbiamo la necessità di installare la nuova versione di un pacchetto di cui proprio non possiamo fare a meno, che però non è disponibile per il rilascio di Debian che abbiamo installato.


Il problema principale del supporto ad ACPI in linux risiede nella nella presenza di errori (ma anche di controlli espliciti su alcune caratteristiche peculiari del S.O. soprastante) nella tabella DSDT: purtroppo, molti fornitori di hardware non sono in grado, o non vogliono fornire tabelle DSDT completamente funzionali secondo gli standard ACPI.
Il caso più frequente è probabilmente quello di un'installazione di Testing con la necessità di installare anche pacchetti presenti solo in Unstable o in Experimental, oppure di voler usare un repository con pacchetti particolari, ma compilati per una release di Debian diversa dalla nostra.


Per questo motivo, per utilizzare appieno le possibilit� offerte da alcuni PC, soprattutto laptop, � necessario correggere la DSDT e istruire il kernel affinch� nel processo di boot carichi la tabella fornita da noi invece di quella fornita dal BIOS.
APT è nostro fido alleato anche in questi frangenti, permettendoci di utilizzare fonti per pacchetti di release diverse (e soddisfarne le dipendenze) senza costringerci ad un upgrade dell'intera distribuzione e senza dover impazzire per risolvere conflitti e inconsistenze. Questa caratteristica è definita anche '''apt-pinning''', dal ''pin'' che si imposta nel file <code>/etc/apt/preferences</code>.


==Aggiornamento del BIOS==
In questo how-to mostrerò come utilizzare pacchetti Debian provenienti da Testing, Unstable, Experimental e Marillat (deb-multimedia), ma le istruzioni sono facilmente riportabili anche ad altre situazioni (unstable + experimental, stable + testing, stable + unstable, stable + testing + unstable, ecc...).
Per cominciare � indispensabile aggiornare il BIOS con l�ultima versione disponibile, sperando che la nuova versione contenga una tabella DSDT con meno errori della precedente :P.


==Installazione nel kernel del supporto ACPI==
== Impostare i repository ==
Per poter utilizzare ACPI � necessario disporre di un kernel in cui sia stato abilitato il supporto ACPI. Praticamente tutte le distribuzioni forniscono kernel precompilati con il supporto ACPI attivato. Nel caso, per�, vi trovaste a dover (o voler) compilare autonomamente un kernel con il supporto ACPI, le voci necessarie sono le seguenti:


<pre>ACPI (Advanced Configuration and Power Interface) Support --->
Assicuriamoci di essere l'utente root e procediamo.
    ACPI Support --->
        <*> AC Adapter
        <*> Battery
        <*> Button
        <*> Processor</pre>


==Strumenti per lavorare con le DSDT==
Per prima cosa editiamo il file <code>/etc/apt/sources.list</code> ed inseriamo gli archivi dei pacchetti Debian che utilizzeremo:
Per poter leggere e compilare una DSDT � necessario il compilatore ASL di Intel, che in debian esiste gi� precompilato a partire da etch (attuale testing), altrimenti � liberamente disponibile per il download all'indirizzo:
<pre>
<pre>http://developer.intel.com/technology/iapc/acpi/downloads.htm</pre>
### Debian Ufficiale -- Testing
deb http://ftp.it.debian.org/debian/ testing main contrib non-free


Per utilizzare la DSDT corretta sono disponibili due metodi: il primo prevede l'applicazione di una [ftp://ftp.kernel.org/pub/linux/kernel/people/lenb/acpi/patches/release/ patch per il kernel] e l'inserimento della nuova DSDT direttamente nel kernel, che quindi  sar� da ricompilare ogni volta che si fanno cambiamenti alla DSDT.
### Debian Ufficiale -- Testing Sicurezza
deb http://security.debian.org/ testing/updates main contrib non-free


Il secondo inserisce la nuova DSDT all'interno dell'initrd, e quindi non necessita la ricompilazione del kernel, a patto che nel vostro kernel sia stata inclusa una [http://gaugusch.at/kernel.shtml patch apposita]. Al momento la patch menzionata � inclusa nei kernel delle maggiori distribuzioni (sicuramente in Debian, Ubuntu, Suse, e Mandriva).  
### Debian Ufficiale -- Sid
deb http://ftp.it.debian.org/debian/ unstable main contrib non-free


===Installare il compilatore ASL===
###  Debian Ufficiale -- Experimental
Uno dei motivi per cui le DSDT sono spesso difettose � che vengono compilate con il compilatore fornito da Microsoft, invece che con quello fornito da Intel. Curiosamente i sistemi Microsoft riescono ad evitare gli errori commessi dal compilatore della stessa societ�, mentre, come si pu� immaginare, la stessa cosa non succede per Linux.
deb http://ftp.it.debian.org/debian/ experimental main contrib non-free


Per installare il compilatore Intel � sufficiente avere nel <tt>sources.list</tt> un repository per etch, e impartire, da root, il comando
### Multimedia -- Marillat
deb http://www.deb-multimedia.org testing main non-free
deb http://www.deb-multimedia.org sid main non-free
</pre>
In alternativa, invece di editare il file <code>/etc/apt/sources.list</code>, è possibile aggiungere nuovi files nella directory <code>/etc/apt/sources.list.d/</code>: dal manuale <code>man sources.list</code>
<pre>
<pre>
# aptitude install iasl
      La  directory /etc/apt/sources.list.d fornisce un metodo per aggiungere
      voci di sources.list in file separati che terminano con .list. Il
      formato è il medesimo del file sources.list regolare.
</pre>
</pre>
Fare attenzione al nome dei file: deve terminare con '''.list'''.


Se invece avete scaricato i sorgenti, per avere il compilatore ASL funzionante � necessario compilarlo:
== Configurare apt ==
<pre>$ tar -zxvf acpica-unix-20050624.tar.gz
$ cd acpica-unix-20050624/compiler
$ make</pre>


===Ottenere una DSDT===
A questo punto dobbiamo preparare due file normalmente non presenti sulla nostra debianbox: si tratta dei file <code>/etc/apt/preferences</code> e <code>/etc/apt/apt.conf</code>.
� possibile ottenere la DSDT attualmente installata per poi correggere gli eventuali errori e problemi, copiandola da un file reso appositamente disponibile dal filesystem virtuale /proc:
Questi due file istruiranno APT su come gestire le dipendenze dei pacchetti, informandolo su come comportarsi in caso di conflitti e altri problemi.
<pre>$ cat /proc/acpi/dsdt > dsdt.dat</pre>


Ci� creer� un file '''dsdt.dat''' che contiene la DSDT compilata.  
Anche in questo caso, come per <code>/etc/apt/sources.list</code>, è possibile creare dei files nelle directory <code>/etc/apt/preferences.d/</code> e <code>/etc/apt/apt.conf.d/</code>, anziché editare <code>/etc/apt/preferences</code> e <code>/etc/apt/apt.conf</code>.
Per poterne leggere il contenuto � necessario decompilarla con il compilatore ASL appena installato:
Vedere il manuale di <code>apt_preferences</code> e <code>apt.conf</code> per approfondimenti.
<pre>$ iasl -d dsdt.dat</pre>


Verr generato un file di testo denominato '''dsdt.dsl''', che contiene la DSDT. Questo file pu essere modificato con un normale editor di testi e modificato a seconda delle esigenze e dei problemi riscontrati.


Per vedere quali sono i problemi spesso � sufficiente ricompilare il file ottenuto: il compilatore ASL fornir� una serie di warning sulle ottimizzazioni che � possibile fare (e le far� automaticamente) ed, eventualmente, segnaler� degli errori, la cui soluzione pu� essere, ad esempio, ricercata su internet.
=== Il file <code>preferences</code> ===


Ad ogni modo una lettura del codice della DSDT pu� essere istruttiva. Il linguaggio � abbastanza simile al C e con qualche minima conoscenza � possibile comprendere i principali costrutti logici.
Creiamo il file <code>/etc/apt/preferences</code>:
<pre>
# touch /etc/apt/preferences
</pre>
editiamolo col nostro editor di fiducia e inseriamo queste direttive:
<pre>
Package: *
Pin: release o=Unofficial Multimedia Packages
Pin-Priority: 950


Nel codice di alcune DSDT � stato trovato un controllo (if .. then) sulla lunghezza del nome del S.O. soprastante (17 lettere, proprio come "Microsoft Windows") come requisito per l'attivazione di alcune funzioni dell'ACPI.
Package: *
Pin: release a=testing
Pin-Priority: 850


Una volta corretti gli errori ricompilare il file '''dsdt.dsl'''.
Package: *
       
Pin: release a=unstable
<pre>$ iasl -tc dsdt.dsl</pre>
Pin-Priority: 800


Verranno generati due file dalla compilazione:
Package: *
*: dsdt.hex
Pin: release a=experimental
Pin-Priority: 750
</pre>


*: DSDT.aml
Il pinning può essere orientato ad un archivio, un'origine, la versione di un pacchetto, un componente, ecc...


{{ Warningbox | � possibile scaricare una custom DSDT gi� pronta e corretta da internet per molti portatili in commercio: http://acpi.sourceforge.net/dsdt/tables }}
Con '''"o="''' si specifica l'origine (la distribuzione) del pacchetto, con '''"a="''' l'archivio (stable, testing, sid, jessie, ecc...).


==Aggiornare il Kernel==
Questo dato è reperibile in modo inequivocabile attraverso APT, andando a sbirciare all'interno del file "InRelease" che è contenuto in tutti i repository ufficiali. Per archivi personali e/o non ufficiali, invece, non è sempre e necessariamente presente (purtroppo).
Come abbiamo gi� detto, � possibile inserire la tabella DSDT generata in modo statico nel kernel, oppure renderla disponibili tramite initrd.


*:Il primo metodo prevede di includere la DSDT nel kernel. Questo comporta la ricompilazione del kernel al termine della procedura. Se usate questo metodo avete bisogno del file '''dsdt.hex'''.
Vediamo alcuni esempi:
 
*:Il secondo metodo prevede di passare la DSDT al kernel durante il caricamento nella fase di boot tramite initrd. Se usate questo metodo avete bisogno del file '''DSDT.aml'''.


<pre>
$ cd /var/lib/apt/lists


Il metodo initrd � probabilmente preferibile, particolarmente se dovete fare diversi cambiamenti alla vostra DSDT, perch� non richiede la ricompilazione del kernel per ogni nuova DSDT generata.
$ cat deb-multimedia.org_dists_unstable_InRelease
Origin: Unofficial Multimedia Packages
Label: Unofficial Multimedia Packages
Suite: unstable
Version: None
Codename: sid
Date: Thu, 09 May 2013 21:26:40 UTC
Architectures: amd64 armel armhf i386 ia64 mips mipsel powerpc sparc kfreebsd-i386 kfreebsd-amd64
Components: main non-free
Description: This repository is mostly non-free


===Installazione Metodo statico===
$ cat liquorix.net_debian_dists_sid_InRelease
� necessario applicare una patch al kernel per far s� che sia in grado di leggere la nuova DSDT.
Origin: liquorix
Per fare questo ci spostiamo nella directory dove sono presenti i sorgenti:
Label: cool stuff
<pre>
Suite: unstable
$ cd /usr/src/linux-2.6.8
Codename: sid
$ patch -p1 < /percorso_dove_avete_salvato_la_patch
Date: Fri, 03 May 2013 00:32:30 UTC
Architectures: i386 amd64
Components: main future past
Description: liquorix repository
</pre>
</pre>


Se non appaiono errori, significa che la patch � stata applicata correttamente.
Dove:
* '''Suite''' = è l'archivio Debian a cui i pacchetti appartengono (ad es.: stable, testing. ecc...);
* '''Components''' = indica il tipo di componente (ad es.: main, contrib, non-free);
* '''Origin''' = specifica il proprietario del repository;
* '''Label''' = identifica il repository: potete inserire descrizioni, ecc...;
* '''Architectures''' = l'architettura dei pacchetti contenuti nel repository (ad es.: i386, sparc, source, ecc...).  


Copiamo il file dsdt.hex, rinominandolo in dsdt_table.h, nella directory dei sorgenti del kernel:
Possiamo vedere che nel file Release è contenuto proprio il dato che stavamo cercando: Origin.
<pre>
$ cp dsdt.hex /usr/src/linux-2.8.6/include/acpi/dsdt_table.h
</pre>


Infine ricompiliamo il kernel. Se non ci sono errori al prossimo avvio del PC il supporto ACPI � caricato correttamente senza alcun problema.
=== Il file <code>apt.conf</code> ===


===Installazione Metodo initrd===
Ora creiamo il file <code>/etc/apt/apt-conf</code>
Se usate un kernel standard Debian non � necessario ricompilare il kernel: � sufficiente posizionare la tabella DSDT nel posto giusto e ricreare l'initrd o l'initramfs.
Per fare questo dovete prima verificare se il vostro kernel usa l'initrd o l'initramfs: i kernel Debian standard usano l'initramfs a partire dalla versione 2.6.14 compresa.


Se usate l'initrd (da root):
<pre>
<pre>
# cp dsdt.asl /etc/mkinitrd/DSDT
# touch /etc/apt/apt.conf
# mkinitrd -o initrd-<versione> <versione>
</pre>
</pre>
in cui <tt><versione</tt> il nome della directory che contiene i moduli, e che trovate in <tt>/lib/modules/</tt>.


Se usate l'initramfs (sempre da root):
editiamolo inserendo quanto segue:
 
<pre>
<pre>
# cp dsdt.asl /etc/mkinitrd/DSDT.asl
APT::Default-Release "testing";
# mkinitrd -o initrd-<versione> <versione>
APT::Cache-Limit 15000000;
Apt::Get::Purge;
APT::Clean-Installed;
APT::Get::Fix-Broken;
APT::Get::Fix-Missing;
APT::Get::Show-Upgraded "true";
</pre>
</pre>
con le stesse avvertenze di prima.
Se il vostro kernel non comprende la patch che gli permette di leggere la DSDT nell'initrd, dovete ricompilarlo. Prima per applicate la patch, spostandovi nella directory dove sono presenti i sorgenti:
<pre>$ cd /usr/src/linux-2.6.8
$ patch -p1 < / percorso_dove_avete_salvato_la_patch</pre>
Al momento in cui si scrive, se usate l'initramfs vi serve anche una seconda patch che trovate allo stesso indirizzo della prima (in futuro verranno probabilmente unificate).


Prima di compilare � necessario assicurarsi che i seguenti moduli (ramdisk and initrd ) siano compilati staticamente nel kernel:
Facciamo l'update del database dei pacchetti:
<pre>
Device Drivers --->
    Block Devices --->
        <*> RAM disk support
        [*] Initial RAM disk (initrd) support
</pre>


Inoltre necessario controllare che lopzione '''Read DSDT from initrd''' sia selezionata nel menu delle opzioni ACPI:
<pre>
<pre>
Power management options (ACPI, APM) --->
# apt-get update
    ACPI (Advanced Configuration and Power Interface) Support --->
        [*] Read DSDT from initrd
</pre>
</pre>


Se queste opzioni non sono abilitate, abilitarle e ricompilare il kernel. Se sono gi� abilitate non � necessario ricompilare il kernel ;-).
D'ora in avanti avremo due possibilità per installare un nuovo pacchetto: il metodo che usiamo di solito e cioè:


Ora il kernel pronto ad accettare la DSDT con initrd.
Se non avete a disposizione i tool mkinitrd e/o mkinitramfs che Debian mette a disposizione necessario modificare l'initrd che avete, ma prima di farlo fortemente consigliato di farne una copia di backup:
<pre>
<pre>
# cp /boot/initrd-kernel-2.6.8.img /boot/initrd-kernel-2.6.8.img.bak
# apt-get install nome_pacchetto
# echo "INITRDDSDT123DSDT123" >> /boot/initrd-kernel-2.6.8.img
# cat DSDT.aml >> /boot/initrd-kernel-2.6.8.img
</pre>
</pre>


Nel caso in cui si stia usando un kernel privo di initrd o initramfs, � ugualmente possibile passare al kernel la nuova tabella DSDT semplicemente specificando come initrd la tabella stessa (il file .aml), tramite il bootloader.
che utilizzerà pacchetti proveniente dalla versione impostata come '''Default-Release''' in '''apt.conf''', oppure il comando


==Debug==
Riavviare e controllare se il supporto ACPI funziona. ;-)
Per leggere in dmesg i messaggi relativi al caricamento della DSDT necessario che nel kernel sia abilitata l'opzione CONFIG_ACPI_DEBUG, cosa che potete controllare con un veloce grep:
<pre>
<pre>
$ grep CONFIG_ACPI_DEBUG /boot/config-2.6.8-ecc.
# apt-get install -t versione_di_debian nome_pacchetto
</pre>
</pre>


Ricordarsi di aggiornare il bootloader!
che provvederà a installare il pacchetto da noi richiesto per la versione specificata (''versione_debian''), risolvendo automaticamente le dipendenze.


==Siti ufficiali dei progetti==
Happy debian!
* http://acpi.sourceforge.net
* http://www.acpi.info/


----
== Pagine correlate ==
Autore: [[Utente:Net deity|Net deity]]
[[Repository & pinning]]


Rivisto e corretto: [[Utente:Tindal|Tindal]] 17:37, Gen 27, 2006 (EST)
{{Autori
|Autore = [[User:Keltik|Keltik]]
|Estesa_da =
:[[User:Nest|Nest]]
|Verificata_da=
:[[Utente:TheNoise|~ The Noise]]
|Numero_revisori = 1
}}

Versione attuale delle 11:37, 25 giu 2016

Emblem-important.png Attenzione. Questa guida è obsoleta. Viene mantenuta sul Wiki solo per motivi di natura storica e didattica.
Leggere la guida sul pinning.


Introduzione

Spesso abbiamo la necessità di installare la nuova versione di un pacchetto di cui proprio non possiamo fare a meno, che però non è disponibile per il rilascio di Debian che abbiamo installato.

Il caso più frequente è probabilmente quello di un'installazione di Testing con la necessità di installare anche pacchetti presenti solo in Unstable o in Experimental, oppure di voler usare un repository con pacchetti particolari, ma compilati per una release di Debian diversa dalla nostra.

APT è nostro fido alleato anche in questi frangenti, permettendoci di utilizzare fonti per pacchetti di release diverse (e soddisfarne le dipendenze) senza costringerci ad un upgrade dell'intera distribuzione e senza dover impazzire per risolvere conflitti e inconsistenze. Questa caratteristica è definita anche apt-pinning, dal pin che si imposta nel file /etc/apt/preferences.

In questo how-to mostrerò come utilizzare pacchetti Debian provenienti da Testing, Unstable, Experimental e Marillat (deb-multimedia), ma le istruzioni sono facilmente riportabili anche ad altre situazioni (unstable + experimental, stable + testing, stable + unstable, stable + testing + unstable, ecc...).

Impostare i repository

Assicuriamoci di essere l'utente root e procediamo.

Per prima cosa editiamo il file /etc/apt/sources.list ed inseriamo gli archivi dei pacchetti Debian che utilizzeremo:

### Debian Ufficiale -- Testing
deb http://ftp.it.debian.org/debian/ testing main contrib non-free

### Debian Ufficiale -- Testing Sicurezza
deb http://security.debian.org/ testing/updates main contrib non-free

### Debian Ufficiale -- Sid
deb http://ftp.it.debian.org/debian/ unstable main contrib non-free

###  Debian Ufficiale -- Experimental
deb http://ftp.it.debian.org/debian/ experimental main contrib non-free

### Multimedia -- Marillat
deb http://www.deb-multimedia.org testing main non-free
deb http://www.deb-multimedia.org sid main non-free

In alternativa, invece di editare il file /etc/apt/sources.list, è possibile aggiungere nuovi files nella directory /etc/apt/sources.list.d/: dal manuale man sources.list

       La  directory /etc/apt/sources.list.d fornisce un metodo per aggiungere
       voci di sources.list in file separati che terminano con .list. Il
       formato è il medesimo del file sources.list regolare.

Fare attenzione al nome dei file: deve terminare con .list.

Configurare apt

A questo punto dobbiamo preparare due file normalmente non presenti sulla nostra debianbox: si tratta dei file /etc/apt/preferences e /etc/apt/apt.conf. Questi due file istruiranno APT su come gestire le dipendenze dei pacchetti, informandolo su come comportarsi in caso di conflitti e altri problemi.

Anche in questo caso, come per /etc/apt/sources.list, è possibile creare dei files nelle directory /etc/apt/preferences.d/ e /etc/apt/apt.conf.d/, anziché editare /etc/apt/preferences e /etc/apt/apt.conf. Vedere il manuale di apt_preferences e apt.conf per approfondimenti.


Il file preferences

Creiamo il file /etc/apt/preferences:

# touch /etc/apt/preferences

editiamolo col nostro editor di fiducia e inseriamo queste direttive:

Package: *
Pin: release o=Unofficial Multimedia Packages
Pin-Priority: 950

Package: *
Pin: release a=testing
Pin-Priority: 850

Package: *
Pin: release a=unstable
Pin-Priority: 800

Package: *
Pin: release a=experimental
Pin-Priority: 750

Il pinning può essere orientato ad un archivio, un'origine, la versione di un pacchetto, un componente, ecc...

Con "o=" si specifica l'origine (la distribuzione) del pacchetto, con "a=" l'archivio (stable, testing, sid, jessie, ecc...).

Questo dato è reperibile in modo inequivocabile attraverso APT, andando a sbirciare all'interno del file "InRelease" che è contenuto in tutti i repository ufficiali. Per archivi personali e/o non ufficiali, invece, non è sempre e necessariamente presente (purtroppo).

Vediamo alcuni esempi:

$ cd /var/lib/apt/lists

$ cat deb-multimedia.org_dists_unstable_InRelease
Origin: Unofficial Multimedia Packages
Label: Unofficial Multimedia Packages
Suite: unstable
Version: None
Codename: sid
Date: Thu, 09 May 2013 21:26:40 UTC
Architectures: amd64 armel armhf i386 ia64 mips mipsel powerpc sparc kfreebsd-i386 kfreebsd-amd64
Components: main non-free
Description: This repository is mostly non-free

$ cat liquorix.net_debian_dists_sid_InRelease
Origin: liquorix
Label: cool stuff
Suite: unstable
Codename: sid
Date: Fri, 03 May 2013 00:32:30 UTC
Architectures: i386 amd64
Components: main future past
Description: liquorix repository

Dove:

  • Suite = è l'archivio Debian a cui i pacchetti appartengono (ad es.: stable, testing. ecc...);
  • Components = indica il tipo di componente (ad es.: main, contrib, non-free);
  • Origin = specifica il proprietario del repository;
  • Label = identifica il repository: potete inserire descrizioni, ecc...;
  • Architectures = l'architettura dei pacchetti contenuti nel repository (ad es.: i386, sparc, source, ecc...).

Possiamo vedere che nel file Release è contenuto proprio il dato che stavamo cercando: Origin.

Il file apt.conf

Ora creiamo il file /etc/apt/apt-conf

# touch /etc/apt/apt.conf

editiamolo inserendo quanto segue:

APT::Default-Release "testing";
APT::Cache-Limit 15000000;
Apt::Get::Purge;
APT::Clean-Installed;
APT::Get::Fix-Broken;
APT::Get::Fix-Missing;
APT::Get::Show-Upgraded "true";

Facciamo l'update del database dei pacchetti:

# apt-get update

D'ora in avanti avremo due possibilità per installare un nuovo pacchetto: il metodo che usiamo di solito e cioè:

# apt-get install nome_pacchetto

che utilizzerà pacchetti proveniente dalla versione impostata come Default-Release in apt.conf, oppure il comando

# apt-get install -t versione_di_debian nome_pacchetto

che provvederà a installare il pacchetto da noi richiesto per la versione specificata (versione_debian), risolvendo automaticamente le dipendenze.

Happy debian!

Pagine correlate

Repository & pinning




Guida scritta da: Keltik Swirl-auth40.png Debianized 40%
Estesa da:
Nest
Verificata da:
~ The Noise

Verificare ed estendere la guida | Cos'è una guida Debianized