Различают разные версии одного и того же пакета Debian

11

Есть ли способ получить разностные исходники между локально установленным пакетом и его обновленным? Это будет полезно, чтобы проверить, какие именно детали были исправлены, изменены или добавлены.

Например, допустим, что в вашей системе установлен пакет 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

Вот что он делает:

  1. Проверьте, есть ли кандидат на обновление; выход, если нет
  2. Если кандидат существует, создайте временные каталоги и загрузите в них исходные пакеты как для установленной версии, так и для кандидата.
  3. Сравните два с debdiffи вывод на стандартный вывод (вы, вероятно, захотите перенаправить для удобства чтения)
  4. Очистите временные каталоги.

Вероятно, он должен лучше обрабатывать определенные вещи, которые могут работать неправильно при извлечении исходного кода, управление потоком, вероятно, немного отключено, и должны быть более элегантные способы проверки версий, но до сих пор это работало нормально в моем ограниченном тестировании. А пока, сочтите это быстрым взломом, который работает, и улучшения приветствуются. Я отправлю его в репозиторий bzr и / или создаю проект Launchpad, если он будет полезен нескольким людям.

Изменить : Вместо того, чтобы гнить на pastebin, я начал проект Launchpad для него; Вы можете получить последнюю версию ствола с bzr branch lp:whatchanged. Не стесняйтесь сообщать об ошибках, распространять их, переписывать на Perl и т. Д.

mgunes
источник
Как мило! Разработка инструментов как ответов;) Как и вы, стиль кодирования, но правильно бы закодировал его в perl ..
LassePoulsen
Спасибо; надеюсь, что это полезно. То, как технологии упаковки и выпуска иногда делают открытый код непрозрачным, - это то, о чем я думал, и я не нашел каких-либо простых инструментов, чтобы преодолеть это, поэтому кто-то, выразивший потребность в точно такой же вещи, был хорошей мотивацией, чтобы наконец сделать примитив сам.
mgunes
7

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/

Это распечатает все различия между всеми файлами в стандартном формате патча.

LassePoulsen
источник
1
Это довольно хорошо. Единственное, что я хотел бы изменить в этом примере, это использовать «debdiff gwibber_2.30.0.1-0ubuntu1.dsc gwibber_2.30.2-0ubuntu3.dsc», а не raw diff.
РАОФ
1
Ну, это делает практически то же самое, но вы можете использовать diff на каждом пакете / tarball. Может быть, кто-то хочет увидеть разницу между svn-trunk и текущим pkg.
LassePoulsen
Мой второй ответ (что изменилось) по сути автоматизирует это.
mgunes
2

Вот один (возможно , не является оптимальным) УДД способ сделать это:

Извлеките ветку -updates для вашего выпуска (при условии, что Lucid), что (допущение следует) должно содержать последний SRU:

bzr branch lp:ubuntu/lucid-updates/package_name

Получите изменения, внесенные последней версией, которая (допущение следует) должна соответствовать последней SRU:

bzr diff -c`bzr revno`
mgunes
источник
2
Хм. Это интересный способ, хотя он, вероятно, менее всеобъемлющий, чем в Source Lab, в том смысле, что имена пакетов могут не совпадать или не существовать в дереве исходных текстов bzr.
Гедель
Если вы знаете имя исходного пакета, оно будет совпадать. Вы можете найти исходный пакет, с помощью которого создается двоичный пакет apt-cache show package_name | grep Source:.
mgunes
@Murat Итак, <package_name>полученные данные не работают с некоторыми пакетами: bzr branch lp:ubuntu/lucid-updates/$(apt-cache show linux-libc-dev | grep -m 1 Source: | awk "{print \$2}")=> bzr: ОШИБКА: неверный URL-адрес, предоставленный для транспорта: "bzr + ssh: //bazaar.launchpad.net/+branch/ubuntu/lucid-updates/linux" : нет поддерживаемых схем
Gödel
Поэтому я боюсь, что ветки Ubuntu для ядра вообще отсутствуют. Это может быть конкретным исключением из-за того, что ядро ​​поддерживается в git (kernel.ubuntu.com), но я не уверен в точной области действия веток пакета bzr в настоящее время. Вы можете спросить об # ubuntu-devel.
mgunes
@ Фреска я знаю. Вот почему метод менее всеобъемлющий, чем в Source Lab. Но опять же, это интересный результат.
Гёдель
0

Если вы хотите увидеть различия файлов в архивах пакетов, извлеките их файлы md5sums, отсортируйте и разнесите их, а затем вы можете сузить список реальных файлов для существенного сравнения.

Фил Миллер
источник
-1

Может не быть «точными» изменениями, но apt-listchangesперечисляет записи в журнале изменений для изменений, которые были сделаны с установленной версии.

Он работает путем добавления шага после завершения загрузки новых пакетов, но перед началом установки, где он показывает запись в журнале изменений для каждого пакета, который должен быть обновлен. Затем вы можете продолжить или отменить. Вы можете установить его с

sudo apt-get install apt-listchanges

затем установите его с

sudo dpkg-reconfigure apt-listchanges
Кен Саймон
источник
Опять же, вопрос не в том, чтобы показать изменения ChangeLog.
Гёдель
Да, пропустил первую строчку, где вы сказали "исходные различия".
Кен Саймон