Рейтинг:0

Должен ли я создавать свое приложение Haskell с помощью файла RPM SPEC или пытаться использовать (воспроизводимый) двоичный файл из конвейера CI

флаг in

Я не создавал RPM с нуля уже 20 лет. Таким образом, мы можем эффективно сказать «никогда».

[править] Требование к RPM состоит в том, чтобы обеспечить возможность отката, контроль версий и тому подобное. Это не подлежит обсуждению.

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

Если мне нужна проверенная воспроизводимая сборка в процессе сборки RPM, я должен воспроизвести шаги конвейера CI. Нетривиальный. В идеале я могу просто загрузить нужные файлы из другого места:

%преп
cp ${какой-то файл} ${другой файл} $RPM_SOURCE_DIR
%настраивать
:

Это возможно? Или я пропустил какое-то очевидное решение.

Спасибо.

Рейтинг:1
флаг jp
rsc

С моей точки зрения, это немного зависит от того, на что вы нацелены:

Дистрибутивы Linux, такие как Fedora, фактически ожидают, что их сборки дистрибутива будут собраны из исходного кода с использованием файла спецификации (внутри закрытой системы сборки, которая также документирует пакеты/компоненты, используемые для сборки), и считают это хорошей практикой, а также для достижения большей воспроизводимости. насколько это возможно.

Тем не менее, вы действительно можете просто загрузить готовые двоичные файлы и использовать их в файле спецификаций для создания пакета RPM, сокращенный пример для вашего сценария:

# [ ¦ ]
Source0: <двоичный файл>
Источник1: <файл конфигурации>

# [ ¦ ]

%преп
%setup -q -c -T

%строить

%установить
install -D -p -m 0755 %{SOURCE0} $RPM_BUILD_ROOT%{_bindir}/%{name}
install -D -p -m 0644 %{SOURCE1} $RPM_BUILD_ROOT%{_sysconfdir}/%{name}.conf

# [ ¦ ]

Хотя это может сработать, вы должны явно проверить, подходят ли зависимости результирующего RPM-пакета (rpm -qp --requires <…>.rpm) или если отсутствуют зависимости времени выполнения. Часто есть опции или параметры времени компиляции (например, CFLAGS или же LDFLAGS программное обеспечение, написанное на C), а также скрипты постобработки (например, /usr/lib/rpm/(redhat/)brp-*) при сборке RPM-пакета, добавляющего специфичные для дистрибутива материалы и/или извлекающие для вас зависимости во время выполнения. Это может иметь или не иметь для вас значение (и некоторые сценарии постобработки также могут работать для предварительно собранных двоичных файлов, но другие не работают из-за отсутствия параметров компилятора). Хотя я упаковываю много программного обеспечения, у меня нет опыта работы с Haskell, но когда я смотрю на некоторые пакеты Fedora, есть пакеты RPM, имеющие зависимости во время выполнения (и если есть зависимости во время выполнения, они должны быть удовлетворены пакеты RPM, потому что именно так работает RPM; и недостаточно иметь подходящую библиотеку где-то в вашей файловой системе, потому что RPM не будет знать о ней, кроме как в пакете RPM). Таким образом, сборка RPM-пакета из готовых двоичных файлов может привести к тому, что RPM-пакет не будет иметь надлежащих зависимостей, которые позже могут проявиться как ошибки времени выполнения.

Относительно приведенного выше примера: пока ИсточникX: можно указать URL, rpmbuild по-прежнему ожидает эти файлы на диске в ИСТОЧНИКИ каталог при сборке пакета RPM (так как они попадают в ИСТОЧНИКИ каталог зависит от вас).

Поскольку вы не упомянули, на какой дистрибутив Linux вы ориентируетесь, я ссылаюсь на дистрибутив Fedora. Руководство по упаковке Haskell здесь, что может или не может дать дополнительное вдохновение.И да, пакеты RPM могут быть кросс-дистрибутивными, что практически часто приводит к статическим бинарным файлам внутри пакетов RPM из-за часто разных версий библиотек/пакетов в разных дистрибутивах Linux.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.