Il suffit de configurer un référentiel simple mais signé sur un serveur Web. Étant donné que la plupart des autres didacticiels sont quelque peu datés ou encombrants, je vais essayer de reproduire la procédure ici. La configuration initiale demande un peu d’effort, mais le script de construction simple le garde facile à gérer. Et vous pouvez simplement déposer les nouveaux fichiers *.deb
, puis les mettre à jour ou laisser une tâche cron gérer cela.
Générer des clés de signature
Vous devez d'abord créer une clé de signature gpg
pour les packages et votre référentiel. Faites-en une clé de signature (4) RSA, sans mot de passe, et donnez-lui un $KEYNAME
unique lorsque demandé. (D'autres exemples supposent " dpkg1
" comme nom principal.)
gpg --gen-key
gpg -a --export-secret-key dpkg1 > secret.gpg
gpg -a --export dpkg1 > public.gpg
Je n'ai pas dit de mot de passe, car votre serveur Web ne possède pas de singe intégré pour le taper à plusieurs reprises. Et les packages signés et le référentiel ne sont destinés qu'à satisfaire les plaintes des gestionnaires de mises à jour à ce sujet. Il vous suffit de télécharger les deux clés dans le nouveau répertoire de référentiel /apt/
sur votre serveur Web, mais de supprimer l'initialisation de la clé secret.gpg
après .
Mise à jour du script CGI
Il s’agit du script shell / CGI simple de mise à jour:
#!/bin/sh
echo Status: 200 Okay
echo Content-Type: text/plain
echo
echo Rebuilding APT repository:
{
#-- settings
export GNUPGHOME=/var/www/usr12345/files
export KEYNAME=dpkg1
#-- one-time setup
if [ ! -e "$GNUPGHOME/secring.gpg" ] ; then
gpg --import -v -v ./secret.gpg
gpg --import -v -v ./public.gpg
gpg --list-keys
fi
#-- symlink .deb files from adjacent sub-directories
find .. -name '*.deb' -exec ln -s '{}' . \;
#-- build Packages file
apt-ftparchive packages . > Packages
bzip2 -kf Packages
#-- signed Release file
apt-ftparchive release . > Release
gpg --yes -abs -u $KEYNAME -o Release.gpg Release
} 2>&1
Les trois lignes gpg
doivent être exécutées une seule fois pour initialiser la configuration GPG dans un répertoire $GNUPGHOME
(au-dessus de la racine du document). Supprimez uniquement le secret.gpg
après le succès.
Une caractéristique unique de ce petit script shell est qu'il accepte tous les fichiers *.deb
que vous déposez, mais recherche également de manière récursive (à partir d'un niveau supérieur) pour les autres, et les connecte symétriquement (Needs .htaccess Options FollowSymLinks
éventuellement.)
Vous pouvez soit exécuter ce script manuellement en tant que CGI ou par cron-job. Mais cachez-le ou mieux encore déplacez-le hors de la racine du document.
Comme il s’agit d’un référentiel apt "trivial", il a besoin de l’entrée apt-sources.list
suivante:
deb http://example.org/deb/ ./ # Simple signed repo
Cela convient aux référentiels à architecture unique et si vous n’attendez pas des centaines de paquets.
Signature du paquet
La signature de vos paquets individuels est également triviale, une fois que vous avez configuré vos clés gpg:
dpkg-sig -k dpkg1 -s builder *.deb
(Cela doit être fait sur le poste de travail sur lequel les packages sont créés, pas sur le serveur Web du référentiel.)
Dépôt non signé
Si vous n'avez pas besoin de packages signés, vous pouvez réduire le script de mise à jour à seulement:
dpkg-scanpackages . > Packages
bzip2 -kf Packages
Qui peut encore être utilisé par les utilisateurs moyens, mais nécessite un indicateur personnalisé pour apt.sources
:
deb [trusted=yes] http://apt.example.org/deb/ ./
S'il vous plaît, n'utilisez pas le drapeau trusted=yes
pour tout, ou si vous n'êtes pas sûr de l'origine du paquet.
Pour la facilité d'utilisation
Pour les utilisateurs finaux, déposez simplement un HEADER.html
dans le répertoire du référentiel. Apaches mod_auto_index
ajoutera cette note:
<h1>http://example.org/apt/</h1>
<dl>
<dt>Add this repository to /etc/apt/sources.list as:
<dd><kbd>deb http://example.org/apt/ ./ # example repo</kbd>
<dt>Import verification key with:
<dd><kbd>wget -q http://http://example.org/apt/public.gpg -O- | sudo apt-key add -</kbd>
</dl>
Alternatives
Il existe quelques outils pour automatiser la gestion des référentiels de nos jours. Et il existe même des hébergeurs en ligne de référentiels et des services de création de paquets ( gemfury , packagecloud , bintray , etc.)
-
Une alternative plutôt pratique est prm . C'est un script Ruby, qui construit des repos complexes APT et YUM. (Mais espérons que RPM finira par disparaître bientôt…) - Il est préférable de l'installer par gem install prm
.
-
Et j'ai également écrit un petit script pour automatiser cela de la même manière: lien - Merci de ne pas qu'il n'est pas trop robuste et écrit en PHP (pour une fois, c'est une coïncidence), et qu'il était à l'origine destiné aux ensembles DEB, RPM-over-APT et Phar.
Comme ceci est étroitement lié à la question initiale, il existe également des outils pour créer plus facilement des paquets Debian. Quelque peu dépassé: EPM . Beaucoup plus contemporain: FPM . Et ma fourchette personnelle: XPM (approche plus paresseuse du packaging d’applications de langage de script).