Zusammenfassung
Wie kann ich dafür sorgen, dass apt-get lokale Repository-Pakete bevorzugt, anstatt dieselbe Paketversion erneut von offiziellen Repositorys herunterzuladen? Das lokale Repository ist signiert und vertrauenswürdig. Wir haben bereits versucht, Prioritäten für apt-Einstellungen festzulegen.
Die ursprüngliche Frage lautete: "So weisen Sie dem lokalen Repository die höchste Priorität zu, ohne die Datei sources.list zu verwenden"
Ich habe ein lokales Repository mit heruntergeladenen Paketen eingerichtet. Ich benutze es, um das Herunterladen der gleichen Pakete über das Internet zu vermeiden, wenn ich mein Ubuntu neu installieren muss. Es ist ein Basis-Repository, das mit erstellt wurde apt-ftparchive packages . > Packages
. Ich habe dies zu einem vertrauenswürdigen Repository gemacht, um die Warnung "Nicht authentifiziertes Repository" zu vermeiden. ( Wenn Sie ein nicht vertrauenswürdiges Repository haben apt
oder synaptic
versuchen, dieselben Pakete über das Internet herunterzuladen, weil es vertrauenswürdig ist ).
Ich benutze dieses lokale Repository seit mindestens 1 Jahr. Aber ich muss immer meine lokale Repository-Zeile am Anfang der sources.list
Datei platzieren, um dies zu nutzen. Dies ist jedoch ärgerlich, da ich jedes Mal, wenn ich Ubuntu neu installiere, ein Terminal öffnen und etwas darauf tippen muss, obwohl es ein besseres Tool gibt software-properties-gtk
. Ich kann dieses Tool nicht verwenden, da es die Quellzeile am Ende von `sources.list platziert.
Und das eigentliche Problem ist, dass das apt
oder synaptic
immer ein Paket von der zuvor genannten Quelle heruntergeladen wird, ohne zu prüfen, ob die Pakete bereits im lokalen Repository verfügbar sind. Ich habe also keine andere Wahl, als die lokale Quelle an die Spitze des sources.list
Terminals zu setzen (ich hasse Terminal eigentlich nicht, aber ich brauche eine Lösung).
Ich habe diese Methode ausprobiert . Das hilft mir aber nicht.
Meine Einstellungsdatei ist diese in /etc/apt/preferences.d/local-pin-900
Package: *
Pin: release o=Local,n=ubuntu-local
Pin-Priority: 900
Meine Release-Datei ist dies
Origin: Local
Label: Local-Ubuntu
Description: Local Ubuntu Repository
Codename: ubuntu-local
MD5Sum:
ed43222856d18f389c637ac3d7dd6f85 1043412 Packages
d41d8cd98f00b204e9800998ecf8427e 0 Sources
Wenn ich die apt-Einstellung aktiviere, wird die Einstellung apt-cache policy
korrekt angezeigt, z. B. wird angezeigt, dass das lokale Repository die höchste Priorität hat.
Aber wenn ich das tue sudo apt-get install <package-name>
, apt
versuche ich es aus dem Internet herunterzuladen. Wenn ich mein lokales Repository oben platziere, wird es aus dem lokalen Repository installiert.
Also, meine Frage ist -> ‚Ist es möglich , passend zu zwingen lokale Repository zu verwenden , wenn das Paket in lokalen Repository verfügbar ist, ohne explizit‚die lokale Quelle‘an der Spitze meiner Repository - Liste zu platzieren (zB sources.list - Datei)? '
Bearbeiten: Ausgabe von apt-cache policy $package_name
ist wie folgt
nautilus-wipe: Installiert: (keine) Kandidat: 0.1.1-2 Versionstabelle: 0,1,1-2 0 500 http://archive.ubuntu.com/ubuntu/ exact / universe i386-Pakete 900 Datei: / media / Main / Linux-Software / Ubuntu / Precise / Packages
Es zeigt, dass mein lokales Repository eine höhere Priorität hat, obwohl es nicht dasjenige ist, das in der sources.list
Datei an erster Stelle steht .
Hier ist die Ausgabe von apt-get install nautilus-wipe
Paketlisten lesen ... Fertig Abhängigkeitsbaum erstellen Statusinformationen werden gelesen ... Fertig Die folgenden NEUEN Pakete werden installiert: nautilus-wischen 0 aktualisiert, 1 neu installiert, 0 zu entfernen und 131 nicht aktualisiert. Benötigt 30,7 kB Archive. Nach diesem Vorgang werden 150 KB zusätzlicher Speicherplatz verwendet. '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 MD5Summe: 7d497b8dfcefe1c0b51a45f4b0
Es wird immer noch versucht, die Datei aus dem Internet abzurufen, obwohl ich der Meinung bin, dass sie mit der lokalen Datei zufrieden sein sollte.
Ergebnis der Verwendung von "" oder localhost, wie von mediageek vorgeschlagen
Die Verwendung von localhost hat keine Auswirkung. aber "" hat sich doch nicht von meiner methode unterschieden
Package: *
Pin: origin ""
Pin-Priority: 1001
Ich habe sie vor dem Posten der Frage benutzt. Aber ich habe es erneut versucht (aus Gewissheit). Das gleiche Ergebnis. apt-cache policy
Dies zeigt, dass mein lokales Repository tatsächlich die höchste Priorität hat. aber als ich versuchte, es zu installieren, sagt es "Notwendigkeit, XXX / XXX KB des Archivs zu erhalten".
apt-get
Befehl überprüft . Es heißt "0 KB müssen heruntergeladen werden".apt-cache policy
apt-cache policy
dass das lokale Repository eine höhere Priorität hat. Aber immer nochapt-get
versuchen, es aus dem Internet zu installieren. Ich denke, dass es einfach nicht möglich ist, ohnesources.list
Datei zu verwenden.apt-cache policy
gezeigt wurde, dass die Version dieselbe istAntworten:
Die kurze Antwort:
Hier ist die Datei
/etc/apt/preferences
, dieapt-get
verwendet wird, um zu entscheiden, welche Version ausgewählt werden muss, wenn es viele Versionen eines einzelnen Pakets gibt. Damit hat jedes Paket, das aus dem lokalen Repository stammt, Vorrang vor den anderen Paketen.Dies steuert nicht die Version, sondern die Quelleneinstellung, wenn beide Pakete dieselbe Version haben. Wenn Sie höchste Priorität für das gleiche Paket zuweisen Version in Ihrem lokalen Repo, schreiben Sie sie an der Spitze der
/etc/apt/sources.list
Datei>Antwort auf die ursprüngliche Frage:
Es gibt keine Möglichkeit, dem lokalen Repository die höchste Priorität zuzuweisen, ohne die
sources.list
Datei zu verwenden. Sie müssen sie oben in "sources.list" setzen, wenn Sie Ihrem lokalen Repo die höchste Priorität zuweisen möchten.Zusammenfassende Antwort auf diese Frage:
Unter Verwendung der
/etc/apt/sources.list
Datei müssen Sie Ihre lokale Repository-Zeile am Anfang dieser Datei platzieren. wie die unten.Und ja, "apt_preference" hat nichts mit der Auswahl von Instanzen der Pakete mit derselben Version zu tun . Der Punkt hier ist, dass Sie keine
/etc/apt/preference
Datei verwenden können, um die Auswahl / Verwendung einer.deb
Datei aus Ihrem lokalen Repository zu erzwingen, indem Sie Ihrem lokalen Repository die höchste Priorität zuweisen. Diese Datei (Voreinstellung) wird verwendet, um eine bestimmte Version auszuwählen, nicht eine bestimmte Instanz (.deb-Datei) derselben Version. Im letzteren Fall müssen Sie die/etc/apt/sources.list
Datei mit der oben genannten Methode verwenden.Erläuterung:
Scheint, dass wir alle den
apt_preference
Zweck missverstanden haben , das apt_preference-Handbuch beschreibt dies in den ersten 3 Absätzen !!Und das sehr wichtige steht im dritten Absatz
Diese Kursivschrift stammt von mir
Schauen wir uns das an einem Beispiel an:
Ich habe die genaue Version von
compiz-fusion-plugins-extra
, aber ich habe sie zu Demonstrationszwecken deaktiviertHier ist die Datei
/etc/apt/preferences
, dieapt-get
verwendet wird, um zu entscheiden, welche Version ausgewählt werden muss, wenn es viele Versionen eines einzelnen Pakets gibt. (In diesem Beispielcompiz-fusion-plugins-extra
hat mehrere Versionen.Diese Datei fordert
apt-get
zur Installation vom lokalen Repository für alle Pakete auf, die mehrere Versionen in verschiedenen Repositorys haben.Mit anderen Worten, wenn ich ein Paket
xapps
mit einer Version1.0
in meinem lokalen Repository habe und dasselbe Paketxapps
in Precises Repository mit einer höheren Version vorhanden ist2.0
,apt-get
wird beispielsweise die Version aus dem lokalen Repository, dh Version, vorgezogen1.0
.Hier ist meine
/etc/apt/sources.list
AkteObwohl ich das Repository des genauen in der Datei bereits aufgeführt habe, wird dadurch kein
apt-get
Paket aus diesem Repository ausgewählt. Wie im Handbuch beschriebenDie Ausgabe des Befehls
apt-cache policy compiz-fusion-plugins-extra
war also erwartungsgemäß wie folgtHier steht die Kandidatenversion
0.9.5.94-0ubuntu1
(die sich im lokalen Repository befindet) nicht0.9.7.0~bzr9-0ubuntu6 0
im genauen Repository. obwohl die genaue 'wurde zuerst in dersources.list
Datei aufgeführt.Ein Beispiel für
apt-get
einen Installationsversuchcompiz-fusion-plugins-extra
nach dem Festlegen der höchsten Priorität für das lokale Repository.Seltsam !!!, Es wird versucht, die bereits installierten Compiz-Pakete von Precise zu downgraden, um Abhängigkeiten (die mit denen von Oneiric übereinstimmen) mit neu ausgewählten zu lösen
compiz-fusion-plugins-extra
!!!.Was gefährlicher ist, ist, dass versucht wird, Grafiktreiberpakete (xserver-xorg -....) zu entfernen, um Konflikte mit neuen Compizes zu vermeiden.
(Wahrscheinlich, wenn ich sie auch in meinem lokalen Repository hatte, können sie wollen sicher zu degradieren. Aber da diese Pakete in der Regel installiert sind, habe ich sie nicht herunterladen, ist so nicht in lokalen Repo, daher ist dieses Ergebnis) .
Fazit : Die Verwendung von
/etc/apt/preferences
wird daher nur empfohlen, wenn Sie über ein vollständiges Repository im lokalen System verfügen.Was ist, wenn mehrere Instanzen (.deb-Datei) derselben Version in vielen Repositorys vorhanden sind?
Welches wird durch das
apt_preference
Handbuch beschriebenEin Beispiel für Anwendungsfälle für die
/etc/apt/preferences
Datei:Ein Beispiel für das Erzwingen
apt-get
der Auswahl einer in einem benutzerdefinierten Repository verfügbaren Version anstelle von Ubuntus Standard ist möglicherweise die "Linux Mint" -Distribution. Sie verwenden diese benutzerdefiniertepreference
Datei.Dies bewirkt effektiv, dass sie Pakete bereitstellen, wenn sie diese in ihren Repositories haben. Wenn sie diese jedoch nicht haben, verwenden sie Ubuntus Standard-Repository.
Ein Beispiel, das ausgeführt wird,
apt-get
nachdem die höchste Priorität für das lokale Repository festgelegt wurdeIch wollte nur ein
kubuntu-desktop
Paket über Ubuntu installieren , um KDE zu testen. (Ich habe das vergessen, ich habe eine Voreinstellung mit/etc/apt/preference
Datei festgelegt) . Ich hatte eine ISO des Kubuntu-12.04-Alternate-Installers, also dachte ich, ich kann das benutzen.(Nachdem ich die ISO als Repository-Quelle richtig eingestellt hatte) , lief ich
sudo apt-get install kubuntu-desktop
und war überrascht, als ich die Ausgabe unten sah.Das Ergebnis hat mich überrascht. Ich erinnere mich plötzlich, dass ich eine Voreinstellung ( zum Schreiben dieser Antwort ) festgelegt habe
/etc/apt/preference
, um die höchste Priorität für mein lokales Repository festzulegen.Also habe ich folgendes ausgeführt:
apt-cache policy kubuntu-desktop
Die Ausgabe war wie folgt:In dieser Ausgabe sehen wir, dass sowohl "cdrom" als auch "exact main repository" die Versionsnummer 1.254 haben , während das lokale Repository die Version 1.222.1kde47 ~ ppa2 hat , die eine niedrigere Version ist. Obwohl sie in der Datei sources.list vor den lokalen platziert sind, haben lokale Pakete Vorrang.
Um explizit zu sehen, dass
apt-get
tatsächlich versucht wird, von einem lokalen zu installieren, lief ichsynaptic
und bekam dieses, was zeigt, dass das Apt-System 1.222.1kde47 ~ ppa2 als zu installierende Kandidatenversion betrachtet.Auch
apt-cache policy kubuntu-desktop
zeigen die gleichen DingeUm dies zu lösen, entfernte ich die
/etc/apt/preference
Datei vonsudo rm /etc/apt/preference
.Dann lief das nochmal wieder
apt-cache policy kubuntu-desktop
. nur diese erwartete Ausgabe zu sehen.Auch das lief wieder.
sudo apt-get install kubuntu-desktop
um die Ausgabe unten zu sehen:Das vollständige Ergebnis können Sie hier einsehen
Dann bin ich mir ziemlich sicher über den Erklärungsteil.
Referenz 1: Das Handbuch zu apt_preference
Referenz 2: So behalten Sie eine bestimmte Version der installierten Pakete bei
quelle