インストールされたパッケージの選択をあるDebianシステムから別のシステムに複製するにはどうすればよいですか?(デビアンウィージー)


19

メインシステムに更新プログラムを適用する前に、更新プログラムをテストするために、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ネイティブです。

問題はdpkg --set-selections、VM での実行にあります。私は特別な処理を必要とするパッケージをいくつか持っています(これらが実際に私が最初にステージング環境を必要とする主な理由です)が、上記の最後のコマンドを実行すると、約

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

基本システムで実際に利用できるはずのパッケージ用。例にはxtermyelpおよびが含まれますzip

今私の質問のために:

あるDebianシステムから別のシステムにパッケージ選択リストを転送し(Wheezyで同じDebianリリースレベルを想定)、その後それらの変更を適用するための具体的なプロセスは何ですか?目標は、両方がインストールされたパッケージの同じリストを持っていることをやっていることを理想的なものであるdiffの出力間dpkg --get-selectionsまたはdpkg --list2に戻って違いを示さない来ます。

この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

間であることに注意してくださいaclaglfnありacpi-support-baseacpidそしてadduser そのためにエラーが報告されていないされています。エラーが報告されているパッケージはにun従っているかdpkg -ldpkg -lまったく知らないようdpkg-query: no packages found matching ...です()。ローカルにインストールされたパッケージがいくつかありますが、多くはありません。i386図は、までないgcc-4.7-base:i386 install くらい遠くリスト(--get-選択出力のライン342)ダウン。


dpkg --get-selections … | … dpkg --set-selectionsパッケージの選択を複製する方法です。それがあなたのために失敗した場合、あなたは理由に関する詳細な情報を提供する必要があります。両方のシステムに、ソースからの完全なセット、からの出力dpkg --get-selections、およびからの完全なトランスクリプトを投稿しますdpkg --get-selections(機能するものと機能しないものを見ることでパターンを識別できるかもしれません)。メインシステムamd64またはi386の場合 i386アーキテクチャを追加しなくても動作しますか?
ジル 'SO-悪であるのをやめる'

@Gilles本当に完全な出力である必要がありますかdpkg --get-selections(そして、あなたはdpkg --set-selectionsトランスクリプトを意味したと思いますか?)前者だけでも3,600行を超え、約100 KBです。
CVn

どのパッケージがエラーを引き起こし、どのパッケージがエラーを引き起こさないかのパターンを識別するために、十分な投稿をする必要があります(自分で理解できる場合を除く)。/var/lib/dpkg/Packages(さらに長い)のコピーも役立つ場合があります。これは、壊れたパッケージファイルの症状である可能性があります。
ジル 'SO-悪であるのをやめる'

@Gilles興味深い点。可能性については本当に考えていませんでしたが、これらには異なるミラーを使用しています。VMを同じDebianミラーに向けると、まだ発生するかどうかを確認させてください。待機する。
CVn

@Gillesそれは実際には認識できるほどの違いはありませんでしたが、私は何か他のものを見つけました。更新された質問を参照してください。
CVn

回答:


17

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
    

あなたは、最初にそれをwheezyにした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

ジェシー以降では、これを単純化できます

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
この問題は、それよりもはるかに目に見えるはずです。今まで聞いたことがないなんて信じられない!
ファヒムミタ

面白い。これを試してみるつもりです。ありがとう!
CVn

@FaheemMithaええ、今日まで聞いたことがないことに驚いています。dpkg --set-selections喘鳴前から使用していないとは信じられません!
ジル「SO-悪であるのをやめる」

さて、それはからの警告の非常に短いリストを与えました--set-selections。次に、変更をどのように適用しますか?でもapt-get -u dist-upgradeパッケージのみの一握りに言及している(すべてのZFS関連)パッケージのない何千人が影響を受けた場合は、何百があるはずです。
CVn

@MichaelKjörlingそれはapt-get -u dselect-upgrade
ジル「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 
    

    ミラーが異なっていても、コンポーネントリストが同じであってもsources.listを適合させます

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

    そして今、私の宛先ホストは現在多くのものをインストールしているので、これを投稿するのに時間がかかるかもしれません。


上記の「方法」の説明で、「dselect upgrade」は「dselect update」である可能性があります。
ジョナサンキミット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.