[GUIDA] Creare un repository personale e pubblicarlo su internet

« Older   Newer »
  Share  
vaillant
view post Posted on 6/12/2010, 22:33 by: vaillant




PREMESSA

Spesso e volentieri si sentono richieste di aiuto per creare un repository. Le guide presenti su internet sono poche e certe volte confusionarie; motivo per cui questa sera sono qui a fare una bella guida per aiutare chi vuole avere i propri programmi disponibili su synaptic o chi vuole avere determinati pacchetti che non sono inclusi in nessun repo per la propria distribuzione.

La guida sarà articolata in tre sezioni:

- Chiave GPG;
- Repository;
- Hosting;

e sarà racchiusa unicamente in questo primo post. Buona lettura e chiedete quando ci sono cose poco chiare.

Un repository (abbreviativo, repo) è un contenitore di pacchetti. In esso si trovano tutti quei pacchetti che sono disponibili nelle distribuzioni, ogni pacchetto che scaricate via shell o da programmi di gestione sono archiviati nei repository. Un repo può essere fondamentalmente di due tipi:

- Pubblico;
- Locale;

Il primo tipo di repository viene pubblicato sul web, generalmente un sito hosting dedicato, tramite il quale è possibile lo scambio dei dati tra il repo e il sistema. Per un corretto funzionamento e per assicurare che i pacchetti contenuti provengano da chi si dichiara essere il manutentore, il repository deve essere firmato con una chiave GPG.

Il secondo tipo ha tutte le caratteristiche tipiche dei repo ma non ha bisogno di essere firmato o di connessione internet per lo scambio dei dati.

In questa guida vedremo come costruire un repository pubblico e ospitarlo su un sito web.

--------------------- ------------------------- ----------------------------- ------------------------ --------------------------- --------------------------

CHIAVE GPG

La prima cosa da fare è creare la propria chiave GPG che servirà ad autenticare il repository. Per procedere alla creazione della chiave, seguire la relativa guida presente sul forum di Ubuntu-it http://wiki.ubuntu-it.org/Sicurezza/GnuPg
Ora che abbiamo creato e firmato la nostra chiave GPG dobbiamo ricordarci che essa è univoca! Se la perdiamo o se dimentichiamo la passkey, l'unica possibilità che abbiamo è quella di revocarla e crearne una nuova. Ovviamente, una chiave revocata non sarà mai più disponibile.

REPOSITORY

Completata la procedura della chiave, passiamo ora alla creazione dell'ambiente di lavoro in cui verrà creato il nostro repository. Cominciamo con il creare una cartella dove contenere il progetto, io l'ho chiamata "Repository", nella home. Al suo interno, creiamo le due directory fondamentali
CODICE
mkdir dists pool

dovreste avere questo ora
CODICE
$ tree Repository/
-- dists
-- pool


La directory "dists" conterrà i file di configurazione e gli indici del repository, mentre la directory "pool" contiene i pacchetti debian che verranno inseriti.

All'interno della dir "pool" dobbiamo creare delle sezioni. Ogni pacchetto fa parte di una determinata sezione; generalmente, si fa questa distinzione:
- main (pacchetti opensource)
- updates (pacchetti più recenti rispetto a quelli in main)
- security (pacchetti più sicuri rispetto a quelli in main)
- non-free (pacchetti non liberi, come codec proprietari ecc.)

Se il repository non serve per una distribuzione, ma soltanto per un uso personale, possiamo omettere le ultime tre ed usare solo la prima (che deve esserci comunque sempre). In questa guida vedremo l'uso di "main", per cui andiamo a crearla dentro "pool"
CODICE
$ tree Repository/
-- dists
-- pool
   -- main


Le directory del repository sono completate, ora possiamo metterci al lavoro per indicizzarle. La prima cosa da fare è ovviamente avere dei pacchetti deb da inserire nel repository. Supponiamo di avere il nostro pacchetto "prova-repository_0.1.1_all.deb"; dobbiamo copiarlo nella directory pool/main in modo da avere
CODICE
$ tree Repository/
-- dists
-- pool
   -- main
       -- prova-repository_0.1.1.deb


