同じdebianパッケージの異なるバージョンを比較する


11

ローカルにインストールされたパッケージと更新されたパッケージのソースの差分を取得する方法はありますか?これは、修正、変更、または追加されたパーツを正確に確認するのに役立ちます。

たとえば、システムにlinux-libc-devパッケージがインストールされていて、

sudo apt-get update && sudo apt-get upgrade

ショー

The following packages will be upgraded:
  linux-libc-dev 

ただし、アップグレードする前に、同じパッケージのローカルバージョンと比較して行われた正確な変更を確認する必要があります。

どうすればできますか?

回答:


5

これが私がハッキングした別のソリューションです:whatchanged

興味のあるバイナリパッケージの名前を唯一の引数として受け取ります。例として最近のSRUを使用するには:

./whatchanged python_papyon

これはそれがすることです:

  1. 更新候補があるかどうかを確認します。ない場合は終了します
  2. 候補が存在する場合は、一時ディレクトリを作成し、インストールされているバージョンと候補の両方のソースパッケージをフェッチします。
  3. 2つをdebdiffと出力をstdoutと比較します(おそらく、読みやすくするためにリダイレクトする必要があります)。
  4. 一時ディレクトリをクリーンアップします。

おそらく、ソースの取得中に問題が発生する可能性がある特定の処理をより適切に処理する必要があり、フロー制御はおそらく少しずれており、バージョンチェックにはより洗練された方法が必要ですが、これまでの限られたテストでは問題なく機能しました。とりあえず、それが機能する簡単なハックであると考えてください。改善は大歓迎です。それをbzrリポジトリーにプッシュしたり、少数のユーザーにとって便利な場合はLaunchpadプロジェクトを作成したりします。

編集:ペーストビンで腐敗させるのではなく、ランチパッドプロジェクトを開始ました。で最新のトランクリビジョンを取得できますbzr branch lp:whatchanged。バグの報告、ブランチ、Perlでの書き換えなど、お気軽にどうぞ。


いいね!..あなたのコーディングスタイルなど)が、適切にperlでそれをコード化されているだろう。答えのようなツールを開発
LassePoulsen

ありがとう。それがお役に立てば幸いです。パッケージ化とリリースの技術がオープンコードを不透明に見えるようにする方法は、私の頭に浮かんだものであり、それを克服するための簡単なツールを見つけられなかったので、まったく同じことの必要性を表明している誰かが、ようやくやる気になりました自分で原始的なものを作る。
mgunes

7

Afaikがこれを行う唯一の方法は、ソースを取得して差分を自分のものにすることです。パッケージのコンパイルに使用される実際のソースは、apt-getで取得できます。fx:

apt-get source gwibber=2.30.2-0ubuntu3 gwibber=2.30.0.1-0ubuntu1
diff -rupN gwibber-2.30.0.1/ gwibber-2.30.2/

これにより、すべてのファイル間のすべての違いが標準パッチ形式で出力されます。


1
これはかなり良いです。この例で変更するのは、生の差分ではなく「debdiff gwibber_2.30.0.1-0ubuntu1.dsc gwibber_2.30.2-0ubuntu3.dsc」を使用することだけです。
RAOF

1
まあそれは実質的に同じことを行いますが、そこにあるすべてのパッケージ/ tarballでdiffを使用できます。たぶん誰かがsvn-trunkと現在のパッケージの違いを見たいと思うでしょう。
LassePoulsen、

私の2番目の答え(何が変更されたか)は、これを本質的に自動化します。
mgunes

2

これは、(おそらく最適ではない)UDDの方法の1つです。

最新のSRUが含まれているはずの(前提条件は次のとおり)リリースのPull -updatesブランチ(Lucidを想定):

bzr branch lp:ubuntu/lucid-updates/package_name

最新のリビジョンによって導入された変更を取得します。これは(前提は以下のとおり)最新のSRUに対応している必要があります。

bzr diff -c`bzr revno`

2
うーん。これは興味深い見方ですが、パッケージ名がbzrソースツリーと一致しないか、bzrソースツリーに存在しない可能性があるという意味で、ソースラボよりも包括的ではありません。
ゲーデル

ソースパッケージ名がわかっている限り、一致します。を使用して、バイナリパッケージがどのソースパッケージで作成されたかを確認できますapt-cache show package_name | grep Source:
mgunes

@Muratさて、<package_name>取得したパッケージは一部のパッケージでは機能しません:bzr branch lp:ubuntu/lucid-updates/$(apt-cache show linux-libc-dev | grep -m 1 Source: | awk "{print \$2}")=> bzr:エラー:トランスポートに無効なURLが指定されました: "bzr + ssh://bazaar.launchpad.net/+branch/ubuntu/lucid-updates/linux" :なしサポート制度
ゲーデル

これは、カーネルにUbuntuブランチがまったくないためです。カーネルはgit(kernel.ubuntu.com)で管理されているため、特定の例外である可能性がありますが、現時点ではbzrパッケージブランチの正確なスコープについてはわかりません。#ubuntu-develで質問してください。
mgunes

@壁画は知っています。そのため、この方法はSource Labの方法よりも包括的ではありません。しかし、再び、それは興味深い見解です。
ゲーデル

0

パッケージアーカイブ内のファイルの違いを確認するには、それらのmd5sumsファイルを抽出し、それらを並べ替えて比較してから、実際のファイルのリストを絞り込んで、劇的に比較できます。


-1

「正確な」変更ではない可能性がありapt-listchangesますが、インストールされたバージョン以降に行われた変更の変更ログエントリが一覧表示されます。

これは、新しいパッケージのダウンロードが完了した後、インストールが開始する前にステップを追加することで機能し、アップグレードされる各パッケージの変更ログエントリが表示されます。その後、続行またはキャンセルできます。あなたはそれをインストールすることができます

sudo apt-get install apt-listchanges

次にそれを設定します

sudo dpkg-reconfigure apt-listchanges

繰り返しになりますが、問題はChangeLogの変更を表示することではありません。
ゲーデル

ドー、「ソース差分」と言った最初の行を逃しました。
Ken Simon、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.