[英]need a little help to create an rpm package for a nodejs app
我已按照這些說明准備了一個構建盒,我已經四處搜索並進行了hello world rpm構建,但仍然不確定打包一堆js文件(nodejs app)的最佳方法是什么。 我想 :
我做了一個非常簡單的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用法的說明
其結果是將本地目錄中的nodejs應用程序復制到$ {RPM_BUILD_ROOT}%{_ prefix}准備打包。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.