debian / ubuntu debパッケージの変更ログを表示するにはどうすればよいですか?


19

Ubuntuを実行していますが、debファイルがインストールされています。以前debパッケージを作成したことがあるので、debian changelog(debchange)があることを知っています。とにかく、私がインストールしたパッケージのdebianの変更ログを見ることができますか?このパッケージのdebソースファイルにアクセスできず、debファイルが利用できないとします。必要に応じて、追加のパッケージをインストールできます。


5
apt-getインストール済みパッケージの変更を確認するには:apt-get changelog <package>
jfs

@JFSebastianにapt-getはそのようなコマンドはありません。
gipi

2
@gipi:apt-get changelog apt | grep -C5 'apt-get changelog'このコマンドがapt (0.8.9ubuntu1) natty(2010)で導入されたことを示しています。ソースを取得できます(結局オープンソースです):ファイルを実行apt-get source aptして検索cmdline/apt-get.ccし、DoChangelog()関数を調べます(ところで、DoMoo()関数を見てください)。
jfs

奇妙なことに、(debian)apt 0.9.12.1があり、このコマンドは使用できません。
-gipi

回答:


21

あるいは、debもリポジトリにあり、古いバージョンの変更ログを知りたい場合は、apt-get changelog packageすべての変更ログを読むために使用できます。たとえば、opensslの場合:

apt-get changelog libssl1.0.0

これは間違いなくDebian JessieとUbuntuの両方で2016年に関連する答えです:)
Dmitri DB

これは正解です。
ティーキン

12

apt-listchanges周りにある良いパッケージですが、あなたの最善の策の周りにdebファイルを持たないで、おそらく/usr/share/doc/somepackage/changelog.Debian.gzからDebianの変更ログを読むことです。

以下を使用してシェル関数を作成します。

function debchanglog () {
  zless "/usr/share/doc/$1/changelog.Debian.gz"
}

OPが示唆するように、debchange実際には変更ログエントリの作成に使用されるdevscriptsの既存のツールです。したがって、別の名前を選択することを強くお勧めします。また、おそらくあなたが期待していることをしないでしょう。私の場合、常に実行されます。あなたの場合、実行元のシェルまたはスクリプトの名前に置き換えてください。$0zless /usr/share/doc/bash/changelog.Debian.gzbash
6

3

Janne Pikkarainenの答えを拡張するために、特定のパッケージのchangelog.Debian.gzを読み取るために使用できるエイリアスを次に示します。

alias changelog="xargs -I% -- zless /usr/share/doc/%/changelog.Debian.gz <<<"

次のように使用できます。

changelog PACKAGE

ただし、これは非常にハッキングされたソリューションであり、ほとんどの状況では推奨されないことに注意してください。関数またはスタンドアロンスクリプトは、はるかに優れたソリューションです。

PACKAGEで使用可能なすべての変更ログを読み取る関数を次に示します。

changelog(){
    if (( $# != 1 )); then
        echo "Usage: ${FUNCNAME[0]} PACKAGE"
        return 1
    fi

    find -L "/usr/share/doc/$1" -type f -name 'changelog*.gz' -exec zless {} \; 2>/dev/null
}

以下は、PACKAGEで使用可能なすべての変更ログのリストを出力し、ユーザーに照会して変更するものを選択する機能です。

changelog(){
    if (( $# != 1 )); then
        echo "Usage: ${FUNCNAME[0]} PACKAGE"
        return 1
    fi

    local changelog changelogs

    readarray -t changelogs < <(find -L "/usr/share/doc/$1" -type f -name 'changelog*.gz' 2>/dev/null)

    if (( ${#changelogs[@]} == 0 )); then
        return 0
    elif (( ${#changelogs[@]} == 1 )); then
        zless "${changelogs[0]}"
        return $?
    fi

    select changelog in "${changelogs[@]}" EXIT; do
        case $changelog in
            '')
                echo "ERROR: Invalid selection" >&2
                continue
                ;;
            EXIT)
                return 0
                ;;
            *)
                zless "$changelog"
                return $?
                ;;
        esac            
    done
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.