gmt24's blog

"Using DRBD in Heartbeat CRM-enabled clusters"を試してXMLエラー

DRBDのページにあるチュートリアルをdebian sidで試していたらエラーになった。
Using DRBD in Heartbeat CRM-enabled clusters

debian1:~# cibadmin -U -x resources.xml
Call cib_modify failed (-47): Update does not conform to the DTD in /usr/share/heartbeat/crm.dtd
<null>

DTDに違反しているエラーっぽいが、どこの記述がまずいのかわからないのでxmllintで確認。

debian1:~# xmllint --dtdvalid file:///usr/share/heartbeat/crm.dtd resources.xml
resources.xml:5: element nvpair: validity error : Element nvpair does not carry attribute id
resources.xml:6: element nvpair: validity error : Element nvpair does not carry attribute id
resources.xml:13: element nvpair: validity error : Element nvpair does not carry attribute id
resources.xml:16: element operations: validity error : No declaration for attribute id of element operations
resources.xml:31: element nvpair: validity error : Element nvpair does not carry attribute id
resources.xml:32: element nvpair: validity error : Element nvpair does not carry attribute id
resources.xml:33: element nvpair: validity error : Element nvpair does not carry attribute id
resources.xml:41: element nvpair: validity error : Element nvpair does not carry attribute id
resources.xml:42: element nvpair: validity error : Element nvpair does not carry attribute id
Document resources.xml does not validate against file:///usr/share/heartbeat/crm.dtd

XML的にはnvpair要素にそれぞれidを割り付ける必要があるが、cibadminコマンドを経由すると自動で付与されるので無視できる。
問題は16行目のoperations要素で、こちらにはidを付けられないとのこと。
<operations>に変更して無事cibadminにて反映できた。

ZABBIXのデータ収集間隔を最小300秒に一括変更

ZABBIXでのデータ収集間隔はデフォルト5秒といったアイテムもあり、そのまま多数のノード監視に適用するとサーバー負荷が高くなりやすい。
面倒なのでitemsテーブルのdelay値を一括変更した。

# psql zabbix zabbix
Password for user zabbix: ********
psql (8.4.1)
Type "help" for help.

zabbix=> update items set delay=300 where delay<300;
UPDATE 4003
zabbix=> 

これで300秒未満に設定されているデータ収集間隔は全て300秒に変更される。

Fedora 12でのZABBIX PHPエラー

Fedora 12でZABBIXのzabbix-webパッケージをそのまま動かすと、PHPの警告が大量に表示されます。

Function ereg_replace() is deprecated[/usr/share/zabbix/include/page_header.php:398]
get_class() expects parameter 1 to be object, array given[/usr/share/zabbix/include/classes/ctable.inc.php:138]
:

Fedora 12のPHPバージョンが5.3.0なため、将来使えなくなるereg()関数などで警告が表示されているのですが、error_reportingの値を変更しても消すことはできません。
これはZABBIXの中でPHPの標準エラーハンドラーを置き換えているためのようです。
手っ取り早くエラー表示を消すには下記フォーラムに投稿されているように、zbx_err_handlerの呼び出しを抑止する必要があります。
PHP Errors - ZABBIX Forums

CentOSでマルチホームのルーティング設定

マルチホームなLinuxマシンで、受信したNICインターフェース側から応答を返す方法をCentOS 5.4で実装する方法です。

複数のアップリンク/プロバイダに対するルーティング
として例示される設定を、スクリプトではなくCentOSの設定ファイルで記述してみます。

上記例でのポイントはip route addコマンドの実行とip rule addコマンドの実行です。
Fedora等のRed Hat系ではNICインターフェースのアップ時(/sbin/ifupコマンド実行時)に、/etc/sysconfig/network-scripts配下のifup-ethやifup-routesコマンドが呼びだされます。

ifup-routesスクリプトを眺めてみると、routes-eth*やrules-eth*を記述しておくとその内容を引数にしてそれぞれip route addとip rule addを実行してることがわかります。

