Cygwin/Msys2 编译安装 Openresty 过程记录

  |   0 评论   |   0 浏览

OpenResty 的 Win32/Win64 构建目前是通过 MSYS2/MinGW 工具链构建的,包括 MinGW gcc 7.2.3、MSYS2 perl 5.24.4、MSYS2 bash、MSYS2 make 等。

采用 Cygwin 编译

基础模块安装

下载安装 Cygwin 和基础模块,比如 wget,lynx,perl,其他有需要安装的可以直接安装。在安装完成后,如果还需要安装模块,可采用 Cygwin 安装包重新添加安装包,如 luajit,pcre,zlib,openssl,lua-json 相关包,或在第一步中安装。另外,也可采用 apt-cyg 进行安装,后面就可以使用包管理器 apt-cyg 了,然后采用 apt-cyg install package 进行包安装。

1lynx -source raw.fastgit.org/transcode-open/apt-cyg/master/apt-cyg > apt-cyg
2install apt-cyg /bin

使用安装 Cygwin 时的安装包,setup-x86_64.exe,在选择源后,选中要安装的模块并安装。

image.png

image.png

Lua 安装

下载并手工编译安装 lua-5.1.5。经测试 5.3 好像不支持 openresty-1.19.3 版本。另外,需要注意:Lua 默认的 Makefile 中没有开启动态加载模块功能,需手动修改才能编译。

下载主页:http://www.lua.org/versions.html#5.1
下载地址:http://www.lua.org/ftp/lua-5.1.5.tar.gz

修改 lua 源码文件下的 src/Makefile 文件找到 posix 修改成这样:

1posix:
2    #$(MAKE) all MYCFLAGS=-DLUA_USE_POSIX
3    $(MAKE) all MYCFLAGS="-DLUA_USE_POSIX -DLUA_USE_DLOPEN" MYLIBS="-ldl"

然后按照 readme 编译安装命令:make posix 和 make install。

Openresty 修改

下载 Openresty,并编译。

下载地址:https://openresty.org/cn/download.html

修正 lua 的 C 模块编译脚本,共需修正 3 个文件(其实就是 3 个模块),lua-cjson,lua-rds-parser,lua-redis-parser,修改基本一样,在参数后面添加 -L/usr/local/lib -llua

image.png

lua-cjson:

lua-rds-parser:

lua-redis-parser:

注意以上的修改,在重新运行 ./configure 后会被覆盖,所以做好备份。使用 Cygwin 编译安装太费劲了,中间会报各种错误,不推荐使用,下载是直接使用 Msys2 安装,一次成功。

采用 Msys2 安装

官方主页:http://mingw-w64.org/doku.php/download
下载地址:https://repo.msys2.org/distrib/x86_64/

Msys2 安装

输入所需的安装文件夹(仅支持 NTFS 卷上的路径,无空格,无特殊符号等路径)。然后,更新包数据库和基础包,除非安装文件是最新的,否则将需要两个步骤。第一次运行 pacman -Syu

 1$ pacman -Syu
 2:: Synchronizing package databases...
 3mingw32                        805.0 KiB
 4mingw32.sig                    438.0   B
 5mingw64                        807.9 KiB
 6mingw64.sig                    438.0   B
 7msys                           289.3 KiB
 8msys.sig                       438.0   B
 9:: Starting core system upgrade...
