LINUX.ORG.RU

Получить deb-пакет из исходников, чтобы все было по-взрослому

 , ,


2

2

Исходно проблема такая. Нужно в Ubuntu 22.04 поставить Slurm версии не менее 22.05. Предлагаемая в Ubuntu 22.04 версия Slurm меня не устраивает по причине отсутствия поддержки Cgroups v2, переключаться на v1 мне не хотелось бы. Смешивать пакеты из разных дистрибутивов, как я понимаю, не благословляется из-за конфликта зависимостей.

Возникла идея сделать свою сборку из исходников, но чтобы было все по-взрослому, прям как пакет из дистрибутива. Чтобы пакет учитывал особенности Ubuntu, были разные дополнительные вещи типа поддержки logrotate и другие тонкости о которых я даже не знаю. Для этого, видимо, нужны дополнительные файлы, которые делают Сопровождающие.

В Ubuntu 23.04 есть подходящая версия Slurm — 22.05.8. На сайте Ubuntu можно найти файлы: slurm-wlm_22.05.8-3.dsc, slurm-wlm_22.05.8.orig.tar.gz и slurm-wlm_22.05.8-3.debian.tar.xz. Это, я так понимаю, исходник и необходимые вспомогательные файлы. Теперь это надо как-то легким движение превратить в полноценный deb-пакет, но только для Ubuntu 22.04.

Это вообще реально? Как сделать? Какие могут быть проблемы?


Скачай source-пакет и скопируй метаинформацию в исходники новой версии искомого ПО.

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

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

apt_install_lrzsz ★★★
()

Реально. В папке со скачанными файлами делаешь:

dpkg-source -x slurm-wlm_22.05.8-3.dsc
cd slurm-wlm-22.05.8
dpkg-buildpackage -us -uc

Если сильно повезет, соберется сразу. Иначе изучай выхлоп, доставляй зависимости, правь debian/control и debian/rules. В особо удачных случаях придется сначала бэкпортировать зависимости.

Ну и в качестве легкого ненапряжного чтива.

undef ★★
()

скачай необходимый пакет

$ dpkg -x xxx.deb /tmp/program - распаковать пакет в папку

$ mkdir /tmp/program/DEBIAN - создать информационную директорию

$ dpkg -e xxx.deb /tmp/program/DEBIAN - распаковать информацию о пакете

отредактируй эту информацию как тебе удобно

$ dpkg -b /tmp/program xxx-new.deb - собрать пакет

amd_amd ★★★★★
()

Обычно сборку пакетов делают не в основной системе, а в каком-нибудь чруте (man schroot, man debootstrap), но это не обязательно.

  1. Скачиваешь пакет нужной версии
dget http://archive.ubuntu.com/ubuntu/pool/universe/s/slurm-wlm/slurm-wlm_22.05.8-3.dsc
  1. Устанавливаешь пакеты для сборки:
apt install build-essential
apt install devscripts
  1. Устанавливаешь сборочные зависимости для slurm-wlm (в /etc/apt/sources.list должна быть запись deb-src):
apt build-dep slurm-wlm
  1. Распаковываешь исходники:
dpkg-source -x slurm-wlm/slurm-wlm_22.05.8-3.dsc
  1. Заходишь в директорию с исходниками, собираешь:
cd slurm-wlm-22.05.8
dpkg-buildpackage -rfakeroot -us -uc -nc -b
  1. Если все удалось, то через некоторое время в директории выше появятся бинарные пакеты твоего slurm-wlm (их там какое-то огромное количество).
  2. Если на каком-нибудь этапе возникнут ошибки, с ними надо будет разбираться. Самая вероятная причина: в текущем твоем дистрибутиве не хватает сборочных зависимостей, тогда надо их бекпортить тоже.
TeopeTuK ★★★★
()
Ответ на: комментарий от undef

Не согласен с тобой. При бэкпортировании отличается либо состав зависимостей (может потребоваться собрать что-то ещё, помимо основного пакета), либо версии.

С версиями три пути:

  1. Version constraint не указан - легко отделался
  2. Version constraint указан, но ручное понижение версии в debian/control ничего не сломало
  3. Понижение версии не помогло - апи сломан.

В любом из этих сценариев установка зависимостей через build-dep сильно помогает. Особенно, когда зависимостей 100500

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

С версиями всё так, но мне интересен состав зависимостей. На каком этапе и для чего нужна? Можно ли без нее обойтись и избежать бэкпортирования чего-то еще?

На самом деле это все вкусовщина, кому как удобнее и привычнее. В конечном итоге, если уж хочется по-взрослому, то неплохо бы еще прошерстить rules, patches и провести чистовую сборку в чистом окружении.

