Linux

限制可從儲存庫安裝的軟體包

  • March 2, 2022

我有我的官方 Debian 儲存庫(比如repo1)。現在我從package X( repo2) 添加供應商的回購。軟體包 X 不在官方 Debian 儲存庫中。當然,repo 2可以有一些重疊的包repo 1,比如package Y,有些甚至可能永遠不會,並且需要package X執行(repo 1::package Yhas version 1.0repo 2::package Yhas version 2.0)。

我想知道,何時package Xrepo 2. 最好甚至阻止從 安裝任何軟體包repo 2,以避免它弄亂我的系統。

我目前的想法是限制repo2,所以只能package X從那里安裝,但我不知道如何做到這一點。

為什麼我可能想要這個:

  • 我可能不完全信任repo2,我想跟踪來自那裡的包裹
  • 如果有包,除了package X來自之外repo2,並且我不允許安裝這些包,它會中斷package X,但這沒問題,我可以在那時決定是否允許來自該來源的那些包,但我會有一個預知正在發生的事情

基本上我想apt告訴我,如果有任何其他內容,不是Package Xrepo 2.


我考慮過的一些解決方案:

適當固定:

  • 我認為行不通,因為 if package Xrequires version 2.0of package Y, and repo1has version 1.0,repo 2將被使用,不管固定

調整Packages.gz來自repo 2

  • 我不知道,這怎麼可能實現

apt固定可以在這里工作。添加一個條目,例如

Package: *
Pin: origin repo2
Pin-Priority: 100

這將允許從 安裝repo2,但將確保兩者中都存在軟體包,repo1並且repo2首選repo1版本進行升級。如果另一個包需要某個repo2版本,則可以要求將其與適當的選項一起使用。這與用於反向移植儲存庫的設置相同。repo2``apt``-t

您最終會得到以下行為:

$ sudo apt install moosefs-client/bullseye-backports
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Selected version '3.0.116-1~bpo11+1' (Debian Backports:bullseye-backports [amd64]) for 'moosefs-client'
Starting pkgProblemResolver with broken count: 0
Starting 2 pkgProblemResolver with broken count: 0
Done
The following packages were automatically installed and are no longer required:
 gconf2 libgsf-bin
Use 'sudo apt autoremove' to remove them.
The following additional packages will be installed:
 libmfsio1
The following NEW packages will be installed:
 libmfsio1 moosefs-client
0 upgraded, 2 newly installed, 0 to remove and 15 not upgraded.
Need to get 504 kB of archives.
After this operation, 1,580 kB of additional disk space will be used.
Do you want to continue? [Y/n]
Get:1 http://deb.debian.org/debian bullseye/main amd64 libmfsio1 amd64 3.0.115-1 [171 kB]
Get:2 http://deb.debian.org/debian bullseye-backports/main amd64 moosefs-client amd64 3.0.116-1~bpo11+1 [333 kB]
Fetched 504 kB in 0s (1,395 kB/s)       
...

我詢問了 的向後移植版本moosefs-client,並apt選擇了預設版本libmfsio1而不是向後移植版本。如果我指定-t bullseye-backports了 ,它會從 backports 中選擇兩者。對於僅在 中可用的包repo2,您根本不需要指定/repo2;並且如果該包是可解除安裝的,而無需從中提取repo2具有舊版本的其他包,除非您指定repo1,否則將失敗。apt``-t repo2

引用自:https://unix.stackexchange.com/questions/692634