openwrt-安装NGINX
介绍
OpenWrt 是一个用于嵌入式设备的开源操作系统。它基于 Linux 内核,并且主要被设计用于路由器和网络设备。
OpenWrt 的主要特点包括:
-
完全可定制:OpenWrt 提供了一个完全可写的文件系统,用户可以自定义设备的行为。相比其他嵌入式操作系统,OpenWrt 更加灵活和强大。
-
软件包管理:OpenWrt 提供了一个内置的包管理系统,用户可以安装或者卸载额外的软件包。这使得用户可以根据需要定制设备的功能。
-
丰富的功能:默认情况下,OpenWrt 提供了很多用于网络设备的功能,如防火墙、QoS(服务质量)、IPv6 支持、路由协议支持、VPN、DNS、DHCP 等。
-
开源:OpenWrt 是开源的,这意味着任何人都可以查看和修改它的源代码。这使得用户可以定制设备的行为,或者添加新的功能。
-
活跃的社区:OpenWrt 有一个活跃的开发和用户社区,用户可以从社区获取帮助,或者分享他们的经验和知识。
这里我需要使用NGINX,接下来介绍如何在openwrt上安装NGINX
安装
查看系统版本
cat /etc/openwrt_release
这段信息是 OpenWRT 系统的版本和硬件信息。解释如下:
-
DISTRIB_ID:这是你的操作系统的名称,这里是 OpenWrt。
-
DISTRIB_RELEASE:这是你的 OpenWrt 版本的发行代号,这里是 SNAPSHOT,表示这是开发版本。
-
DISTRIB_TARGET:这是 OpenWrt 的目标平台或体系结构,这里是 ‘rockchip/armv8’,意味着这个固件是为 rockchip 平台的 ARMv8 架构编译的。
-
DISTRIB_ARCH:这是 OpenWrt 的目标硬件架构,这里是 ‘aarch64_generic’,表示这个固件是为通用的 64 位 ARM 架构编译的。
-
DISTRIB_TAINTS:这是内核的 “污点”,用来表示可能影响内核稳定性或安全性的因素。‘no-all’ 表示没有这样的因素。
-
DISTRIB_REVISION:这是 OpenWrt 的修订版本,这里是 ‘R22.11.13’。
-
DISTRIB_DESCRIPTION:这是 OpenWrt 的描述信息,这里只有 'OpenWrt ',可能是由于这是一个开发快照版本,所以没有更多的描述信息。
使用的是 OpenWrt 的一个开发版本,针对 rockchip 平台的 ARMv8 架构编译,没有任何已知的内核问题。
修改系统镜像源
在国内,由于网络问题,使用海外的软件源可能会比较慢,所以更改为国内的镜像源。这里我使用的是腾讯的镜像源:
vi /etc/opkg/distfeeds.conf
具体内容如下:
src/gz openwrt_core https://mirrors.cloud.tencent.com/openwrt/releases/22.03.0/targets/rockchip/armv8/packages
src/gz openwrt_base https://mirrors.cloud.tencent.com/openwrt/releases/22.03.0/packages/aarch64_generic/base
src/gz openwrt_luci https://mirrors.cloud.tencent.com/openwrt/releases/22.03.0/packages/aarch64_generic/luci
src/gz openwrt_packages https://mirrors.cloud.tencent.com/openwrt/releases/22.03.0/packages/aarch64_generic/packages
src/gz openwrt_routing https://mirrors.cloud.tencent.com/openwrt/releases/22.03.0/packages/aarch64_generic/routing
src/gz openwrt_telephony https://mirrors.cloud.tencent.com/openwrt/releases/22.03.0/packages/aarch64_generic/telephony
最后,更新 opkg 的软件包列表:
opkg update
卸载之前的版本
opkg remove --force-removal-of-dependent-packages nginx-util
opkg remove nginx nginx-util
安装NGINX
opkg install nginx
报错问题
Error relocating /usr/bin/nginx-util: _ZNSt15__exception_ptr13exception_ptr9_M_addrefEv: symbol not found
Error relocating /usr/bin/nginx-util: _ZSt28__throw_bad_array_new_lengthv: symbol not found
Error relocating /usr/bin/nginx-util: _ZNSt15__exception_ptr13exception_ptr10_M_releaseEv: symbol not found
Error relocating /usr/bin/nginx-util: _ZNSsC1ENSs12__sv_wrapperERKSaIcE: symbol not found
Error relocating /usr/bin/nginx-util: _ZNSt15__exception_ptr13exception_ptr9_M_addrefEv: symbol not found
Error relocating /usr/bin/nginx-util: _ZSt28__throw_bad_array_new_lengthv: symbol not found
Error relocating /usr/bin/nginx-util: _ZNSt15__exception_ptr13exception_ptr10_M_releaseEv: symbol not found
Error relocating /usr/bin/nginx-util: _ZNSsC1ENSs12__sv_wrapperERKSaIcE: symbol not found
nginx_init: NOT using conf file!
可能出现这个问题的一个原因是你的设备缺少这个库文件,或者这个库文件的版本和 nginx-util 不兼容。在 C++ 程序中,这些符号通常是由某个 C++ 标准库提供的。从错误信息来看,这些符号看起来是由 C++ 的 std::string
类和 std::__exception_ptr::exception_ptr
类提供的。
opkg remove libstdcpp
opkg update
opkg install libstdcpp
编辑nginx.conf文件
把默认配置文件改名,/etc/nginx/uci.conf改成uci.conf.bak
然后新建一个文件nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 8000;
server_name localhost;
location / {
root /data/nginxweb/html;
index index.html index.htm;
}
}
}
启动nginx并加入自动启动
chmod +x /etc/init.d/nginx
/etc/init.d/nginx enable
/etc/init.d/nginx start
效果
这里拷贝了openResty的index.html页面,可以指定为自己的