Відмінні різні версії одного пакета 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і виведіть на stdout (можливо, ви хочете перенаправити для легшого читання)
  4. Очистіть тимчасові каталоги.

Ймовірно, потрібно краще впоратися з певними речами, які можуть піти не так під час пошуку джерела, контроль потоку, мабуть, трохи відключений, і для перевірки версій повинні бути більш елегантні способи, але в моєму обмеженому тестуванні до цього часу він працював чудово. Наразі вважайте, що швидкий злом працює, а покращення найкраще вітаються. Я пересуну його до сховища bzr та / або створять проект Launchpad, якщо він корисний для кількох людей.

Редагувати : замість того, щоб дозволити гнити на пастбіні, я розпочав проект Launchpad для цього; ви можете отримати останню редакцію ствола bzr branch lp:whatchanged. Не соромтеся повідомляти про помилки, розгалужувати їх, переписувати на Perl тощо.


Як добре! Інструменти для розробки як відповіді;) Вам подобається стиль кодування, але правильно було б
зашифрувати

Дякую; сподіваюся, що це буде корисно. Те, що техніку упаковки та випуску іноді роблять відкритим кодом, здається, непрозорим - це те, що мені було на думці, і я не знайшов простих інструментів, щоб подолати це, тому хтось, що висловив потребу в точно такій самій справі, був гарною мотивацією нарешті зробити собі примітивне.
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/

Це дозволить роздрукувати всі відмінності між усіма файлами у стандартному форматі патча.


1
Це досить добре. Єдине, що я зміню у прикладі, - це використовувати “debdiff gwibber_2.30.0.1-0ubuntu1.dsc gwibber_2.30.2-0ubuntu3.dsc”, а не необроблений diff.
RAOF

1
Ну, це робить практично те ж саме, але ви можете використовувати різні для кожного пакету / тарболу там. Можливо, хтось хоче побачити різницю між svn-магістраллю та поточним pkg.
LassePoulsen

Моя друга відповідь (що змінилося) по суті це автоматизує.
mgunes

2

Ось один (мабуть, не оптимальний) спосіб UDD :

Витягніть гілку оновлення для вашого випуску (якщо вважати Lucid), що (припущення випливає) має містити останню SRU:

bzr branch lp:ubuntu/lucid-updates/package_name

Отримати зміни, внесені останньою редакцією, яка (припущення випливає) має відповідати останній SRU:

bzr diff -c`bzr revno`

2
Хм. Це цікавий результат, хоча він, ймовірно, менш вичерпний, ніж Source Lab, в тому сенсі, що назви пакетів можуть не збігатися або існувати у дереві джерела bzr.
Gödel

Поки ви знаєте ім'я вихідного пакета, воно буде відповідати. Ви можете знайти, з якого вихідного пакету виробляється двійковий пакет 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

@Mural Я знаю. Ось чому метод менш комплексний, ніж джерело лабораторії. Але знову ж таки, це цікаве заняття.
Gödel

0

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


-1

Можливо, не буде "точних" змін, але apt-listchangesперераховані записи змін у змінах, які були внесені після встановленої версії.

Це працює, додавши крок після того, як ви закінчите завантаження нових пакетів, але перед початком інсталяції, де він показує запис змін у кожному пакеті, який планується оновити. Потім ви можете продовжити або скасувати. Ви можете встановити його за допомогою

sudo apt-get install apt-listchanges

потім налаштуйте його за допомогою

sudo dpkg-reconfigure apt-listchanges

Знову ж таки, питання не про показ змін ChangeLog.
Gödel

До, пропустив перший рядок, де ти сказав, що "джерело відрізняється".
Кен Саймон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.