создание пакета RPM из проекта NodeJS, упакованного в виде двоичного файла

Я пытаюсь упаковать проект NodeJS как RPM, я изначально использовал пакет speculate из npm для создания структуры каталогов сборки, создания архива tar и создания файла спецификации. Это продолжает ломать меня.

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

Я использую docker с centos для сборки RPM, я вручную создал скелет сборки, /root/rpmbuild/RPMS, /root/rpmbuild/SOURCES и т. д. Я поместил упакованный двоичный файл в /root/rpmbuild/SOURCES.

Я удалил шаги сборки из menlolab-runner.spec, это выглядит следующим образом:

%define name menlolab-runner
%define version 0.2.6
%define release 1

Name: %{name}
Version: %{version}
Release: %{release}
Summary: menlolab-runner

Group: Installation Script
License: MIT
Source: runner
AutoReqProv: no

%description
The agent deployed on private and public infrastructure to manage tasks.

%global debug_package %{nil}

%prep

%build

%pre
getent group menlolab-runner >/dev/null || groupadd -r menlolab-runner
getent passwd menlolab-runner >/dev/null || useradd -r -g menlolab-runner -G menlolab-runner -d / -s /sbin/nologin -c "menlolab-runner" menlolab-runner

%install
cp -r /root/rpmbuild/SOURCES/runner /usr/bin/menlolab-runner

%post
cp /runner/rpm-build/menlolab-runner.service /etc/systemd/system/
systemctl enable /usr/lib/menlolab-runner/menlolab-runner.service
chmod ugo+x /usr/bin/menlolab-runner
mkdir -p '/etc/menlolab-runner/'
chown -R 'menlolab-runner:menlolab-runner' '/etc/menlolab-runner'
chmod 700 '/etc/menlolab-runner'
mkdir -p '/var/lib/menlolab-runner/'
chown -R 'menlolab-runner:menlolab-runner' '/var/lib/menlolab-runner/'
mkdir -p '/var/lib/menlolab-runner/jobs/'
chown -R 'menlolab-runner:menlolab-runner' '/var/lib/menlolab-runner/jobs/'
mkdir -p '/var/log/menlolab-runner/'
chown -R 'menlolab-runner:menlolab-runner' '/var/log/menlolab-runner/'
mkdir -p '/var/cache/menlolab-runner/'
chown -R 'menlolab-runner:menlolab-runner' '/var/cache/menlolab-runner/'
groupadd docker
usermod -aG docker menlolab-runner

%clean

%files
%defattr(644, menlolab-runner, menlolab-runner, 755)
/usr/lib/menlolab-runner
/var/log/menlolab-runner

Мой сервисный файл systemd ниже:

[Unit]
Description=The agent deployed on private and public infrastructure to manage tasks.
After=network.target nss-lookup.target

[Service]
ExecStart=/usr/bin/npm start
WorkingDirectory=/usr/lib/menlolab-runner
Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=menlolab-runner
User=menlolab-runner
Group=menlolab-runner

[Install]
WantedBy=multi-user.target

Для запуска процесса сборки используется rpmbuild -bb SPECS/menlolab-runner.spec.

Я продолжаю получать следующие ошибки:

RPM build errors:
    File not found: /root/rpmbuild/BUILDROOT/menlolab-runner-0.2.6-1.x86_64/usr/lib/menlolab-runner
    File not found: /root/rpmbuild/BUILDROOT/menlolab-runner-0.2.6-1.x86_64/var/log/menlolab-runner

Я не уверен, что их вызывает, поскольку я пропускаю раздел %build, это файл спецификации. Весь вывод rpmbuild можно увидеть здесь


person Yury Stanev    schedule 20.02.2020    source источник


Ответы (1)


Похоже, что раздел %files вызывал проблемы. Удаление последних двух строк /usr/lib/menlolab-runner и /var/log/menlolab-runner решило проблему.

Окончательная версия файла spec выглядит следующим образом:

%define name menlolab-runner
%define version 0.2.6
%define release 1

Name: %{name}
Version: %{version}
Release: %{release}
Summary: menlolab-runner

Group: Installation Script
License: MIT
Source: runner
AutoReqProv: no

%description
The agent deployed on private and public infrastructure to manage tasks.

%global debug_package %{nil}

%prep

%build

%pre
getent group menlolab-runner >/dev/null || groupadd -r menlolab-runner
getent passwd menlolab-runner >/dev/null || useradd -r -g menlolab-runner -G menlolab-runner -d / -s /sbin/nologin -c "menlolab-runner" menlolab-runner

%install
cp -r /root/rpmbuild/SOURCES/runner /usr/bin/menlolab-runner

%post
cp /runner/rpm-build/menlolab-runner.service /etc/systemd/system/
systemctl enable /usr/lib/menlolab-runner/menlolab-runner.service
chmod ugo+x /usr/bin/menlolab-runner
mkdir -p '/etc/menlolab-runner/'
chown -R 'menlolab-runner:menlolab-runner' '/etc/menlolab-runner'
chmod 700 '/etc/menlolab-runner'
mkdir -p '/var/lib/menlolab-runner/'
chown -R 'menlolab-runner:menlolab-runner' '/var/lib/menlolab-runner/'
mkdir -p '/var/lib/menlolab-runner/jobs/'
chown -R 'menlolab-runner:menlolab-runner' '/var/lib/menlolab-runner/jobs/'
mkdir -p '/var/log/menlolab-runner/'
chown -R 'menlolab-runner:menlolab-runner' '/var/log/menlolab-runner/'
mkdir -p '/var/cache/menlolab-runner/'
chown -R 'menlolab-runner:menlolab-runner' '/var/cache/menlolab-runner/'
groupadd docker
usermod -aG docker menlolab-runner

%clean

%files
%defattr(644, menlolab-runner, menlolab-runner, 755)
person Yury Stanev    schedule 20.02.2020