Discussione:Lista Hardware: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
mNessun oggetto della modifica
Nessun oggetto della modifica
Riga 1: Riga 1:
{{stub}}
== Introduzione ==
Pbuilder � uno strumento che permette di creare un ambiente pulito per la compilazione e il test di pacchetti Debian. Inoltre pu� essere usato anche per effettuare i backport, compilazioni particolari e tutto quello che pu� richiedere l'uso di un ambiente pulito e controllato.
Le patch ''Con Kolivas'' (<tt>-ck</tt>) per il [[kernel]] di Linux sono una serie di patch che incrementano notevolmente le prestazioni desktop implementando uno scheduler innovativo (''staircase''), ottimizzando l'uso dello swap (''swap-prefetching'') e del sotto-sistema disco, e aggiungendo dei nuovi livelli di priorit� al di fuori di quelli tradizionalmente impostabili con <code>nice</code>.


= Installazione =
Con queste patch si ottiene un sistema desktop estremamente responsivo ed ottimizzato per l'uso interattivo.
Pbuilder �, ovviamente, contenuto in Debian:
<pre>
# apt-get install pbuilder
</pre>


= Configurazione e Opzioni =
Se vi siete chiesti come mai Gentoo o Archlinux sono cos� veloci su desktop la risposta sta principalmente nell'inclusione delle patch <tt>-ck</tt> nei loro kernel di default.
Normalmente non sono necessarie configurazioni particolari, osserviamo, perci�, le opzioni pi� importanti:


== pbuilder ==
== Descrizione della patch ==
; --basetgz [base.tgz] : permette di indicare una locazione, per il [[tarball]] dell'ambiente da gestire, diverso da quello di default
; --buildplace [location of build] : permette di specificare un directory, diversa da quella di default, dove ricreare l'ambiente ed eseguire le compilazioni
; --mirror [mirror location] : permette di specificare un [[mirror]] Debian diverso da quello predefinito
; --othermirror [other mirror location in apt deb-line format, delimited with | signs] : permette di aggiungere altri mirror (o repository)
; --http-proxy [proxy] : se � presente un proxy http nella rete, � possibile gestirne l'accesso (nella forma http://username:password@server)
; --distribution [distribution(potato|woody|sarge|sid|etch|experimental)] : imposta la distribuzione
; --buildresult [location-to-copy-build-result] : permette di specificare una directory diversa in cui posizionare i pacchetti creati
; --aptcache [location of retrieved package files] : permette di specificare una directory in cui immagazzinare i pacchetti debian scaricati (e usati) per soddisfare le dipendenze per la compilazione
; --configfile [configuration file to load] : specifica un file di configurazione alternativo
; --debemail [mail address] : imposta l'indirizzo email
; --debbuildopts [dpkg-buildpackage options] : permette di impostare delle opzioni aggiuntive per il comando ''dpkg-buildpackage'', che si occupa della creazione di un pacchetto Debian a partire dai sorgenti
; --logfile [filename to output log] : specifica un file di log, utile per analizzare con calma i risultati delle compilazioni
; --binary-arch : permette di impostare l'architettura da usare per la creazione dell'ambiente (utile nel caso di supporto per pi� architetture (macchina a 64 bit))
; --save-after-login/--save-after-exec : permette di salvare lo stato della macchina al termine di una sessione interattiva, ricreando il tarball a partire dall'ambiente modificato (usare con attenzione)


== pdebuild ==
=== Staircase Scheduler ===
; --use-pdebuild-internal :
; --auto-debsign : impone la firma automatica al termine della compilazione del pacchetto
; --debsign-k [keyid] : imposta la chiave con cui eseguire la firma del pacchetto


== Azioni ==
Le patch <tt>-ck</tt> includono l'innovativo ''staircase scheduler''. Questo � uno schedule con una logica e una implementazione pi� semplice di quello usato attualmente nel kernel Linux (''ingo scheduler'') che si presta ottimamente all'uso interattivo, senza penalizzare le prestazioni server. Attualmente � in discussione la possibile sostituzione dello scheduler di Linux con lo staircase.
; create : creazione di un nuovo ambiente
; update : aggiornametno di un ambiene esistente
; build : compilazione
; clean : pulizia di un ambiente
; login : login all'interno di un ambiente
; execute : esecuzione di un comando all'interno di un ambiente
; dumpconfig : mostra a video la configurazione dell'ambiente specificato, utile per le operazioni di debug


