Como vejo o log de alterações de um pacote debian / ubuntu deb?

19

Estou executando o Ubuntu e tenho um arquivo deb instalado. Eu fiz pacotes deb antes, então eu sei que existe um log de alterações debian (debchange). Existe alguma maneira de ver o log de alterações da debian para qualquer pacote que eu instalei? Suponha que eu não tenho acesso ao arquivo de origem deb para este pacote e não tenho o arquivo deb disponível. Sou capaz de instalar pacotes extras, se necessário.

Rory
fonte
5
para ver as mudanças para apt-getos pacotes instalados:apt-get changelog <package>
JFS
@JFSebastian apt-getnão tem esse comando.
Gipi
2
@ gipi: apt-get changelog apt | grep -C5 'apt-get changelog'mostra que este comando foi introduzido em apt (0.8.9ubuntu1) natty(2010). Você pode obter o código-fonte (afinal, é de código aberto): execute apt-get source apte localize o cmdline/apt-get.ccarquivo e veja a DoChangelog()função (btw, veja a DoMoo()função).
Jfs #
estranho, tenho o (debian) apt 0.9.12.1 e este comando não está disponível.
Gipi

Respostas:

21

Alternativamente, se o deb também estiver no repositório e você quiser conhecer o changelog de versões mais antigas, você pode usar apt-get changelog packagepara ler todo o changelog. Por exemplo, para o openssl:

apt-get changelog libssl1.0.0
PhoneixS
fonte
Esta é definitivamente a resposta relevante para 2016, tanto Debian Jessie e Ubuntu :)
Dmitri DB
Essa é a resposta correta.
Teekin
12

apt-listchangesé um bom pacote para se ter, mas sem ter um arquivo deb em torno de sua melhor aposta, provavelmente é ler o changelog do Debian em /usr/share/doc/somepackage/changelog.Debian.gz .

Crie uma função shell com:

function debchanglog () {
  zless "/usr/share/doc/$1/changelog.Debian.gz"
}
Janne Pikkarainen
fonte
Como o OP aludiu, debchangena verdade é uma ferramenta existente em devscripts usada para criar entradas no registro de alterações. Então, eu recomendo fortemente escolher outro nome. Além disso, $0provavelmente não fará o que você está esperando. No meu caso, ele sempre será executado zless /usr/share/doc/bash/changelog.Debian.gz. No seu caso, substitua bashpelo nome do shell ou script do qual você está executando.
Seis
3

Para estender a resposta de Janne Pikkarainen , aqui está um apelido que pode ser usado para ler o changelog.Debian.gz para qualquer pacote:

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

Pode ser usado assim:

changelog PACKAGE

Observe, porém, que esta é uma solução terrivelmente hackiana e não é recomendada na maioria das circunstâncias. Uma função ou script independente é uma solução muito melhor.

Aqui está uma função que lê todos os registros de alterações disponíveis para 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
}

Aqui está uma função que imprime uma lista de todos os registros de alterações disponíveis para PACKAGE e consulta o usuário para selecionar qual deles ler:

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
}
Seis
fonte