설치된 데비안을 다른 데비안 시스템에서 어떻게 복제합니까? (데비안 휘지)


19

기본 시스템에 적용하기 전에 업데이트를 테스트하기 위해 VM에서 준비 환경을 설정하려고합니다.

이를 위해 VM에 데비안 위지 (기본 시스템과 동일)를 기본 설치 한 다음 VM 내에서 루트로 실행했습니다.

# dpkg --clear-selections
# dpkg --add-architecture i386
# apt-get update
# ssh me@main-system 'dpkg --get-selections | grep -v deinstall' | \
  dpkg --set-selections

불행히도 i386 아키텍처가 필요합니다. 시스템은 amd64 기본입니다.

dpkg --set-selectionsVM에서 실행 하는 데 문제가 있습니다. 특별한 처리가 필요한 패키지가 있습니다 (실제로 스테이징 환경을 원하는 주요 이유입니다). 그러나 위의 마지막 명령을 실행하면 다음과 같은 가젤 리언 라인이 생깁니다.

dpkg: warning: package not in database at line NNN: package-name

기본 시스템에서 실제로 사용할 수있는 패키지 예는 xterm, yelpzip입니다.

이제 내 질문에 :

하나의 데비안 시스템에서 다른 데비안 시스템으로 패키지 선택 목록을 전송 한 다음 ( Wheezy에서 동일한 데비안 릴리스 레벨을 가정) 그 변경 사항을 적용하는 특정 프로세스는 무엇입니까 ? 목표는 모두가 일을 적도록, 설치된 패키지의 동일한 목록을 가지고있다 diff의 출력 사이 dpkg --get-selections또는 dpkg --list두 다시 차이를 보여주는로 제공합니다.

grep -v deinstall부분에서 차용 하고 후에 제거되는 것을 방지 패키지dpkg --set-selections 우분투 질문에 이상.

VM의 소스를 기본 시스템과 동일하게 변경하고 다음을 설치했습니다 apt-transport-https.

deb https://ftp-stud.hs-esslingen.de/debian/ wheezy main non-free
deb-src https://ftp-stud.hs-esslingen.de/debian/ wheezy main non-free
deb https://ftp-stud.hs-esslingen.de/debian/ wheezy-updates main non-free
deb-src https://ftp-stud.hs-esslingen.de/debian/ wheezy-updates main non-free
deb [arch=amd64] http://archive.zfsonlinux.org/debian wheezy main

--set-selections 출력을 보면 다음과 같습니다.

dpkg: warning: package not in database at line 1: a2ps
dpkg: warning: package not in database at line 1: abiword
dpkg: warning: package not in database at line 1: abiword-common
dpkg: warning: package not in database at line 1: abiword-plugin-grammar
dpkg: warning: package not in database at line 1: abiword-plugin-mathview
dpkg: warning: package not in database at line 1: accountsservice
dpkg: warning: package not in database at line 1: acl
dpkg: warning: package not in database at line 4: aglfn
dpkg: warning: package not in database at line 4: aisleriot
dpkg: warning: package not in database at line 4: alacarte
dpkg: warning: package not in database at line 4: alien
...

줄 번호가 이상하게 보였으며 --get-selections 출력의 해당 부분은 다음과 같습니다.

a2ps install
abiword install
abiword-common install
abiword-plugin-grammar install
abiword-plugin-mathview install
accountsservice install
acl install
acpi-support-base install
acpid install
adduser install
aglfn install
aisleriot install
alacarte install
alien install

그 사이에 있음을 공지 acl하고 aglfn있다 acpi-support-base, acpid그리고 adduser 있는 오류가보고되고있다 . 그것은 오류가보고되고있는 패키지가 하나되는 것 같습니다 un에 따라 dpkg -l, 또는 dpkg -l그들에 대해 전혀 생각을하지 않습니다 ( dpkg-query: no packages found matching ...). 로컬에 설치된 패키지가 있지만 많지는 않다는 것을 알고 있습니다. 목록에서 훨씬 더 먼 곳 i386까지 (--get-selections 출력의 342 행) 계산 하지 않습니다 .gcc-4.7-base:i386 install


dpkg --get-selections … | … dpkg --set-selections패키지 선택을 복제하는 방법입니다. 그것이 당신을 위해 실패하는 경우, 당신은 이유에 대한 자세한 정보를 제공해야합니다. 전체 소스 세트를 두 시스템,에 대한 출력 dpkg --get-selections및 전체 사본 모두에 게시하십시오 dpkg --get-selections(어떻게 작동하고 작동하지 않는지 확인하여 패턴을 식별 할 수 있음). 주 시스템이 amd64 또는 i386 인 경우? i386 아키텍처를 추가하지 않으면 작동합니까?
Gilles 'SO- 악마 중지

@Gilles합니까 그것은 정말 할 필요가 전체 출력 dpkg --get-selections(그리고 나는 당신이 의미 가정 dpkg --set-selections증명서를?)? 전자조차도 3,600 줄 이상이며 약 100KB입니다.
CVn

패키지가 오류를 유발하는 패턴과 그렇지 않은 패키지의 패턴을 식별 할 수 있도록 충분히 게시해야합니다 (직접 알아낼 수없는 경우 제외). /var/lib/dpkg/Packages(더 긴) 사본 도 유용 할 수 있습니다. 이것은 패키지 파일이 손상된 증상 일 수 있습니다.
Gilles 'SO- 악마 중지