この方法のよいところはifdown実行時にifdown-routesスクリプトでルールの削除処理(ip rule del)もおこなってくれるところです。

構成

ネットワーク構成

                     +------------+       +----------
                     |            |       |
       +-------------+ Provider 1 +-------+
       |             |            |       |
+------+-------+     +------------+       |
|     eth1     |                          |
|              |                          |
| Linux router |                          | Internet
|              |                          |
|     eth2     |                          |
+------+-------+     +------------+       |
       |             |            |       |
       +-------------+ Provider 2 +-------+
                     |            |       |
                     +------------+       +----------

Provider 1構成

  • N/W アドレス: 192.0.2.0/25
  • Linux IPアドレス: 192.0.2.1
  • Provider1 IPアドレス: 192.0.2.126

Provider 2構成

  • N/W アドレス: 192.0.2.128/25
  • Linux IPアドレス: 192.0.2.129
  • Provider1 IPアドレス: 192.0.2.254

設定内容

/etc/iproute2/rt_tablesの末尾にテーブルを追加。

200 Provider1
201 Provider2

/etc/sysconfig/network-scripts/routes-eth1

192.0.2.0/25 dev eth1 src 192.0.2.1 table Provider1
default via 192.0.2.126 table Provider1
192.0.2.0/25 dev eth1 src 192.0.2.1

/etc/sysconfig/network-scripts/routes-eth2

192.0.2.128/25 dev eth2 src 192.0.2.129 table Provider2
default via 192.0.2.254 table Provider2
192.0.2.128/25 dev eth2 src 192.0.2.129

/etc/sysconfig/network-scripts/rules-eth1

from 192.0.2.1 table Provider1

/etc/sysconfig/network-scripts/rules-eth2

from 192.0.2.129 table Provider2

defaultルートは/etc/sysconfig/network-scripts/ifcfg-eth*のどちらかにGATEWAYを設定すればOKです。

一点気になるのは、/etc/sysconfig/network-scripts/ifup-routesスクリプトでip route addコマンドの引数をそのまま記述する方式は"older format"とコメントされていることです。
もしかしたら近い将来使えなくなるのかも知れませんが、Fedora 12ではまだ使えるようなのでしばらくは大丈夫でしょう Sticking out tongue

ESXi 4.0でのSNMP有効化

ESXi 4.0を評価モードで利用し、SNMPを有効にしてみる。
以下、ESXiのIPアドレスは192.0.2.1、SNMPトラップを受信するサーバーのIPアドレスは192.0.2.2の場合の例。

# vicfg-snmp --server 192.0.2.1 --username root -E -c public -t 192.0.2.2@162/public
Enter password: 
# vicfg-snmp --server 192.0.2.1 --username root -s
Enter password:
Current SNMP agent settings:
Enabled  : 1
UDP port : 161

Communities :
public

Notification targets :
192.0.2.2@162/public

トラップをテスト送信してみる。

# vicfg-snmp --server 192.0.2.1 --username root -T
Enter password:
Sending test nofication(trap) to all configured targets...
Complete. Check with each target to see if trap was received.

192.0.2.2のサーバーではsnmptrapdが動作済みで、/var/log/messagesに以下が記録された。

Oct  8 23:32:37 192.0.2.2 snmptrapd[9386]: 2009-10-08 23:32:37 192.0.2.1(via UDP: [10.0.0.1]:51469) TRAP, SNMP v1, community public  SNMPv2-
SMI::enterprises.6876.4.1 Warm Start Trap (0) Uptime: 15:31:50.16

snmpwalkをやってみるとこんな感じ(マシンはHP ML115 G5)。

