virt-installでkvmゲストをインストール

 article  Comments Off on virt-installでkvmゲストをインストール
Jul 202013
 

かなり以前にvirt-installで仮想マシンをお手軽セットアップという記事を書きました。
前回はCentOS 5でxenゲストのインストールでしたが、今回はCentOS 6でkvmゲストです。

対話式でCentOSのインストーラーを起動する形式になりますのでコンソールが必要になりますが、グラフィカルな画面なしにシリアルコンソールを使ってインストールを実行します。

virt-install -n centos1 -r 512 --disk /var/lib/libvirt/images/centos1.img,size=8 --graphics none -x 'console=tty0 console=ttyS0,115200n8 serial' -l http://ftp.iij.ad.jp/pub/linux/centos/6/os/x86_64/

ちなみにシリアルコンソールを指定する-xオプション(–extra-args)を使用する場合、-lオプション(–location)が必須です。

インストーラーが起動されますので通常どおりインストールすれば完了。

/boot/grub/grub.confにもシリアルコンソールの設定が含まれるようになるので、次回起動時もシリアルコンソールを利用できます。

serial --unit=0 --speed=115200
terminal --timeout=5 serial console
title CentOS (2.6.32-358.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto console=ttyS0,115200n8 rd_LVM_LV=VolGroup/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM
        initrd /initramfs-2.6.32-358.el6.x86_64.img

接続時は

virsh console centos1

切断時は接続時のプロンプトに出るように ^] (Ctrl+^ Ctrl+])で抜けられます。

Zabbix server is not running: the information displayed may not be current

 article  Comments Off on Zabbix server is not running: the information displayed may not be current
Jul 162013
 

CentOS 6.4にrepo.zabbix.comからパッケージを導入して。
zabbix_serverプロセスは動いているし、10051ポートもLISTENしている。
/etc/zabbix/web/zabbix.conf.phpも間違いない。

$ZBX_SERVER                     = 'localhost';
$ZBX_SERVER_PORT                = '10051';

SELinux有効な環境下では(ちなみにtargetedポリシーを素のまま利用)

setsebool -P httpd_can_network_connect=true

を実施する必要があった。

Zabbix server is not running: the information displayed may not be current – ZABBIX Forums

Eclipse Gitでgithub.comにsshでPushできない

 article  Comments Off on Eclipse Gitでgithub.comにsshでPushできない
Jul 012013
 

Eclipseでgithub.comにPushしようと思ったら初回でエラーになりました。
メッセージダイアログを見ているとSSHのホスト鍵を受け入れるか否か(Yes/No)のところでエラーになっている模様です。

ssh://git@github.com:22: org.eclipse.jgit.transport.CredentialItem$YesNoType:  
The authenticity of host 'github.com' can't be established.

ここでYesを入力すればSSH接続が確立されてPushもできるようになるはずですが、入力ダイアログもYes/Noのボタンも出てこないので途方に暮れていたところ、Stack Overflowにもろ回答がありました。
egit – How to push a new project in Github from Eclipse? – Stack Overflow

Git Repository Exploringパースペクティブに切り替えて、Remotesを定義してやることできちんとPushできるようになりました。

Debian S/390 on Hercules

 article  Comments Off on Debian S/390 on Hercules
Jun 182013
 

Debian amd64 (wheezy)にHerculesを入れて動かしてみました。

手順はほぼ以下の記事のとおりになります。
Installing Debian under Hercules

変更点は

  • DASDは3390-9型(約8GB)をroot用に、3390(約900MB)をswap用に割り当て
  • インストーラーはs390x用を使用
  • IPアドレスは169.254.0.1と169.254.0.2を使用

したことぐらいです。ちなみに設定ファイルはこちら。

CPUSERIAL  000069        # CPU serial number
CPUMODEL   9672          # CPU model number
MAINSIZE   512           # Main storage size in megabytes
XPNDSIZE   0             # Expanded storage size in megabytes
CNSLPORT   3270          # TCP port number to which consoles connect
NUMCPU     1             # Number of CPUs
LOADPARM   0120....      # IPL parameter
OSTAILOR   LINUX         # OS tailoring
PANRATE    SLOW          # Panel refresh rate (SLOW, FAST)
ARCHMODE   ESAME         # Architecture mode ESA/390 or ESAME

# .-----------------------Device number
# |       .-----------------Device type
# |       |       .---------File name and parameters
# |       |       |
# V       V       V
#---      ----    --------------------
# console
001F      3270

