2010年07月26日

[Ubuntu][PHP] curl関数を利用可にする

livedoorClipに登録 clip | このエントリーをはてなブックマークに追加 はてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

PHPからcurlを使うと何が良いのかは不明

要望があったので設定。

▼検証環境

  • Ubuntu-8.04 LTS
  • Linux 2.6.24-6-xen

▼環境構築

$ sudo apt-get install php5-curl
$ sudo /etc/init.d/apache2 restart

▼テストコード

<?php

if ($ch = curl_init('http://www.google.com/')) {
  echo curl_exec($ch);
  curl_close($ch);
}

この場合、Googleのトップページが表示されれば良い。




『2010/07/23(金) #hbstudy LT大会 夏の陣』参戦

livedoorClipに登録 clip | このエントリーをはてなブックマークに追加 はてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

珍しくスピーカーとして勉強会に参加

いつも参加しているhbstudy(インフラエンジニア勉強会)
半年に一度のペースで開催されているLT大会に、スピーカーとして参戦して来た。

技術ネタではなく、笑いを誘うネタ。
次回は技術ネタに…するか、身体UPDATEとするか。



半袖 at 11:55|PermalinkComments(0)TrackBack(0)日常/告知 

2010年07月18日

[CentOS][NFS] ネットワークマウントしてくれるサービスはnetfs

livedoorClipに登録 clip | このエントリーをはてなブックマークに追加 はてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

普段使わないがゆえに知らない事の1つ

NFSマウントしてるのが、どのタイミングなのかが分からなかった。
netfsである事が分かったので、起動スクリプトを追いかけてみた。

▼検証環境

  • CentOS-5.4

▼/etc/init.d/netfs

23  NFSFSTAB=`LC_ALL=C awk '!/^#/ && $3 ~ /^nfs/ && $3 != "nfsd" && $4 !~ /noauto/ { print $2 }' /etc/fstab`

40          [ -n "$NFSFSTAB" ] &&
41            {
42              [ ! -f /var/lock/subsys/portmap ] && service portmap start
43              action $"Mounting NFS filesystems: " mount -a -t nfs,nfs4
44            }
  • 23行目: /etc/fstabからnfsのエントリを取得し、変数NFSFSTABへ代入
  • 40行目: $NFSFSTABが空でない場合
  • 42行目: /var/lock/subsys/portmapが無ければ、portmapを起動
  • 43行目: 種類がnfs,nfs4のエントリをマウント

なるほど

後は、netfsが起動対象サービスであれば、システム起動時にNFSマウントされる。

# chkconfig --list netfs


図解でわかるLinux環境設定のすべて
西村 めぐみ
日本実業出版社
売り上げランキング: 9664


2010年05月28日

whois.hansode.org(79/n) - レコード数との戦い

livedoorClipに登録 clip | このエントリーをはてなブックマークに追加 はてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

先駆者達の記録

負荷をかけている原因を研究、追求。
年明けの改善後、この一ヶ月、しばらく続いている。

自分には、この手の作業が本業でもある。
対応するccTLD数を増やすよりも、興味がある。

カラムとインデックスをじっくり観察。
約3年前、システム開発時は必要と思っていたカラムのいくつかは、今となっては不要だった。
同様に、無駄に張っていたインデックスも不要だ。


いつ、『ルビコンの決断』をするのか?

不必要なカラムとインデックスが存在すると、少なからずともシステムに影響がある。
不要データを放置しておくのも無駄だ。
いつ、どのタイミングで、設計変更を決断するのか、しないのか。

個人サービスであるがゆえ、自由気ままに判断・決断が可能だ。
何度かメンテナンスを、こっそり行って来た。


3000万パワーの破壊力

5/27未明、alter tableを決断。検証環境にてテストを行った。
プログラムレベルでは問題なし。
実行に踏み切る…行くぞ!

数時間、処理は終わらない…


仲間の存在

FriendFeed では MySQL を使いどのようにスキーマレスのデータを保存しているのか』を発見。
大分似た状況が書き記されていた。
意図せず、その対応策が似ている。

この先のデータ増加に対する不安が、明るい光へ向いた瞬間。
誰かに対し、技術的安心感を与える存在になりたい。そう思った。

負荷対策の前後グラフを、後日後悔する予定。



whois.hansode.org(78/n) - 各種統計情報を出す機能実装

livedoorClipに登録 clip | このエントリーをはてなブックマークに追加 はてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

空きリソースを有効活用

2010年に入ってからシステムの体質改善に注力していた。
前回のエントリ3000万レコードとの戦いに勝利の後、何をするべきかを考えていた。