Adesso dobbiamo indicizzare il pacchetto con una serie di comandi, per una semplice questione di comodità, li posto tutti in uno script:
CODICE
#!/bin/bash

releases="prova"
categories="main"
architectures="all"
topdir=$(dirname "$0")

for release in $releases; do
   cd $topdir
   if [ -e dists/$release ]; then rm -r dists/$release; fi
   for category in $categories; do
       for architecture in $architectures; do
           mkdir -p dists/$release/$category/binary-$architecture
           dpkg-scanpackages -m -a $architecture pool/$category /dev/null 2>/dev/null > dists/$release/$category/binary-$architecture/Packages
           gzip -c dists/$release/$category/binary-$architecture/Packages > dists/$release/$category/binary-$architecture/Packages.gz

           # mkdir -p dists/$release/$category/source
           # dpkg-scansources pool/$category /dev/null 2>/dev/null > dists/$release/$category/source/Sources
           # gzip -c dists/$release/$category/source/Sources > dists/$release/$category/source/Sources.gz
       done
   done
   if [ -e Release ]; then rm Release; fi
   if [ -e Release.gpg ]; then rm Release.gpg; fi
   cd dists/$release
   pwd
   apt-ftparchive release . \
       -o APT::FTPArchive::Release::Origin="http://hikarilabs.forumcommunity.net" \
       -o APT::FTPArchive::Release::Codename="$release" \
       > $topdir/Release
   mv $topdir/Release .
   gpg -abs -o Release.gpg Release
done

Sostituite "prova" nel campo "releases" con il nome dato al repository (di solito coincide con una distribuzione) e "categories" con i componenti che compongono il repo (in questo caso abbiamo solo main). Copiamo lo script all'interno della directory Repository e avremo
CODICE
$ tree Repository/
-- dists
-- pool
  -- main
      -- prova-repository_0.1.1.deb
-- repo.sh


A questo punto non ci resta che dare
CODICE
sh repo.sh

e il repository verrà completato. Ci verrà richiesta la passkey per la chiave GPG che abbiamo creato in precedenza, inseriamola e avremo finito.

HOSTING

Adesso dobbiamo pubblicare il nostro repository online. In questo esempio utilizzerò Dropbox, ma ovviamente vanno bene tutti i siti di hosting e siti web con spazio dati. In dropbox, dentro la cartella "Public" creiamo una directory con il nome della distribuzione o del repository, ad esempio "Repo 1". All'interno di questa, dovremo copiare le due directory create in precedenza, ovvero "dists" e "pool" in modo da avere
CODICE
$ tree Public/
-- Repo\ 1
   -- dists
   -- pool


Ora il nostro repository si trova online, per utilizzarlo apriamo come root "/etc/apt/sources.list" e inseriamo questa riga
CODICE
deb http://dl.dropbox.com/u/XXXXXXX/Repo 1/prova main

dove "XXXXXXX" è il nostro account dropbox, è un numero di 7 cifre; "Repo 1" è il nome che abbiamo assegnato alla cartella contenente il repository; "prova" è il nome della distribuzione (nello script è in "releases="); main è il componente scelto (nello script è in "categories=").

A questo punto, dobbiamo aggiungere la chiave GPG (a voi non serve, ma a chi darete il repository si!!) con cui è stato firmato il repo. Usiamo questo comando
CODICE
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com XXXXXXXX
dove al posto di "XXXXXXXX" inseriremo la nostra chiave GPG che abbiamo generato all'inizio.

Un bel
CODICE
sudo apt-get update

e troveremo in synaptic il nostro bel pacchetto "prova-repository_0.1.1.deb"

Fatto ;)

Scarica la guida in PDF

Edited by vaillant - 16/12/2010, 00:16
 
Top
28 replies since 6/12/2010, 22:33   2953 views
  Share