ある Debian システムから別の Debian システムにインストールされたパッケージを選択してコピーする方法は? (Debian ハルトック)

ある Debian システムから別の Debian システムにインストールされたパッケージを選択してコピーする方法は? (Debian ハルトック)

アップデートをプライマリシステムに適用する前に、テストするために仮想マシンにステージング環境を設定しようとしています。

これを行うには、VM(メインシステムと同じ)にDebian Wheezyのデフォルトインストールを実行し、VMからrootとして実行しました。

# 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

基本システムで実際に使用できる必要があるパッケージの場合。例えばxtermyelpと がありますzip

今私の質問は次のとおりです。

パッケージ選択リストをある Debian システムから別の Debian システムに移動する具体的なプロセスは何ですか?(Wheezy で同じ Debian バージョンレベルを想定)その後、その変更を後で適用しますか?目標は両方とも同じインストール済みパッケージのリストを持つことであり、理想的には両方とも出力間またはdiff出力後にdpkg --get-selections違いは表示されません。dpkg --list

このgrep -v deinstall部分は以下から借りたものです。完了後のパッケージ削除の防止dpkg --set-selectionsUbuntuに関する質問で仕上げました。

仮想マシンのソースを基本システムと同じように変更し、次のようにインストールしました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間にaglfnacpi-support-baseacpidadduser 報告されたエラーなし。エラーを報告するパッケージは、エラーに基づいているundpkg -ldpkg -l単にエラーを認識しないようです(dpkg-query: no packages found matching ...)。ローカルにインストールされたパッケージがいくつかあることを知っていますが、それほど多くはありません。i386~までgcc-4.7-base:i386 install たくさんリストを下にしてください(--get-selections出力の342行目)。

ベストアンサー1

Debian インストールを複製するには、次を使用します。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

追加のパッケージをインストールせずにパッケージのリストを再ダウンロードするもう1つの簡単な方法は次のとおりです。

dselect update

よりdpkg FAQより多くの情報を知りたいです。 (これはdpkgのマニュアルページに記載されていますが、問題を解決する方法を説明するのではなく、すでに問題を知っている場合は警告する方法に近いです!)

レプリケーションパッケージをインストールしても、dpkg --set-selectionsAPTの自動/手動タグ付けは復元されません。バラよりdpkg --set-selections '*' からすべてのデータと依存関係を復元します。詳細については。以下を使用して、ソースシステムにタグを保存できます。

apt-mark showauto >auto.list

ターゲットシステムに復元

xargs apt-mark auto <auto.list

おすすめ記事