ラベル server の投稿を表示しています。 すべての投稿を表示
ラベル server の投稿を表示しています。 すべての投稿を表示

2012/05/08

さくらVPS 新プランへの移行


先日(といっても結構日が経ってしまいましたが)、さくらVPS に「絶対お得な新プラン」が登場しましたね。



開始当初は申し込みが殺到し、一次申込み停止になりましたが現在は安定しているようです。


というわけで、旧プラン の 「さくらのVPS 512」を、同じ金額でグレードアップした「さくらのVPS 1G」に移行してみました。


新プランでは CentOS 6 がインストールされています。新OSも気になりますが、ひとまずココは旧プランの CentOS 5 の環境をそのまま移行することにしました。


作業の流れ


作業の流れは大体下記のような感じになります。


  1. DNS の TTL を変更
  2. OS再インストール
  3. データ転送
  4. 調整
  5. 動作確認
  6. 再データ転送
  7. DNS の A レコード を変更
  8. 後始末


前提条件・事前準備


ここで紹介する方法は、まるごと移行してしまう方法ですので、下記の前提条件と、事前準備を実施します。


前提条件


  • 両サーバとも同じOS及びバージョンで行うこと(ここでは CentOS 5)

事前準備 作業時間:15分程度


DNS の TTL を変更


サーバ切り替えが即座に反映されるようにするため、DNS の TTL を短め(60など)に設定しておきます。

この DNS の設定変更タイミングは、現在設定されている TTL を目安に考えます。

例えば、現在の TTL が 3600 だとすると、3600秒前(1時間前)までに DNS の変更をしておくのが望ましいです。


OS再インストール


両サーバとも同じOS及びバージョンで行うことが条件なので、まずは VPS コントロールパネル から OS再インストール を実施します。

カスタムOSインストール から、 CentOS 5 x86_64 を選択して OS 再インストールを実行します。


カスタムOSインストール は、ブラウザの Java アプレット上から手動で実施します。公式サポートマニュアルを参考に進めてください。


なお、カスタムOSインストール実行中に表示される、ホスト名やIPアドレスなどが記載された画面は、後ほどまで確認するので閉じないようにします。念のためメモ帳などにコピペしておくのがいいです。


カスタムOSインストールガイド|さくらのVPS|さくらインターネット公式サポートサイト


再インストールが完了したら、VPS ホームよりサーバを起動しておきます。


移行作業


データ転送 作業時間:約1G の転送で30分程度


サーバの再インストールが完了したら、いよいよデータの移行です。

データの移行は、旧サーバ の root ユーザから下記のコマンドで一括転送します。

[new_server_ip] は新サーバの IP アドレスに置き換えてください



# rsync -rtlzvogpHAX --exclude /boot/ --exclude /dev/ --exclude /proc/ --exclude /sys/ --exclude /var/run/ --exclude /var/lock/ --exclude ifcfg* --exclude ssh_host_* --exclude fstab --block-size=4096 -e ssh / new_server_ip:/

コマンドの意味やオプションなどについては、下記を参考にしてください。


オプション
動作内容
-r
ディレクトリ内容を再帰的にコピーします
-t
更新日時を保持します
-l
ソフトリンクを保持します
-z
転送時に圧縮します
-v
処理状況を表示します
-o
所有者を保持します
-g
グループを保持します
-p
パーミッションを保持します
-H
ハードリンクを保持します
-A
ACLを保持します
-X
拡張パーミッションを保持します
--exclude
除外するファイルの名前を指定します
--block-size=
チェックサムをとる際のブロックサイズを指定します
-e ssh
ssh経由でコピーします

転送が完了したら、VPS コントロールパネルよりサーバを再起動します。


新サーバのネットワーク設定 作業時間:5分程度


GATEWAY の追記


再起動後、SSH で接続できない場合は、VPS コントロールパネルの リモートコンソール から下記のようにネットワークの設定を修正します。

GATEWAY の設定を追記します。

[GATEWAY=***.***.***.***] は新サーバの ゲートウェイ アドレスに置き換えてください


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

# vi /etc/sysconfig/network-scripts/ifcfg-eth0

# Intel Corporation 82540EM Gigabit Ethernet Controller
DEVICE=eth0
BOOTPROTO=static
DHCPCLASS=
HWADDR=**:**:**:**:**:**
IPADDR=***.***.***.***
NETMASK=255.255.254.0
ONBOOT=yes
GATEWAY=***.***.***.***

# /etc/init.d/network restart

SSH の許可


旧サーバの SSH の設定は、外部からの接続は 鍵認証のみ root ログイン不可 になっているので、一時的にこれを変更します。


/etc/ssh/sshd_config

#vi /etc/ssh/sshd_config

PermitRootLogin yes
PasswordAuthentication yes


/etc/hosts.allow


/etc/hosts.allow, deny で接続制限をしている場合は、こちらも旧サーバを許可する。


/etc/hosts.allow

# vi /etc/hosts.allow

sshd: 旧サーバのIPアドレス

IP アドレスに依存する設定の修正 作業時間:それぞれ


ネットワークの設定が完了したら、IP アドレスに依存する設定などを修正していきます。

旧サーバのユーザ情報などそのまま移行しているので、SSH クライアント の設定も IP アドレスの変更だけで OK でした。


  • NameVirtualHost での Apache 設定
  • MySQL の pid 置場

バックアップ無し

$ sudo find /etc/httpd/conf.d -type f -name '*.conf' | xargs sudo perl -i -pe 's/xxx\.xxx\.xxx\.xxx/xxx\.xxx\.xxx\.xxx/g'
$ sudo find /var/www/vhosts -type f -name '*.conf' | xargs sudo perl -i -pe 's/xxx\.xxx\.xxx\.xxx/xxx\.xxx\.xxx\.xxx/g'

バックアップをとっておく場合(*.bak というバックアップファイルが作成されます)

$ sudo find /etc/httpd/conf.d -type f -name '*.conf' | xargs sudo perl -i.bak -pe 's/xxx\.xxx\.xxx\.xxx/xxx\.xxx\.xxx\.xxx/g'
$ sudo find /var/www/vhosts -type f -name '*.conf' | xargs sudo perl -i.bak -pe 's/xxx\.xxx\.xxx\.xxx/xxx\.xxx\.xxx\.xxx/g'

