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

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等、他に必要な変数をそちらに記述していくことができるので便利かと思っています。

CentOS 6.0のAMI用ディスクイメージ作成

 article  Comments Off on CentOS 6.0のAMI用ディスクイメージ作成
Dec 162012
 

■2013/02/17追記
CentOSコミュニティで公式AMIを提供しはじめましたのでそちらを使ったほうがよいと思います。

CentOS 6.0 x86_64のAMIベースになるディスクイメージを作成してみました。

CentOS 5.0用を作ったときと違ってcloud-initも最初から入れちゃいます。

  1. 作業用のRed Hat 6系列Linuxを環境を準備(EC2上に用意)
  2. 2GiBのEBSボリュームを用意してCentOS 6.0を最小構成インストール
  3. PV-GRUBでブートできるようにinitrdやgrub.confを構成
  4. 仕上がったEBSボリュームのスナップショットを取得しAMIとして登録

5.0のときと違って、最初から最後までEC2上で作業していきます。

今回参考にした情報は以下です。
From a Loopback – Amazon Elastic Compute Cloud
Enabling Your Own Linux Kernels – Amazon Elastic Compute Cloud

作業用マシン準備
EC2標準のRHEL6(x86_64)を起動します。
EBSボリュームマウント先として/mnt/ec2-fsを作成します。

[root@localhost ~]# mkdir /mnt/ec2-fs

selinux関連パッケージにエラーになるため、作業マシンでは無効化しておきます。

[root@localhost ~]# setenforce 0

EBS準備
2GiBのEBSボリュームを用意して/dev/xvdjにマウントします。xvdjにしているのはRHEL6でデバイスファイルが用意されていたから。

[root@localhost ~]# mkfs.ext4 /dev/xvdj
[root@localhost ~]# mount /dev/xvdj /mnt/ec2-fs

yumインストール用の設定ファイルを作成
6.0素の最小構成しますので、baseリポジトリのみ有効(updatesは無効)にしています。
6.0のリポジトリは既にvaultに移っていますので、baseurlではそちらを指定します。

[root@localhost ~]# vi centos-6-0-x86_64-yum.conf
[root@localhost ~]# cat centos-6-0-x86_64-yum.conf
[main]
cachedir=/var/cache/yum
debuglevel=2
logfile=/var/log/yum.log
exclude=*-debuginfo
gpgcheck=0
obsoletes=1
reposdir=/dev/null

[base]
name=CentOS-6.0 - Base
baseurl=http://vault.centos.org/6.0/os/x86_64/

[updates]
name=CentOS 6.0 - Updates
baseurl=http://vault.centos.org/6.0/updates/x86_64/
enabled=0

必要最低限のパッケージをインストール
パッケージグループCoreをインストールします。
パッケージkerel-xenをインストールします。

[root@localhost ~]# yum -c centos-6-0-x86_64-yum.conf --installroot=/mnt/ec2-fs -y groupinstall Core
:
Install     181 Package(s)

Total download size: 88 M
Installed size: 324 M
:

展開サイズは324Mですので、2GiBのEBSでも十分足ります。

/etc/fstab作成
kernelパッケージのインストール時にinitrdが生成されますが、その際fstabの記述に従ってrootパーティションのマウント指定が決定されますので記述を用意します。
ちなみに作業マシンのRHEL6とほぼ同じになります。

[root@localhost ~]# vi /mnt/ec2-fs/etc/fstab
[root@localhost ~]# cat /mnt/ec2-fs/etc/fstab
LABEL=_/   /         ext4    defaults        1 1
none       /proc     proc    defaults        0 0
none       /sys      sysfs   defaults        0 0
none       /dev/pts  devpts  gid=5,mode=620  0 0
none       /dev/shm  tmpfs   defaults        0 0

fstab指定に合わせてLABELを作成します。

[root@localhost ~]# e2label /dev/xvdj _/
[root@localhost ~]# e2label /dev/xvdj
_/

/etc/modprobe.conf作成
こちらもfstab同様にkernelインストール前に実施しておき、initrdイメージにxen関連のモジュールが含まれるようにします。

