apt-mark 패키지를 주요 버전(특정 부 버전 아님)으로 유지

apt-mark 패키지를 주요 버전(특정 부 버전 아님)으로 유지

인프라의 주요 변경으로 인해 코드가 손상되는 것을 방지하기 위해 서버에 패키지 버전을 보관하고 싶습니다(예: mongodb 2.4에서 2.6으로 변경).

예를 들어, 할 수 있다는 것을 알고 있지만 apt-mark hold package보안 패치 및 마이너 업그레이드를 더 이상 받지 않습니다.

또한 메이저 버전(마이너 버전은 아님)을 설정하여 패키지를 설치하고 싶습니다.

예를 들어 나는 다음과 같은 일을 할 수 있다는 것을 알고 있습니다.

sudo apt-get install -y rabbitmq-server=3.3.5

하지만 주요 버전(3.*)에 설치를 고정하고 싶습니다.

이것이 어떻게 달성될 수 있습니까?

답변1

버전 번호의 와일드카드 세트를 고정할 수 있습니다. 보다man apt_preferences예를 들어:

특정 양식은 지정된 버전 또는 버전 범위를 사용하여 하나 이상의 지정된 패키지에 우선 순위("Pin-Priority")를 할당합니다. 예를 들어, 다음 레코드는 버전 번호가 "5.10"으로 시작하는 Perl 패키지의 모든 버전에 높은 우선 순위를 할당합니다. 여러 패키지를 공백으로 구분할 수 있습니다.

Package: perl
Pin: version 5.10*
Pin-Priority: 1001

예를 들어 xenial-backports기본 우선순위가 100인 Ubuntu 16.04의 경우 초기 정책은 debhelper다음과 같습니다.

$ apt-cache policy debhelper
debhelper:
  Installed: 9.20160115ubuntu3
  Candidate: 9.20160115ubuntu3
  Version table:
     10.2.2ubuntu1~ubuntu16.04.1 100
        100 http://jp.archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages
        100 http://jp.archive.ubuntu.com/ubuntu xenial-backports/main i386 Packages
 *** 9.20160115ubuntu3 500
        500 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
        500 http://jp.archive.ubuntu.com/ubuntu xenial/main i386 Packages
        100 /var/lib/dpkg/status

그런 다음 백포트를 더 높은 우선순위로 고정했습니다.

$ cat /etc/apt/preferences.d/debhelper
Package: *
Pin: release v=16.04,o=Ubuntu,a=xenial-backports,n=xenial,l=Ubuntu,c=main,b=amd64
Pin-Priority: 600

$ apt-cache policy debhelper
debhelper:
  Installed: 9.20160115ubuntu3
  Candidate: 10.2.2ubuntu1~ubuntu16.04.1
  Version table:
     10.2.2ubuntu1~ubuntu16.04.1 600
        600 http://jp.archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages
        100 http://jp.archive.ubuntu.com/ubuntu xenial-backports/main i386 Packages
 *** 9.20160115ubuntu3 500
        500 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
        500 http://jp.archive.ubuntu.com/ubuntu xenial/main i386 Packages

다시 한 번 더 높은 우선순위로 9.*버전을 고정합니다 .debhelper

$ cat /etc/apt/preferences.d/debhelper
Package: *
Pin: release v=16.04,o=Ubuntu,a=xenial-backports,n=xenial,l=Ubuntu,c=main,b=amd64
Pin-Priority: 600

Package: debhelper
Pin: version 9.*
Pin-Priority: 800

$ apt-cache policy debhelper
debhelper:
  Installed: 9.20160115ubuntu3
  Candidate: 9.20160115ubuntu3
  Version table:
     10.2.2ubuntu1~ubuntu16.04.1 600
        600 http://jp.archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages
        100 http://jp.archive.ubuntu.com/ubuntu xenial-backports/main i386 Packages
 *** 9.20160115ubuntu3 800
        500 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
        500 http://jp.archive.ubuntu.com/ubuntu xenial/main i386 Packages
        100 /var/lib/dpkg/status

/etc/apt/preferences.d/따라서 다음과 같은 파일을 생성하면 됩니다 .

Package: rabbitmq-server
Pin: version 3.*
Pin-Priority: 1001

기본적으로 1000보다 큰 우선순위를 갖는 저장소는 없습니다. 1001이면 필요한 경우 apt를 강제로 다운그레이드하기에 충분합니다.

P >= 1000은 패키지의 다운그레이드를 구성하더라도 버전이 설치되도록 합니다.

관련 정보