¿Cómo veo el registro de cambios para un paquete debian / ubuntu deb?

19

Estoy ejecutando Ubuntu y tengo un archivo deb instalado. He hecho paquetes de deb antes, así que sé que hay un registro de cambios de debian (debchange). ¿Hay alguna forma de ver el registro de cambios de Debian para cualquier paquete que haya instalado? Suponga que no tengo acceso al archivo fuente de Deb para este paquete y que no tengo el archivo Deb disponible. Puedo instalar paquetes adicionales si es necesario.

Rory
fuente
55
para ver los cambios para los apt-getpaquetes instalados:apt-get changelog <package>
jfs
@JFSebastian apt-getno tiene ese comando.
gipi
2
@ gipi: apt-get changelog apt | grep -C5 'apt-get changelog'muestra que este comando se introdujo en apt (0.8.9ubuntu1) natty(2010). Puede obtener la fuente (es de código abierto después de todo): ejecute apt-get source apty encuentre el cmdline/apt-get.ccarchivo y mire la DoChangelog()función (por cierto, mire la DoMoo()función).
jfs
extraño, tengo el (debian) apt 0.9.12.1 y este comando no está disponible.
gipi

Respuestas:

21

Alternativamente, si el deb también está en el repositorio y desea conocer el registro de cambios de versiones anteriores, puede usarlo apt-get changelog packagepara leer todo el registro de cambios. Por ejemplo para openssl:

apt-get changelog libssl1.0.0
PhoneixS
fuente
Esta es definitivamente la respuesta relevante para 2016 tanto en Debian Jessie como en Ubuntu :)
Dmitri DB
Esta es la respuesta correcta.
Teekin
12

apt-listchangeses un buen paquete para tener, pero sin tener un archivo deb alrededor de su mejor opción, lo más probable es leer el registro de cambios de Debian en /usr/share/doc/somepackage/changelog.Debian.gz .

Cree una función de shell con:

function debchanglog () {
  zless "/usr/share/doc/$1/changelog.Debian.gz"
}
Janne Pikkarainen
fuente
Como aludió el OP, en debchangerealidad es una herramienta existente en los scripts de desarrollo utilizados para crear entradas de registro de cambios. Por lo tanto, recomiendo elegir otro nombre. Además, $0probablemente no hará lo que esperas. En mi caso, siempre se ejecutará zless /usr/share/doc/bash/changelog.Debian.gz. En su caso, reemplácelo bashcon el nombre del shell o script desde el que lo está ejecutando.
Seis
3

Para ampliar la respuesta de Janne Pikkarainen , aquí hay un alias que se puede usar para leer el registro de cambios.Debian.gz para cualquier paquete dado:

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

Se puede usar así:

changelog PACKAGE

Sin embargo, tenga en cuenta que esta es una solución terriblemente hostil y no se recomienda en la mayoría de las circunstancias. Una función o script independiente es una solución mucho mejor.

Aquí hay una función que lee todos los registros de cambios disponibles 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
}

Aquí hay una función que imprime una lista de todos los registros de cambios disponibles para PACKAGE y consulta al usuario para seleccionar cuál leer:

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
fuente