Reprepro
Installation d'un référentiel (Dépôt) Debian avec "pool", sécurisation pgp, et mirroring.
REPREPRO
Ce Tuto est réalisé sur une squeeze à jour
Installation
# apt-get install reprepro
Nous présumons que vous avez Apache2 (ou un autre serveur Web) installé et opérationnel.
Préparation des répertoires de base
# mkdir /var/www/debian # mkdir /var/www/debian/conf # mkdir /var/www/debian/incoming
Configuration
Nous créons les quatres branches dont nous aurons besoin. Vous pouvez tout aussi bien n'en créer qu'une pour commencer
# nano /var/www/debian/conf/distributions Origin: lol Label: lol's apt Suite: stable Codename: lenny Version: 5.03 Architectures: i386 amd64 source Components: main non-free contrib Description: Your description Origin: lol Label: lol's apt Suite: testing Codename: squeeze Architectures: i386 amd64 source Components: main non-free contrib Description: Your description Origin: lol Label: lol's apt Suite: unstable Codename: sid Architectures: i386 amd64 source Components: main non-free contrib Description: Your description Origin: lol Label: lol's apt Suite: experimental Codename: experimental Architectures: i386 amd64 source Components: main non-free contrib Description: Your description
# chown -R www-data:www-data /var/www/debian/
Construction du référentiel
# reprepro -b . export
La commande à créé deux répertoires: db et dists
# ls conf db dists incoming
Vous pouvez déjà naviguer dans votre dépôt...
Ajouter un paquet au référentiel
# reprepro -vb . includedeb squeeze /var/cache/apt/archives/reprepro_4.2.0-1_amd64.deb /var/cache/apt/archives/reprepro_4.2.0-1_amd64.deb: component guessed as 'main' Exporting indices...
Ajouter un paquet source au référentiel
Il vous faut avec les sources, un fichier .desc qui doit contenir les informations du paquet, par exemple:
Format: 1.0
Source: notalweg
Binary: notalweg
Architecture: any
Version: 0.2-1
Maintainer: Cyrille Colin <colin@univ-metz.fr>
Homepage: http://talweg.univ-metz.fr
Standards-Version: 3.8.1
Build-Depends: debhelper (>= 7), autotools-dev, liblog4net1.2-cil, make, mono-gmcs, libmysql5.0-cil, libmono-ldap2.0-cil, libmono-system-web2.0-cil
Checksums-Sha1:
ee1774e8649bcd4eb38d87d035d29edde9d54741 167744 notalweg_0.2-1.tar.gz
Checksums-Sha256:
53ea2c131633ccdf4681fd9e7968e80ae0d59259e34b8ff81a8231756fdfba12 167744 notalweg_0.2-1.tar.gz
Files:
cc672ae30ddc04092b9e6da80efa0143 167744 notalweg_0.2-1.tar.gz
# reprepro -vb . includedsc lenny /var/cache/apt/archives/notalweg_0.2-1.dsc /var/cache/apt/archives/notalweg_0.2-1.dsc: component guessed as 'main' Exporting indices...
Enlever un paquet du dépôt
# reprepro -b . remove sid reprepro Exporting indices... Deleting files no longer referenced...
Génération de votre clef GPG
La génération de la clef peut prendre du temps... Il est préférable de la faire directement sur la machine et non pas par ssh.
# gpg --gen-key gpg (GnuPG) 1.4.10; Copyright (C) 2008 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Sélectionnez le type de clé désiré: (1) RSA and RSA (default) (2) DSA and Elgamal (3) DSA (signature seule) (4) RSA (signature seule) Votre choix ? 1 les clés RSA peuvent faire entre 1024 et 4096 bits de longueur. Quelle taille de clé désirez-vous ? (2048) 1024 La taille demandée est 1024 bits Spécifiez combien de temps cette clé devrait être valide. 0 = la clé n'expire pas <n> = la clé expire dans n jours <n>w = la clé expire dans n semaines <n>m = la clé expire dans n mois <n>y = la clé expire dans n années La clé est valide pour ? (0) 1y La clé expire le ven. 30 sept. 2011 21:29:05 EAT Est-ce correct ? (o/N) o Vous avez besoin d'un nom d'utilisateur pour identifier votre clé; le programme le construit à partir du nom réel, d'un commentaire et d'une adresse e-mail de cette manière: « Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de> » Nom réel: George Thejungle Adresse e-mail: <george@thejungle.org> Commentaire: GJ Vous avez sélectionné ce nom d'utilisateur: "George Thejungle (GJ) <george@thejungle.org>" Changer le (N)om, le (C)ommentaire, l'(E)-mail ou (O)K/(Q)uitter ? o Vous avez besoin d'une phrase de passe pour protéger votre clé secrète. Un grand nombre d'octets aléatoires doit être généré. Vous devriez faire autre-chose (taper au clavier, déplacer la souris, utiliser les disques) pendant la génération de nombres premiers; cela donne au générateur de nombres aléatoires une meilleure chance d'avoir assez d'entropie. Il n'y a pas assez d'octets aléatoires disponibles. Faites autre chose pour que l'OS puisse amasser plus d'entropie ! (il faut 277 octets de plus) +++++ ......+++++ Un grand nombre d'octets aléatoires doit être généré. Vous devriez faire autre-chose (taper au clavier, déplacer la souris, utiliser les disques) pendant la génération de nombres premiers; cela donne au générateur de nombres aléatoires une meilleure chance d'avoir assez d'entropie. ....+++++ +++++ gpg: clé 94821D6C marquée comme ayant une confiance ultime. les clés publique et secrète ont été créées et signées. gpg: vérifier la base de confiance gpg: 3 marginale(s) nécessaires, 1 complète(s) nécessaires, modèle de confiance PGP gpg: profondeur: 0 valide: 3 signé: 0 confiance: 0-. 0g. 0n. 0m. 0f. 3u gpg: la prochaine vérification de la base de confiance aura lieu le 2011-09-30 pub 1024R/94821D6C 2010-09-30 [expire: 2011-09-30] Empreinte de la clé = 6853 34C1 4A74 0A2D 71C7 87BC E494 7233 9482 1D6C uid George Thejungle (GJ) <george@thejungle.org> sub 1024R/F1D4BE56 2010-09-30 [expire: 2011-09-30]
Ajoutons la signature PGP à notre fichier de configuration :
Origin: lol Label: lol's apt Suite: stable Codename: lenny Version: 5.03 Architectures: i386 amd64 source Components: main non-free contrib Description: Your description SignWith: yes
Il faut passer cette commande pour chacun de vos dépôts
Nous ajoutons la clef à nos dépôts :
# reprepro --ask-passphrase -b . export 258FA3EA17101C09 George Thejungle (GJ) <george@thejungle.org> needs a passphrase Please enter passphrase: 258FA3EA17101C09 George Thejungle (GJ) <george@thejungle.org> needs a passphrase Please enter passphrase: 258FA3EA17101C09 George Thejungle (GJ) <george@thejungle.org> needs a passphrase Please enter passphrase: 258FA3EA17101C09 George Thejungle (GJ) <george@thejungle.org> needs a passphrase Please enter passphrase: 258FA3EA17101C09 George Thejungle (GJ) <george@thejungle.org> needs a passphrase Please enter passphrase: 258FA3EA17101C09 George Thejungle (GJ) <george@thejungle.org> needs a passphrase Please enter passphrase: 258FA3EA17101C09 George Thejungle (GJ) <george@thejungle.org> needs a passphrase Please enter passphrase: 258FA3EA17101C09 George Thejungle (GJ) <george@thejungle.org> needs a passphrase Please enter passphrase:
Premier test
Les lignes qui vont bien dans le sources.list:
# mon referenciel perso deb http://nas.zehome.org/debian/ lenny main contrib non-free deb http://nas.zehome.org/debian/ squeeze main contrib non-free deb http://nas.zehome.org/debian/ sid main contrib non-free deb http://nas.zehome.org/debian/ experimental main contrib non-free
# apt-get update (chez un "client") ... 28,3ko réceptionnés en 27s (1 015o/s) Lecture des listes de paquets... Fait W: Erreur de GPG : http://nas.isalo.org lenny Release : Les signatures suivantes n'ont pas pu être vérifiées car la clé publique n'est pas disponible : NO_PUBKEY 258FA3EA17101C09 W: Erreur de GPG : http://nas.isalo.org squeeze Release : Les signatures suivantes n'ont pas pu être vérifiées car la clé publique n'est pas disponible : NO_PUBKEY 258FA3EA17101C09 W: Erreur de GPG : http://nas.isalo.org sid Release : Les signatures suivantes n'ont pas pu être vérifiées car la clé publique n'est pas disponible : NO_PUBKEY 258FA3EA17101C09 W: Erreur de GPG : http://nas.isalo.org experimental Release : Les signatures suivantes n'ont pas pu être vérifiées car la clé publique n'est pas disponible : NO_PUBKEY 258FA3EA17101C09
Nous avons évidemment une erreur de clef GPG...
Pour résoudre cela, nous allons installer un serveur de clef.
Ce serveur aura d'autres fonctions si vous le souhaitez... Échange de clef publiques pour vos mails par exemple...
Installation de OpenSKS
Ajout de la clef GPG à votre serveur SKS
# sks merge /root/mygpg.pub Loading keys... 6 keys loaded, 0 files left DB time: 0.00 min. Total time: 0.00 min.
# sks cleandb # service sks restart Stopping sks daemons: sksrecon.. sksdb.. done. Starting sks daemons: sksdb.. sksrecon.. done.
Test chez un client
Client :
# gpg --keyserver hkp://nas.isalo.org --recv-keys 258FA3EA17101C09 gpg: requête de la clé 17101C09 du serveur hkp nas.isalo.org gpg: clé 17101C09: clé publique « George Thejungle (GJ) <george@thejungle.org> » importée gpg: Quantité totale traitée: 1 gpg: importée: 1 (RSA: 1) # gpg -a --export 17101C09 | sudo apt-key add - OK
Faire du "mirroring" avec reprepro
La possibilité de faire du "mirroring" partiel ou total est une des fonctions extrêmement pratiques de reprepro.
Dans votre fichier /var/www/debian/conf/distributions
Origin: lol Label: lol's apt Suite: testing Update: squeeze Codename: squeeze Architectures: i386 amd64 source Components: main non-free contrib Description: Your description SignWith: yes
Ajoutez la ligne Update: squeeze
Créez un fichier /var/www/debian/conf/updates contenant ceci :
Name: squeeze Method: http://ftp.fr.debian.org/debian/ Suite: squeeze Components: main Architectures: amd64 source FilterFormula: Priority (==required)
Je vous renvoie au man pour plus de précisions. Le fichier ci-dessus fera un téléchargement des deb de squeeze (amd64 et source) pour une installation minimale (Priority (==required)
Il suffit ensuite de lancer la commande suivante :
# reprepro -V update squeeze Created directory "./lists" Warning: No VerifyRelease line in 'squeeze' or any rule it includes via 'From:'. Release.gpg cannot be checked unless you tell which key to check with. (To avoid this warning and not check signatures add 'VerifyRelease: blindtrust'). aptmethod got 'http://ftp.fr.debian.org/debian/dists/squeeze/Release' aptmethod got 'http://ftp.fr.debian.org/debian/dists/squeeze/main/binary-amd64/Packages.bz2' Uncompress './lists/squeeze_squeeze_main_amd64_Packages.bz2' into './lists/squeeze_squeeze_main_amd64_Packages'... aptmethod got 'http://ftp.fr.debian.org/debian/dists/squeeze/main/source/Sources.bz2' Uncompress './lists/squeeze_squeeze_main_Sources.bz2' into './lists/squeeze_squeeze_main_Sources'... Calculating packages to get... nothing to do for 'squeeze|contrib|source' nothing to do for 'squeeze|contrib|amd64' nothing to do for 'squeeze|contrib|i386' nothing to do for 'squeeze|non-free|source' nothing to do for 'squeeze|non-free|amd64' nothing to do for 'squeeze|non-free|i386' processing updates for 'squeeze|main|source' reading './lists/squeeze_squeeze_main_Sources' processing updates for 'squeeze|main|amd64' reading './lists/squeeze_squeeze_main_amd64_Packages' nothing to do for 'squeeze|main|i386' Created directory "./pool" Created directory "./pool/main" ...
De la lecture
https://www.memolinux.info/doku.php?id=unix:systeme:reprepro
http://guilhem.toile-libre.org/tutoriels/depot_debian.html
http://mirrorer.alioth.debian.org/reprepro.1.html
http://www.debian-administration.org/articles/286
http://www.jejik.com/articles/2006/09/setting_up_and_managing_an_apt_repository_with_reprepro/
Lol 1 octobre 2010 à 10:38 (EAT)