1台のサーバに複数のapcupsdをインストールする

基本的にApcupsdは1セットで1台のUPSを管理するために設計されているため、1台のサーバー上で複数のUPSを集中して管理したいと考えた場合はApcupsdも複数インストールする必要があります。
ここでは2つ目のApcupsdを導入するまでの手順を記載しています。


作成日:2008.8.10
更新日:2009.10.29

前提条件
これを行ったときの環境を以下のようにしています。
■環境
apcupsd-3.14.4
FreeBSD-6.2

■2つめのApcupsdのディレクトリ構成
 ・/usr/local/apcupsd/sub : インストール先
 ・/usr/local/apcupsd/sub/run : PIDファイルなどの保存先
 ・/usr/local/apcupsd/sub/lock : ロックファイルの保存先
 ・/usr/local/apcupsd/sub/etc : 設定ファイルの保存先
 ・/usr/local/apcupsd/sub/log : ログファイルの保存先

※"/usr/local/apcupsd"ディレクトリはもともとありませんので予め作成しておきます。
ページのトップへ

インストール
ソースからインストールするのは色々とオプションが必要になりかなり面倒ですのでここではportsから行います。

まず、そのままmakeするとデフォルト状態のままなのでMakefileの書き換えます。
"/usr/ports/sysutils/apcupsd/Makfile"
(色分け:書換追記コメント)
 1: # New ports collection makefile for:    apcupsd
 2: # Date created:         1.12.2001
 3: # Whom:                 Lars K・ler <Lars.Koeller@Uni-Bielefeld.DE>
 4: #
 5: # $FreeBSD: ports/sysutils/apcupsd/Makefile,v 1.58 2008/07/10 20:03:47 itetcu Exp $
 6: #
 7: 
 8: PORTNAME=       apcupsd
 9: PORTVERSION=    3.14.4
10: CATEGORIES=     sysutils
11: MASTER_SITES=   ${MASTER_SITE_SOURCEFORGE:S/$/:src_sf/g} \
12:                 http://T32.TecNik93.com/FreeBSD/ports/${PORTNAME}/sources/:src_bk \
13:                 http://apcupsd.sourceforge.net/manual/:doc_sf \
14:                 http://T32.TecNik93.com/FreeBSD/ports/${PORTNAME}/sources/:doc_bk
15: MASTER_SITE_SUBDIR=     ${PORTNAME}/:src_sf
16: DISTFILES=      ${DISTNAME}${EXTRACT_SUFX}:src_sf,src_bk \
17:                 ${PORTNAME}.pdf:doc_sf,doc_bk
18: EXTRACT_ONLY=   ${DISTNAME}${EXTRACT_SUFX}
19: #IGNOREFILES=   ${PORTNAME}.pdf
20: 
21: MAINTAINER=     itetcu@FreeBSD.org
22: COMMENT=        Set of programs for controlling APC UPS
23: 
24: USE_RC_SUBR=    apcupsd
25: SUB_FILES=      pkg-message
26: 
27: GNU_CONFIGURE=  yes
28: USE_GMAKE=      yes

29: #CONFIGURE_ARGS=--sbindir=${PREFIX}/sbin \
30: # --with-nologin=/var/run \
31: # --disable-install-distdir \
32: # --sysconfdir=${ETCDIR} \
33: # --with-serial-dev=/dev/usv
コメントアウトにする

  : CONFIGURE_ARGS= --with-serial-dev=/dev/usv \
  :  --prefix=/usr/local/apcupsd/sub \
  :  --sbindir=/usr/local/apcupsd/sub/sbin \
  :  --with-nis-port=7001 \
  :  --with-nologin=/usr/local/apcupsd/sub/run \
  :  --with-log-dir=/usr/local/apcupsd/sub/log \
  :  --with-pid-dir=/usr/local/apcupsd/sub/run \
  :  --with-lock-dir=/usr/local/apcupsd/sub/lock \
  :  --with-pwrfail-dir=/usr/local/apcupsd/sub/run \
  :  --sysconfdir=/usr/local/apcupsd/sub/etc \
  :  --disable-install-distdir
34: 
35: CONFIGURE_ENV=  CPPFLAGS="-I${LOCALBASE}/include -L${LOCALBASE}/lib" \
36:                 CFLAGS="-I${LOCALBASE}/include -L${LOCALBASE}/lib"   \
37:                 LDFLAGS="-L${LOCALBASE}/lib"
38: 
39: MAN8=           apcupsd.8
40: 
とりあえず2つめ以降のインストールで重要なのはapcaccessが使用するポート番号を設定することですので"--sbindir"、"--with-nis-port"、"--disable-install-distdir"だけでも良いような気もしますが、削除するときや管理の面から見たら関係するファイルはすべて同じディレクトリ配下に作るほうがファイル名の重複なども避けられて効率が良さそうなのでそれ以外に関するオプションも指定しています。

