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