【LEDE】树莓派上玩LEDE终极指南-92-自己编译的LEDE为啥子不能用SSR和KoolProxy?
来源:互联网 发布:单片机数据类型 编辑:程序博客网 时间:2024/05/12 05:41
一直有个问题,我自己编译的所有的LEDE的固件,在我使用opkg安装完ssr或者kp之后,打开luci界面会出现:
attemp to call a nil field net.arptable (a nil value)
诸如这个消息。
当我使用潘多拉的固件或者是官方的固件的时候,发现是正常的,这个问题就不会出现,这是为啥来?
原因就在自己编译的LEDE固件的sys.lua文件和官方的这个文件不一样!!!
把自己的文件改一下:
-- Copyright 2008 Steven Barth <steven@midlink.org>-- Licensed to the public under the Apache License 2.0.local io = require "io"local os = require "os"local table = require "table"local nixio = require "nixio"local fs = require "nixio.fs"local uci = require "luci.model.uci"local luci = {}luci.util = require "luci.util"luci.ip = require "luci.ip"local tonumber, ipairs, pairs, pcall, type, next, setmetatable, require, select =tonumber, ipairs, pairs, pcall, type, next, setmetatable, require, selectmodule "luci.sys"function call(...)return os.execute(...) / 256endexec = luci.util.execfunction mounts()local data = {}local k = {"fs", "blocks", "used", "available", "percent", "mountpoint"}local ps = luci.util.execi("df")if not ps thenreturnelseps()endfor line in ps dolocal row = {}local j = 1for value in line:gmatch("[^%s]+") dorow[k[j]] = valuej = j + 1endif row[k[1]] then-- this is a rather ugly workaround to cope with wrapped lines in-- the df output:----/dev/scsi/host0/bus0/target0/lun0/part3-- 114382024 93566472 15005244 86% /mnt/usb--if not row[k[2]] thenj = 2line = ps()for value in line:gmatch("[^%s]+") dorow[k[j]] = valuej = j + 1endendtable.insert(data, row)endendreturn dataend-- containing the whole environment is returned otherwise this function returns-- the corresponding string value for the given name or nil if no such variable-- exists.getenv = nixio.getenvfunction hostname(newname)if type(newname) == "string" and #newname > 0 thenfs.writefile( "/proc/sys/kernel/hostname", newname )return newnameelsereturn nixio.uname().nodenameendendfunction httpget(url, stream, target)if not target thenlocal source = stream and io.popen or luci.util.execreturn source("wget -qO- '"..url:gsub("'", "").."'")elsereturn os.execute("wget -qO '%s' '%s'" %{target:gsub("'", ""), url:gsub("'", "")})endendfunction reboot()return os.execute("reboot >/dev/null 2>&1")endfunction syslog()return luci.util.exec("logread")endfunction dmesg()return luci.util.exec("dmesg")endfunction uniqueid(bytes)local rand = fs.readfile("/dev/urandom", bytes)return rand and nixio.bin.hexlify(rand)endfunction uptime()return nixio.sysinfo().uptimeendnet = {}--The following fields are defined for arp entry objects:--{ "IP address", "HW address", "HW type", "Flags", "Mask", "Device" }function net.arptable(callback)local arp = (not callback) and {} or nillocal e, r, vif fs.access("/proc/net/arp") thenfor e in io.lines("/proc/net/arp") dolocal r = { }, vfor v in e:gmatch("%S+") dor[#r+1] = vendif r[1] ~= "IP" thenlocal x = {["IP address"] = r[1],["HW type"] = r[2],["Flags"] = r[3],["HW address"] = r[4],["Mask"] = r[5],["Device"] = r[6]}if callback thencallback(x)elsearp = arp or { }arp[#arp+1] = xendendendendreturn arpendlocal function _nethints(what, callback)local _, k, e, mac, ip, namelocal cur = uci.cursor()local ifn = { }local hosts = { }local function _add(i, ...)local k = select(i, ...)if k thenif not hosts[k] then hosts[k] = { } endhosts[k][1] = select(1, ...) or hosts[k][1]hosts[k][2] = select(2, ...) or hosts[k][2]hosts[k][3] = select(3, ...) or hosts[k][3]hosts[k][4] = select(4, ...) or hosts[k][4]endendluci.ip.neighbors(nil, function(neigh)if neigh.mac and neigh.family == 4 then_add(what, neigh.mac:upper(), neigh.dest:string(), nil, nil)elseif neigh.mac and neigh.family == 6 then_add(what, neigh.mac:upper(), nil, neigh.dest:string(), nil)endend)if fs.access("/etc/ethers") thenfor e in io.lines("/etc/ethers") domac, ip = e:match("^([a-f0-9]%S+) (%S+)")if mac and ip then_add(what, mac:upper(), ip, nil, nil)endendendcur:foreach("dhcp", "dnsmasq",function(s)if s.leasefile and fs.access(s.leasefile) thenfor e in io.lines(s.leasefile) domac, ip, name = e:match("^%d+ (%S+) (%S+) (%S+)")if mac and ip then_add(what, mac:upper(), ip, nil, name ~= "*" and name)endendendend)cur:foreach("dhcp", "host",function(s)for mac in luci.util.imatch(s.mac) do_add(what, mac:upper(), s.ip, nil, s.name)endend)for _, e in ipairs(nixio.getifaddrs()) doif e.name ~= "lo" thenifn[e.name] = ifn[e.name] or { }if e.family == "packet" and e.addr and #e.addr == 17 thenifn[e.name][1] = e.addr:upper()elseif e.family == "inet" thenifn[e.name][2] = e.addrelseif e.family == "inet6" thenifn[e.name][3] = e.addrendendendfor _, e in pairs(ifn) doif e[what] and (e[2] or e[3]) then_add(what, e[1], e[2], e[3], e[4])endendfor _, e in luci.util.kspairs(hosts) docallback(e[1], e[2], e[3], e[4])endend-- Each entry contains the values in the following order:-- [ "mac", "name" ]function net.mac_hints(callback)if callback then_nethints(1, function(mac, v4, v6, name)name = name or nixio.getnameinfo(v4 or v6, nil, 100) or v4if name and name ~= mac thencallback(mac, name or nixio.getnameinfo(v4 or v6, nil, 100) or v4)endend)elselocal rv = { }_nethints(1, function(mac, v4, v6, name)name = name or nixio.getnameinfo(v4 or v6, nil, 100) or v4if name and name ~= mac thenrv[#rv+1] = { mac, name or nixio.getnameinfo(v4 or v6, nil, 100) or v4 }endend)return rvendend-- Each entry contains the values in the following order:-- [ "ip", "name" ]function net.ipv4_hints(callback)if callback then_nethints(2, function(mac, v4, v6, name)name = name or nixio.getnameinfo(v4, nil, 100) or macif name and name ~= v4 thencallback(v4, name)endend)elselocal rv = { }_nethints(2, function(mac, v4, v6, name)name = name or nixio.getnameinfo(v4, nil, 100) or macif name and name ~= v4 thenrv[#rv+1] = { v4, name }endend)return rvendend-- Each entry contains the values in the following order:-- [ "ip", "name" ]function net.ipv6_hints(callback)if callback then_nethints(3, function(mac, v4, v6, name)name = name or nixio.getnameinfo(v6, nil, 100) or macif name and name ~= v6 thencallback(v6, name)endend)elselocal rv = { }_nethints(3, function(mac, v4, v6, name)name = name or nixio.getnameinfo(v6, nil, 100) or macif name and name ~= v6 thenrv[#rv+1] = { v6, name }endend)return rvendendfunction net.host_hints(callback)if callback then_nethints(1, function(mac, v4, v6, name)if mac and mac ~= "00:00:00:00:00:00" and (v4 or v6 or name) thencallback(mac, v4, v6, name)endend)elselocal rv = { }_nethints(1, function(mac, v4, v6, name)if mac and mac ~= "00:00:00:00:00:00" and (v4 or v6 or name) thenlocal e = { }if v4 then e.ipv4 = v4 endif v6 then e.ipv6 = v6 endif name then e.name = name endrv[mac] = eendend)return rvendendfunction net.conntrack(callback)local ok, nfct = pcall(io.lines, "/proc/net/nf_conntrack")if not ok or not nfct thenreturn nilendlocal line, connt = nil, (not callback) and { }for line in nfct dolocal fam, l3, l4, timeout, tuples =line:match("^(ipv[46]) +(%d+) +%S+ +(%d+) +(%d+) +(.+)$")if fam and l3 and l4 and timeout and not tuples:match("^TIME_WAIT ") thenl4 = nixio.getprotobynumber(l4)local entry = {bytes = 0,packets = 0,layer3 = fam,layer4 = l4 and l4.name or "unknown",timeout = tonumber(timeout, 10)}local key, valfor key, val in tuples:gmatch("(%w+)=(%S+)") doif key == "bytes" or key == "packets" thenentry[key] = entry[key] + tonumber(val, 10)elseif key == "src" or key == "dst" thenif entry[key] == nil thenentry[key] = luci.ip.new(val):string()endelseif key == "sport" or key == "dport" thenif entry[key] == nil thenentry[key] = valendelseif val thenentry[key] = valendendif callback thencallback(entry)elseconnt[#connt+1] = entryendendendreturn callback and true or conntendfunction net.devices()local devs = {}for k, v in ipairs(nixio.getifaddrs()) doif v.family == "packet" thendevs[#devs+1] = v.nameendendreturn devsendfunction net.deviceinfo()local devs = {}for k, v in ipairs(nixio.getifaddrs()) doif v.family == "packet" thenlocal d = v.datad[1] = d.rx_bytesd[2] = d.rx_packetsd[3] = d.rx_errorsd[4] = d.rx_droppedd[5] = 0d[6] = 0d[7] = 0d[8] = d.multicastd[9] = d.tx_bytesd[10] = d.tx_packetsd[11] = d.tx_errorsd[12] = d.tx_droppedd[13] = 0d[14] = d.collisionsd[15] = 0d[16] = 0devs[v.name] = dendendreturn devsend--The following fields are defined for route entry tables:--{ "dest", "gateway", "metric", "refcount", "usecount", "irtt",-- "flags", "device" }function net.routes(callback)local routes = { }for line in io.lines("/proc/net/route") dolocal dev, dst_ip, gateway, flags, refcnt, usecnt, metric, dst_mask, mtu, win, irtt = line:match("([^%s]+)\t([A-F0-9]+)\t([A-F0-9]+)\t([A-F0-9]+)\t" .."(%d+)\t(%d+)\t(%d+)\t([A-F0-9]+)\t(%d+)\t(%d+)\t(%d+)")if dev thengateway = luci.ip.Hex( gateway, 32, luci.ip.FAMILY_INET4 )dst_mask = luci.ip.Hex( dst_mask, 32, luci.ip.FAMILY_INET4 )dst_ip = luci.ip.Hex(dst_ip, dst_mask:prefix(dst_mask), luci.ip.FAMILY_INET4)local rt = {dest = dst_ip,gateway = gateway,metric = tonumber(metric),refcount = tonumber(refcnt),usecount = tonumber(usecnt),mtu = tonumber(mtu),window = tonumber(window),irtt = tonumber(irtt),flags = tonumber(flags, 16),device = dev}if callback thencallback(rt)elseroutes[#routes+1] = rtendendendreturn routesend--The following fields are defined for route entry tables:--{ "source", "dest", "nexthop", "metric", "refcount", "usecount",-- "flags", "device" }function net.routes6(callback)if fs.access("/proc/net/ipv6_route", "r") thenlocal routes = { }for line in io.lines("/proc/net/ipv6_route") dolocal dst_ip, dst_prefix, src_ip, src_prefix, nexthop, metric, refcnt, usecnt, flags, dev = line:match("([a-f0-9]+) ([a-f0-9]+) " .."([a-f0-9]+) ([a-f0-9]+) " .."([a-f0-9]+) ([a-f0-9]+) " .."([a-f0-9]+) ([a-f0-9]+) " .."([a-f0-9]+) +([^%s]+)")if dst_ip and dst_prefix and src_ip and src_prefix and nexthop and metric and refcnt and usecnt and flags and devthensrc_ip = luci.ip.Hex(src_ip, tonumber(src_prefix, 16), luci.ip.FAMILY_INET6, false)dst_ip = luci.ip.Hex(dst_ip, tonumber(dst_prefix, 16), luci.ip.FAMILY_INET6, false)nexthop = luci.ip.Hex( nexthop, 128, luci.ip.FAMILY_INET6, false )local rt = {source = src_ip,dest = dst_ip,nexthop = nexthop,metric = tonumber(metric, 16),refcount = tonumber(refcnt, 16),usecount = tonumber(usecnt, 16),flags = tonumber(flags, 16),device = dev,-- lua number is too small for storing the metric-- add a metric_raw field with the original contentmetric_raw = metric}if callback thencallback(rt)elseroutes[#routes+1] = rtendendendreturn routesendendfunction net.pingtest(host)return os.execute("ping -c1 '"..host:gsub("'", '').."' >/dev/null 2>&1")endprocess = {}function process.info(key)local s = {uid = nixio.getuid(), gid = nixio.getgid()}return not key and s or s[key]endfunction process.list()local data = {}local klocal ps = luci.util.execi("/bin/busybox top -bn1")if not ps thenreturnendfor line in ps dolocal pid, ppid, user, stat, vsz, mem, cpu, cmd = line:match("^ *(%d+) +(%d+) +(%S.-%S) +([RSDZTW][W ][<N ]) +(%d+) +(%d+%%) +(%d+%%) +(.+)")local idx = tonumber(pid)if idx thendata[idx] = {['PID'] = pid,['PPID'] = ppid,['USER'] = user,['STAT'] = stat,['VSZ'] = vsz,['%MEM'] = mem,['%CPU'] = cpu,['COMMAND'] = cmd}endendreturn dataendfunction process.setgroup(gid)return nixio.setgid(gid)endfunction process.setuser(uid)return nixio.setuid(uid)endprocess.signal = nixio.killuser = {}--{ "uid", "gid", "name", "passwd", "dir", "shell", "gecos" }user.getuser = nixio.getpwfunction user.getpasswd(username)local pwe = nixio.getsp and nixio.getsp(username) or nixio.getpw(username)local pwh = pwe and (pwe.pwdp or pwe.passwd)if not pwh or #pwh < 1 or pwh == "!" or pwh == "x" thenreturn nil, pweelsereturn pwh, pweendendfunction user.checkpasswd(username, pass)local pwh, pwe = user.getpasswd(username)if pwe thenreturn (pwh == nil or nixio.crypt(pass, pwh) == pwh)endreturn falseendfunction user.setpasswd(username, password)if password thenpassword = password:gsub("'", [['"'"']])endif username thenusername = username:gsub("'", [['"'"']])endreturn os.execute("(echo '" .. password .. "'; sleep 1; echo '" .. password .. "') | " .."passwd '" .. username .. "' >/dev/null 2>&1")endwifi = {}function wifi.getiwinfo(ifname)local stat, iwinfo = pcall(require, "iwinfo")if ifname thenlocal d, n = ifname:match("^(%w+)%.network(%d+)")local wstate = luci.util.ubus("network.wireless", "status") or { }d = d or ifnamen = n and tonumber(n) or 1if type(wstate[d]) == "table" and type(wstate[d].interfaces) == "table" and type(wstate[d].interfaces[n]) == "table" and type(wstate[d].interfaces[n].ifname) == "string"thenifname = wstate[d].interfaces[n].ifnameelseifname = dendlocal t = stat and iwinfo.type(ifname)local x = t and iwinfo[t] or { }return setmetatable({}, {__index = function(t, k)if k == "ifname" thenreturn ifnameelseif x[k] thenreturn x[k](ifname)endend})endendinit = {}init.dir = "/etc/init.d/"function init.names()local names = { }for name in fs.glob(init.dir.."*") donames[#names+1] = fs.basename(name)endreturn namesendfunction init.index(name)if fs.access(init.dir..name) thenreturn call("env -i sh -c 'source %s%s enabled; exit ${START:-255}' >/dev/null"%{ init.dir, name })endendlocal function init_action(action, name)if fs.access(init.dir..name) thenreturn call("env -i %s%s %s >/dev/null" %{ init.dir, name, action })endendfunction init.enabled(name)return (init_action("enabled", name) == 0)endfunction init.enable(name)return (init_action("enable", name) == 1)endfunction init.disable(name)return (init_action("disable", name) == 0)endfunction init.start(name)return (init_action("start", name) == 0)endfunction init.stop(name)return (init_action("stop", name) == 0)end
就是那里net那里,改一下。或者直接把所有的代码复制进去就行。
阅读全文
0 0
- 【LEDE】树莓派上玩LEDE终极指南-92-自己编译的LEDE为啥子不能用SSR和KoolProxy?
- 【LEDE】树莓派上玩LEDE终极指南-1-LEDE的编译和安装
- 【LEDE】树莓派上玩LEDE终极指南-99-编译psutil,安装thefuck
- 【LEDE】树莓派上玩LEDE终极指南-90-挂卡
- 【LEDE】树莓派上玩LEDE终极指南-98-Node.js和NPM在LEDE上存在的问题和解决方案
- 【LEDE】树莓派上玩LEDE终极指南-96-树莓派上LEDE挂卡只能半速的解决方法
- 【LEDE】树莓派上玩LEDE终极指南-2-善用overlay挂载点
- 【LEDE】树莓派上玩LEDE终极指南-3-更改时区
- 【LEDE】树莓派上玩LEDE终极指南-93-搭建MySQL Server
- 【LEDE】树莓派上玩LEDE终极指南-91-移植MariaDB到LEDE上
- 【LEDE】树莓派上玩LEDE终极指南-95-Aria2不能下载https的解决方法
- 【LEDE】树莓派上玩LEDE终极指南-97-自动挂载sdX(U盘、移动硬盘等)
- 【LEDE】树莓派上玩LEDE终极指南-94-在树莓派上搭建NextCloud私人云存储注意事项
- 【LEDE】树莓派上玩LEDE终极指南-91-no address range available for DHCP request via xxx解决办法
- 个性化编译LEDE
- 编译LEDE-Openwrt系统
- LEDE SAMBA
- lede编译freeradius2时遇到的错误解决方法
- WOJ1013-Bracelet
- [转载]Looks like the Spring listener was not configured for your web app
- web前端素材整理汇总
- Linux操作系统常用命令总结
- 模糊查询
- 【LEDE】树莓派上玩LEDE终极指南-92-自己编译的LEDE为啥子不能用SSR和KoolProxy?
- OS实现裁剪框和图片剪裁功能
- 一个基础简单的内网nodejs服务器
- nagios监控++服务端、客户端
- MySQL-外键约束的参照操作
- Android apk包生成二维码给他人体验
- SwipeRefreshLayout和ViewPager滑动冲突的原因和正确的解决方式
- poj 1833 排列
- ubuntu16.04安装torch