%EC%9C%BC%EB%A1%9C%20%EC%9C%A0%EC%A7%80.png)
인프라의 주요 변경으로 인해 코드가 손상되는 것을 방지하기 위해 서버에 패키지 버전을 보관하고 싶습니다(예: 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은 패키지의 다운그레이드를 구성하더라도 버전이 설치되도록 합니다.