적절한 환경 설정으로 무료가 아닌 것을 차단하는 방법은 무엇입니까?

적절한 환경 설정으로 무료가 아닌 것을 차단하는 방법은 무엇입니까?

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

-제외 구성이 올바르게 작동 하는 경우 핀 우선순위가 -1인 non-free에서 추적 중인 모든 제품군에 대한 항목이 표시되어야 합니다 . non-free일단 작동하면 더 이상 설치할 수 없거나 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설치 및 업그레이드가 가능합니다. 따라서 oldstable 버전으로 강제 다운그레이드한 후 다음과 같은 결과가 나타납니다.

$ 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은 다소 혼란스럽게 끝납니다. 실제로 무슨 일이 일어날지 보려면 "후보" 줄을 참조하세요.

관련 정보