linux rpm node,linux-需要一些帮助为nodejs应用程序创建rpm包

我已经按照this的说明准备了一个构建框,已经四处搜寻并进行了hello world rpm构建,但是仍然不确定打包一堆js文件(nodejs应用程序)的最佳方法是什么.我想 :

>将文件部署到某个位置

>运行#npm install

>运行命令以启动节点侦听器/守护程序.

我已经完成了一个非常简单的规格文件,如下所示:

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压缩?

任何帮助表示赞赏.

解决方法:

可以找到here来打包Fedora EPEL存储库中的nodejs应用程序的准则.当打包自己的nodejs应用程序时,它们是很好的参考.

您没有提到您使用的是哪个版本或发行版,但我将假定它是最近的发行版,因此您要启动的服务将在systemd下运行. Fedora系统包装指南可参见here.

我还假设您正在使用github来管理代码,并且它是一个纯JS应用程序.

对于没有依赖项或仅对EPEL中已经打包的nodejs模块具有依赖项的nodejs模块/应用程序,可以使用以下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软件包中创建必要的需求依赖项.

应该使用以下命令将源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

在%install行中

#

# 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在package / application目录中执行,并在该目录中包含的软件包上运行.

> -g将软件包作为全局软件包安装在当前工作目录中

> -q仅打印警告和错误

>-生产不复制devDependencies

> –prefix =安装在前缀目录中

效果是将本地目录中的nodejs应用程序复制到准备打包的${RPM_BUILD_ROOT}%{_ prefix}中.

标签:rpmbuild,node-js,rpm,centos6,linux

来源: https://codeday.me/bug/20191120/2045617.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值