/var/run 以下は転送から除外しているので、/var/rub/mysqld を作成しておく

$ sudo mkdir /var/run/mysqld
$ sudo chgrp mysql /var/run/mysqld/
$ sudo chmod g+w /var/run/mysqld/
$ sudo /etc/rc.d/init.d/mysqld start

動作確認


ここまでで既に殆どの環境が移行できているはずなので、自分のマシンの hosts を設定して動作を確認してみます。

なお、 hosts ファイルは管理者権限で起動したメモ帳などで編集します。

スタートメニュー > 全てのプログラム > アクセサリ > メモ帳 から右クリックで管理者として実行。その後メニューの開くからファイルを開きます。

C:\Windows\System32\drivers\etc\hosts

新サーバIPアドレス   ドメイン名
xxx.xxx.xxx.xxx   www.test.com

再度データ転送


確認作業をしている間などの差分ファイルを転送します。

転送中にファイルが変更されないように、旧サーバの主要なサービスは予め停止しておきます。


サービスを停止している間は、外部からの閲覧もダウンしている状態になります。


コマンドは最初の転送と同じですが、旧サーバで SSH のポートを変更している場合はポートの指定を入れます。

# /etc/init.d/httpd stop
# /etc/init.d/mysqld stop

# rsync -rtlzvogpHAX --exclude /boot/ --exclude /dev/ --exclude /proc/ --exclude /sys/ --exclude /var/run/ --exclude /var/lock/ --exclude ifcfg* --exclude ssh_host_* --exclude fstab --block-size=4096 -e ssh / new_server_ip:/

ポートを指定する場合
# rsync -rtlzvogpHAX --exclude /boot/ --exclude /dev/ --exclude /proc/ --exclude /sys/ --exclude /var/run/ --exclude /var/lock/ --exclude ifcfg* --exclude ssh_host_* --exclude fstab --block-size=4096 -e "ssh -p 10022" / new_server_ip:/

IP アドレスに依存する設定の修正


転送で修正ファイルが上書きされてますので、上記の設定を再度実施します。



DNS の A レコードを変更


いよいよです。

DNS の A レコードを変更することで、外部からの接続が新サーバに振られることになります。

各ネームサービスの指示に従って変更してください。

TTL の設定を変更した場合は、ついでに戻しておきましょう。


移行後


SSH の設定などを元に戻す


SSH の設定など、一時的に許可した設定を元に戻すのを忘れずに。


お疲れ様でした!


これで無事に移行が終わったかと思います。お疲れ様でした。

さくらのVPS 新プラン乗り換え優遇施策 は、2012年5月20日(日)までなので、まだ申し込みしていない方はお早めに!




参考サイト:

2009/03/05

[Server]Apcupsd で UPS(APC Smart-UPS) を制御する



UPS(無停電電源装置) とは、停電や瞬断(瞬間停電)などの電力障害時でも、パソコンやサーバなどのコンピュータに電力を安定供給するための装置です。


UPS がない場合、システムの稼働中に停電が発生するとシステムが強制シャットダウンされ、ファイルが破損したり機器が故障したりする可能性があります。


そんなわけで、サーバには欠かせない UPS ですが、 通常、UPS とシリアルケーブルでつないだ 1台のサーバしか安全にシャットダウンすることができません。しかしながら、1台の UPS を複数のサーバで共有している場合、それでは困ります。


そこで、Apcupsd というソフトを使い、ネットワークでつながっている他のサーバも安全にシャットダウンできるようにします。



Apcupsd とは


Apcupsd とは、APC SmartUPS を制御、監視するソフトウェアで、Linux, Mac OC/X, Windows などの OS で動作可能です。



Apcupsd のインストール


今回は、NIS (Network Information Server) mode で構成します。この構成は、UPS と接続された NIS Server と、ネットワーク経由で情報を共有する NIS Client で構成されます。

従来の Master/Slave mode に置き換わるものです。


今回は、CentOS 4 の Linux サーバを NIS Server に、Windows マシンを NIS Client として構成します。



CentOS 4 へのインストール


SourceForge.net から、rpm パッケージをダウンロードします。CentOS 4 は、Red Hat Enterprise Linux (RHEL) のクローンですので、el4 の rpm をダウンロードし、インストールです。



$ wget http://jaist.dl.sourceforge.net/sourceforge/apcupsd/apcupsd-3.14.5-1.el4.i386.rpm
$ sudo rpm -ivh apcupsd-3.14.5-1.el4.i386.rpm


Windows へのインストール


SourceForge.net から、Windows バイナリをダウンロードします。インストールは、画面の指示に従い、すべてデフォルトでOKです。




Apcupsd の設定


設定ファイルである、 /etc/apcupsd/apcupsd.conf (Windows は C:\apcupsd\etc\apcupsd\apcupsd.conf) を各モードに合わせて編集します。


UPSTYPE や、UPSCABLE の設定は、各環境により異なります。詳しくはマニュアルを参照してください。


NIS Server/Client 共通の設定




UPSNAME SMART-UPS_700

ログ等に使用される UPS 識別名

UPSMODE net

ネットワーク機能を有効

NETACCESS true

ネットワークアクセスを有効



NIS Server の設定





UPSCABLE 940-0024C

SmartUPS 付属のケーブルを指定

UPSTYPE apcsmart

UPS の接続タイプを指定

DEVICE /dev/ttyS0

シリアルポートのデバイス名

KILLDELAY 180

apcupsd がシステムの再起動をコントロールできない時、UPS 自体をシャットダウンさせる

NETSERVER on

NIS を有効

NISIP 0.0.0.0

リクエストを受け付ける IP アドレス

NISPORT 3551

NIS Server の Port 番号
Firewall の設定で指定ポート(TCP)を開いてください

UPSCLASS standalone

APC ShareUPS を使用している場合以外は、通常 standalone

UPSMODE disable

APC ShareUPS を使用している場合以外は、通常 disable