# terminal
0009      3215

# reader
000C      3505    ./rdr/kernel.debian ./rdr/parmfile.debian ./rdr/initrd.debian autopad eof

# printer
000E      1403    ./prt/print00e.txt crlf

# dasd
0120      3390    ./dasd/LINUX.ROOT
0121      3390    ./dasd/LINUX.SWAP

# network                                 s390        realbox
0A00,0A01 CTCI    -n /dev/net/tun -t 1500 169.254.0.2 169.254.0.1

インストールは前述の手順のとおりですんなりいったのですが、リブートしてもsshできません。
コンソールからログインして確認してみると、ctc0がきちんとupしていないようです。

root@s390:~#
.ifconfig ctc0
ifconfig ctc0
ctc0      Link encap:Serial Line IP
          POINTOPOINT NOARP  MTU:32760  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

root@s390:~#

試しにifup ctc0をおこなってみると構文エラーがあるようです。

root@s390:~#
.ifup ctc0
ifup ctc0
/etc/network/interfaces:18: option with empty value
ifup: couldn't read interfaces file "/etc/network/interfaces"
root@s390:~#

18行目はdns-searchで、こちらの値が空は許されないようです。

root@s390:~#
.cat /etc/network/interfaces
cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto ctc0
iface ctc0 inet static
        address 169.254.0.2
        netmask 255.255.255.255
        network 0.0.0.0
        broadcast 255.255.255.255
        pointopoint 169.254.0.1
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 192.168.11.1
        dns-search
root@s390:~#

インストール時にDomain name指定を空にしたのが敗因のようです。
インストールし直すのも面倒なので、interfacesファイルからdns-searchの行を取り除いてしまいます。

root@s390:~#
.mv /etc/network/interfaces{,.orig}
mv /etc/network/interfaces{,.orig}
root@s390:~#
.grep -v dns-search /etc/network/interfaces.orig > /etc/network/interfaces
grep -v dns-search /etc/network/interfaces.orig > /etc/network/interfaces
root@s390:~#

すると無事ifupできるようになりました。

root@s390:~#
.ifup ctc0
ifup ctc0
   615.082310! net ctc0: Connected with remote side
root@s390:~#
.ifconfig ctc0
ifconfig ctc0
ctc0      Link encap:Serial Line IP
          inet addr:169.254.0.2  P-t-P:169.254.0.1  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP  MTU:32760  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

root@s390:~#

ping疎通ノードにMasterを強制

 article  Comments Off on ping疎通ノードにMasterを強制
May 302013
 

Master/Slaveセットのリソースにおいて、ネットワーク疎通がOKなノードのみがMasterになれるようにするために、以下に掲載されているlocation制約を設ける方法がありました。
DRBD HowTo 1.0 – ClusterLabs

上記はcrmコマンドで設定する手順なのですが、pcsコマンドでは同様のことを定義する方法がわかりません。
MLでも質問が出ていますが、明確な回答は出ていないようです。
pcs group colocation and ping rules | Linux-HA | Pacemaker

仕方ないので、crmコマンドで定義した際に生成される内容をXMLで用意して、直接cibadminで登録しています。

# cat location-ping.xml
<constraints>
  <rsc_location id="ms-drbd-0_master_on_connected_node" rsc="ms-drbd0">
    <rule boolean-op="or" id="ms-drbd-0_master_on_connected_node-rule" role="Master" score="-INFINITY">
      <expression attribute="pingd" id="ms-drbd-0_master_on_connected_node-expression" operation="not_defined"/>
      <expression attribute="pingd" id="ms-drbd-0_master_on_connected_node-expression-0" operation="lte" value="0"/>
    </rule>
  </rsc_location>
</constraints>
# cibadmin -U -x location-ping.xml
# pcs constraint all
Location Constraints:
  Resource: ms-drbd0
    Rule: pingd not_defined  (score:-INFINITY) (id:ms-drbd-0_master_on_connected_node)
    Rule: pingd lte 0 (score:-INFINITY) (id:ms-drbd-0_master_on_connected_node)
Ordering Constraints:
Colocation Constraints:
#

PacemakerでMySQLレプリケーション構成

 article  Comments Off on PacemakerでMySQLレプリケーション構成
May 262013
 

