* Added IPKG-configuration
authorSteven Barth <steven@midlink.org>
Sun, 6 Apr 2008 16:58:39 +0000 (16:58 +0000)
committerSteven Barth <steven@midlink.org>
Sun, 6 Apr 2008 16:58:39 +0000 (16:58 +0000)
* Added Package management
* Added confirmation link to reboot

contrib/media/cascade.css
src/ffluci/controller/admin/system.lua
src/ffluci/model/menu/00main.lua
src/ffluci/view/admin_system/ipkg.htm [new file with mode: 0644]
src/ffluci/view/admin_system/packages.htm [new file with mode: 0644]
src/ffluci/view/admin_system/reboot.htm

index 8fc11994e6843586f76be78a164af0118e87f6f7..d09ab7477c9f09027eb0da652f1455cdeba2a9c1 100644 (file)
@@ -165,6 +165,13 @@ h3 {
        display: inline;
 }
 
+.code {
+       background: #f7f7f7;
+       border: 1px solid #d7d7d7;
+       margin: 1em 1.75em;
+       padding: 1em;
+}
+
 code {
        display: block;
        background: #f7f7f7;
@@ -241,4 +248,9 @@ code {
 .error {
        color: red;
        font-weight: bold;
+}
+
+.ok {
+       color: green;
+       font-weight: bold;
 }
\ No newline at end of file
index c4ba027cbc4cde94977733d19a2dd6c523250d34..5d3150aa2abebc38d2d2e2d17374d85e8b02bb49 100644 (file)
@@ -4,6 +4,7 @@ require("ffluci.sys")
 require("ffluci.http")
 require("ffluci.util")
 require("ffluci.fs")
+require("ffluci.model.ipkg")
 
 function action_editor()
        local file = ffluci.http.formvalue("file", "")
@@ -29,6 +30,108 @@ function action_editor()
        ffluci.template.render("admin_system/editor", {fn=file, cnt=cnt, msg=msg})      
 end
 
+function action_ipkg()
+       local file = "/etc/ipkg.conf"
+       local data = ffluci.http.formvalue("data")
+       local stat = nil
+       local err  = nil
+       
+       if data then
+               stat, err = ffluci.fs.writefile(file, data)
+       end     
+       
+       local cnt  = ffluci.fs.readfile(file)   
+       if cnt then
+               cnt = ffluci.util.pcdata(cnt)
+       end
+       
+       ffluci.template.render("admin_system/ipkg", {cnt=cnt, msg=err}) 
+end
+
+function action_packages()
+       local ipkg = ffluci.model.ipkg
+       local void = nil
+       local submit = ffluci.http.formvalue("submit")
+       
+       
+       -- Search query
+       local query = ffluci.http.formvalue("query")
+       query = (query ~= '') and query or nil
+       
+       
+       -- Packets to be installed
+       local install = ffluci.http.formvalue("install")
+       install = (type(install) == "table" and submit) and install or nil
+       
+       -- Install from URL
+       local url = ffluci.http.formvalue("url")
+       if url and url ~= '' and submit then
+               if not install then
+                       install = {}
+               end
+               install[url] = 1
+       end
+       
+       -- Do install           
+       if install then
+               for k, v in pairs(install) do
+                       void, install[k] = ipkg.install(k)
+               end
+       end
+       
+       
+       -- Remove packets
+       local remove = ffluci.http.formvalue("remove")
+       remove = (type(remove) == "table" and submit) and remove or nil
+       if remove then  
+               for k, v in pairs(remove) do
+                       void, remove[k] = ipkg.remove(k)
+               end     
+       end
+       
+       
+       -- Update all packets
+       local update = ffluci.http.formvalue("update")
+       if update then
+               void, update = ipkg.update()
+       end
+       
+       
+       -- Upgrade all packets
+       local upgrade = ffluci.http.formvalue("upgrade")
+       if upgrade then
+               void, upgrade = ipkg.upgrade()
+       end
+       
+       
+       -- Package info
+       local info = ffluci.model.ipkg.info(query)
+       local pkgs = {}
+       
+       -- Sort after status and name
+       for k, v in pairs(info) do
+               local x = 0
+               for i, j in pairs(pkgs) do
+                       local vins = (v.Status and v.Status.installed)
+                       local jins = (j.Status and j.Status.installed)
+                       if vins ~= jins then
+                               if vins then
+                                       break
+                               end
+                       else
+                               if j.Package > v.Package then
+                                       break
+                               end
+                       end
+                       x = i
+               end
+               table.insert(pkgs, x+1, v)
+       end 
+       
+       ffluci.template.render("admin_system/packages", {pkgs=pkgs, query=query,
+        install=install, remove=remove, update=update, upgrade=upgrade})       
+end
+
 function action_passwd()
        local p1 = ffluci.http.formvalue("pwd1")
        local p2 = ffluci.http.formvalue("pwd2")
@@ -46,8 +149,11 @@ function action_passwd()
 end
 
 function action_reboot()
-       ffluci.template.render("admin_system/reboot")
-       ffluci.sys.reboot()
+       local reboot = ffluci.http.formvalue("reboot")
+       ffluci.template.render("admin_system/reboot", {reboot=reboot})
+       if reboot then
+               ffluci.sys.reboot()
+       end
 end
 
 function action_sshkeys()
index 966c4228ce32595a11265d2e2d283259ec94028a..e0bd403c199d69f8eb414b67fe52146bcf0cf7b5 100644 (file)
@@ -8,8 +8,10 @@ act("luci", "FFLuCI")
 act("contact", "Kontakt")
 
 add("admin", "system", "System", 20)
+act("packages", "Paketverwaltung")
 act("passwd", "Passwort ändern")
 act("sshkeys", "SSH-Schlüssel")
+act("ipkg", "IPKG-Konfiguration")
 act("reboot", "Neu starten")
 
 add("admin", "network", "Netzwerk", 30)
diff --git a/src/ffluci/view/admin_system/ipkg.htm b/src/ffluci/view/admin_system/ipkg.htm
new file mode 100644 (file)
index 0000000..bbe7f3b
--- /dev/null
@@ -0,0 +1,23 @@
+<%+header%>
+<h1><%:system System%></h1>
+<h2><%:ipkg IPKG-Konfiguration%></h2>
+
+<br />
+
+<div><strong><%:ipkg_pkglists Paketlisten%>:</strong><code>src <em>Name</em> <em>URL</em></code></div>
+<div><strong><%:ipkg_targets Installationsziele%>:</strong><code>dest <em>Name</em> <em>Pfad</em></code></div>
+
+<br />
+
+<form method="post" action="<%=controller%>/admin/system/ipkg">
+       <fieldset class="cbi-section-node">
+               <div><textarea style="width: 100%" rows="10" name="data"><%=(cnt or '')%></textarea></div>
+               <br />
+               <div>
+                       <input type="submit" value="<%:save Speichern%>" />
+                       <input type="reset" value="<%:reset Zurücksetzen%>" />
+               </div>
+               <% if msg then %><br /><div class="error"><%:error Fehler%>: <%=msg%></div><% end %>
+       </fieldset>
+</form>
+<%+footer%>
\ No newline at end of file
diff --git a/src/ffluci/view/admin_system/packages.htm b/src/ffluci/view/admin_system/packages.htm
new file mode 100644 (file)
index 0000000..ef27f36
--- /dev/null
@@ -0,0 +1,76 @@
+<%+header%>
+<h1><%:system System%></h1>
+<h2><%:packages Paketverwaltung%></h2>
+
+<br />
+
+<% if install or remove or update or upgrade then %>
+<div class="code"><strong><%:status Status%>:</strong><br />
+<% if update then %>
+       <%:packages_update Paketlisten aktualisieren%>: <% if update == 0 then %><span class="ok"><%:ok OK%></span><% else %><span class="error"><%:error Fehler%> (<%:code Code%> <%=update%>)</span><% end %><br />
+<% end %>
+<% if upgrade then%>
+       <%:packages_upgrade Installierte Pakete aktualisieren%>: <% if upgrade == 0 then %><span class="ok"><%:ok OK%></span><% else %><span class="error"><%:error Fehler%> (<%:code Code%> <%=upgrade%>)</span><% end %><br />
+<% end %>
+<% if install then for k,v in pairs(install) do %>
+       <%:packages_install Installation von%> '<%=k%>': <% if v == 0 then %><span class="ok"><%:ok OK%></span><% else %><span class="error"><%:error Fehler%> (<%:code Code%> <%=v%>)</span><% end %><br />
+<% end end %>
+<% if remove then for k,v in pairs(remove) do %>
+       <%:packages_remove Deinstallation von%> '<%=k%>': <% if v == 0 then %><span class="ok"><%:ok OK%></span><% else %><span class="error"><%:error Fehler%> (<%:code Code%> <%=v%>)</span><% end %><br />
+<% end end %>
+</div>
+<br />
+<% end %>
+
+<div>
+<a href="<%=controller%>/admin/system/packages?update=1"><%:packages_updatelist Paketlisten aktualisieren%></a><br />
+<a href="<%=controller%>/admin/system/packages?upgrade=1"><%:packages_upgrade Installierte Pakete aktualisieren%></a>
+</div>
+
+<br />
+<br />
+
+<form method="post" action="<%=controller%>/admin/system/packages">
+       <div>
+               <span class="bold"><%:packages_installurl Paket herunterladen und installieren%>:</span><br />
+               <input type="text" name="url" size="30" value="" />
+               <input type="submit" name="submit" value="<%:ok OK%>" />
+       </div>
+       
+       <br />
+       <br />
+
+       <div>
+               <span class="bold"><%:filter Filter%>:</span>
+               <input type="text" name="query" size="20" value="<%=(query or '')%>" />
+               <input type="submit" name="search" value="<%:packages_search Paket suchen%>" />
+               <input type="submit" name="submit" value="<%:packages_do Aktionen ausführen%>" />
+       </div>
+       
+       <br />
+       <br />
+       
+       <div>
+       <table style="font-size: 0.8em">
+               <tr>
+                       <th><%:packages_name Paketname%></th>
+                       <th><%:version Version%></th>
+                       <th><%:install Installieren%></th>
+                       <th><%:delete Löschen%></th>
+                       <th><%:descr Beschreibung%></th>
+               </tr>
+               <% for k, pkg in pairs(pkgs) do %>      
+               <tr>
+                       <td><%=pkg.Package%></td>
+                       <td><%=(pkg.Version or '')%></td>
+                       <td><% if not pkg.Status or not pkg.Status.installed then %><input type="checkbox" name="install.<%=pkg.Package%>" value="1" /><% else %><%:installed installiert%><% end %></td>
+                       <td><% if pkg.Status and pkg.Status.installed then %><input type="checkbox" name="remove.<%=pkg.Package%>" value="1" /><% else %><%:notinstalled nicht installiert%><% end %></td>
+                       <td><%=(pkg.Description or '')%></td>
+               </tr>
+               <% end %>
+       </table>
+       </div>
+       <br />
+       <input type="submit" name="submit" value="<%:packages_do Aktionen ausführen%>" />
+</form>
+<%+footer%>
\ No newline at end of file
index a81464409ba7373955ea02ad228ddce72384feaf..365c33078130990f93ab9dbfdea57195e151cafe 100644 (file)
@@ -1,4 +1,10 @@
 <%+header%>
 <h1><%:system System%></h1>
 <h2><%:reboot Neu starten%></h2>
+<% if not reboot then %>
+<p><a href="<%=controller%>/admin/system/reboot?reboot=1"><%:reboot_do Neustart durchführen%></a></p>
+<% else %>
+<p><%:reboot_running Bitte warten: Neustart wird durchgeführt...%></p>
+<script type="text/javascript">setTimeout("location='<%=controller%>/admin'", 30000)</script>
+<% end %>
 <%+footer%>
\ No newline at end of file