Dupload per l'upload dei pacchetti Debian: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
Nessun oggetto della modifica
Nessun oggetto della modifica
Riga 1: Riga 1:
=Introduzione=
=Introduzione=
A causa delle numerose migrazioni gli utenti di testing possono trovarsi davanti a qualche problema relativo alla mancanza di pacchetti nel repository ufficiale Debian...
Quando si usano repository Debian che gestiscono in modo automatizzato i pacchetti, viene richiesto di seguire una ben determinata procedura per l'upload.


Questo dovuto alla politica di gestione di testing, la quale richiede che un pacchetto debba avere le seguenti caratteristiche, prima di entrare in testing:
Questo è dovuto al fatto che è necessaria la presenza di un ''semaforo'' che indichi quando l'upload è avvenuto correttamente ed è stato completato. Sebbene la cosa può essere fatta tranquillamente a mano, esiste un tool molto utile: '''Dupload''' (Debian UPLOAD).
* Sia stato in unstable per almeno 10 giorni (nel caso di priorit� bassa (''low''));
* Non abbia Bug gravi;
* Le dipendenze richieste siano completamente soddisfatte in testing.


=Lo stato di un pacchetto=
=Funzionamento=
� possibile conoscere lo stato di un pacchetto (per l'esattezza di un pacchetto di sorgenti) tramite il sito della [http://qa.debian.org Quality Assurance], nel seguente modo:
Il funzionamento è semplice: il programma si occupa di eseguire l'upload, tramite i protocolli supportati, dei file, con l'accortezza di inviare per ultimo il file ''.changes'', che funge da ''semaforo''.
* ricavare il pacchetto sorgente da cui viene creato il pacchetto binario in questione:
<pre> $ apt-cache show nomepacchetto | grep Source</pre>
* recarsi su http://packages.qa.debian.org ed inserire il nome del pacchetto sorgente
* leggere lo stato del pacchetto!


{{Box|Nota:|� possibile automatizzare la procedura inserendo, nella pagina http://packages.qa.debian.org, il nome del pacchetto binario... il sistema mostrer� il nome del pacchetto di sorgenti relativo ed in 10 secondi reindirizzer� alla pagina relativa al suo stato.}}
=Installazione=
Il pacchetto, ovviamente, è presente in Debian:
<pre>
# apt-get install dupload
</pre>
 
=Configurazione=
La configurazione di dupload è gestibile tramite il file <code>/etc/dupload.conf</code>. Il file in questione può essere suddiviso in 2 sezioni:
 
==Impostazioni globali==
In questa sezione sono definiti dei comportamenti globali, che possono essere definiti anche per i singoli host (nella loro sezione, ovviamente).


=Creare i pacchetti binari per la propria distribuzione=
===hooks===
Premetto che la seguente procedura � utilizzabile prevalentemente per il backport da ''unstable'' a ''testing'', mentre potrebbe dare problemi per il backport da ''testing'' a ''stable''.
<pre>
# -----------------
# Pre-defined hooks
# -----------------
# Check changes file for valid signatures
# Using GPG:
$preupload{'changes'} = '/usr/share/dupload/gpg-check %1';
# or using PGP:
# $preupload{'changes'} = '/usr/share/dupload/pgp-check %1';


==Pacchetti necessari==
# Lintian check of packages
Per eseguire le operazioni illustrare in questa pagina sono necessari i seguenti pacchetti, normalmente utilizzati per lo sviluppo dei pacchetti Debian:
# $preupload{'deb'} = 'lintian -v -i %1';
* dpkg-dev
* devscripts
* fakeroot


==Scaricare i sorgenti==
# Other hooks:
Dalla pagina relativa allo stato del pacchetto � possibile scaricare i sorgenti necessari per questo backport (nel riquadro '''Source files'''). I file sono, per l'esattezza, 3:
# $preupload{'sourcepackage'}
* l'archivio contenente i sorgenti originali, '''.orig.tar.gz'''
# $preupload{'file'}
* l'archivio contenente le patch per creare il pacchetto, '''.patch.gz'''
# $preupload{'package'}
* il file contenente la descrizione del pacchetto, '''.dsc'''
# $postupload{'changes'}
# $postupload{'sourcepackage'}
# $postupload{'file'}
# $postupload{'deb'}
# $postupload{'package'}


Una volta scaricati in una unica directory � necessario estrarli:
# Note: hooks can also be defined in a per-host basis
</pre>
La sintassi è la seguente:
<pre>
<pre>
$ dpkg-source -x nomepacchetto.....dsc
$quando{'a_cosa'} = 'comando';
</pre>
</pre>


==Scaricare le dipendenze==
'''quando''' può assumere due valori:
Prima di procedere alla compilazione � necessario installare i pacchetti ''-dev'' necessari per la compilazione...
* '''preupload''': il comando viene eseguito prima di effettuare l'upload
Anche in questo caso, come sempre del resto, il sistema di gestione dei pacchetti Debian ci viene in aiuto: � infatti necessario un semplice
* '''postupload''': il comando viene eseguito dopo aver effettuato l'upload
 
'''a_cosa''' indica il target dell'azione. L'azione, quindi, viene eseguita quando viene completato l'upload (o prima dell'upload) di:
*'''sourcepackage''' : il pacchetto di sorgenti (quindi i file ''.diff.gz'' e ''orig.tar.gz''). Parametri disponibili: nome del file e versione.
*'''file''' : ogni singolo file (è abbinabile solo a ''$postupload''). Parametro disponibile: nome del file.
*'''changes''' : il file ''.changes''. Parametro disponibile: nome del file.
*'''deb''' : i file ''.deb'', i pacchetti binari. Parametro disponibile: nome del file.
*'''package''' : ogni singolo pacchetto ''.deb'' . Parametri disponibili: nome del file e versione.
 
'''comando''' permette di indicare il comando da eseguire. in base a quanto specificato in '''a_cosa''' è possibile avere a disposizione uno o due parametri ('''%1''' per il primo e '''%2''' per il secondo, se disponibile).
 
===Default Host===
Permette di indicare l'host da utilizzare come predefinito.
<pre>
<pre>
# apt-get build-deps nomepacchetto
# $default_host = "anonymous-ftp-master";
</pre>
</pre>
per installare le dipendenze necessarie alla compilazione.
indica, ad esempio, ''anonymous-ftp-master''.


{{Box|Nota:|il comando potrebbe non risolvere tutte le dipendenze (nel peggiore dei casi potrebbe non trovare informazioni riguardo a queste). In questo caso, quindi, bisogner� installarle a mano. Le dipendenze mancanti verranno mostrate nell'output di ''dpkg-buildpackage'' e dovranno essere installate come viene installato normalmente un pacchetto. Non sar� possibile continuare nel processo di compilazione se non si soddisfano tutte le dipendenze di compilazione.}}
==Definizioni degli host==
La definizione dell'host è semplice ed immediata. Analizziamo un esempio:
<pre>
$cfg{'mentors'} = {
        fqdn    =>'mentors.debian.net',
        method  =>'scpb',
        login  =>'incoming',
        incoming=>'~',
# Change these to the user and domain part of your email address
# and uncomment them
#      visibleuser=>'hugo',
#      visiblename=>'mydomain.tld',
        mailtx  =>'incoming@mentors.debian.net',
        preupload=> {
                deb=>'chmod 0644 %1',
                changes=>'chmod 0644 %1',
                file=>'chmod 0644 %1',
        },
};
</pre>


==Compilare il pacchetto==
la dichiarazione del nome dell'host avviene tramite l'impostazione del nome dell'array '''$cfg{'nome'}'''. Il contenuto di questo array rispetta le seguenti possibili dichiarazioni:
Una volta installate le dipendenze si pu� procedere con la compilazione del pacchetto:
* bisogna entrare nella directory dei sorgenti creata durante l'estrazione dei sorgenti;
* per far partire la compilazione si pu� usare il seguente comando: <pre>$ fakeroot dpkg-buildpackage</pre>


Se tutto procede senza problemi verranno creati, nella directory precedente, i pacchetti binari frutto della compilazione... per installarli � sufficiente il classico
; fqdn : indica il [[FQDN]], ossia il Full Qualify Domain Name. L'url del server a cui connettersi.
<pre> # dpkg -i nomepacchetto.....deb</pre>
; method : permette di specificare il protocollo da utilizzare per effettuare l'upload. Sono disponibili i seguenti:
:*ftp (valore di default)
:*scp
:*rsync
; login : permette di impostare l'username con il quale accedere. Il valore di default è ''anonymous'', usato molto spesso nelle directory di incoming pubbliche.
; incoming : Imposta la directory del server in cui devono essere copiati i file.
; mailto : dove inviare l'annuncio dell'invio di un pacchetto per ''stable''.
; mailtx : come sopra, ma riferito a ''unstable'' ed ''experimental''.
; passive : Attiva la modalità passiva nel trasferimento tramite il protocollo ftp.
; visibleuser : permette di impostare il nome dell'utente che comparirà come mittente nelle email generate dall'upload [default: l'username ricavato tramite la funzione ''getlogin()''].
; visiblename : permette di specificare il dominio che seguirà la ''@'' nell'indirizzo email usato come mittente delle email [Default: il valore ricavato dall'MTA installato sul proprio computer].
; preupload : permette, tramite la definizione di un array (come fanno nell'esempio) di impostare delle azioni specifiche come precedentemente spiegato nella sezione ''hooks''.


=Conclusioni=
=Utilizzo=
Questo rappresenta il metodo pi� semplice per ottenere un pacchetto per testing partendo da un pacchetto sorgente di unstable, anche se non sempre pu� essere applicato (a causa di dipendenze non risolte perch� non presenti in testing (in questo caso � necessario partire dal backporting delle librerie mancanti) o perch� le versioni dei pacchetti in testing non sono abbastanza aggiornate per concludere con successo la compilazione (evento molto raro)).
L'utilizzo è semplicissimo: il programma accetta, come input, i file ''.changes'', seguendo la sintassi:
<pre>
$ dupload [opzioni] <file .changes> [<altri file .changes>]
</pre>
 
Le opzioni più usate sono le seguenti:
; --no : esegue solo un test, mostrando quello che farebbe in modalità normale.
; --nomail : non invia l'annuncio per l'upload che verrà eseguito.
; -t --to nome_del_server : utilizza ''nome_del_server'' come server su cui caricare i file (i server sono definiti nel file di configurazione). È possibile usare l'impostazione '''default_host''' nel file di configurazione per indicare quale server utilizzare se ''--to'' non è indicato.
 
=Dupload e Debarchiver=
Nella guida [[Gestione di un repository con debarchiver]] si accennava al fatto che è possibile usare Dupload per caricare i pacchetti nella directory ''incoming'' del proprio repository.
 
Ecco un esempio funzionante di come creare 3 destinazioni per caricare pacchetti nelle tre sezioni del proprio repository, mediante il protocollo ssh.
==Stable==
<pre>
$cfg{'debarchiver-stable'} = {
        fqdn => "esempio.it",
        incoming => "/var/lib/debarchiver/incoming/stable/",
        login => "utente",
        method => "scp",
};
</pre>
 
==Testing==
<pre>
$cfg{'debarchiver-testing'} = {
        fqdn => "esempio.t",
        incoming => "/var/lib/debarchiver/incoming/testing/",
        login => "utente",
        method => "scp",
};
</pre>
==Unstable==
<pre>
$cfg{'debarchiver-unstable'} = {
        fqdn => "esempio.it",
        incoming => "/var/lib/debarchiver/incoming/unstable/",
        login => "utente",
        method => "scp",
};
</pre>


Nel Backport Howto vedremo, pi� in dettaglio, come eseguire un Backport da ''testing''/''unstable'' verso ''stable''...
=Raccomandazioni=
Nella configurazione di default di Dupload sono presenti tutti gli indirizzi dei server Debian. A meno di sapere cosa fare, non usarli, per i seguenti motivi:
* gli utenti normali non hanno l'autorizzazione ad eseguire l'upload (il pacchetto viene scartato)
* si rallenta il processo di analisi dei nuovi pacchetti
* se proprio si vuole avere un proprio pacchetto in Debian, è d'obbligo visitare [http://www.debian.org/devel/join/newmaint L'angolo del nuovo Manutentore Debian].


[[Categoria:Apt]]
[[Categoria:Repository]]
[[Categoria:Apt-Dev]]

Versione delle 02:47, 10 gen 2010

Introduzione

Quando si usano repository Debian che gestiscono in modo automatizzato i pacchetti, viene richiesto di seguire una ben determinata procedura per l'upload.

Questo è dovuto al fatto che è necessaria la presenza di un semaforo che indichi quando l'upload è avvenuto correttamente ed è stato completato. Sebbene la cosa può essere fatta tranquillamente a mano, esiste un tool molto utile: Dupload (Debian UPLOAD).

Funzionamento

Il funzionamento è semplice: il programma si occupa di eseguire l'upload, tramite i protocolli supportati, dei file, con l'accortezza di inviare per ultimo il file .changes, che funge da semaforo.

Installazione

Il pacchetto, ovviamente, è presente in Debian:

# apt-get install dupload

Configurazione

La configurazione di dupload è gestibile tramite il file /etc/dupload.conf. Il file in questione può essere suddiviso in 2 sezioni:

Impostazioni globali

In questa sezione sono definiti dei comportamenti globali, che possono essere definiti anche per i singoli host (nella loro sezione, ovviamente).

hooks

# -----------------
# Pre-defined hooks
# -----------------
# Check changes file for valid signatures
# Using GPG:
$preupload{'changes'} = '/usr/share/dupload/gpg-check %1';
# or using PGP:
# $preupload{'changes'} = '/usr/share/dupload/pgp-check %1';

# Lintian check of packages
# $preupload{'deb'} = 'lintian -v -i %1';

# Other hooks:
# $preupload{'sourcepackage'}
# $preupload{'file'}
# $preupload{'package'}
# $postupload{'changes'}
# $postupload{'sourcepackage'}
# $postupload{'file'}
# $postupload{'deb'}
# $postupload{'package'}

# Note: hooks can also be defined in a per-host basis

La sintassi è la seguente:

$quando{'a_cosa'} = 'comando';

quando può assumere due valori:

  • preupload: il comando viene eseguito prima di effettuare l'upload
  • postupload: il comando viene eseguito dopo aver effettuato l'upload

a_cosa indica il target dell'azione. L'azione, quindi, viene eseguita quando viene completato l'upload (o prima dell'upload) di:

  • sourcepackage : il pacchetto di sorgenti (quindi i file .diff.gz e orig.tar.gz). Parametri disponibili: nome del file e versione.
  • file : ogni singolo file (è abbinabile solo a $postupload). Parametro disponibile: nome del file.
  • changes : il file .changes. Parametro disponibile: nome del file.
  • deb : i file .deb, i pacchetti binari. Parametro disponibile: nome del file.
  • package : ogni singolo pacchetto .deb . Parametri disponibili: nome del file e versione.

comando permette di indicare il comando da eseguire. in base a quanto specificato in a_cosa è possibile avere a disposizione uno o due parametri (%1 per il primo e %2 per il secondo, se disponibile).

Default Host

Permette di indicare l'host da utilizzare come predefinito.

# $default_host = "anonymous-ftp-master";

indica, ad esempio, anonymous-ftp-master.

Definizioni degli host

La definizione dell'host è semplice ed immediata. Analizziamo un esempio:

$cfg{'mentors'} = {
        fqdn    =>'mentors.debian.net',
        method  =>'scpb',
        login   =>'incoming',
        incoming=>'~',
# Change these to the user and domain part of your email address
# and uncomment them
#       visibleuser=>'hugo',
#       visiblename=>'mydomain.tld',
        mailtx  =>'incoming@mentors.debian.net',
        preupload=> {
                deb=>'chmod 0644 %1',
                changes=>'chmod 0644 %1',
                file=>'chmod 0644 %1',
        },
};

la dichiarazione del nome dell'host avviene tramite l'impostazione del nome dell'array $cfg{'nome'}. Il contenuto di questo array rispetta le seguenti possibili dichiarazioni:

fqdn
indica il FQDN, ossia il Full Qualify Domain Name. L'url del server a cui connettersi.
method
permette di specificare il protocollo da utilizzare per effettuare l'upload. Sono disponibili i seguenti:
  • ftp (valore di default)
  • scp
  • rsync
login
permette di impostare l'username con il quale accedere. Il valore di default è anonymous, usato molto spesso nelle directory di incoming pubbliche.
incoming
Imposta la directory del server in cui devono essere copiati i file.
mailto
dove inviare l'annuncio dell'invio di un pacchetto per stable.
mailtx
come sopra, ma riferito a unstable ed experimental.
passive
Attiva la modalità passiva nel trasferimento tramite il protocollo ftp.
visibleuser
permette di impostare il nome dell'utente che comparirà come mittente nelle email generate dall'upload [default: l'username ricavato tramite la funzione getlogin()].
visiblename
permette di specificare il dominio che seguirà la @ nell'indirizzo email usato come mittente delle email [Default: il valore ricavato dall'MTA installato sul proprio computer].
preupload
permette, tramite la definizione di un array (come fanno nell'esempio) di impostare delle azioni specifiche come precedentemente spiegato nella sezione hooks.

Utilizzo

L'utilizzo è semplicissimo: il programma accetta, come input, i file .changes, seguendo la sintassi:

$ dupload [opzioni] <file .changes> [<altri file .changes>]

Le opzioni più usate sono le seguenti:

--no
esegue solo un test, mostrando quello che farebbe in modalità normale.
--nomail
non invia l'annuncio per l'upload che verrà eseguito.
-t --to nome_del_server
utilizza nome_del_server come server su cui caricare i file (i server sono definiti nel file di configurazione). È possibile usare l'impostazione default_host nel file di configurazione per indicare quale server utilizzare se --to non è indicato.

Dupload e Debarchiver

Nella guida Gestione di un repository con debarchiver si accennava al fatto che è possibile usare Dupload per caricare i pacchetti nella directory incoming del proprio repository.

Ecco un esempio funzionante di come creare 3 destinazioni per caricare pacchetti nelle tre sezioni del proprio repository, mediante il protocollo ssh.

Stable

$cfg{'debarchiver-stable'} = {
        fqdn => "esempio.it",
        incoming => "/var/lib/debarchiver/incoming/stable/",
        login => "utente",
        method => "scp",
};

Testing

$cfg{'debarchiver-testing'} = {
        fqdn => "esempio.t",
        incoming => "/var/lib/debarchiver/incoming/testing/",
        login => "utente",
        method => "scp",
};

Unstable

$cfg{'debarchiver-unstable'} = {
        fqdn => "esempio.it",
        incoming => "/var/lib/debarchiver/incoming/unstable/",
        login => "utente",
        method => "scp",
};

Raccomandazioni

Nella configurazione di default di Dupload sono presenti tutti gli indirizzi dei server Debian. A meno di sapere cosa fare, non usarli, per i seguenti motivi:

  • gli utenti normali non hanno l'autorizzazione ad eseguire l'upload (il pacchetto viene scartato)
  • si rallenta il processo di analisi dei nuovi pacchetti
  • se proprio si vuole avere un proprio pacchetto in Debian, è d'obbligo visitare L'angolo del nuovo Manutentore Debian.