46 votes

Attribuer la plus haute priorité à mon dépôt local

Résumé

Comment faire en sorte que apt-get préfère les paquets du dépôt local plutôt que de télécharger à nouveau la même version du paquet à partir des dépôts officiels ? Le dépôt local est signé et fiable. Nous avons déjà essayé apt preferences priority.


La question initiale était : "Comment attribuer la priorité la plus élevée à un dépôt local sans utiliser le fichier sources.list".

J'ai créé un dépôt 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 je dois réinstaller mon Ubuntu. Il s'agit d'un dépôt basique, créé avec apt-ftparchive packages . > Packages . J'ai fait de ce dépôt un dépôt de confiance pour éviter l'avertissement "dépôt non authentifié". ( Lorsque vous disposez d'un référentiel non fiable, apt o synaptic essayer de télécharger les mêmes paquets sur l'internet, car il s'agit d'un système de confiance. ).

J'utilise ce dépôt local depuis au moins un an. Mais je dois toujours mettre la ligne de mon dépôt local en tête de la page 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, alors qu'il existe un meilleur outil software-properties-gtk . Je ne peux pas utiliser cet outil car il place la ligne de source à la fin de `sources.list.

Et le véritable problème est que, le apt oder synaptic télécharge toujours un paquet à partir de la source mentionnée plus haut, sans vérifier si les paquets sont déjà disponibles dans le dépôt local. Je n'ai donc pas d'autre choix que de placer la source locale en haut de la page sources.list en utilisant le 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 le suivant /etc/apt/preferences.d/local-pin-900

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

Mon fichier de validation est le suivant

    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 fichier apt-cache policy indique correctement la préférence, par exemple le dépôt local a la priorité la plus élevée.

Mais quand je fais cela sudo apt-get install <package-name> , apt essaie de le télécharger à partir d'Internet. Mais lorsque je place mon dépôt local en tête de liste, il s'installe à partir du dépôt local.

Also, Ma question est la suivante -> 'Est-il possible de forcer apt à utiliser le dépôt local lorsque le paquet est disponible dans le dépôt local, sans placer explicitement "la source locale" en tête de ma liste de dépôts (par exemple dans le fichier sources.list) ?

Edit : output of apt-cache policy $package_name est le suivant

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

Il montre que mon dépôt local a une préférence plus élevée, bien qu'il ne soit pas celui qui vient en premier dans la liste des dépôts. sources.list fichier.

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, alors que je pense qu'il devrait se contenter du fichier local.


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

L'utilisation de localhost n'a pas d'effet, mais "" en a un, mais n'est pas différent de ma méthode.

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

Je les ai utilisés avant de poser la question. Mais j'ai de nouveau essayé (par sécurité). Le même résultat. apt-cache policy Mais lorsque j'ai essayé de l'installer, il m'a dit "Need to get XXX/XXX KB of archive" (Besoin de récupérer XXX/XXX KB d'archive).

63voto

Anwar Points 72431

La réponse est courte :

Le fichier de préférences APT /etc/apt/preferences peut être utilisé pour contrôler les éléments suivants les versions des paquets qui seront sélectionnées pour l'installation.

Voici le fichier /etc/apt/preferences qui apt-get permet de décider quelle version il faut sélectionner s'il y a plusieurs versions d'un même paquet. Ainsi, 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 de source si les deux paquets ont la même version. Si vous devez attribuer la priorité la plus élevée à un même paquet version dans votre répertoire local, listez-les en haut de la page de la section /etc/apt/sources.list fichier>

Réponse à la question initiale :

Comment attribuer la priorité la plus élevée à un dépôt local sans utiliser le fichier sources.list ?

Il n'y a aucun moyen d'attribuer la priorité la plus élevée au dépôt local sans utiliser la fonction sources.list vous devez les placer en tête de "sources.list" si vous voulez assigner la plus haute priorité à votre répertoire local.

Réponse synthétique à cette question :

Comment faire en sorte que apt-get préfère les paquets du dépôt local plutôt que de télécharger à nouveau la même version du paquet à partir des dépôts officiels ? Le dépôt local est signé et fiable. Nous avons déjà essayé apt preferences priority.

L'utilisation de la /etc/apt/sources.list Vous devez mettre la ligne de votre dépôt local en haut de ce fichier, comme dans l'exemple 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 instances des paquets avec la même version. Ce qu'il faut retenir, c'est que vous ne pouvez pas utiliser /etc/apt/preference pour forcer la sélection/utilisation d'un fichier .deb de votre dépôt local en attribuant la plus haute priorité à votre dépôt 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 /etc/apt/sources.list avec la méthode mentionnée ci-dessus.


Explication :

Il semble que nous ayons tous mal compris la apt_preference le manuel apt_preference décrit cela dans les 3 premiers paragraphes !!!

Le fichier de préférences APT /etc/apt/preferences peut être utilisé pour contrôler les éléments suivants les versions des paquets qui seront sélectionnées pour l'installation.

Plusieurs versions d'un paquetage peuvent être disponibles à l'installation lorsque le fichier sources.list(5) contient des références à plus d'une distribution (par exemple, stable et testing). APT attribue une priorité à chaque version disponible. Sous réserve des contraintes de dépendance, apt-get(8) sélectionne la version ayant la priorité la plus élevée pour l'installation. Le fichier de préférences d'APT remplace les priorités qu'APT attribue par défaut aux versions des paquets, donnant ainsi à l'utilisateur le contrôle sur la version sélectionnée pour l'installation.

Le point le plus important se trouve au troisième paragraphe

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

Les italiques sont de mon fait

Voyons cela à l'aide d'un exemple :

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

Voici le fichier /etc/apt/preferences qui apt-get permet de décider quelle version il faut sélectionner s'il y a plusieurs versions d'un même paquet. (Dans cet exemple, compiz-fusion-plugins-extra a plusieurs versions.

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

Ce fichier dit apt-get pour installer à partir du dépôt local tous les paquets dont plusieurs versions existent dans différents dépôts.

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

Voici mon /etc/apt/sources.list fichier

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 indiqué le référentiel précis plus tôt dans le fichier, cela n'entraîne pas de problèmes de sécurité. apt-get pour sélectionner un paquet dans ce dépôt. Comme décrit dans le manuel

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

Ainsi, la sortie de la commande apt-cache policy compiz-fusion-plugins-extra était conforme aux attentes, comme indiqué ci-dessous

anwar@edubuntu-lenovo:/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 pas 0.9.7.0~bzr9-0ubuntu6 0 qui se trouve dans le dépôt de precises. bien que celui de precises ait été listé en premier dans le sources.list fichier.

Un exemple d'exécution de apt-get essayer d'installer compiz-fusion-plugins-extra après avoir accordé la plus haute priorité au dépôt local.

anwar@edubuntu-lenovo:~$ 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 pour résoudre les dépendances (correspondant à celles d'Oneiric) avec les nouveaux paquets sélectionnés. compiz-fusion-plugins-extra ! !!.

Le plus dangereux est qu'il essaie de supprimer les paquets de pilotes graphiques (xserver-xorg-....) pour éviter les conflits avec les nouveaux ordinateurs.

(Probablement, si je les avais aussi dans mon dépôt local, ils pourraient vouloir rétrograder en toute sécurité. Mais comme ces paquets sont habituellement installés, je ne les ai pas téléchargés, ils ne sont donc pas dans le dépôt local, d'où ce résultat). .

Conclusion : Ainsi, en utilisant /etc/apt/preferences n'est recommandé qu'avec un référentiel local, si vous disposez d'un référentiel complet dans votre système local.

Que se passe-t-il si plusieurs instances (.deb file) de la même version existent dans plusieurs dépôts.

Qui est décrite par le apt_preference manuel

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

Exemple de cas d'utilisation /etc/apt/preferences fichier :

Un exemple de forçage apt-get pour sélectionner une version disponible à partir d'un répertoire personnalisé, au lieu du répertoire standard d'Ubuntu, peut être la distribution "Linux Mint". Elle utilise cette version personnalisée de preference fichier.

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 oblige à fournir des paquets lorsqu'ils les ont dans leurs dépôts. Mais s'ils ne les ont pas, ils utilisent le dépôt standard d'Ubuntu.


Un exemple en cours d'exécution apt-get après avoir donné la plus haute priorité au dépôt local

Je voulais juste installer kubuntu-desktop sur Ubuntu pour tester KDE. (J'ai oublié de le faire, j'ai défini une préférence à l'aide de /etc/apt/preference fichier) . J'avais une iso de kubuntu-12.04-alternate-installer, donc j'ai pensé que je pouvais l'utiliser.

(après avoir correctement défini l'iso comme source du dépôt) J'ai couru
sudo apt-get install kubuntu-desktop puis surpris de voir le résultat ci-dessous.

anwar@edubuntu-lenovo:~$ 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. Je me suis soudain souvenu que j'avais défini une préférence ( pour avoir écrit cette réponse ) en /etc/apt/preference pour donner la plus haute priorité à mon dépôt local.

J'ai donc lancé cette opération : apt-cache policy kubuntu-desktop Le résultat est le suivant :

anwar@edubuntu-lenovo:~$ 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 suivant 1.254 alors que le référentiel local a la version 1.222.1kde47~ppa2 qui est une version inférieure. Bien qu'ils soient placés avant les paquets locaux dans le fichier sources.list, les paquets locaux sont prioritaires.

Pour voir explicitement que apt-get essaie en effet d'installer à partir d'un fichier local, j'ai exécuté synaptic et j'ai obtenu ceci, qui montre que le système Apt prend en compte 1.222.1kde47~ppa2 comme la version candidate à installer.

enter image description here

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

anwar@edubuntu-lenovo:~$ 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 /etc/apt/preference fichier par sudo rm /etc/apt/preference .

Puis, il a recommencé à courir, encore et encore apt-cache policy kubuntu-desktop . je ne vois que la sortie attendue.

anwar@edubuntu-lenovo:~$ sudo rm /etc/apt/preferences
anwar@edubuntu-lenovo:~$ 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

Je l'ai également relancé. sudo apt-get install kubuntu-desktop pour obtenir 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 consulter le résultat complet <a href="http://paste.ubuntu.com/1072503/" rel="noreferrer">aquí</a>

Je suis donc presque sûr de la partie Explanation.


Référence 1 : Le manuel apt_preference

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X