NIS Client の設定





UPSCABLE ether

ネットワーク経由の設定

UPSTYPE net

UPS の接続タイプを指定

DEVICE 192.168.0.80:3551

NIS Server の IP:Port を指定

NETSERVER on

NIS を有効

UPSCLASS standalone

APC ShareUPS を使用している場合以外は、通常 standalone

UPSMODE disable

APC ShareUPS を使用している場合以外は、通常 disable



Apcupsd の起動および、動作確認



NIS Server の確認


起動は下記コマンドから。ついでに自動起動も設定します。


$ sudo /etc/rc.d/init.d/apcupsd start
$ sudo /sbin/chkconfig apcupsd on


設定の確認は、下記コマンドを実行します。下記のようにズラズラと出てくれば接続成功です。


$ apcaccess status
APC : 001,052,1243
DATE : Fri Feb 06 17:40:30 JST 2009
HOSTNAME : example
RELEASE : 3.14.5
VERSION : 3.14.5 (10 January 2009) redhat
UPSNAME : UPS_IDEN
CABLE : APC Cable 940-0024C
MODEL : SMART-UPS 700
.
.
.


NIS Client の確認


Windows の場合は、自動的に起動時に apcupsd サービスが起動するようになっています。


タスクトレイにあるアイコンをダブルクリックすると、状態を確認できます。



Apcupsd をブラウザから管理


Apcupsd には、CGI で UPS の状態を参照できるスクリプトが用意されています。このスクリプトを利用し、Web 経由で状態を確認できるようにします。


SourceForge.net から、rpm パッケージをダウンロードします。apcupsd-multimon-x.x.x.rpm をダウンロードし、インストールです。



$ wget http://jaist.dl.sourceforge.net/sourceforge/apcupsd/apcupsd-multimon-3.14.5-1.el4.i386.rpm
$ rpm -ivh apcupsd-multimon-3.14.5-1.el4.i386.rpm


次のようなエラーが出た場合は、gd を更新 します。


エラー: Failed dependencies:
gd >= 2.0 is needed by apcupsd-multimon-3.14.5-1.i386
libgd.so.2 is needed by apcupsd-multimon-3.14.5-1.i386
Suggested resolutions:
/home/buildcentos/CENTOS/en/4.0/i386/CentOS/RPMS/gd-2.0.28-5.4E.i386.rpm

$ wget ftp://mirror.switch.ch/pool/3/mirror/centos/4.6/os/i386/CentOS/RPMS/gd-2.0.28-5.4E.i386.rpm
$ sudo rpm -Uvh gd-2.0.28-5.4E.i386.rpm


インストール後は、 /var/www/cgi-bin にある次のファイルを、Web サーバの cgi ディレクトリにコピーします。



  • multimon.cgi

  • upsfstats.cgi

  • upsimage.cgi

  • upsstats.cgi


ブラウザから http://example/cgi-bin/multimon.cgi へ Web 経由でアクセスし、次のような画面が表示されれば成功です。



Apcupsd をテストする



最後に、実際に電源障害があった事態を想定しテストをしてみます。


テストのため、設定ファイル (/etc/apcupsd/apcupsd.conf) の下記ディレクティブの TIMEOUT を変更しておきます。

BATTERYLEVEL, MINUTES, そして TIMEOUT は、どれか早い方の条件が満たされた場合にシャットダウンが開始されます。

設定変更後は、 Apcupsd の再起動を忘れずに。


なお、電源復旧時にマシンが自動的に起動するためには、BIOS 設定が必要になります。デフォルトでは、電源復旧時に自動起動する設定は OFF になっていることが多いので、確認が必要です。



BATTERYLEVEL 5

バッテリ残量が指定値以下(%)

MINUTES 3

バッテリ駆動が可能な予想残り時間が指定値以下(分)

TIMEOUT 300

バッテリ駆動となってからの時間が指定値経過(秒)




短期停電


UPS がバッテリ駆動となり、サーバがシャットダウンが開始される前に電源が復旧した場合を想定します。



  1. UPS の電源コードを引っこ抜きます

    • UPS の警告音が鳴り響き、UPS がバッテリ駆動になります

    • ログに Power failure on UPS UPSNAME. Running on batteries. と表示されます



  2. UPS の電源コードを接続します

    • UPS が商用電源モードに復旧します

    • ログに Power is back. UPS running on mains. と表示されます




apcupsd[3505]: Power failure.
apcupsd[3505]: Running on UPS batteries.

Broadcast message from root :

Power failure on UPS SMART-UPS_700. Running on batteries.
wall[15799]: wall: user root broadcasted 1 lines (59 chars)

Broadcast message from root :

Power has returned on UPS SMART-UPS_700...
apcupsd[3505]: Mains returned. No longer on UPS batteries.
apcupsd[3505]: Power is back. UPS running on mains.
wall[15861]: wall: user root broadcasted 1 lines (44 chars)

上記の Apcupsd からのメッセージは、root 宛てにメールでも送信されます。



長期停電


UPS がバッテリ駆動となり、サーバがシャットダウンが開始された後に電源が復旧した場合を想定します。



  1. UPS の電源コードを引っこ抜きます

    • UPS の警告音が鳴り響き、UPS がバッテリ駆動になります

    • ログに Power failure on UPS UPSNAME. Running on batteries. と表示されます



  2. 設定したシャットダウン条件を満たすまで放置します

    • ログに Reached run time limit on batteries. と表示されます

    • 接続されたマシンがシャットダウンされます



  3. 接続されたマシンがすべてシャットダウンした後に、UPS もシャットダウンされるまで放置します

    • UPS がシャットダウンされます

      ※Smart-UPS では、フロントパネルの LED が連続的に点灯する状態になります



  4. UPS の電源コードを接続します

    • UPS が再起動します

    • UPS が商用電源モードに復旧します

    • 接続されたマシンが再起動します

      ※自動で再起動しない場合は、BIOS の設定を見直してください。




