Как посмотреть журнал изменений для пакета deb из Debian/ Ubuntu?

Я использую Ubuntu и у меня установлен файл deb. Я уже делал пакеты deb, поэтому я знаю, что есть журнал изменений debian (debchange). Есть ли какой-нибудь список изменений в Debian для любого пакета, который я установил? Предположим, у меня нет доступа к исходному файлу deb для этого пакета, и у меня нет доступного файла deb. Я могу установить дополнительные пакеты, если это необходимо.

4 ответа

В качестве альтернативы, если deb также находится в репозитории, и вы хотите знать журнал изменений более старых версий, вы можете использовать apt-get changelog package прочитать весь список изменений. Например, для openssl:

apt-get changelog libssl1.0.0

apt-listchanges это хороший пакет, который есть, но без того, чтобы иметь файл deb вокруг вашей лучшей ставки, скорее всего, это прочитать журнал изменений Debian из /usr/share/doc/somepackage/changelog.Debian.gz.

Создайте функцию оболочки с:

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

Чтобы расширить ответ Янне Пиккарайнен, вот псевдоним, который можно использовать для чтения changelog.Debian.gz для любого данного пакета:

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

Это можно использовать так:

changelog 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
}

Вот функция, которая печатает список всех доступных журналов изменений для ПАКЕТА и запрашивает у пользователя, какой из них прочитать:

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
}

В Ubuntu 18.04+ современная версияможет это сделать (в отличие от):

      ubuntu18-04:~% apt changelog nginx
nginx (1.14.0-0ubuntu1.9) bionic-security; urgency=medium

  * SECURITY UPDATE: DNS Resolver issues
    - debian/patches/CVE-2021-23017-1.patch: fixed off-by-one write in
      src/core/ngx_resolver.c.
    - debian/patches/CVE-2021-23017-2.patch: fixed off-by-one read in
      src/core/ngx_resolver.c.
    - CVE-2021-23017
...
Другие вопросы по тегам