Bagaimana cara saya memilih paket dari PPA?

45

Apakah ada cara untuk memilih paket ceri dari repositori ppa yang Anda tambahkan? Artinya, untuk mengecualikan beberapa dari pembaruan sambil memasukkan yang lain?

Sebagai contoh, saya hanya ingin paket browser-khrom dari repositori ini tetapi tidak yang lain. Jadi saya tidak ingin saya sudo apt-get upgrademenginstal paket ppa yang lain (selain chromium-browser) dari yang sudah ada, hanya saja.

Saya menyadari ini adalah lisensi untuk menembak diri sendiri jika saya salah membaca dependensi dan mengecualikan yang diperlukan untuk yang saya sertakan, tapi saya tahu dalam hal ini bahwa paket lain bukan dependensi untuk yang itu.

Apakah ini mungkin? Mungkin ada beberapa file daftar putih / daftar hitam atau sesuatu?

yuvilio
sumber
Saya akan menyampaikan sinaptik karena tiga alasan: Ubuntu menjatuhkannya sebagai pembaruan perangkat lunak yang mendukung Ubuntu Software Center, saya tidak melihat cara bagi Synaptic untuk menghentikan peningkatan dari ppa di atas file yang diinstal (yang merupakan masalah saya), dan saya lebih suka solusi baris perintah daripada yang GUI. Akhirnya menemukan sesuatu yang berhasil (lihat jawaban saya di bawah).
yuvilio
2
Pusat Perangkat Lunak digunakan untuk Menginstal dan Menghapus perangkat lunak, Update Manager digunakan untuk Memperbarui, Anda bisa menggunakan pinning di Synaptic sehingga paket-paket lain tidak akan ditingkatkan, juga untuk pengguna baru yang tidak ingin mengacaukan dengan Terminal. GUI lebih disukai, tentu saja jawaban Anda cukup banyak.
Uri Herrera
Ada beberapa hal yang tidak bisa Anda lakukan melalui Software-Center (yang mudah dengan Synaptic). Dan tidak semua orang (terutama pemula) merasa nyaman dengan commandline.
Mrokii
@Rokii Saya setuju bahwa pendekatan saya bukan untuk pemula. Jawaban Synaptic yang Anda tulis dan Uri Herrera mengisyaratkan, yang saya anggap berhasil, lebih baik dalam hal itu. Saya akan membiarkan orang lain yang mencobanya menilai itu.
yuvilio

Jawaban:

61

Menemukan satu cara untuk melakukannya.

Caranya adalah menggunakan dua klausa menjepit. Yang pertama untuk melarang SEMUA paket dari PPA dan yang kedua untuk memilih yang Anda inginkan.

Jadi untuk contoh di atas, saya pertama-tama menambahkan ppa seperti biasa:

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

Sekarang jika saya menjalankan kebijakan apt-cache, itu akan menunjukkan kepada saya bahwa ada versi yang lebih baru dari browser kromium yang tersedia dan akan diinstal dengan pemutakhiran karena berada dalam prioritas yang sama (500) dengan browser kromium saya saat ini.

$ 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)
$ 

Itu bagus sejauh paket itu tetapi saya tidak ingin yang lain di ppa ini (yang juga memiliki prioritas 500) untuk menginstal. Saat ini jika saya mencoba untuk memutakhirkan, saya akan mendapatkan lebih dari sekadar paket kromium yang saya inginkan dari repositori itu:

$ 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]? 

Jadi yang bisa saya lakukan adalah mengatakan bahwa saya ingin semua paket dalam ppa itu, pratinjau webapps dalam hal ini, memiliki prioritas yang lebih rendah kecuali yang memiliki "chromium" dalam namanya. Mekanisme untuk ini adalah menyematkan paket

Saya membuat file di /etc/apt/preferences.d/ dengan dua klausa. Yang pertama mengatakan memberikan semua paket di papp-preview webapps prioritas yang lebih rendah daripada yang biasa (sehingga mereka tidak disukai bahkan jika mereka memiliki nomor versi yang lebih tinggi. Klausa kedua sebagian menimpa yang pertama dengan mengatakan memberi paket di bahwa ppa dengan "chromium" dalam nama mereka prioritas yang sama dengan paket lain sehingga itu akan diinstal (dengan itu memiliki nomor versi yang lebih tinggi).

$ 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

Untuk mengidentifikasi string yang benar untuk opsi "Pin: release" kita dapat menggunakan kebijakan apt-cache lagi.

$ 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
...

Untuk versi apt <0.8.14 paket yang disematkan harus ditentukan secara eksplisit karena wildcard tidak berfungsi:

$ 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

Dan sekarang, ketika saya mencoba untuk meng-upgrade saya hanya mendapatkan paket yang saya inginkan dari ppa itu dan bukan yang lain. Semua cherry memilih dengan baik untuk saya:

$ 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
sumber
5
cukup rumit, imho.
Mrokii
5
Saya tidak setuju, ini sangat mudah untuk apa yang orang inginkan. Dan menyenangkan untuk memiliki semua instruksi untuk mengidentifikasi nama Pin ppa.
Nicholi
Jawaban spesifik ini adalah untuk mereka yang ingin memastikan apt akan selalu lebih suka paket-paket repositori tertentu. Jika Anda menginginkan solusi satu kali, coba jawaban ini
Braiam
8

Anda juga dapat memilih rilis yang ingin Anda instal dengan ?originpemilih:

Cocok dengan versi paket yang asalnya cocok dengan asal ekspresi reguler. Misalnya, "!? Origin (debian)" akan menemukan paket tidak resmi di sistem Anda (paket bukan dari arsip Debian).

Jadi, dalam kasus spesifik Anda, Anda dapat menggunakan:

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

Atau Anda dapat menentukan versi menggunakan <packagename>=<version>:

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

Anda sebenarnya dapat "memilih cherry" paket tertentu melalui Synaptic dan itu sangat mudah. Ini berfungsi seperti ini:

  • Jika Anda ingin melakukan itu hanya untuk PPA tertentu, pilih "Asal" (sudut kiri bawah) di jendela Synaptic dan kemudian pilih PPA yang ingin Anda ubah

  • pilih semua paket yang tidak ingin Anda tingkatkan lagi secara otomatis.

  • pilih menu "Paket / Versi Kunci". Semua paket yang Anda pilih tidak akan ditingkatkan secara otomatis lagi sampai Anda membuka kunci lagi.

Mrokii
sumber