3 581
contributi
(→Uso in locale: allow-insecure per un repository locale non firmato) |
|||
(45 versioni intermedie di 12 utenti non mostrate) | |||
Riga 1: | Riga 1: | ||
{{ | {{Repository | ||
|precedente=Immagini iso Debian da usare come repository | |||
|successivo=Gestione di un repository con debarchiver | |||
La creazione di un repository Debian personale | }} | ||
{{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 | * '''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. | * '''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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | * <code>archivio</code>: è l'archivio Debian a cui i pacchetti appartengono (ad es.: stable, testing. ecc.); | ||
* componente | * <code>componente</code>: indica il tipo di componente (ad es.: main, contrib, non-free); | ||
* origine | * <code>origine</code>: specifica il proprietario del repository; | ||
* etichetta | * <code>etichetta</code>: identifica il repository: potete inserire descrizioni, ecc.; | ||
* architettura | * <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 [allow-insecure=yes] file:///home/utente/debian binary/ | |||
deb-src [allow-insecure=yes] file:///home/utente/debian source/ | |||
</pre> | |||
dove, alla parola ''utente'' dovete sostituire lo username dell'utente nella cui home risiede il repository. L'uso di <code>allow-insecure=yes</code> permette l'uso di un repository non firmato e/o la cui chiave pubblica corrispondente non è stata aggiunta alle chiavi fidate di APT. | |||
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]] |
contributi