Le uniche perplessit sembrano essere sul fatto se lo ''staircase scheduler'' abbia prestazioni uguali allo scheduler attuale su sistemi multiprocessori (sui quali lo scheduler attuale altamente ottimizzato).


= Utilizzo =
=== Swap prefetching ===
== Creazione Ambiente ==
Altra patch inclusa � la cos� detta ''swap prefetching''. In pratica questa patch ottimizza l'uso dello swap precaricando delle pagine non appena della ram risulta disponibile (non quando le pagine sono richieste come sul [[kernel vanilla]]), e questo velocizza notevolmente il passaggio tra le grosse applicazioni se ad esempio se ne chiude una. Inoltre vengono tenute in swap anche pagine caricate in ram in modo da rendere immediato un successivo ''swap-out''.
In questo esempio creeremo un ambiente per la distribuzione sid, con i repository Debian '''main''', '''contrib''' e '''non-free'''.


<pre>
Con questa patch l'utilizzo apparente dello swap sar� maggiore ma in realt� questo � dovuto alle ottimizzazioni fatte per incrementare di prestazioni.
# pbuilder create --basetgz /home/maxer/pbuilder/sid.tgz --mirror http://debian.fastweb.it/debian \
    --othermirror http://debian.fastweb.it/debian contrib non-free --distribution sid \
    --debemail maxer@knio.it --binary-arch i386
</pre>


Analizzando il comando osserviamo che:
=== Nuove priorit�: SCHED_ISO, SCHED_IDLE ===
* con '''--basetgz''' impostiamo un percorso diverso per salvare il [[tarball]] che conterr� l'immagine del nostro ambiente;
Normalmente i processi in Linux hanno priorit� SCHED_NORMAL. I processi di questa classe possono avere un [[nice]] da 19 a -20 che indica la loro priorit� all'interno della classe SCHED_NORMAL. Su Linux sono presenti altre due classi di priorit�:
* con '''--mirror''' specifichiamo un mirror italiano, mentre con '''--othermirror''' aggiungiamo anche ''non-free'' e ''contrib'' (allo stesso modo potremmo aggiungere altri repository...);
* con '''--distribution''' impostiamo la distribuzione di cui vogliamo creare l'ambiente;
* con '''--debemail''' impostiamo la nostra email;
* con '''--bynary-arch''' impostiamo l'architettura dei nostri binari (utile nei sistemi a 64 bit, in cui � possibile emulare l'architettura a 32 bit ;-).


Pbuilder scaricher� dalla rete tutto il materiale necessario, e creer� l'immagine (potrebbe volerci molto tempo.. quindi � consigliata una bella tazzona di caff�)!
; SCHED_NORMAL: questa �, se non diversamente specificato, priorit� dei processi in Linux. I processi di questa classe possono avere un [[nice]] da 99 (''minima'') a -20 (''massima'') che indica la loro priorit� all'interno della classe SCHED_NORMAL


== Aggiornamento Ambiente ==
; SCHED_BATCH : questa priorit� viene usata per processi non interattivi (batch). I processi di questa classe avranno priorit� inferiore a qualsiasi processo SCHED_NORMAL.
L'aggiornamento di un ambiente � utile per le release diversa da Stable, nelle quali sono spesso presenti degli aggiornamenti, che potrebbero portare ad una modifica delle dipendenze (si pensi, ad esempio, alla migrazione da xfree ad xorg).