# snmpwalk -v 1 -c public 192.0.2.1 .
SNMPv2-MIB::sysDescr.0 = STRING: VMware ESX 4.0.0 build-171294 VMware, Inc. x86_64
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.6876.4.1
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (154208) 0:25:42.08
SNMPv2-MIB::sysContact.0 = STRING: not set
SNMPv2-MIB::sysName.0 = STRING: localhost.localdomain
SNMPv2-MIB::sysLocation.0 = STRING: not set
SNMPv2-MIB::sysServices.0 = INTEGER: 72
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORID.1 = OID: SNMPv2-MIB::snmpMIB
SNMPv2-MIB::sysORID.2 = OID: IF-MIB::ifMIB
SNMPv2-MIB::sysORID.3 = OID: SNMPv2-SMI::enterprises.6876.1.10
SNMPv2-MIB::sysORID.4 = OID: SNMPv2-SMI::enterprises.6876.2.10
SNMPv2-MIB::sysORID.5 = OID: SNMPv2-SMI::enterprises.6876.3.10
SNMPv2-MIB::sysORDescr.1 = STRING: SNMPv2-MIB, RFC 3418
SNMPv2-MIB::sysORDescr.2 = STRING: IF-MIB, RFC 2863
SNMPv2-MIB::sysORDescr.3 = STRING: VMWARE-SYSTEM-MIB, REVISION 200801120000Z
SNMPv2-MIB::sysORDescr.4 = STRING: VMWARE-VMINFO-MIB, REVISION 200810230000Z
SNMPv2-MIB::sysORDescr.5 = STRING: VMWARE-RESOURCES-MIB, REVISION 200810150000Z
SNMPv2-MIB::sysORUpTime.1 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.2 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.3 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.4 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.5 = Timeticks: (0) 0:00:00.00
IF-MIB::ifNumber.0 = INTEGER: 1
IF-MIB::ifDescr.1 = STRING: Device vmnic0 at 11:00.0 tg3
IF-MIB::ifType.1 = INTEGER: ethernetCsmacd(6)
IF-MIB::ifMtu.1 = INTEGER: 1500
IF-MIB::ifSpeed.1 = Gauge32: 100000000
IF-MIB::ifPhysAddress.1 = STRING: 0:21:5a:eb:3b:d0
IF-MIB::ifAdminStatus.1 = INTEGER: up(1)
IF-MIB::ifOperStatus.1 = INTEGER: up(1)
IF-MIB::ifLastChange.1 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::snmpInPkts.0 = Counter32: 342
SNMPv2-MIB::snmpInBadVersions.0 = Counter32: 0
SNMPv2-MIB::snmpInBadCommunityNames.0 = Counter32: 0
SNMPv2-MIB::snmpInBadCommunityUses.0 = Counter32: 0
SNMPv2-MIB::snmpInASNParseErrs.0 = Counter32: 0
SNMPv2-MIB::snmpEnableAuthenTraps.0 = INTEGER: disabled(2)
SNMPv2-MIB::snmpSilentDrops.0 = Counter32: 0
SNMPv2-MIB::snmpProxyDrops.0 = Counter32: 0
SNMPv2-SMI::enterprises.6876.1.1.0 = STRING: "VMware ESXi"
SNMPv2-SMI::enterprises.6876.1.2.0 = STRING: "4.0.0"
SNMPv2-SMI::enterprises.6876.1.4.0 = STRING: "171294"
SNMPv2-SMI::enterprises.6876.2.1.1.2.16 = STRING: "centos5.localdomain"
SNMPv2-SMI::enterprises.6876.2.1.1.3.16 = STRING: "/vmfs/volumes/4ace6c4c-99080d8b-93fc-00215aeb3bd0/centos53/centos53.vmx"
SNMPv2-SMI::enterprises.6876.2.1.1.4.16 = STRING: "rhel5-64"
SNMPv2-SMI::enterprises.6876.2.1.1.5.16 = INTEGER: 512
SNMPv2-SMI::enterprises.6876.2.1.1.6.16 = STRING: "poweredOn"
SNMPv2-SMI::enterprises.6876.2.1.1.7.16 = INTEGER: 16
SNMPv2-SMI::enterprises.6876.2.1.1.8.16 = STRING: "running"
SNMPv2-SMI::enterprises.6876.2.1.1.9.16 = INTEGER: 1
SNMPv2-SMI::enterprises.6876.2.2.1.3.16.1000 = STRING: "scsi0"
SNMPv2-SMI::enterprises.6876.2.2.1.4.16.1000 = STRING: "PN5Vmomi4TypeE"
SNMPv2-SMI::enterprises.6876.2.3.1.3.16.2000 = STRING: "scsi0:0"
SNMPv2-SMI::enterprises.6876.2.4.1.3.16.4000 = STRING: "ethernet0"
SNMPv2-SMI::enterprises.6876.2.4.1.4.16.4000 = STRING: "VM Network"
SNMPv2-SMI::enterprises.6876.2.4.1.5.16.4000 = STRING: "monitor_dev"
SNMPv2-SMI::enterprises.6876.2.4.1.6.16.4000 = STRING: "true"
SNMPv2-SMI::enterprises.6876.2.4.1.7.16.4000 = Hex-STRING: 00 0C 29 77 63 B6
SNMPv2-SMI::enterprises.6876.2.6.1.3.16.3002 = STRING: "/vmfs/devices/genscsi/mpx.vmhba2:C0:T0:L0"
SNMPv2-SMI::enterprises.6876.2.6.1.4.16.3002 = STRING: "false"
SNMPv2-SMI::enterprises.6876.3.1.1.0 = Gauge32: 1
SNMPv2-SMI::enterprises.6876.3.2.1.0 = Gauge32: 4189816
SNMPv2-SMI::enterprises.6876.3.2.2.0 = Gauge32: 0
SNMPv2-SMI::enterprises.6876.3.2.3.0 = Gauge32: 4189816
SNMPv2-SMI::enterprises.6876.3.5.1.0 = INTEGER: 6
SNMPv2-SMI::enterprises.6876.3.5.2.1.2.1 = STRING: "vmhba0"
SNMPv2-SMI::enterprises.6876.3.5.2.1.2.2 = STRING: "vmhba1"
SNMPv2-SMI::enterprises.6876.3.5.2.1.2.3 = STRING: "vmhba2"
SNMPv2-SMI::enterprises.6876.3.5.2.1.2.4 = STRING: "vmhba32"
SNMPv2-SMI::enterprises.6876.3.5.2.1.2.5 = STRING: "vmhba33"
SNMPv2-SMI::enterprises.6876.3.5.2.1.2.6 = STRING: "vmhba34"
SNMPv2-SMI::enterprises.6876.3.5.2.1.3.1 = INTEGER: 0
SNMPv2-SMI::enterprises.6876.3.5.2.1.3.2 = INTEGER: 0
SNMPv2-SMI::enterprises.6876.3.5.2.1.3.3 = INTEGER: 0
SNMPv2-SMI::enterprises.6876.3.5.2.1.3.4 = INTEGER: 0
SNMPv2-SMI::enterprises.6876.3.5.2.1.3.5 = INTEGER: 0
SNMPv2-SMI::enterprises.6876.3.5.2.1.3.6 = INTEGER: 0
SNMPv2-SMI::enterprises.6876.3.5.2.1.4.1 = INTEGER: 1
SNMPv2-SMI::enterprises.6876.3.5.2.1.4.2 = INTEGER: 1
SNMPv2-SMI::enterprises.6876.3.5.2.1.4.3 = INTEGER: 1
SNMPv2-SMI::enterprises.6876.3.5.2.1.4.4 = INTEGER: 1
SNMPv2-SMI::enterprises.6876.3.5.2.1.4.5 = INTEGER: 1
SNMPv2-SMI::enterprises.6876.3.5.2.1.4.6 = INTEGER: 1
SNMPv2-SMI::enterprises.6876.3.5.2.1.5.1 = STRING: "MCP55 SATA Controller"
SNMPv2-SMI::enterprises.6876.3.5.2.1.5.2 = STRING: "MCP55 SATA Controller"
SNMPv2-SMI::enterprises.6876.3.5.2.1.5.3 = STRING: "MCP55 SATA Controller"
SNMPv2-SMI::enterprises.6876.3.5.2.1.5.4 = STRING: "MCP55 SATA Controller"
SNMPv2-SMI::enterprises.6876.3.5.2.1.5.5 = STRING: "MCP55 SATA Controller"
SNMPv2-SMI::enterprises.6876.3.5.2.1.5.6 = STRING: "MCP55 SATA Controller"
SNMPv2-SMI::enterprises.6876.3.5.2.1.6.1 = STRING: "sata_nv"
SNMPv2-SMI::enterprises.6876.3.5.2.1.6.2 = STRING: "sata_nv"
SNMPv2-SMI::enterprises.6876.3.5.2.1.6.3 = STRING: "sata_nv"
SNMPv2-SMI::enterprises.6876.3.5.2.1.6.4 = STRING: "sata_nv"
SNMPv2-SMI::enterprises.6876.3.5.2.1.6.5 = STRING: "sata_nv"
SNMPv2-SMI::enterprises.6876.3.5.2.1.6.6 = STRING: "sata_nv"
SNMPv2-SMI::enterprises.6876.3.5.2.1.7.1 = STRING: "00:05.0"
SNMPv2-SMI::enterprises.6876.3.5.2.1.7.2 = STRING: "00:05.1"
SNMPv2-SMI::enterprises.6876.3.5.2.1.7.3 = STRING: "00:05.2"
SNMPv2-SMI::enterprises.6876.3.5.2.1.7.4 = STRING: "00:05.0"
SNMPv2-SMI::enterprises.6876.3.5.2.1.7.5 = STRING: "00:05.1"
SNMPv2-SMI::enterprises.6876.3.5.2.1.7.6 = STRING: "00:05.2"
End of MIB