最近のmysqlリソースエージェントでは、MySQLデータベースをMaster/Slaveセットとして構成することができます。
DRBD同様、TakeoverによってReplicationのMaster/Slaveを入れ替えることが可能となります。

ということで、CentOS 6.4のPacemakerを使ってMySQLデータベースをMaster/Slaveセットとして構成してみました。

セットアップする環境は以下になります。PacemakerとCorosync一式はCentOS提供のパッケージをインストールしクラスター構成済みです。

  • 1号機:pcmk11 (CentOS 6.4 x86_64)
  • 2号機:pcmk12 (CentOS 6.4 x86_64)

レプリケーションの設定

まずはPacemaker範囲外で、MySQLをインストールしてレプリケーションを構成します。ただしCHANGE MASTER TOは実施しません。
MySQLのレプリケーション構成手順の詳細は公式ドキュメントを参照してください。
http://dev.mysql.com/doc/refman/5.1/ja/replication-howto.html

MySQLのインストールおよび設定

MySQLをインストールし設定します。

[root@pcmk11 ~]# yum -y install mysql-server
[root@pcmk11 ~]# vi /etc/my.cnf

/etc/my.cnfは[mysqld]セクションに以下を追加します。server-idは1とします。

log-bin=mysql-bin
server-id=1

2号機も同様です。

[root@pcmk12 ~]# yum -y install mysql-server
[root@pcmk12 ~]# vi /etc/my.cnf

/etc/my.cnfは[mysqld]セクションに以下を追加します。server-idは2とします。

log-bin=mysql-bin
server-id=2

レプリケーションユーザーの作成

1号機側のみで作業します。まずMySQLを起動します。

[root@pcmk11 ~]# service mysqld start

レプリケーションユーザーを作成します。

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'slavepass';

アクセス元をもっと厳格に限定したい場合は、ホスト部分を環境にあわせて設定してください。

mysqlリソースエージェントでは、通常のレプリケーション以外にもread-onlyに切り替える権限をもったユーザーが必要になるため、localhostでもレプリケーションユーザーを作成します。

mysql> GRANT SUPER,REPLICATION SLAVE,REPLICATION CLIENT,PROCESS ON *.* TO 'repl'@'localhost' IDENTIFIED BY 'slavepass';

ユーザーを作成したら反映します。

mysql> FLUSH PRIVILEGES;

これらの権限が必要な理由についてはリソースエージェントで以下のように説明されています。

<parameter name="replication_user" unique="0" required="0">
<longdesc lang="en">
MySQL replication user. This user is used for starting and stopping
MySQL replication, for setting and resetting the master host, and for
setting and unsetting read-only mode. Because of that, this user must
have SUPER, REPLICATION SLAVE, REPLICATION CLIENT, and PROCESS
privileges on all nodes within the cluster.
</longdesc>
<shortdesc lang="en">MySQL replication user</shortdesc>
<content type="string" default="${OCF_RESKEY_replication_user_default}" />
</parameter>

mysqlを停止してデータベースファイル一式を2号機にコピーします。

[root@pcmk11 ~]# service mysqld stop
[root@pcmk11 ~]# ssh pcmk12 rm -rf /var/lib/mysql
[root@pcmk11 ~]# tar cf - -C /var/lib mysql | ssh pcmk12 tar xpvf - -C /var/lib/ 

クラスターリソースのセットアップ

最初にSlaveとして稼働させる2号機をStandbyにします。

[root@pcmk12 ~]# pcs cluster standby pcmk12

クラスターリソースを登録します。

[root@pcmk11 ~]# pcs cluster cib mysql_repl
[root@pcmk11 ~]# pcs -f mysql_repl resource create mysql ocf:heartbeat:mysql binary=/usr/bin/mysqld_safe pid=/var/run/mysqld/mysqld.pid
[root@pcmk11 ~]# pcs -f mysql_repl resource update mysql replication_user=repl
[root@pcmk11 ~]# pcs -f mysql_repl resource update mysql replication_passwd=slavepass
[root@pcmk11 ~]# pcs -f mysql_repl resource add_operation mysql start interval=0 timeout=120s
[root@pcmk11 ~]# pcs -f mysql_repl resource add_operation mysql stop interval=0 timeout=120s
[root@pcmk11 ~]# pcs -f mysql_repl resource add_operation mysql monitor interval=20s timeout=30s
[root@pcmk11 ~]# pcs -f mysql_repl resource add_operation mysql monitor interval=10s role=Master timeout=30s
[root@pcmk11 ~]# pcs -f mysql_repl resource add_operation mysql monitor interval=30s role=Slave timeout=30s
[root@pcmk11 ~]# pcs -f mysql_repl resource add_operation mysql promote interval=0 timeout=120s
[root@pcmk11 ~]# pcs -f mysql_repl resource add_operation mysql demote interval=0 timeout=120s
[root@pcmk11 ~]# pcs -f mysql_repl resource add_operation mysql notify interval=0 timeout=90s
[root@pcmk11 ~]# pcs cluster push cib mysql_repl

