Skip to content

Latest commit

 

History

History
330 lines (249 loc) · 8.78 KB

memo.md

File metadata and controls

330 lines (249 loc) · 8.78 KB

Petit memo sur reprepro

Installation basique sans signer les paquets

apt-get install reprepro

** Le répertoire conf/ servira à stocker la conf du dépôt.**
mkdir /repository
mkdir /repository/{conf,incoming}

Dans le dossier conf/ placer le fichier distributions contenant ceci :

Origin: Francois Lafont
Label: Francois Lafont
Suite: stable
Codename: lenny
Version: all
Architectures: i386 amd64
Components: main
Description: personnal repository.

Origin: Francois Lafont
Label: Francois Lafont
Suite: stable
Codename: squeeze
Version: all
Architectures: i386 amd64
Components: main
Description: personnal repository.

Origin: Francois Lafont
Label: Francois Lafont
Suite: stable
Codename: wheezy
Version: all
Architectures: i386 amd64
Components: main
Description: personnal repository.

Dans le champ Architectures, on pourrait aussi ajouter source mais ici on va se contenter de stocker des .deb.

Pour l'instant, on est en train de faire un dépôt sans authentification ce qui provoquera un message d'avertissement à chaque installation d'un paquet de ce dépôt. On verra plus loin comment authentifier notre dépôt.

Pour ajouter un .deb dans le dépôt :

reprepro --verbose --basedir /repository includedeb lenny /le/package/xxxx.deb

À répéter avec les autres distributions si nécessaire. On peut voir le résultat avec un tree /repository. Maintenant, pour rendre accessible le dépôt sur le Web :

apt-get install apache2
ln -s /repository /var/www/debian

Sur une machine Debian, il n'y a plus qu'à rajouter dans le sources.list (ou dans un sources.list.d/truc.list) la ligne :

### dans le cas d'une Wheezy
deb http://le-nom-fqdn-du-depot/debian/ wheezy main

Ensuite l'installation pourra se faire de manière classique :

apt-get update && apt-get install le-paquet

Les mises à jour se feront sans souci à condition bien sûr que la version du paquet augmente. Reste toute même un souci. À chaque installation ou MAJ, on a le message :

WARNING: The following packages cannot be authenticated!
  snmpd-extend
Install these packages without verification [y/N]?

Utiliser une clé gpg pour signer les paquets de son dépôt

Nous allons authentifier notre dépôt. Déjà, il faut se créer une paire de clés gpg. La paire de clés gpg est stockée dans le répertoire ~/.gnupg/. La paire de clés doit donc être générée par le même compte Unix que celui qui gère le dépôt APT, ie le compte Unix qui lance les commandes reprepro pour ajouter/supprimer etc. des paquets dans le dépôt. Dans notre cas il s'agit du compte root mais c'est n'est pas nécessaire. Un compte Unix dédié sans droit particulier, ni même le droit de se connecter au système est une bien meilleure idée :

gpg --gen-key # ne pas mettre de passphrase

Remarque : ne pas mettre de passphrase car avec une passphrase je n'ai pas réussi à faire marcher reprepro ensuite. Au passage, la commande à besoin d'entropie, donc il faut éventuellement faire des saisies pipeau au clavier etc. pour accélérer la commande.

Au niveau de la paire de clés, j'ai choisi "DSA and Elgamal" mais en fait, j'ignore le meilleur choix. J'ai mis comme ID pour la paire clés :

# La commande ci-dessus nous demande d'abord de saisir un
# nom (« Francois Lafont » ci-dessous), un commentaire
# (« personnal repository » ci-dessous) et un mail
# (« [email protected] » ci-dessous). De
# ces trois éléments, la commande `gpg --gen-key` génère
# l'ID suivant :
Francois Lafont (personnal repository) <[email protected]>

Ensuite on peut bien voir la clé publique avec la commande :

~$ gpg --list-public-keys
/root/.gnupg/pubring.gpg
------------------------
pub   2048D/D36BF915 2013-07-11
uid                  Francois Lafont (personnal repository) <[email protected]>
sub   2048g/11715478 2013-07-11

La valeur D36BF915, l'identifiant numérique de la clé publique, est à retenir.

