Рекомендации по упаковке приложений nodejs для репозитория Fedora EPEL можно найти here. Это хорошая рекомендация при упаковке ваших собственных приложений nodejs.
Вы не упомянули, какую версию или какой дистрибутив вы используете, но я собираюсь предположить, что это недавнее распространение, поэтому служба, которую вы хотите запустить, будет запущена под systemd. Руководства по упаковке Fedora systemd можно найти here.
Я также предполагаю, что вы используете github для управления кодом, и это чистое приложение JS.
Для модуля/приложения nodejs, который не имеет зависимостей или имеет только зависимости от модулей nodejs, уже упакованных в EPEL, будет работать следующий файл SPEC (сохраненный как SPECS/nodejs-myapp.spec).
%define debug_package %{nil}
#
# automatically generate requires and provides from package.json
#
%{?nodejs_find_provides_and_requires}
#
# filter out any false provides created due to dependencies with native components
#
%{?nodejs_default_filter}
#
# name of zip file containing source without .zip extension
#
%define modname myapp
Summary: A nodejs app with a systemd daemon
Name: nodejs-%{modname}
Group: Applications/Tools
Version: 0.1
Release: 1
License: Unlicense
URL: https://github.com/myuser/myapp
Source0: %{modname}-%{version}.zip
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildArch: noarch
ExclusiveArch: %{nodejs_arches} noarch
BuildRequires: nodejs-packaging
BuildRequires: systemd
%description
A nodejs app that installs as a systemd service
%prep
%setup -q -n %{modname}-%{version}
%build
%{__rm} -f .gitignore
#
# Fedora guidlines do not allow bundled modules
# use nodejs_symlink_deps in the install section to generate
# links based on package.json contents
#
%{__rm} -rf node_modules
%install
rm -rf $RPM_BUILD_ROOT
#
# copy in the module source
#
%{__install} -d $RPM_BUILD_ROOT%{nodejs_sitelib}
%{__cp} -r $RPM_BUILD_DIR/%{modname}-%{version} $RPM_BUILD_ROOT%{nodejs_sitelib}/%{modname}
#
# link the daemon binaries into sbindir
#
%{__install} -d $RPM_BUILD_ROOT%{_sbindir}
%{__ln_s} %{nodejs_sitelib}/%{modname}/bin/myappd $RPM_BUILD_ROOT%{_sbindir}/myappd
#
# link in any dependent nodejs modules referenced in package.json
#
%nodejs_symlink_deps
#
# documents will be handled by %doc, so remove them from buildroot
#
%{__rm} -rf $RPM_BUILD_ROOT%{nodejs_sitelib}/%{modname}{CHANGELOG.md,LICENSE.md,README.md,docs}
#
# Create a systemd unit file
#
cat <<__EOF> $RPM_BUILD_ROOT%{_unitdir}/myappd.service
[Unit]
Description=MyApp provides the best API
Documentation=man:myapp.service(8)
[Service]
Type=simple
ExecStart=/usr/sbin/myappd
[Install]
WantedBy=multi-user.target
__EOF
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root)
%doc CHANGELOG.md LICENSE.md README.md docs
%{nodejs_sitelib}/%{modname}
%{_sbindir}/myappd
%{_unitdir}/myappd.service
%changelog
* Sun Mar 22 2015 BitByteDog
- Initial spec file for myapp
Этот файл спецификация будет также справляться с nodejs модулей, которые имеют зависимости, которые уже упакованы в рамках Epel. Авто требует/предоставляет функцию RPM, использует файл package.json в модуле для создания необходимых требуемых зависимостей в последнем пакете RPM.
Источник молнии должен быть загружен с GitHub в каталог ИСТОЧНИКОВ с помощью команды, такие как:
wget -O SOURCES/myapp-0.1.zip https://github.com/myuser/myapp/archive/v0.1.zip
Обороты построен с помощью команды:
rpmbuild -ba SPECS/nodejs-myapp.spec
Systemd блок созданный файл является очень просто, прочитайте предоставленную ссылку и соответствующую документацию systemd, чтобы настроить ваши требования. Вам необходимо будет включить и запустить сервис со следующими командами:
systemctl enable myappd.service
systemctl start myappd.service
После этого он автоматически начнет работу.
Если вы хотите включить в состав JS-приложения вложенные модули, это можно сделать с помощью npm. Сначала добавьте теги:
BuildRequires: npm
AutoReq: no
AutoProv: no
Для подавления авто требуется/обеспечивает генерацию. Затем снимите линию
%{__rm} -rf node_modules
из секции% build. Также измените строку
%nodejs_symlink_deps
в% установке для линий
#
# npm will bundle in all dependent modules from the npm registry
# (bundling is OK for private packages but not for EPEL packages)
#
npm -g -q --production --prefix="${RPM_BUILD_ROOT}%{_prefix}" install
Всех модулей в комплекте в приложении и вся зависимость, перечисленная в package.json будут сгруппированной в приложение, что делает его автономным приложение.
Объяснения НОГО использования в команде выше
- НОЙ установка выполняются в пакете/каталоге приложений и работает на упаковке, содержащейся в этом каталоге.
- -g установить пакет в текущем рабочем каталоге в качестве глобального пакета предупреждения
- -q печати и ошибки только
- --production не копировать devDependencies
- - prefix = install in prefix directory
Эффект заключается в том, чтобы скопировать приложение nodejs в локальный каталог $ {RPM_BUILD_ROOT}% {_ prefix} готов к упаковке.
Немного старый, но по-прежнему в основном точный http://www.rpm.org/max-rpm/s1-rpm-build-creating-spec-file.html. –
Вы не должны запускать какие-либо службы rpm. Он может настроить их для запуска любым механизмом, который должен начать его продвижение, но он не должен, как правило, запускать сервис самостоятельно. –
@ EtanReisner спасибо, да, я тоже прочитал этот документ, будучи новым для этого, я не уверен, с чего начать? так как я не компилирую код, мне нужно% build% install .. и т. д., связанные со строительным кодом? – nolimit