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 policy
perintah 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.