Wie kann ich Pakete von einem PPA auswählen?

45

Gibt es eine Möglichkeit, Pakete aus einem von Ihnen hinzugefügten ppa-Repository auszuwählen? Das heißt, einige von der Aktualisierung ausschließen, während andere einbezogen werden?

Zum Beispiel möchte ich nur das Chrom-Browser-Paket aus diesem Repository, aber nicht die anderen. Daher möchte ich nicht sudo apt-get upgrade, dass die anderen Pakete von ppa (außer Chrom-Browser) über meinen vorhandenen Paketen installiert werden, nur dieses.

Mir ist klar, dass dies eine Lizenz ist, sich selbst in den Fuß zu schießen, wenn ich Abhängigkeiten falsch interpretiere und diejenigen ausschließe, die für die von mir eingeschlossenen benötigt werden, aber ich weiß in diesem Fall, dass die anderen Pakete keine Abhängigkeiten für diese sind.

Ist das überhaupt möglich? Vielleicht gibt es eine Whitelist / Blacklist-Datei oder so?

yuvilio
quelle
Ich würde synaptic aus drei Gründen weitergeben: Ubuntu hat es als Software-Updater zugunsten von Ubuntu Software Center fallen gelassen. Synaptic sah keine Möglichkeit, Upgrades von einem ppa über installierte Dateien zu stoppen (was mein Problem war), und ich Ziehen Sie eine Befehlszeilenlösung einer GUI vor. Ich habe etwas gefunden, das funktioniert hat (siehe meine Antwort unten).
Yuvilio
2
Das Software Center wird zum Installieren und Entfernen von Software verwendet, der Update Manager wird zum Aktualisieren verwendet. Sie könnten das Fixieren in Synaptic verwenden, damit die anderen Pakete nicht aktualisiert werden, auch für einen neuen Benutzer, der nicht mit dem Terminal herumspielen möchte GUI wäre vorzuziehen, natürlich ist Ihre ziemlich genau die richtige Antwort.
Uri Herrera
Es gibt ein paar Dinge, die Sie mit dem Software-Center einfach nicht erledigen können (die mit Synaptic einfach sind). Und nicht jeder (insbesondere Neulinge) ist mit der Kommandozeile vertraut.
Mrokii
@ Mrokii Ich bin damit einverstanden, dass mein Ansatz nicht für Anfänger ist. Die synaptische Antwort, die Sie geschrieben und Uri Herrera angedeutet haben, von der ich annehme, dass sie funktioniert, ist in dieser Hinsicht besser. Ich lasse andere, die es versuchen, es bewerten.
Yuvilio

Antworten:

61

Einen Weg gefunden, es zu tun.

Der Trick besteht darin, zwei Pinning-Klauseln zu verwenden. Der erste, der ALLE Pakete von der PPA verbietet, und der zweite, der die gewünschten Pakete auswählt.

Für das obige Beispiel füge ich also zunächst das ppa wie gewohnt hinzu:

$ sudo add-apt-repository ppa:webapps/preview
...
$ sudo apt-get update
...

Wenn ich nun eine apt-cache-Richtlinie ausführe, wird mir angezeigt, dass eine neuere Version des Chrom-Browsers verfügbar ist und dass diese mit einem Upgrade installiert wird, da sie dieselbe Priorität (500) hat wie mein aktueller Chrom-Browser.

$ sudo apt-cache policy chromium-browser
chromium-browser:
  Installed: 18.0.1025.168~r134367-0ubuntu0.12.04.1
  Candidate: 20.0.1132.47~r144678-0precise1+webapps3
  Version table:
     20.0.1132.47~r144678-0precise1+webapps3 0
        500 http://ppa.launchpad.net/webapps/preview/ubuntu/ precise/main amd64 Packages
 *** 18.0.1025.168~r134367-0ubuntu0.12.04.1 0
        500 http://us.archive.ubuntu.com/ubuntu/ precise-updates/universe amd64 Packages
        500 http://security.ubuntu.com/ubuntu/ precise-security/universe amd64 Packages
        500 http://ppa.launchpad.net/chromium-daily/beta/ubuntu/ precise/main amd64 Packages
        100 /var/lib/dpkg/status
     18.0.1025.151~r130497-0ubuntu1 0
        500 http://us.archive.ubuntu.com/ubuntu/ precise/universe amd64 Packages
E: Unable to parse package file /etc/apt/preferences.d/webapps-preview-pin-400 (1)
$ 

Das ist großartig in Bezug auf dieses Paket, aber ich möchte nicht, dass die anderen in diesem Paket (das ebenfalls eine Priorität von 500 hat) installiert werden. Im Moment, wenn ich ein Upgrade versuche, bekomme ich mehr als nur die gewünschten Chrompakete aus diesem Repository:

$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages have been kept back:
  bamfdaemon gwibber gwibber-service gwibber-service-facebook gwibber-service-twitter indicator-appmenu libbamf0 libbamf3-0 shotwell
