web-dev-qa-db-fra.com

Comment configurer un référentiel APT?

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
52
Nathan Osman

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).

26
Michael Crenshaw

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.

Générer des clés de signature

Vous devez d’abord créer une clé de signature gpgpour 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 .

Mettre à jour le script CGI

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 gpgn'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.

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 n'utilisez pas l'indicateur trusted=yes pour tout, ou si vous n'êtes pas sûr du paquet Origin.

Pour la facilité d'utilisation

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>

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 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.)

40
mario

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.

7
txwikinger

Vous pouvez peut-être aussi envisager un Launchpad PPA

2
ups

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.

0
theeminence