如何使用適當的偏好來阻止非免費?

如何使用適當的偏好來阻止非免費?

我想阻止來自 的所有包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結果有點令人困惑——請參閱“候選”行以查看真正會發生什麼。

相關內容