LINUX.ORG.RU

Как правильно собирать бинарные пакеты?

 , , ,


0

3

Поясните, как работают debuild и makepkg/PKGBUILD. Постоянно ими пользуюсь, но некоторые аспекты мне до сих пор не ясны.
Общая схема мне понятна: в изолированном окружении запускается сборка, потом установка в префикс, потом упаковка в архив.
Но как это изолированное окружение выглядит? Ведь в это изолированное окружение нужно доустановить все зависимости. А ещё в этом изолированном окружении должен быть компилятор и куча утилит? Не, это уже перебор. Так как же это работает?
Давайте по шагам рассмотрим пример создания пакета для GNU Hello:

  1. Скачиваем исходный код и распаковываем его (тут всё ясно)
  2. Подготавливаем наше изолированное окружение и запускаем в нём скрипт configure (как именно должно выглядеть это изолированное окружение? это chroot? что именно должно быть в этом окружении? только зависимости данного пакета (libc, libintl, libiconv в данном случае)? баш, мейк и компилятор тоже должны там быть или они как-то вызываются извне? полагаю, что на данном этапе устанавливать --prefix не нужно, так как он может быть куда-нибудь захардкожен, так что prefix тут должен быть таким же, как на целевой системе (--prefix=/ в общем случае), верно?)
  3. Запускаем в этом изоляторе компиляцию и ждём (тут тоже всё понятно, кроме того, откуда же в изолированном окружении компилятор)
  4. Устанавливаем наш пакет в определённый префикс и упаковываем его в архив, чтобы этот префикс для архива был корнем (непонятно, откуда этот префикс берётся — создаётся ли ещё одно пустое изолированное окружение или всё банальнее?)

Буду рад, если объясните мне просто и на пальцах.

★★★★★

Последнее исправление: CYB3R (всего исправлений: 1)

ну как изолированное... в package() в PKGBUILD'ах емнип можно сделать что угодно, что может сделать юзер, например удалить $HOME

f1u77y ★★★★
()

в изолированном окружении запускается сборка, потом установка в префикс, потом упаковка в архив.

https://wiki.archlinux.org/index.php/PKGBUILD
откуда инфа что в изолированном?
PKGBUILD это просто шел скрипт
даже когда запускаешь yaourt для создания пакета, он настоятельно рекомендует работать от простого пользователя, а еще предлагает проверять сами PKGBUILD'ы

kiotoze ★★★★
()

Я не мейнтейнер Debian, но твоё понимание debuild кажется неверным. Никакой особой изоляции там нет, используются системные утилиты. make install (или аналог) вызывается с параметров DESTDIR=<временная директория>, так что он копирует файлы не прямо в префикс, а в эту директорию.

proud_anon ★★★★★
()

Я частенько собираю пакеты в Дебиане. Вот, как это сделано для самого дистрибутива Дебиан: например, лог сборки allegro5. (Только что столкнулся с этим, т.к. необходим для сборки Принца Персии). Собрано на одном из их buildd серверов. Используется sbuild & schroot. По логу видно:

  • chroot;
  • загрузка информации о пакетах;
  • загрузка исходников пакета (исходный архив .orig.tar.?z, файл с описанием пакета -?.debian.tar.?z или -?.diff.gz, и файл с подписями .dsc);
  • загрузка и установка пакетов зависимостей для сборки;
  • распаковка архивов с исходниками пакета с очень подозрительным предупреждением:
    gpgv: keyblock resource `/sbuild-nonexistent/.gnupg/trustedkeys.gpg': file open error
    gpgv: Signature made Wed Jan 13 01:39:44 2016 UTC using RSA key ID 8ECECD2A
    gpgv: Can't check signature: public key not found
    dpkg-source: warning: failed to verify signature on ./allegro5_5.0.11-2.dsc
    
  • проверка свободного места (хм, как это у них получилось?);
  • dpkg-buildpackage
    • ... (clean, patch, configure, make, make test) ...
    • (make install)
      • fakeroot debian/rules binary-arch
      • make install DESTDIR=/«PKGBUILDDIR»/debian/tmp
    • (...)
    • упаковка файлов в deb пакеты.

    Итак, префикс виден (просто подкаталог), а для make install используется fakeroot, чтобы файлы спаковались как от рута.

    Для себя я не использую чистое окружение в chroot. Если у пакета неаккуратно проставлены configure --enable-feature & --disable-feature, то могут быть различия, не страшно.

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

Ясно. Похоже, всё гораздо проще. А я нафантазировал себе каких-то виртуальных изолированных окружений.

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

Ясно. Похоже, всё гораздо проще. А я нафантазировал себе каких-то виртуальных изолированных окружений.

Вполне вероятно, что к этому и придёт. На systemd+btrfs уже сейчас сборка пакета в чистом изолированном окружении проходит элементарно и с минимальным оверхедом по дисковому пространству.

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

Ну, вот я сейчас как раз этим и хочу заняться — сборка пакета в chroot, установка в другой chroot.

CYB3R ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.