著者:飯坂剛一

Publish: 2007/12/05

概要

powerctlコマンドは登録したホストの 電源制御やリセット、shutdownを行うための テキストユーザインタフェースです。

この資料では、powerctlの設定方法と使用方法について説明します。

インストール

powerctlをインストールするためには、 次のパッケージをインストールします。

2つのperlのパッケージはilopowerが必要としているものです。

powerctl は freeipmiに含まれる ipmipower、 ilopower に含まれる ilopower を内部で呼び出していいます。

IPMIは各社ほとんどのコンピュータがサポートしています。 ILOはHP社の一部のコンピュータがサポートします。

IPMIとILOについの詳細は次のURLを参照してください。

Important

ilopowerは 1.0-5 より以前のバージョンには ホスト名での指定ができないバグが見つかっています。

設定ファイル

powerctlコマンドは /etc/powerctl.d/powerctl.conf ファイルを読み込んでいます。

セキュリティー上の理由からこのファイルはrootでしか 読み込めないようにしておいてください。

username と password は各ノードに設定したIDとパスワードに置き換えてください。

[DEFAULT]
type = IPMI
username = foo
password = hogehoge

[compute-0-0]
ip    = 172.16.3.1
    :
    :

次のように記述することで、 パスワードやIDが異なるような場合や、 IPMIとILOの混在環境でも電源制御することができます。

[DEFAULT]
type = IPMI
username = foo
password = hogehoge

[compute-0-0]
type = ILO
username = foo
password = hogehoge
ip    = 172.16.3.1

[compute-0-1]
type = IPMI
username = hoo
password = houhou
ip    = 172.16.3.2

設定ファイル(powerctl.conf)の記述方法

[DEFAULT]タグには全ノード共通の情報を記述でき、つぎの3つが指定できます。

[ホスト名]タグには該当ホストのホスト名の情報を記述します。

powerctl-hostconvについて

powerctl-hostconv コマンドは、 既存ホストの情報から電源制御用のホスト情報を 生成するためのスクリプトです。

使用方法:

# powerctl-hostconv [-p パターン] サブネット 電源制御用サブネット

このスクリプトは /etc/hosts 中の各エントリで、 compute の文字列に合致するホストを対象にして、 サブネットを変換して標準出力へ出力します。

検索パターンを環境変数BMC_HOSTPTNで定義するか、 -p オプションで指示することで、 computeと異なる文字列に合致するホストを対象とすることもできます。

今、次のようなエントリが/etc/hostsにあり、 電源制御用にアサインしているネットワークが192.168.20.0だとします。

[root@cluster sbin]# grep compute /etc/hosts
192.168.10.254  compute-0-0.local compute-0-0 c0-0
192.168.10.253  compute-0-1.local compute-0-1 c0-1
192.168.10.252  compute-0-2.local compute-0-2 c0-2
192.168.10.251  compute-0-3.local compute-0-3 c0-3
192.168.10.250  compute-0-4.local compute-0-4 c0-4
192.168.10.249  compute-0-5.local compute-0-5 c0-5
192.168.10.248  compute-0-6.local compute-0-6 c0-6
192.168.10.247  compute-0-7.local compute-0-7 c0-7
192.168.10.246  compute-0-8.local compute-0-8 c0-8
192.168.10.245  compute-0-9.local compute-0-9 c0-9
192.168.10.244  compute-0-10.local compute-0-10 c0-10
192.168.11.244  compute-0-10-eth1
192.168.11.245  compute-0-9-eth1
192.168.11.246  compute-0-8-eth1
192.168.11.247  compute-0-7-eth1
192.168.11.248  compute-0-6-eth1
192.168.11.249  compute-0-5-eth1
192.168.11.250  compute-0-4-eth1
192.168.11.251  compute-0-3-eth1
192.168.11.252  compute-0-2-eth1
192.168.11.253  compute-0-1-eth1
192.168.11.254  compute-0-0-eth1

