Comment créer rapidement un référentiel apt local pour des paquets aléatoires en utilisant une distribution Linux basée sur Debian?

20

Certaines situations nécessitent l'installation manuelle d'un package local à l'aide de dpkg -i <packagename>. Parfois, il peut être utile de tirer parti des fonctionnalités de aptce package, de sorte que la question est:

Comment créer rapidement un référentiel local pour des paquets aléatoires en utilisant une distribution Linux basée sur Debian - comme Xubuntu 13.04 / Ubuntu?


la source
Juste FYI. La chose habituelle est de suivre dpkg -i <packagename>avec apt-get -f installpour récupérer les packages requis. De plus, la chose habituelle pour créer un dépôt apt pour Debian est reprepro.
Faheem Mitha
J'ai trouvé reprepro utile
Gilles 'SO- arrête d'être méchant'
Merci pour vos commentaires. @Faheem Mitha: pouvez-vous s'il vous plaît expliquer brièvement pourquoi exécuter aptavec --fix-brokenserait nécessaire après l'installation d'un package local avec dpkg -i? Dpkg ne s'en occuperait-il pas? J'ai lu que cela pourrait être nécessaire la première fois qu'apt est exécuté? @ FM & Gilles: A propos de reprepro . Semble utile si je pouvais le faire fonctionner (pas sûr de la structure du dir, du contenu de 3 fichiers ou des paramètres au moment de l'exécution). Je vais réessayer et mettre à jour ou poster une question complète.
1
@ illuminÉ: dpkgne résout pas les dépendances, mais le aptfait. dpkgavertira des dépendances cassées, mais est de bas niveau, donc ne tentera pas de les réparer. La procédure dpkg -i *.debsuivie apt-get -f installest standard. Il y a un bogue de liste de souhaits pour aptgérer lui - même le cas de l'installation de paquets locaux, et il y a même un correctif, je pense, mais il n'a pas encore été implémenté. Voir apt-get install pourrait également installer des fichiers de packages locaux , initialement déposés en 1999.
Faheem Mitha
@ illuminÉ Exprimer son intérêt pour cette fonctionnalité ne fera pas de mal. Je pense que plus il y a de gens qui expriment (poliment) leur intérêt, plus il est probable qu'il sera mis en œuvre. Notez également que gdebi est une alternative, comme indiqué dans le rapport de bogue. C'est en partie la raison pour laquelle il n'a pas été mis en œuvre, je pense. Bien qu'une telle fonctionnalité de base fasse partie d'apt, ce serait mieux que d'avoir cette fonctionnalité dans le cadre d'un autre package.
Faheem Mitha

Réponses:

29

Cela doit être distingué de la situation où vous essayez de répliquer une arborescence de packages complète à partir d'un référentiel officiel et d' une priorité de réglage fin des sources . Les packages aléatoires désignent les packages virtuels, les packages qui sont compilés localement ou copiés de manière fragmentaire à des fins de test. Voici une configuration simple basée sur une documentation désormais obsolète .

Créez d'abord un répertoire pour héberger les packages:

mkdir <packagedir>

Déplacez-y ensuite vos fichiers de package .deb. Exécutez cette commande à partir du répertoire au-dessus de celui que nous venons de créer (assurez-vous que les autorisations le permettent!):

dpkg-scanpackages packagedir | gzip > packagedir/Packages.gz

Maintenant , créez un fichier avec l' extension .listdans /etc/apt/sources.list.d/le contenu:

deb [trusted=yes] file:///path_to_dir_above_packagedir packagedir/

et mettre à jour la base de données apt:

apt-get update

À ce stade, les packages de notre référentiel local peuvent être installés comme tout autre package utilisant apt-get install <packagename>. Lorsque de nouveaux packages sont ajoutés au référentiel local, la dpkg-scanpackagescommande prescrite doit être émise à nouveau pour mettre à jour le fichier Packages.gz et aptdoit être mise à jour avant que les nouveaux packages soient disponibles. J'espère que cela peut être utile à des fins de test .

utilisateur44370
la source
6
Avec le nouvel apt 1.1, il faut [trusted=yes]entre debet l' file:///URI (voir la sources.list(5)page de manuel), sinon apt-get updateéchoue à cause du manque de signature.
vinc17
2

Si vous souhaitez créer un dépôt avec la structure complète dont vous avez besoin pour des outils tels que debootstrap, la manière la plus simple que j'ai trouvée est:

  1. Créez un répertoire de référentiel.

    # mkdir -p /opt/debian
    
  2. Créez un sous-répertoire conf.

    # mkdir /opt/debian/conf
    
  3. Créez un fichier / opt / debian / conf / distributions avec un contenu comme celui-ci (ajustez selon la distribution que vous utilisez):

    Label: Local APT repository
    Codename: jessie
    Architectures: amd64
    Components: main
    Description: Local APT repository for debootstrap
    
  4. Importez votre colis avec reprepro.

    # reprepro -b /opt/debian includedeb jessie /path/to/package.db
    
  5. Importez un tas de paquets avec une boucle for-shell, par exemple tout depuis votre cache APT:

    # cd /var/cache/apt/archives
    # for DEB in *.deb; do reprepro -b /opt/debian includedeb jessie $DEB; done
    

Cela créera une archive non signée. Il peut être utilisé avec debootstrap avec l'option --no-check-gpg.

Andrew Klaassen
la source