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

19

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

Рори
источник
5
чтобы увидеть изменения для apt-getустановленных пакетов:apt-get changelog <package>
jfs
У @JFSebastian apt-getтакой команды нет.
Гипи
2
@gipi: apt-get changelog apt | grep -C5 'apt-get changelog'показывает, что эта команда введена в apt (0.8.9ubuntu1) natty(2010). Вы можете получить исходный код (в конце концов, он с открытым исходным кодом): запустите apt-get source aptи найдите cmdline/apt-get.ccфайл и посмотрите на DoChangelog()функцию (кстати, посмотрите на DoMoo()функцию).
JFS
странно, у меня есть (debian) apt 0.9.12.1, и эта команда недоступна.
Gipi

Ответы:

22

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

apt-get changelog libssl1.0.0
PhoneixS
источник
Это определенно актуальный ответ на 2016 год в Debian Jessie и Ubuntu :)
Дмитрий Д.Б.
Это правильный ответ.
Текин
12

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

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

function debchanglog () {
  zless "/usr/share/doc/$1/changelog.Debian.gz"
}
Янне Пиккарайнен
источник
Как упоминалось в OP, debchangeна самом деле это существующий инструмент в devscripts, используемый для создания записей журнала изменений. Поэтому я настоятельно рекомендую выбрать другое имя. Кроме того, $0вероятно, не будет делать то, что вы ожидаете. В моем случае это всегда будет выполняться zless /usr/share/doc/bash/changelog.Debian.gz. В вашем случае замените bashимя оболочки или сценария, из которого вы выполняете его.
Шесть
3

Чтобы расширить ответ Янне Пиккарайнен , вот псевдоним, который можно использовать для чтения 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
}
Шесть
источник