zabbix-server-mysqlパッケージの起動不具合

zabbix-server-mysqlパッケージのzabbix-serverがboot時に起動しない。
ログをみるとmysqlに接続できずにエラーとなっている。

Connection to database 'zabbix' failed: [2002] Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

原因はrcスクリプトの起動順序指定。runlevel Sの時点ではmysqlは起動していない。

### BEGIN INIT INFO
# Provides:          zabbix-server
# Required-Start:    $local_fs $network
# Required-Stop:     $local_fs
# Default-Start:     S
# Default-Stop:      0 6
# Short-Description: Start zabbix-server daemon
### END INIT INFO

こちらをmysql前提に変更し(Required-Start/Required-Stop)、起動、停止するrunlevelもmysqlに合わせて解決。

### BEGIN INIT INFO
# Provides:          zabbix-server
# Required-Start:    mysql
# Required-Stop:     mysql
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start zabbix-server daemon
### END INIT INFO

vSphere Remote CLI on CentOS 5.3

CentOS 5.3にvSphere Remote CLIを入れてみたが動かない。

$ vmware-cmd --server vir.example.jp --user root -l
Enter password:
Error: Server version unavailable at 'https://vir.example.jp/sdk/vimService.wsdl'

$

PerlモジュールのCrypt::SSLeayのバージョンが低かった模様。
perl-Crypt-SSLeayパッケージを入れていたが、こちらをCPANから入れなおす。

