File: INSTALL

package info (click to toggle)
nut 2.4.3-1.1squeeze2
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 5,816 kB
  • ctags: 5,658
  • sloc: ansic: 45,735; sh: 11,290; makefile: 668; python: 448; perl: 179
file content (522 lines) | stat: -rw-r--r-- 18,909 bytes parent folder | download
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
Network UPS Tools: INSTALL

These are the essential steps for compiling and installing this
software, including configuring safe shutdowns when the UPS battery
runs out of power.

There are many programs and other features in this package.  You should
check out the README file and other accompanying documentation to see
how it all works.

The paths shown below are the default values you get by just calling
configure by itself.  If you have used --prefix or similar, things will
be different.  Also, if you didn't install this program from source
yourself, the paths will probably have a number of differences.

Note: by default, your system probably won't find the man pages, since
they install to /usr/local/ups/man.  You can fix this by editing your
MANPATH, or just do this:

	man -M /usr/local/ups/man <man page>

	man -M /usr/local/ups/man upsd.conf

Also, if your favorite system offers up to date binary packages,
always prefer these over a source installation. Along with the known
advantages of such systems for installation, upgrade and removal, there
are many integration issues that have been addressed.

============================================================================
============================================================================
============================================================================

  Prepare your system
  ===================

 1. Create at least one user and a group for running this software. You
    might call them "ups" and "nut".  The exact names aren't important as
    long as you are consistent.

    The process for doing this varies from one system to the next, and
    explaining how to add users is beyond the scope of this document.

    For the purposes of this document, the user name and group name 
    will be "ups" and "nut" respectively.

    Be sure the new user is a member of the new group!  If you forget to
    do this, you will have problems later on when you try to start upsd.

============================================================================
============================================================================
============================================================================

  Build and install
  =================


 1. Configure the source tree for your system.  Add the --with-user and
    --with-group switch to set the user name and group that you created
    above.

	./configure --with-user=ups --with-group=nut

    If you need any other switches for configure, add them here.  For
    example:

    * to build and install USB drivers, add --with-usb (note that you
      need to install libusb development package or files).

    * to build and install SNMP drivers, add --with-snmp (note that
      you need to install libsnmp development package or files).

    * to build and install CGI scripts, add --with-cgi. 

    * to build and install NUT development files (needed to compile
      WMNut and MGE PSP), add --with-lib.

    * to build and install HAL support, add --with-hal.

    See docs/configure.txt or "./configure --help" for the available
    options.

    If you alter paths with additional switches, be sure to use those
    new paths while reading the rest of the steps.    

    *** Reference: docs/configure.txt

---------------------------------------------------------------------------

 2. Build the programs.

	make

    This will build the NUT client and server programs and the
    selected drivers. It will also build any other features that were
    selected during configuration in step 1. above. 

---------------------------------------------------------------------------

 3. Gain privileges for installing software if necessary.

	su

---------------------------------------------------------------------------


 4. Install the files to a system level directory.

	make install

    This will install the compiled programs and man pages, as well as
    some data files required by NUT. Any optional features selected
    during configuration will also be installed.

    This will also install sample versions of the NUT configuration
    files. Sample files are installed with names like ups.conf.sample
    so they will not overwrite any existing real config files you may
    have created.

    If you are packaging this software, then you will probably want to
    use the DESTDIR variable to redirect the build into another place,
    i.e.:

	make DESTDIR=/tmp/package install
	make DESTDIR=/tmp/package install-conf

---------------------------------------------------------------------------

 5. Create the state path directory for the driver(s) and server to use
    for storing UPS status data and other auxiliary files, and make it
    owned by the user you created.

	mkdir -p /var/state/ups
	chmod 0770 /var/state/ups
	chown root:nut /var/state/ups