undef ★★
()
Ответ на: комментарий от vasya_pupkin
  1. Чтобы не замусоривать основную систему пакетами для разработчика.
  2. На случай, если в основной системе установлены пакеты, которые мешают сборке по какой-либо причине.
  3. Чрутов может быть несколько для разных дистрибутивов, если нужно собрать не себе.
  4. Есть и специализированные окружения специально для сборки, например pbuilder, sbuild, они создают короткоживущие чруты с минимальным числом установленного софта, фактически только build-essential и build-dep для собираемого пакета.
TeopeTuK ★★★★
()
Ответ на: комментарий от undef

Ну и в качестве легкого ненапряжного чтива.

о, круто! А это можно рассматривать в качестве общей инструкции или сугубо дебианоспецифично? Ну тип основы почерпать, а потом для других дистров паковать по образу и подобию?

SpaceRanger ★★
()

Собралось по инструкциям выше. Сделал на чистой установке в VirtualBox. apt-get build-dep . делал заранее. В целом собранный slurm работает, но все функции не проверял.

Возникла сложность с пакетом librocm-smi-dev (одна из зависимостей slurm 22.05.8), который отсутствует в Ubuntu 22.04, но, к счастью, этот функционал мне не нужен и он легко вырезается из сборки.

Несколько вопросов.

  1. В slurm-wlm_22.05.8-3.debian.tar.xz есть директория с какими-то тестами, но, похоже они не проводятся. Во всяком случае пробовал что-нибудь в них портить, сборка все равно успешно завершается. Как их запустить?

  2. Что-то не проходит проверка цифровой подписи при распаковке исходников. Пишет:

gpgv: Signature made Ср 08 фев 2023 07:01:54 UTC
gpgv:                using RSA key EB3345F56441B8B81A7798767DFA41AD961985D7
gpgv:                issuer "oliva.g@na.icar.cnr.it"
gpgv: Note: signatures using the SHA1 algorithm are rejected
gpgv: Can't check signature: Bad public key

Хотя проверка самого dsc-файла проходит:

gpg --auto-key-locate keyserver --locate-keys oliva.g@na.icar.cnr.it
gpg --verify slurm-wlm_22.05.8-3.dsc

Ключ берется с сервера hkps://keys.openpgp.org.

Что делать?

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

Можно не обращать внимания. Но если очень хочется, то можно установить пакет с ключами разработчиков debian-keyring. Почему скачанный тобой ключ не подошёл, не знаю. Возможно не тот ключ скачал. Был тут случай, когда на сервера ключей какой-то добрый человек загрузил ключи всех разработчиков Debian, причем с частично совпадающим отпечатком (8 последних цифр).

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

Это сообщение уже после установки debian-keyring. Да, хочется проверить. Особенно учитывая какую-то странную нелюбовь идеологов Убунты использовать https. Я понимаю, это не защищает от подмены данных на сервере, но, по крайней мере, защищает от подмены при передаче…

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

Если я правильно помню, то в современных версиях apt поддержку SHA1 в подписях выключили совсем-совсем. Так что ты ничего не можешь сделать, только ругаться.

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

Добавил weak-digest SHA1 в gpg.conf, теперь он выдает

dpkg-source: warning: extracting unsigned source package (slurm-wlm_22.05.8-3.dsc)

Это как понять? Проверка прошла или просто выводит другое предупреждение? :)

zb2
() автор топика
Ответ на: комментарий от TeopeTuK

Пардонтель, ошибочка вышла. :) Сообщение от 08.03.23 01:54:23 не имеет смыла. Я случайно оригинальный dsc перезаписал файлом без подписи когда игрался флажками dpkg-buildpackage.

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

Сделал на чистой установке в VirtualBox.

Для сборки в чистом окружении есть pbuilder.

pbuilder create - создает в chroot’е минимальную систему и пакует ее в архив.

pbuilder build пакет.dsc - собирает пакет.

У тулзы есть куча полезных опций. Например, можно создать окружение для иного deb дистрибутива и пилить пакеты для убунты из дебиана. С помощью нее и собирают пакеты в официальных репозиториях.

В slurm-wlm_22.05.8-3.debian.tar.xz есть директория с какими-то тестами, но, похоже они не проводятся.

Это автотесты для бинарных пакетов. Запускаются в виртуалке или в контейнере. man autopkgtest

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

Для официальных репозиториев пакеты (по крайней мере в Debian) собирают не с помощью pbuilder, а с помощью sbuild (https://wiki.debian.org/sbuild). Но pbuilder для домашнего использования очень удобен, подтверждаю.

TeopeTuK ★★★★
()