# yum remove perl-Crypt-SSLeay
# yum -y install openssl-devel.x86_64 gcc
# perl -MCPAN -e shell
cpan> install Crypt::SSLeay
:
cpan> exit

そしてvSphere Remote CLIを再度インストール。

# ./vmware-vsphere-cli-distrib/vmware-install.pl

Debianでiptables設定

Debianでiptablesを設定する方法。
iptables - Debian Wiki
Red Hat等と違って設定用のパッケージを何かしら入れるか、手動で設定してあげる必要があります。

Oracle Express Editionインストール

Oracle Express EditionをCentOS 5.3(x86_64,最小構成インストール)にインストールした際のメモ。
Oracle 11g R2も出荷されたことだし、XEも11gになることを期待。

前提パッケージの導入

# yum -y install libaio.i386 bc
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.jaist.ac.jp
 * updates: ftp.jaist.ac.jp
 * addons: ftp.jaist.ac.jp
 * extras: ftp.jaist.ac.jp
base                                                                                             | 1.1 kB     00:00
updates                                                                                          |  951 B     00:00
addons                                                                                           |  951 B     00:00
extras                                                                                           | 1.1 kB     00:00
Setting up Install Process
Parsing package install arguments
Resolving Dependencies
--> Running transaction check
---> Package libaio.i386 0:0.3.106-3.2 set to be updated
---> Package bc.x86_64 0:1.06-21 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================================
 Package                    Arch                       Version                           Repository                Size