10warning: terminate other MSYS2 programs before proceeding
11resolving dependencies...
12looking for conflicting packages...
13
14Packages (6) bash-5.1.004-1  filesystem-2021.01-1
15mintty-1~3.4.4-1  msys2-runtime-3.1.7-4
16pacman-5.2.2-9  pacman-mirrors-20201208-1
17
18Total Download Size:   11.05 MiB
19Total Installed Size:  53.92 MiB
20Net Upgrade Size:      -1.24 MiB
21
22:: Proceed with installation? [Y/n]
23:: Retrieving packages...
24bash-5.1.004-1-x86_64            2.3 MiB
25filesystem-2021.01-1-any        33.2 KiB
26mintty-1~3.4.4-1-x86_64        767.2 KiB
27msys2-runtime-3.1.7-4-x86_64     2.6 MiB
28pacman-mirrors-20201208-1-any    3.8 KiB
29pacman-5.2.2-9-x86_64            5.4 MiB
30(6/6) checking keys in keyring       100%
31(6/6) checking package integrity     100%
32(6/6) loading package files          100%
33(6/6) checking for file conflicts    100%
34(6/6) checking available disk space  100%
35:: Processing package changes...
36(1/6) upgrading bash                 100%
37(2/6) upgrading filesystem           100%
38(3/6) upgrading mintty               100%
39(4/6) upgrading msys2-runtime        100%
40(5/6) upgrading pacman-mirrors       100%
41(6/6) upgrading pacman               100%
42:: To complete this update all MSYS2 processes including this terminal will be closed. Confirm to proceed [Y/n]

从开始菜单运行“MSYS2 MSYS”。使用以下命令更新其余基本软件包 pacman -Su

 1$ pacman -Su
 2:: Starting core system upgrade...
 3 there is nothing to do
 4:: Starting full system upgrade...
 5resolving dependencies...
 6looking for conflicting packages...
 7
 8Packages (20) base-2020.12-1  bsdtar-3.5.0-1
 9              [... more packages listed ...]
10
11Total Download Size:   12.82 MiB
12Total Installed Size:  44.25 MiB
13Net Upgrade Size:       3.01 MiB
14
15:: Proceed with installation? [Y/n]
16[... downloading and installation continues ...]

Msys2 工具安装

现在 MSYS2 已经安装完成,再安装一些工具和 mingw-w64 GCC 就可以使用了,运行 pacman -S --needed base-devel mingw-w64-x86_64-toolchain

 1$ pacman -S --needed base-devel mingw-w64-x86_64-toolchain
 2warning: file-5.39-2 is up to date -- skipping
 3[... more warnings ...]
 4:: There are 48 members in group base-devel:
 5:: Repository msys
 6   1) asciidoc  2) autoconf  3) autoconf2.13  4) autogen
 7   [... more packages listed ...]
 8
 9Enter a selection (default=all):
10:: There are 19 members in group mingw-w64-x86_64-toolchain:
11:: Repository mingw64
12   1) mingw-w64-x86_64-binutils  2) mingw-w64-x86_64-crt-git
13   [... more packages listed ...]
14
15Enter a selection (default=all):
16resolving dependencies...
17looking for conflicting packages...
18
19Packages (123) docbook-xml-4.5-2  docbook-xsl-1.79.2-1
20               [... more packages listed ...]
21               m4-1.4.18-2  make-4.3-1  man-db-2.9.3-1
22               mingw-w64-x86_64-binutils-2.35.1-3
23               mingw-w64-x86_64-crt-git-9.0.0.6090.ad98746a-1
24               mingw-w64-x86_64-gcc-10.2.0-6
25               mingw-w64-x86_64-gcc-ada-10.2.0-6
26               mingw-w64-x86_64-gcc-fortran-10.2.0-6
27               mingw-w64-x86_64-gcc-libgfortran-10.2.0-6
28               mingw-w64-x86_64-gcc-libs-10.2.0-6
29               mingw-w64-x86_64-gcc-objc-10.2.0-6
30               mingw-w64-x86_64-gdb-10.1-2
31               mingw-w64-x86_64-gdb-multiarch-10.1-2
32              [... more packages listed ...]
33
34Total Download Size:    196.15 MiB
35Total Installed Size:  1254.96 MiB
36
37:: Proceed with installation? [Y/n]
38[... downloading and installation continues ...]

要使用 mingw-w64 GCC 开始构建,请关闭此窗口并从“开始”菜单运行“MSYS MinGW 64 位”,就可以调用 makegcc 构建软件了。

构建 Openresty

将下载的 Openresty,放入 Msys2 安装目录下的 /usr/local/ 文件夹下,在打开的 MSYS MinGW 64 位 窗口中,运行:

1cd /usr/local/openresty-1.19.3.2
2wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz
3wget http://zlib.net/zlib-1.2.11.tar.gz
4wget https://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz

