118 lines
		
	
	
	
		
			4.5 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
	
		
			4.5 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| NUT roadmap and ideas for future expansion
 | |
| ------------------------------------------
 | |
| 
 | |
| Here are some ideas that have come up over the years but haven't
 | |
| been implemented yet.  This may be a good place to start if you're
 | |
| looking for a rainy day hacking project.
 | |
| 
 | |
| 
 | |
| Roadmap
 | |
| ~~~~~~~
 | |
| 
 | |
| 2.6
 | |
| ^^^
 | |
| 
 | |
| This release is focused on the website and documentation rewrite, using
 | |
| the excellent link:http://www.methods.co.nz/asciidoc[AsciiDoc].
 | |
| 
 | |
| 2.8
 | |
| ^^^
 | |
| 
 | |
| This branch will focus on configuration and user interface improvements. 
 | |
| 
 | |
| 3.0
 | |
| ^^^
 | |
| 
 | |
| This major transition will mark the final switch to a complete power
 | |
| device broker.
 | |
| 
 | |
| 
 | |
| 
 | |
| Non-network "upsmon"
 | |
| ~~~~~~~~~~~~~~~~~~~~
 | |
| 
 | |
| Some systems don't want a daemon listening to the network.  This can be
 | |
| for security reasons, or perhaps because the system has been squashed
 | |
| down and doesn't have TCP/IP available.  For these situations you could
 | |
| run a driver and program that sits on top of the driver socket to do
 | |
| local monitoring.
 | |
| 
 | |
| This also makes monitoring extremely easy to automate - you don't need
 | |
| to worry about usernames, passwords or firewalling.  Just start a driver
 | |
| and drop this program on top of it.
 | |
| 
 | |
| - Parse ups.conf and open the state socket for a driver
 | |
| - Send DUMPALL and enter a select loop
 | |
| - Parse SETINFOs that change ups.status
 | |
| - When you get OB LB, shut down
 | |
| 
 | |
| Completely unprivileged upsmon
 | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | |
| 
 | |
| upsmon currently retains root in a forked process so it can call the
 | |
| shutdown command.  The only reason it needs root on most systems is that
 | |
| only privileged users can signal init or send a message on /dev/initctl.
 | |
| 
 | |
| In the case of systems running sysvinit (Slackware, others?), upsmon
 | |
| could just open /dev/initctl while it has root and then drop it
 | |
| completely.  When it's time to shut down, fire a control structure at
 | |
| init across the lingering socket and tell it to enter runlevel 0.
 | |
| 
 | |
| This has been shown to work in local tests, but it's not portable.  It
 | |
| could only be offered as an option for those systems which run that
 | |
| flavor of init.  It also needs to be tested to see what happens to
 | |
| the lingering fd over time, such as when init restarts after an upgrade.
 | |
| 
 | |
| For other systems, there is always the possibility of having a suid
 | |
| program which does nothing but prod init into starting a shutdown.  Lock
 | |
| down the group access so only upsmon's unprivileged user can access it,
 | |
| and make that your SHUTDOWNCMD.  Then it could drop root completely.
 | |
| 
 | |
| Chrooted upsmon
 | |
| ~~~~~~~~~~~~~~~
 | |
| 
 | |
| upsmon could run the network monitoring part in a chroot jail if it had
 | |
| a pipe to another process running outside for NOTIFY dispatches.  Such a
 | |
| pipe would have to be constructed extremely carefully so an attacker
 | |
| could not compromise it from the jailed process.
 | |
| 
 | |
| A state machine with a tightly defined sequence could do this safely.
 | |
| All it has to do is dispatch the UPS name and event type.
 | |
| 
 | |
| 	[start] [type] [length] <name> [stop]
 | |
| 
 | |
| Monitor program with interpreted language
 | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | |
| 
 | |
| Once in awhile, I get requests for a way to shut down based on the UPS
 | |
| temperature, or ambient humidity, or at a certain battery charge level,
 | |
| or any number of things other than an "OB LB" status.  It should be
 | |
| obvious that adding a way to monitor all of that in upsmon would bloat
 | |
| upsmon for all those people who really don't need anything like that.
 | |
| 
 | |
| A separate program that interprets a list of rules and uses it to
 | |
| monitor the UPS equipment is the way to solve this.  If you have a
 | |
| condition that needs to be tested, add a rule.
 | |
| 
 | |
| Some of the tools that such a language would need include simple
 | |
| greater-than/less-than testing (if battery.charge < 20), equivalence
 | |
| testing (if ups.model = "SMART-UPS 700"), and some way to set and clear
 | |
| timers.
 | |
| 
 | |
| Due to the expected size and limited audience for such a program, it
 | |
| might have to be distributed separately.
 | |
| 
 | |
| NOTE: Python may be a good candidate.
 | |
| 
 | |
| Sandbox
 | |
| ~~~~~~~
 | |
| 
 | |
| - check to refresh and integrate the https://alioth.debian.org/pm/?group_id=30602[tasks] list
 | |
| and https://alioth.debian.org/tracker/?atid=411545&group_id=30602&func=browse[feature requests] list from Alioth
 | |
| - add "Generic ?Ascii? driver": I've got to think more about that, but the recent
 | |
| solar panel driver, and the powerman internal approach of a generic engine with
 | |
| a scripting interface is a cool idea.
 | |
| Ref http://powerman.svn.sourceforge.net/viewvc/powerman/trunk/etc/apcpdu.dev?revision=969&view=markup
 | |
| - integrate the (future) new powerman LUA engine (maybe/mustbe used for the driver above?)
 | |
| for native PDU support
 | |
| - see how we can help and collaborate with DeviceKit-power
 |