Назад | Перейти на главную страницу

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

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

В качестве альтернативы, если 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"
}

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