The following packages will be upgraded:
  chromium-browser chromium-browser-l10n chromium-codecs-ffmpeg gwibber-service-identica indicator-messages indicator-status-provider-mc5
  indicator-status-provider-pidgin libindicator-messages-status-provider1
8 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
Need to get 25.3 MB of archives.
After this operation, 5,034 kB of additional disk space will be used.
Do you want to continue [Y/n]? 

Also kann ich apt sagen, dass ich möchte, dass alle Pakete in diesem ppa, in diesem Fall webapps-preview, eine niedrigere Priorität haben , mit Ausnahme derjenigen, deren Name "chrom" enthält. Der Mechanismus dafür ist das Fixieren eines Pakets

Ich erstelle eine Datei in /etc/apt/preferences.d/ mit zwei Klauseln. Der erste Satz besagt, dass alle Pakete in der webapps-preview ppa eine niedrigere Priorität haben als die regulären (so dass sie nicht bevorzugt werden, selbst wenn sie eine höhere Versionsnummer haben. Der zweite Satz setzt den ersten Satz teilweise außer Kraft, indem er besagt, dass die Pakete in dass ppa mit "chromium" in ihrem namen die gleiche priorität wie andere pakete hat, damit es installiert wird (indem es eine höhere versionsnummer hat).

$ cat /etc/apt/preferences.d/webapps-preview-pin-400
Package:  *
Pin: release o=LP-PPA-webapps-preview
Pin-Priority: 400


Package:  *chromium*
Pin: release o=LP-PPA-webapps-preview
Pin-Priority: 500

Um die richtige Zeichenfolge für die Option "Pin: release" zu ermitteln, können wir die apt-cache-Richtlinie erneut verwenden.

$ apt-cache policy
...
500 http://ppa.launchpad.net/webapps/preview/ubuntu/ precise/main i386 Packages
    release v=12.04,o=LP-PPA-webapps-preview,a=precise,n=precise,l=preview,c=main
    origin ppa.launchpad.net
...

Für apt-Versionen <0.8.14 müssen angeheftete Pakete explizit angegeben werden, da Platzhalter nicht funktionieren:

$ cat /etc/apt/preferences.d/webapps-preview-pin-400
Package:  *
Pin: release o=LP-PPA-webapps-preview
Pin-Priority: 400


Package:  chromium-browser chromium-codecs-ffmpeg chromium-browser-l10n chromium-codecs-ffmpeg-extra
Pin: release o=LP-PPA-webapps-preview
Pin-Priority: 500

Und jetzt, wenn ich versuche zu aktualisieren, bekomme ich nur die Pakete, die ich von diesem ppa haben möchte und nicht die anderen. Alles schön Kirsche für mich gepflückt:

$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be upgraded:
  chromium-browser chromium-browser-l10n chromium-codecs-ffmpeg
3 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 25.1 MB of archives.
After this operation, 5,026 kB of additional disk space will be used.
Do you want to continue [Y/n]?
yuvilio
quelle
5
ziemlich kompliziert, imho.
Mrokii
5
Ich bin anderer Meinung, das ist ziemlich einfach für das, was jemand mag. Und schön, alle Anweisungen zur Identifizierung des PIN-Namens des ppa zu haben.
Nicholi
Diese spezielle Antwort richtet sich an diejenigen, die sicherstellen möchten, dass apt immer Pakete eines bestimmten Repositorys bevorzugt. Wenn Sie eine einmalige Lösung wünschen, versuchen Sie diese oder diese
Braiam
8

Sie können das Release, aus dem Sie installieren möchten, auch mit dem ?originSelektor auswählen :

Entspricht Paketversionen, deren Ursprung dem Ursprung des regulären Ausdrucks entspricht. Zum Beispiel findet "!? Origin (debian)" alle inoffiziellen Pakete auf Ihrem System (Pakete, die nicht aus dem Debian-Archiv stammen).

In Ihrem speziellen Fall können Sie also Folgendes verwenden:

sudo aptitude install !?origin(LP-PPA-webapps-preview) chromium

Oder Sie können die Version angeben mit <packagename>=<version>:

sudo apt-get install chromium=20.0.1132.47~r144678-0precise1+webapps3
Braiam
quelle
5

Sie können bestimmte Pakete über Synaptic "auswählen" und es ist sehr einfach. Das funktioniert so:

  • Wenn Sie dies nur für bestimmte PPAs tun möchten, wählen Sie "Ursprung" (untere linke Ecke) im Synaptic-Fenster und wählen Sie dann die PPA, die Sie ändern möchten

  • Wählen Sie alle Pakete aus, die Sie nicht mehr automatisch aktualisieren möchten.

  • Wählen Sie das Menü "Package / Lock Version". Alle Pakete, die Sie ausgewählt haben, werden nicht mehr automatisch aktualisiert, bis Sie sie wieder entsperren.

Mrokii
quelle