簡體   English   中英

需要一些幫助來為nodejs app創建一個rpm包

[英]need a little help to create an rpm package for a nodejs app

我已按照這些說明准備了一個構建盒,我已經四處搜索並進行了hello world rpm構建,但仍然不確定打包一堆js文件(nodejs app)的最佳方法是什么。 我想 :

  1. 將文件部署到某個位置
  2. 運行#npm install
  3. 運行命令以啟動節點偵聽器/守護程序。

我做了一個非常簡單的spec文件,看起來像這樣:

Name:           nodejsapp
Version:        1.0
Release:        0
Summary:        API for a Platform

Group:          Group
License:        License
URL:            somewebsite
Distribution:   Linux CentOS
Source0:        %{name}-%{version}.tar.gz

%description
CDR Platform is awesome product.


%prep

%install
install -m 755 -d $RPM_BUILD_ROOT/opt/cdr/api

%clean
rm -rf $RPM_BUILD_ROOT


%files
%defattr(-,root,root,-)

上面的版本,但安裝時沒有任何反應! 我不確定我是否完全理解rpmbuild是如何開展業務的。

那么在這種情況下我需要使用哪個宏? 我是否需要在%files下創建文件列表? 在運行rpmbuild之前是否需要gzip文件? 或者我可以在rpmbuild中對它們進行gzip嗎?

任何幫助表示贊賞。

可以在此處找到Fedora EPEL repo的包裝nodejs應用程序的指南。 在打包自己的nodejs應用程序時,它們是一個很好的參考。

您沒有提到您正在使用的版本或版本,但我將假設它是最近的版本,因此您要啟動的服務將在systemd下運行。 可以在這里找到Fedora systemd包裝指南。

我也假設您正在使用github來管理代碼,它是一個純JS應用程序。

對於沒有依賴關系或僅依賴於已經打包在EPEL中的nodejs模塊的nodejs模塊/ app,以下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

此spec文件還將處理具有依賴關系的nodejs模塊,這些依賴關系已作為EPEL的一部分打包。 RPM的auto需求/提供功能使用模塊中的package.json文件在最終RPM包中創建必要的需求依賴項。

源zip應該使用如下命令從github下載到SOURCES目錄:

wget -O SOURCES/myapp-0.1.zip https://github.com/myuser/myapp/archive/v0.1.zip

RPM使用以下命令構建:

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中列出的所有依賴項都將捆綁到您的應用程序中,使其成為一個獨立的應用程序。

上述命令中npm用法的說明

  • npm install在包/應用程序目錄中執行,並在該目錄中包含的包上運行。
  • -g將包作為全局包安裝在當前工作目錄中
  • -q僅打印警告和錯誤
  • --production不復制devDependencies
  • --prefix = install在前綴目錄中

其結果是將本地目錄中的nodejs應用程序復制到$ {RPM_BUILD_ROOT}%{_ prefix}准備打包。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM