2つの異なるLinuxインストールの差分を取得するツールまたは手法


10

アルバートアインシュタインの名言

狂気:同じことを何度も繰り返し、異なる結果を期待する

Linuxは、同じことを何度も繰り返して、ボックスごとに異なる結果を得るので、私を怒らせます。(私の前の質問を参照しください)。

私にとって、最大の混乱の領域は、他の誰かがインストールしたマシンを引き継ぐことです(Webホスティング会社にサインアップするときのように)。何を扱っているのか分からないだけです。

Linux(Ubuntu)のインストールで実行して、そのマシンがデフォルトのインストールからどのように移行したかを知るための、巧妙な差分ツールはありますか?

つまり、驚くべき動作をするコマンドのリストを表示できるため、試行錯誤のアプローチを回避できます。


4
「意外に動作するコマンドのリスト」は表示されません。ソフトウェアは、あなたが驚くべきものを予測することはできません。
Gilles「SO-邪悪なことをやめなさい」

ありがとう。これらの回答は、他の誰かがインストールしたマシンを引き継ぐときに考慮する必要のある、関連する差異の領域をモデル化する方法をよりよく理解してくれます。これまでのところ、インストールされているパッケージ実行中のサービス構成ファイルシステムの種類に違いがあります。それがそれであるか、リストが無限であるかを知りたいのですが?@ギレス-はい、Linuxの知識が限られているので、自分自身も「意外だった」と自分で予測するのも難しいです。
JW01、

1
リストは無限です。Linuxの例ではありませんが、少し前まで、Visual Studioは特定のマシンでいくつかのダイアログボックスを表示しませんでした(エラーはなく、コントロールが存在するはずの空のスペースのみ)。インストールされているフォントが多すぎることが原因です。この物語の教訓は、隅に潜んでいる驚きが常にあるということです。
Gilles「SO-邪悪なことをやめなさい」

回答:


10

優れたリファレンスシステムと問題のあるリファレンスシステムがあるときはいつでも、それらをvimdiffと比較しようとします。私が比較するものは問題によって異なります、例えば

1)パッケージレベルでサーバーを比較するとき、各サーバーでパッケージのソートされたリストを作成し、結果をファイルに送信してそれらを比較します。

server1:

dpkg --get-selections|sort > server1_packages

server2の場合:

dpkg --get-selections|sort > server2_packages

両方のファイルを同じマシンにコピーし、それらを差分(またはvimdiff)します。

2)例1のように実行中のサービスのリストを作成します

sysv-rc-conf --list|sort > server1_services

sysv-rc-conf --list|sort > server2_services

...など、それらをvimdiff。

3)たとえば、Apacheで矛盾する構成をトラブルシューティングする場合は、構成ファイルのコピーを作成し、それらをvimdiffなどします。


2
オプションの良い要約。/etc何が起こっているのかを追跡できるように、ファイルをバージョン管理下に置くこともお勧めします。etckeeperあなたのためにこれを行います。
Faheem Mitha、

「dpkg:読み取り用のパッケージ情報ファイル `/ var / lib / dpkg / status 'を開けませんでした:そのようなファイルまたはディレクトリはありません」を取得しています。これは、yumを使用したCentosでどのように見えますか?PS Nevermind、「yumリストがインストールされている」
giorgio79

5

同じディストリビューションの2つのインストールの違いのほとんどは、にあり/etcます。の内容を/etc一方のマシンから他方の一時ディレクトリにコピーして実行します

diff -ru /etc /copy/of/other/etc

マシンをデフォルトのインストールと比較する場合は、新規のデフォルトのインストール(おそらく仮想マシン)からコピーを取得します。

マシンを最初から制御できる場合は、etckeeperをインストールして/etcバージョン管理下に置いてください。次に、変更点を正確に確認できます。

もちろん、多くの違いがあります。どこを見ればよいかわからない場合、これは特定の動作の違いを調査するための間違ったアプローチです。たとえば、コマンドadduserが2台のマシンで異なる動作をするとします。次に、最善の方法は、何adduserをしているかを調べることです。両方のマシンで実行して比較します。冗長にする(adduserしない)ように指示するオプションがある場合は、それを使用します。より根本的に、straceの下でプログラムを実行します、例えば

strace -s9999 -efile adduser …

adduserアクセスするファイルを確認します。


2

以前の質問に戻るために、私には良い考えのように聞こえますが、そのような獣が存在することは聞いたことがありませんが、ファイルシステムのタイプやサイズなどを確認する必要がある気の利いたツールです。

2002年に私に起こった実際の例:2人がSuSE 7.3システムを2つの隣接するラックマウント型サーバーにインストールしました。彼らは両方のサーバーでパッケージをまったく同じにするために多くの努力をしました。しばらくして、開発中のソフトウェアに問題が発生しました。1つのサーバーではext3ファイルシステム、もう1つのサーバーではReiserfsに到達しました。Reiserfsのプレーンな「ls」は、ファイル名を字句順に与えますが、ext3では与えません。1つのプログラムがファイル名の順序が正しくないために失敗しました。


1

ファイル、ユーザー、グループ、パッケージ、サービスなどについて、私はhttp://www.scriptrock.comを使用しました。一部のサーバーは無料で、サーバー間の違いを視覚的に比較できます。ドリフトに非常に便利です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.