[root@localhost ~]# cat >> /mnt/ec2-fs/etc/modprobe.conf << EOF
alias eth0 xennet
alias scsi_hostadapter xenblk
EOF
[root@localhost ~]# tail -2 /mnt/ec2-fs/etc/modprobe.conf
alias eth0 xennet
alias scsi_hostadapter xenblk

パッケージkernelをインストールします。

[root@localhost ~]# yum -c centos-6-0-x86_64-yum.conf --installroot=/mnt/ec2-fs -y install kernel

クリーンアップ

[root@localhost ~]# yum -c centos-6-0-x86_64-yum.conf --installroot=/mnt/ec2-fs clean all

デバイスファイルの作成

[root@localhost ~]# /mnt/ec2-fs/sbin/MAKEDEV -d /mnt/ec2-fs/dev -c /mnt/ec2-fs/etc/makedev.d -x console
[root@localhost ~]# /mnt/ec2-fs/sbin/MAKEDEV -d /mnt/ec2-fs/dev -c /mnt/ec2-fs/etc/makedev.d -x null
[root@localhost ~]# /mnt/ec2-fs/sbin/MAKEDEV -d /mnt/ec2-fs/dev -c /mnt/ec2-fs/etc/makedev.d -x zero

/boot/grub/grub.conf作成
EBS内のkernelで起動できるように用意しておきます。

[root@localhost ~]# vi /mnt/ec2-fs/boot/grub.conf
[root@localhost ~]# cat /mnt/ec2-fs/boot/grub.conf
default=0
timeout=0
hiddenmenu
title CentOS (2.6.32-71.el6)
        root (hd0)
        kernel /boot/vmlinuz-2.6.32-71.el6.x86_64 root=LABEL=_/ ro
        initrd /boot/initramfs-2.6.32-71.el6.x86_64.img
[root@localhost ~]# cd /mnt/ec2-fs/boot
[root@localhost boot]# ln -s grub.conf menu.lst
[root@localhost boot]# cd

/etc/sysconfig/network作成

[root@localhost ~]# vi /mnt/ec2-fs/etc/sysconfig/network
[root@localhost ~]# cat /mnt/ec2-fs/etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no

/etc/sysconfig/network-scripts/ifcfg-eth0作成

[root@localhost ~]# vi /mnt/ec2-fs/etc/sysconfig/network-scripts/ifcfg-eth0
[root@localhost ~]# cat /mnt/ec2-fs/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=on

/etc/resolv.conf作成

[root@localhost ~]# touch /mnt/ec2-fs/etc/resolv.conf

SELinux無効化
/etc/selinux/configのSELINUXをdisabledに変更します。

[root@localhost ~]# vi /mnt/ec2-fs/etc/selinux/config
[root@localhost ~]# grep ^SELINUX= /mnt/ec2-fs/etc/selinux/config
SELINUX=disabled

cloud-initパッケージ導入用にEPELリポジトリ設定をインストールし、AMI構築用のyum設定ファイルに結合します。

[root@localhost ~]# rpm --root=/mnt/ec2-fs -Uvh http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-7.noarch.rpm
[root@localhost ~]# cat /mnt/ec2-fs/etc/yum.repo.d/epel.repo >> centos-6-0-x86_64-yum.conf

cloud-initパッケージをインストールします。

[root@localhost ~]# yum -c centos-6-0-x86_64-yum.conf --installroot=/mnt/ec2-fs -y install cloud-init

EPELリポジトリは通常利用しないよう無効化しておきます。

[root@localhost ~]# vi /mnt/ec2-fs/etc/yum.repos.d/epel.repo
[root@localhost ~]# grep ^enabled /mnt/ec2-fs/etc/yum.repos.d/epel.repo 
enabled=0
enabled=0
enabled=0

ec2-user作成
cloud-initのデフォルト構成で初回ログインユーザーになるec2-userを作成します。

[root@localhost ~]# chroot /mnt/ec2-fs /usr/sbin/useradd ec2-user
[root@localhost ~]#

EBSボリュームのアンマウント

[root@localhost ~]# umount /mnt/ec2-fs

アンマウントしたEBSボリュームのスナップショットを取得し、AMI登録すれば完了なはず。

