メインシステムに適用する前に更新プログラムをテストするために、VMにステージング環境をセットアップしようとしています。
これを行うために、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ネイティブです。
問題は、VMで実行される_dpkg --set-selections
_にあります。私は特別な処理を必要とするいくつかのパッケージを持っています(これらは実際にステージング環境が最初に必要な主な理由です)が、上記の最後のコマンドを実行すると、次のような膨大な数の出力が得られます。
_dpkg: warning: package not in database at line NNN: package-name
_
基本システムで実際に利用できるはずのパッケージ用。例には、xterm
、Yelp
、Zip
などがあります。
今私の質問のために:
あるDebianシステムから別のDebianシステムにパッケージ選択リストを転送する具体的なプロセスは何ですか(Wheezyで同じDebianリリースレベルを想定)その後、それらの変更を適用しますか?目標両方がインストール済みパッケージの同じリストを持っているということです。理想的には、2つの出力で_dpkg --get-selections
_または_dpkg --list
_の出力間でdiff
を実行しても、違いは示されません。
_grep -v deinstall
_の部分は Ask Ubuntuで_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
があり、エラーは報告されていません。エラーが報告されているパッケージは、_dpkg -l
_に応じてun
であるか、_dpkg -l
_がそれらについてまったく考えていないようです(_dpkg-query: no packages found matching ...
_)。ローカルにインストールされたパッケージがいくつかあることは知っていますが、多くはありません。 _i386
_は、リストのさらに下の_gcc-4.7-base:i386 install
_much(--get-selections出力の行342)まではわかりません。
Debianインストールのクローンを作成するには、 apt-clone
ユーティリティを使用します。 Debianではwheezy以降、Ubuntuでは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
私はあなたが最初にwheezyにしたdpkgの互換性のない変更の影響を受けていると思います。背景については bug#703092 を参照してください。
短い話は、dpkg --set-selections
は現在、ファイル/var/lib/dpkg/status
または/var/lib/dpkg/available
に存在するパッケージ名のみを受け入れるということです。 APT=のみを使用して、ほとんどの人のようにパッケージを管理する場合、/var/lib/dpkg/available
は最新に保たれません。
apt-get update
を実行した後、dpkg --set-selections
およびapt-get -u dselect-upgrade
を実行する前に、次のコマンドを実行します。
apt-cache dumpavail >/tmp/apt.avail
dpkg --merge-avail /tmp/apt.avail
ジェシー以降、これを単純化して
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のmanページで言及されていますが、問題を解決する方法を説明する方法ではなく、すでに気付いている場合は問題を思い出させるような方法で!)
dpkg --set-selections
を使用してパッケージインストールを複製しても、APTの自動/手動マークは復元されません。詳細は dpkg --set-selections '*'からのすべてのデータと依存関係の復元 を参照してください。マークをソースシステムに保存できます
apt-mark showauto >auto.list
そしてそれらをターゲットシステムに復元します
xargs apt-mark auto <auto.list
On sourceホスト:
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
ファイルを宛先ホストに送信します。
destinationホスト:
vi /etc/apt/sources.list
異なるミラーでも、sources.list適応しますが、同じcomponentリストです。
apt-get update
dselect upgrade
dpkg --set-selection </tmp/source.sel
dselect install
そして今、私のdestination Hostは現在多くのものをインストールしているので、これを投稿するのに少し時間がかかるかもしれません。