完成 OpenSSL、Zlib 和 PCRE 的依赖库的下载,下面开始编译:

 1#!/bin/bash
 2
 3PCRE=pcre-8.44
 4ZLIB=zlib-1.2.11
 5OPENSSL=openssl-1.1.1k
 6JOBS=8
 7
 8# wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz
 9# wget http://zlib.net/zlib-1.2.11.tar.gz
10# wget https://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz
11
12rm -rf objs || exit 1
13mkdir -p objs/lib || exit 1
14cd objs/lib || exit 1
15ls ../../..
16tar -xf ../../../$OPENSSL.tar.gz || exit 1
17tar -xf ../../../$ZLIB.tar.gz || exit 1
18tar -xf ../../../$PCRE.tar.gz || exit 1
19cd ../..
20
21cd objs/lib/$OPENSSL || exit 1
22#patch -p1 < ../../../patches/openssl-1.1.0j-parallel_build_fix.patch || exit 1
23patch -p1 < ../../../patches/openssl-1.1.1f-sess_set_get_cb_yield.patch || exit 1
24#patch -p1 < ../../../patches/openssl-1.1.1d-win_fix.patch || exit 1
25#patch -p1 < ../../../patches/openssl-1.1.1e-sess_set_get_cb_yield.patch || exit 1
26cd ../../..
27
28    #--with-openssl-opt="no-asm" \
29
30./configure \
31    --with-cc=gcc \
32    --with-ipv6 \
33    --prefix= \
34    --with-cc-opt='-DFD_SETSIZE=1024' \
35    --sbin-path=nginx.exe \
36    --with-pcre-jit \
37    --without-http_rds_json_module \
38    --without-http_rds_csv_module \
39    --without-lua_rds_parser \
40    --with-ipv6 \
41    --with-stream \
42    --with-stream_ssl_module \
43    --with-stream_ssl_preread_module \
44    --with-http_v2_module \
45    --without-mail_pop3_module \
46    --without-mail_imap_module \
47    --without-mail_smtp_module \
48    --with-http_stub_status_module \
49    --with-http_realip_module \
50    --with-http_addition_module \
51    --with-http_auth_request_module \
52    --with-http_secure_link_module \
53    --with-http_random_index_module \
54    --with-http_gzip_static_module \
55    --with-http_sub_module \
56    --with-http_dav_module \
57    --with-http_flv_module \
58    --with-http_mp4_module \
59    --with-http_gunzip_module \
60    --with-select_module \
61    --with-luajit-xcflags="-DLUAJIT_NUMMODE=2 -DLUAJIT_ENABLE_LUA52COMPAT" \
62    --with-pcre=objs/lib/$PCRE \
63    --with-zlib=objs/lib/$ZLIB \
64    --with-openssl=objs/lib/$OPENSSL \
65    --with-pcre-jit \
66    --with-mail \
67    --with-mail_ssl_module \
68    -j$JOBS || exit 1
69
70make -j$JOBS || exit 1
71make install

或直接采用 util 目录下的 build-win32.sh 文件,将其复制到 openresty 根目录,然后运行。

参见:

记录自己 cygwin 上编译安装 openresty 的过程

Cygwin 上编 openresty 终于折腾出来了,发个 patch,春哥看看能不能整合进去

Msys2 安装教程

Details About Openresty's Building Process

给已经编译安装了的 nginx 添加 http_ssl_module 模块

为已安装的 nginx 新增模块(以 mail 模块为例)

在已经安装好的 Openresty 上增加新模块(Nginx 的新增方式也一样)

Openresty 如何添加模块

如何对 nginx Lua module 添加新 api

在 Win 下编译 OpenResty

Openresty(动态)添加 nginx 模块

手动编译 Openresty

Openresty 添加 proxy_cache_purge 模块 多后台代理

How to install apt-cyg for Cygwin?

Install Cygwin and apt-cyg (and SSH)

Windows 下安装 Cygwin 及 apt-cyg

在已编译安装 nginx 上动态添加模块