GNU/Linux >> Linux の 問題 >  >> Debian

Debian –インストールされているパッケージの選択をあるDebianシステムから別のシステムに複製する方法は? (debian Wheezy)?

メインシステムに適用する前に更新をテストするために、VMにステージング環境をセットアップしようとしています。

そのために、VMにDebian Wheezy(メインシステムと同じ)を基本的にインストールし、VM内からrootとして実行しました。

# dpkg --clear-selections
# dpkg --add-architecture i386
# apt-get update
# ssh [email protected] '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

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

さて、私の質問です:

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

grep -v deinstall dpkg --set-selections を実行した後、パッケージが削除されないようにするために一部が借用されています AskUbuntuで終わります。

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 <​​/ code> それらについてはまったくわかりません( dpkg-query:一致するパッケージが見つかりません... )。ローカルにインストールされたパッケージがいくつかあることは知っていますが、多くはありません。 i386 gcc-4.7-base:i386 installまではわかりません 多く リストのさらに下(–get-selections出力の342行目)。

関連:主流の*NIXシェル間の基本的な違いは何ですか??

承認された回答:

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-selectionsを実行する前に およびapt-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-selectionsを使用してパッケージインストールのクローンを作成することに注意してください。 APTの自動/手動マークは復元されません。詳細については、dpkg –set-selections‘*’からのすべてのデータと依存関係の復元を参照してください。

を使用してソースシステムにマークを保存できます
apt-mark showauto >auto.list

を使用してターゲットシステムに復元します
xargs apt-mark auto <auto.list

Debian
  1. DebianLinuxシステムをWheezyからJessie安定リリースにアップグレードする方法

  2. Debian10にGradleをインストールする方法

  3. ソースからコンパイルしてDebian7(Wheezy)VPSにNginxをインストールする方法

  1. Debian10にAnyDeskをインストールする方法

  2. Debian – Debianテストから単一のパッケージをインストールする方法または安定して不安定にする方法は?

  3. Fedora –インストールされたパッケージの選択をあるFedoraインスタンスから別のインスタンスに複製する方法は?

  1. Debian9にYarnをインストールする方法

  2. Debian10にYarnをインストールする方法

  3. Debian 7(Wheezy)最小サーバーをインストールする方法