apcupsd[3280]: Power failure.
apcupsd[3280]: Running on UPS batteries.
wall[4761]: wall: user root broadcasted 1 lines (59 chars)
apcupsd[3280]: Reached run time limit on batteries.
apcupsd[3280]: Initiating system shutdown!
apcupsd[3280]: User logins prohibited
wall[5185]: wall: user root broadcasted 1 lines (67 chars)
wall[5188]: wall: user root broadcasted 1 lines (47 chars)
shutdown: shutting down for system halt


参考:


2009/03/04

WebObjects 5.2.4 を Apache 2.2 (CentOS 5.2) で動かす

アップル - WebObjects

WebObjects とは、アップル社が開発した、Java による Webアプリケーションフレームワークで、強力なWebサービスを簡単に構築することができる素晴らしいツールです。


Apple社自身でも、Apple Store, MobileMe(旧.Mac), iTunes Store などを WebObjects で構築しています。


そんな WebObjects ですが、弊社で使用している WebObjects 5.2 は、Linux の場合 Apache 1.3 でないと動いてくれません。


しかしながら、最近の OS はより高機能な Apache 2.2 系が搭載されており、できれば Apache 2.2 系で動作させたいものです。

これまで何度かチャレンジしたものの、なかなかうまく動いてくれませんでした・・・。


今回やっとうまくいったのでメモしておきます。



Java のインストール


WebObjects 5.2.4 では、Java 1.4 系を使用します。


$ chmod +x j2re-1_4_2_19-linux-i586-rpm.bin
$ ./j2re-1_4_2_19-linux-i586-rpm.bin
inflating: j2re-1_4_2_19-linux-i586.rpm
Done.

$ sudo rpm -ihv j2re-1_4_2_19-linux-i586.rpm
########################################### [100%]

$ sudo vi /etc/profile.d/java.sh
# Java
export JAVA_HOME=/usr/java/j2re1.4.2_19
export PATH=$PATH:$JAVA_HOME/bin

$ sudo chmod +x /etc/profile.d/java.sh
$ source /etc/profile.d/java.sh

$ java -version
java version "1.4.2_19"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_19-b04)
Java HotSpot(TM) Client VM (build 1.4.2_19-b04, mixed mode)

$ java -version -server
java version "1.4.2_19"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_19-b04)
Java HotSpot(TM) Server VM (build 1.4.2_19-b04, mixed mode)


WebObjects 5.2 のインストール


さて、本体のインストールです。インストールCDの Deployment/SOLARIS フォルダを ftp でアップしています。


はじめに install.sh を修正します。修正内容は、"-pxZf" を "-pxzf" に修正します。(3か所あります)


$ sudo ./install.sh -license X-NNN-XXX-NNN-XXX-NNN-XXX-NNN-XXX-NNN -adaptorsOnly NO -minimalInstall NO -cgibin /var/www/cgi-bin -docroot /var/www/html -woroot /opt/Apple

INSTALLATION:
Beginning WebObjects 5.2 full installation:

. Creating WebObjects installation directory ...
. Creating WebObjects' Applications and Frameworks directories ...
. Installing WebObjects Adaptor source ...
. Installing WebObjects Deployment ...
. Installing WODocumentRoot frameworks into document root ...
. Creating startup scripts ...
. ... Done.

WebObjects 5.2 Deployment, Full Install is now installed.

$ sudo chmod +x /etc/profile.d/webobjects.sh
# WebObjects
export NEXT_ROOT=/opt/Apple

$ sudo chmod +x /etc/profile.d/webobjects.sh
$ source /etc/profile.d/webobjects.sh


WebObjects 5.2 を WebObjects 5.2.4 へ


WebObjects 5.2 の最終バージョンは 5.2.4 ですので、アップデートします。アップデートファイルはこちらから。


$ wget http://download.info.apple.com/Apple_Support_Area/Apple_Software_Updates/MultiCountry/Enterprise/webobjects/patches/5.2/WO524Solaris.tar.gzip
$ wget http://download.info.apple.com/Apple_Support_Area/Apple_Software_Updates/MultiCountry/Enterprise/scripts/patcher.sh
$ vi patcher.sh
# COMPRESS=Z # gnutar compress flag: 'Z' or 'z' or ''
# Z を z に修正
COMPRESS=z # gnutar compress flag: 'Z' or 'z' or ''

$ chmod 511 patcher.sh
$ sudo ln -s /bin/tar /bin/gnutar
$ sudo ./patcher.sh -install WO524Solaris.tar.gzip -next_root $NEXT_ROOT
No errors, extracting patch

Install of wo524/WO524Solaris.tar.gzip successful

$ sudo cp -rf $NEXT_ROOT/Library/WebObjects/WODocumentRoot/WebObjects /var/www/html/

$ sudo vi $NEXT_ROOT/Library/Frameworks/JavaWebObjects.framework/Resources/WebServerConfig.plist
//DocumentRoot = "/Library/WebServer/Documents";
DocumentRoot = "/var/www/html";



アダプタの作成


いよいよ本番、Apache 2.2 対応のアダプタを作成します。ソースは Project Wonder から取得します。


$ sudo yum install httpd-devel
$ wget http://webobjects.mdimension.com/wonder/releases/Wonder-5.0.0.8972-Source.tar.gz
$ tar -zxvf Wonder-5.0.0.8972-Source.tar.gz
$ cd Wonder/Utilities/Adaptors/

$ vi make.config
#ADAPTOR_OS = MACOS
ADAPTOR_OS = LINUX
CC = gcc

$ make
$ cd Apache2.2/
$ sudo /usr/sbin/apxs -i -a -n WebObjects mod_WebObjects.la

$ vi apache.conf
LoadModule WebObjects_module modules/mod_WebObjects.so
#LoadModule WebObjects_module modules/mod_WebObjects.so

$ sudo cp apache.conf /etc/httpd/conf.d/webobjects.conf
$ sudo chmod 644 /etc/httpd/conf.d/webobjects.conf

$ sudo vi /etc/httpd/conf/httpd.conf
#ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

$ sudo /usr/sbin/httpd -M
Loaded Modules:
WebObjects_module (shared)
Syntax OK

$ sudo /etc/rc.d/init.d/httpd restart


SELinux


