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

33

Résumé

Comment puis-je faire en sorte que apt-get préfère les packages de référentiels locaux au lieu de télécharger à nouveau la même version de package à partir de référentiels officiels? Le référentiel local est signé et approuvé. Nous avons déjà essayé la priorité des préférences apt.

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

J'ai configuré un référentiel local avec les paquets que j'ai téléchargés. Je l'utilise pour éviter de télécharger les mêmes paquets sur Internet, lorsque j'ai besoin de réinstaller mon Ubuntu. C'est un référentiel de base, créé avec apt-ftparchive packages . > Packages . J'en ai fait un référentiel de confiance pour éviter l'avertissement de "référentiel non authentifié". ( Lorsque vous avez un référentiel non fiable, apt ou synaptic essaient de télécharger les mêmes packages sur Internet, car ils sont fiables ).

J'utilise ce référentiel local depuis au moins 1 an. Mais je dois toujours placer ma ligne de dépôt local en haut du fichier sources.list pour l'utiliser. Mais c'est embêtant, car je dois ouvrir un terminal et le taper à chaque fois que je réinstalle Ubuntu, bien qu'il y ait 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 apt ou synaptic téléchargent 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 en haut de sources.list doing 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érences est celui-ci dans /etc/apt/preferences.d/local-pin-900

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

Mon fichier de version est-ce

    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 ex. Il montre que le référentiel local a la plus haute priorité.

Mais quand je le fais, sudo apt-get install <package-name> , apt essaie de le télécharger depuis Internet. Mais quand je place mon repo local en haut, il s’installe à partir du dépôt local.

Donc, ma question est - & gt; '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 "la source locale" en haut de ma liste de référentiels (par exemple, le fichier sources.list)?'

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

  
nautilus-wipe:
  Installed: (none)
  Candidate: 0.1.1-2
  Version table:
     0.1.1-2 0
        500 http://archive.ubuntu.com/ubuntu/ precise/universe i386 Packages
        900 file:/media/Main/Linux-Software/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

Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  nautilus-wipe
0 upgraded, 1 newly installed, 0 to remove and 131 not upgraded.
Need to get 30.7 kB of archives.
After this operation, 150 kB of additional disk space will be used.
'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 de récupérer le fichier sur Internet, même si je pense qu'il devrait être compatible avec le fichier local.

Résultat de l'utilisation de "" ou de localhost comme suggéré par mediageek

L'utilisation de 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é ceci (pour la sécurité). Le même résultat apt-cache policy indiquant que mon référentiel local a effectivement la plus haute priorité. mais quand j'ai essayé de l'installer, je dis "Besoin d'obtenir XXX / XXX Ko d'archive".

    
posée Anwar 11.05.2012 - 07:11
la source

1 réponse

44

La réponse courte:

  

Le fichier de préférences APT / etc / apt / preferences peut être utilisé pour contrôler quelles versions de paquets seront sélectionnées pour l’installation.

Voici le fichier /etc/apt/preferences , que apt-get utilise pour décider, quelle version doit être sélectionnée s'il existe plusieurs versions d'un seul paquet. Avec cela, tout paquet provenant du dépôt local aura la priorité sur les autres paquets.

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

Cela 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 dans votre repo local, listez-les en haut dans le fichier /etc/apt/sources.list & gt;

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’ya 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 plus haute priorité à votre repo local.

Réponse sommaire à cette question:

  

Comment puis-je faire en sorte que apt-get préfère les packages de référentiels locaux au lieu de télécharger à nouveau la même version de package à partir de référentiels officiels? Le référentiel local est signé et approuvé. Nous avons déjà essayé la priorité des préférences apt.

En utilisant le 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 main restricted
deb file:/media/Main/Precise-Debs-New /
deb file:/media/Main/Linux-Software/Ubuntu/Precise /

deb http://archive.ubuntu.com/ubuntu precise main universe restricted multiverse
deb-src http://archive.ubuntu.com/ubuntu precise universe main multiverse restricted #Added by software-properties

# deb cdrom:[Xubuntu 12.04 LTS _Precise Pangolin_ - Release i386 (20120423.1)]/ precise main multiverse restricted universe
# deb cdrom:[Ubuntu 12.04 LTS _Precise Pangolin_ - Release i386 (20120423)]/ precise main restricted

# deb http://archive.canonical.com/ubuntu precise partner
# deb-src http://archive.canonical.com/ubuntu precise partner
# deb http://extras.ubuntu.com/ubuntu precise main
# deb-src http://extras.ubuntu.com/ubuntu precise main

Et oui, "apt_preference" n'a rien à voir avec la sélection de 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 à sélectionner / utiliser un fichier .deb de votre référentiel local en attribuant la priorité la plus élevée à votre fichier local. Ce fichier (préférence) est utilisé pour sélectionner une version spécifique, pas 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:

Il semble que nous ayons tous mal compris le but de 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 quelles versions de paquets seront sélectionnées 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 assigne une priorité à chaque version disponible. Sous réserve des contraintes de dépendance, apt-get (8) sélectionne la version avec la plus haute priorité pour l’installation. Le fichier de préférences APT remplace les priorités que APT attribue aux versions de package par défaut, donnant ainsi à l'utilisateur le contrôle sur lequel il est sélectionné pour l'installation.

