Comment puis-je voir le changelog pour un paquet deb debian / ubuntu?

19

J'utilise Ubuntu et j'ai un fichier deb installé. J'ai déjà fait des paquets deb, donc je sais qu'il y a un changelog debian (debchange). Existe-t-il de toute façon le journal des modifications de Debian pour tout paquet que j'ai installé? Supposons que je n'ai pas accès au fichier source deb pour ce paquet et que je n'ai pas le fichier deb disponible. Je peux installer des packages supplémentaires si nécessaire.

Rory
la source
5
pour voir les changements pour les apt-getpackages installés:apt-get changelog <package>
jfs
@JFSebastian apt-getn'a pas une telle commande.
gipi
2
@gipi: apt-get changelog apt | grep -C5 'apt-get changelog'montre que cette commande est introduite dans apt (0.8.9ubuntu1) natty(2010). Vous pouvez obtenir la source (c'est open-source après tout): exécutez apt-get source aptet trouvez le cmdline/apt-get.ccfichier et regardez la DoChangelog()fonction (btw, regardez la DoMoo()fonction).
jfs
étrange, j'ai le (debian) apt 0.9.12.1 et cette commande n'est pas disponible.
gipi

Réponses:

22

Alternativement, si le deb est également dans le référentiel et que vous souhaitez connaître le journal des modifications des anciennes versions, vous pouvez utiliser apt-get changelog packagepour lire tout le journal des modifications. Par exemple pour openssl:

apt-get changelog libssl1.0.0
PhoneixS
la source
C'est certainement la réponse pertinente pour 2016 à la fois dans Debian Jessie et Ubuntu :)
Dmitri DB
Ceci est la bonne réponse.
Teekin
12

apt-listchangesest un bon paquet à avoir autour, mais sans avoir de fichier deb autour de votre meilleur pari est probablement de lire le changelog Debian depuis /usr/share/doc/somepackage/changelog.Debian.gz .

Créez une fonction shell avec:

function debchanglog () {
  zless "/usr/share/doc/$1/changelog.Debian.gz"
}
Janne Pikkarainen
la source
Comme l'OP y fait allusion, debchangeest en fait un outil existant dans les scripts de développement utilisé pour créer des entrées de journal des modifications . Je recommande donc fortement de choisir un autre nom. De plus, $0ne fera probablement pas ce que vous attendez. Dans mon cas, il s'exécutera toujours zless /usr/share/doc/bash/changelog.Debian.gz. Dans votre cas, remplacez bashpar le nom du shell ou du script à partir duquel vous l'exécutez.
Six
3

Pour étendre la réponse de Janne Pikkarainen , voici un alias qui peut être utilisé pour lire le changelog.Debian.gz pour un paquet donné:

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

Il peut être utilisé comme ceci:

changelog PACKAGE

Veuillez noter cependant que c'est une solution terriblement hackish et n'est pas recommandée dans la plupart des circonstances. Une fonction ou un script autonome est une bien meilleure solution.

Voici une fonction qui lit tous les changelogs disponibles pour 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
}

Voici une fonction qui imprime une liste de tous les journaux des modifications disponibles pour PACKAGE et demande à l'utilisateur de sélectionner celui à lire:

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
}
Six
la source