---------------------------------------------------------------------------

 6. Set ownership data and permissions on your serial or USB ports
    that go to your UPS hardware.  Be sure to limit access to just
    the user you created earlier.

    These examples assume the second serial port (ttyS1) on a typical
    Slackware system.  On FreeBSD, that would be cuaa1.  Serial ports
    vary greatly, so yours may be called something else.

	chmod 0660 /dev/ttyS1
	chown root:nut /dev/ttyS1

    The setup for USB ports is slightly more complicated. Device files
    for USB devices, such as /proc/bus/usb/002/001, are usually
    created "on the fly" when a device is plugged in, and disappear
    when the device is disconnected.  Moreover, the names of these
    device files can change randomly. To set up the correct
    permissions for the USB device, you may need to set up (operating
    system dependent) hotplugging scripts.  Sample scripts and
    information are provided in the scripts/hotplug and
    scripts/udev directories. For most users, the hotplugging scripts
    will be installed automatically by "make install". 

    (If you want to try if a driver works without setting up
    hotplugging, you can add the "-u root" option to upsd, upsmon, and
    drivers; this should allow you to follow the below
    instructions. However, don't forget to set up the correct
    permissions later!).

    NOTE: if you are using something like devfs or udev, make sure
    these permissions stay set across a reboot.  If they revert to the
    old values, your drivers may fail to start.

---------------------------------------------------------------------------

 7. Create one section per UPS in /usr/local/ups/etc/ups.conf

    To find out which driver to use, check the "HARDWARE SUPPORT TABLE"
    in the README file, or data/driver.list.

    Once you have picked a driver, create a section for your UPS in
    ups.conf.  You must supply values for "driver" and "port".

    Some drivers may require other flags or settings.  The "desc" value
    is optional, but is recommended to provide a better description of
    what your UPS is supporting.

    A typical UPS without any extra settings looks like this:

	[myupsname]
		driver = mydriver
		port = /dev/ttyS1
		desc = "Workstation"

    NOTE: usbhid-ups is a special case and ignores the "port" value.
    You must still set this value, but it does not matter what you set
    it to; you can set "port" to "auto" if you like. If you only own
    one local UBS UPS, the driver will find it automatically. If you
    own more than one UBS UPS, refer to the usbhid-ups(8) man page for
    more information.

    *** References: man pages: ups.conf(5), nutupsdrv(8), plus
                    whatever driver(s) you intend to use.

---------------------------------------------------------------------------

 8. Start the driver(s) for your hardware.

	/usr/local/ups/bin/upsdrvctl start

    Make sure the driver doesn't report any errors.  It should show a
    few details about the hardware and then enter the background.  You
    should get back to the command prompt a few seconds later.  For
    reference, a successful start of the belkin driver looks like this:

	# /usr/local/ups/bin/upsdrvctl start
	Network UPS Tools - UPS driver controller 1.5.12
	Network UPS Tools - Belkin Smart protocol driver 0.21 (1.5.12)
	Detected F6C525-SER on /dev/cuaa0
	#

    If the driver doesn't start cleanly, make sure you have picked the
    right one for your hardware.  You might need to try other drivers
    by changing the "driver=" value in ups.conf.

    Be sure to check the driver's man page to see if it needs any extra
    settings in ups.conf to detect your hardware.

    If it says "can't bind /var/state/ups/..." or similar, then your
    state path probably isn't writable by the driver.  Check the
    permissions and mode on that directory (step 5).

    After making changes, try step 6 again.

    *** References: man pages: nutupsdrv(8), upsdrvctl(8)

---------------------------------------------------------------------------

 9. Configure upsd, which serves data from the drivers to the clients.

    First, edit upsd.conf to allow access to your client systems. By
    default, upsd will only listen to localhost port 3493/tcp. If you want
    to connect to it from other machines, you must specify each interface you
    want upsd to listen on for connections, optionally with a port number.

	LISTEN 127.0.0.1 3493
	LISTEN ::1 3493

    Note: if you run a firewall of some sort, you may have to add rules
    to allow these incoming connections.

    Next, create upsd.users.  For now, this can be an empty file.
    You can come back and add more to it later when it's time to 
    configure upsmon or run one of the management tools.

    Do not make either file world-readable, since they both hold
    access control data and passwords.  They just need to be readable by
    the user you created in the preparation process.

    The suggested configuration is to chown it to root, chgrp it to the
    group you created, then make it readable by the group.

	chown root:nut upsd.conf upsd.users
	chmod 0640 upsd.conf upsd.users

    *** References: man pages: upsd.conf(5), upsd.users(5), upsd(8)

