한 데비안 시스템에서 다른 데비안 시스템으로 설치된 패키지를 선택하여 복사하는 방법은 무엇입니까? (데비안 헐떡임)

한 데비안 시스템에서 다른 데비안 시스템으로 설치된 패키지를 선택하여 복사하는 방법은 무엇입니까? (데비안 헐떡임)

업데이트를 기본 시스템에 적용하기 전에 테스트하기 위해 가상 머신에 스테이징 환경을 설정하려고 합니다.

이를 위해 VM(메인 시스템과 동일)에 Debian Wheezy의 기본 설치를 수행한 다음 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-selections가상 머신에서 실행 중입니다. 특별한 처리가 필요한 일부 패키지가 있지만(실제로 이것이 제가 처음에 스테이징 환경을 원하는 주된 이유입니다), 위의 마지막 명령을 실행하면 다음과 같은 끝없는 출력 줄이 표시됩니다.

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

기본 시스템에서 실제로 사용할 수 있어야 하는 패키지의 경우. 예를 들면 xterm, yelp및 가 있습니다 zip.

이제 내 질문은 다음과 같습니다.

패키지 선택 목록을 한 데비안 시스템에서 다른 데비안 시스템으로 이동하는 구체적인 프로세스는 무엇입니까?(Wheezy에서 동일한 Debian 버전 수준을 가정)그런 다음 해당 변경 사항을 나중에 적용하시겠습니까?목표는 둘 다 동일한 설치된 패키지 목록을 갖는 것이며 이상적으로는 둘 다 diff출력 사이나 출력 후에 dpkg --get-selections차이가 표시되지 않습니다 .dpkg --list

grep -v deinstall부분은 다음에서 빌려온 것입니다.완료 후 패키지 삭제 방지dpkg --set-selections우분투에 대한 질문으로 마무리했습니다.

가상 머신의 소스를 기본 시스템과 동일하게 변경했으며 다음과 같이 설치했습니다 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~까지gcc-4.7-base:i386 install 많은목록 아래로 더 내려가세요(--get-selections 출력의 342번째 줄).

답변1

데비안 설치를 복제하려면 다음을 사용하세요.apt-clone유용. wheezy부터 Debian(기본 설치의 일부가 아닌 별도 패키지)에서 사용할 수 있으며, 12.04부터는 Ubuntu에서 사용할 수 있습니다. 기존 머신에서 다음을 실행하세요.

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./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-selectionsAPT의 자동/수동 태그 지정이 복원되지 않습니다. 바라보다dpkg --set-selections '*'에서 모든 데이터 및 종속성을 복원합니다.자세한 내용은. 다음을 사용하여 소스 시스템에 태그를 저장할 수 있습니다.

apt-mark showauto >auto.list

대상 시스템으로 복원

xargs apt-mark auto <auto.list

답변2

내가 어떻게 했어?

  1. 존재하다원천주인:

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

    사용에 대한 고민 /etc/apt/sources.list.d...

    그런 다음 복사source.sel파일을 대상 호스트로 보냅니다.

  2. 존재하다목적지주인:

    vi /etc/apt/sources.list 
    

적응하다소스.목록거울은 달라도 똑같아요소목록.

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

그리고 지금, 내대상 호스트현재 설치 중인 것들이 많아서 포스팅하는 데 시간이 좀 걸릴 것 같습니다.

관련 정보