実装したくても過負荷により実装を断念していたタスクを掘り起こしてみた。

『各種統計情報を出す』

こんなタスクがあった。


統計対象データは?

  • ステータス情報(ok, pendingDeletion)
  • 登録年月日の傾向

これらを出す為にクローラーに実装を追加したのが、今月中旬。

3000万エントリのクロールが終わると、何か面白いデータが出て来るはずだ。
夏が終わる頃、結果をまとめ、公開予定。



2010年05月27日

[Hinemos][Debian][Ubuntu] Hinemos監視対象ノード設定

livedoorClipに登録 clip | このエントリーをはてなブックマークに追加 はてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

ジョブ処理しないので、Hinemos Agent不必要

Hinemos』を監視システムとして利用したい。

この場合、Hinemos Agentを利用したジョブ処理は不用。
Hinemos Agentはインストール不用で、snmpdの設定さえあれば良い。
「果たして、Hinemosを使う意味があるのか…?」と言う事は、今回の議論の対象外とする。

▼動作実績環境

  • Amazon EC2
  • Ubuntu 8.04 LTS(x86_64)
  • Linux 2.6.24-6-xen
  • Hinemos 3.1.4
  • snmp 5.4.1~dfsg-4ubuntu4.3

作業内容

監視対象ノード

▼snmpdインストール

$ sudo apt-get -y install snmpd

▼使用IPアドレスを変更

$ sudo cp -pi /etc/default/snmpd /etc/default/snmpd.0
$ sudo vi /etc/default/snmpd
$ diff /etc/default/snmpd.0 /etc/default/snmpd
11c11,12
< SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid 127.0.0.1'
---
> #SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid 127.0.0.1'
> SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid 0.0.0.0'

▼managerからシステム情報を取得可能に設定変更

$ sudo cp -pi /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.0
$ sudo vi /etc/snmp/snmpd.conf
$ diff /etc/snmp/snmpd.conf.0 /etc/snmp/snmpd.conf
61,62c61,62
< com2sec paranoid  default         public
< #com2sec readonly  default         public
---
> #com2sec paranoid  default         public
> com2sec readonly  default         public

▼snmpd再起動

$ sudo /etc/init.d/snmpd restart

Hinemos Manager

▼システム情報取得可能かどうかを確認

$ snmpwalk -v 1 -c public [ 監視対象IPアドレス ] .1.3.6.1

※HOST情報を取得出来れば良い


あと書き

今回は、Amazon EC2のセキュリティグループ設定があるのでsnmp接続許可設定を無視している。
その他環境では、snmp接続の許可・拒否を考慮すべき。



2010年05月21日

[AWS][AmazonEC2][Hinemos][CentOS] Amazon EC2にHinemos環境構築

livedoorClipに登録 clip | このエントリーをはてなブックマークに追加 はてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

Amazon EC2特有仕様により、環境構築に苦戦した

忘れないうちに手順をまとめておく。
苦戦要因は、IPアドレスだ。

Amazon EC2には、ローカルIPアドレスと、グローバルIPアドレスが存在する。
インスタンス内ではローカルIPアドレスを使用。

通常、Hinemosマネージャーに指定するのはIPアドレス。
果たして、Hinemosマネージャーに指定するIPアドレスは…?


▼動作実績環境

  • CentOS-5.5(x86_64)
  • Linux 2.6.21.7-2.fc8xen
  • Hinemos 3.1.4


事前作業

▼Security Groupに新グループ追加

  • tcp
    • 1098
    • 1099
    • 3873
    • 4444
    • 4445
    • 4446
    • 4457
    • 8009
    • 8080
    • 8083
    • 24457
  • udp
    • 514

追加したグループを指定し、インスタンス起動する


作業内容

▼必要に応じてインストール

# yum -y update
# yum -y install wget

▼Hinemosマネージャをダウンロード、伸張

# cd /tmp/
# wget 'http://sourceforge.jp/frs/redir.php?m=iij&f=%2Fhinemos%2F45345%2Fhinemos_manager-3.1.4_rhel5_32.tar.gz'
# tar zxvf hinemos_manager-3.1.4_rhel5_32.tar.gz
# cd Hinemos_Manager-3.1.4_rhel5_32/

▼syslog-ngインストール時にエラーになるので、syslog-ng.confのテンプレートを修正

