Il suffit de mettre en place un dépôt simple mais signé sur un serveur web. Comme la plupart des autres tutoriels sont quelque peu dépassés ou encombrants, je vais essayer de reproduire la procédure ici. La configuration initiale demande un peu d'effort, mais le simple build script permet de le gérer facilement. Et vous pouvez simplement déposer de nouveaux *.deb
puis mettre à jour, ou laisser une tâche cron s'en charger.
Générer des clés de signature
Vous devez d'abord créer un gpg
clé de signature pour les paquets et votre référentiel. Faites-en une clé de signature RSA (4), sans mot de passe, et donnez-lui un nom unique $KEYNAME
quand on le demande. (Pour d'autres exemples, voir " dpkg1
" comme nom de 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 paquets et le dépôt signés sont seulement destinés à satisfaire les plaintes des gestionnaires de mise à jour à ce sujet. Il suffit de télécharger les deux clés vers le nouveau /apt/
sur votre serveur web, mais supprimez le fichier secret.gpg
clé après l'initialisation.
Mise à jour du CGI script
C'est la simple mise à jour Shell/CGI Shell pour cela :
#!/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
ne doivent être exécutées qu'une seule fois, pour initialiser la configuration GPG dans un répertoire quelconque. $GNUPGHOME
(au-dessus de la racine du document). Ne supprimez que le secret.gpg
après le succès.
L'une des caractéristiques uniques de ce petit Shell Shell est qu'il accepte n'importe quel *.deb
que vous déposez, mais recherche aussi récursivement (en commençant par un niveau supérieur) d'autres fichiers, et les intègre par des liens symboliques. (Nécessite .htaccess Options FollowSymLinks
éventuellement.)
Vous pouvez soit exécuter ce script manuellement comme CGI ou par cron-job. Mais cachez-le, ou mieux encore, déplacez-le hors de la racine du document.
Parce que c'est un dépôt apt "trivial", il a besoin des éléments suivants apt-sources.list
entrée :
deb http://example.org/deb/ ./ # Simple signed repo
Cela convient aux dépôts à 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 la station de travail où les paquets sont construits, et non sur le serveur web du référentiel).
Référentiel non signé
Si vous n'avez pas besoin de paquets signés, alors vous pouvez réduire la mise à jour script à juste :
dpkg-scanpackages . > Packages
bzip2 -kf Packages
Ce qui peut toujours être utilisé par les utilisateurs moyens, mais nécessite un drapeau personnalisé pour les éléments suivants apt.sources
:
deb [trusted=yes] http://apt.example.org/deb/ ./
Mais n'utilisez pas le trusted=yes
pour tout, ou si vous n'êtes pas sûr de l'origine du paquet.
Pour la convivialité
Pour les utilisateurs finaux, il suffit de déposer un HEADER.html
dans le répertoire du référentiel. Apaches mod_auto_index
précédera cette note :
<h1>http://example.org/apt/</h1>
<dl>
<dt>Add this repository to /etc/apt/sources.list as:
<dd>deb http://example.org/apt/ ./ # example repo
<dt>Import verification key with:
<dd>wget -q http://http://example.org/apt/public.gpg -O- | sudo apt-key add -
</dl>
Alternatives
Il existe aujourd'hui quelques outils permettant d'automatiser la gestion des référentiels. Et il existe même des hébergeurs de référentiels en ligne et des services de construction de paquets ( gemfourrure , nuage de colis , bintray etc.)
-
Une alternative plutôt pratique est prm . C'est un script Ruby, qui construit des dépôts APT et YUM complexes. (Mais espérons que RPM disparaîtra bientôt ) - Il est mieux installé par gem install prm
.
-
Et j'ai également écrit un petit script pour automatiser cela de manière similaire : http://apt.include-once.org/apt-phparchive - Veuillez noter qu'il n'est pas excessivement robuste et qu'il est écrit en PHP (pour une fois, c'est une coïncidence), et qu'il était à l'origine destiné à DEB, et aux paquets RPM-over-APT et Phar.
Comme cela est étroitement lié à la question initiale, il existe également des outils permettant de construire plus facilement des paquets Debian. Un peu dépassé : EPM . Beaucoup plus contemporain : FPM . Et ma fourchette personnelle : XPM (approche plus paresseuse pour l'empaquetage des applications en langage de script).