Bagaimana cara melihat changelog untuk paket deb debian / ubuntu?

19

Saya menjalankan Ubuntu dan saya memiliki file deb diinstal. Saya telah membuat paket deb sebelumnya, jadi saya tahu ada changelog debian (debchange). Apakah ada cara untuk melihat changelog debian untuk setiap paket yang telah saya instal? Asumsikan saya tidak memiliki akses ke file sumber deb untuk paket ini, dan saya tidak memiliki file deb yang tersedia. Saya dapat menginstal paket tambahan jika diperlukan.

Rory
sumber
5
untuk melihat perubahan untuk apt-getpaket yang diinstal:apt-get changelog <package>
jfs
@ JFSebastian apt-gettidak memiliki perintah seperti itu.
gipi
2
@ gipi: apt-get changelog apt | grep -C5 'apt-get changelog'menunjukkan bahwa perintah ini diperkenalkan pada apt (0.8.9ubuntu1) natty(2010). Anda bisa mendapatkan sumbernya (ini open-source): jalankan apt-get source aptdan cari cmdline/apt-get.ccfile dan lihat DoChangelog()fungsinya (btw, lihat DoMoo()fungsinya).
jfs
aneh, saya punya (debian) apt 0.9.12.1 dan perintah ini tidak tersedia.
gipi

Jawaban:

21

Atau jika deb juga ada di repositori dan Anda ingin tahu changelog versi lama, Anda bisa menggunakan apt-get changelog packageuntuk membaca semua changelog. Misalnya untuk openssl:

apt-get changelog libssl1.0.0
PhoneixS
sumber
Ini jelas jawaban yang relevan untuk 2016 di Debian Jessie dan Ubuntu :)
Dmitri DB
Ini jawaban yang benar.
Teekin
12

apt-listchangesadalah paket yang bagus untuk dimiliki, tetapi tanpa memiliki file deb di sekitar taruhan terbaik Anda, kemungkinan besar adalah membaca changelog Debian dari /usr/share/doc/somepackage/changelog.Debian.gz .

Buat fungsi shell dengan:

function debchanglog () {
  zless "/usr/share/doc/$1/changelog.Debian.gz"
}
Janne Pikkarainen
sumber
Sebagai OP disinggung, debchangesebenarnya alat yang ada dalam skrip devs yang digunakan untuk membuat entri changelog. Jadi saya sangat merekomendasikan memilih nama lain. Juga, $0mungkin tidak akan melakukan apa yang Anda harapkan. Dalam kasus saya, itu akan selalu dijalankan zless /usr/share/doc/bash/changelog.Debian.gz. Dalam kasus Anda, ganti bashdengan nama shell atau skrip tempat Anda mengeksekusinya.
Enam
3

Untuk memperluas jawaban Janne Pikkarainen , berikut adalah alias yang dapat digunakan untuk membaca changelog.Debian.gz untuk setiap paket yang diberikan:

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

Dapat digunakan seperti ini:

changelog PACKAGE

Harap dicatat bahwa ini adalah solusi yang sangat meretas dan tidak direkomendasikan dalam sebagian besar keadaan. Fungsi atau skrip mandiri adalah solusi yang jauh lebih baik.

Berikut adalah fungsi yang membaca semua changelog yang tersedia untuk PAKET:

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
}

Berikut adalah fungsi yang mencetak daftar semua changelog yang tersedia untuk PAKET dan meminta pengguna untuk memilih yang mana untuk dibaca:

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
}
Enam
sumber