# cp -pi syslog-ng_setup.conf syslog-ng_setup.conf.0
# vi syslog-ng_setup.conf
# diff syslog-ng_setup.conf.0 syslog-ng_setup.conf
21c21
< source s_net { tcp(ip(0.0.0.0) port(514) max-connections(70)); tcp6(ip(::0) port(1514)); udp(ip(0.0.0.0) port(514)); udp6(ip(::0) port(514)); };
---
> source s_net { tcp(ip(0.0.0.0) port(514) max-connections(70)); udp(ip(0.0.0.0) port(514)); };

※EC2のLinuxカーネルがIPv6を使えない為、IPv6アドレスにportをbindする際、起動に失敗する。失敗させないための策。

▼インストールスクリプトを実行

# export LANG=C
# ./manager_installer_EN.sh
Hinemos installation will be started, is that OK?(Y/N default:Y)
>>enter<<

The installation user and the installation directory are created.


User hinemos is created.
Creating mailbox file: File exists
Changing password for user hinemos.
New UNIX password:********
BAD PASSWORD: it is based on a dictionary word
Retype new UNIX password:>>hinemos<<
passwd: all authentication tokens updated successfully.
User hinemos was created.
Installation directory /opt/hinemos was created.

Manager's IP address is set.
Please input IP address of the server which installed Hinemos manager.
[[ Public DNS Name ]]※ここでIPアドレスではなく、Public DNS Nameを指定する
Is it [[ Public DNS Name ]]? (Y/N default:Y)

Please input JBoss boot user name.(hinemos/root default:hinemos)
>>enter<<
hinemos is correct? (Y/N default:Y)
>>enter<<
Start copying required files into the installation directory.
Please input ftp server's IP address needed by corrective run (default:127.0.0.1)
>>enter<<

JRE
Do you agree to the above license terms? [yes or no]
yes
Starting system logger:                                    [  OK  ]

/etc/hosts is changed.
May I change /etc/hosts? (Y/N)
Y

/etc/hosts was changed.
Please confirm it after the end of the installation.

The database is initialized.
waiting for postgres to start...
done
postgres started
ALTER ROLE
waiting for server to shut down.... done
server stopped

LDAP is initialized.
The initialization of LDAP was completed.

Hinemos manager installation was completed.

▼初回起動テスト

# su - hinemos -c /opt/hinemos/bin/hinemos_start.sh
Hinemos starting

waiting for postgres to start...
done
postgres started

waiting for slapd to start...
done
slapd started

waiting for jboss to start...
......................done
jboss started
Hinemos started

▼システム起動時にHinemosが起動するように設定

# cp -pi /etc/rc.local /tmp/rc.local.0
# vi /etc/rc.local
# diff /tmp/rc.local.0 /etc/rc.local
9a10,11
>
> /usr/bin/id hinemos && su - hinemos -c /opt/hinemos/bin/hinemos_start.sh

▼/etc/hostsを修正

# cp -pi /etc/hosts /tmp/hosts.0
# diff /tmp/hosts.0 /etc/hosts
2c2,3
< [[ Public DNS Name ]]      domU-12-34-56-78-AB-90
---
> [[ Internal IPv4 ]]        domU-12-34-56-78-AB-90
> [[ Internal IPv4 ]]        [[ Public DNS Name ]]

インストールスクリプトは、IPアドレス指定を想定しているので、/etc/hostsが不正内容となる。その対応修正。

▼システム再起動

# reboot

▼この後、Hinemosクライアントを利用

  • user: hinemos
  • pass: ********
  • host: jnp://[[ Public DNS Name ]]:1099

ログインに成功したら環境構築成功。


あと書き

Amazon EC2では「Public DNS Name」を上手に利用するべきだと分かった。

  • 内部で名前解決するとローカルIPアドレス
  • 外部で名前解決すると、グローバルIPアドレス
  • ルーティングの関係?で、インスタンス内からグローバルIPアドレスへは通信出来ない
  • 唯一、内外共通で利用出来るのが「Public DNS Name」と言う訳だ

これは別エントリで改めてまとめる予定。



[AWS][AmazonEC2][Github] EC2用vmイメージ構築スクリプトを作った

livedoorClipに登録 clip | このエントリーをはてなブックマークに追加 はてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

自分でシンプル環境を構築しよう

前回は、Xen domU用イメージ作成スクリプトを作った。
今回はAmazon EC2用イメージ作成スクリプトだ。

▼動作実績環境

  • CentOS-5.4(x86_64)
  • Linux 2.6.18-164.15.1.el5xen
  • yum 3.2.22
使用例

▼CentOS-5.5(2010/05/21現在最新)のツリーを作る

