summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTed Trask <ttrask01@yahoo.com>2008-10-11 12:57:42 +0000
committerTed Trask <ttrask01@yahoo.com>2008-10-11 12:57:42 +0000
commit040350eced7897f52402c466d14378ca62cf00b1 (patch)
tree5e62bfed641d1ee9551a114b869cd419019a6796
parent5ff7837be35aab168c05a6efc0e5945e2f664b63 (diff)
downloadacf-core-040350eced7897f52402c466d14378ca62cf00b1.tar.bz2
acf-core-040350eced7897f52402c466d14378ca62cf00b1.tar.xz
Added rc controller to alpine-baselayout and rc functionality to processinfo library. Changed status Enabled/Disabled to Running/Stopped. Added links to status pages to install package and schedule autostart.
git-svn-id: svn://svn.alpinelinux.org/acf/core/trunk@1552 ab2d0c66-481e-0410-8bed-d214d4d58bed
-rw-r--r--app/startstop-html.lsp6
-rw-r--r--app/status-html.lsp14
-rw-r--r--lib/modelfunctions.lua16
-rw-r--r--lib/processinfo.lua81
4 files changed, 103 insertions, 14 deletions
diff --git a/app/startstop-html.lsp b/app/startstop-html.lsp
index acacec0..cbe4d5f 100644
--- a/app/startstop-html.lsp
+++ b/app/startstop-html.lsp
@@ -5,9 +5,9 @@
<form action="<%= page_info.script .. page_info.prefix .. page_info.controller .. "/" .. page_info.action %>" method="POST">
<DT>Program control-panel</DT>
<DD>
-<input class="submit" type="submit" name="action" value="Start" <% if data.value.status.value== "Enabled" then io.write("disabled") end %>>
-<input class="submit" type="submit" name="action" value="Stop" <% if data.value.status.value== "Disabled" then io.write("disabled") end %>>
-<input class="submit" type="submit" name="action" value="Restart" <% if data.value.status.value== "Disabled" then io.write("disabled") end %>>
+<input class="submit" type="submit" name="action" value="Start" <% if data.value.status.value== "Running" then io.write("disabled") end %>>
+<input class="submit" type="submit" name="action" value="Stop" <% if data.value.status.value== "Stopped" then io.write("disabled") end %>>
+<input class="submit" type="submit" name="action" value="Restart" <% if data.value.status.value== "Stopped" then io.write("disabled") end %>>
</DD>
</form>
diff --git a/app/status-html.lsp b/app/status-html.lsp
index 4cb693f..d5bdad0 100644
--- a/app/status-html.lsp
+++ b/app/status-html.lsp
@@ -1,12 +1,24 @@
-<% local data = ...
+<% local data, viewlibrary, page_info, session = ...
require("viewfunctions")
%>
+<% displaycommandresults({"install"}, session) %>
+
<H1>System Info</H1>
<DL>
<%
displayitem(data.value.status)
+
displayitem(data.value.version)
+if data.value.version and data.value.version.errtxt and session.permissions.apk and session.permissions.apk.install then
+%>
+ <a href="<%= page_info.script .. "/apk-tools/apk/install?package="..data.value.version.name %>">Install</a>
+<%
+end
+
displayitem(data.value.autostart)
+if not (data.value.version and data.value.version.errtxt) and data.value.autostart and data.value.autostart.errtxt and session.permissions.rc and session.permissions.rc.edit then
%>
+ <a href="<%= page_info.script .. "/alpine-baselayout/rc/edit?servicename="..data.value.autostart.name %>">Schedule autostart</a>
+<% end %>
</DL>
diff --git a/lib/modelfunctions.lua b/lib/modelfunctions.lua
index 1448588..d94db78 100644
--- a/lib/modelfunctions.lua
+++ b/lib/modelfunctions.lua
@@ -6,23 +6,23 @@ require("format")
require("processinfo")
function getenabled(processname)
- local result = cfe({ label = "Program status" })
+ local result = cfe({ label = "Program status", name=processname })
local t = processinfo.pidof(processname)
if (t) and (#t > 0) then
- result.value = "Enabled"
+ result.value = "Running"
else
- result.value = "Disabled"
+ result.value = "Stopped"
end
return result
end
-function startstop_service(initname, action)
+function startstop_service(servicename, action)
-- action is validated in daemoncontrol
- local cmdmessage,cmderror = processinfo.daemoncontrol(initname, action)
+ local cmdmessage,cmderror = processinfo.daemoncontrol(servicename, action)
return cfe({ value=cmdmessage or "", errtxt=cmderror, label="Start/Stop result" })
end
-function getstatus(processname, packagename, label, initname)
+function getstatus(processname, packagename, label, servicename)
local status = {}
local value, errtxt = processinfo.package_version(packagename)
@@ -30,15 +30,17 @@ function getstatus(processname, packagename, label, initname)
label="Program version",
value=value,
errtxt=errtxt,
+ name=packagename
})
status.status = getenabled(processname)
- local autostart_sequence, autostart_errtxt = processinfo.process_botsequence(initname or processname)
+ local autostart_sequence, autostart_errtxt = processinfo.process_startupsequence(servicename or processname)
status.autostart = cfe({
label="Autostart sequence",
value=autostart_sequence,
errtxt=autostart_errtxt,
+ name=servicename or processname
})
return cfe({ type="group", value=status, label=label })
diff --git a/lib/processinfo.lua b/lib/processinfo.lua
index e1eca4e..33ece60 100644
--- a/lib/processinfo.lua
+++ b/lib/processinfo.lua
@@ -3,6 +3,8 @@ module(..., package.seeall)
require("posix")
+local path = "PATH=/usr/bin:/bin:/usr/sbin:/sbin "
+
function package_version(packagename)
local cmderrors
local f = io.popen( "PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin apk_version -vs " .. packagename .." | egrep -v 'acf' 2>/dev/null" )
@@ -16,12 +18,12 @@ function package_version(packagename)
return cmdresult,cmderrors
end
-function process_botsequence(processname)
+function process_startupsequence(servicename)
local cmderrors
- local f = io.popen( "/sbin/rc_status | egrep '^S' | egrep '" .. processname .."' 2>/dev/null" )
+ local f = io.popen( "/sbin/rc_status | egrep '^S' | egrep '" .. servicename .."' 2>/dev/null" )
local cmdresult = f:read("*a")
if (cmdresult) and (#cmdresult > 0) then
- cmdresult = "Process will autostart at next boot (at sequence '" .. string.match(cmdresult,"^%a+(%d%d)") .. "')"
+ cmdresult = "Service will autostart at next boot (at sequence '" .. string.match(cmdresult,"^%a+(%d%d)") .. "')"
else
cmderrors = "Not programmed to autostart"
end
@@ -29,6 +31,79 @@ function process_botsequence(processname)
return cmdresult,cmderrors
end
+function read_startupsequence()
+ local config = {}
+ local f = io.popen( "/sbin/rc_status 2>/dev/null" )
+ local cmdresult = f:read("*a") or ""
+ f:close()
+ local section = 0
+ for line in string.gmatch(cmdresult, "([^\n]*)\n?") do
+ local sequence, service = string.match(line, "(%d%d)(%S+)")
+ if service then
+ if section == 3 then -- kill section
+ for i,cfg in ipairs(config) do
+ if cfg.servicename == service then
+ cfg.kill = true
+ break
+ end
+ end
+ else
+ config[#config+1] = {servicename=service, sequence=sequence, kill=false, system=(section == 1)}
+ end
+ elseif string.match(line, "^rc.%.d:") then
+ section = section + 1
+ end
+ end
+ -- Add in any missing init.d scripts
+ local reverseservices = {} for i,cfg in ipairs(config) do reverseservices[cfg.servicename] = i end
+ local temp = {}
+ for name in posix.files("/etc/init.d") do
+ if not reverseservices[name] and not string.find(name, "^rc[KLS]$") and not string.find(name, "^..?$") then
+ temp[#temp+1] = {servicename=name, sequence="", kill=false, system=false}
+ end
+ end
+ table.sort(temp, function(a,b) return a.servicename < b.servicename end)
+ for i,val in ipairs(temp) do
+ config[#config+1] = val
+ end
+ return config
+end
+
+function add_startupsequence(servicename, sequence, kill, system)
+ local cmdresult,cmderrors
+ if not servicename then
+ cmderrors = "Invalid service name"
+ else
+ local cmd = {path, "rc_add"}
+ if kill then cmd[#cmd+1] = "-k" end
+ if system then cmd[#cmd+1] = "-S" end
+ if sequence then cmd[#cmd+1] = "-s "..sequence end
+ cmd[#cmd+1] = servicename
+ cmd[#cmd+1] = "2>&1"
+ delete_startupsequence(servicename)
+ local f = io.popen(table.concat(cmd, " "))
+ cmdresult = f:read("*a")
+ f:close()
+ if cmdresult == "" then cmdresult = "Added sequence" end
+ end
+
+ return cmdresult,cmderrors
+end
+
+function delete_startupsequence(servicename)
+ local cmdresult,cmderrors
+ if not servicename then
+ cmderrors = "Invalid service name"
+ else
+ local f = io.popen(path.."rc_delete "..servicename)
+ cmdresult = f:read("*a")
+ f:close()
+ if cmdresult == "" then cmderrors = "Failed to delete sequence" end
+ end
+
+ return cmdresult,cmderrors
+end
+
function daemoncontrol (process, action)
local cmdresult = ""
local cmderrors