1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
-- acf model for packages (apk)
module (..., package.seeall)
require("getopts")
local configfile = "/etc/apk/apk.conf"
get_all_packages = function()
-- read in all of the packages
local cmd = "/sbin/apk_fetch -l 2>/dev/null"
local f = io.popen( cmd )
local all = {}
for line in f:lines() do all[#all + 1] = line end
f:close()
return cfe({ type="list", value=all, label="All Packages"})
end
get_loaded_packages = function()
-- read in the loaded packages
local cmd = "/sbin/apk_info 2>/dev/null"
local f = io.popen( cmd )
local loaded = {}
for line in f:lines() do
local temp = {}
temp.name = string.match(line, "(.-)-%d+.*")
temp.version, temp.description = string.match(line, "([^ ]+) %- (.+)")
loaded[#loaded+1] = temp
end
return cfe({ type="list", value=loaded, label="Loaded Packages"})
end
get_available_packages = function(_loaded_cfe, _all_cfe)
-- available are all except loaded
local loaded_cfe = _loaded_cfe or get_loaded_packages()
local all_cfe = _all_cfe or get_all_packages()
local loaded = loaded_cfe.value
local all = all_cfe.value
local available = {}
local reverseloaded = {}
for i,packagetable in ipairs(loaded) do reverseloaded[packagetable.name] = i end
for i,package in ipairs(all) do
if (reverseloaded[package]==nil) then available[#available + 1] = package end
end
return cfe({ type="list", value=available, label="Available Packages" })
end
get_packages = function()
local loaded = get_loaded_packages()
local available = get_available_packages(loaded)
return cfe({ type="group", value={loaded=loaded, available=available} })
end
delete_package = function(package, sessiondata)
local cmdresult = "Delete failed - Invalid package"
local loaded = get_loaded_packages()
for i,pack in pairs(loaded.value) do
if pack.name == package then
local cmd = "/sbin/apk_delete " .. package .. " 2>&1"
local f = io.popen( cmd )
cmdresult = f:read("*a") or ""
f:close()
-- Destroy menu and permissions info in session so recalculated
if sessiondata then sessiondata.menu = nil end
if sessiondata then sessiondata.permissions = nil end
end
end
return cfe({ value=cmdresult, label="Result of Delete" })
end
install_package = function(package,sessiondata)
local cmdresult = "Install failed - Invalid package"
local available = get_available_packages()
for i,pack in pairs(available.value) do
if pack == package then
local cmd = "PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin apk_get install " .. package .. " 2>&1"
local f = io.popen( cmd )
cmdresult = f:read("*a")
f:close()
-- Destroy menu and permissions info in session so recalculated
if sessiondata then sessiondata.menu = nil end
if sessiondata then sessiondata.permissions = nil end
end
end
return cfe({ value=cmdresult, label="Result of Install" })
end
get_config = function()
local config = getopts.getoptsfromfile(configfile, "")
local source = cfe({ value=config.APK_PATH or "", label="APK Source" })
return cfe({ type="group", value={source=source}, label="APK Config" })
end
set_config = function(newconfig)
-- FIXME - don't know how to validate
if not getopts.setoptsinfile(configfile, "", "APK_PATH", newconfig.value.source.value) then
newconfig.errtxt = "Failed to update config"
end
return newconfig
end
|