我想在NAS上通过Nginx的目录索引功能运行一个下载站。自带的autoindex不是很好看,所以用FancyIndex的Docker镜像部署。 刚好之前也研究过这个模块的编译,所以就想在群晖上利用原生的WebStation配置。最后是失败了,但是编译出的二进制和群晖是兼容的,因此记录一下,给其他工具的编译提供一些参考。 ### 系统平台 编译平台: Arch:x86_64 OS:Debian Buster 目标平台: Dev: DS920+ Arch:x86_64(J4125 GeminiLake) OS:DSM7.0 ### 交叉编译工具链下载 群晖开源项目:https://sourceforge.net/projects/dsgpl/ 我们需要的工具链在:https://sourceforge.net/projects/dsgpl/files/Tool%20Chain/。根据自己的系统版本和CPU架构,选择对应的工具链下载。 ``` cd /opt wget https://sourceforge.net/projects/dsgpl/files/Tool%20Chain/DSM%207.0.0%20Tool%20Chains/Intel%20x86%20Linux%204.4.180%20%28GeminiLake%29/geminilake-gcc750_glibc226_x86_64-GPL.txz tar xvf geminilake-gcc750_glibc226_x86_64-GPL.txz ``` 解压完成后会在bin目录下看到目标平台的编译工具,gcc、g++、ld等。 将所需工具添加到环境变量,以便编译时编译系统能够获取到这些文件。 ``` export PATH=$PATH:${pwd}/x86_64-pc-linux-gnu/bin ``` > 内核版本和CPU架构也可以在群晖内进行验证: > 查看内核:`uname -a`。 > 查看CPU架构:`ls /sys/module/ |grep synobios`。 ### Nginx以及其依赖的源码下载 > 如果编译给本机使用,通过包管理器安装所需要依赖即可,但是编译指定目标平台的代码,依赖也需要编译成目标平台的,所以需要依赖源码。 > > 因为是打算给群晖编译的,所以版本上尽可能的贴近群晖使用的版本。 ``` cd /usr/local/src wget https://nginx.org/download/nginx-1.20.1.tar.gz wget https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.gz wget https://zlib.net/zlib-1.2.13.tar.gz wget https://www.openssl.org/source/openssl-1.1.1t.tar.gz ls *.tar.gz |xargs -n1 tar xzvf ``` ### 生成Makefile Nginx通过configure生成Makefile,在这里指定使用的gcc和g++为我们下载的工具链中的套件。 ``` ./configure --with-cc=x86_64-pc-linux-gnu-gcc \ --with-cpp=x86_64-pc-linux-gnu-g++ \ --with-pcre=../pcre-8.45 \ --with-zlib=../zlib-1.2.13 \ --with-openssl=../openssl-1.1.1t \ --with-threads \ --with-http_ssl_module ``` ### 编译 ``` make ``` 最终生成的二进制文件在当前nginx编译工作目录下的objs目录下。 ### 测试 上述并没有涉及动态模块的添加,但是和正常的nginx编译没有什么区别,只是conifure添加了两个参数,执行编译使用的工具链。 我在实践的时候,编译出的动态模块可以被群晖的Ningx正确加载。配置完虚拟主机后尝试访问,Ningx报403,后台日志显示为权限问题,但是无论我如何更改权限,始终无法正常访问,所以就放弃了。 由于群晖的Nginx没有办法通过`Nginx -V`看到编译选项,所以可能和编译出的模块之间存在一些不兼容。 尽管没有解决问题,但是实践还是很有意义,可以通过类似的方式,编译iperf3、tcping等工具,能减少对Docker的依赖。 Loading... 我想在NAS上通过Nginx的目录索引功能运行一个下载站。自带的autoindex不是很好看,所以用FancyIndex的Docker镜像部署。 刚好之前也研究过这个模块的编译,所以就想在群晖上利用原生的WebStation配置。最后是失败了,但是编译出的二进制和群晖是兼容的,因此记录一下,给其他工具的编译提供一些参考。 ### 系统平台 编译平台: Arch:x86_64 OS:Debian Buster 目标平台: Dev: DS920+ Arch:x86_64(J4125 GeminiLake) OS:DSM7.0 ### 交叉编译工具链下载 群晖开源项目:https://sourceforge.net/projects/dsgpl/ 我们需要的工具链在:https://sourceforge.net/projects/dsgpl/files/Tool%20Chain/。根据自己的系统版本和CPU架构,选择对应的工具链下载。 ``` cd /opt wget https://sourceforge.net/projects/dsgpl/files/Tool%20Chain/DSM%207.0.0%20Tool%20Chains/Intel%20x86%20Linux%204.4.180%20%28GeminiLake%29/geminilake-gcc750_glibc226_x86_64-GPL.txz tar xvf geminilake-gcc750_glibc226_x86_64-GPL.txz ``` 解压完成后会在bin目录下看到目标平台的编译工具,gcc、g++、ld等。 将所需工具添加到环境变量,以便编译时编译系统能够获取到这些文件。 ``` export PATH=$PATH:${pwd}/x86_64-pc-linux-gnu/bin ``` > 内核版本和CPU架构也可以在群晖内进行验证: > 查看内核:`uname -a`。 > 查看CPU架构:`ls /sys/module/ |grep synobios`。 ### Nginx以及其依赖的源码下载 > 如果编译给本机使用,通过包管理器安装所需要依赖即可,但是编译指定目标平台的代码,依赖也需要编译成目标平台的,所以需要依赖源码。 > > 因为是打算给群晖编译的,所以版本上尽可能的贴近群晖使用的版本。 ``` cd /usr/local/src wget https://nginx.org/download/nginx-1.20.1.tar.gz wget https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.gz wget https://zlib.net/zlib-1.2.13.tar.gz wget https://www.openssl.org/source/openssl-1.1.1t.tar.gz ls *.tar.gz |xargs -n1 tar xzvf ``` ### 生成Makefile Nginx通过configure生成Makefile,在这里指定使用的gcc和g++为我们下载的工具链中的套件。 ``` ./configure --with-cc=x86_64-pc-linux-gnu-gcc \ --with-cpp=x86_64-pc-linux-gnu-g++ \ --with-pcre=../pcre-8.45 \ --with-zlib=../zlib-1.2.13 \ --with-openssl=../openssl-1.1.1t \ --with-threads \ --with-http_ssl_module ``` ### 编译 ``` make ``` 最终生成的二进制文件在当前nginx编译工作目录下的objs目录下。 ### 测试 上述并没有涉及动态模块的添加,但是和正常的nginx编译没有什么区别,只是conifure添加了两个参数,执行编译使用的工具链。 我在实践的时候,编译出的动态模块可以被群晖的Ningx正确加载。配置完虚拟主机后尝试访问,Ningx报403,后台日志显示为权限问题,但是无论我如何更改权限,始终无法正常访问,所以就放弃了。 由于群晖的Nginx没有办法通过`Nginx -V`看到编译选项,所以可能和编译出的模块之间存在一些不兼容。 尽管没有解决问题,但是实践还是很有意义,可以通过类似的方式,编译iperf3、tcping等工具,能减少对Docker的依赖。 最后修改:2023 年 08 月 02 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 1 如果觉得我的文章对你有用,请随意赞赏