web-dev-qa-db-ja.com

debian / ubuntu debパッケージの変更ログを見るにはどうしたらいいですか?

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

20
Rory

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

apt-get changelog libssl1.0.0
25
PhoneixS

apt-listchangesは素敵なパッケージですが、最善の策としてdebファイルがなければ、おそらく/ usr/share/doc/somepackage/changelog.Debian.gzからDebianの変更ログを読むことになります。 。

次のコマンドでシェル関数を作成します。

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

Janne Pikkarainenの answer を拡張するために、特定のパッケージの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
}
3
Six