특정 상태로 apt-get 업그레이드

특정 상태로 apt-get 업그레이드

테스트 서버와 프로덕션 서버라는 두 개의 서버가 있다고 가정해 보겠습니다. 먼저 apt-get upgrade테스트 서버에서 해보겠습니다. 그런 다음 2주간의 광범위한 테스트를 거친 후 프로덕션 서버가 패키징되었을 때와 정확히 동일한 상태가 되기를 원합니다. apt-get upgrade항상 최신 상태를 유지하지 않고도 특정 상태를 달성하는 것이 가능합니까 ?

답변1

OP는 서버에서 어떤 배포가 사용되고 있는지 알려주지 않았습니다. 따라서 기본적으로 Debian apt이 "발명"했고 필요한 서비스는 Debian에서만 사용할 수 있으므로 Debian이라고 가정합니다 .

단일 패키지의 경우 =해당 버전을 강제하는 것이 좋고 편리하지만, 특히 아직 사용 가능한 경우 복원하는 것이 좋지만, 패키지 그룹의 경우 충족되지 않은 종속성으로 인해 빠르게 문제가 될 수 있습니다.

수행할 수 있는 작업은 다음에서 빌드된 저장소 URL을 사용하는 것입니다.https://snapshot.debian.org/. 이 서비스는 2009년 이후 만들어진 모든 패키지 버전의 복사본을 보관합니다.2010년부터 공식 출범:

또한 스냅샷 서비스를 통해 관리자는 지정된 날짜의 보관된 보기를 사용하여 예측 가능하고 테스트된 패키지 세트를 설치할 수 있습니다. 이 기능을 사용하면 관리자는 준비 환경에서 업그레이드 경로를 테스트한 다음 프로덕션 환경에서 프로세스를 반복하여 완벽하게 테스트된 업그레이드를 수행하고 있는지 확인할 수 있습니다. 스냅샷은 전체 아카이브와 모든 제품군을 포괄하므로 제어된 방식으로 테스트를 추적하려는 환경은 물론 모든 안정적인 업데이트를 롤아웃하기 전에 완전히 감사하려는 보다 엄격한 변경 제어 기능을 갖춘 환경에 적용할 수 있습니다.

첫 번째 요구 사항은 https 전송을 사용할 수 있어야 한다는 것입니다. ( apt-get install apt-transport-https죄송하지만 동시에 업그레이드되었을 수 있는 일부 종속성을 가져올 수 있습니다.)

2주 전인 2018-12-07의 패키지를 원한다고 가정해 보겠습니다. 웹사이트의 지침에 따라 다음을 찾아볼 수 있습니다.

https://snapshot.debian.org/archive/debian/20181207/

이것은 다음을 가리킬 것입니다.더욱 세분화된 URL, 아마도 UTC 시간일 것입니다. 그런 다음 필요에 따라 "시간을 통해" 탐색할 수 있습니다. 이를 위해서는 약간의 "다음 변경".

적절한 때가 되면 이것을 resources.list 파일의 기본 deb URL로 사용하십시오:

예를 들어 /etc/apt/sources.d/snapshot-20181207.list콘텐츠는 다음과 같습니다.

deb https://snapshot.debian.org/archive/debian/20181207T090635Z/ stretch main

스냅샷은 이전 패키지 버전을 사용하는 과거이므로 기본 선택을 apt로 두면 어쨌든 최신 버전을 사용하고 거기에서 사용 가능한 버전을 항상 무시합니다. apt 플래그 -t는 여전히 동일한 버전이므로 이 경우에는 쓸모가 없습니다. 그래서적절한 선호도조정이 이루어져야 합니다. 예를 들어 .pref파일에 로 끝나는 항목이 있습니다 (여기서 기본 설정 순서가 중요할 수 있음)./etc/apt/preferences.d//etc/apt/preferences.d/00-snapshot-20181207.list

Package: *
Pin: origin "snapshot.debian.org"
Pin-Priority: 900

이는 snapshot.debian.org의 모든 패키지의 우선순위를 기본(및 최신) 패키지의 500보다 높은 900으로 설정하여 짧은 시간 동안 보안을 포함한 다른 저장소보다 우선순위를 부여합니다. 주요 업데이트 소스. 추가되었을 때보다 우선순위가 여전히 낮기 때문에 -t stable2018-12-07 상태로 업그레이드하는 것과 오늘 상태로 업그레이드하는 것의 차이를 비교할 수 있습니다.

1001을 사용하면 패키지가 다운그레이드되도록 허용(및 강제)하여 위험할 수 있습니다(예: 패키지 변경으로 인해 파일이 한 패키지에서 다른 패키지로 이동하면 파일이 다운그레이드될 수 있음). ), 그래도 여전히 유용합니다.

apt-get update릴리스 파일이 오래되었다고 불평하는 경우 (웹 사이트에 명시된 대로 12일 후에 발생합니다) 소스 항목에 apt-get -o Acquire::Check-Valid-Until=false update또는 (Debian 9 이후) 추가를 사용하여 검사를 비활성화해야 합니다. [check-valid-until=no]이것이 https 전송을 사용하는 이유입니다. 어쨌든 추가 보안 계층이 있기 때문입니다. 따라서 내용을 snapshot-20181207.list다음으로 바꾸십시오.

deb [check-valid-until=no] https://snapshot.debian.org/archive/debian/20181207T090635Z/ stretch main

업데이트: 보안은 별도의 스냅샷 아카이브에 있습니다.데비안 보안. 따라서 이 항목(또는 다른 날짜에 대한 항목)도 추가해야 합니다.

deb [check-valid-until=no] https://snapshot.debian.org/archive/debian-security/20181206T212649Z/ stretch/updates main

이제 평소와 같이 apt-get update모든 apt-get upgrade패키지를 2018-12-07 버전으로 업그레이드해야 합니다.

답변2

예, 가능합니다. 바라보다https://askubuntu.com/questions/92019/how-to-install-특이적-ubuntu-packages-with-exact-version

즉, 버전 2.5로 업그레이드하려면 다음 foo을 대신 실행할 수 있습니다.apt upgrade fooapt upgrade foo=2.5

이는 테스트 서버에 설치된 버전을 덤프한 다음 해당 정보를 사용하여 프로덕션 서버를 동일한 상태로 만들어야 함을 의미합니다.

관련 정보