apt 設定で非フリーをブロックするにはどうすればいいですか?

apt 設定で非フリーをブロックするにはどうすればいいですか?

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

-including ルールよりも優先される、より一般的な別のピン優先順位がないことを確認する必要があります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

-including 構成が正しく機能している場合は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はややわかりにくくなります。実際に何が起こるかを確認するには、「Candidate」行を参照してください。

関連情報