---------------------------------------------------------------------------

10. Start the network server.

	/usr/local/ups/sbin/upsd

    Make sure it is able to connect to the driver(s) on your system.
    A successful run looks like this:

	# /usr/local/ups/sbin/upsd
	Network UPS Tools upsd 1.5.12
	Connected to UPS [belkin]: belkin-cuaa0
	Synchronizing...done
	# 

    upsd prints dots while it waits for the driver to respond.  Your
    system may print more or less depending on how many drivers you
    have and how fast they are.

    NOTE: if upsd says that it can't connect to a UPS or that the data
    is stale, then your ups.conf is not configured correctly, or you
    have a driver that isn't working properly.  You must fix this before
    going on to the next step.

    *** Reference: man page: upsd(8)

---------------------------------------------------------------------------

11. Make sure that the UPS is providing good status data.

	/usr/local/ups/bin/upsc myupsname@localhost ups.status

    You should see just one line in response:

	OL

    OL means your system is running on line power.  If it says something
    else (like OB - on battery, or LB - low battery), your driver was 
    probably misconfigured in step 7.  If you reconfigure the driver,
    use 'upsdrvctl stop' to stop it, then start it again in step 8.

    *** Reference: man page: upsc(8)

---------------------------------------------------------------------------

12. Look at all of the status data which is being monitored.

	/usr/local/ups/bin/upsc myupsname@localhost

    What happens now depends on the kind of UPS and driver you have.
    In the list, you should see ups.status with the same value you got
    above.  A sample run on a MGE UPS SYSTEMS Ellipse ASR 600 looks
    like this:

	battery.charge: 82
	battery.charge.low: 30
	battery.runtime: 1563
	driver.name: usbhid-ups
	driver.parameter.port: auto
	driver.version: 2.0.3
	driver.version.data: MGE HID 0.8
	driver.version.internal: 0.28
	input.transfer.high: 264.0
	input.transfer.low: 184.0
	outlet.desc: Main Outlet
	outlet.id: 1
	outlet.switchable: 0
	outlet.1.desc: PowerShare Outlet 1
	outlet.1.id: 2
	outlet.1.switch: 0
	outlet.1.switchable: 0
	output.voltage: 230.0
	ups.delay.shutdown: -1
	ups.delay.start: -10
	ups.load: 0
	ups.mfr: MGE UPS SYSTEMS
	ups.model: Ellipse 600
	ups.power.nominal: 600
	ups.serial: AP8F15005
	ups.status: OB DISCHRG

    *** Reference: man page: upsc(8)

---------------------------------------------------------------------------

13. Edit your startup scripts.

    Make sure upsdrvctl and upsd are run every time your system starts.

============================================================================
============================================================================
============================================================================

  Configuring shutdowns for low battery events
  --------------------------------------------

The whole point of UPS software is to bring down the OS cleanly when you
run out of battery power.  Everything else is just eye candy.  To make 
sure your system shuts down properly, you will need to perform some
additional configuration and run upsmon.  Here are the basics:

---------------------------------------------------------------------------

 1. Create a upsd user for upsmon to use while monitoring this UPS.

    Edit upsd.users and create a new section.  upsmon will connect
    to upsd and use this user name (in brackets) and password to
    authenticate.  This example is for a user called "monuser":

	[monuser]
		password = mypass
		upsmon master		# or upsmon slave

    *** References: man pages: upsd(8), upsd.users(5)

---------------------------------------------------------------------------

 2. Reload upsd.  Depending on your configuration, you may be able to 
    do this without stopping upsd:

	/usr/local/ups/sbin/upsd -c reload

    If that doesn't work (check the syslog), just restart it:

	/usr/local/ups/sbin/upsd -c stop
	/usr/local/ups/sbin/upsd 

    Later: if you want to make reloading work, see the entry in the FAQ
    about starting upsd as a different user.

