Bagaimana cara hanya menginstal pembaruan dari repositori tertentu?

39

Bagaimana cara membatasi pembaruan yang diinstal pada pembaruan dari kumpulan repositori tertentu? Apakah ini mungkin?

Ton van den Heuvel
sumber
Apakah Anda ingin dapat menentukan repo selama runtime, atau haruskah itu lebih merupakan hal yang statis? The dua jawaban di bawah ini menganggap pilihan terakhir.
tshepang
Idealnya akan selama runtime. Opsi statis sudah cukup.
Ton van den Heuvel
2
Anda menuju dan bantuan sebenarnya yang Anda minta berbeda.
Minggu

Jawaban:

29

Gunakan Pinning

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 aptkebijakan:

Untuk menonaktifkan pembaruan otomatis dari repositori repo, tambahkan file
/etc/apt/preferences.d/repodengan 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_preferencesatau periksa Wiki Komunitas Ubuntu .

kynan
sumber
3
Sayang sekali satu-satunya jawaban apt_preferences adalah yang terakhir ...
Robert Siemer
bagaimana cara mengetahui versi mana dari repo mana?
Maks N
2
@ Maxn Anda biasanya akan menemukan informasi itu dengan menjalankanapt-cache policy package-name
Anwar
Ini tidak akan memaksa repositori untuk tidak dipertimbangkan saat memperbarui. karena release n=repotidak akan menembolok siapa pun
Anwar
35

Anda dapat menentukan rilis dengan -topsi. Sebagai contoh, saya telah menambahkan repositori berikut /etc/apt/sources.listuntuk menginstal rilis terbaru Iceweasel:

deb http://mozilla.debian.net/ squeeze-backports iceweasel-release

Seperti yang Anda ketahui ada paket yang sama iceweaseldi 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, " -tmenentukan rilis bukan nama repositori. Tidak ada nama repositori di Ubuntu (tidak seperti linux berbasis RedHat seperti RHEL, Fedora, CentOS, ...)".

kartunis
sumber
4
Seperti yang Anda lihat di apt-getmanual, -ttentukan rilis bukan nama repositori. Tidak ada nama repositori di Ubuntu (tidak seperti linux berbasis RedHat seperti RHEL, Fedora, CentOS, ...)
SuB
1
@ SUB Ya, Anda benar! Saya bingung nama repositori dengan rilis!
kartunis
-t xenialbekerja untuk satu paket. tetapi semua dependensinya masih akan diambil dari paket yang lebih tinggi
Anwar
10

Jawaban singkat

Anda harus menyematkan repositori yang tidak ingin Anda instal dengan prioritas kurang dari 100. Artinya (dari apt_preferencehalaman 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 Releasefile repositori . Seperti archive, label, release, versiondll 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.


Jawaban panjang

Sebelum melanjutkan, kita perlu mengetahui beberapa hal penting tentang menyematkan. Itu termasuk

  1. Bidang Releasefile dan pemetaan untuk apt-cache policyoutput

  2. Format file preferensi apt

  3. Menggunakan Releasebidang file untuk menetapkan prioritas

1. Bidang Releasefile dan apt-cache policyoutput

Dari artikel Wiki Debian

  • Deskripsi
  • Label
  • Asal
  • Versi
  • Rangkaian
  • Nama kode
  • Komponen
  • Arsitektur

Anda akan melihat output dari apt-cache policyseperti 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 Releasefile.

  • Deskripsi mengatur deskripsi untuk repositori. Ini tidak ditampilkan dalam apt-cache policyoutput

  • 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 Ubuntunilai. 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-securitydll. 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, universedi Ubuntu. Dalam output itu ditampilkan sebagai c=mainatau c=restrictedlain - lain. Sebagian besar PPA digunakan mainuntuk bidang ini, sehingga tidak banyak membantu dalam menyematkan banyak.

  • Arsitektur adalah tentang arsitektur OS. Ditampilkan sebagai b=i386atau b=amd64dalam output

  • Codename adalah nama rilis distribusi. Untuk 16,04 itu xenial. Untuk 14,04 itu trusty. Ditampilkan dalam apt-cache policyoutput sebagai n=xenialatau n=trusty. Itu sama untuk semua repositori untuk distribusi tunggal biasanya. Itu sebabnya tidak banyak membantu dalam menyematkan banyak.

Baris lain dalam apt-cache policyoutput dimulai dengan originmemberitahu asal Internet repositori. Ini juga dapat digunakan dalam menjepit. Tapi jangan dicampur dengan bidang Releasefile 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_preferencehalaman manual untuk ini.

2. Pin format file

Sematkan atau apt file preferensi berada di /etc/apt/preferences.dfolder. 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 xeniallebih tinggi xenial-updates, kami akan gunakan release a=xenial.

    Jika kami ingin menyematkan versi 5.0, kami akan gunakan di version 5.0sini. 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.

3. Menggunakan Release bidang file untuk mengatur prioritas

Berikut ini sebuah contoh

Package: *
Pin: release a=xenial
Pin-Priority: 1001

Dalam contoh ini, paket dari xenialarsip diberikan prioritas lebih tinggi daripada xenial-updatesdanxenial-security .

Setelah menyematkan, menjalankan apt-cache policy nautiluspertunjukan menunjukkan bahwa memang telah memberikan prioritas lebih tinggi ke versi yang lebih rendah dari xenialarsip daripada versi yang lebih tinggi dari xenial-updatesarsip. 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 xenialsecara default. Jadi, menetapkan prioritas untuk a=xenialjuga 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 xenialarsip repo resmi Ubuntu dan PPA memiliki prioritas yang sama 1001, karena keduanya menggunakan nilai yang sama untuk Archivedi file Release. Agar berhasil disematkan, kita perlu menggabungkan lebih banyak bidang dalam file Pin.


Beberapa contoh

Sematkan repositori PPA

Untuk menyematkan paket dari repositori, kita perlu menargetkannya menggunakan informasi yang ditemukan dari apt-cache policyperintah. 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 Originnilai 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-glxkata 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

Sematkan repositori saat info rilis tidak ada

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 originuntuk 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_preferencehalaman manual untuk detailnya.

Anwar
sumber
Pinning sama sekali tidak berguna jika paket tersebut lebih baru dalam repo yang ingin Anda hindari. Yaitu, sebagian besar waktu.
bviktor
7

Alternatif berbasis gui adalah membuka pusat perangkat lunak dan memilih edit> sumber perangkat lunak ...

Sumber Perangkat Lunak dengan tab perangkat lunak Ubuntu dipilih

Sumber Perangkat Lunak dengan tab perangkat lunak lain yang dipilih

yang perlu Anda lakukan adalah hapus centang pada repositori yang tidak Anda inginkan untuk pembaruan.

Semoga ini membantu

Allan
sumber
5

Pilihan yang jelas adalah mengubah /etc/apt/sources.listdan 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-gethalaman 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).

Olli
sumber
1

Satu opsi GUI lainnya adalah dengan hanya memilih asal di pengelola paket Synaptic.

  1. Cari nama paket yang ingin Anda instal
  2. Klik tombol Asal
  3. Pilih repositori yang ingin Anda instal
  4. Pilih paket
  5. Menerapkan
woot
sumber