作業日記@HatenaBlog

各種の作業メモ

apcupsd の異常ログ

Apcupsd-users のメーリングリストでは「成功した」との報告があったが、この方法は今のところ成功していない。

異常なエラー表示

  1. 商用電源断によって apcupsd が自動シャットダウンするように設定した。
  2. /var/log/apcupsd.events のログを見ると、シャットダウン時に
    Sun Feb 21 HH:MM:SS JST 2010  apcupsd FATAL ERROR in smart.c at line 213
    Select error on UPS FD. Bad file descriptor
    というエラーが記録された。
  3. Apcupsd-users のメーリングリストにも同様の事例が投稿されており、パッチによる応急処置が示されていた。

バージョン確認

# apcupsd -V
apcupsd 3.14.5 (10 January 2009) freebsd

apcupsd のパッチ当て&再インストール

  1. パッチファイル
    ファイル名を smart.c.patch とする。
    --- smart.c     2010-02-21 16:24:27.000000000 +0900
    +++ smart.c     2010-02-21 16:25:48.000000000 +0900
    @@ -209,9 +209,10 @@
           case -1:
              if (errno == EINTR || errno == EAGAIN) {       /* assume SIGCHLD */
                 continue;
    +         } else if (ups->driver_internal_data) {
    +            Error_abort1("Select error on UPS FD. %s\n", strerror(errno));
              }
    -         Error_abort1("Select error on UPS FD. %s\n", strerror(errno));
    -         break;
    +         return FAILURE;  /* We're probably shutting down */
           default:
              break;
           }
  2. apcupsd の削除
    # cd /usr/ports/sysutils/apcupsd
    # make deinstall
    # make clean distclean
  3. 再起動
    # shutdown -r now
  4. make する
    # cd /usr/ports/sysutils/apcupsd
    # make fetch checksum extract
  5. パッチ当て
    ※パッチファイル (smart.c.patch) を次のディレクトリにコピーしておく
    # cd /usr/ports/sysutils/apcupsd/work/apcupsd-3.14.5/src/drivers/apcsmart
    # patch <smart.c.patch
    Hmm... Looks like a unified diff to me...
    The text leading up to this was:
    --------------------------
    |--- smart.c 2010-02-21 HH:MM:SS.000000000 +0900
    |+++ smart.c 2010-02-21 HH:MM:SS.000000000 +0900
    --------------------------
    Patching file smart.c using Plan A...
    Hunk #1 succeeded at 209.
    done
    #
  6. インストール
    # cd /usr/ports/sysutils/apcupsd
    # make build
    # make install

 

ports の make オプションメモ

make fetch FTPなどのサイトからソースコードをダウンロードする
インストールに必要な distfile を取ってくる
make checksum ダウンロードしたファイルが正常かどうか確かめる
取ってきたファイルのチェックサムを検証する
make depands このportsに依存関係(インストールするために必要なports)があるportsをインストールする
make extract distfile を作業用ディレクトリに展開する
make patch 展開したソースコードFreeBSD用のパッチを当てる
make configure
make config
コンパイルするオプションなどを指定してコンパイルするための準備を整える(configure)
make build コンパイルする
make install コンパイルしたバイナリをOSにインストールする
make package コンパイルしたバイナリをpackageにする
make fetch-list 対象のportsを構築するために必要なdistfileリストを表示する
make clean 作業用 work ディレクトリを削除する
make distclean clean に加え、対象の ports の distfile も削除する
make deinstall pkg_delete と同様。インストールした ports を削除する
make search キーワードで INDEX ファイルから検索する
make showconfig コンパイルオプションの表示
設定したオプションの内容は /var/db/ports ディレクトリに Ports 毎にディレクトリが存在し、その Ports 毎のディレクトリ内の options というファイルに格納されている。
make rmconfig コンパイルオプションの削除(リセット)