이전 버전의 데비안 패키지가 패키지 리포지토리에서 사라지는 이유는 무엇입니까? (버전 제어 시스템 구성과 관련성이 높음)


37

시나리오 : Puppet, Chef 등을 기반으로하는 버전 제어 시스템 구성에서는 특정 시스템 상태를 재현해야합니다. 시스템 패키지 버전을 명시 적으로 지정하면됩니다.

최근 데비안 리포지토리에서 특정 패키지 버전이 누락되는 문제가 발생했습니다. 한 가지 예 : "패치"패키지는 버전 2.7.5-1 + deb9u1에 필요하지만 2.7.5-1 + deb9u2 만 사용할 수 있습니다. 더 심각한 또 다른 예 : "linux-headers-4.9.0-9-common"이 필요하며 (설치된 관련 커널로 인해) "linux-headers-4.9.0-11-common"만 사용할 수 있습니다.

이로 인해 시스템의 특정 상태를 재현 할 수 없습니다.

위의 패키지는 단지 예제입니다 (실제로 발생했습니다). 일반적인 문제를 이해하고 해결하는 데 관심이 있습니다.

이러한 업데이트, '소실'패키지 및 패키지 버전의 기본 개념은 무엇입니까?

데비안 패키지의 이전 버전 (실제 이전 버전이 아니라 몇 주 전의 버전)을 어디서 구할 수 있습니까? 일반적인 방식으로 설치 프로세스를 자동화 할 수 있어야합니다.


1
저장소를 구성하는 데 사용 된 소프트웨어에 따라 다릅니다. Reprepro은, IIRC, 각 패키지의 단일 버전의 수
muru

2
stable최소한 다음 포인트 릴리스까지 일관성을 유지합니다. 안정 업데이트, 테스트 및 불안정은 특정 패키지의 최신 버전 만 포함합니다. 그 밖의 다른 것들에 대해서는 archive.debian.org (또는 SK의 답변에 언급 된 snapshot.debian.org) 를 봐야합니다.
cas

5
교체 정책 및 핀 버전을 제어 할 수있는 자체 리포지토리를 실행하지 않는 이유가 있습니까 (이후에 로컬로 자동 설치하는 이점이 있음)?
Eric Towers

2
새로운 linuxpkg 이름은 예외입니다. 일반적으로 데비안 스 테이블의 패키지는 같은 패키지 이름으로 이동하며 버전 번호 만 변경합니다. linux-image-amd64절대로 이름을 바꾸지 않으며 항상 최신에 의존합니다 linux-image-4.9.0-*. 새로운 linux-image-4.9.0-*pkg 이름은 일부 버그 수정을 백 포트하는 데 필요한 호환되지 않는 커널 ABI 변경 사항을 나타내며 사용자 정의 빌드 모듈 (dkms 등)의 필요한 재 컴파일을 처리 할 수 ​​있습니다. 마찬가지로 linux-headers-*.
점화

1
무엇 이러한 업데이트 뒤에 생각이다 apt-get changelog packagename
이그니스

답변:


63

정확한 버전에 이르기까지, 특정 설정을 재현 할 수 있다는입니다 귀하의 요구 사항이 아닌 데비안.

데비안은 특정 릴리즈에서 각 바이너리 패키지의 단일 버전 만 지원합니다. 이에 대한 대응책은 특정 릴리스의 패키지 업데이트로 인해 회귀가 발생하지 않도록주의를 기울여야하며, 그러한주의가 불가능한 경우 해당 사실을 문서화하는 것입니다. 주어진 패키지의 여러 버전을 유지하면 지원 부담과 테스트 요구 사항 만 증가합니다. 예를 들어, 패키지 관리자는 현재 지원되는 버전 대신 사용하는 모든 라이브러리 버전에 대해 업데이트 된 패키지를 테스트해야합니다. 패키지는 경우에만 꼭 필요한 안정적인 릴리스에 업데이트됩니다 즉,심각한 버그 (보안 문제 포함)를 수정합니다. 커널의 경우 이는 때때로 커널 ABI가 변경되고 그 결과 패키지 이름이 변경됨을 의미합니다 (종속 패키지를 강제로 다시 빌드 함). 당신이 하드 코딩 ABI (대신에 풀 수있는 메타 패키지가 linux-image-amd64, linux-headers-amd64등).

그러나 상황에 대한 해결 방법이 있습니다. 게시 된 모든 소스 및 바이너리 패키지는 snapshot.debian.org에 보관됩니다 . 버전이 지정된 설정을 만들면 해당 스냅 샷 (예 : 2019 년 9 월 스냅 샷 중 하나 )을 선택하고이를 저장소 URL로 사용할 수 있습니다.

deb https://snapshot.debian.org/archive/debian/20190930T084755Z/ buster main

이것에 의존한다면 Apt-Cacher NG와 같은 일종의 캐싱 미러를 사용하십시오 . 이렇게하면 스냅 샷 서버의로드가 줄어들뿐만 아니라 필요한 모든 패키지의 로컬 사본이 있어야합니다.