編集が終わったら次はインストールを行いますが、その前に"/usr/local/etc/rc.d/"の起動ファイルを別名にしておきます。
(色分け:入力値コマンドラインコメント)
# cd /usr/local/etc/rc.d

# mv apcupsd.sh apcupsd_master.sh
※もしかしたら".sh"の拡張子が無いかもしれません。
名前を変更したらインストールを行います。
(色分け:入力値コマンドラインコメント)
# cd /usr/ports/sysutils/apcupsd

# make clean ; make

===>  Cleaning for apcupsd-3.14.4
===>  Vulnerability check disabled, database not found
===>  Found saved configuration for apcupsd-3.14.4
===>  Extracting for apcupsd-3.14.4
=> MD5 Checksum OK for apcupsd-3.14.4.tar.gz.
=> SHA256 Checksum OK for apcupsd-3.14.4.tar.gz.
=> MD5 Checksum OK for apcupsd.pdf.
=> SHA256 Checksum OK for apcupsd.pdf.
===>  Patching for apcupsd-3.14.4
===>  Applying FreeBSD patches for apcupsd-3.14.4
===>   apcupsd-3.14.4 depends on executable: gmake - found
===>   apcupsd-3.14.4 depends on shared library: netsnmp.16 - found
===>  Configuring for apcupsd-3.14.4
configure: WARNING: you should use --build, --host, --target

...(中略)...Configuration on Wed Aug  6 23:00:13 JST 2008:

  Host:                       i386-portbld-freebsd6.2 -- 
freebsd 6.2-RELEASE-p11
  Apcupsd version:            3.14.4 (18 May 2008)
  Source code location:       .
  Install binaries:           /usr/local/apcupsd/sub/sbin
  Install config files:       /usr/local/apcupsd/sub/etc
  Install man files:          /usr/local/man
  Nologin file in:            /usr/local/apcupsd/sub/run
  PID directory:              /usr/local/apcupsd/sub/run
  LOG dir (events, status)    /usr/local/apcupsd/sub/log
  LOCK dir (for serial port)  /usr/local/apcupsd/sub/lock
  Power Fail dir              /usr/local/apcupsd/sub/run
  Compiler:                   c++ 3.4.6
  Compiler flags:             -I/usr/local/include -L/usr/local/lib 
-Wall 
  Linker:                     cc
  Linker flags:               -L/usr/local/lib -L/usr/local/lib 
-pthread
  Host and version:           freebsd 6.2-RELEASE-p11
  Shutdown Program:           /sbin/shutdown
  Port/Device:                /dev/usv
  Network Info Port (CGI):    7001
  UPSTYPE                     apcsmart
  UPSCABLE                    smart

  drivers (no-* are disabled): apcsmart dumb net bsd-usb net-snmp 
pcnet no-test

  enable-nis:                 yes
  with-nisip:                 0.0.0.0
  enable-cgi:                 no
  with-cgi-bin:               /etc/apcupsd
  with-libwrap:               yes
  enable-powerflute:          no
  enable-pthreads:            yes
  enable-dist-install:        no
  enable-gapcmon:             no
  
Configuration complete: Run 'gmake' to build apcuspd.
↑ここで表示された内容があっているか確認しておきます。 もしパスの指定が違っていたらMakefileを編集して再度makeします。
makeが正常に終わればインストール。
# make install
ページのトップへ

動作確認&起動方法
まず、起動ファイルのファイル名をメインのApcupsdと区別できるように書き換えておきます(必要な場合のみ)
(色分け:入力値コマンドラインコメント)
# cd /usr/local/etc/rc.d

# mv apcupsd.sh apcupsd_sup.sh
※もしかしたら".sh"の拡張子が無いかもしれません。
それとApcupsdが作成するファイルの保存先となるディレクトリも作成します(作成されていない場合のみ)
(色分け:入力値コマンドラインコメント)
# mkdir /usr/local/apcupsd/sub/run
# mkdir /usr/local/apcupsd/sub/lock
# mkdir /usr/local/apcupsd/sub/log
次に起動ファイルの中を書き換えます。
"/usr/local/etc/rc.d/apcupsd_sub.sh"
(色分け:書換追記コメント)
 1: #!/bin/sh
 2: #
 3: # $FreeBSD: ports/sysutils/apcupsd/files/apcupsd.in,v 1.3 2007/10/21 10:39:39 itetcu Exp $
 4: #
 5: # PROVIDE: apcupsd
 6: # REQUIRE: SERVERS
 7: # BEFORE: DAEMON
 8: # KEYWORD: shutdown
 9: #