CentOS 6でIPv6を無効化する方法

 article  Comments Off on CentOS 6でIPv6を無効化する方法
Sep 232012
 

CentOS 5ではIPv6モジュールを無効化する方法が推奨されていましたが、CentOS 6では異なります。
FAQ/CentOS5 – CentOS Wiki9. How do I disable IPv6?
FAQ/CentOS6 – CentOS Wiki4. How do I disable IPv6?

/etc/sysctl.confに以下を書きましょうとのことです。

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

IPv6モジュールを単純にロードしないようにしてしまうと、SELinuxでエラーが出たり依存モジュールが使えなくなってしまうためです(主だったものはbonding)。手元の環境ですとipv6.koに依存しているモジュールはこれだけありました。

[root@localhost ~]# grep "\/ipv6\.ko" /lib/modules/`uname -r`/modules.dep|grep -v "\/ipv6\.ko: "|cut -d':' -f1
kernel/drivers/scsi/bnx2fc/bnx2fc.ko
kernel/drivers/scsi/bnx2i/bnx2i.ko
kernel/drivers/net/bonding/bonding.ko
kernel/drivers/net/cnic.ko
kernel/drivers/infiniband/core/ib_addr.ko
kernel/drivers/infiniband/core/rdma_cm.ko
kernel/drivers/infiniband/core/rdma_ucm.ko
kernel/drivers/infiniband/ulp/ipoib/ib_ipoib.ko
kernel/drivers/infiniband/ulp/iser/ib_iser.ko
kernel/net/netfilter/xt_TPROXY.ko
kernel/net/netfilter/xt_socket.ko
kernel/net/netfilter/ipvs/ip_vs.ko
kernel/net/netfilter/ipvs/ip_vs_rr.ko
kernel/net/netfilter/ipvs/ip_vs_wrr.ko
kernel/net/netfilter/ipvs/ip_vs_lc.ko
kernel/net/netfilter/ipvs/ip_vs_wlc.ko
kernel/net/netfilter/ipvs/ip_vs_lblc.ko
kernel/net/netfilter/ipvs/ip_vs_lblcr.ko
kernel/net/netfilter/ipvs/ip_vs_dh.ko
kernel/net/netfilter/ipvs/ip_vs_sh.ko
kernel/net/netfilter/ipvs/ip_vs_sed.ko
kernel/net/netfilter/ipvs/ip_vs_nq.ko
kernel/net/netfilter/ipvs/ip_vs_ftp.ko
kernel/net/ipv6/netfilter/ip6table_mangle.ko
kernel/net/ipv6/netfilter/ip6_queue.ko
kernel/net/ipv6/netfilter/nf_conntrack_ipv6.ko
kernel/net/ipv6/netfilter/nf_defrag_ipv6.ko
kernel/net/ipv6/netfilter/ip6t_REJECT.ko
kernel/net/ipv6/ipv6.ko
kernel/net/ipv6/ah6.ko
kernel/net/ipv6/esp6.ko
kernel/net/ipv6/ipcomp6.ko
kernel/net/ipv6/xfrm6_tunnel.ko
kernel/net/ipv6/tunnel6.ko
kernel/net/ipv6/xfrm6_mode_tunnel.ko
kernel/net/ipv6/xfrm6_mode_beet.ko
kernel/net/ipv6/mip6.ko
kernel/net/ipv6/sit.ko
kernel/net/ipv6/ip6_tunnel.ko
kernel/net/sunrpc/xprtrdma/xprtrdma.ko
kernel/net/sunrpc/xprtrdma/svcrdma.ko
kernel/net/dccp/dccp_ipv6.ko
kernel/net/sctp/sctp.ko
kernel/net/rds/rds_rdma.ko
kernel/net/9p/9pnet_rdma.ko
[root@localhost ~]#

他に/etc/modprobe.confd/ipv6.confなどを用意して以下を記述しておく方法もあるのですが(CentOS 5.4以降でも有効)、後述のKBにあるように場合によって動かない場合もあるのかもしれません。

options ipv6 disable=1

The “ipv6 disable=1” option does not seem to work on Red Hat Enterprise Linux 6 system
残念ながらSubscriptionないので見れないんですが。

 Posted by at 1:36 am  Tagged with: