summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTed Trask <ttrask01@yahoo.com>2008-07-04 20:57:44 +0000
committerTed Trask <ttrask01@yahoo.com>2008-07-04 20:57:44 +0000
commitc736f6b6c1ef4da4769f277adaf1f613cbcdc590 (patch)
tree254cff103f5d2a7df4f558c3de5cbc8b82313845
parent8a020c6161c496ad11eb6c92bfbe41943349cef9 (diff)
downloadacf-core-c736f6b6c1ef4da4769f277adaf1f613cbcdc590.tar.bz2
acf-core-c736f6b6c1ef4da4769f277adaf1f613cbcdc590.tar.xz
Added apk library.
git-svn-id: svn://svn.alpinelinux.org/acf/core/trunk@1280 ab2d0c66-481e-0410-8bed-d214d4d58bed
-rw-r--r--lib/Makefile1
-rw-r--r--lib/apk.lua71
2 files changed, 72 insertions, 0 deletions
diff --git a/lib/Makefile b/lib/Makefile
index 855e551..c064fe4 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -22,6 +22,7 @@ LIB_DIST=fs.lua\
controllerfunctions.lua\
modelfunctions.lua\
cfe.lua\
+ apk.lua\
EXTRA_DIST=README Makefile
DISTFILES=$(LIB_DIST) $(EXTRA_DIST)
diff --git a/lib/apk.lua b/lib/apk.lua
new file mode 100644
index 0000000..f0a92cb
--- /dev/null
+++ b/lib/apk.lua
@@ -0,0 +1,71 @@
+-- apk library
+module (..., package.seeall)
+
+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 all
+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 loaded
+end
+
+get_available_packages = function(_loaded, _all)
+ -- available are all except loaded
+ local loaded = _loaded or get_loaded_packages()
+ local all = _all or get_all_packages()
+ 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 available
+end
+
+delete_package = function(package)
+ local success = false
+ local cmdresult = "Delete failed - Invalid package"
+ local loaded = get_loaded_packages()
+ for i,pack in pairs(loaded) do
+ if pack.name == package then
+ success = true
+ local cmd = "/sbin/apk_delete " .. package .. " 2>&1"
+ local f = io.popen( cmd )
+ cmdresult = f:read("*a") or ""
+ f:close()
+ end
+ end
+ return success, cmdresult
+end
+
+install_package = function(package)
+ local success = false
+ local cmdresult = "Install failed - Invalid package"
+ local available = get_available_packages()
+ for i,pack in pairs(available) do
+ if pack == package then
+ success = true
+ 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()
+ end
+ end
+ return success, cmdresult
+end