10: # Add the following line to /etc/rc.conf[.local] to enable apcupsd
11: #
12: # apcupsd_enable (bool):        Set to "NO" by default.
13: #                               Set it to "YES" to enable apcupsd.
14: # apcupsd_args (str):           Custom additional arguments to be passed
15: #                               to apcupsd (default empty).
16: #
17: 
18: . /etc/rc.subr
19: 
20: name="apcupsd_sub"
21: rcvar=${name}_enable
22: 
23: load_rc_config $name
24: 
25: : ${apcupsd_factory_enable="NO"}
26: : ${apcupsd_factory_flags="--kill-on-powerfail --config-file=/usr/local/apcupsd/sub/etc/apcupsd.conf"}
27: : ${apcupsd_factory_pidfile="/usr/local/apcupsd/sub/run/apcupsd.pid"}
28: : ${apcupsd_factory_lockfile="/usr/local/apcupsd/sub/lock/apcupsd.lock"}
29: : ${apcupsd_factory_program="/usr/local/apcupsd/sub/sbin/apcupsd"}
30: 
31: pidfile="/usr/local/apcupsd/sub/run/apcupsd.pid"
32: required_files="/usr/local/apcupsd/sub/etc/apcupsd.conf"
33: command="/usr/local/apcupsd/sub/sbin/apcupsd"
34: 
35: run_rc_command "$1"
あとは起動するために"/etc/rc.conf"に以下の1行を追加します。
"/etc/rc.conf"
(色分け:書換追記コメント)
apcupsd_sub_enable="YES"
それが終われば、"/usr/local/apcupsd/sub/etc/apcupsd.conf"の設定を行い、apcupsdが正常に起動できるか確認します。
(色分け:入力値コマンドラインコメント)
# /usr/local/etc/rc.d/apcupsd_sub.sh start

起動しているかの確認
# ps ax | grep apcupsd
47949  ??  Ss     0:05.84 /usr/local/apcupsd/factory/sbin/apcupsd --k

apcaccessで情報を取得してみる
# /usr/local/apcupsd/sub/sbin/apcaccess status
APC      : 001,049,1155
DATE     : Sun Aug 10 17:49:02 JST 2008
HOSTNAME : server
RELEASE  : 3.14.4
VERSION  : 3.14.4 (18 May 2008) freebsd
UPSNAME  : UPS_IDEN
CABLE    : Ethernet Link
MODEL    : SNMP UPS Driver
UPSMODE  : Stand Alone
STARTTIME: Fri Aug 08 21:49:09 JST 2008
STATUS   : ONLINE 
LINEV    : 105.0 Volts
LOADPCT  :   5.0 Percent Load Capacity
BCHARGE  : 100.0 Percent
TIMELEFT : 157.0 Minutes
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME  : 0 Seconds
MAXLINEV : 107.0 Volts
MINLINEV : 104.0 Volts
OUTPUTV  : 106.0 Volts
SENSE    : Low
DWAKE    : 000 Seconds
DSHUTD   : 020 Seconds
DLOWBATT : 05 Minutes
LOTRANS  : 090.0 Volts
HITRANS  : 110.0 Volts
RETPCT   : 000.0 Percent
ITEMP    : 53.0 C Internal
ALARMDEL : 5 seconds
LINEFREQ : 60.0 Hz
LASTXFER : Low line voltage
NUMXFERS : 0
TONBATT  : 0 seconds
CUMONBATT: 0 seconds
XOFFBATT : N/A
SELFTEST : NG
STESTI   : never
STATFLAG : 0x07000008 Status Flag
DIPSW    : 0x00 Dip Switch
MANDATE  : 12/16/98
SERIALNO : WS9850073031
BATTDATE : 07/01/07
NOMOUTV  : 100 Volts
NOMPOWER : 0 Watts
EXTBATTS : 0
BADBATTS : 0
FIRMWARE : 72.12S.A
APCMODEL : SMART-UPS 1400 RM
END APC  : Sun Aug 10 17:49:55 JST 2008
ページのトップへ

補足&メモ
複数のApcupsdを1台のサーバー上で稼動させるときはそのサーバがつながっているUPS以外のUPSから停止信号を受けとってもシャットダウンしないように "TIMEOUT" パラメータを0に設定しておく必要があります。
ページのトップへ

参考にしたサイト