$ git clone git://github.com/hansode/vmbuilder.git
$ cd vmbuilder/ec2/redhat/
$ sudo make-domu-tree.sh --dist=centos --ver=5.5 --arch=i386

※ --dist=fedora とすると、fedoraのツリーが構築される。


誰かが作るであろう最新版CentOSのAMIを、もう、待つ必要がない。
次はDebian系のイメージに着手予定。



[Hinemos][syslog-ng] 【解決】Re: Hinemosマネージャのインストール中に syslog-ng起動失敗

livedoorClipに登録 clip | このエントリーをはてなブックマークに追加 はてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

【結果】問題解決に成功した

Hinemos』をインストール。
インストール検証環境にてインストールを行い、動作確認を終えた。
その後、別環境への環境構築を行ったら問題にぶち当たった。

▼対象環境

  • Amazon EC2
  • CentOS-5.5 (i386)
  • Linux 2.6.21.7-2.fc8xen
  • Hinemos hinemos_manager-3.1.4_rhel5_32.tar.gz

▼syslog-ng起動失敗

# /etc/init.d/syslog-ng restart
Shutting down system logger:                               [  OK  ]
Starting system logger: Error creating socket; error='Bad file descriptor (9)'
Error initializing source driver; source='s_net'
                                                           [FAILED]

同じ現象に遭遇した人を発見。

Re: Hinemosマネージャのインストール中にsyslog-ng起動失敗
どなたか解決の方法をお知りでしたら、助けていただければ幸いです。

・・・?未解決のまま終わっている。


未解決は宜しく無い

こう言った原因解明にはstraceコマンドが便利だ。
困った時のstraceコマンド。

# strace /sbin/syslog-ng -d -f /etc/syslog-ng/syslog-ng.conf
...(省略)...
setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
bind(3, {sa_family=AF_INET, sin_port=htons(514), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
listen(3, 255)                          = 0
setsockopt(3, SOL_SOCKET, SO_KEEPALIVE, [0], 4) = 0
socket(PF_INET6, SOCK_STREAM, IPPROTO_IP) = -1 EAFNOSUPPORT (Address family not supported by protocol)
fcntl64(4294967295, F_GETFL)            = -1 EBADF (Bad file descriptor)
fcntl64(4294967295, F_GETFD)            = -1 EBADF (Bad file descriptor)
time(NULL)                              = 1274413588
write(2, "Error creating socket; error='Ba"..., 55Error creating socket; error='Bad file descriptor (9)'
) = 55
time(NULL)                              = 1274413588
write(2, "Error initializing source driver"..., 49Error initializing source driver; source='s_net'
) = 49
exit_group(2)                           = ?

PF_INET6…?

▼/etc/syslog-ng/syslog-ng.confを調査

source s_net { tcp(ip(0.0.0.0) port(514) max-connections(70)); tcp6(ip(::0) port(1514)); udp(ip(0.0.0.0) port(514)); udp6(ip(::0) port(514)); };

なるほど。

▼/etc/syslog-ng/syslog-ng.confを修正

# cp -pi /etc/syslog-ng/syslog-ng.conf /etc/syslog-ng/syslog-ng.conf.0
# vi /etc/syslog-ng/syslog-ng.conf
# diff /etc/syslog-ng/syslog-ng.conf.0 /etc/syslog-ng/syslog-ng.conf
92c92
< source s_net { tcp(ip(0.0.0.0) port(514) max-connections(70)); tcp6(ip(::0) port(1514)); udp(ip(0.0.0.0) port(514)); udp6(ip(::0) port(514)); };
---
> source s_net { tcp(ip(0.0.0.0) port(514) max-connections(70)); udp(ip(0.0.0.0) port(514)); };

# /etc/init.d/syslog-ng restart
Shutting down system logger:                               [FAILED]
Starting system logger:                                    [  OK  ]

tcp6とudp6の設置を削除。
無事にsyslog-ngが起動した。


あと書き
  • IPv6未対応環境だったのが原因
  • 今回はIPv6を必要としないので問題ない
  • 問題は解決しよう。

問題解決した時の達成感がタマラナイ。



2010年05月14日

[コマン道][CentOS][Linux] 検証環境用に不用サービスをゴッソリ落とす

livedoorClipに登録 clip | このエントリーをはてなブックマークに追加 はてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

sshdとnetworkだけあれば、それでいい

検証環境で良く実行している

# chkconfig --list | egrep -v 'ssh|network' | while read svc dummy; do chkconfig --del $svc; done

必要に応じてegrepに削除除外サービスを追加すればいい。