========================================================================================================================
Installing:
 bc                         x86_64                     1.06-21                           base                     110 k
 libaio                     i386                       0.3.106-3.2                       base                      19 k

Transaction Summary
========================================================================================================================
Install      2 Package(s)
Update       0 Package(s)
Remove       0 Package(s)

Total download size: 129 k
Downloading Packages:
(1/2): libaio-0.3.106-3.2.i386.rpm                                                               |  19 kB     00:00
(2/2): bc-1.06-21.x86_64.rpm                                                                     | 110 kB     00:00
------------------------------------------------------------------------------------------------------------------------
Total                                                                                   275 kB/s | 129 kB     00:00
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : bc                                                [1/2]
  Installing     : libaio                                            [2/2]

Installed: bc.x86_64 0:1.06-21 libaio.i386 0:0.3.106-3.2
Complete!
#

※bcはpost-installスクリプトで使われている

oracle-xe-univパッケージの導入

# rpm -Uvh oracle-xe-univ-10.2.0.1-1.0.i386.rpm
Preparing...                ########################################### [100%]
   1:oracle-xe-univ         ########################################### [100%]
Executing Post-install steps...

You must run '/etc/init.d/oracle-xe configure' as the root user to configure the database.

#

Oracle XE設定

# /etc/init.d/oracle-xe configure

Oracle Database 10g Express Edition Configuration
-------------------------------------------------
This will configure on-boot properties of Oracle Database 10g Express
Edition.  The following questions will determine whether the database should
be starting upon system boot, the ports it will use, and the passwords that
will be used for database accounts.  Press  to accept the defaults.
Ctrl-C will abort.

Specify the HTTP port that will be used for Oracle Application Express [8080]:

Specify a port that will be used for the database listener [1521]:

Specify a password to be used for database accounts.  Note that the same
password will be used for SYS and SYSTEM.  Oracle recommends the use of
different passwords for each database account.  This can be done after
initial configuration:
Confirm the password:

Do you want Oracle Database 10g Express Edition to be started on boot (y/n) [y]:

Starting Oracle Net Listener...Done
Configuring Database...Done
Starting Oracle Database 10g Express Edition Instance...Done
Installation Completed Successfully.
To access the Database Home Page go to "http://127.0.0.1:8080/apex"
#

Database Home Pageにloclhost以外からもアクセスできるようにする

# . /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/oracle_env.sh
# sqlplus system

SQL*Plus: Release 10.2.0.1.0 - Production on Sun Sep 27 13:11:58 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Enter password:

Connected to:
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

SQL> EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);

PL/SQL procedure successfully completed.

SQL> exit
Disconnected from Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
#

参考資料
Oracle® Database Express Edition Installation Guide 10g Release 2 (10.2) for Linux

削除してしまったSSL秘密鍵をhttpdプロセスから復元

[Apache-Users 7417] 誤消去してしまった秘密鍵の復元
から始まるスレッドでの話題です。
そんなの無理だろうと思っていたら、gdbでhttpdプロセスにcore吐かせて、その中に秘密鍵らしき部分をみつけたとのこと。