module("luci.controller.opkg", package.seeall)
-function index()
- entry({"admin", "system", "opkg"}, template("opkg"), _("Software"), 30)
- entry({"admin", "system", "opkg", "list"}, call("action_list")).leaf = true
- entry({"admin", "system", "opkg", "exec"}, post("action_exec")).leaf = true
- entry({"admin", "system", "opkg", "statvfs"}, call("action_statvfs")).leaf = true
- entry({"admin", "system", "opkg", "config"}, post_on({ data = true }, "action_config")).leaf = true
-end
-
function action_list(mode)
+ local util = require "luci.util"
local cmd
if mode == "installed" then
cmd = { "/bin/cat", "/usr/lib/opkg/status" }
else
- cmd = { "/bin/sh", "-c", [[find /tmp/opkg-lists/ -type f '!' -name '*.sig' | xargs -r gzip -cd]] }
+ local lists_dir = nil
+
+ local fd = io.popen([[sed -rne 's#^lists_dir \S+ (\S+)#\1#p' /etc/opkg.conf /etc/opkg/*.conf 2>/dev/null]], "r")
+ if fd then
+ lists_dir = fd:read("*l")
+ fd:close()
+ end
+
+ if not lists_dir or #lists_dir == 0 then
+ lists_dir = "/tmp/opkg-lists"
+ end
+
+ cmd = { "/bin/sh", "-c", [[find %s -type f '!' -name '*.sig' | xargs -r gzip -cd]] % util.shellquote(lists_dir) }
end
luci.http.prepare_content("text/plain; charset=utf-8")
function action_exec(command, package)
local sys = require "luci.sys"
- local cmd = { "/bin/opkg", "--force-removal-of-dependent-packages", "--force-overwrite" }
+ local cmd = { "/bin/opkg", "--force-removal-of-dependent-packages" }
local pkg = luci.http.formvalue("package")
if luci.http.formvalue("autoremove") == "true" then
cmd[#cmd + 1] = "--autoremove"
end
+ if luci.http.formvalue("overwrite") == "true" then
+ cmd[#cmd + 1] = "--force-overwrite"
+ end
+
cmd[#cmd + 1] = command
if pkg then