Apakah mungkin hanya mengizinkan pembaruan paket tertentu dari PPA

19

Katakanlah saya telah menambahkan PPA yang memiliki paket X yang saya inginkan tetapi juga memiliki paket Y yang saya tidak ingin gunakan atau menerima pembaruan dari. Bagaimana saya, dari PPA yang sama, dapat menerima pembaruan untuk paket tertentu tetapi menolak pembaruan dari PPA yang sama untuk paket lain.

Contoh langkah demi langkah akan baik karena ini telah terjadi pada saya di beberapa AKP yang memiliki paket tertentu yang saya inginkan tetapi juga menambahkan sejumlah besar yang lain yang belum saya perbarui.

Luis Alvarado
sumber

Jawaban:

16

Anda akan menggunakan apa yang disebut "menjepit"

Dengan asumsi Anda menginstal paket foo dari PPA, Anda hampir pasti perlu menginstal dependensi dari ppa juga.

Tetapi jika ada program lain, Anda bisa menentukan repositori mana yang akan digunakan dengan menyematkan.

Lihat menyematkan wiki Ubuntu

Ada contoh menyematkan ppa di halaman itu

https://help.ubuntu.com/community/PinningHowto#Pinning_the_ubuntu-mozilla-daily_PPA

Dari halaman wiki:

Untuk membuat pemutakhiran apt-get semudah mungkin menetapkan Pin-Priority yang lebih rendah pada PPA, ini akan menghentikan versi paket yang tidak diinginkan dari pemasangan. Setelah diatur, paket dari PPA ubuntu-mozilla-daily akan selalu hilang dalam setiap kontes dengan paket dari repositori lain, bahkan jika mereka memiliki versi yang lebih tinggi.

Buat file /etc/apt/preferences.d/ubuntu-mozilla-daily-pin-400

Tambahkan yang berikut ke file:

Package: *
Pin: release o=LP-PPA-ubuntu-mozilla-daily
Pin-Priority: 400

Gunakan perintah berikut, sebelum dan sesudah, untuk memeriksa apakah Prioritas-Pin telah diperbarui.

apt-cache policy

apt-cache policy firefox-3.5
Harimau kumbang
sumber
7

Pertama-tama, jika Anda telah meningkatkan paket dari PPA karena kesalahan, lihat jawaban ini: /ubuntu//a/142808/103117 khususnya bagian tentang menggunakan ppa-purge. Karena saya telah memutakhirkan paket dan apt-get tidak akan menurunkan versi apa pun prioritasnya, paling mudah untuk membersihkan semua paket yang ditingkatkan terlebih dahulu, kemudian memperbaiki prioritas, kemudian menambahkan kembali PPA dan hanya memutakhirkan paket yang Anda inginkan.

Untuk penjelasan lengkap tentang sistem prioritas / penjepit, lihat man apt_preferences.

Jika sebuah paket tersedia dari berbagai sumber, masing-masing akan diberi prioritas dan Anda dapat melihatnya dengan apt-cache policy <package name>. Sebagai contoh, saya menggunakan PPA yang disebut nathan-renniewaldock / ppa / ubuntu dan saya tidak ingin menginstal mysql-server-5.5 ("paket Y") dari sana. Jadi saya dapat memeriksa situasi saya saat ini dengan:

rob@frodo:~$ apt-cache policy mysql-server-5.5
mysql-server-5.5:
  Installed: 5.5.27-1~ppa1~precise
  Candidate: 5.5.27-1~ppa1~precise
  Version table:
 *** 5.5.27-1~ppa1~precise 0
        500 http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/ precise/main amd64 Packages
        100 /var/lib/dpkg/status
     5.5.24-0ubuntu0.12.04.1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ precise-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu/ precise-security/main amd64 Packages
     5.5.22-0ubuntu1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ precise/main amd64 Packages

Jadi karena semuanya prioritas 500, menurut halaman manual yang dipilih dengan nomor versi tertinggi.

Jika, misalnya, Anda ingin menginstal hanya ddclient ("paket X"), tetapi tidak untuk paket lain, Anda ingin mengurangi prioritas untuk semua paket dalam PPA kecuali untuk ddclient. Buat file bernama /etc/apt/preferences.d/nathan-preferences. Perhatikan bahwa semua file dalam direktori itu dibaca dan ada beberapa aturan tentang nama file (itu harus hanya berisi karakter alfanumerik, tanda hubung, tanda hubung dan tidak memiliki ekstensi atau diakhiri dengan .pref).

Pertama, kita perlu tahu cara mengidentifikasi PPA kita. The apt-cache policyperintah pada informasi dispays sendiri tentang semua sumber. Saya tahu PPA saya memiliki nama "nathan" jadi saya melakukannya:

$ apt-cache policy | grep nathan
400 http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/ precise/main i386 Packages
     release v=12.04,o=LP-PPA-nathan-renniewaldock,a=precise,n=precise,l=PPA,c=main

Bagian yang menarik adalah "o = LP-PPA-nathan-renniewaldock", yang kami gunakan dalam file /etc/apt/preferences.d/nathan-prefs seperti ini:

Package: *
Pin: release o=LP-PPA-nathan-renniewaldock
Pin-Priority: 400

Package: ddclient
Pin: release o=LP-PPA-nathan-renniewaldock
Pin-Priority: 500

Ini menetapkan semua yang ada di PPA ke prioritas 400, lalu mengubah ddclient kembali ke default 500. Sekarang, saya dapat memeriksa apakah itu berhasil:

$ apt-cache policy ddclient
ddclient:
  Installed: 3.8.0-11.4ubuntu1
  Candidate: 3.8.1-0~ppa1~precise
  Package pin: 3.8.1-0~ppa1~precise
  Version table:
     3.8.1-0~ppa1~precise 500
        400 http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/ precise/main amd64 Packages
 *** 3.8.0-11.4ubuntu1 500
        500 http://gb.archive.ubuntu.com/ubuntu/ precise/universe amd64 Packages
        100 /var/lib/dpkg/status

Jadi ddclient memiliki prioritas 500, yang sama dengan paket Ubuntu asli, tetapi akan diinstal dari nathan PPA karena itu adalah versi yang lebih tinggi. Sekarang mari kita pastikan paket lain tidak akan diinstal:

$ apt-cache policy mysql-server
mysql-server:
  Installed: 5.5.24-0ubuntu0.12.04.1
  Candidate: 5.5.24-0ubuntu0.12.04.1
  Version table:
     5.5.27-1~ppa1~precise 0
        400 http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/ precise/main amd64 Packages
 *** 5.5.24-0ubuntu0.12.04.1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ precise-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu/ precise-security/main amd64 Packages
        100 /var/lib/dpkg/status
     5.5.22-0ubuntu1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ precise/main amd64 Packages

Dalam hal ini paket dari nathan PPA memiliki prioritas 400 yang lebih rendah daripada Ubuntu, jadi meskipun versi yang lebih tinggi tidak akan diupgrade. Kami dapat memeriksa dengan:

$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be upgraded:
  ddclient
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 77.7 kB of archives.
After this operation, 11.3 kB of additional disk space will be used.
Do you want to continue [Y/n]?

Karena hanya paket yang saya inginkan yang akan ditingkatkan, saya senang mengatakan ya.

Rob Fisher
sumber