[GUIDA] Creare un repository personale e pubblicarlo su internet

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




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
domx
view post Posted on 7/12/2010, 11:30




Grande, vaillant sei un mito! :D
 
Top
vaillant
view post Posted on 9/12/2010, 21:15




Guida aggiornata
 
Top
vaillant
view post Posted on 15/12/2010, 16:26




Stasera penso di ultimare la guida, se nel frattempo qualcuno ha domande o problemi fino a questo punto me lo dica :)
 
Top
vaillant
view post Posted on 15/12/2010, 21:32




Guida completata, enjoy it!!
 
Top
vaillant
view post Posted on 16/12/2010, 00:14




Per chi fosse interessato, la guida è disponibile anche in versione PDF scaricabile. Link nel primo post.

Ciao
 
Top
Mefrio
view post Posted on 17/12/2010, 10:17




complimenti vaillant però ho un problema...dopo aver seguito tutti i passi senza incontrare errori il deb non c'è in Synapitc e inoltre mi ha dato un problema in quanto, visto che il mio programma è per tutte le architetture, non mi riconosceva la cartella binary-all ma voleva che si chiamasse binary-i386...il problema della cartella binary non è urgente, al contrario della presenza del deb sul repository ;) fammi sapere come posso risolvere
 
Top
vaillant
view post Posted on 17/12/2010, 10:33




Ciao Mefrio. Vediamo di risolvere questi problemi, niente di grave comunque. Apri un terminale e postami
CODICE
cat /etc/apt/sources.list
apt-cache search plymouth-manager

ovviamente se il tuo programma si chiama plymouth-manager :)
 
Top
Mefrio
view post Posted on 17/12/2010, 10:54




aspetta ora ho problemi con la chiave PGP! Che casino!! Ora ne genero una nuova e vedo se funziona
 
Top
vaillant
view post Posted on 17/12/2010, 11:12




Eh ci sono passato anche io :D
 
Top
Mefrio
view post Posted on 17/12/2010, 13:12




in pratica mi dice che la mia chiave PGP non è publica...come risolvo?
 
Top
vaillant
view post Posted on 17/12/2010, 14:14




Troppo vago! A che punto sei? Il repository l'hai creato giusto? La chiave l'hai già creata e pubblicata sul server?

Spiegati meglio altrimenti non posso aiutarti
 
Top
Mefrio
view post Posted on 17/12/2010, 15:59




aspetta sto cercando di risolvere da solo...
 
Top
vaillant
view post Posted on 17/12/2010, 18:23




Attendo notizie...
 
Top
Mefrio
view post Posted on 18/12/2010, 16:50




vaillant ho risolto tutti i problemi che mi dava relativi alla chiave PGP e ora però l'apt-get update mi da questo errore
CODICE
W: Impossibile recuperare http://dl.dropbox.com/u/11004864/plymouth-manager/dists/lucid/Release  Unable to find expected entry  main/binary-i386/Packages in Meta-index file (malformed Release file?)



EDIT:

mettendomi a configurare manualmente alcuni file sono riuscito a fargli accettare il repository. Ora però ho un altro problema...quando provo ad installare il mio programma mi da questo errore
CODICE
mefrio @ 16:58 => prova $ sudo apt-get install plymouth-manager
Lettura elenco dei pacchetti... Fatto
Generazione albero delle dipendenze      
Lettura informazioni sullo stato... Fatto
Il pacchetto plymouth-manager non ha versioni disponibili, ma è nominato da un altro
pacchetto. Questo può significare che il pacchetto è mancante, è obsoleto
oppure è disponibile solo all'interno di un'altra sorgente
E: Il pacchetto plymouth-manager non ha candidati da installare

 
Top
28 replies since 6/12/2010, 22:33   2939 views
  Share