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 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
|
#!/bin/bash
#export CC=clang
export CC=gcc
export NGX_BUILD_CC=$CC
mkdir -p download-cache
export JOBS=$(nproc)
export NGX_BUILD_JOBS=$JOBS
export VALGRIND_INC=/usr/include/valgrind/
export LUAJIT_PREFIX=/opt/luajit21
export LUAJIT_LIB=$LUAJIT_PREFIX/lib
export LUAJIT_INC=$LUAJIT_PREFIX/include/luajit-2.1
export LUA_INCLUDE_DIR=$LUAJIT_INC
export PCRE2_VER=10.45
export PCRE2_PREFIX=/opt/pcre2
export PCRE2_LIB=$PCRE2_PREFIX/lib
export PCRE2_INC=$PCRE2_PREFIX/include
export OPENSSL_VER=3.5.0
export OPENSSL_PATCH_VER=3.5.0
export OPENSSL_PREFIX=/opt/ssl3
export OPENSSL_LIB=$OPENSSL_PREFIX/lib
export OPENSSL_INC=$OPENSSL_PREFIX/include
export LIBDRIZZLE_PREFIX=/opt/drizzle
export LIBDRIZZLE_INC=$LIBDRIZZLE_PREFIX/include/libdrizzle-1.0
export LIBDRIZZLE_LIB=$LIBDRIZZLE_PREFIX/lib
export DRIZZLE_VER=2011.07.21
#export TEST_NGINX_SLEEP=0.006
export NGINX_VERSION=1.27.1
#export NGX_BUILD_ASAN=1
export PATH=/opt/bin:$PWD/work/nginx/sbin:$PWD/openresty-devel-utils:$PATH
if [ ! -f /opt/bin/curl ]; then
wget https://github.com/stunnel/static-curl/releases/download/8.14.1/curl-linux-x86_64-glibc-8.14.1.tar.xz
tar -xf curl-linux-x86_64-glibc-8.14.1.tar.xz
tar -xf curl-linux-x86_64-glibc-8.14.1.tar.xz
sudo mkdir -p /opt/bin
sudo mv curl /opt/bin/
fi
function git_download()
{
dir=${!#}
if [ ! -d $dir ]; then
git clone $@
fi
}
function download_deps()
{
if [ ! -f download-cache/drizzle7-$DRIZZLE_VER.tar.gz ]; then
wget -P download-cache https://github.com/openresty/openresty-deps-prebuild/releases/download/v20230902/drizzle7-$DRIZZLE_VER.tar.gz
fi
if [ ! -f download-cache/pcre2-$PCRE2_VER.tar.gz ]; then
wget -P download-cache https://github.com/PCRE2Project/pcre2/releases/download/pcre2-${PCRE2_VER}/pcre2-${PCRE2_VER}.tar.gz
fi
if [ ! -f download-cache/openssl-$OPENSSL_VER.tar.gz ]; then
wget -P download-cache https://github.com/openssl/openssl/releases/download/openssl-$OPENSSL_VER/openssl-$OPENSSL_VER.tar.gz
fi
git_download https://github.com/openresty/test-nginx.git
git_download https://github.com/openresty/openresty.git ../openresty
git_download https://github.com/openresty/no-pool-nginx.git ../no-pool-nginx
git_download https://github.com/openresty/openresty-devel-utils.git
git_download https://github.com/openresty/mockeagain.git
git_download https://github.com/openresty/lua-cjson.git lua-cjson
git_download https://github.com/openresty/lua-upstream-nginx-module.git ../lua-upstream-nginx-module
git_download https://github.com/openresty/echo-nginx-module.git ../echo-nginx-module
git_download https://github.com/openresty/nginx-eval-module.git ../nginx-eval-module
git_download https://github.com/simpl/ngx_devel_kit.git ../ndk-nginx-module
git_download https://github.com/FRiCKLE/ngx_coolkit.git ../coolkit-nginx-module
git_download https://github.com/openresty/headers-more-nginx-module.git ../headers-more-nginx-module
git_download https://github.com/openresty/drizzle-nginx-module.git ../drizzle-nginx-module
git_download https://github.com/openresty/set-misc-nginx-module.git ../set-misc-nginx-module
git_download https://github.com/openresty/memc-nginx-module.git ../memc-nginx-module
git_download https://github.com/openresty/rds-json-nginx-module.git ../rds-json-nginx-module
git_download https://github.com/openresty/srcache-nginx-module.git ../srcache-nginx-module
git_download https://github.com/openresty/redis2-nginx-module.git ../redis2-nginx-module
git_download https://github.com/openresty/lua-resty-core.git ../lua-resty-core
git_download https://github.com/openresty/lua-resty-lrucache.git ../lua-resty-lrucache
git_download https://github.com/openresty/lua-resty-mysql.git ../lua-resty-mysql
git_download https://github.com/openresty/lua-resty-string.git ../lua-resty-string
git_download https://github.com/openresty/stream-lua-nginx-module.git ../stream-lua-nginx-module
git_download -b v2.1-agentzh https://github.com/openresty/luajit2.git luajit2
}
function make_deps()
{
if [ "$TEST_NGINX_BUILD_DEPS" = "n" ]; then
return
fi
cd luajit2/
make clean
make -j"$JOBS" CCDEBUG=-g Q= PREFIX=$LUAJIT_PREFIX CC=$CC XCFLAGS="-DLUAJIT_USE_VALGRIND -I$VALGRIND_INC -DLUAJIT_USE_SYSMALLOC -DLUA_USE_APICHECK -DLUA_USE_ASSERT -msse4.2" > build.log 2>&1 || (cat build.log && exit 1)
sudo make install PREFIX=$LUAJIT_PREFIX
cd ..
tar zxf download-cache/openssl-$OPENSSL_VER.tar.gz
cd openssl-$OPENSSL_VER/
patch -p1 < ../../openresty/patches/openssl-$OPENSSL_PATCH_VER-sess_set_get_cb_yield.patch > ssl.log
./config -DOPENSSL_TLS_SECURITY_LEVEL=1 shared enable-ssl3 enable-ssl3-method -g -O2 --prefix=$OPENSSL_PREFIX --libdir=lib -DPURIFY >> ssl.log
make -j$JOBS >> ssl.log
sudo make PATH=$PATH install_sw >> ssl.log
cd ..
tar zxf download-cache/pcre2-$PCRE2_VER.tar.gz;
cd pcre2-$PCRE2_VER/;
./configure --prefix=$PCRE2_PREFIX --enable-jit --enable-utf
sudo PATH=$PATH make install
cd ..
tar xzf download-cache/drizzle7-$DRIZZLE_VER.tar.gz && cd drizzle7-$DRIZZLE_VER
./configure --prefix=$LIBDRIZZLE_PREFIX --without-server
make libdrizzle-1.0 -j$JOBS
sudo make install-libdrizzle-1.0
cd ..
cd mockeagain/ && make CC=$CC -j$JOBS
cd ..
cd lua-cjson/ && make -j$JOBS && sudo make install
cd ..
}
function make_ngx()
{
if [ "$TEST_NGINX_FRESH_BUILD" = "y" ]; then
rm -fr buildroot
fi
sh util/build.sh $NGINX_VERSION 2>&1 | tee build.log
}
download_deps
make_deps
make_ngx
find t -name "*.t" | xargs reindex >/dev/null 2>&1
#nginx -V
export LD_PRELOAD=$PWD/mockeagain/mockeagain.so
export LD_LIBRARY_PATH=$PWD/mockeagain:$LD_LIBRARY_PATH
#export ASAN_OPTIONS=detect_leaks=0,log_path=/tmp/asan/asan,log_exe_name=true
#export LD_PRELOAD=/lib64/libasan.so.5:$PWD/mockeagain/mockeagain.so
export LD_LIBRARY_PATH=$LUAJIT_LIB:$OPENSSL_LIB:$LD_LIBRARY_PATH
export TEST_NGINX_RESOLVER=8.8.4.4
#export TEST_NGINX_NO_CLEAN=1
#export TEST_NGINX_CHECK_LEAK=1
#export TEST_NGINX_CHECK_LEAK_COUNT=100
#export TEST_NGINX_TIMEOUT=5
#export TEST_NGINX_USE_VALGRIND=1
#export TEST_NGINX_VALGRIND_EXIT_ON_FIRST_ERR=1
#export TEST_NGINX_USE_HTTP2=1
export MALLOC_PERTURB_=33
export TEST_NGINX_HTTP3_CRT=$PWD/t/cert/http3/http3.crt
export TEST_NGINX_HTTP3_KEY=$PWD/t/cert/http3/http3.key
#export TEST_NGINX_USE_HTTP3=1
#export TEST_NGINX_VERBOSE=1
#export TEST_NGINX_EVENT_TYPE=poll
#export TEST_NGINX_POSTPONE_OUTPUT=1
#export MOCKEAGAIN=r
#export MOCKEAGAIN=w
#export MOCKEAGAIN=rw
#export MOCKEAGAIN_VERBOSE=1
ldd `which nginx`|grep -E 'luajit|ssl|pcre'
which nginx
nginx -V
#export TEST_NGINX_INIT_BY_LUA="debug.sethook(function () collectgarbage() end, 'l') jit.off() package.path = '/usr/share/lua/5.1/?.lua;$PWD/../lua-resty-core/lib/?.lua;$PWD/../lua-resty-lrucache/lib/?.lua;' .. (package.path or '') require 'resty.core' require('resty.core.base').set_string_buf_size(1) require('resty.core.regex').set_buf_grow_ratio(1)"
# comment out TEST_NGINX_RANDOMIZE when debugging one test case
export TEST_NGINX_RANDOMIZE=1
prove -j$JOBS -I. -Itest-nginx/inc -Itest-nginx/lib -r t/
|