LINUX.ORG.RU

Собрать deb через pbuilder

 ,


0

1

Стоит задача собрать пакет именно через pbuilder и мне кажется, что я схожу с ума. Очень надеюсь на подсказку.

Для начала надо заметить, что я собирал все руками без pbuilder-а и это было просто. Почитал доки как выглядит .deb пакет и вперед (собирается PostgreSQL extension pgvector):

  1. mkdir -p ./my-pgvector-0.8.0/DEBIAN

  2. touch ./my-pgvector-0.8.0/DEBIAN/control, заполняем файл нужной писаниной.

  3. Компилируем extension и устанавливаем файлы в созданную папку: make install DESTDIR=./my-pgvector-0.8.0/

  4. Собираем все командой dpkg-deb --build --root-owner-group ./my-pgvector-0.8.0/, на выходе получаем нормальный .deb файл.

Готово!

Но, стоит требование собрать именно через pbuilder. Вот ну очень надо именно через pbuilder – архитектуры и разные там сопряженные с этим сложности не волнуют, давайте просто скажем что amd64, последняя версия дебиана и все – на данный момент нужна одна версия пакета. И у меня уже несколько дней не выходит. Я курил весь вот это мануал целиком https://www.debian.org/doc/manuals/maint-guide/start.en.html, но все равно не получается.

На данный момент у меня собран chroot образ для pbuilder-а и я пытаюсь запустить сборку командой pdebuild, но на выходе получается 2-ух килобайтовый файл .deb и какие-то перепакованные .tar.gz в которых лежит не только сам pgvector, а вообще все что лежит в директории выше.

Просуммирую: я не понимаю вообще логику этого безумного поделия и если кто-то может подсказать как выполнить те же самые шаги, что позволили мне собрать пакет руками, но сделать это через pbuilder – то вы поможете мне не поехать кукухой.



Последнее исправление: qount_25 (всего исправлений: 1)
  1. Распаковываешь исходники программы в my-pgvector-0.8.0
  2. В этой директории запускаешь dh_make
  3. Переходишь в созданную на предыдущем шаге директорию debian и правишь файлы (control, changelog, copyright). Если при установке нужно что-то помимо простого выполнения make install, то ещё правишь файл rules
  4. Собираешь пакет и исходниками командой dpkg-buildpackage --build=source
  5. Создаешь образ pbuilder: sudo pbuilder create --distribution=bookworm --components "main contrib-non-free"
  6. Собираешь пакет pbuilder build my-pgvector_0.8.0-1.dsc
  7. Если не хватает каких-то зависимостей, возвращаешься на 3-й шаг и правишь control

https://www.debian.org/doc/manuals/maint-guide/first.ru.html#dh-make

anonymous
()
Ответ на: комментарий от anonymous

Сразу же возникает проблема на шаге (4). По какой-то причине, вызов команды dpkg-buildpackage --build=source создает следующие файлы, но создает их в диркетории на один уровень выше текущей:

my-pgvector-0.8.0_0-1
my-pgvector-0.8.0_0-1.tar.gz
my-pgvector-0.8.0_0-1_source.buildinfo
my-pgvector-0.8.0_0-1_source.changes

Что самое удивительное, когда я смотрю в архив my-pgvector-0.8.0_0-1.tar.gz, то он содержит файлы и папки, которые также находятся в этой диркетории. К примеру, у меня там лежали исходники timescaledb для того же постгреса – так вот эта папка оказывается в этом архиве.

Почему это происходит? И что с этим делать?

qount_25
() автор топика
Последнее исправление: qount_25 (всего исправлений: 1)
Ответ на: комментарий от qount_25

Но, должен заметить, оно работает! То есть дальше команды выполняются успешно и в результате на выходе у меня правильный .deb файл. Просто непонятно, почему создаются все эти безумные файлы и архивы с ненужным контентом.

qount_25
() автор топика
Последнее исправление: qount_25 (всего исправлений: 1)
Ответ на: комментарий от qount_25

pbuilder собирает бинарный пакет из пакета с исходниками в дебиановском формате. Сам source-пакет состоит из 3-файлов: source_1.0.0.orig.tar.gz - архив директории source-1.0.0 без поддиректории debian, source_1.0.0-1.debian.tar.gz - архив source-1.0.0/debian, source_1.0.0-1.dsc - файл с описанием вышеуказанных архивов, зависимостей и т.п.

файл source_1.0.0-1.debian.tar.gz может отсутствовать, если автор исходников уже озаботился сборкой под debian и производные.

Соответственно, сначала нужно собрать пакет с исходниками в нужном формате. Файлы buildinfo и changes создаются при создании source-пакета. Так же директория с исходниками упакуется в архив. Если в ней были какие-нибудь файлы, добавленные туда ручками, то они тоже попадут в архив. Скорее всего, имел место этот случай.

При сборке бинарного пакета распаковываются эти архивы и в директории с исходниками запускается скрипт debian/rules. Получившиеся бинарники упаковываются в deb-пакет.

Вроде, как-то так это должно работать.

anonymous
()