Il suffit de configurer un référentiel simple mais signé sur un serveur Web. Étant donné que la plupart des autres didacticiels sont un peu obsolètes ou fastidieux, je vais essayer de reproduire la procédure ici. La configuration initiale prend un peu d'effort, mais le script de construction simple facilite la gestion. Et vous pouvez simplement déposer de nouveaux *.deb
fichiers, puis mettre à jour ou laisser un travail cron le gérer.
Générer des clés de signature
Vous devez d’abord créer une gpg
clé de signature pour les packages et votre référentiel. Faites-en une (4) clé de signature RSA, sans mot de passe, et donnez-lui une clé unique $KEYNAME
lorsque demandé. (D'autres exemples supposent " dpkg1
" comme nom clé.)
gpg --gen-key
gpg -a --export-secret-key dpkg1 > secret.gpg
gpg -a --export dpkg1 > public.gpg
J'ai dit pas de mot de passe, parce que votre serveur web n'a pas de singe intégré pour le taper à plusieurs reprises. Et les packages et le référentiel signés sont uniquement destinés à satisfaire les plaintes des responsables de la mise à jour à ce sujet. Il suffit de télécharger les deux clés dans le nouveau /apt/
répertoire du référentiel sur votre serveur Web, mais de supprimer la secret.gpg
clé après l’ initialisation.
Mettre à jour le script CGI
Voici le script shell / CGI de mise à jour simple:
#!/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 gpg
lignes ne doivent être exécutées qu'une seule fois pour initialiser la configuration de GPG dans un répertoire $GNUPGHOME
(au-dessus de la racine du document). Ne supprimez que les secret.gpg
succès ultérieurs.
Une caractéristique unique de ce petit script shell est qu’il accepte tous les *.deb
fichiers dans lesquels vous déposez des fichiers, mais recherche également de manière récursive (à partir du niveau supérieur) les autres, puis les relie par un lien symbolique Options FollowSymLinks
.
Vous pouvez exécuter ce script manuellement en tant que CGI ou par tâche cron. 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' apt-sources.list
entrée suivante :
deb http://example.org/deb/ ./ # Simple signed repo
Cela convient aux référentiels à architecture unique, et si vous ne vous attendez pas à des centaines de paquets.
Signature de colis
Signer vos paquets individuels est également trivial, une fois que vous avez configuré vos clés gpg:
dpkg-sig -k dpkg1 -s builder *.deb
(Cette opération doit être effectuée sur le poste de travail sur lequel les packages sont générés, et non sur le serveur Web du référentiel.)
Référentiel non signé
Si vous n'avez pas besoin de packages signés, vous pouvez alors réduire le script de mise à jour à:
dpkg-scanpackages . > Packages
bzip2 -kf Packages
Qui peut toujours être utilisé par les utilisateurs moyens, mais nécessite un indicateur personnalisé pour apt.sources
:
deb [trusted=yes] http://apt.example.org/deb/ ./
Mais s'il vous plaît, n'utilisez pas le trusted=yes
drapeau habituellement pour tout, ou si vous n'êtes pas sûr de l'origine du paquet.
Pour la facilité d'utilisation
Pour les utilisateurs finaux, il suffit de déposer un HEADER.html
dans le répertoire du référentiel. Les Apaches mod_auto_index
ajouteront 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>
Des alternatives
De nos jours, il existe quelques outils pour automatiser la gestion des référentiels. Et il existe même des hébergeurs en ligne et des services de construction de paquets ( gemfury , packagecloud , bintray, etc.)
Une alternative plutôt pratique est prm . C'est un script Ruby, qui construit des pensions complexes APT et YUM. (Mais espérons simplement que RPM s'éteindra bientôt dans un instant ..) - Il vaut mieux l'installer gem install prm
.
Et j'ai aussi écrit un petit script pour automatiser cela de la même façon: http://apt.include-once.org/apt-phparchive - S'il vous plaît, notez qu'il n'est pas trop robuste et écrit en PHP (pour une fois, c'est une coïncidence), et était à l'origine destiné aux ensembles DEB, et RPM-over-APT et Phar.
Étant donné que cela est étroitement lié à la question initiale, il existe également des outils permettant de créer plus facilement des paquets Debian. Un peu dépassé: EPM . Beaucoup plus contemporain: FPM . Et ma fourchette personnelle: XPM (approche plus paresseuse pour empaqueter des applications en langage de script.)