operation timeoutの設定はmysql RAの推奨値を設定しています。

Master/Slaveセットを作成します。

[root@pcmk11 ~]# pcs resource master mysql-clone mysql master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true

クラスターリソースを開始します。

[root@pcmk11 ~]# pcs resource start mysql-clone

1号機がMasterとして起動します。

[root@pcmk11 ~]# crm_mon -1
Last updated: Mon May 25 20:32:52 2013
Last change: Mon May 25 20:07:59 2013 via crm_attribute on pcmk11
Stack: classic openais (with plugin)
Current DC: pcmk11 - partition with quorum
Version: 1.1.8-7.el6-394e906
2 Nodes configured, 2 expected votes
2 Resources configured.


Node pcmk12: standby
Online: [ pcmk11 ]

 Master/Slave Set: mysql-clone [mysql]
     Masters: [ pcmk11 ]
     Stopped: [ mysql:1 ]
[root@pcmk11 ~]#

2号機のStandbyを解除します。

[root@pcmk11 ~]# pcs cluster unstandby pcmk12

2号機がSlaveのレプリケーション構成としてMySQLが起動します。

[root@pcmk11 ~]# crm_mon -1
Last updated: Mon May 25 20:46:52 2013
Last change: Mon May 25 20:16:59 2013 via crm_attribute on pcmk11
Stack: classic openais (with plugin)
Current DC: pcmk11 - partition with quorum
Version: 1.1.8-7.el6-394e906
2 Nodes configured, 2 expected votes
2 Resources configured.


Online: [ pcmk11 pcmk12 ]

 Master/Slave Set: mysql-clone [mysql]
     Masters: [ pcmk11 ]
     Slaves: [ pcmk12 ]
[root@pcmk11 ~]#

起動時の/var/log/mysqld.logを確認すると、CHANGE MASTER TOが実行されていることがわかります。

130525 21:07:40 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
InnoDB: The InnoDB memory heap is disabled
InnoDB: Mutexes and rw_locks use GCC atomic builtins
InnoDB: Compressed tables use zlib 1.2.3
130525 21:07:40  InnoDB: Initializing buffer pool, size = 128.0M
130525 21:07:41  InnoDB: Completed initialization of buffer pool
130525 21:07:41  InnoDB: highest supported file format is Barracuda.
130525 21:07:41 InnoDB Plugin 5.1.69 started; log sequence number 262393953
130525 21:07:41 [Note] Event Scheduler: Loaded 0 events
130525 21:07:41 [Note] /usr/libexec/mysqld: ready for connections.
Version: '5.1.69-log'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  Source distribution
130525 21:07:44 [Note] 'CHANGE MASTER TO executed'. Previous state master_host='', master_port='3306', master_log_file='', master_log_pos='4'. New state master_host='pcmk11', master_port='3306', master_log_file='', master_log_pos='4'.
130525 21:07:44 [Note] Slave SQL thread initialized, starting replication in log 'FIRST' at position 0, relay log '/var/lib/mysql/mysql-relay.000001' position: 4
130525 21:07:44 [Note] Slave I/O thread: connected to master 'repl@pcmk11:3306',replication started in log 'FIRST' at position 4

あとはpcs cluster standby pcmk11コマンドでMaster側をStandbyにするとMasterが切り替わります。
Masterが切り替わったらpcs cluster unstandby pcmk11してStandby解除するとpcmk11はSlaveとして稼働を開始します。

また、cib.xmlを見てみるとバイナリログの位置情報がノードの属性として記録されていることがわかります。

