我想阻止來自 的所有包non-free
,除了我明確命名的包。目前,我有:
/etc/apt/sources.list
:
deb http://ftp.us.debian.org/debian stable main contrib non-free
/etc/apt/preferences.d/non-free_policy
:
Explanation: Disable packages from `non-free` tree by default
Package: *
Pin: release c=non-free
Pin-Priority: -1
(這個想法是,我為每個我想要的非免費包添加一個明確的節。)
但它不起作用:
root@silber:/etc/apt/preferences.d# apt-get -s install firmware-linux-nonfree
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen.... Fertig
Die folgenden NEUEN Pakete werden installiert:
firmware-linux-nonfree
0 aktualisiert, 1 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
Inst firmware-linux-nonfree (0.43 Debian:8.4/stable [all])
Conf firmware-linux-nonfree (0.43 Debian:8.4/stable [all])
我缺什麼?
答案1
您需要確保您沒有其他更通用的引腳優先級,該優先級優先於您的non-free
排除規則。 (這包括APT::Default-Release
為給定版本分配高優先級的配置設定。)
例如,如果您的/etc/apt/preferences
文件(或 中的另一個文件/etc/apt/preferences.d
)包含類似以下內容的內容:
Package: *
Pin: release a=unstable
Pin-Priority: 200
那麼unstable
無論組件如何,封裝的引腳優先權都是 200。要使其與您的附加文件一起使用,您應該將其更改為
Package: *
Pin: release a=unstable, c=main
Pin-Priority: 200
contrib
(如果您關心的話,請添加一個額外的節)。 (在你的情況下,你stable
當然會這樣做。)
您可以透過運行來檢查引腳優先權的效果
apt-cache policy
如果您的non-free
-排除配置工作正常,您應該會在 上看到您正在追蹤的所有套件的條目non-free
,引腳優先級為 -1。一旦它起作用,您會發現您無法再安裝raccoon
,或者事實上任何non-free
軟體包(即使明確提到) - 您需要將non-free
所需的軟體包添加到您的配置文件中,並具有適當的引腳優先級。
作為範例,這是我使用的設定:我有一個名為/etc/apt/preferences.d/non-free
包含的文件
Package: intel-microcode
Pin: release n=buster, c=non-free
Pin-Priority: 100
Explanation: Disable packages from non-free tree by default
Package: *
Pin: release c=non-free
Pin-Priority: -1
非免費軟體包仍然出現在搜尋中,但我無法安裝它們:
$ sudo apt install lmbench
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package lmbench is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
E: Package 'lmbench' has no installation candidate
並apt policy
同意:
$ apt policy lmbench
lmbench:
Installed: (none)
Candidate: (none)
Version table:
3.0-a9+debian.1-2 -1
-1 http://ftp.fr.debian.org/debian buster/non-free amd64 Packages
-1 http://ftp.fr.debian.org/debian testing/non-free amd64 Packages
-1 http://ftp.fr.debian.org/debian unstable/non-free amd64 Packages
但intel-microcode
可以安裝和升級。因此,在強制降級到舊穩定版本後,我得到
$ apt policy intel-microcode
intel-microcode:
Installed: 3.20190618.1~deb9u1
Candidate: 3.20190618.1
Version table:
3.20190618.1 100
-1 http://ftp.fr.debian.org/debian buster/non-free amd64 Packages
-1 http://ftp.fr.debian.org/debian testing/non-free amd64 Packages
-1 http://ftp.fr.debian.org/debian unstable/non-free amd64 Packages
*** 3.20190618.1~deb9u1 100
100 /usr/var/lib/dpkg/status
$ apt list --upgradable
intel-microcode/stable,testing,unstable 3.20190618.1 amd64 [upgradable from: 3.20190618.1~deb9u1]
輸出apt policy
結果有點令人困惑——請參閱“候選”行以查看真正會發生什麼。