Wie sehe ich das Changelog für ein Debian / Ubuntu-Deb-Paket?

19

Ich verwende Ubuntu und habe eine Deb-Datei installiert. Ich habe bereits Deb-Pakete erstellt, daher weiß ich, dass es ein Debian-Changelog (Debchange) gibt. Gibt es überhaupt das Debian-Changelog für ein Paket, das ich installiert habe? Angenommen, ich habe keinen Zugriff auf die Deb-Quelldatei für dieses Paket und die Deb-Datei ist nicht verfügbar. Ich kann bei Bedarf zusätzliche Pakete installieren.

Rory
quelle
5
um Änderungen für apt-getinstallierte Pakete zu sehen:apt-get changelog <package>
jfs
@JFSebastian apt-gethat keinen solchen Befehl.
Gipi
2
@gipi: apt-get changelog apt | grep -C5 'apt-get changelog'Zeigt an, dass dieser Befehl in apt (0.8.9ubuntu1) natty(2010) eingeführt wurde. Sie können die Quelle erhalten (es ist immerhin Open-Source): Führen apt-get source aptSie die cmdline/apt-get.ccDatei aus, suchen Sie sie und schauen Sie sich die DoChangelog()Funktion an (übrigens, schauen Sie sich die DoMoo()Funktion an).
jfs
seltsam, ich habe das (debian) apt 0.9.12.1 und dieser befehl ist nicht verfügbar.
Gipi

Antworten:

21

Wenn sich die Deb ebenfalls im Repository befindet und Sie ältere Versionen von Changelog kennenlernen möchten, können Sie auch apt-get changelog packagedas gesamte Changelog lesen. Zum Beispiel für openssl:

apt-get changelog libssl1.0.0
PhoneixS
quelle
Dies ist definitiv die relevante Antwort für 2016 in Debian Jessie und Ubuntu :)
Dmitri DB
Das ist die richtige Antwort.
Teekin
12

apt-listchangesist ein nettes Paket, das man haben sollte, aber ohne eine Deb-Datei zu haben, ist es höchstwahrscheinlich, das Debian-Changelog von /usr/share/doc/somepackage/changelog.Debian.gz zu lesen .

Erstellen Sie eine Shell-Funktion mit:

function debchanglog () {
  zless "/usr/share/doc/$1/changelog.Debian.gz"
}
Janne Pikkarainen
quelle
Wie im OP angedeutet, debchangehandelt es sich tatsächlich um ein vorhandenes Tool in Devscripts, das zum Erstellen von Changelog-Einträgen verwendet wird. Daher würde ich dringend empfehlen, einen anderen Namen zu wählen. Auch $0wird wahrscheinlich nicht das tun, was Sie erwarten. In meinem Fall wird es immer ausgeführt zless /usr/share/doc/bash/changelog.Debian.gz. Ersetzen Sie in Ihrem Fall durch bashden Namen der Shell oder des Skripts, von der aus Sie es ausführen.
Sechs
3

Um die Antwort von Janne Pikkarainen zu erweitern , hier ein Alias, mit dem das changelog.Debian.gz für ein bestimmtes Paket gelesen werden kann:

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

Es kann so verwendet werden:

changelog PACKAGE

Bitte beachten Sie jedoch, dass dies eine schrecklich hackige Lösung ist und unter den meisten Umständen nicht empfohlen wird. Eine Funktion oder ein eigenständiges Skript ist eine viel bessere Lösung.

Hier ist eine Funktion, die alle verfügbaren Änderungsprotokolle für PACKAGE liest:

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
}

Hier ist eine Funktion, die eine Liste aller verfügbaren Änderungsprotokolle für PACKAGE druckt und den Benutzer auffordert, das zu lesende zu wählen:

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
}
Sechs
quelle