Remarque : ci-dessus, notre paire de clé gpg est importée dans le « trousseau » du compte root, ie dans le répertoire ~/.gnupg/. En particulier, la clé publique se trouve dans ~/.gnupg/pubring.gpg. Il est parfaitement possible d'avoir des informations sur une clé gpg publique sans pour autant qu'elle soit importée dans notre trousseau. Par exemple avec les commandes :

cd /tmp && wget http://repository.flaf.fr/pub-key.gpg
gpg --list-packets pub-key.gpg

Dans le fichier /repository/conf/distrubtions, pour chaque distribution (en clair, dans chaque paragraphe de ce fichier de configuration), rajouter le champ suivant :

SignWith: D36BF915

Ensuite, il faut mettre à jour notre dépôt afin que celui-ci contiennent les fichiers (gpg) permettant son authentification :

# À faire pour chaque distribution.
reprepro --verbose --basedir /repository export wheezy

Maintenant on a progressé car, sur un client APT de notre dépôt, on a désormais :

~# apt-get update

[...]

W: GPG error: http://shinken.domaine.priv wheezy 
Release: The following signatures couldn't be verified because the public key
is not available: NO_PUBKEY 783FBC83D36BF915

Il faut donc rendre notre clé publique disponible à tous les utilisateurs de notre dépôt. Déjà, si on veut ajouter la clé publique dans la configuration APT de notre machine perso, il faut faire :

gpg --export D36BF915 > key-repository-pub.gpg
apt-key add key-repository-pub.gpg

# ou bien plus élégamment :
gpg --export D36BF915 | apt-key add -

Remarque : si on veut mettre la clé publique dans un format ASCII alors faire plutôt :

gpg --export -a D36BF915 > key-repository-pub.gpg

Comme indiqué dans la page man de gpg :

Create ASCII armored output. The default is to create
the binary OpenPGP format.

Et il ne restera plus qu'à mettre le fichier key-repository-pub.gpg à la racine de notre dépôt APT, afin que n'importe qui puisse le télécharger.

Et maintenant, après un petit apt-get update, plus de message nous signalant qu'on souhaite installer un paquet non authentifié.

Remarque : si un jour on ne souhaite plus utiliser notre dépôt :

  • on supprime le dépôt du sources.list
  • et on supprime la clé publique associé avec :
apt-key del D36BF915

Remarque: voir la page man de reprepro, mais il est aussi possible de supprimer un paquet du dépôt et de faire bien d'autres choses. Par exemple pour supprimer un package :

reprepro --verbose --basedir /repository remove wheezy le-package

Dans un dépôt debian la distribution s'appelle aussi le codename ou on utilise aussi l'expression target qui est plus générale car en vérité cette « section » ne correspond pas nécessairement à une distribution. Par exemple dans :

deb http://repository.crdp.ac-versailles.fr/debian/ xia main

la target est xia qui ne correspond pas à une distribution (ça peut être un logiciel ou une famille de logiciels).

Supposons qu'on veuille changer une target de notre dépôt parce qu'on veut lui ajouter une architecture par exemple. Par exemple on ajoute l'architecture i386 à cette target :

Origin: Francois Lafont
Label: Francois Lafont
Suite: stable
Codename: xia
Version: all
Architectures: i386 amd64
Components: main
Description: personnal repository.

Remarque : attention pas de virgule pour séparer le nom des architectures.

On édite le fichier de conf de reprepro pour avoir la target xia comme ci-dessus :

vim /repository/conf/distributions

Ensuite on lance la commande suivante qui va mettre au propre la base de données de reprepro en fonction des différences constatées entre le fichier de conf et l'arborescence des fichiers constituant le dépôt :

reprepro --verbose --basedir /repository clearvanished

Si jamais il y a du nettoyage à faire alors il faudra rejouer la commande avec l'option --delete :

reprepro --verbose --basedir /repository --delete clearvanished

Ensuite on liste les paquets contenus dans la target xia :

reprepro --verbose --basedir /repository list xia

En fonction de la liste obtenue, on supprime tous les paquets de cette liste :

reprepro --verbose --basedir /repository remove xia paquet1 paquet2...

Ensuite, on vide le répertoire :

rm -r /repository/dists/xia/*

On peut maintenant repartir sur un répertoire clean qu'on peut exporter :

reprepro --verbose --basedir /repository export xia

Et voilà, c'est fini. On a une target toute nouvelle et propre mais vide ausi et il faudra donc la peupler de paquets.