Як створити пакет Debian / Ubuntu з джерела?


116

У мене є джерело програми (взято з cvs / svn / git / ...), і я хотів би створити для неї пакет Debian / Ubuntu. Пакет присутній у сховищах, але:

  • Це більш стара версія (відсутні функції, які мені потрібні)
  • Мені потрібні дещо інші варіанти компіляції, ніж за замовчуванням.

Який найпростіший спосіб зробити це? Мене турбує пара речей

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

Відповіді:


78

ви можете використовувати спеціальний пакет "checkinstall" для всіх пакунків, яких ще немає в debian / ubuntu.

Ви можете використовувати "uupdate" ( apt-get install devscripts) для створення пакету з джерела з існуючими джерелами debian:

Приклад для libdrm2:

apt-get build-dep libdrm2
apt-get source libdrm2
cd libdrm-2.3.1
uupdate ~/Downloads/libdrm-2.4.1.tar.gz
cd ../libdrm-2.4.1
dpkg-buildpackage -us -uc -nc

Дякую! Я тільки що використовував це для порту Subversion 1.6.6 до установки Ubuntu, яка має останню версію 1.6.5, і вона працювала бездоганно. Врятувало мене досить кілька годин майстерності! :)
Карлос Вілле

Не могли б ви дати трохи більше контексту навколо цих команд? Де libdrm-2.3.1саме? Також звідки libdrm-2.4.1.tar.gzвзялося (моє первинне припущення - це складений двійковий файл програми, який ми хочемо упакувати в дебют, але замінивши існуючу версію, це правильно?)
Уілер

Якщо ви отримаєте помилку You must put some 'source' URIs in your sources.list, коментуйте рядки deb-src у своєму/etc/apt/sources.list
Крістіан

27

По-перше, заголовок питання: якщо припустити, що каталог debian вже є, перейдіть у вихідний каталог (каталог, що містить каталог debian) та виклик dpkg-buildpackage. Мені подобається запускати його з такими параметрами:

dpkg-buildpackage -us -uc -nc

що означає не підписувати результат і не чистити.

Як я можу перевірити, чи правильно я перерахував усі залежності?

Отримати залежності - це чорне мистецтво. "Офіційний" спосіб перевірки залежності збірки полягає в тому, якщо пакет будується лише з базовою системою, з пакетами "необхідний для складання" та залежностями побудови, які ви вказали. Не знаю загальної відповіді на регулярні залежності, просто прошивайся :)

Як я можу запобігти встановленню системи оновлення старішої версії в репо на оновлення? Як я можу запобігти встановленню нової версії системи (коли її немає), замінивши мій спеціальний пакет?

Мої знання можуть бути застарілими в цьому, але для вирішення обох питань: Використовуйте dpkg --set-select. Якщо припустити, що nullidentd - це той пакет, який ви хотіли залишитися, запустіть як root

echo 'nullidentd hold' | dpkg --set-selections

Крім того, оскільки ви будуєте з джерела, ви можете використовувати епоху, щоб встановити номер версії на штучному рівні і ніколи більше не турбуватися. Щоб використовувати епоху, додайте новий запис у файл debian / changelog та поставте 99: перед номером версії. З огляду на мій недійсний приклад, перший рядок оновленого журналу змін буде таким:

nullidentd (99:1.0-4) unstable; urgency=low

Посилання Бернарда добре, особливо якщо вам доведеться самостійно створювати каталог debian - також корисні посилання розробників та загальна сторінка ресурсів . Посилання Адама також виглядає добре, але я з ним не знайомий.


1
"dpkg --set-selection" все ще працює, але кращим методом в наші дні було б "придатність утримувати нульовий".
Марк Бейкер

6

Для того, що ви хочете зробити, ви, ймовірно, хочете використовувати джерело debian diff, тому ваш пакет схожий на офіційний, крім використовуваної версії для потоку. Ви можете завантажити джерело відмінності від пакети.debian.org або отримати його разом з .dsc та оригінальним архівом джерела, використовуючи "apt-get source".

Потім ви розпакуйте свою нову версію вихідного джерела, перейдіть до цього каталогу та застосуйте різницю, яку ви завантажили

zcat ~/downloaded.diff.gz | patch -p1
chmod +x debian/rules

Потім внесіть зміни, які хотіли скласти параметри, і складіть пакет, виконавши

dpkg-buildpackage -rfakeroot -us -uc


3
  • помістіть каталог "debian" з оригінального пакета у ваш вихідний каталог
  • використовувати « дч " для оновлення версії пакета
  • використовуйте "debuild" для складання пакету

2

Я вважаю, що це «біблія» пакета Debian.

Ну, це новий посібник з технічного обслуговування Debian, тому багато його не застосовується, але вони висвітлюють те, що йде куди.



1

Ось підручник зі створення пакету Debian.

В основному, вам потрібно:

  1. Налаштування структури папки
  2. Створіть контрольний файл
  3. Необов'язково створювати postinst або prerm скрипти
  4. Виконати dpkg-deb

Зазвичай я все це роблю в своєму Makefile, щоб я міг просто набрати make, щоб виплюнути бінарне і упакувати його за один раз.


1

Як я можу перевірити, чи правильно я перерахував усі залежності?

Це pbuilderвідмінний інструмент для перевірки як побудови залежностей, так і залежностей шляхом встановлення чистої базової системи в середовищі chroot. Складаючи пакет в pbuilder, ви можете легко перевірити залежності побудови, а тестуючи його в середовищі pbuilder, ви можете перевірити залежності.


1

Якщо ви хочете, щоб швидкий і брудний спосіб встановити залежності побудови, використовуйте:

apt-get build-dep

Це встановлює залежності. Для цього вам потрібні рядки джерел у своєму source.list:

deb-src http://ftp.nl.debian.org/debian/ squeeze-updates main contrib non-free

Якщо ви підтримуєте пакети від тестування до стабільних, повідомляйте, що залежності можуть змінитися. Команда apt-get build-deb встановлює залежності для вихідних пакетів у вашому поточному сховищі.

Але звичайно, dpkg-buildpackage -us -uc покаже вам будь-які невстановлені залежності.

Якщо ви хочете збирати частіше, використовуйте ковбур.

apt-get install cowbuilder

Потім створіть область збирання:

sudo DIST = стиснути ARCH = amd64 ковбуд - створити

Потім складіть вихідний пакет:

apt-get source cowsay

# do your magic editing
dpkg-source -b cowsay-3.03+dfsg1              # build the new source packages
cowbuilder --build cowsay_3.03+dfsg1-2.dsc    # build the packages from source

Слідкуйте за тим, куди корівник кладе отриманий пакет.

Удачі!

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