<nodes>
  <node id="pcmk12" uname="pcmk12">
    <instance_attributes id="nodes-pcmk12">
      <nvpair id="nodes-pcmk12-pcmk11-log-file-mysql" name="pcmk11-log-file-mysql" value="mysql-bin.000001"/>
      <nvpair id="nodes-pcmk12-pcmk11-log-pos-mysql" name="pcmk11-log-pos-mysql" value="1320619"/>
    </instance_attributes>
  </node>
  <node id="pcmk11" uname="pcmk11">
    <instance_attributes id="nodes-pcmk11"/>
  </node>
</nodes>

人手で確認してCHANGE MASTER TOを実行する必要がないため、セットアップも非常に楽になります。

CentOS 6.4でvmware-config-tools.plが失敗

 article  Comments Off on CentOS 6.4でvmware-config-tools.plが失敗
May 252013
 

カーネルアップデート後にVMware Toolsの再設定を実施しようとしたら失敗しました。

# vmware-config-tools.pl
:
Creating a new initrd boot image for the kernel.
vmware-tools-thinprint start/running
initctl: Job failed to start
Unable to start services for VMware Tools

Execution aborted.

#

どうもfuse-libsパッケージを削除してしまっていたことが原因のようで、インストールしたらあっさり解決。

# yum -y install fuse-libs
# vmware-config-tools.pl
:
Creating a new initrd boot image for the kernel.
vmware-tools-thinprint start/running
vmware-tools start/running
The configuration of VMware Tools 9.2.3 build-1031360 for Linux for this
running kernel completed successfully.

You must restart your X session before any mouse or graphics changes take
effect.

You can now run VMware Tools by invoking "/usr/bin/vmware-toolbox-cmd" from the
command line.

To enable advanced X features (e.g., guest resolution fit, drag and drop, and
file and text copy/paste), you will need to do one (or more) of the following:
1. Manually start /usr/bin/vmware-user
2. Log out and log back into your desktop session; and,
3. Restart your X session.

Enjoy,

--the VMware team

#

package-cleanup –leavesでリストアップされるので深く考えずに削除してしまったのが敗因です。

CentOS6.4 / RHEL6.4でcrmコマンド

 article  Comments Off on CentOS6.4 / RHEL6.4でcrmコマンド
May 042013
 

Red Hat 6.4からPacemakerのコマンドライン管理ツールがcrmからpcsに変更になりました。
pcsだとシンプルに設定できない項目等もありますので、どうしても慣れ親しんだcrmコマンドを使いたい場合は、openSUSE.orgのリポジトリで提供されているものを導入することができます。

yum install python-dateutil
rpm -Uvh http://download.opensuse.org/repositories/network:/ha-clustering/RedHat_RHEL-6/x86_64/pssh-2.3.1-15.1.x86_64.rpm
rpm -Uvh http://download.opensuse.org/repositories/network:/ha-clustering/RedHat_RHEL-6/x86_64/crmsh-1.2.5-55.3.x86_64.rpm

ちなみに私が設定したかった項目はこれです。
DRBD HowTo 1.0 – ClusterLabs

corosync-notifydでSNMPトラップ送信

 article  Comments Off on corosync-notifydでSNMPトラップ送信
Apr 182013
 

corosync-notifydを使って何が通知されるのか試してみました。

corosync-notifydを-sオプションで起動して、localhostにSNMPトラップを送信するようにします。

[root@pcmk-1 ~]# vi /etc/sysconfig/corosync-notifyd
[root@pcmk-1 ~]# cat /etc/sysconfig/corosync-notifyd
OPTIONS="-s"
[root@pcmk-1 ~]# chkconfig corosync-notifyd on
[root@pcmk-1 ~]# service corosync-notifyd start

snmptrapdをインストールして起動します。
お試しなので認証は無効にして、届いたトラップをそのままメールにするようにしました。
メール送信にはnet-snmp-perlパッケージのtraptoemailを使用します。

[root@pcmk-1 ~]# yum -y install net-snmp net-snmp-perl
[root@pcmk-1 ~]# cp -p /etc/snmp/snmptrapd.conf{,.orig}
[root@pcmk-1 ~]# vi /etc/snmp/snmptrapd.conf
[root@pcmk-1 ~]# cat /etc/snmp/snmptrapd.conf
# Example configuration file for snmptrapd
#
# No traps are handled by default, you must edit this file!
#
# authCommunity   log,execute,net public
# traphandle SNMPv2-MIB::coldStart    /usr/bin/bin/my_great_script cold

disableAuthorization yes
traphandle default /usr/bin/traptoemail root
[root@pcmk-1 ~]# chkconfig snmptrapd on
[root@pcmk-1 ~]# service snmptrapd start

