Различают разные версии одного и того же пакета Debian
Есть ли способ получить разностные исходники между локально установленным пакетом и его обновленным? Это будет полезно, чтобы проверить, какие именно детали были исправлены, изменены или добавлены.
Например, допустим, что в вашей системе установлен пакет linux-libc-dev и
sudo apt-get update && sudo apt-get upgrade
шоу
The following packages will be upgraded:
linux-libc-dev
но перед обновлением вы хотите проверить, какие именно изменения были внесены по сравнению с вашей локальной версией того же пакета.
Как мы можем это сделать?
5 ответов
Вот еще одно решение, которое я взломал вместе: что изменилось.
Он принимает имя интересующего вас двоичного пакета в качестве единственного аргумента. Чтобы использовать недавний SRU в качестве примера:
./whatchanged python_papyon
Вот что он делает:
- Проверьте, есть ли кандидат на обновление; выход, если нет
- Если кандидат существует, создайте временные каталоги и извлеките в них исходные пакеты как для установленной версии, так и для кандидата.
- Сравните два с
debdiff
и вывод в stdout (вы, вероятно, захотите перенаправить для более удобного чтения) - Очистите временные каталоги.
Вероятно, он должен лучше обрабатывать некоторые вещи, которые могут работать неправильно при извлечении исходного кода, управление потоком, вероятно, немного отключено, и должны быть более элегантные способы проверки версий, но до сих пор это работало нормально в моем ограниченном тестировании. А пока, сочтите это быстрым взломом, который работает, и улучшения приветствуются. Я перенесу его в репозиторий bzr и / или создаю проект Launchpad, если он будет полезен нескольким людям.
Изменить: Вместо того, чтобы гнить на pastebin, я начал проект Launchpad для него; Вы можете получить последнюю версию ствола с bzr branch lp:whatchanged
, Не стесняйтесь сообщать об ошибках, разветвлять их, переписывать на Perl и т. Д.
Afaik единственный способ сделать это, чтобы получить исходный код и сделать дифференциал для себя. Вы можете получить фактический исходный код, использованный для компиляции пакетов, с помощью apt-get. FX:
apt-get source gwibber=2.30.2-0ubuntu3 gwibber=2.30.0.1-0ubuntu1
diff -rupN gwibber-2.30.0.1/ gwibber-2.30.2/
Это распечатает все различия между всеми файлами в стандартном формате патча.
Вот один (возможно, не оптимальный) способ сделать это:
Извлеките ветку -updates для вашего выпуска (при условии, что Lucid), что (допущение следует) должно содержать последний SRU:
bzr branch lp:ubuntu/lucid-updates/package_name
Получите изменения, внесенные последней версией, которая (допущение следует) должна соответствовать последней SRU:
bzr diff -c`bzr revno`
Если вы хотите увидеть различия файлов в архивах пакетов, извлеките их файлы md5sums, отсортируйте и разнесите их, а затем вы можете сузить список реальных файлов для существенного сравнения.
Не может быть "точных" изменений, но apt-listchanges
перечисляет записи в журнале изменений, которые были сделаны после установки версии.
Он работает путем добавления шага после завершения загрузки новых пакетов, но перед началом установки, где он показывает запись в журнале изменений для каждого пакета, который должен быть обновлен. Затем вы можете продолжить или отменить. Вы можете установить его с
sudo apt-get install apt-listchanges
затем установите его с
sudo dpkg-reconfigure apt-listchanges