SELinux を使っている場合は、httpd よる 1085 ポート(wotaskd)への接続が拒否されてしまいます。


setroubleshoot: SELinux は http デーモンによるネットワークポート 1085 ヘの接続を阻止しています。 For complete SELinux messages.

次のようにして httpd がネットワークポートに接続するのを許可します。


$ sudo /usr/sbin/setsebool -P httpd_can_network_connect=1


動作確認


最後に、起動スクリプトの作成と自動起動です。


$ sudo vi /etc/rc.d/init.d/WOServices
#!/bin/sh
#
# Startup script for the WebObjects
#
# chkconfig: 345 85 15
# description: WebObject services
#

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

export PATH=/usr/java/j2re1.4.2_19/bin/:$PATH
WOSERVICES_SCRIPT="/opt/Apple/Library/WebObjects/Executables/WOServices"

# See how we were called.
case "$1" in
start)
echo -n "Starting WebObjects: "
daemon ${WOSERVICES_SCRIPT} start
echo
touch /var/lock/subsys/WebObjects
;;
stop)
echo -n "Shutting down WebObjects: "
${WOSERVICES_SCRIPT} stop
echo
rm -f /var/lock/subsys/WebObjects
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac

exit 0


$ sudo chmod +x /etc/rc.d/init.d/WOServices
$ sudo /etc/rc.d/init.d/WOServices start
Starting WebObjects: Beginning WebObjects services startup...
[ OK ]
$ sudo /sbin/chkconfig --add WOServices


root より JavaMonitor が起動できればOKです。


# $NEXT_ROOT/Library/WebObjects/JavaApplications/JavaMonitor.woa/JavaMonitor -WOPort 56789 &

Monitor for WebObjects 5

参考:


2009/02/27

CentOS 5.2 の vsftpd

www.centos.org - The Community ENTerprise Operating System

CentOS 5.2 標準の FTPサーバ vsftpd ですが、設定は間違ってないはずなのになぜかログインできません。


FTP クライアントのログには次のように出力されています。


500 OOPS: cannot change directory:/home/xxx
500 OOPS: child died
ログインできません.


サーバのログを見ると・・・


setroubleshoot: SELinux は ftp デーモンによるユーザーのホームディレ クトリ (./home) の読み込みを阻止しています。 For complete SELinux messages.


どうやら、OS のセキュリティを高める機能である、SELinux が vsftp によるホームディレクトリへのアクセスを拒否していたようです。


次のようにすることで、解除できます。


$ sudo /usr/sbin/setsebool -P ftp_home_dir 1

これで問題なくアクセスできます。

2009/02/26

MySQL 3.23.58 を CentOS 5.2 にインストールする

MySQL ::  世界でもっとも普及している、オープン ソース データベース
[10.09.15 update]ソースファイルのリンクを修正

自社サーバを一台新調することになったのですが、とある事情から MySQL は Ver 3.23.58 を使用しなければならず、でも Apache は 2.2 系を使いたい!

というわけで、OS やその他の環境は最新の CentOS 5.2 を使用し、MySQL 3.23.58 はソースからインストールすることにしました。

しかしながら、最新の環境にきわめて古いソフトをインストールすると、ほぼ間違いなく躓くもので。


ダウンロード


まずはダウンロードですが、もはや公式サイトのアーカイブにも見当たりません・・・

ので、MySQL日本正規代理店の SoftAgency 様から拝借いたします。

既に SoftAgency 様にも見当たらなくなってしまいました。
ですので、ソースファイルはこちらにアップしておきます。

>> Download MySQL-3.23.58

$ wget http://download.softagency.net/MySQL/Downloads/MySQL-3.23/mysql-3.23.58.tar.gz
$ tar -zxvf mysql-3.23.58.tar.gz
$ cd mysql-3.23.58/


Configure


Makefile ファイルを作成するために、configure を実行します。

$ ./configure \
 --prefix=/usr/local/mysql \
 --with-charset=sjis \
 --with-extra-charsets=all \
 --with-mysqld-user=mysql \
 --without-bench \
 --localstatedir=/home/mysql/data

checking "LinuxThreads"... "Not found"
configure: error: This is a linux system and Linuxthreads was not
found. On linux Linuxthreads should be used.  Please install Linuxthreads
(or a new glibc) and try again.  See the Installation chapter in the
Reference Manual for more information.

やっぱりエラーが。

どうやら CentOS 5 では Linuxthreads はサポートされなくなったようで(CentOS 4 まではサポートされていたようです)、configure のオプションで thread の方法を指定します。

$ ./configure \
 --prefix=/usr/local/mysql \
 --with-charset=sjis \
 --with-extra-charsets=all \
 --with-mysqld-user=mysql \
 --without-bench \
 --localstatedir=/home/mysql/data \
 --with-named-thread-libs="-lpthread"

checking for termcap functions library... configure: error: No curses/termcap library found

今度は、curses library がないとおっしゃいます。インストールし、再チャレンジ。

$ yum search ncurses
ncurses.i386 : A terminal handling library
ncurses-devel.i386 : Development files for the ncurses library

$ sudo yum install ncurses.i386
Package ncurses - 5.5-24.20060715.i386 is already installed.

$ sudo yum install ncurses-devel.i386
Installed: ncurses-devel.i386 0:5.5-24.20060715
Complete!

$ ./configure \
 --prefix=/usr/local/mysql \
 --with-charset=sjis \
 --with-extra-charsets=all \
 --with-mysqld-user=mysql \
 --without-bench \
 --localstatedir=/home/mysql/data \
 --with-named-thread-libs="-lpthread"

MySQL has a Web site at http://www.mysql.com/ which carries details on the
latest release, upcoming features, and other information to make your
work or play with MySQL more productive. There you can also find
information about mailing lists for MySQL discussion.

Remember to check the platform specific part of the reference manual for
hints about installing MySQL on your platform. Also have a look at the
files in the Docs directory.

Thank you for choosing MySQL!

OK! うまくいきました!


Make


さて、お次はコンパイルです。