次のようにコマンドを実行することで 電源制御用のhostsファイルを生成することができます。

[root@cluster sbin]# powerctl-hostconv 192.168.10.0 192.168.20.0
192.168.20.254  compute-0-0-bmc
192.168.20.253  compute-0-1-bmc
192.168.20.252  compute-0-2-bmc
192.168.20.251  compute-0-3-bmc
192.168.20.250  compute-0-4-bmc
192.168.20.249  compute-0-5-bmc
192.168.20.248  compute-0-6-bmc
192.168.20.247  compute-0-7-bmc
192.168.20.246  compute-0-8-bmc
192.168.20.245  compute-0-9-bmc
192.168.20.244  compute-0-10-bmc

powerctlの実行方法

フロントエンドノードにログインして、 root ユーザになります。

root権限で/usr/sbin/powerctl を実行します。

powerctlの画面

カーソルキーとスペースキーで対象ホストを選択し、 タブキーでコマンドを選択して操作します。

各コマンドは次の操作となります。

応用例

make コマンドをメニューのように使って、 でマシンを起動/停止する方法について説明します。

はじめに、/etc/hostsに各マシンのIPMIあるいはILOのためのアドレスを 次のように記述しておきます。 IPアドレスは任意で構いませんが、 ホスト名は "-bmc" を付けた名前にしておきます。

192.168.13.254  compute-0-0-bmc
192.168.13.253  compute-0-1-bmc
192.168.13.252  compute-0-2-bmc
192.168.13.251  compute-0-3-bmc

次のようなMakefileを記述します。 Makefile 中の HOSTPTN で指定した文字列に合致するホストを /etc/hosts から探してそれに対して、 BOOT_METHOD で指定したプロトコルのコマンドを呼び出しています。

admin と password は設定したIDとパスワードに置き換えてください。

# BOOT_METHOD:  boot-ilo | boot-ipmi
BOOT_METHOD=boot-ilo

IPMICMD=/usr/sbin/ipmipower -u admin -p password
ILOCMD=/usr/sbin/ilopower -u admin -p password

# TIMEOUT: in milliseconds.
#    i.e.: 20000 milliseconds is 20 seconds.
TIMEOUT=-t 40000

# Set the pattern string for seach BMC host in /etc/hosts.
HOSTPTN=bmc

# set the interval seconds for BOOT up.
BOOTINTERVAL=2

.PHONY: boot
boot: $(BOOT_METHOD)
        @echo

.PHONY: shutdown
shutdown:
        @echo "CAUTION: all compute node will be shutdown!"
        @echo -n "You have chance to cancel this process in 10sec."
        @for T in 1 2 3 4 5 6 7 8 9 10 ; do \
                sleep 1 ; echo -n "." ; \
        done ; echo
        @ScatterCmd "/sbin/shutdown -h now"

BMCHOSTS=$(shell grep -- $(HOSTPTN) /etc/hosts | cut -f2)
.PHONY: boot-ipmi
boot-ipmi:
        @echo "Waiting $(BOOTINTERVAL) seconds on each nodes."
        @echo 'In many case, you can ignore "timeout"'
        @for H in $(BMCHOSTS) ; do \
                HOST=`echo $$H | cut -d- -f1 ` ; \
                $(IPMICMD) $(TIMEOUT) -h $$H --on  || : ; \
                sleep $(BOOTINTERVAL) ; \
        done ; echo

.PHONY: boot-ilo
boot-ilo:
        @echo "Waiting $(BOOTINTERVAL) seconds on each nodes."
        @for H in $(BMCHOSTS) ; do \
                HOST=`echo $$H | cut -d- -f1 ` ; \
                $(ILOCMD) -H $$H --on  || : ; \
                sleep $(BOOTINTERVAL) ; \
        done ; echo

make コマンドでの起動の実行例:

# make boot

make コマンドでの停止の実行例:

# make shutdown