2009/09/04(Fri)beep on x86_64

2009/09/04 0:50 Software::Linux
ディスプレイ等の表示装置を持たないサーバーなどの障害報告の手段として、メールを送るなどはよく用いられる手法だが、本体が自分の近くにある場合は、内蔵スピーカーからビープを鳴らすという方法もある。

今回はjohnathからbeepコマンドを利用させていただいたが、x86向けのx86ビルドrpmはあるものの、x64向けのx86_64ビルドrpmがなかったため、作成した。
(ちなみに作成環境はCentOS 5.3 (Final))


成果物のダウンロードはこちら: beep-1.2.2-1.x86_64.rpm
(MD5: 328B90882335103799E5733F6A99E4F1)


以下は、SRPMからRPMを作る方法のまとめと、詳しいインストール手順など。

SRPMからRPMを作る方法

とりあえずSRPMをrpmでインストールする。
$ cd /tmp
$ wget http://www.johnath.com/beep/beep-1.2.2-1.src.rpm
$ su
# rpm -ivh  beep-1.2.2-1.src.rpm
   1:beep                   ########################################### [100%]
これで/usr/src/redhat/辺りに中身のファイルが作られる。

rpmbuildでパッケージを作る。
が、SPECファイルのエラーで止まった。
# rpmbuild -bb --target=x86_64 /usr/src/redhat/SPECS/beep.spec
ビルド対象プラットフォーム: x86_64
ターゲット x86_64 用にビルド中
エラー: 旧来の構文はサポートされません: copyright
エラー: 11 行目: 不明なタグ: Copyright: GPL
これは、構文が変更されたのが原因なので、該当ファイルのCopyrightの部分をLisenceに書き換える。


で、リトライ。
# rpmbuild -bb --target=x86_64 /usr/src/redhat/SPECS/beep.spec
ビルド対象プラットフォーム: x86_64
ターゲット x86_64 用にビルド中
実行中(%prep): /bin/sh -e /var/tmp/rpm-tmp.59405

.....(中略).....

# rpm -Uvh /usr/src/redhat/RPMS/x86_64/beep-1.2.2-1.x86_64.rpm
準備中...                ########################################### [100%]
   1:beep                   ########################################### [100%]
これでインストール完了。


テスト用
$ beep -f 1000 -l 100 -n -f 1500 -l 100 -n -f 2000 -l 100 
ピロリッ♪と鳴れば成功。
後は、サーバーの監視系スクリプトの中でこのようにbeepコマンドを叩いてやればよい。
  • fで周波数(Hz)、-lで長さ(ms)、-nで区切る、という風に覚えておけば、別段困らない。
詳しくはbeepのmanを参照。

ユーザー権限で鳴らせるようにするには

setuidが一番楽かな…
# chmod u+s /usr/bin/beep
# ll /usr/bin/beep
-rwsr-xr-x 1 root root 8704  9月  4 00:31 /usr/bin/beep
不用意にユーザーに鳴らされたくない場合は、sudoers辺りにユーザーごとに権限設定するとよい。

それでもbeepが鳴らない

Fedora等では、pcspkrモジュールがデフォルトでONになってないみたいで、そのままでは鳴りません。
# modprobe pcspkr
再起動後も有効にするには、/etc/rc.local辺りに同じように書いておけばよい。