corosync-notifydでノードの停止、起動を検知すると、以下のようなメールが飛びました。

1号機で2号機側の停止を検知した場合

To: root@pcmk-1.localdomain
From: root@pcmk-1.localdomain
Subject: trap received from localhost: SNMPv2-SMI::enterprises.35488.0.1

Host: localhost (UDP: [127.0.0.1]:58523->[127.0.0.1])
DISMAN-EVENT-MIB::sysUpTimeInstance  158:2:59:34.68
          SNMPv2-MIB::snmpTrapOID.0  SNMPv2-SMI::enterprises.35488.0.1
  SNMPv2-SMI::enterprises.35488.1.1  "pcmk-2"
  SNMPv2-SMI::enterprises.35488.1.2  365996224
  SNMPv2-SMI::enterprises.35488.1.4  "192.168.208.102"
  SNMPv2-SMI::enterprises.35488.1.3  "left"

1号機で2号機側の起動を検知した場合

To: root@pcmk-1.localdomain
From: root@pcmk-1.localdomain
Subject: trap received from localhost: SNMPv2-SMI::enterprises.35488.0.1

Host: localhost (UDP: [127.0.0.1]:58523->[127.0.0.1])
DISMAN-EVENT-MIB::sysUpTimeInstance  158:2:59:34.68
          SNMPv2-MIB::snmpTrapOID.0  SNMPv2-SMI::enterprises.35488.0.1
  SNMPv2-SMI::enterprises.35488.1.1  "pcmk-2"
  SNMPv2-SMI::enterprises.35488.1.2  365996224
  SNMPv2-SMI::enterprises.35488.1.4  "192.168.208.102"
  SNMPv2-SMI::enterprises.35488.1.3  "joined"

Tomcat起動スクリプト

 article  Comments Off on Tomcat起動スクリプト
Feb 182013
 

Apache Tomcat 7 (7.0.37) – Tomcat SetupのUnix daemonによりますと、Tomcarデーモンの起動はcommons-daemonプロジェクトのjsvcツールを使うのがよしとされています。
あわせて$CATALINA_HOME/bin/daemon.shが起動用rcスクリプトのテンプレートとして使えるとの情報があるのですが、コピーして加工するのも面倒なので、daemon.shを呼び出す形式での起動用rcスクリプトを用意してみました。CentOS 6で動作することを確認しています。

#!/bin/sh
#
# tomcat       Startup script for the Apache Tomcat Servlet/JSP container.
#
# chkconfig: - 80 10
# description: The Apache Tomcat Servlet/JSP container.
#

# Source function library.
. /etc/init.d/functions

RETVAL=0

JAVA_HOME=/opt/java
CATALINA_HOME=/opt/tomcat
DAEMON=$CATALINA_HOME/bin/daemon.sh
LOCKFILE=/var/lock/subsys/tomcat

start() {
        echo -n $"Starting tomcat: "
        $DAEMON --java-home $JAVA_HOME --catalina-home $CATALINA_HOME start
        RETVAL=$?
        if [ $RETVAL -eq 0 ]; then
                echo_success
                touch $LOCKFILE
        else
                echo failure
        fi
        echo
        return $RETVAL
}

stop() {
        echo -n $"Shutting down tomcat: "
        $DAEMON --java-home $JAVA_HOME --catalina-home $CATALINA_HOME stop
        RETVAL=$?
        if [ $RETVAL -eq 0 ]; then
                echo_success
                rm -f $LOCKFILE
        else
                echo failure
        fi
        echo
        return $RETVAL
}

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        stop
        start
        ;;
  status)
        status $CATALINA_HOME/bin/jsvc
        ;;
  *)
        echo $"Usage: $0 {start|stop|restart|status}"
        exit 3
esac

exit $?

daemon.shの引数で起動ユーザーを指定することもできますが、デフォルトtomcatなので未指定にしています。
変更したい場合は–tomcat-userをdaemon.sh呼び出し時の引数に追加してみてください。他にdaemon.sh呼び出し時に指定できる引数は–catalina-baseと–catalina-pidがあります。

daemon.shを追いかけてみるとわかるのですが、catalina.shを使うときと同様にsetenv.shが呼び出されるので、CATALINA_OPTSやLANG等、他に必要な変数をそちらに記述していくことができるので便利かと思っています。