Jak wyświetlić dziennik zmian pakietu debian / ubuntu?

19

Używam Ubuntu i mam zainstalowany plik deb. Wcześniej tworzyłem pakiety deb, więc wiem, że istnieje dziennik zmian debiana (debchange). Czy w ogóle można zobaczyć dziennik zmian Debiana dla dowolnego pakietu, który zainstalowałem? Załóżmy, że nie mam dostępu do źródłowego pliku deb dla tego pakietu i nie mam dostępnego pliku deb. W razie potrzeby mogę zainstalować dodatkowe pakiety.

Rory
źródło
5
aby zobaczyć zmiany w apt-getzainstalowanych pakietach:apt-get changelog <package>
jfs 11.04.13
@JFSebastian apt-getnie ma takiego polecenia.
gipi
2
@gipi: apt-get changelog apt | grep -C5 'apt-get changelog'pokazuje, że to polecenie zostało wprowadzone w apt (0.8.9ubuntu1) natty(2010). Możesz pobrać źródło (w końcu jest to oprogramowanie typu open source): uruchom apt-get source apti znajdź cmdline/apt-get.ccplik i spójrz na DoChangelog()funkcję (btw, spójrz na DoMoo()funkcję).
jfs
dziwne, mam (debian) apt 0.9.12.1 i to polecenie nie jest dostępne.
gipi

Odpowiedzi:

21

Alternatywnie, jeśli deb jest również w repozytorium i chcesz poznać dziennik zmian starszych wersji, możesz użyć apt-get changelog packagedo odczytania całego dziennika zmian. Na przykład dla openssl:

apt-get changelog libssl1.0.0
PhoneixS
źródło
To jest zdecydowanie odpowiednia odpowiedź na 2016 rok zarówno w Debianie Jessie, jak i Ubuntu :)
Dmitri DB
To jest poprawna odpowiedź.
Teekin,
12

apt-listchangesjest fajnym pakietem do obejrzenia, ale bez pliku deb wokół twojego najlepszego zakładu najprawdopodobniej jest to odczytanie dziennika zmian Debiana z /usr/share/doc/somepackage/changelog.Debian.gz .

Utwórz funkcję powłoki za pomocą:

function debchanglog () {
  zless "/usr/share/doc/$1/changelog.Debian.gz"
}
Janne Pikkarainen
źródło
Jak wspominał PO, debchangejest tak naprawdę istniejącym narzędziem w skryptach devcript używanych do tworzenia wpisów w dzienniku zmian. Dlatego zdecydowanie zalecam wybranie innej nazwy. Ponadto, $0prawdopodobnie nie będzie robić to, czego się spodziewałem. W moim przypadku zawsze będzie wykonywana zless /usr/share/doc/bash/changelog.Debian.gz. W twoim przypadku zastąp bashnazwę powłoki lub skryptu, z którego ją wykonujesz.
Sześć
3

Aby przedłużyć o Janne Pikkarainen za odpowiedź , tutaj jest aliasem, które mogą być stosowane w celu zapoznania się z changelog.Debian.gz dla danego pakietu:

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

Można go używać w następujący sposób:

changelog PACKAGE

Pamiętaj jednak, że jest to strasznie hackerskie rozwiązanie i w większości przypadków nie jest zalecane. Skrypt funkcyjny lub samodzielny jest znacznie lepszym rozwiązaniem.

Oto funkcja, która odczytuje wszystkie dostępne dzienniki zmian dla PAKIETU:

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
}

Oto funkcja, która drukuje listę wszystkich dostępnych dzienników zmian dla PAKIETU i wysyła zapytanie do użytkownika, który z nich ma przeczytać:

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
}
Sześć
źródło