@Gilles 재미있는 포인트. 나는 실제로 가능성을 고려하지는 않았지만 이것에 대해 다른 거울을 사용합니다. VM을 동일한 데비안 미러로 가리키면 여전히 발생하는지 확인해 보겠습니다. 기다려
CVn

@Gilles 그것은 실제로 눈에 띄는 차이를 만들지 않았지만 다른 것을 찾았습니다. 업데이트 된 질문을 참조하십시오.
CVn

답변:


17

데비안 설치를 복제하려면 apt-clone유틸리티를 사용하십시오 . wheezy 이후 데비안과 12.04 이후 우분투에서 (기본 설치의 일부가 아닌 별도의 패키지로) 제공됩니다. 기존 머신에서 다음을 실행하십시오.

apt-clone clone foo

이것은 파일을 만듭니다 foo.apt-clone.tar.gz. 대상 컴퓨터에 복사하고 실행하십시오.

apt-get install apt-clone
apt-clone restore foo.apt-clone.tar.gz

apt-clone사용할 수없는 구식 시스템에서 작업 중이 거나 설치된 패키지 목록 만 복제하지만 구성 파일은 복제하지 않으려는 경우 수동 단계는 다음과 같습니다.

  • 소스 머신에서 :

    cat /etc/apt/sources.list /etc/apt/sources.list.d >sources.list
    dpkg --get-selections >selections.list
    apt-mark showauto >auto.list
    
  • 대상 머신에서 :

    cp sources.list /etc/apt/
    apt-get update
    /usr/lib/dpkg/methods/apt/update /var/lib/dpkg/
    dpkg --set-selections <selections.list
    apt-get dselect-upgrade
    xargs apt-mark auto <auto.list
    

dpkg의 호환되지 않는 변경으로 인해 영향을 받았다고 생각합니다. 배경 은 버그 # 703092 를 참조하십시오 .

짧은 이야기는 dpkg --set-selections이제 파일 /var/lib/dpkg/status또는 에있는 패키지 이름 만 허용한다는 것 /var/lib/dpkg/available입니다. 대부분의 사람들처럼 APT 만 사용하여 패키지를 관리하는 경우 /var/lib/dpkg/available최신 상태로 유지되지 않습니다.

실행 후 apt-get update및 실행 전에 dpkg --set-selectionsapt-get -u dselect-upgrade다음 명령을 실행하십시오.

apt-cache dumpavail >/tmp/apt.avail
dpkg --merge-avail /tmp/apt.avail

jessie부터는 이것을 단순화 할 수 있습니다.

apt-cache dumpavail | dpkg --merge-avail

또는 다음을 실행하십시오.

/usr/lib/dpkg/methods/apt/update /var/lib/dpkg/

또는 더 간단한

apt-get install dctrl-tools
sync-available

추가 패키지를 설치하지 않아도되지만 패키지 목록을 다시 다운로드하는 또 다른 간단한 방법은 다음과 같습니다.

dselect update

자세한 내용은 dpkg FAQ 를 참조하십시오. (이것은 dpkg 매뉴얼 페이지에서 언급되었지만 문제를 해결하는 방법을 설명하는 방식이 아니라 이미 알고 있다면 문제를 상기시키는 방법으로 더 많이 설명되어 있습니다!)

패키지 설치로 복제 dpkg --set-selections해도 APT의 자동 / 수동 표시가 복원되지 않습니다. 자세한 내용 은 dpkg --set-selections '*'에서 모든 데이터 및 종속성 복원 을 참조하십시오. 소스 시스템에 마크를 저장할 수 있습니다.

apt-mark showauto >auto.list

대상 시스템에서

xargs apt-mark auto <auto.list

3
이 문제는 실제보다 훨씬 더 눈에 잘 띄어 야합니다. 전에 들어 본 적이 없어요!
Faheem Mitha

흥미 롭군 이 샷을하려고합니다. 감사!
CVn

@FaheemMitha 그래, 오늘 전에는 들어 본 적이 없다는 것에 놀랐다. 나는 dpkg --set-selectionspre-wheezy 이후로 사용하지 않았다는 것을 믿을 수 없다 !
Gilles 'SO- 악마 그만해'

좋아요,의 경고 목록이 훨씬 짧았습니다 --set-selections. 이제 변경 사항을 어떻게 적용합니까? 심지어 apt-get -u dist-upgrade수천 개의 패키지가 영향을받지 않는 경우 수백 개가 있어야하는 소수의 패키지 (모든 ZFS 관련) 만 언급합니다.
CVn

@ MichaelKjörling 저것은apt-get -u dselect-upgrade
Gilles 'SO- 그만 그만'

0

내가 어떻게했는지

  1. 소스 호스트 :

    apt-get update && apt-get dist-upgrade
    dpkg --get-selection >/tmp/source.sel
    cat /etc/apt/sources.list
    

    /etc/apt/sources.list.d사용 여부 에 대한 걱정 ...

    그런 다음 source.sel파일을 대상 호스트로 복사 하십시오.

  2. 대상 호스트 :

    vi /etc/apt/sources.list 
    

    다른 미러로도 source.list를 조정 하지만 구성 요소 목록은 동일 합니다.

    apt-get update
    dselect upgrade
    dpkg --set-selection </tmp/source.sel
    dselect install
    

    그리고 지금, 내 목적지 호스트 가 현재 많은 것을 설치하고 있는데, 이것을 게시하는 데 시간이 걸릴 수 있습니다.


아마도 'dselect upgrade'은 위의 '어떻게했는지'설명에서 'dselect update'여야합니다.
조나단 Kimmitt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.