AX5安装原生luci记录

AX5安装原生luci折腾记录

一、前言

AX5官方固件基于 Openwrt 18.06 Snapshot 修改;

小米官方固件web界面使用 nginx + 修改版luci 提供服务。

小米固件自带uhttpd,但没有使用。

期望目标:安装原生luci,且不影响小米web界面。

二、 实施步骤

2.1 手动下载ipk,解压文件

由于小米固件已经有修改版luci,因此不能使用opkg在线安装,否则会覆盖掉。

Openwrt官方源 下载如下ipk包,下面是列好的 luci 依赖情况(重复的已剔除)。

luci
    -> libc
    -> uhttpd
        -> libubox
        -> libblobmsg-json
            -> libjson-c
        -> libjson-script
    -> luci-mod-admin-full
        -> luci-base
            -> lua
                -> liblua
            -> luci-lib-nixio
            -> luci-lib-ip
                -> libnl-tiny
            -> luci-lib-jsonc
            -> liblucihttp-lua
                -> liblucihttp
            -> libubus-lua
                -> libubus
            -> rpcd
                -> libuci
    -> luci-theme-bootstrap
    -> luci-app-firewall
        -> firewall
            -> libip4tc             官方源没有
            -> libip6tc             官方源没有
            -> libxtables           官方源没有
            -> kmod-ipt-core        官方源没有
            -> kmod-ipt-conntrack   官方源没有
            -> kmod-nf-conntrack6   官方源没有
            -> kmod-ipt-nat         官方源没有
    -> luci-proto-ppp
    -> luci-proto-ipv6
    -> rpcd-mod-rrdns
    -> libiwinfo-lua 官方源没有(官方源21.02的有,19.07、18.06等都没有)

主要需要下载的是:

luci-mod-admin-full、luci-base、luci-lib-nixio、luci-lib-ip、luci-lib-jsonc、liblucihttp-lua、liblucihttp、luci-theme-bootstrap、luci-app-firewall、luci-proto-ppp、luci-proto-ipv6

下载到自己电脑后,然后把每个包里面的data解压出来,按照路径合并到一起。

大概会得到类似下面的文件夹 (我下载了所有能下的包,用来尝试)

etc
	config
	hotplug.d
	init.d
	luci-uploads
	uci-defaults
lib
sbin
usr
	bin
	lib
	sbin
	share
www
	cgi-bin
	luci-static
	

2.2 修改文件

把下面代码添加到 usr/lib/lua/luci/sgi/uhttpd.lua 开头,也就是 require 语句前面。

if ( not string.find(package.path, "/data/usr/lib/lua/?.lua") )
then
package.path="./?.lua;/data/usr/lib/lua/?.lua;/usr/share/lua/?.lua;/usr/share/lua/?/init.lua;/usr/lib/lua/?.lua;/usr/lib/lua/?/init.lua"
end
if ( not string.find(package.cpath, "/data/usr/lib/lua/?.so") )
then
package.cpath="./?.so;/data/usr/lib/lua/?.so;/usr/lib/lua/?.so;/usr/lib/lua/loadall.so"
end

这个操作是手动指定lua库搜索路径,因为我们自己的luci相关lua文件将来是在 /data/usr/lib/lua/luci下的。要让他优先用我们自己的,没有的再去 /usr/lib/lua 下面找(也就是使用小米固件中的一部分库)

同样的操作对 usr/lib/lua/luci/sgi/cgi.lua 、www/cgi-bin/luci 也加上。

把 www/cgi-bin/luci 中 luci.dispatcher.indexcache = "/tmp/luci-indexcache" 改个名字,例如:luci.dispatcher.indexcache = "/tmp/luci-indexcache_forme"

把 etc/config/luci 重命名为 luci_op,防止和小米的luci冲突

把 usr/lib/lua/luci/config.lua 中,get_all("luci", key) 改为 get_all("luci_op", key)

把 etc/uci-defaults/30_luci-theme-bootstrap、etc/uci_defaults/50_luci-mod-admin-full 中的uci 语句中 的luci 配置项 替换为 luci_op

编辑 etc/config/uhttpd,替换为以下内容。


config uhttpd 'main'
	list listen_http '0.0.0.0:678'
	list listen_http '[::]:678'
	list listen_https '0.0.0.0:789'
	list listen_https '[::]:789'
	option redirect_https '0'
	option home '/data/www'
	option rfc1918_filter '1'
	option max_connections '100'
	option cert '/etc/uhttpd.crt'
	option key '/etc/uhttpd.key'
	option cgi_prefix '/cgi-bin'
	list lua_prefix '/cgi-bin/luci=/data/usr/lib/lua/luci/sgi/uhttpd.lua'
	option network_timeout '30'
	option http_keepalive '20'
	option tcp_keepalive '1'
	option ubus_prefix '/ubus'
	option ubus_socket	'/var/run/ubus.sock'
    option script_timeout '3600'
	list index_page 'cgi-bin/luci'
	option max_requests '50'


config cert 'defaults'
	option days '730'
	option key_type 'ec'
	option bits '2048'
	option ec_curve 'P-256'
	option country 'ZZ'
	option state 'Somewhere'
	option location 'Unknown'
	option commonname 'OpenWrt'


编辑 /etc/config/luci_op,把其中 option sessionpath "/tmp/luci-sessions" 改个名,例如:option sessionpath "/tmp/luci-sessions_forme"

2.3 复制文件到AX5

把整理好的文件(夹) 按照以下原则 全部复制到AX5。

  1. /etc/config/uhttpd 可以直接覆盖,因为小米固件不使用uhttpd。
  2. 本机 usr/lib/lua文件夹复制到 /data/usr/lib/lua
  3. 本机 www文件夹复制到 /data/www
  4. 其余文件按照对应路径复制到根目录下对应文件夹,小米固件已经有同名文件的,不要复制,跳过。

注意,二进制文件以及那些需要直接执行的脚本文件记得加上 可执行权限,不清楚的可无脑全加。

三、 测试

/etc/init.d/uhttpd restart

浏览器访问 http://192.168.31.1:678

结果:

勉强打开登陆页面,但是点击登陆没反应。

四、更新

尝试lighttpd,问题依然如上。
经过分析,是webserver没有正确把表单传递给luci脚本,在/data/usr/lib/lua/luci/dispatcher.lua中添加log输出,发现获取表单的 user、pass均为nil。
如何解决,还没有办法。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值