Вопрос или проблема
Есть ли способ использовать dpkg для просмотра изменений между разными версиями пакета?
Если я хочу узнать, например, почему ‘passwd’ обновляется в недавнем обновлении, есть ли способ с помощью dpkg увидеть, что изменилось?
$ dpkg -l passwd
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-==============-============-============-=================================
ii passwd 1:4.2-3.1 amd64 change and administer password an
Она обновляется до 1:4.2-3.3…
Я знаю, что в Debian я могу посмотреть заметки к пакету и оттуда перейти к указанному журналу изменений Debian.
Но это не применяется ко всем базированным на deb дистрибутивам, и это неудобно для быстрого просмотра, что нового.
dpkg не предоставляет возможность читать журнал изменений пакета. Вам нужно извлечь пакет и прочитать журнал изменений.
dpkg -X <package.deb> <folder>
Тогда вы можете прочитать журнал изменений, используя утилиту dpkg-parsechangelog.
dpkg-parsechangelog -l <folder>/usr/share/doc/<package>/changelog.Debian.gz
Поскольку это неудобно, если ваш дистрибутив использует apt-get, вы можете использовать
apt-get changelog <packagename>
или
apt changelog <packagename>
Если пакет установлен, просто перейдите в /usr/share/doc/<package_name>/
, и там вы найдете исходный ChangeLog
и журнал изменений Debian (пакета).
Возможно, файлы сжаты, в этом случае вы можете использовать zless
для их просмотра.
Если я хочу узнать, например, почему ‘passwd’ обновляется в недавнем обновлении, есть ли способ с помощью dpkg увидеть, что изменилось?
apt-listchanges решает эту конкретную задачу. Вы можете просматривать записи журнала изменений, соответствующие обновлению.
Если вы хотите посмотреть журналы изменений для пакетов, которые не установлены, скорее всего, самое простое решение — посмотреть их в сети. Например, перейти на https://packages.qa.debian.org, выбрать нужный исходный пакет (скажем, dpkg), и вы увидите журнал изменений справа под ‘ссылки’. В этом случае вы окажетесь на http://metadata.ftp-master.debian.org/changelogs/main/d/dpkg/unstable_changelog.
Этот сайт, конечно, можно использовать только для Debian.
Привет, я знаю, что это очень старое, но я попал сюда, и вопрос очень интересен для тех, кто изучает Linux. Поэтому, пожалуйста, простите меня.
ДОСТУПНЫЕ КОМАНДЫ
Если пакет установлен, у вас есть несколько способов прочитать без извлечения:
1. zless: если вы наберете man zless, вы прочтете:
zless – фильтр для просмотра сжатого текста на экране.
2. zcat: из man zcat:
zcat идентичен gunzip -c. (На некоторых системах zcat может быть
установлен как gzcat для сохранения оригинальной ссылки на compress.) zcat
распаковывает либо список файлов на командной строке, либо свой
стандартный вход и записывает распакованные данные на стандартный выход.
zcat распаковывает файлы, которые имеют правильный магический номер,
независимо от того, имеют ли они суффикс .gz или нет.
3. gunzip -c <path/file> | less: из zcat выше мы узнали, что zcat это просто алиас для “gunzip -c”. Так что вы можете использовать gunzip с “less”.
ПОИСК
Найдите ваш журнал изменений. Его название традиционно:
- changelog.gz (сама программа)
- changelog.Debian.gz (исправление проблем пакета)
- NEWS.gz (то же, что и changelog.gz)
- NEWS.Debian.gz (то же, что и changelog.Debian.gz)
Журналы изменений всегда устанавливаются в /usr/share/doc
, поэтому вы можете перечислить эту папку, чтобы обнаружить название журнала изменений. Давайте использовать пакет passwd
в качестве примера.
$ ls -l /usr/share/doc/passwd
total 24
-rw-r--r-- 1 root root 2279 nov 24 09:05 changelog.Debian.gz
-rw-r--r-- 1 root root 5153 nov 11 2021 copyright
drwxr-xr-x 1 root root 36 dez 17 12:13 examples
-rw-r--r-- 1 root root 801 nov 11 2021 NEWS.Debian.gz
-rw-r--r-- 1 root root 2075 nov 11 2021 README.Debian
-rw-r--r-- 1 root root 1020 nov 11 2021 TODO.Debian
Теперь прочтите один за другим (zcat или zless):
$ zcat /usr/share/doc/passwd/changelog.Debian.gz
$ zcat /usr/share/doc/passwd/NEWS.Debian.gz
Альтернативно, если вы не знаете, что журналы изменений находятся в /usr/share/doc, выполните поиск, перечислите и, наконец, читайте:
$ find / -type d -name passwd 2>/dev/null
/usr/share/doc/passwd
Команда 2>/dev/null
используется для избегания всех тех раздражающих сообщений Permission denied
.
Ответ или решение
Просмотр изменений между версиями пакетов может быть важной задачей для системных администраторов и пользователей, особенно если необходимо понять, почему конкретный пакет был обновлён. Пакетный менеджер dpkg
, хотя и мощный инструмент для управления пакетами в системах на базе Debian, не предоставляет прямой возможности для просмотра журналов изменений (changelog) пакетов. Однако существуют методы, позволяющие это сделать посредством командной строки и дополнительных утилит.
Теория
dpkg
— это основной инструмент для управления пакетами в дистрибутивах на основе Debian. Он позволяет устанавливать, удалять, упаковывать и распаковывать пакеты ".deb". Однако его функциональность ограничена в плане анализа изменений между версиями пакетов. По умолчанию dpkg
не предоставляет прямых команд для просмотра changelog пакетов. Отсюда возникает потребность в альтернативных способах достижения этой цели.
Пример
Для демонстрации того, как извлечь changelog, рассмотрим пакет passwd
, который является стандартным инструментом для управления паролями пользователей в Unix-подобных системах.
Шаги для извлечения changelog с помощью dpkg
:
-
Извлечение содержимого пакета:
Сначала необходимо извлечь содержимое пакета с помощью команды
dpkg -X
. Это действие создаст локальную копию файлов пакета в указанной директории.dpkg -X <пакет.deb> <директория>
Пример:
dpkg -X passwd_1:4.2-3.1_amd64.deb ./passwd_extracted
-
Просмотр changelog:
После извлечения пакета можно использовать утилиту
dpkg-parsechangelog
для просмотра журнала изменений:dpkg-parsechangelog -l ./passwd_extracted/usr/share/doc/passwd/changelog.Debian.gz
Это позволит прочитать changelog из локального извлеченного содержимого.
Применение
Если пакет уже установлен в системе, проще всего перейти в директорию /usr/share/doc/<имя_пакета>/
и использовать такие команды, как zless
или zcat
для просмотра архивированных changelog-файлов, так как они обычно хранятся в сжатом виде (.gz).
Пример для уже установленного пакета passwd
:
zless /usr/share/doc/passwd/changelog.Debian.gz
Альтернативный способ просмотра в случае, если в системе установлен пакетный менеджер APT, — это использование команды apt changelog
, которая автоматически извлечет и покажет текущий changelog пакета:
apt changelog passwd
Использование apt-listchanges
Для более удобного просмотра изменений при обновлении пакетов можно использовать утилиту apt-listchanges
. Эта утилита предназначена для отображения журнала изменений при обновлении пакетов через APT, что особенно удобно для системных администраторов. Она может быть настроена для автоматического показа изменений каждый раз, когда пакет обновляется:
apt-listchanges --which=changelogs /var/cache/apt/archives/passwd_1:4.2-3.3_amd64.deb
Рекомендации
В случае, если информация о пакете нужна, но он не установлен, или если необходимо получить информацию о предполагаемом обновлении, всегда можно обратиться к онлайн-источникам. Например, в репозиториях Debian возможно найти необходимую информацию по адресу https://packages.debian.org/
. Здесь нужно ввести название пакета, и можно будет получить доступ к его журналам изменений и другим данным.
В заключение, несмотря на отсутствие встроенной поддержки просмотра changelog в dpkg
, комбинирование различных инструментов и утилит позволяет получить полную картину изменений в пакетах. Это особенно важно для планирования обновлений и устранения потенциальных проблем в работе системы.