Как заблокировать несвободные с помощью настроек 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

Вам необходимо убедиться, что у вас нет другого, более общего приоритета вывода, который имеет приоритет над вашим 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конфигурация -exclusion работает правильно, вы должны увидеть записи для всех отслеживаемых вами наборов на non-free, с приоритетом pin-priority -1. Как только это заработает, вы обнаружите, что больше не можете установить raccoon, или фактически любой non-freeпакет (даже если он явно указан) — вам нужно будет добавить non-freeнужные пакеты в ваш файл конфигурации с соответствующим приоритетом pin.

В качестве примера приведу настройку, которую я использую: у меня есть файл с именем, /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получается несколько запутанным — обратитесь к строке «Кандидат», чтобы увидеть, что на самом деле произойдет.

Связанный контент