Bagaimana cara membatasi pembaruan yang diinstal pada pembaruan dari kumpulan repositori tertentu? Apakah ini mungkin?
Bagaimana cara membatasi pembaruan yang diinstal pada pembaruan dari kumpulan repositori tertentu? Apakah ini mungkin?
Jawaban:
Pinning adalah proses yang memungkinkan Anda untuk tetap pada rilis Ubuntu yang stabil (atau sistem debian lainnya) sambil mengambil paket dari versi yang lebih baru. - help.ubuntu.com
Anda dapat menonaktifkan pembaruan otomatis dari repositori tertentu tanpa sepenuhnya menghapusnya melalui apt
kebijakan:
Untuk menonaktifkan pembaruan otomatis dari repositori repo
, tambahkan file /etc/apt/preferences.d/repo
dengan konten berikut:
Package: *
Pin: release n=repo
Pin-Priority: 50
Yang akan memberikan semua paket dari repositori ini prioritas yang lebih rendah daripada paket yang sudah diinstal (yang memiliki 100).
Untuk informasi lebih lanjut man apt_preferences
atau periksa Wiki Komunitas Ubuntu .
apt-cache policy package-name
release n=repo
tidak akan menembolok siapa pun
Anda dapat menentukan rilis dengan -t
opsi. Sebagai contoh, saya telah menambahkan repositori berikut /etc/apt/sources.list
untuk menginstal rilis terbaru Iceweasel:
deb http://mozilla.debian.net/ squeeze-backports iceweasel-release
Seperti yang Anda ketahui ada paket yang sama iceweasel
di repositori resmi Debian. Jika saya ingin menginstal Iceweasel dari rilis spesifik ini saya jalankan:
apt-get install -t squeeze-backports iceweasel
dari halaman manual apt-get:
-t, --target-release, --default-release
This option controls the default input to the policy engine, it creates a default pin at priority 990 using the specified
release string. This overrides the general settings in /etc/apt/preferences. Specifically pinned packages are not affected by
the value of this option. In short, this option lets you have simple control over which distribution packages will be retrieved
from. Some common examples might be -t '2.1*', -t unstable or -t sid. Configuration Item: APT::Default-Release; see also the
apt_preferences(5) manual page.
Saya pikir ini adalah solusi yang lebih baik.
UPDATE : Seperti @SuB disebutkan dalam komentar, " -t
menentukan rilis bukan nama repositori. Tidak ada nama repositori di Ubuntu (tidak seperti linux berbasis RedHat seperti RHEL, Fedora, CentOS, ...)".
apt-get
manual, -t
tentukan rilis bukan nama repositori. Tidak ada nama repositori di Ubuntu (tidak seperti linux berbasis RedHat seperti RHEL, Fedora, CentOS, ...)
-t xenial
bekerja untuk satu paket. tetapi semua dependensinya masih akan diambil dari paket yang lebih tinggi
Anda harus menyematkan repositori yang tidak ingin Anda instal dengan prioritas kurang dari 100. Artinya (dari apt_preference
halaman manual)
100 <= P <500
menyebabkan versi diinstal kecuali ada versi yang tersedia milik beberapa distribusi lain atau versi yang diinstal lebih baru
Dan untuk memilih repositori untuk disematkan, Anda akan menggunakan bidang dari Release
file repositori . Seperti archive
, label
, release
, version
dll Dengan menentukan nilai-nilai bidang ini, Anda justru dapat memilih repositori dan menetapkan prioritas pilihan Anda untuk itu. Periksa halaman apt_preference untuk lebih jelasnya.
Sebelum melanjutkan, kita perlu mengetahui beberapa hal penting tentang menyematkan. Itu termasuk
Bidang Release
file dan pemetaan untuk apt-cache policy
output
Format file preferensi apt
Menggunakan Release
bidang file untuk menetapkan prioritas
Release
file dan apt-cache policy
outputDari artikel Wiki Debian
Anda akan melihat output dari apt-cache policy
seperti ini
500 http://mirrors.ircam.fr/pub/ubuntu/archive xenial/main amd64 Packages
release v=16.04,o=Ubuntu,a=xenial,n=xenial,l=Ubuntu,c=main,b=amd64
Nilai dalam baris ini berasal dari Release
file.
Deskripsi mengatur deskripsi untuk repositori. Ini tidak ditampilkan dalam apt-cache policy
output
Label itu adalah label repositori. Banyak repositori memiliki label kosong. Itu ditampilkan di l=<label>
dalam output.
Asal ini menceritakan tentang asal repositori. Repositori resmi Ubuntu memiliki Ubuntu
nilai. Tampil seperti o=
pada output
Versi adalah versi distribusi. Ini 16,04 untuk Xenial. Tampil seperti v=
pada output
Suite sama dengan Arsip . Dari debian wiki itu adalah Nama distribusi Debian paket dalam direktori ini milik (atau dirancang untuk), yaitu stabil, pengujian atau tidak stabil. . Untuk Ubuntu, ini release-updates
, release-security
dll. Misalnya xenial-updates
,, xenial-security
. Ini ditampilkan dalam output sebagai a=xenial
, a=xenial-security
. PPA hanya menggunakan nama rilis untuk ini, itu sebabnya tidak banyak membantu dalam Pinning.
Komponen menceritakan tentang hal perizinan. Ini main
, multiverse
, restricted
, universe
di Ubuntu. Dalam output itu ditampilkan sebagai c=main
atau c=restricted
lain - lain. Sebagian besar PPA digunakan main
untuk bidang ini, sehingga tidak banyak membantu dalam menyematkan banyak.
Arsitektur adalah tentang arsitektur OS. Ditampilkan sebagai b=i386
atau b=amd64
dalam output
Codename adalah nama rilis distribusi. Untuk 16,04 itu xenial
. Untuk 14,04 itu trusty
. Ditampilkan dalam apt-cache policy
output sebagai n=xenial
atau n=trusty
. Itu sama untuk semua repositori untuk distribusi tunggal biasanya. Itu sebabnya tidak banyak membantu dalam menyematkan banyak.
Baris lain dalam apt-cache policy
output dimulai dengan origin
memberitahu asal Internet repositori. Ini juga dapat digunakan dalam menjepit. Tapi jangan dicampur dengan bidang Release
file Origin
. Itu berbeda.
Kami akan menggunakan nilai-nilai ini untuk menyematkan repositori.
Jadi, bagaimana kita menggunakan menyematkan 1 untuk membatasi repositori?
Ada beberapa cara untuk mengendalikan pinning dan hanya sebagian kecil yang efektif untuk Ubuntu. Penjelasan detail berada di luar cakupan jawabannya. Silakan merujuk ke apt_preference
halaman manual untuk ini.
Sematkan atau apt file preferensi berada di /etc/apt/preferences.d
folder. Setiap pinning mengandung tiga garis.
Baris pertama dimulai dengan Package:
dan nama paket yang dipisahkan koma mengikuti. Ekspresi dan gumpalan reguler diizinkan
Baris kedua dimulai dengan Pin:
dan digunakan untuk menargetkan satu set paket.
Jika kami ingin menyematkan paket dari yang xenial
lebih tinggi xenial-updates
, kami akan gunakan release a=xenial
.
Jika kami ingin menyematkan versi 5.0, kami akan gunakan di version 5.0
sini. Pattens Glob diizinkan.
Atau jika kami ingin menyematkan paket dari asal http://archive.ubuntu.com
, kami akan gunakan origin "archive.ubuntu.com"
. Catatan, kami tidak menulis http://
protokol di sana.
Baris ketiga dimulai dengan Pin-Priority:
dan nilainya adalah angka. Yang menandakan prioritas dari item yang ditargetkan di atas.
Release
bidang file untuk mengatur prioritasBerikut ini sebuah contoh
Package: *
Pin: release a=xenial
Pin-Priority: 1001
Dalam contoh ini, paket dari xenial
arsip diberikan prioritas lebih tinggi daripada xenial-updates
danxenial-security
.
Setelah menyematkan, menjalankan apt-cache policy nautilus
pertunjukan menunjukkan bahwa memang telah memberikan prioritas lebih tinggi ke versi yang lebih rendah dari xenial
arsip daripada versi yang lebih tinggi dari xenial-updates
arsip. Perhatikan Candidate:
garisnya.
nautilus:
Installed: 1:3.18.5-0ubuntu1~xenial1
Candidate: 1:3.18.4.is.3.14.3-0ubuntu4
Version table:
*** 1:3.18.5-0ubuntu1~xenial1 100
100 /var/lib/dpkg/status
1:3.18.4.is.3.14.3-0ubuntu5 500
500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
1:3.18.4.is.3.14.3-0ubuntu4 1001
500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
Tapi, Jika kami ingin memberikan prioritas lebih dari paket yang disediakan PPA juga, ini tidak akan berhasil. Karena PPA menggunakan nama arsip yang sama xenial
secara default. Jadi, menetapkan prioritas untuk a=xenial
juga berlaku untuk paket-paket itu. Misalnya (setelah PPA diaktifkan),
13:31 $ apt-cache policy nautilus
nautilus:
Installed: 1:3.18.5-0ubuntu1~xenial1
Candidate: 1:3.18.5-0ubuntu1~xenial1
Version table:
*** 1:3.18.5-0ubuntu1~xenial1 1001
500 http://ppa.launchpad.net/budgie-remix/ppa/ubuntu xenial/main amd64 Packages
500 http://ppa.launchpad.net/gnome3-team/gnome3/ubuntu xenial/main amd64 Packages
100 /var/lib/dpkg/status
1:3.18.4.is.3.14.3-0ubuntu5 500
500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
1:3.18.4.is.3.14.3-0ubuntu4 1001
500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
Sekarang versi kandidat berasal dari PPA. Kedua paket dari xenial
arsip repo resmi Ubuntu dan PPA memiliki prioritas yang sama 1001
, karena keduanya menggunakan nilai yang sama untuk Archive
di file Release. Agar berhasil disematkan, kita perlu menggabungkan lebih banyak bidang dalam file Pin.
Untuk menyematkan paket dari repositori, kita perlu menargetkannya menggunakan informasi yang ditemukan dari apt-cache policy
perintah. Kami baru saja melihat itua=xenial
tidak akan membantu menunjuk repositori. Kita perlu menggunakan beberapa bidang bersama-sama menggunakan koma dalam file preferensi untuk secara tepat menargetkan repositori.
Misalnya, untuk mencegah semua paket dari http://ppa.launchpad.net/oibaf/graphics-drivers/
ppa, kita bisa menggunakan
Package: *
Pin: release n=xenial,o=LP-PPA-oibaf-graphics-drivers
Pin-Priority: 10
Di sini kita menggunakan nilai nama kode serta Origin
nilai PPA. (Meskipun nilai nama kode sebenarnya tidak diperlukan di sini). Terkadang repositori kehilangan nilai ini. Dalam kasus tersebut, beberapa teknik lain harus digunakan. Keluaran dari apt-cache policy libgl1-mesa-glx
kata itu bekerja. Ini menurunkan prioritas semua paket PPA ini.
libgl1-mesa-glx:
Installed: 12.1~git1608200730.16ef7a~gd~x
Candidate: 12.1~git1608200730.16ef7a~gd~x
Version table:
*** 12.1~git1608200730.16ef7a~gd~x 100
-10 http://ppa.launchpad.net/oibaf/graphics-drivers/ubuntu xenial/main amd64 Packages
100 /var/lib/dpkg/status
11.2.0-1ubuntu2.1 500
500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
11.2.0-1ubuntu2 500
500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
Abaikan fakta bahwa itu adalah Calon. Ini senang, karena sudah diinstal di sistem saya . Periksa prioritas di kanan
Jika kita ingin menyematkan repositori yang informasi rilisnya tidak ada, seperti ini http://download.opensuse.org/repositories/home:/sarimkhan/xUbuntu_14.04
, kita harus menggunakan metode lain. Karena, tidak ada repositori lain yang menggunakan sumber itu, kami dapat dengan aman menggunakan origin
untuk menyimpan repositori ini.
Package: *
Pin: origin download.opensuse.org
Pin-Priority: 10
Catatan 1: Asal ini adalah asal Internet, bukan yang menentukan Vendor dalam file Rilis.
Catatan 2: Pin-Priority
angka memiliki arti khusus. Periksa apt_preference
halaman manual untuk detailnya.
Pilihan yang jelas adalah mengubah /etc/apt/sources.list
dan mengomentari semua repositori lainnya, dan kemudian jalankan
apt-get update && apt-get upgrade && apt-get autoclean
Dan kemudian hapus komentar dari sources.list
. Mungkin bukan cara terbaik, tetapi setidaknya apt-get
halaman manual tidak menentukan cara apa pun untuk melakukan itu.
Pada catatan terkait, misalnya proses peningkatan distribusi Ubuntu menonaktifkan semua repositori pihak ke-3 selama peningkatan (dan tidak hanya menjalankan beberapa opsi untuk mengecualikan mereka untuk sementara).