Come posso vedere il log delle modifiche per un pacchetto deb debian / ubuntu?


19

Sto eseguendo Ubuntu e ho un file deb installato. Ho già creato pacchetti deb, quindi so che esiste un log delle modifiche debian (debchange). Esiste un modo per vedere il log delle modifiche debian per qualsiasi pacchetto che ho installato? Supponiamo che non ho accesso al file di origine deb per questo pacchetto e non ho il file deb disponibile. Sono in grado di installare pacchetti extra se necessario.


5
per vedere le modifiche per i apt-getpacchetti installati:apt-get changelog <package>
jfs

@JFSebastian apt-getnon ha un tale comando.
gipi,

2
@gipi: apt-get changelog apt | grep -C5 'apt-get changelog'mostra che questo comando è stato introdotto in apt (0.8.9ubuntu1) natty(2010). Puoi ottenere il sorgente (dopotutto è open-source): esegui apt-get source apte trova il cmdline/apt-get.ccfile e guarda la DoChangelog()funzione (tra l'altro, guarda la DoMoo()funzione).
jfs,

strano, ho l'app (debian) 0.9.12.1 e questo comando non è disponibile.
gipi,

Risposte:


21

In alternativa, se il deb è anche nel repository e si desidera conoscere il registro delle versioni precedenti, è possibile utilizzare apt-get changelog packageper leggere tutto il registro delle modifiche. Ad esempio per openssl:

apt-get changelog libssl1.0.0

Questa è sicuramente la risposta pertinente per il 2016 sia in Debian Jessie che in Ubuntu :)
Dmitri DB

Questa è la risposta corretta
Teekin,

12

apt-listchangesè un bel pacchetto da avere in giro, ma senza avere un file deb attorno alla tua scommessa migliore molto probabilmente è leggere il log delle modifiche Debian da /usr/share/doc/somepackage/changelog.Debian.gz .

Crea una funzione shell con:

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

Come ha accennato l'OP, in debchangerealtà è uno strumento esistente negli script utilizzato per creare voci di log delle modifiche . Quindi consiglio vivamente di scegliere un altro nome. Inoltre, $0probabilmente non farà ciò che ti aspetti. Nel mio caso, verrà sempre eseguito zless /usr/share/doc/bash/changelog.Debian.gz. Nel tuo caso, sostituisci bashcon il nome della shell o dello script da cui la stai eseguendo.
Sei

3

Per estendere la risposta di Janne Pikkarainen , ecco un alias che può essere utilizzato per leggere il log delle modifiche.Debian.gz per un determinato pacchetto:

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

Può essere usato così:

changelog PACKAGE

Si noti tuttavia che questa è una soluzione terribilmente hacker e non è consigliata nella maggior parte dei casi. Una funzione o uno script autonomo è una soluzione molto migliore.

Ecco una funzione che legge tutti i log delle modifiche disponibili per PACCHETTO:

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
}

Ecco una funzione che stampa un elenco di tutti i log delle modifiche disponibili per PACCHETTO e richiede all'utente di selezionare quale leggere:

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
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.