This is an automated email from the ASF dual-hosted git repository.
membphis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix.git
The following commit(s) were added to refs/heads/master by this push:
new 98be489 fix: use luajit by default when run apisix (#3335)
98be489 is described below
commit 98be48978f60fb3ce03917d65778456048791618
Author: fukiki <[email protected]>
AuthorDate: Fri Jan 29 23:57:46 2021 +0800
fix: use luajit by default when run apisix (#3335)
Fix : #3281
---
Makefile | 4 ++-
bin/apisix => apisix/cli/apisix.lua | 9 ++---
apisix/cli/ngx_tpl.lua | 6 ++++
bin/apisix | 72 +++++++++++++++++++++----------------
doc/install-dependencies.md | 2 ++
doc/zh-cn/install-dependencies.md | 2 ++
6 files changed, 59 insertions(+), 36 deletions(-)
diff --git a/Makefile b/Makefile
index 576b78b..b61c24d 100644
--- a/Makefile
+++ b/Makefile
@@ -33,8 +33,10 @@ RELEASE_SRC = apache-apisix-${VERSION}-src
default:
ifeq ($(OR_EXEC), )
ifeq ("$(wildcard /usr/local/openresty-debug/bin/openresty)", "")
- @echo "ERROR: OpenResty not found. You have to install OpenResty and
add the binary file to PATH before install Apache APISIX."
+ @echo "WARNING: OpenResty not found. You have to install OpenResty and
add the binary file to PATH before install Apache APISIX."
exit 1
+else
+ OR_EXEC=/usr/local/openresty-debug/bin/openresty
endif
endif
diff --git a/bin/apisix b/apisix/cli/apisix.lua
similarity index 82%
copy from bin/apisix
copy to apisix/cli/apisix.lua
index c3962ac..3d6049f 100755
--- a/bin/apisix
+++ b/apisix/cli/apisix.lua
@@ -1,5 +1,3 @@
-#!/usr/bin/env lua
-
--
-- Licensed to the Apache Software Foundation (ASF) under one or more
-- contributor license agreements. See the NOTICE file distributed with
@@ -22,8 +20,11 @@ local pkg_path_org = package.path
local apisix_home = "/usr/local/apisix"
local pkg_cpath = apisix_home .. "/deps/lib64/lua/5.1/?.so;"
- .. apisix_home .. "/deps/lib/lua/5.1/?.so;;"
-local pkg_path = apisix_home .. "/deps/share/lua/5.1/?.lua;;"
+ .. apisix_home .. "/deps/lib/lua/5.1/?.so;"
+ .. "/usr/lib64/lua/5.1/?.so;"
+ .. "/usr/lib/lua/5.1/?.so;;"
+local pkg_path = apisix_home .. "/deps/share/lua/5.1/?.lua;"
+ .. "/usr/share/lua/5.1/?.lua;;"
-- modify the load path to load our dependencies
package.cpath = pkg_cpath .. pkg_cpath_org
diff --git a/apisix/cli/ngx_tpl.lua b/apisix/cli/ngx_tpl.lua
index 38081ad..e0a229f 100644
--- a/apisix/cli/ngx_tpl.lua
+++ b/apisix/cli/ngx_tpl.lua
@@ -57,9 +57,12 @@ env {*name*};
{% if stream_proxy then %}
stream {
lua_package_path
"{*extra_lua_path*}$prefix/deps/share/lua/5.1/?.lua;$prefix/deps/share/lua/5.1/?/init.lua;]=]
+ ..
[=[/usr/share/lua/5.1/?.lua;/usr/share/lua/5.1/?/init.lua;]=]
..
[=[{*apisix_lua_home*}/?.lua;{*apisix_lua_home*}/?/init.lua;;{*lua_path*};";
lua_package_cpath "{*extra_lua_cpath*}$prefix/deps/lib64/lua/5.1/?.so;]=]
.. [=[$prefix/deps/lib/lua/5.1/?.so;;]=]
+ .. [=[/usr/lib64/lua/5.1/?.so;]=]
+ .. [=[/usr/lib/lua/5.1/?.so;]=]
.. [=[{*lua_cpath*};";
lua_socket_log_errors off;
@@ -120,9 +123,12 @@ http {
# put extra_lua_path in front of the builtin path
# so user can override the source code
lua_package_path
"{*extra_lua_path*}$prefix/deps/share/lua/5.1/?.lua;$prefix/deps/share/lua/5.1/?/init.lua;]=]
+ ..
[=[/usr/share/lua/5.1/?.lua;/usr/share/lua/5.1/?/init.lua;]=]
..
[=[{*apisix_lua_home*}/?.lua;{*apisix_lua_home*}/?/init.lua;;{*lua_path*};";
lua_package_cpath "{*extra_lua_cpath*}$prefix/deps/lib64/lua/5.1/?.so;]=]
.. [=[$prefix/deps/lib/lua/5.1/?.so;;]=]
+ .. [=[/usr/lib64/lua/5.1/?.so;]=]
+ .. [=[/usr/lib/lua/5.1/?.so;]=]
.. [=[{*lua_cpath*};";
lua_shared_dict internal_status 10m;
diff --git a/bin/apisix b/bin/apisix
index c3962ac..992bd4e 100755
--- a/bin/apisix
+++ b/bin/apisix
@@ -1,36 +1,46 @@
-#!/usr/bin/env lua
+#!/bin/bash
---
--- Licensed to the Apache Software Foundation (ASF) under one or more
--- contributor license agreements. See the NOTICE file distributed with
--- this work for additional information regarding copyright ownership.
--- The ASF licenses this file to You under the Apache License, Version 2.0
--- (the "License"); you may not use this file except in compliance with
--- the License. You may obtain a copy of the License at
---
--- http://www.apache.org/licenses/LICENSE-2.0
---
--- Unless required by applicable law or agreed to in writing, software
--- distributed under the License is distributed on an "AS IS" BASIS,
--- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--- See the License for the specific language governing permissions and
--- limitations under the License.
---
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
-local pkg_cpath_org = package.cpath
-local pkg_path_org = package.path
+if [ -s './apisix/cli/apisix.lua' ]; then
+ APISIX_LUA=./apisix/cli/apisix.lua
+elif [ -s '/usr/share/lua/5.1/apisix/cli/apisix.lua' ]; then
+ APISIX_LUA=/usr/share/lua/5.1/apisix/cli/apisix.lua
+else
+ APISIX_LUA=/usr/local/apisix/apisix/cli/apisix.lua
+fi
-local apisix_home = "/usr/local/apisix"
-local pkg_cpath = apisix_home .. "/deps/lib64/lua/5.1/?.so;"
- .. apisix_home .. "/deps/lib/lua/5.1/?.so;;"
-local pkg_path = apisix_home .. "/deps/share/lua/5.1/?.lua;;"
+# find the openresty
+OR_BIN=$(which openresty)
+OR_EXEC=${OR_BIN:-'/usr/local/openresty-debug/bin/openresty'}
+OR_VER=$(openresty -v 2>&1 | awk -F '/' '{print $2}' | awk -F '.' '{print
$1"."$2}')
+LUA_VERSION=$(lua -v 2>&1| grep -E -o "Lua [0-9]+.[0-9]+")
--- modify the load path to load our dependencies
-package.cpath = pkg_cpath .. pkg_cpath_org
-package.path = pkg_path .. pkg_path_org
+if [[ -e $OR_EXEC && "$OR_VER" =~ "1.19" ]]; then
+ # OpenResty version is 1.19, use luajit by default
+ # find the luajit binary of openresty
+ LUAJIT_BIN=$(${OR_EXEC} -V 2>&1 | grep prefix | grep -Eo
'prefix=(.*)/nginx\s+--' | grep -Eo '/.*/')luajit/bin/luajit
--- pass path to construct the final result
-local env = require("apisix.cli.env")(apisix_home, pkg_cpath_org, pkg_path_org)
-local ops = require("apisix.cli.ops")
-
-ops.execute(env, arg)
+ # use the luajit of openresty
+ $LUAJIT_BIN $APISIX_LUA $*
+elif [[ "$LUA_VERSION" =~ "Lua 5.1" ]]; then
+ # OpenResty version is not 1.19, use Lua 5.1 by default
+ lua $APISIX_LUA $*
+else
+ echo "ERROR: Please check the version of OpenResty and Lua, OpenResty 1.19
and Lua 5.1 are recommended before install Apache APISIX."
+fi
diff --git a/doc/install-dependencies.md b/doc/install-dependencies.md
index ab12fd7..f8df981 100644
--- a/doc/install-dependencies.md
+++ b/doc/install-dependencies.md
@@ -35,6 +35,8 @@
- If you want use Tengine instead of OpenResty, please take a look at this
installation step script [Install Tengine at
Ubuntu](../.travis/linux_tengine_runner.sh).
+- By default Apache APISIX runs with LuaJIT of OpenResty 1.19 (priority) or
Lua 5.1. If you run in to an issue `luajit: lj_asm_x86.h:2819: asm_loop_fixup:
Assertion '((intptr_t)target & 15) == 0' failed`, it is caused by to the
compatibility of OpenResty version. OpenResty 1.19 is recommended, please take
a look at this installation step script
[linux-install-openresty](../utils/linux-install-openresty.sh).
+
# CentOS 7
```shell
diff --git a/doc/zh-cn/install-dependencies.md
b/doc/zh-cn/install-dependencies.md
index 0d062ff..6026c97 100644
--- a/doc/zh-cn/install-dependencies.md
+++ b/doc/zh-cn/install-dependencies.md
@@ -34,6 +34,8 @@
- 如果你要想使用 Tengine 替代 OpenResty,请参考 [Install Tengine at
Ubuntu](../../.travis/linux_tengine_runner.sh)。
+- Apache APISIX 运行默认使用 OpenResty 1.19 内置的 LuaJIT(优先推荐)或 Lua 5.1。若运行过程中出现问题
`luajit: lj_asm_x86.h:2819: asm_loop_fixup: Assertion '((intptr_t)target & 15)
== 0' failed`,是因 OpenResty 版本兼容性问题,建议更换 OpenResty 版本为 1.19,请参考
[linux-install-openresty](../../utils/linux-install-openresty.sh)。
+
# CentOS 7
```shell