Per aggiornare i pacchetti ed il database dei repository, � sufficiente un
; SCHED_FIFO: usata per processi realtime. Un processo SCHED_FIFO avr� priorit� superiore ad ogni altro processo (anche SCHED_NORMAL con nice -20). Normalmente processi con tali privilegi possono essere lanciati solo da root a meno di non usare [[Low-latency_2.6_kernel_per_applicazioni_audio_realtime#Modalit.C3.A0_realtime_e_realtime_scheduling|particolari tecniche]] per permettere anche a normali utenti di eseguire applicazioni realtime. I processi all'interno di questa classe possono avere una priorit� da 0 (''minima'') a 99 (''massima'').
<pre> # pbuider update --basetgz /home/maxer/pbuilder/sid.tgz</pre>


== Compilazione di pacchetti ==
Le patch <tt>-ck</tt> introducono due ulteriori livelli:
La compilazione pu� avvenire in due modi:
* '''Da un pacchetto di sorgenti''', tramite pbuilder
* '''Dalla directory che contiene i sorgenti''' tramite pdebuild


=== Da un pacchetto di sorgenti ===
; SCHED_ISO : questa � la priorit� chiamata ''soft realtime''. Infatti i processi di questa classe avranno priorit� superiore ai processi SCHED_NORMAL ma non sono necessari i privilegi di root per eseguire programmi con questa priorit�. Potremmo impostare ad esempio il nostro player audio preferito su SCHED_ISO, e non importa quanto sia carico il sistema non avremo mai salti nell'audio.
Questa procedura funziona se si dispone di un pacchetto Debian in formato ''sorgente''... la procedura � usabile, ad esempio, per ricompilare un pacchetto presente in testing o unstable per una distribuzione stable (tecnica chiamata [[backport]]).


<pre> # pbuild build --basetgz /home/maxer/pbuilder/sid.tgz file_0.0-1.dsc </pre>
; SCHED_IDLE: questa classe di processi viene eseguita solo quando il processore � in IDLE. Potremo lanciare compilazioni di kernel, aggiornamenti di sistema, pesanti cron jobs usando questa priorit� e non noteremo il bench� minimo degrado delle prestazioni durante il nostro utilizzo interattivo.


Questo comando avvier� la compilazione, esattamente secondo le seguenti fasi:
Quando lanciamo un processo in Linux questo sar� automaticamente SCHED_NORMAL. Per lanciare processi con altre classi di priorit� bisogna usare gli <tt>schedtool</tt>. E' presente il seguente repository per debian:
# creazione dell'ambiente a partire dal tarball indicato
# risoluzione delle dipendenze per la compilazione
# compilazione
# rimozione ambiente creato (definito ''sporco'')
# eventuale firma GnuPG


=== Dalla Directory dei sorgenti ===
deb http://users.tpg.com.au/sigm/debian sid main
Questa procedura, a differenza di quella illustrata precedentemente, � molto pi� usata (almeno nel mio caso) in quanto pu� essere applicata direttamente alla directory dei sorgenti (si sta sempre parlando di pacchetti Debian, quindi i sorgenti devono contenere la directory ''debian/'', che gestisce la creazione dei pacchetti.


Una volta posizionati nella directori contenente i sorgenti, sufficiente eseguire questo comando:
''(indicato per <tt>sid</tt> ma va benissimo anche per <tt>etch</tt>)''
<pre> # pdebuild build --basetgz /home/maxer/pbuilder/sid.tgz</pre>


In questo caso, invece, la procedura seguita da pbuilder sar� leggermente diversa:
Ecco alcuni esempi:
# esecuzione ''debian/rules clean'' all'interno della directory dei sorgenti
# creazione dell'ambiente a partire dal tarball indicato
# risoluzione delle dipendenze per la compilazione
# compilazione
# rimozione ambiente creato (definito ''sporco'')
# eventuale firma GnuPG


==Firma GnuPG==
schedtool -D -e apt-get dist-upgrade # aggiornare in modalit� SCHED_IDLE
Pbuilder permette anche la firma con chiave [[GnuPG]], molto utile in quanto evita l'utilizzo di ''deb-sign'', automatizzando il tutto!
L'unico problema (se cos� si pu� definire) � la necessit� di esportare la propria chiave privata ed importarla nel [[keyring]] dell'utente root.


==File di Configurazione==
schedtool -I -e xmms                # xmms in modalit� SCHED_ISO
Una pratica diffusa e molto comoda per semplificare l'utilizzo di pbuider sono i file di configurazione: essi permettono, infatti, di specificare direttamente al loro interno i parametri (oltre ad offrirne molti di pi�).


Un altro vantaggio, inoltre, consiste nel poter specificare altre distribuzioni (come ubuntu, knoppix, ...) che altrimenti non sarebbero supportate dal pbuilder dispnibile in Debian.
schedtool -I $$                      # trasforma la shell corrente in SCHED_ISO


I link seguenti portano a dei file di configurazione ad hoc per le distribuzioni indicate:
Per ulteriori informazioni rimando alla semplice e chiara pagina: <tt>man schedtool</tt>
* [[Pbuilder: Breezy.conf]]
* [[Pbuilder: Dapper.conf]]


=Varie=
== Installazione ==
==Semplifichiamo i comandi con alias==
I comandi da impartire sono spesso complessi e lunghi... in questo caso ci viene in aiuta ''alias'', che permette di creare un nuovo ''comando'', alias di uno pi� complesso.


Per fare questo, � sufficiente inserire nel file ''/root/.bashrc'' delle righe simili alle seguenti:
Le patch <tt>-ck</tt> possono essere scaricate da http://www.kernel.org, al seguente indirizzo:
<pre>
# comandi per la compilazione
alias pdebuild-sarge="pdebuild --auto-debsign --debsign-k 34337C08 --buildresult /var/cache/pbuilder/result/stable -- --basetgz /store3/sarge.tgz \
    --mirror http://debian.fastweb.it/debian"
alias pdebuild-etch="pdebuild --auto-debsign --debsign-k 34337C08 --buildresult /var/cache/pbuilder/result/testing -- --basetgz /store3/etch.tgz \
    --mirror http://debian.fastweb.it/debian"
alias pdebuild-sid="pdebuild --auto-debsign --debsign-k 34337C08 --buildresult /var/cache/pbuilder/result/unstable -- --basetgz /store3/sid.tgz \
    --mirror http://debian.fastweb.it/debian"
alias pdebuild-breezy="pdebuild --auto-debsign --debsign-k 34337C08 --buildresult /var/cache/pbuilder/result/breezy -- --basetgz /store3/breezy.tgz \
    --configfile /root/pbuilder-breezy.conf"


# automatizziamo al massimo
* http://www.kernel.org/pub/linux/kernel/people/ck/patches/2.6/
alias pdebuild-all="pdebuild-sarge; pdebuild-etch; pdebuild-sid; pdebuild-breezy"


# aggiornamento
e si applicano al primo kernel vanilla stabile di ogni serie. Ad esempio l'ultimo kernel stabile � attualmente il 2.6.16.4 ma le patch <tt>-ck</tt> si applicano al kernel 2.6.16 in quanto includono anche le patch inserite dal 2.6.16 al 2.16.4.  
alias pbuilder-update-sid="pbuilder update --basetgz /store3/sid.tgz --mirror http://debian.fastweb.it/debian"
alias pbuilder-update-etch="pbuilder update --basetgz /store3/etch.tgz --mirror http://debian.fastweb.it/debian"
alias pbuilder-update-sarge="pbuilder update --basetgz /store3/sarge.tgz --mirror http://debian.fastweb.it/debian"
alias pbuilder-update-breezy="pbuilder update --basetgz /store3/breezy.tgz --configfile /root/pbuilder-breezy.conf"


# automatizziamo al massimo
Attualmente l'ultimo patch set <tt>-ck</tt> � il [http://www.kernel.org/pub/linux/kernel/people/ck/patches/2.6/2.6.16/2.6.16-ck5/ 2.6.16-ck5], ed il file da scaricare e porre in <tt>/usr/src/</tt> � il seguente:
alias pbuilder-update-all="pbuilder-update-sarge && pbuilder-update-etch && pbuilder-update-sid && pbuilder-update-breezy"
 
</pre>
* [http://www.kernel.org/pub/linux/kernel/people/ck/patches/2.6/2.6.16/2.6.16-ck5/patch-2.6.16-cks5.bz2 patch-2.6.16-cks5.bz2]
I comandi elencati sono, per l'esattezza, quelli che uso io per creare i pacchetti per qualsiasi release Debian ed Ubuntu.
 
[[Categoria:Apt-Dev]]
''Nel seguito si user�, come esempio, il kernel 2.6.16 e le patch <tt>-ck5</tt> per tale kernel.''
 
Una volta scompattati i sorgenti del kernel vanilla in <tt>/usr/src/</tt> si possono patchare con:
 
$ cd /usr/src/linux-2.6.16/
$ bzcat ../patch-2.6.16-ck5.bz2 | patch -p1
 
Per una questione di ordine conviene rinominare la directory dei sorgenti in modo da rispecchiare la patch usata:
$ cd /usr/src
$ mv linux-2.6.16 linux-2.6.16-ck5
 
E' consigliato usare un file di configurazione per il kernel vanilla e dare oldconfig:
 
$ cd linux-2.6.16-ck5
$ cp /boot/config-2.6.16-vanilla .
$ make oldconfig
 
A meno che non sappiate perfettamente cosa state facendo lasciate tutte le risposte di default alle domande fatte dell'oldconfig.
 
A questo punto � possibile compilare il kernel, ovviamente [[Debian Kernel Howto|alla debian-way]]. Se abbiamo gi� in esecuzione un kernel <tt>-ck</tt> possiamo lanciare la compilazione in modalit� SCHED_IDLE:
 
$ schedtool -D -e time fakeroot make-kpkg --append-to-version -desktop \
  --revision 0.1 kernel_image
 
In questo modo non ci accorgeremo nemmeno della compilazione durante il normale utilizzo interattivo del computer, infatti la compilazione avverr� '''solo''' quando la cpu sar� in idle. Il tempo di compilazione aumenta in maniera impercettibile. Verr� anche stampata la durata della compilazione grazie al comando <code>time</code>.
Se non abbiamo un kernel <tt>-ck</tt>, ma un [[kernel]] abbastanza recente (penso dal 2.6.15 in su, ma non sono sicuro) potremo usare la modalit� SCHED_BATCH, cambiando semplicemente l'opzione <tt>-D</tt> con <tt>-B</tt>. In questo modo la compilazione avr� priorit� minore di tutti i processi SCHED_NORMAL. Durante la compilazione il sistema sar� abbastanza responsivo anche se non come nel caso precedente.
 
Ultima possibilit�, nel caso abbiate un kernel vecchio o non abbiate installato gli <tt>schedtool</tt> � quella di lanciare la compilazione con nice 19 (la pi� bassa priorit� di un processo SCHED_NORMAL):
 
$ nice -n 19 time fakeroot make-kpkg --append-to-version -desktop \
  --revision 0.1 kernel_image
 
Ovviamente non � necessario compilare ''a bassa priorit�'', ma i casi precedenti sono stati riportati come esempio pratico di utilizzo degli <tt>schedtool</tt> e delle funzionalit� delle patch <tt>-ck</tt>.
 
Per saperne di pi� sulla compilazione del kernel e la ''debian way'': [[Debian Kernel Howto]].
 
== Links ==
'''''Con Kolivas''''':
* [http://members.optusnet.com.au/ckolivas/kernel/ Homepage delle patch Con Kolivas]
* [http://ck.kolivas.org/faqs/walkthrough.txt Quick walthrough on manually patching to -ck for beginners]
* [http://ck.kolivas.org/faqs/audio_hints Con Kolivas Audio Hints]
 
'''''Kernel''''':
* [[Debian Kernel Howto]]
* [[Esempio configurazione kernel]]
* [[Low-latency 2.6 kernel per applicazioni audio realtime]]
 
----
: [[Utente:TheNoise|~ The Noise]] 03:26, 14 Apr 2006 (EDT)
 
[[Categoria:Kernel]][[Categoria:Desktop]]