$ make
mysqld.o: In function `main':
mysqld.cc:(.text+0x3450): undefined reference to `my_fast_mutexattr'
mysqld.cc:(.text+0x3464): undefined reference to `my_fast_mutexattr'
mysqld.cc:(.text+0x3478): undefined reference to `my_fast_mutexattr'
mysqld.o:mysqld.cc:(.text+0x34a0): more undefined references to `my_fast_mutexattr' follow
collect2: ld returned 1 exit status
make[4]: *** [mysqld] エラー 1

my_fast_mutexattr が定義されてないと。

そこで、定義を強制するように修正します。

$ vi mysys/my_thr_init.c
/my_fast_mutexattr

#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
pthread_mutexattr_t my_fast_mutexattr;
#endif

これを、下記のようにします。

//#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP
pthread_mutexattr_t my_fast_mutexattr;
//#endif

これでなんとかコンパイルができました。


Maike Install


最後にインストールです。ここまでくればOKでしょう。

$ sudo make install

お疲れ様です!

2008/03/11

CentOS 4.6 で、ZABBIX 1.4.4

社内のサーバ監視に、ZABBIX日本語サイト)を使用しているのですが、ZABBIX 1.4 では、「WEB monitoring」というWebサイトを簡単に監視できる機能が搭載されたようなので、この機能を使いたいがため、1.1.3 からアップデートしてみました。


New in ZABBIX 1.4 FEATURES日本語サイト


  • Installation Wizard

  • Installation Wizard automatically checks pre-requisites, database connectivity and generates configuration file for WEB front end.




  • Support of new database engines

  • Support of SQLite has been implemented. It allows use of ZABBIX in embedded environments.




  • WEB interface improvements

  • Speed and usability of WEB interface has been improved very much.




  • New notification methods

  • Native support of Jabber messaging has been introduced.




  • Distributed monitoring

  • ZABBIX distributed monitoring is made for complex environments consisting of different locations.
    ZABBIX supports monitoring of unlimited number of nodes. Centralized configuration allows easy configuration of all nodes from a single location.




  • Auto-discovery

  • ZABBIX distributed monitoring module allows easy deployment of ZABBIX systems. The discovery support IP ranges, service checks, agent and SNMP checks for efficient auto-discovery.




  • Many-to-many template linkage

  • More flexible host-template linkage saves time and make configuration of hosts more flexible and straight forward.




  • Database watchdog

  • ZABBIX server will automatically warn group of users if database is down and continues normal operations when database is back.




  • WEB monitoring

  • WEB monitoring module allows flexible and easy monitoringof availability and performanceof WEB sites and WEB based applications. It supports passing of GET and POST variables.




  • XML data import/export

  • New XML data import and export functionality is an excellent way of sharing templates, hosts configuration and items/triggers related information.




  • Support of Windows Vista

  • ZABBIX Windows agent supports Windows Vista, both 32 and 64 bit versions.




  • More flexible actions

  • Multiple operations (notifications, script execution) per action are supported. Choice of action calculation algorithm was introduced.




  • Server-side external checks

  • Server-side external checks can be used to introduce custom checks executed on ZABBIX server side.




  • New user permission schema

  • Old user permission schema is no longer support. It was replaced by new more efficient, yet simple, schema working on level of user groups and host groups.




  • Support of hysteresis

  • ZABBIX support use of different trigger expressions for going to ON and OFF states.




  • Support of slide show

  • Several screens can be grouped into a slide show for better presentation.




  • ZABBIX server can spread load across several servers

  • Groups of server side processes (discoverer, poller, HTTP poller, trapper, etc) can be located on different physical servers for better performance and availability.




  • Other improvements

  • See Release Notes for a complete list of improvements.




CentOS 4.6 の環境で、いくつか躓いたところがあったので、メモです。


CURLのバージョン


Web Monitoring機能を有効にするには、--with-libcurlオプションを付けてインストールします。


$ ./configure --enable-server --with-mysql --with-net-snmp --with-libcurl

すると、次のようなエラーが出て止まってしまいます。


checking for libcurl >= version 7.13.1... no
configure: error: Not found Curl library

CentOS 4.x では、curlのバージョンは7.12なのでダメなようです。

いろいろ調べてみると、結局、curlを自身でバージョンアップするしかないようです。

以下のようにして解決です。


centosinstall

$ cd ~/src/
$ wget ftp://ftp.planetmirror.com/pub/curl/libcurl4-devel-7.16.2-1.i386.rpm
$ wget ftp://ftp.planetmirror.com/pub/curl/libcurl4-7.16.2-1.i386.rpm
$ sudo yum install openssl096b
$ sudo yum remove curl-devel
$ sudo rpm -i libcurl4*


PHP4


ZABBIXのフロントエンドはPHPなのですが、やっとインストールが成功して管理画面にアクセスすると以下のエラーが発生。


PHP Parse error: parse error, unexpected T_STATIC, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /u02/zabbix/web/include/copt.lib.php on line 112

調べてみると、PHP5用のコードになっているのが原因のようです。

以下のようにして解決です。


Blank web install - ZABBIX Forums

includes/copt.inc.php を修正し、'static function' を 'function' にすべて置き換えます。


$ vi includes/copt.inc.php
:%s/static function/function/g


これで、無事にアップデートすることができました。

2007/10/05

CentOS4.5にて、DRBD/hearbeatでサーバ冗長化


先日(といっても、結構時間が経ってしまいましたが・・・)、Linuxサーバを冗長化する機会がありました。



その際に、ドキュメントを用意したのですが、一部異なるアプローチをとったところがあったので、そのあたりをメモしておこうと思います。

ドキュメントはこちら

HAクラスタ構築手順書



其の一 DRBDパーティション



まず、DRBDでネットワークミラーリングを構築するのですが、マニュアルでは第2SCSIディスクを想定していますが、今回は、ディスクが一つしかないので、既存のディスクにパーティションを作成する必要がありました。

空き領域に新たなパーティションを作成するのですが、/(root)パーティションで全部使っていて空きは無かったので、やむなく再インストール・・・



せっかくですので、この機会に自由にサイズ変更をできるというLVMでパーティションを作成し、DRBDをセットアップです。


DRDBパーティション(論理ボリューム)の作成
$ sudo lvcreate -L 10G -n drbd main

$ sudo vi /etc/drbd.conf
resource r0 {

protocol C;

incon-degr-cmd "echo '!DRBD! pri on incon-degr' | wall ; sleep 60 ; halt -f";

startup {
degr-wfc-timeout 120; # 2 minutes.
}

disk {
on-io-error panic;
}

syncer {
rate 100M;

group 1;

al-extents 257;
}

on host1 {
device /dev/drbd0;
disk /dev/main/drbd;
address 192.168.0.221:7788;
meta-disk internal;
}

on host2 {
device /dev/drbd0;
disk /dev/main/drbd;
address 192.168.0.231:7788;
meta-disk internal;
}
}

其の二 ミラーリングデータはシンボリックリンクで



既存のアプリケーションがあるため、設定ファイル等はなるべく変更したくありません。

そこで、設定ファイルはそのままに、データディレクトリをシンボリックリンクで参照するようにしました。


アプリケーション及びWebデータ
$ sudo -u user mkdir /data/application
$ sudo -u user ln -s /data/application /home/rms/application
$ sudo -u user tar cpzf /home/user/old_htdocs.tar.gz /home/user/htdocs
$ sudo -u user mv /home/user/htdocs /data/user_htdocs
$ sudo -u user ln -s /data/user_htdocs /home/user/htdocs
$ sudo ls -l /home/user
$ sudo ls -l /data

MySQLデータ
$ sudo -u mysql tar cpzf /home/mysql/old_data.tar.gz /home/mysql/data
$ sudo -u mysql mv /home/mysql/data /data/mysql_data
$ sudo -u mysql ln -s /data/mysql_data /home/mysql/data
$ sudo ls -l /home/mysql
$ sudo ls -l /data


その他、heartbeat等はマニュアルどおりでおおむねいけました。

マニュアルを作成してくれたK氏には感謝です!



DRBD/hearbeatでサーバ冗長化は、手軽にできてかなりおススメです!

自動でフェイルオーバー/フェイルバックする様子には、本気で感動しました。

この機会に(?)、是非挑戦してみてください。



参考書籍:


2007/09/10

Linux kernel 2.6 で Beep が鳴らない


先日、CentOS4.5にて、heartbeat/DRBDによるサーバ冗長化の作業がありました。

その際、障害発生によりプライマリサーバからセカンダリサーバに切り替わるときは、音を鳴らして知らせることになりました。

そこで、良くあるBeep音(ピーピーと鳴く、アレです)を鳴らすことにしたのですが、VBのようにBeepというコマンドでもあって簡単に鳴らせるのだろうと思っていたのですが、なかなか鳴らずに躓いてしまったので、メモしておきます。



まず、Beepというコマンドはないのか?と調べたところ、けんども日記: Linux でビープ音を鳴らすにて、紹介されていました。

これをテストマシンのCentOS4.4にて試してみたのですが、別段エラーログもなく、音は鳴りませんでした。



beepコマンド
$ wget http://johnath.com/beep/beep-1.2.2-1.src.rpm
# rpmbuild --rebuild beep-1.2.2-1.src.rpm
# rpm -ihv /usr/src/redhat/RPMS/i386/beep-1.2.2-1.i386.rpm

$ sudo beep -f 2500 -l 240


では、単純にスピーカから音を出すにはどうしたらいいのか?

と、たどり着いたのが、 [BEL] コマンドの終了を音で知らせる

さっそく、

printf "\7"

としましたが、これでも音は鳴らず・・・



これはおかしいと思い、他のマシン(RHEL3)で試してみるとあっさり音が鳴りました。

両サーバの違いは何かと、サウンドの設定等色々調べてみると、結局、Linux kernel 2.6からは、デフォルトでPCスピーカーはOFFになっている。ということでした。

どうりで、kernel 2.4のRHEL3では鳴ったわけです。


# sudo modprobe pcspkr
# printf "\7"
リブート後も有効に
# vi /etc/rc.local
/sbin/modprobe pcspkr


これで、先にインストールしたBeepコマンドでも音がなり、カエルの歌をBeepで演奏することができるようになりましたw



余談ですが、「Linux Beep」で調べると、目的とは逆の「Beepを消す」といったものがガンガンヒットしました。

たまにコンソールから作業するときにTab補完失敗でピーピーうるさい件をどうにかする方法がありました。


LinuxコンソールのBEEP音を消す! (技術メモ)

vi /etc/inputrc

#set bell-style none


これで静かに作業することができます。思わぬ収穫でした。

2007/07/24

PXEでCentOSをネットワークインストールする


新しく用意したマシンにCentOSをインストールしようとしたのだけれど、なんとこのマシンにはCDDもFDDもついてなかった!

というわけで、PXEネットーワークブートを使用してCentOSをインストールすることにしました。


PXEネットワークブート用サーバを構築



まずは、PXEネットワークブート用のサーバを構築します。

「@IT:PXEネットワークブート用サーバを構築するには」

「PXEを使ったネットワークブート」

を参考にしました。

開発用のサーバとして使用しているCentOS4.4マシンをPXEサーバにすることにします。



TFTPサーバを構築

tftp-serverをインストール
# rpm -qa | grep tftp
# yum install tftp-server
Installed: tftp-server.i386 0:0.39-2
Complete!

/etc/xinetd.d/tftpを編集し、サービスを有効にする
# vi /etc/xniinetd.d/trftp
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
# service xinetd restart
xinetd を停止中: [ OK ]
xinetd を起動中: [ OK ]

PXE用ブートイメージを取得
# mkdir /tftpboot/pxe_centos4.5
# cd /tftpboot/pxe_centos4.5
# wget ftp://ftp.riken.jp/Linux/centos/4.5/os/i386/images/pxeboot/vmlinuz
# wget ftp://ftp.riken.jp/Linux/centos/4.5/os/i386/images/pxeboot/initrd.img
# ls
initrd.img vmlinuz


DHCPサーバを構築

dhcpをインストール
# rpm -qa | grep dhcp
dhcpv6_client-0.10-14_EL4
# yum install dhcp
Installed: dhcp.i386 7:3.0.1-59.EL4
Complete!

設定ファイルを編集 ※ 不要な行は削除しています
# cp /usr/share/doc/dhcp-3.0.1/dhcpd.conf.sample  /etc/dhcpd.conf
# vi /etc/dhcpd.conf
ddns-update-style interim;
ignore client-updates;

subnet 192.168.0.0 netmask 255.255.255.0 {
option routers 192.168.0.1;
option subnet-mask 255.255.255.0;
option domain-name "r-stone.net";
option domain-name-servers 192.168.0.2;
option time-offset -18000; # Eastern Standar
d Time
filename "/pxe_centos4.5/pxelinux.
0";
range dynamic-bootp 192.168.0.250 192.168.0.254;
default-lease-time 21600;
max-lease-time 43200;
}
# mkdir /var/lib/dhcpd
# touch /var/lib/dhcpd/dhcpd.leases
# service dhcpd start
dhcpd を起動中: [ OK ]


PXEサーバを構築

syslinux(pxelinux)のインストール (既にインストール済みでした)
# rpm -qa | grep syslinux
syslinux-2.11-1

ブートローダの準備
# cp /usr/lib/syslinux/pxelinux.0 /tftpboot/pxe_ccentos4.5/

設定ファイルの作成
# mkdir /trftpboot/pxe_centos4.5/pxelinux.cfg
# vi /tftpboot/pxe_centos4.5/pxelinux.cfg/default
default centos4

label centos4
kernel vmlinuz
append load initrd=initrd.img devfs=nomount


ファイアウォールの設定

これまで構築したサーバで使用するポートを開放














サーバポートプロトコル
DHCP67UDP
TFTP69UDP
PXE4011UDP

###
# DHCP
###
iptables -A INPUT -p udp -s 192.168.0.0/24 --dport 67 -j ACCEPT

###
# TFTP
###
iptables -A INPUT -p udp -s 192.168.0.0/24 --dport 69 -j ACCEPT

###
# PXE
###
iptables -A INPUT -p udp -s 192.168.0.0/24 --dport 4011 -j ACCEPT


CentOSのイメージをマウント&HTTP公開


ISOイメージをマウント
# mkdir /mnt/iso
# mount -t iso9660 -o loop /home/r-stone/iso/CentOS-4.5-i386-binDVD.iso /mnt/iso

Apatchで公開
# vi /usr/local/apache2/conf/httpd.conf
Alias /centos4.5 "/mnt/iso"
<Directory /mnt/iso>
Options MultiViews Indexes FollowSymLinks
Order deny,allow
Deny from all
Allow from 192.168.0.0/24 127.0.0.1
</Directory>
# /usr/local/apache2/bin/apachectl restart



PXEネットワークブートでCentOSをインストール


いよいよCentOSをネットワークインストールします。

こちらは、

「@IT:PXEネットワークブートでLinuxをインストールするには」

を参考にしました。



インストール方法の設定


PXEブートよりインストーラが起動してしまえば、あとは通常のインストールと同じです。

ただ、パッケージの転送はHTTPを使用するようにしましたので、インストール方法の画面では「HTTP」を選択し、HTTPの設定を行います。

インストール後


PXEサーバ側:

念のため使用後はサービスを停止しておきます

  • HTTP公開の停止

  • イメージのアンマウント

  • TFTPサーバの停止

  • DHCPサーバの停止


クライアント側:


  • BIOSのPXEを無効に





CDDがなかったのは焦りましたが、結局CDDなんてインストール時にしか使わないわけで、消費電力を抑えるためにもPXEでのネットワークインストールも良いかなと思います。

2007/02/23

DNSサーバにて送信ドメイン認証SPF[Sender Policy Framework]レコードに対応



Ezwebへメールを送信した際に、以下のような返信メールを受け取った。(でもちゃんとメールは送信されていました・・・)

次のあて先へのメッセージはエラーのため送信できませんでした。

送信先メールアドレスが見つからないか、
送信先メールサーバの事由により送信できませんでした。
メールアドレスをご確認の上、再送信してください。

Each of the following recipients was rejected by a remote mail server.
--------------------------------------------------------------
Received-SPF: None (lsean.ezweb.ne.jp: 210.251.95.9 is neither permitted nor denied by domain of xxx.cc) client-ip=210.251.95.9;



調べてみるとなんだかSPFがどうのこうの・・・。

KDDI au: EZwebへメール送信する際の注意事項 > 送信ドメイン認証SPFレコードについて



というわけで、MTA/AntiSPAM/Sender ID を導入してみる - Pocketstudio.jp Linux Wikiを参考にDNSをSPF対応にしました。(Sender IDはまたの機会に・・・汗)


DNSの設定ファイルに以下のレコードを追加

                IN      TXT     "v=spf1 ip4:210.251.95.8/29 ~all"



check-auth@verifier.port25.comでのチェックもPASSした模様です。

※このアドレスに空メールを送信すると、チェック結果を返してくれます。

==========================================================
Summary of Results
==========================================================

mail-from check: pass
PRA check: pass
DomainKeys check: neutral (message not signed)


2007/02/16

ZABBIXでユーザーのMail設定はどこにある?



以前に、GIGAZINのフリーのサーバ、ネットワークなどの総合監視ソフト「ZABBIX」日本語版という記事をみて、「これはすごい」と思って早速社内サーバの監視に使用しています。

グラフ作成、各ノードの情報収集、異常検知、障害/復旧通知、詳細なアラート通知機能がZABBIX一本でできてしまうので非常に魅力的です。



障害等の通知はメールで通知したいのですが、なかなかその設定場所が発見できませんでした。

で、やっと設定場所を発見したのでメモしておきます。



設定[Configuration] > ユーザー[Users] で、設定するユーザ行/アクション列の「メディア」をクリック!

たったこれだけなのですが、この「メディア」という文字が通常のテキストと同じ黒文字だったため、クリックするという行為まで及ばなかったのです・・・「これはひどい」。



ユーザビリティって大切ですねぇ(笑)



参考:

ZABBIX Forums - Where to set an email address