---------------------------------------------------------------------------

 3. Set the POWERDOWNFLAG location for upsmon.

    In upsmon.conf, add a POWERDOWNFLAG directive with a filename.
    upsmon will create this file when the UPS needs to be powered off
    during a power failure when low battery is reached.

    We will test for the presence of this file in a later step.

	POWERDOWNFLAG /etc/killpower

    *** References: man pages: upsmon(8), upsmon.conf(5)

---------------------------------------------------------------------------

 4. Secure upsmon.conf.

    The recommended setting is to have it owned by root:nut, then
    make it readable by the group and not world.  This file contains
    passwords that could be used by an attacker to start a shutdown,
    so keep it secure.

	chown root:nut upsmon.conf
	chmod 0640 upsmon.conf

    This step has been placed early in the process so you secure this
    file before adding sensitive data in the next step.

---------------------------------------------------------------------------

 5. Create a MONITOR directive for upsmon

    Edit upsmon.conf and create a MONITOR line with the UPS definition
    (<upsname>@<hostname>), username and password from step 2, and
    the master or slave setting.

    If it's the master (i.e., it's connected to this UPS directly):

	MONITOR myupsname@mybox 1 monuser mypass master

    If it's just monitoring this UPS over the network, and some other
    system is the master:

	MONITOR myupsname@mybox 1 monuser mypass slave

    The number "1" here is the power value.  This should always be set
    to 1 unless you have a very special (read: expensive) system with
    redundant power supplies.  See big-servers.txt and data-room.txt.

    *** References: man pages: upsmon(8), upsmon.conf(5)

---------------------------------------------------------------------------

 6. Define a SHUTDOWNCMD for upsmon.

    Still in upsmon.conf, add a directive that tells upsmon how to
    shut down your system.  This example seems to work on most systems:

	SHUTDOWNCMD "/sbin/shutdown -h +0"

    Notice the presence of "quotes" here to keep it together.

    If your system has special needs, you may want to set this to
    a script which does local shutdown tasks before calling init.

---------------------------------------------------------------------------

 7. Start upsmon.

	/usr/local/ups/sbin/upsmon

    If it complains about something, then check your configuration.

---------------------------------------------------------------------------

 8. Look for messages in the syslog to indicate success.  It should look
    something like this:

	May 29 01:11:27 mybox upsmon[102]: Startup successful
	May 29 01:11:28 mybox upsd[100]: Client monuser@192.168.50.1
	logged into UPS [myupsname]

    Any errors seen here are probably due to an error in the config
    files of either upsmon or upsd.  You should fix them before
    continuing.

---------------------------------------------------------------------------

 9. Edit your startup scripts: add upsmon

    Make sure upsmon starts when your system comes up.  Do it after
    upsdrvctl and upsd, or it will complain about not being able to
    contact the server.

---------------------------------------------------------------------------

10. Edit your shutdown scripts: add upsdrvctl shutdown

    You should configure your system to power down the UPS after the
    filesystems are remounted read-only.  Have it look for the presence
    of the POWERDOWNFLAG (from upsmon.conf), using this as an example:

	if (test -f /etc/killpower)
	then
		echo "Killing the power, bye!"
		/usr/local/ups/bin/upsdrvctl shutdown

		sleep 120

		# uh oh... the UPS power-off failed
		# you probably want to reboot here so you don't get stuck!
		# *** see the section on power races in shutdown.txt! ***
	fi

    Be careful: that upsdrvctl command will probably power off your
    machine.  Don't use it unless your system is ready to be halted by
    force.  If you run RAID, be sure the arrays are ready to lose power.
    Your kernel's power-off routines may not execute.

    Make sure that the filesystem(s) holding your UPS drivers and
    configuration details are still mounted when that part of the script
    is run.  You need upsdrvctl, ups.conf, and any drivers for the
    hardware on your system.

---------------------------------------------------------------------------

More information can be found in the README file, the shutdown.txt document, 
the upsmon(8) man page and the upsmon.conf(5) man page.