Creare un Repository Debian: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
m
nessun oggetto della modifica
mNessun oggetto della modifica
(44 versioni intermedie di 12 utenti non mostrate)
Riga 1: Riga 1:
{{stub}}
{{Repository
 
|precedente=Immagini iso Debian da usare come repository
 
|successivo=Gestione di un repository con debarchiver
La creazione di un repository Debian personale pu� essere utile nel caso si vogliano rendere disponibili per l' installazione tramite l' [[Introduzione all' Apt System|APT System]] i pacchetti *.deb creati da noi. Il repository cos� creato pu� essere utilizzato all' interno della nostra LAN, oppure reso accessibile a un gran numero di utenti tramite internet.
}}
{{Versioni compatibili|Squeeze|Wheezy|Jessie}}
== Introduzione ==
La creazione di un repository Debian personale può essere utile nel caso si vogliano rendere disponibili per l'installazione tramite l'[[Introduzione all'APT System|APT System]] i pacchetti <code>.deb</code> creati da noi. Il repository così creato può essere utilizzato all'interno della nostra LAN, oppure reso accessibile a un gran numero di utenti tramite Internet.


Esistono fondamentalmente due diversi approcci alla creazione di un repository:  
Esistono fondamentalmente due diversi approcci alla creazione di un repository:  
* '''Repository Automatico''': ha una struttura complessa, gestisce un pool di pacchetti e supporta architetture (i386, sparc, ecc...) multiple. A fronte di un maggior lavoro lato server permette un uso altamente automatizzato lato client;
* '''Repository Automatico''': ha una struttura complessa, gestisce un pool di pacchetti e supporta architetture (i386, sparc, ecc.) multiple. A fronte di un maggior lavoro lato server permette un uso altamente automatizzato lato client;
* '''Repository Semplice''': gestisce una sola architettura. E' il pi� indicato per i piccoli repository, specie quelli personali, perch� richiede un minor lavoro lato-server.
* '''Repository Semplice''': gestisce una sola architettura. È il più indicato per i piccoli repository, specie quelli personali, perché richiede un minor lavoro lato-server.


In questa guida vedremo come realizzare il secondo tipo di repository.
In questa guida vedremo come realizzare il secondo tipo di repository.


=Repository semplice=
== Repository semplice ==
==La Struttura==
=== La Struttura ===
Per prima cosa dovremo scegliere dove risieder� fisicamente il nostro repository. Una buona scelta pu� essere una directory all' interno della nostra home, come anche una directory all' interno di /usr/share. In questa guida creeremo il repository nella nostra home, ma sentitevi liberi di posizionarlo dove pi� vi aggrada.
Per prima cosa dovremo scegliere dove risiederà fisicamente il nostro repository. Una buona scelta può essere una directory all'interno della nostra home, come anche una directory all'interno di <code>/usr/share</code>. In questa guida creeremo il repository nella nostra home, ma sentitevi liberi di posizionarlo dove più vi aggrada.
<pre>
<pre>
$ mkdir ~/debian
$ mkdir ~/debian
</pre>
</pre>
Ora dobbiamo creare le due sottodirectory ''binary'' e ''source'' che conterranno rispettivamente le versioni binarie e sorgenti dei nostri pacchetti:
Ora dobbiamo creare le due sottodirectory <code>binary</code> e <code>source</code> che conterranno rispettivamente le versioni binarie e sorgenti dei nostri pacchetti:
<pre>
<pre>
$ mkdir ~/debian/binary
$ mkdir ~/debian/binary
Riga 28: Riga 31:
</pre>
</pre>


==I file di indice==
=== I file di indice ===
Ultimata la creazione della struttura del repository e popolati binary e source (se abbiamo anche le versioni sorgenti) con i nostri pacchetti, dobbiamo creare i relativi file di indice. Questi file vengono scaricati da APT quando impartiamo il comando '''apt-get update''' e contengono la lista di tutti i pacchetti presenti in un repository. Quando effettuiamo la ricerca di un pacchetto o quando desideriamo installarlo, APT consulta questi file per stabilire in quale repository esso contenuto.
Ultimata la creazione della struttura del repository e popolati binary e source (se abbiamo anche le versioni sorgenti) con i nostri pacchetti, dobbiamo creare i relativi file di indice. Questi file vengono scaricati da APT quando impartiamo il comando <code>'''apt-get update'''</code> e contengono la lista di tutti i pacchetti presenti in un repository. Quando effettuiamo la ricerca di un pacchetto o quando desideriamo installarlo, APT consulta questi file per stabilire in quale repository esso è contenuto.


La creazione dei file di indice ottenuta tramite due utilities: '''dpkg-scanpackages''' e '''dpkg-scansources'''. Il funzionamento dei due programmi identico, ma il primo esamina i file binari ed il secondo quelli sorgenti.
La creazione dei file di indice è ottenuta tramite due utility: <code>'''dpkg-scanpackages'''</code> e <code>'''dpkg-scansources'''</code>. Il funzionamento dei due programmi è identico, ma il primo esamina i file binari ed il secondo quelli sorgenti.


Entrambi gli strumenti restituiscono i loro risultati sullo standard output (stdout): questo significa che di default vedremo l' output a schermo. Per questo motivo necessario reindirizzare il risultato di scanpackages e scansources su file appositi. Per convenzione questi file sono compressi in formato gzip e chiamati '''Packages.gz''' all' interno di ''binary'' e '''Sources.gz''' all' interno di ''source''.
Entrambi gli strumenti restituiscono i loro risultati sullo standard output (<code>stdout</code>): questo significa che di default vedremo l'output a schermo. Per questo motivo è necessario reindirizzare il risultato di <code>dpkg-scanpackages</code> e <code>dpkg-scansources</code> su file appositi. Per convenzione questi file sono compressi in formato <code>gzip</code> e chiamati <code>'''Packages.gz'''</code> all'interno di <code>binary</code> e <code>'''Sources.gz'''</code> all'interno di <code>source</code>.


Nell' esempio di questa guida il nostro repository contiene due pacchetti di tipo binario (apt e apt-best) ed un pacchetto di tipo sorgente (apt). Vedremo ora come creare i relativi file Packages.gz e Sources.gz
Nell'esempio di questa guida il nostro repository contiene due pacchetti di tipo binario (apt e apt-best) ed un pacchetto di tipo sorgente (apt). Vedremo ora come creare i relativi file <code>Packages.gz</code> e <code>Sources.gz</code>


La struttura del repository di esempio questa:
La struttura del repository di esempio è questa:
<pre>
<pre>
$ tree debian
$ tree debian
Riga 52: Riga 55:
     `-- apt_0.5.28.6.tar.gz
     `-- apt_0.5.28.6.tar.gz
</pre>
</pre>
Procediamo con la creazione del file Packages.gz:
Procediamo con la creazione del file <code>Packages.gz</code>:
<pre>
<pre>
$ cd ~/debian
$ cd ~/debian
Riga 61: Riga 64:
Packages.gz
Packages.gz
</pre>
</pre>
e del file Sources.gz
Per la creazione del file indice <code>Packages.gz</code> in Wheezy:
<pre>
$ cd ~/debian
$ apt-ftparchive packages binary | gzip > binary/Packages.gz
$ ls ~/debian/binary/ |grep Packages
Packages.gz
</pre>
e del file <code>Sources.gz</code>
<pre>
<pre>
$ cd ~/debian
$ cd ~/debian
Riga 69: Riga 79:
</pre>
</pre>


==I file di Release==
=== I file di Release ===
Se volete poter usare il pinning (''crf.: [[APT uso avanzato: mixare releases diverse]]'') o permetterne l' uso agli utenti del vostro repository, una volta creati i file Packages.gz e Sources.gz, dovete necessariamente creare un file apposito in ciascuna directory del vostro repository.
Se volete poter usare il [[pinning]] o permetterne l'uso agli utenti del vostro repository, una volta creati i file <code>Packages.gz</code> e <code>Sources.gz</code>, dovete necessariamente creare un file apposito in ciascuna directory del vostro repository.


Questi file sono chiamati file '''Release''', sono normali file di testo ed hanno una struttura del tipo:
Questi file sono chiamati file <code>'''Release'''</code>, sono normali file di testo ed hanno una struttura del tipo:
<pre>
<pre>
Archive: archivio
Archive: archivio
Riga 81: Riga 91:
</pre>
</pre>
dove:
dove:
* archivio = ''� l' archivio Debian a cui i pacchetti appartengono (ad es.: stable, testing. ecc...);
* <code>archivio</code>: è l'archivio Debian a cui i pacchetti appartengono (ad es.: stable, testing. ecc.);
* componente = ''indica il tipo di componente (ad es.: main, contrib, non-free);
* <code>componente</code>: indica il tipo di componente (ad es.: main, contrib, non-free);
* origine = ''specifica il proprietario del repository'';
* <code>origine</code>: specifica il proprietario del repository;
* etichetta = ''identifica il repository: potete inserire descrizioni, ecc...;
* <code>etichetta</code>: identifica il repository: potete inserire descrizioni, ecc.;
* architettura = ''l' architettura dei pacchetti contenuti nel repository (ad es.: i386, sparc, source, ecc...).
* <code>architettura</code>: l' architettura dei pacchetti contenuti nel repository (ad es.: i386, sparc, source, ecc.).
Vediamo i file Release per i repository di questa guida.
Vediamo i file Release per i repository di questa guida.


Riga 107: Riga 117:
</pre>
</pre>


==Uso del repository==
=== Uso del repository ===
==== Uso in locale ====
Finalmente è venuto il momento di mettere alla prova il nostro repository.
 
Già fin d'ora possiamo utilizzarlo così com'è in locale sulla nostra macchina: tutto quello che dobbiamo fare consiste nell'aggiungere al nostro file <code>/etc/apt/sources.list</code> l'[[URI]] attraverso il quale reperire i pacchetti.
 
In questo esempio abbiamo creato il repository nella directory <code>~/debian</code> e cioè nella directory <code>debian</code> all'interno della nostra home. Dovremo quindi aggiungere al file <code>/etc/apt/sources.list</code> due linee così composte:
<pre>
deb file:///home/utente/debian binary/
deb-src file:///home/utente/debian source/
</pre>
dove, alla parola ''utente'' dovete sostituire lo username dell'utente nella cui home risiede il repository.
 
Una volta fatto questo lanciate:
<pre> # apt-get update</pre>
per rigenerare la lista degli indici di APT.
 
Ora vediamo se il nostro repository funziona. Iniziamo con il cercare il pacchetto '''apt'''. Il comando da impartire è:
<pre>
$ apt-cache show apt
</pre>
 
Se tutto ha funzionato dovremmo ottenere come risultato due diversi pacchetti: entrambi si chiamano apt, entrambi hanno numero di versione 0.5.28.6, ecc. Per capire se e quale proviene dal nostro repository dobbiamo andare a controllare la voce <code>Filename</code>.
 
Nel caso del pacchetto proveniente dal repository ufficiale di Debian avremo:
<pre>
[ ... omissis ...]
Filename: pool/main/a/apt/apt_0.5.28.6_i386.deb
[ ... omissis ...]
</pre>
mentre per il pacchetto proveniente dal nostro repository avremo:
<pre>
[ ... omissis ...]
Filename: binary/apt_0.5.28.6_i386.deb
[ ... omissis ...]
</pre>
 
Per fare in modo che il nostro repository sia usato come preferenziale rispetto agli altri possiamo inserire nel file <code>/etc/apt/sources.list</code> le linee ad esso relativo all'inizio del file, prima di tutti gli altri repository.
 
In questo modo, quando impartiamo il comando:
<pre> # apt-get install nome_pacchetto</pre>
APT provvederà ad installare quello fornito dal repository elencato per primo in <code>/etc/apt/sources.list</code>. Ecco l'esempio sempre relativo ad ''apt'':
<pre>
# apt-get install apt -s
Lettura della lista dei pacchetti in corso... Fatto
Generazione dell'albero delle dipendenze in corso... Fatto
Pacchetti suggeriti:
  aptitude apt-doc
I seguenti pacchetti saranno aggiornati:
  apt
1 aggiornati, 0 installati, 0 da rimuovere e 1 non aggiornati.
Inst apt [0.5.28.6] (0.5.28.6 Repository di esempio:unstable)
Conf apt (0.5.28.6 Repository di esempio:unstable)
</pre>
Nelle ultime due linee possiamo notare come la provenienza del pacchetto sia '''Repository di esempio:unstable''' come indicato nel nostro file '''Release'''.
 
==== Uso in rete (http) ====
Rendere disponibile in rete il repository che abbiamo appena creato è un'operazione estremamente semplice. Non dovremo fare altro che copiare la root del repository in una directory accessibile al nostro server web ed indicare l'[[URI]] corretto nei file <code>/etc/apt/sources.list</code> delle macchine che dovranno accedere ad esso.
 
Nel caso in cui stiamo usando Apache e la DocumentRoot sia <code>/var/www</code> sarà sufficiente impartire:
<pre>
# cp -R /home/utente/debian/ /var/www/
</pre>
 
Ora dobbiamo modificare i file <code>/etc/apt/sources.list</code> in modo che puntino a questo repository.
 
Poniamo che il server che mette a disposizione il repositry abbia il [[FQDN]] debian.prova.net. La sintassi da utilizzare in <code>/etc/apt/sources.list</code> è la seguente:
<pre>
deb http://debian.prova.net/debian/ binary/
deb-src http://debian.prova.net/debian/ source/
</pre>
Dobbiamo fare '''estrema''' attenzione agli slash ("/") perché hanno un uso preciso all'interno di <code>/etc/apt/sources.list</code>. Nel nostro caso è '''necessario''' che sia l'URL (http://debian.prova.net/debian) sia l' archivio (binary o source) termini con un "/", altrimenti otterremo un errore di questo tipo:
<pre>
# apt-get update
E: La linea x in /etc/apt/sources.list (dist parse) non è corretta
</pre>
Se abbiamo invece scritto correttamente, quando lanceremo <code>apt-get update</code>, vedremo APT dialogare con il nostro web server e reperire l'elenco dei nostri pacchetti:
<pre>
# apt-get update
Get:1 http://debian.prova.net binary/ Packages [1377B]
Get:2 http://debian.prova.net binary/ Release [97B]
Get:3 http://debian.prova.net source/ Sources [412B]
Get:4 http://debian.prova.net source/ Release [100B]
</pre>
Per il test e l'ordine con cui i pacchetti vengono installati da APT, vi rimando alla lettura del [[#Uso_in_locale|paragrafo precedente]]
 
== Repository ufficiale ==
=== Configurazione repository ===
Per creare un repository ufficiale (fatto a regola d'arte, come quello di debian) per prima cosa installiamo il programma reprepro con il comando:
<pre># apt-get install reprepro</pre>
in seguito scegliamo il percorso dove creare il nostro repo (nella guida sarà indicato come ~/debian/) quindi creiamo la cartella e posizioniamovici dentro:
<pre>$ mkdir ~/debian/
$ cd ~/debian/</pre>
Ora dobbiamo creare un file di configurazione per reprepro quindi:
<pre>$ mkdir conf
$ cd conf</pre>
dentro creiamo un file chiamato distributions e riempiamolo nel seguente modo:
<pre>Origin: nomeMioRepo
Label: Etichetta nomeMioRepo
Suite: unstable
Codename: sid
Architectures: amd64
Components: main
Description: Unofficial Debian packages
SignWith: myKeyId
</pre>
{{Warningbox|Al posto di myKeyId bisogna insere l'id della chiave GPG creata appositamente per firmare i pacchetti.}}
ora riposizioniamoci nella cartella debian dando il comando:
<pre>cd ~/debian</pre>
facciamo creare i file necessari con:
<pre>reprepro check</pre>
per aggiungere un pacchetto al repo:
<pre>reprepro includedeb unstable /tmp/mypackage_1.1.1-1_all.deb</pre>
per rimuoverlo:
<pre>reprepro remove unstable mypackage</pre>
 
Provvedere a mettere online il repository rendendo accessibile da un server web la cartella debian escludendo le directory db e conf, quindi modificare il file <code>/etc/apt/sources.list</code> aggiungendo la seguente riga:
<pre>deb http://www.tuSito.do/debian/ sid main</pre>
{{Suggerimento|Per impedire l'accesso alle directory db e conf si potrebbe creare all'interno di ciascune di essa un file .htaccess contentente:<pre>deny from all</pre>}}
 
=== Creazione pacchetto chiave GPG ===
Per prima cosa esportiamo la nostra chiave con
<pre>gpg --export myKeyId > myrepo-debian-key.gpg</pre>
In seguito creiamo il seguente alvero di directory (si ricorda che control e myrepo-debian-key.gpg sono files):
<pre>
├── DEBIAN
│   └── control
└── etc
    └── apt
        └── trusted.gpg.d
            └── myrepo-debian-key.gpg
</pre>
Inserire all'interno del file control:
<pre>Package: myrepo-archive-keyring
Version: 2014.4
Architecture: all
Maintainer: yourNick <mail@domain.do>
Depends: gpgv
Recommends: gnupg
Breaks: apt (<< 0.7.25.1)
Section: misc
Priority: important
Multi-Arch: foreign
Description: GnuPG archive keys of the archive archive
The archive project digitally signs its Release files. This package
contains the archive keys used for that.
</pre>
Il file myrepo-debian-key.gpg è il file precedentemente creato con GPG.
Posizionarsi all'esterno della directory pkg e lanciare i seguenti comandi:
<pre>
# chown -R root:root ./pkg
$ dpkg-deb -b ./pkg myrepo-archive-keyring_2014.4_all.deb
</pre>
Il pacchetto contiene la chiave per autenticare il repository.
{{Autori
|Autore=[[Utente:Keltik|Keltik]] 09:20, Giu 26, 2005 (EDT)
|Verificata_da=
: [[Utente:Tima|Tima]] 10:41, 16 mag 2013 (CEST)
: [[Utente:Marcomg|marcomg]] 17:50, 23 mag 2014 (CEST)
|Estesa_da=
: [[Utente:Marcomg|marcomg]]
|Numero_revisori=2
}}
 
[[Categoria:Creare repository]]

Menu di navigazione