web-dev-qa-db-fra.com

Attribuer la priorité la plus haute à mon référentiel local

Résumé

Comment faire en sorte qu'apt-get préfère les paquets de référentiels locaux au lieu de télécharger à nouveau la même version de paquet depuis les référentiels officiels? Le référentiel local est signé et approuvé. Nous avons déjà essayé la priorité avec les préférences apt.


La question initiale était: "Comment attribuer la priorité la plus élevée au référentiel local sans utiliser le fichier sources.list"

J'ai configuré un référentiel local avec les packages que j'ai téléchargés. Je l'utilise pour éviter de télécharger les mêmes packages sur Internet, lorsque je dois réinstaller Ubuntu. C'est un référentiel de base, créé avec apt-ftparchive packages . > Packages. J'ai fait de cela un référentiel de confiance pour éviter l'avertissement "référentiel non authentifié". ( Lorsque vous avez un référentiel non approuvé, apt ou synaptic tentez de télécharger les mêmes packages sur Internet, car il est approuvé ).

J'utilise ce référentiel local depuis au moins 1 ans. Mais je dois toujours mettre ma ligne de référentiel local en haut du fichier sources.list pour l'utiliser. Mais c’est ennuyeux, car je dois ouvrir un terminal et taper dessus chaque fois que je réinstalle Ubuntu, bien qu’il existe un meilleur outil, software-properties-gtk. Je ne peux pas utiliser cet outil car il place la ligne source à la fin de `sources.list.

Et le problème réel est que, le apt ou le synaptic télécharge toujours un paquet à partir de la source mentionnée précédemment, sans vérifier si les paquetages sont déjà disponibles dans le référentiel local. Donc, je n'ai pas d'autre choix que de placer la source locale au sommet de sources.list faisant terminal (en fait, je ne déteste pas le terminal, mais j'ai besoin d'une solution).

J'ai essayé cette méthode . Mais cela ne m'aide pas.

Mon fichier de préférence est-ce dans /etc/apt/preferences.d/local-pin-900

    Package: *
    Pin: release o=Local,n=ubuntu-local
    Pin-Priority: 900

Mon dossier de sortie est ceci

    Origin: Local
    Label: Local-Ubuntu
    Description: Local Ubuntu Repository
    Codename: ubuntu-local
    MD5Sum:
     ed43222856d18f389c637ac3d7dd6f85          1043412 Packages
     d41d8cd98f00b204e9800998ecf8427e                0 Sources

Lorsque j'active la préférence apt, le apt-cache policy affiche correctement la préférence, par exemple. Il montre que le référentiel local a la priorité la plus élevée.

Mais lorsque je fais ceci, Sudo apt-get install <package-name>, apt essaie de le télécharger à partir d’Internet. Mais lorsque je place mon référentiel local en haut, il s’installe à partir du référentiel local.

Donc, Ma question est -> 'Est-il possible de forcer apt à utiliser le référentiel local lorsque le package est disponible dans le référentiel local, sans placer explicitement "le source locale "en haut de ma liste de référentiels (par exemple, le fichier sources.list)? '

Edit: la sortie de apt-cache policy $package_name est la suivante

  
 nautilus-wipe: 
 installé: (aucun) 
 candidat: 0.1.1-2 
 Tableau des versions: 
 0.1.1-2 0 
 500 http://archive.ubuntu.com/ubuntu/ precise/universe i386 Packages 
 Fichier 900:/media/Main/Logiciel-Linux/Ubuntu/Precise/Packages 

Cela montre que mon référentiel local a une préférence plus élevée, bien que ce ne soit pas celui qui arrive en premier dans le fichier sources.list.

Voici le résultat de apt-get install nautilus-wipe

 Lecture des listes de paquets ... Terminé 
 Création d'un arbre de dépendance 
 Lecture des informations d'état ... Terminé 
 Les nouveaux packages suivants seront installés: 
 nautilus-wipe 
 0 mis à niveau, 1 nouvellement installé, 0 à supprimer et 131 non mis à niveau. 
 Besoin d’obtenir 30,7 Ko d’archives. 
 Après cette opération, 150 ko de disque supplémentaire l'espace sera utilisé. 
 'http://archive.ubuntu.com/ubuntu/pool/universe/n/nautilus-wipe/nautilus-wipe_0.1.1-2_i386.deb' nautilus-wipe_0.1.1-2_i386 .deb 30730 MD5Sum: 7d497b8dfcefe1c0b51a45f3b0466994 

Il essaie toujours d'obtenir le fichier d'Internet, même si je pense qu'il devrait être satisfait du fichier local.


Résultat de l'utilisation de "" ou de localhost en tant que mediageek suggéré

Utiliser localhost n'a aucun effet. mais "" a mais n'était pas différent de ma méthode

    Package: *
    Pin: Origin ""
    Pin-Priority: 1001

Je les ai utilisés avant de poster la question. Mais encore une fois j'ai essayé cela (pour surity). Le même résultat. apt-cache policy montrant que mon référentiel local a bien la priorité la plus haute. mais quand j'ai essayé de l'installer il dit "Besoin d'obtenir XXX/XXX Ko d'archive".

39
Anwar

La réponse courte:

Le fichier de préférences APT// etc/apt/preferences peut être utilisé pour contrôler les versions des packages à sélectionner pour l'installation.

Voici le fichier /etc/apt/preferences, que apt-get utilise pour décider quelle version il doit sélectionner s'il existe plusieurs versions d'un même paquet. Avec cela, tout paquet provenant du référentiel local aura priorité sur les autres paquets.

 Paquet: * 
 Épingle: origine "" 
 Épingle-priorité: 1001 

Ceci ne contrôlera pas la version, mais la préférence source si les deux packages ont la même version. Si vous devez attribuer la priorité la plus élevée au même package version de votre référentiel local, répertoriez-les en haut dans le fichier /etc/apt/sources.list>

Réponse à la question initiale:

Comment attribuer la priorité la plus élevée au référentiel local sans utiliser le fichier sources.list?

Il n’existe aucun moyen d’attribuer la priorité la plus élevée au référentiel local sans utiliser le fichier sources.list. vous devez les placer en haut de "sources.list" si vous souhaitez attribuer la priorité la plus élevée à votre référentiel local.

Réponse sommaire à cette question:

Comment faire en sorte qu'apt-get préfère les paquets de référentiels locaux au lieu de télécharger à nouveau la même version de paquet depuis les référentiels officiels? Le référentiel local est signé et approuvé. Nous avons déjà essayé la priorité avec les préférences apt.

À l'aide du fichier /etc/apt/sources.list, vous devez placer la ligne de votre référentiel local en haut de ce fichier. comme ci-dessous.

 deb cdrom: [Kubuntu 12.04 LTS _Precise Pangolin_ - Release i386 (20120424)]/precise principale restreinte 
 deb fichier:/media/Main/Precise-Debs-New /
dedeb fichier:/media/Principal/Logiciel-Linux/Ubuntu/Précis /[.____. Printer.Fr.de.de. http://archive.ubuntu.com/ubuntu univers précis multivers principal restreint #Added by software-properties 
 
 # deb cdrom: [Xubuntu 12.04 LTS _Precise Pangolin_ - Version i386 (20120423.1)]/Précis principal univers multivers restreint 
 # deb cdrom: [Ubuntu 12.04 LTS _Precise Pangolin_ - Version i386 (20120423)]/précis principal 
 
 # deb http: //archive.canonical .com/ubuntu partenaire précis 
 # deb-src http://archive.canonical.com/ubuntu partenaire précis 
 # deb http://extras.ubuntu.com/ubuntu precise 
 # deb-src http://extras.ubuntu.com/ubuntu précis principal 
 

Et oui, "apt_preference" n'a rien à voir avec la sélection d'instances des paquets avec la même version. Le point ici est que vous ne pouvez pas utiliser le fichier /etc/apt/preference pour forcer la sélection/l’utilisation d’un fichier .deb à partir de votre référentiel local en attribuant la priorité la plus élevée à votre référentiel local. Ce fichier (préférence) est utilisé pour sélectionner une version spécifique et non une instance spécifique (fichier .deb) de la même version. Dans ce dernier cas, vous devez utiliser le fichier /etc/apt/sources.list avec la méthode susmentionnée.


Explication:

On dirait que nous avons tous mal compris l'objectif apt_preference, le manuel apt_preference le décrit dans les 3 premiers paragraphes!

Le fichier de préférences APT// etc/apt/preferences peut être utilisé pour contrôler les versions des packages à sélectionner pour l'installation.

Plusieurs versions d'un package peuvent être disponibles pour l'installation lorsque le fichier sources.list (5) contient des références à plusieurs distributions (par exemple, stable et testing). APT attribue une priorité à chaque version disponible. Avec les contraintes de dépendance, apt-get (8) sélectionne la version avec la priorité la plus élevée pour l’installation. Le fichier de préférences APT remplace les priorités que APT attribue par défaut aux versions de package, donnant ainsi à l'utilisateur le contrôle sur celle qui est sélectionnée pour l'installation.

Et le très important est dans le troisième paragraphe

Plusieurs instances de la même version d'un package peuvent être disponibles lorsque le fichier sources.list (5) contient des références à plusieurs sources. Dans ce cas , apt-get (8) télécharge l'instance la plus ancienne dans le fichier sources.list (5). Le fichier de préférences APT n'affecte pas le choix de l'instance, mais seulement celui de la version .

Ces italiques ont été faites par le mien

Voyons cela avec un exemple:

J'ai la version précise de compiz-fusion-plugins-extra, mais je l'ai désactivée pour la démonstration

Voici le fichier /etc/apt/preferences, que apt-get utilise pour décider quelle version il doit sélectionner s'il existe plusieurs versions d'un même paquet. (Dans cet exemple, compiz-fusion-plugins-extra a plusieurs versions.

 Paquet: * 
 Épingle: origine "" 
 Épingle-priorité: 1001 

Ce fichier indique apt-get à installer à partir du référentiel local pour tous les packages ayant plusieurs versions existant dans un référentiel différent.

En d'autres termes, si j'ai le paquet xapps avec la version 1.0 dans mon référentiel local et que ce même paquet xapps existe dans le référentiel de Precise avec la version supérieure, disons 2.0, apt-get préférera la version du référentiel local, la version 1.0.

Voici mon fichier /etc/apt/sources.list

 deb http://archive.ubuntu.com/ubuntu univers principal précis multivers restreint 
 deb-src http://archive.ubuntu.com/ubuntu univers précis multivers restreint #Added by software -properties 
 deb http://security.ubuntu.com/ubuntu/ univers précis-sécurisé principal multivers restreint 
 deb http://archive.ubuntu.com/ubuntu univers précis-mises à jour multivers principal restreint 
 deb http://archive.ubuntu.com/ubuntu univers précis-backports principal multivers restreint 
 
 # deb http://archive.canonical.com/ubuntu partenaire précis 
 # deb-src http://archive.canonical.com/ubuntu partenaire précis 
 # deb http://extras.ubuntu.com/ubuntu precise principal 
 # deb- src http://extras.ubuntu.com/ubuntu main précis 
 
 
 fichier deb:/media/Main/Logiciel-Linux/Ubuntu/Oneiric/#Ceci est un référentiel oneiric . 
 fichier deb:/media/Main/Logiciel-Linux/Ubuntu/Natty/natty /
deb fichier:/media/Main/Logiciel-Linux/Ubuntu/Natty/kubuntu/
 fichier deb:/media/Main/Logiciel-Linux/Ubuntu/Natty/natty_new /[.____. VERDE
.

Bien que j'aie répertorié le référentiel de precise plus tôt dans le fichier, le code apt-get n'est pas sélectionné pour sélectionner le package dans ce référentiel. Comme décrit dans le manuel

Le fichier de préférences APT n'affecte pas le choix de l'instance, mais uniquement celui de la version.

Donc, le résultat de la commande apt-cache policy compiz-fusion-plugins-extra était comme prévu ci-dessous

 anwar @ edubuntu-lenovo:/etc/apt $ stratégie apt-cache compiz-fusion-plugins-extra 
 compiz-fusion-plugins-extra: 
 installé: (aucun) 
 Candidat: 0.9.5.94-0ubuntu1/** sélection des versions inférieures comme priorité ** /
 Tableau des versions: 
 0.9.7.0 ~ bzr9-0ubuntu6 0 
 500 http://archive.ubuntu.com/ubuntu/ precise/universe i386 Packages 
 0.9.5.94-0ubuntu1 0 
 1001 fichier:/media/Main/Logiciel-Linux/Ubuntu/Oneiric/Packages 
 0.9.4-0ubuntu3 0 
 1001 fichier:/media/Main/Logiciel-Linux/Ubuntu/Natty/natty/Packages 

Ici, la version candidate est 0.9.5.94-0ubuntu1 (qui se trouve dans le référentiel local), pas 0.9.7.0~bzr9-0ubuntu6 0, qui est dans le référentiel 'precises'. bien que celui-ci figure en premier dans le fichier sources.list.

Exemple d'exécution de apt-get essayant d'installer compiz-fusion-plugins-extra après avoir défini la priorité la plus élevée sur le référentiel local.

 anwar @ edubuntu-lenovo: ~ $ Sudo apt-get install compiz-fusion-plugins-extra 
 Lire les listes de paquets ... Terminé 
 Construire un arbre de dépendance 
 Lecture des informations d'état ... Fait 
 Les paquets suivants ont été installés automatiquement et ne sont plus nécessaires: 
 X11-apps x11-xfs-utils xinit x11-session-utils libfs6 
 Utilisation 'apt-get autoremove' pour les supprimer. 
 Les paquetages suivants seront installés: 
 compiz-core compiz-plugins-default compiz-plugins-extra 
 compiz-plugins- main-default libdecoration0 xserver-xorg-core 
 xserver-xorg-video-intel 
 Paquets suggérés: 
 compizconfig-settings-manager xfonts-100dpi xfonts-75dpi 
 Les paquets suivants seront supprimés: 
 Compiz-gnome compizconfig-backend-gconf edubuntu-desktop 
 Libcompizconfig0 ubuntu-desktop unity xorg xserver-xorg 
 Xserver-xorg-input-all xserver-xorg-input-evdev xserver-xorg-input-mouse 
 xserver-x org-input-synaptics xserver-xorg-input-vmmouse 
 xserver-xorg-input-wacom xserver-xorg-video-all xserver-xorg-video-ATI 
 xserver-xorg-video-cirrus xserver-xorg-video-fbdev xserver-xorg-video-geode 
 xserver-xorg-video-mach64 xserver-xorg-video-mga xserver-xorg-video-neomagic 
 xserver-xorg-video -nouveau xserver-xorg-video-openchrome 
 xserver-xorg-video-qxl xserver-xorg-video-r128 xserver-xorg-video-radeon 
 xserver-xorg-video-s3 xserver-xorg -video-savage 
 xserver-xorg-video-siliconmotion xserver-xorg-video-sis 
 xserver-xorg-video-sisusb xserver-xorg-video-tdfx xserver-xorg-video-trident 
 xserver-xorg-video-vesa xserver-xorg-video-vmware 
 Les nouveaux packages suivants seront installés: 
 compiz-fusion-plugins-extra compiz-plugins-extra 
 Les packages suivants seront DOWNGRADED: 
 Compiz-core compiz-plugins-default compiz-plugins-main-default 
 Libdecoration0 xserver-xorg-core xserver-xorg -video-intel 
 0 mis à niveau, 2 nouvellement installés, 6 rétrogradés, 37 à supprimer et 698 non mis à niveau. 
 Besoin d'obtenir 0 B/5 772 Ko d'archives. 
 Après cela 8 294 Ko d’espace disque seront libérés. 
 Voulez-vous continuer [Y/n]? 

Étrange !!!, Il essaie de rétrograder les paquetages Compiz déjà installés et de résoudre avec précision les dépendances (correspondant à celui de Oneiric) avec le compiz-fusion-plugins-extra !!! récemment sélectionné.

Ce qui est plus dangereux, c'est d'essayer de supprimer les packages de pilotes graphiques (xserver-xorg -....) pour éviter les conflits avec les nouvelles compositions.

(Probablement, si je les avais aussi dans mon référentiel local, ils voudront sans risque rétrograder. Mais comme ces paquets sont généralement installés, je ne les ai pas téléchargés, donc ils ne sont pas dans le dépôt local, d'où ce résultat) .

Conclusion : L'utilisation de /etc/apt/preferences est uniquement recommandée avec un référentiel local, si vous disposez d'un référentiel complet dans le système local.

Que se passe-t-il si plusieurs instances (fichier .deb) de la même version existent dans de nombreux référentiels?.

Ce qui est décrit par le manuel apt_preference

Plusieurs instances de la même version d'un package peuvent être disponibles lorsque le fichier sources.list (5) contient des références à plusieurs sources. Dans ce cas, apt-get (8) télécharge l'instance la plus ancienne dans le fichier sources.list (5).

Un exemple de cas d'utilisation pour le fichier /etc/apt/preferences:

Un exemple de forçage de apt-get à sélectionner la version disponible à partir d'un référentiel personnalisé, au lieu de celui standard d'Ubuntu, peut être la distribution "Linux Mint". Ils utilisent ce fichier preference personnalisé.

 Paquet: * 
 Broche: relâchez o = linuxmint 
 Priorité de la broche: 700 
 
 Paquet: * 
 Broche: Origine packages.linuxmint.com 
 Priorité de la broche: 700 
 
 Paquet: * 
 Pin: relâchez o = Ubuntu 
 Priorité de la broche: 500 
 

Cela les amène effectivement à fournir des paquets quand ils les ont dans leurs référentiels. Mais s'ils ne les ont pas, ils utilisent le référentiel standard d'Ubuntu.


Un exemple exécutant apt-get après avoir défini la priorité la plus élevée sur le référentiel local

Je voulais juste installer le paquet kubuntu-desktop sous Ubuntu pour tester KDE. (j'ai oublié cela, j'ai défini une préférence à l'aide du fichier /etc/apt/preference) . J'avais une iso de l'installateur-remplaçant kubuntu-12.04, donc je pensais pouvoir l'utiliser.

(après avoir correctement défini l'iso en tant que source de référentiel) , j'ai exécuté
Sudo apt-get install kubuntu-desktop, puis surpris en voyant le résultat ci-dessous.

 
 anwar @ edubuntu-lenovo: ~ $ Sud apt-get install kubuntu-desktop 
 Lire des listes de paquets ... Terminé 
 Construire un arbre de dépendance 
 Lecture des informations d'état ... Fait 
 Certains paquets ne peuvent pas être installés. Cela peut signifier que vous avez 
 Demandé une situation impossible ou, si vous utilisez la distribution unstable 
, Que certains packages requis n'ont pas encore été créés 
 Ou ont été déplacés de Incoming. 
 Les informations suivantes peuvent aider à résoudre le problème: 
 
 Les paquetages suivants ont des dépendances non remplies: 
 Kubuntu-desktop: Dépend de: language-selector-kde mais c’est ne va pas être installé 
 recommande: amarok mais il ne va pas être installé 
 recommande: apturl-kde mais il ne va pas être installé 
 recommande: gdebi-kde mais il ne va pas être installé 
 recommande: gpgsm mais il ne va pas être installé 
 recommande: ibus-qt4 mais il ne sera pas installé 
 recommande: jockey- kde mais il ne va pas être installé 
 recommande: kdegraphics-strigi-plugins mais il ne va pas être installé 
 recommande: kdepim-wizards mais il ne va pas être installé 
 recommande: kpackagekit mais il ne sera pas installé 
 recommande: libreoffice -kde mais il ne va pas être installé 
 recommande: libreoffice-style-oxygen mais il ne va pas être installé 
 recommande: network-manager-pptp-kde mais il ne va pas être installé 
 recommande: plasma-widget-facebook mais il ne va pas être installé 
 recommande: plasma-widget-kimpanel mais il ne va pas être installé 
 recommande: usb -creator-kde mais il ne va pas être installé 
 E: Impossible de corriger les problèmes, vous avez mis des paquets cassés en réserve. 
 

J'ai été surpris par le résultat. tout à coup, je me souviens que j’ai défini une préférence ( pour écrire cette réponse ) dans /etc/apt/preference afin de définir la priorité la plus élevée pour mon référentiel local.

donc, j'ai lancé ceci: apt-cache policy kubuntu-desktop, le résultat était comme ci-dessous:

 anwar @ edubuntu-lenovo: ~ $ règle d'apt-cache kubuntu-desktop 
 kubuntu-desktop: 
 installé: (aucun) 
 Candidat: 1.222.1kde47 ~ ppa2 
 Tableau des versions: 
 1.254 0 
 500 copies: // Kubuntu 12.04 LTS _Precise Pangolin_ - Version i386 (20120424)/precise/principale i386 Paquets 
 500 http : //archive.ubuntu.com/ubuntu/ precise/main Packages i386 
 1.222.1kde47 ~ ppa2 0 
 1001 fichier:/media/Main/Logiciel-Linux/Ubuntu/Natty/natty/Paquets 
 1.222.1 0 
 Fichier 1001:/media/Main/Logiciel-Linux/Ubuntu/Natty/natty/Paquets 
 1.222 0 
 Fichier 1001:/media/Main/Logiciel-Linux/Ubuntu/Natty/kubuntu/Packages 

Dans cette sortie, nous voyons que le "cdrom" et le "référentiel principal précis" ont tous deux un numéro de version 1.254 , tandis que le référentiel local a une version 1.222.1kde47 ~ ppa2 , qui est une version inférieure. Bien qu'ils soient placés avant les fichiers locaux dans le fichier sources.list, les packages locaux ont la priorité.

Pour voir explicitement que apt-get essaye effectivement d’installer à partir d’un local, j’ai exécuté synaptic et je l’ai eu, ce qui montre que le système Apt considère 1.222.1kde47 ~ ppa2 en tant que version candidate à installer.

enter image description here

Aussi apt-cache policy kubuntu-desktop montrant les mêmes choses

 anwar @ edubuntu-lenovo: ~ $ règle d'apt-cache kubuntu-desktop 
 kubuntu-desktop: 
 installé: (aucun) 
 Candidat: 1.222.1kde47 ~ ppa2 
 Tableau des versions: 
 1.254 0 
 500 copies: // Kubuntu 12.04 LTS _Precise Pangolin_ - Version i386 (20120424)/precise/principale i386 Paquets 
 500 http : //archive.ubuntu.com/ubuntu/ precise/main Packages i386 
 1.222.1kde47 ~ ppa2 0 
 1001 fichier:/media/Main/Logiciel-Linux/Ubuntu/Natty/natty/Paquets 
 1.222.1 0 
 Fichier 1001:/media/Main/Logiciel-Linux/Ubuntu/Natty/natty/Paquets 
 1.222 0 
 Fichier 1001:/media/Main/Logiciel-Linux/Ubuntu/Natty/kubuntu/Packages 

Pour résoudre ce problème, j'ai supprimé le fichier /etc/apt/preference de Sudo rm /etc/apt/preference.

Puis a exécuté à nouveau ceci encore apt-cache policy kubuntu-desktop. ne voyant que cette sortie attendue.

 anwar @ edubuntu-lenovo: ~ $ Sudo rm /etc/apt/preferences : 
 Installé: (aucun) 
 Candidat: 1.254 
 Tableau des versions: 
 1.254 0 
 500 caractères: // Kubuntu 12.04 LTS _Precise Pangolin_ - Libérez les packages i386 (20120424)/precise/main i386 principaux 
 500 http://archive.ubuntu.com/ubuntu/ precise/main Packages i386 
 1.222.1kde47 ~ ppa2 0 
. Fichier 500:/media/Principal/Logiciel-Linux/Ubuntu/Natty/Natty/Packages 
 1.222.1 0 
 Fichier 500:/media/Principal/Logiciel-Linux/Ubuntu/Natty/natty/Packages 
 1.222 0 
 Fichier 500:/media/Main/Logiciel-Linux/Ubuntu/Natty/kubuntu/Packages 

Aussi couru cela à nouveau. Sudo apt-get install kubuntu-desktop pour voir le résultat ci-dessous:

 ......... Détails inutiles supprimés ......... 
 
 0 mis à niveau, 213 nouvellement installés, 0 à supprimer et 150 non mis à niveau . 
 Besoin d’obtenir 0 B/89,6 Mo d’archives. 
 Après cette opération, 269 Mo d’espace disque supplémentaire seront utilisés. 
 Voulez-vous continuer [O/n ]? 
 

Vous pouvez vérifier le résultat complet ici

Ensuite, je suis à peu près sûr de la partie Explication.


Référence 1: Le manuel apt_preference

Référence 2: Comment garder une version spécifique de paquets installée

51
Anwar