Je souhaite configurer un référentiel APT sur un serveur qui fournira plusieurs packages.
Existe-t-il un moyen d'en créer un sans installer de logiciel sur le serveur?
Comment les fichiers doivent-ils être organisés?
Edit: Je dois faire quelque chose de mal ... quelqu'un peut-il m'aider s'il vous plaît? J'ai le référentiel sur http://quickmediasolutions.com/apt/dists
Je ne sais pas où ni quoi, mais quelque chose est mal configuré. Je n'ai actuellement qu'un seul paquet et c'est pour toutes les architectures.
Voici ce qui a été ajouté à mon /etc/apt/sources.list
:
deb http://quickmediasolutions.com/apt stable main
La configuration d'un référentiel trivial est très simple avec dpkg-scanpackages. Cette page explique comment configurer un référentiel trivial et celui-ci explique comment l'utiliser (défilez jusqu'à l'exemple 4).
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 lourds, 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 fichiers *.deb
, puis les mettre à jour ou laisser un travail cron les gérer.
Vous devez d’abord créer une clé de signature gpg
pour les packages et votre référentiel. Faites-en une (4) clé de signature RSA, sans mot de passe, et attribuez-lui un $KEYNAME
unique 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 réclamations des responsables de la mise à jour à ce sujet. Téléchargez simplement les deux clés dans le nouveau répertoire de référentiel /apt/
sur votre serveur Web, mais supprimez la clé secret.gpg
après l’initialisation .
Voici le script simple Shell/CGI pour la 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
n'ont besoin d'être exécutées qu'une seule fois pour initialiser la configuration du groupe de personnalisation grand public 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 du niveau supérieur) les autres, puis crée un lien symbolique entre eux. (Nécessite .htaccess Options FollowSymLinks
à la fin.)
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'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 ne vous attendez pas à des centaines de paquets.
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.)
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 n'utilisez pas l'indicateur trusted=yes
pour tout, ou si vous n'êtes pas sûr du paquet Origin.
Pour les utilisateurs finaux, déposez simplement 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>
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 paquetages ( gemfury , packagecloud , bintray etc.)
Une alternative plutôt pratique est prm . Il s’agit d’un script Ruby, qui construit des dépôts complexes APT et YUM. (Mais espérons simplement que RPM disparaîtra bientôt dans un instant ..) - Il est préférable de l’installer par gem install prm
.
Et j'ai aussi écrit un petit script pour automatiser cela de la même manière: 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 de contenu: FPM . Et ma fourchette personnelle: XPM (approche plus paresseuse pour l’emballage d’applications de langage de script.)
Oui. Tu peux le faire. Vous avez juste besoin d'organiser les fichiers de la bonne manière et de créer les fichiers d'index. Si vous placez la structure de répertoires à la racine du document de votre serveur Web, vous pouvez uniquement accéder aux packages via le serveur Web.
Ici est une description détaillée de la manière dont les fichiers doivent être organisés et de la manière dont les fichiers d'index sont créés.
Vous pouvez également utiliser un outil appelé reprepro si vous souhaitez installer ce package. Cela rendra l'administration un peu plus pratique.
Vous pouvez peut-être aussi envisager un Launchpad PPA
Pour toute personne confrontée à cette erreur après avoir suivi la réponse de Mario:
Unable to find expected entry 'Packages' in Release file (Wrong sources.list entry or malformed file)
faire ce qui suit:
dpkg-scanpackages debs /dev/null > Packages
gzip -k Packages
apt-ftparchive release . > Release
gpg --default-key $KEYID -abs -o Release.gpg Release
Je mets mes fichiers *.deb
dans le dossier debs
.