( 소스 패키지 와 관련한 상황 은 약간 더 복잡하며, 아카이브는 라이센싱 종속성으로 인해 특정 릴리스에서 일부 소스 패키지의 여러 버전을 전달합니다. 그러나 여기서는 관련이 없습니다. 엄격하게 말하면, 데비안은 일부의 여러 버전을 제공합니다 지원되는 릴리스의 바이너리 : 현재 리포지토리의 현재 버전과 보안 리포지토리 및 업데이트 리포지토리의 업데이트와 함께 다음 포인트 릴리스는 다음 포인트 릴리스에서 접 힙니다. 따라서 재현 가능한 버전 제어 시스템 구성을 유지 관리 할 수 ​​있습니다. 포인트 릴리스가 이루어질 때마다 업데이트하는 한 스냅 샷에 의존합니다.)


때때로 일부 이전 버전을 사용할 수 있습니다. 구성된 저장소를 통해 볼 수있는 apt-cache madison packagename모든 버전이 표시됩니다 apt.
ivanivan

5
(가까운 미러 대신 불필요하게 사용하여 스냅 샷 / 아카이브 서버를 오버로드하지 마십시오. 따라서 일반 미러를 스냅 샷보다 우선 순위가 높은 source.list에 그대로 두십시오. 따라서 패키지를 계속 사용할 수 있습니다. .)
Peter Cordes

3
내가 올바르게 이해했는지 확인하기 위해 : 실제로는 이전 버전을 사용할 수 없기 때문에 패키지를 설치할 때 지정한 버전이 아니라 내가 사용하는 패키지 저장소의 상태에 관한 것입니다. 따라서 '신선한'데비안 9.8을 원한다면 그 상태의 패키지 저장소 (예 : 스냅 샷 또는 직접 만든 저장소)가 필요합니다. 물론 올바른 linux-header- * 패키지를 계속 사용할 수 있습니다. . 데비안 9.9로 마이그레이션하려면 패키지 리포지토리를 관련 상태로 가져 와서 apt-get dist-upgrade를 실행하십시오. 이 올바른지?
플로

2
예, 맞습니다.
Stephen Kitt

3
@Flo 참고, 데비안 X.9 또는 X.8과 같은 포인트 릴리스는 다운로드 가능한 iso 전용이므로 새로 설치하면 많은 패키지가 다운로드되지 않습니다. 리포지토리에는 포인트 릴리스간에 차이가 없으며 항상 최신 패키지를 얻습니다.
브라이 암

15

특정 시스템 상태를 재현하기 위해 제어되지 않는 서버에 의존하지 마십시오. 데비안 서버가 매우 안정적이라고 생각하더라도 미래에는 어떤 일이 일어날 지 알 수 없습니다. 이것은 특히 다른 리포지토리와 관련이 있습니다.

재생 가능한 시스템 상태를 얻으려면 고유 한 미러를 유지해야합니다. 이 방법으로 일반 시스템의 생산 상태와 새로운 구성의 여러 테스트 상태를 가질 수도 있습니다.

저장소 관리 도구는 적절하게 저장소의 미러를 작성할 수 있습니다. 미러링 할 패키지를 선택하고 특정 시점에 저장소 컨텐츠의 스냅 샷을 작성하며 여러 미러 또는 스냅 샷을 하나의 저장소로 결합 할 수 있습니다. 이렇게하면 가능한 시스템 상태를 완전히 재현 할 수 있습니다.


8

하지만 스티븐 키트의 대답은 분명 하나 개의 가능한 솔루션입니다, 나는 당신이 필요한 패키지의 자신의 사본을 보관하기에 안전 할 것이라고 생각합니다.

시스템 설치 프로그램을 녹화 할 때의 복사본을 저장해야합니다 .deb에서 -files을 /var/cache/apt/archives/. 을 사용할 수도 있습니다 apt-get download.

시스템 설정을 복원 할 때 apt잠재적으로 위험한 자동 작업을 트리거하지 않도록 매우 엄격해야 합니다.

dpkg원하는 것을 정확하게 설치 하기 위해 직접 사용하는 것이 더 쉬울 것입니다 .


6
더 나은 IMO 접근 방식은 로컬 APT 캐시를 사용하는 것입니다. 그것은 당신의 세 번째 단락의 문제를 피하고 또한 수확을 피 /var/cache/apt합니다.
Stephen Kitt

3
이것의 두 가지 변형이 있습니다. 하나는 apt-mirror와 같은 것을 사용하여 전체 저장소를 복제하는 것이고 다른 하나는 특정 패키지와 종속성 만 다운로드하는 것 입니다. 그런 다음 dir의 스냅 샷을 작성하십시오. 예를 들어 btrfs를 사용 pkgs-20190501하여 스냅 샷 dir을 저장소로 게시하십시오. 빌드시, 버전이 지정된 repo url (예 http://debmirror/pkgs-20190501/...:)을 sources.list에 넣은 다음 apt-get update, apt-get install $ pkgs 등을 실행하십시오.
bain
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.