Et le très important est au 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 uniquement le choix de la version .

Ces italiques ont été faits 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 doit être sélectionnée s'il existe plusieurs versions d'un seul paquet. (Dans cet exemple, compiz-fusion-plugins-extra a plusieurs versions.

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

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

En d'autres termes, si j'ai le package xapps avec la version 1.0 dans mon référentiel local, et que ce même package xapps existe dans le référentiel de Precise avec la version supérieure, dites 2.0 , apt-get préféreront le version du dépôt local, c.-à-d. version 1.0 .

Voici mon fichier /etc/apt/sources.list

deb http://archive.ubuntu.com/ubuntu precise main universe restricted multiverse
deb-src http://archive.ubuntu.com/ubuntu precise universe main multiverse restricted #Added by software-properties
deb http://security.ubuntu.com/ubuntu/ precise-security universe main multiverse restricted
deb http://archive.ubuntu.com/ubuntu precise-updates universe main multiverse restricted
deb http://archive.ubuntu.com/ubuntu precise-backports universe main multiverse restricted

# deb http://archive.canonical.com/ubuntu precise partner
#deb-src http://archive.canonical.com/ubuntu precise partner
# deb http://extras.ubuntu.com/ubuntu precise main
# deb-src http://extras.ubuntu.com/ubuntu precise main


deb file:/media/Main/Linux-Software/Ubuntu/Oneiric / #this is oneiric repository.
deb file:/media/Main/Linux-Software/Ubuntu/Natty/natty /
deb file:/media/Main/Linux-Software/Ubuntu/Natty/kubuntu /
deb file:/media/Main/Linux-Software/Ubuntu/Natty/natty_new /

Bien que j'aie répertorié le référentiel précis plus tôt dans le fichier, apt-get ne le sélectionne pas 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 le choix de la version.

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

[email protected]:/etc/apt$ apt-cache policy compiz-fusion-plugins-extra 
compiz-fusion-plugins-extra:
  Installed: (none)
  Candidate: 0.9.5.94-0ubuntu1  / **selecting lower versions for priority** /
  Version table:
     0.9.7.0~bzr9-0ubuntu6 0
        500 http://archive.ubuntu.com/ubuntu/ precise/universe i386 Packages
     0.9.5.94-0ubuntu1 0
       1001 file:/media/Main/Linux-Software/Ubuntu/Oneiric/  Packages
     0.9.4-0ubuntu3 0
       1001 file:/media/Main/Linux-Software/Ubuntu/Natty/natty/  Packages

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

Un exemple d'exécution de apt-get essayant d'installer compiz-fusion-plugins-extra après avoir défini la plus haute priorité au référentiel local.

[email protected]:~$ sudo apt-get install compiz-fusion-plugins-extra 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  x11-apps x11-xfs-utils xinit x11-session-utils libfs6
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
  compiz-core compiz-plugins-default compiz-plugins-extra
  compiz-plugins-main-default libdecoration0 xserver-xorg-core
  xserver-xorg-video-intel
Suggested packages:
  compizconfig-settings-manager xfonts-100dpi xfonts-75dpi
The following packages will be REMOVED:
  compiz 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-xorg-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
The following NEW packages will be installed:
  compiz-fusion-plugins-extra compiz-plugins-extra
The following packages will be DOWNGRADED:
  compiz-core compiz-plugins-default compiz-plugins-main-default
  libdecoration0 xserver-xorg-core xserver-xorg-video-intel
0 upgraded, 2 newly installed, 6 downgraded, 37 to remove and 698 not upgraded.
Need to get 0 B/5,772 kB of archives.
After this operation, 8,294 kB disk space will be freed.
Do you want to continue [Y/n]? 

Étrange !!!, Il essaie de rétrograder les paquets compiz déjà installés de precise pour résoudre les dépendances (correspondant à celle de Oneiric) avec les nouveaux compiz-fusion-plugins-extra !!!.

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

(Probablement, si je les avais aussi dans mon dépôt local, ils pourraient vouloir en toute sécurité 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 un repo local, donc résultat) .

Conclusion : l'utilisation de /etc/apt/preferences est recommandée uniquement 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 listée au plus tôt dans le fichier sources.list (5).

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

Un exemple de forçage de apt-get pour sélectionner la version disponible à partir d’un repo personnalisé, au lieu du standard d'Ubuntu, pourrait être la distribution "Linux Mint". Ils utilisent ce fichier preference personnalisé.

Package: *
Pin: release o=linuxmint
Pin-Priority: 700

Package: *
Pin: origin packages.linuxmint.com
Pin-Priority: 700

Package: *
Pin: release o=Ubuntu
Pin-Priority: 500

Cela les amène effectivement à fournir des packages lorsqu'ils en 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 pour le référentiel local

Je voulais juste installer le paquetage kubuntu-desktop sur Ubuntu pour tester KDE. (j'ai oublié cela, j'ai défini une préférence en utilisant le fichier /etc/apt/preference ) . J'ai eu une iso du kubuntu-12.04-alternateur-installateur, donc j'ai pensé que je pourrais l'utiliser.

(après avoir correctement défini l'iso en tant que source de référentiel) , j'ai couru dans sudo apt-get install kubuntu-desktop , puis surpris en voyant la sortie ci-dessous.

[email protected]:~$ sudo apt-get install kubuntu-desktop
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 kubuntu-desktop : Depends: language-selector-kde but it is not going to be installed
                   Recommends: amarok but it is not going to be installed
                   Recommends: apturl-kde but it is not going to be installed
                   Recommends: gdebi-kde but it is not going to be installed
                   Recommends: gpgsm but it is not going to be installed
                   Recommends: ibus-qt4 but it is not going to be installed
                   Recommends: jockey-kde but it is not going to be installed
                   Recommends: kdegraphics-strigi-plugins but it is not going to be installed
                   Recommends: kdepim-wizards but it is not going to be installed
                   Recommends: kpackagekit but it is not going to be installed
                   Recommends: libreoffice-kde but it is not going to be installed
                   Recommends: libreoffice-style-oxygen but it is not going to be installed
                   Recommends: network-manager-pptp-kde but it is not going to be installed
                   Recommends: plasma-widget-facebook but it is not going to be installed
                   Recommends: plasma-widget-kimpanel but it is not going to be installed
                   Recommends: usb-creator-kde but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

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

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

[email protected]:~$ apt-cache policy kubuntu-desktop 
kubuntu-desktop:
  Installed: (none)
  Candidate: 1.222.1kde47~ppa2
  Version table:
     1.254 0
        500 cdrom://Kubuntu 12.04 LTS _Precise Pangolin_ - Release i386 (20120424)/ precise/main i386 Packages
        500 http://archive.ubuntu.com/ubuntu/ precise/main i386 Packages
     1.222.1kde47~ppa2 0
       1001 file:/media/Main/Linux-Software/Ubuntu/Natty/natty/  Packages
     1.222.1 0
       1001 file:/media/Main/Linux-Software/Ubuntu/Natty/natty/  Packages
     1.222 0
       1001 file:/media/Main/Linux-Software/Ubuntu/Natty/kubuntu/  Packages

Dans cette sortie, nous voyons que le "cdrom" et le "dépôt principal précis" ont tous deux le numéro de version 1.254 , tandis que le référentiel local a la version 1.222.1kde47 ~ ppa2 , qui est la 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 tente effectivement d’installer depuis un local, j’ai lancé synaptic et je l’ai obtenu, ce qui montre que le système Apt considère 1.222.1kde47 ~ ppa2 comme la version candidate à installer.

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

[email protected]:~$ apt-cache policy kubuntu-desktop
kubuntu-desktop:
  Installed: (none)
  Candidate: 1.222.1kde47~ppa2
  Version table:
     1.254 0
        500 cdrom://Kubuntu 12.04 LTS _Precise Pangolin_ - Release i386 (20120424)/ precise/main i386 Packages
        500 http://archive.ubuntu.com/ubuntu/ precise/main i386 Packages
     1.222.1kde47~ppa2 0
       1001 file:/media/Main/Linux-Software/Ubuntu/Natty/natty/  Packages
     1.222.1 0
       1001 file:/media/Main/Linux-Software/Ubuntu/Natty/natty/  Packages
     1.222 0
       1001 file:/media/Main/Linux-Software/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 à nouveau exécuté à nouveau apt-cache policy kubuntu-desktop . ne voyant que cette sortie attendue.

[email protected]:~$ sudo rm /etc/apt/preferences
[email protected]:~$ sudo apt-cache policy kubuntu-desktop
kubuntu-desktop:
  Installed: (none)
  Candidate: 1.254
  Version table:
     1.254 0
        500 cdrom://Kubuntu 12.04 LTS _Precise Pangolin_ - Release i386 (20120424)/ precise/main i386 Packages
        500 http://archive.ubuntu.com/ubuntu/ precise/main i386 Packages
     1.222.1kde47~ppa2 0
        500 file:/media/Main/Linux-Software/Ubuntu/Natty/natty/  Packages
     1.222.1 0
        500 file:/media/Main/Linux-Software/Ubuntu/Natty/natty/  Packages
     1.222 0
        500 file:/media/Main/Linux-Software/Ubuntu/Natty/kubuntu/  Packages

a également couru à nouveau. sudo apt-get install kubuntu-desktop pour voir le résultat ci-dessous:

......... Unnecessary details deleted .........

0 upgraded, 213 newly installed, 0 to remove and 150 not upgraded.
Need to get 0 B/89.6 MB of archives.
After this operation, 269 MB of additional disk space will be used.
Do you want to continue [Y/n]? 

Vous pouvez vérifier le résultat complet ici

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

Référence 1: Le manuel apt_preference

Référence 2: Comment conserver une version spécifique des packages installés

    
réponse donnée Anwar 20.06.2012 - 07:41
la source

Lire d'autres questions sur les étiquettes