Comment configurer un référentiel APT?

49

J'aimerais installer un référentiel APT sur un serveur qui fournira quelques paquets.

Existe-t-il un moyen d’en installer un sans installer un logiciel sur le serveur?

Comment les fichiers doivent-ils être organisés?

Modifier: Je dois faire quelque chose de mal ... quelqu'un peut-il m'aider s'il vous plaît? J'ai le dépôt à lien

Je ne sais pas où ni quoi, mais quelque chose est mal configuré. Je n’ai pour le moment qu’un seul package pour toutes les architectures.

Voici ce qui a été ajouté à mon /etc/apt/sources.list :

deb http://quickmediasolutions.com/apt stable main
    
posée Nathan Osman 31.07.2010 - 02:33
la source

5 réponses

25

Configurer un dépôt trivial est très facile avec dpkg-scanpackages. Cette page explique comment configurer un référentiel trivial, et celui-ci explique comment l'utiliser (faites défiler jusqu'à l'exemple 4).

    
réponse donnée mac9416 31.07.2010 - 02:55
la source
37

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

    
réponse donnée mario 22.12.2011 - 09:35
la source
7

Oui. Tu peux le faire. Il vous suffit d'organiser les fichiers de la bonne manière et de créer les fichiers d'index. Si vous placez la structure de répertoire dans la racine du document de votre serveur Web, vous pouvez 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 comment 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.

    
réponse donnée txwikinger 31.07.2010 - 02:44
la source
2

Vous pouvez peut-être aussi envisager un PPA Launchpad

    
réponse donnée ups 31.07.2010 - 13:23
la source
0

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)

procédez comme 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 .

    
réponse donnée theeminence 25.01.2016 - 08:05
la source

Lire d'autres questions sur les étiquettes