summaryrefslogtreecommitdiff
path: root/opennjet.spec
blob: 88651d70222afc0e0b139597cbac5406d9de3130 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# topdir: opennjet-4.0.2.0
# OpenNJet is an nginx-derived application engine for cloud-native applications.
# Built via upstream build_cc.sh which bundles tongsuo/openssl, luajit, pcre, etc.
# Binary and service retain upstream name "njet"; package name is "opennjet".

Name:           opennjet
Version:        4.0.2.0
Release:        1%{?dist}
Summary:        OpenNJet Application Engine - nginx-derived cloud-native runtime

License:        MulanPSL-2.0
URL:            https://github.com/OpenNJet/OpenNJet
Source0:        https://github.com/OpenNJet/OpenNJet/archive/refs/tags/v%{version}.tar.gz#/%{name}-%{version}.tar.gz

Group:          System Environment/Daemons
Packager:       openEuler Builder <builder@openeuler.org>

BuildRequires:  gcc
BuildRequires:  gcc-c++
BuildRequires:  make
BuildRequires:  autoconf
BuildRequires:  automake
BuildRequires:  libtool
BuildRequires:  libtool-ltdl-devel
BuildRequires:  m4
BuildRequires:  cmake
BuildRequires:  perl
BuildRequires:  pkgconfig
BuildRequires:  vim-common
BuildRequires:  pcre-devel
BuildRequires:  zlib-devel
BuildRequires:  openssl-devel
BuildRequires:  systemd

Requires(pre):  shadow-utils
Requires(post): systemd
Requires(post): libcap
Requires(preun): systemd
Requires(postun): systemd

%description
OpenNJet is a high-performance, lightweight web application and proxy software.
As a cloud-native service mesh data plane, NJet provides dynamic configuration
loading, active health checks, cluster high availability, and declarative API.
Through the CoPilot co-pilot service framework, it achieves high extensibility
while isolating control plane and data plane.

OpenNJet 应用引擎是基于 NGINX 的面向互联网和云原生应用提供的运行时组态服务程序,
作为底层引擎,OpenNJet 实现了 NGINX 云原生功能增强、安全加固和代码重构,
利用动态加载机制可以实现不同的产品形态,如 Web 服务器、流媒体服务器、负载均衡、
代理(Proxy)、应用中间件、API 网关、消息队列等产品形态。

%prep
%autosetup -n %{name}-%{version}

%build
# Remove --strict-warnings from openssl build options (compiler compatibility)
sed -i 's/--strict-warnings//g' ./build_cc.sh

# Configure (bundles tongsuo/openssl, luajit, etc. from auto/lib/)
./build_cc.sh conf

# Build njet main binary
make -j $(nproc)

# Build auxiliary tools (agw_passwd, etc.)
make tools

# Compile lua scripts to bytecode and shared objects
./build_lua.sh

%install
rm -rf %{buildroot}
mkdir -p %{buildroot}/usr/local/njet/{apps,logs,data,modules,lib/tcc,sbin,lualib/lib,lualib/clib}
mkdir -p %{buildroot}/var/log/njet/logs

# Install njet binary, libraries, and bundled components
DESTDIR=%{buildroot} ./build_cc.sh install

# Copy pre-built configuration files and systemd unit from upstream rpm layout
cp -a build/rpm/njet.conf.files/* %{buildroot}

# Remove static libraries from lib/ (preserve lib/tcc/*.a needed at runtime)
rm -f %{buildroot}/usr/local/njet/lib/*.a

# Copy compiled lua bytecode modules
cp -a objs/scripts/so/* %{buildroot}/usr/local/njet/lualib/clib/
rm -rf objs/scripts/so
cp -a objs/scripts/* %{buildroot}/usr/local/njet/modules/

%pre
if [ "$1" -eq 1 ]; then
   if ! getent group njet >/dev/null 2>&1; then
     /usr/sbin/groupadd njet
   fi
   if ! getent passwd njet >/dev/null 2>&1; then
     /usr/sbin/useradd njet -g njet -M -s /sbin/nologin
   fi
fi

%post
grep -q /usr/local/lib /etc/ld.so.conf 2>/dev/null
if [ $? != 0 ] ; then
  echo "/usr/local/lib" >> /etc/ld.so.conf
fi

if [ -x /usr/local/njet/sbin/agw_passwd ]; then
   /bin/chmod a+x /usr/local/njet/sbin/agw_passwd
   /usr/local/njet/sbin/agw_passwd /usr/local/njet/apigw_data/api_gateway.db || true
fi

ldconfig
systemctl daemon-reload || true
systemctl enable njet.service || true

if [ -x /usr/sbin/setcap ] && [ -x /usr/local/njet/sbin/njet ]; then
   /usr/sbin/setcap cap_dac_override,cap_dac_read_search,cap_net_bind_service,cap_net_admin,cap_net_raw,cap_setuid=eip /usr/local/njet/sbin/njet || true
fi

%preun
if [ "$1" -eq 0 ]; then
   systemctl stop njet.service >/dev/null 2>&1 || true
   systemctl disable njet.service || true
   systemctl daemon-reload || true
fi

%postun
if [ "$1" -ge 1 ]; then
   systemctl daemon-reload || true
fi
ldconfig 2>/dev/null || true

%clean
rm -rf %{buildroot}

%files
%defattr(-,root,root,-)
%license LICENSE
%doc README.md CHANGES NOTICE
/etc/systemd/system/njet.service.d/filelimit.conf
/etc/ld.so.conf.d/njet.conf
%{_unitdir}/njet.service
%attr(-,njet,njet) /usr/local/njet/
%attr(777,njet,njet) /var/log/njet/logs/

%config(noreplace) /usr/local/njet/conf/ctrl_kv.conf
%config(noreplace) /usr/local/njet/conf/goaccess.conf
%config(noreplace) /usr/local/njet/conf/njet.conf
%config(noreplace) /usr/local/njet/conf/njet_ctrl.conf
%config(noreplace) /usr/local/njet/html/50x.html
%config(noreplace) /usr/local/njet/html/index.html

%changelog
* Wed Oct 28 2026 openEuler Builder <builder@openeuler.org> - 4.0.2.0-1
- Initial package for openEuler based on OpenNJet 4.0.2.0