Browse Month: July 2012

homebrew + Mountain Lion について

みなさん、Mountain Lion には更新しましたか?僕は、MBA 2012 Mid モデルだったので、無料で Mountain Lion にアップグレードしました。
さて、アップデート後の homebrew との組み合わせについて、特に ImageMagick まわりがおかしくなったので、直し方をまとめておきます。
原文は、こちらです。

1. Xcode 4.4 をインストールする
AppStore からインストールしましょう!

2. コマンドラインツールをインストールする
Xcode 4.4 を起動して、メニューから [Xcode] – [Preferences] を選択します。Download タブにある、コマンドラインツールをインストールしましょう。次の画面で「install」ボタンをクリックするだけです!

3. Xcode の場所を設定します
次のコマンドを実行します

sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer

4. X11 をインストールします
ここから X11 バージョン2.7.2 をインストールします。
インストール後、symlink をはります。

$ sudo ln -s /opt/X11 /user/X11

5. macvim, imagemagick, ghostscript がある場合は、再インストールします。
僕の場合は、imagemagick だけだったので、次のように再インストールします。

$ brew uninstall imagemagick
$ brew install imagegick

あと、もし Rails などで rmagick を使っている場合、gcc の symlink をはる必要があります。なお、export CC=/usr/bin/gcc もしたほうがいいと思います。システムレベルで symlink をはるのは、微妙かもしれません…。rmagick を早く卒業しないといけないのかもしれませんね。(いつもトラブるので・・・)

$ sudo ln -s /usr/bin/gcc /usr/bin/gcc-4.2

CentOS 5.x 系で XFS でフォーマットしてインストールする方法

キックスタート経由で、CentOS 5.x 系だと XFS でフォーマットしてインストールすることができません。

そこで、XFS でフォーマットできる方法を紹介したいと思います。

まず、キックスタートのときに最初に参照される stage2.img に必要なファイルを組み込みます。
次の例は、cobbler を使ったときになります。

$ cp /var/www/cobbler/ks_mirror/centos5-x86_64/images/stage2.img .
$ unsquashfs -dest ./stage2 stage2.img
$ cp /sbin/mkfs.xfs ./stage2/usr/sbin
$ cp /sbin/fsck.xfs ./stage2/usr/sbin
$ cp /usr/sbin/xfs_db ./stager2/usr/sbin
$ mksquashfs ./stage2 ./stage2.img -all-root -no-fragments

あとは、%packages で、次のパッケージをインストールします。

kmod-xfs
xfsdump
xfsprogs

これで、作成した stage2.img を使えば、キックスタート経由で XFS でフォーマットすることができます。/boot は、ext3/4 のままでないと、たぶんブートできないと思うので、注意しましょう。

監視ツール勉強会 – 第2回 プロセス自動再起動ツール編で、発表しておきました

今週は連日の勉強会となってしまいましたが、監視ツール勉強会 – 第2回 プロセス自動再起動ツール編 on Zusaar で、Monit と簡単な Supervisord の Tips を話してきました。

また、新しい課題を見つかってきましたが、とりあえず daemontools を使っているところをすこしずつツールを統一するという面で Supervisord に移行していきたいと思います。

Automation Tech Casual Talks #1 を開催しました!

はじめて勉強会を主催したのですが、Automation Tech Casual Talks #1 を無事開催しました。
参加していただいた皆さん、会場を提供していただいた株式会社ハートビーツ様、本当にありがとうございました。

最初の予定では、3名くらいの参加があればいいなぁと思っていましたが、なんと 9 名もの参加がありまして、とても盛り上がった勉強会になりました。
おそらく、プレゼンの時間より、意見交換・議論の時間の方が多かったと思います。そして、勉強会の時間のほうも当初の予定を 1 時間ほどオーバーして、大いに盛り上がったことは、主催としてとてもうれしいです。そのあとの有志での懇親会でも、大いに盛り上がりました!

そもそもなぜこの勉強会を開催したかというと、前に MySQL Casual を主催している @myfinder さんになぜ MySQL Casual を主催しているのですか?聞いたとき、こんなことをおっしゃっていました。

「それは、自分が聞きたい話があるから。自分が聞きたい話があるから、定期的に開催している。」

このお言葉にはとても共感して、素晴らしいお言葉だと思います。

今回は、みんなどんなところでどんな問題を解決するためにどんな自動化を行っているんだろ、そんな話を聞きたいと思い、Automation Tech Casual Talks #1 を開催しました。

というわけで、今回のスライドをアップロードしておきました。また、あわせて参加者のスライドも随時更新させていただきますね。
当日の Twitter も Spring_MT さんにまとめていただきまして、ありがとうございます!

n0ts – 「ぼくがかんがえたさいきょうの☆きっくすたーと☆」

lamanotrama さん – 「サーバ構築自動化 (on AWS)

tnmt さん – 「システムに撒くRuby環境をrbenv+Jenkinsで管理してみる」

Spring_MT さん – 「自動化の目論見

ume3_ さん – 「LAMP 環境を Puppet 化してみて

yepn さん – 「cobbler + puppet + func のお話」(※口頭でのお話でした)

nakashii_ さん – 「chef + kickstart のお話」

soestudio さん – 「あのお話」

ijin さん – 「MHA, MURAKUMO, & ME

yuzorock さん – 「Devとopsをつなぐpuppet

非常に好評でまだまだネタがありそうでしたので、第二回目も企画ができればいいなあと思っています!!!
それでは、また!

Automation Tech Casual Talks #1 を開催します

初めて、勉強を主催することになりました。日時は、7/17(火)19:00 からとなります。

Automation Tech Casual Talks #1 on Zusaarで応募していますが、
参加者が全員発表するというかなりカジュアルでゆるい勉強会ですので、皆様ふるってご参加していただければ幸いです。

今のところ、なんと私を除いて 9 名もの人たちが参加予定となっています。

正直、こんなに人数が集まるとは思っていませんでした・・・。

snmpd のログ設定について

CentOS 5.8 x86_64 での snmpd を動かしている場合、設定によっては大量の接続ログが /var/log/messages に出力されてしまうことがあります。

そこで、SNMPd のログ設定まとめてみます。

まず、/etc/sysconfig/snmpd.options の OPTIONS を、次のように変更します。

OPTIONS="-Ls6d -Lf /dev/null -p /var/run/snmpd.pid"

上記の場合、local6 facility に出力されることになるので、/etc/syslog.conf に、次を追加します。

local6.* /var/log/snmpd.log

あわせて、/var/log/messages に出力しないようにします。

*.info;mail.none;authpriv.none;cron.none,local6.none /var/log/messages

最後に、snmpd と syslog を再起動して、設定は完了です。

$ sudo service snmpd restart
$ sudo service syslog restart

syslog の設定によっては、まったく /var/log/messages にログが出力されなくなることもあるので注意して設定しましょう。
ちなみに僕は local*.none の設定を追加したら対応していないらしく、何も /var/log/messages にログが出力されなくなってしまいました...。

参考資料
Reduce SNMPd logging verbosity - Server Fault

そろそろ、CentOS 5 の時代ではなくなってきているので、攻めるシステムの OS は置き換えていきたいと考えています。

PHP 5.3 + MySQL 5.5 の RPM も作ったお話

昨日、PHP 5.4 + MySQL 5.5 の RPM を作成したわけですが、stomp という PECL を使う環境で stomp がインストールでませんでした。このあたりが原因のようです…。

CentOS 5.8 x86_64 では、php53 というパッケージに公式にあるので、パッケージをダウンロードしてリビルドしてみました。

$ yumdownloader --source php53
$ rpm -i php53-5.3.3-13.el5_8.src.rpm

前回と同じように、mysql_config のパスと php53-mysql を php53-mysql55 に変更してビルドを開始しました。

$ rpmbuild -ba ~/rpmbuild/SPECS/php53.spec
...
hecking for specified location of the MySQL UNIX socket... no
checking for mysql_close in -lmysqlclient... no
checking for mysql_error in -lmysqlclient... no
configure: error: mysql configure failed. Please check config.log for more information.
error: Bad exit status from /var/tmp/rpm-tmp.88928 (%build)

MySQL まわりの configure で失敗してしまいました…。
socket の設定は、–with-mysql-sock オプションを追加することで改善したのですが、どうしても -lmysqlclient まわりが解決できませんでした。おそらく、MySQL の RPM を公式で使っていることが原因だと推測したので、別のパッケージを探してみました。

執筆時現在の PHP 5.3 系の最新バージョンは、PHP 5.3.14 になります。
いくつかあった中で、ここにある SRPM からリビルドをしてみました。(remi リポジトリにもあるようですが、個人的にあまり remi は信用していないため、今回は使いませんでした)
ただし、この php-5.3.14-1.w5.src.rpm は、SPEC ファイル名が php53.spec となっていますが、パッケージ名が「php」となっているため、php53 にパッケージを変更しました。パッケージを変更するにあたり、昨日の php54.spec ファイルを参考にしながら変更しました。この変更には、依存関係まわりでかなりはまってしまいました。差分の方はかなり長いので、gist に置いておきました。

あと、pear は、昨日の php54-pear を php53-pear としてコピーしてさくっと作成しました。

そして、stomp ですが、OpenSSL 1.0 系に対応しているため、CentOS 5.x の OpenSSL では対応できないため、OpenSSL 対応をオフするとインストールすることができます。PECL インストールするには、php53-devel が必要です。


$ sudo pecl install stomp
downloading stomp-1.0.3.tgz ...
Starting to download stomp-1.0.3.tgz (18,309 bytes)
......done: 18,309 bytes
6 source files, building
running: phpize
Configuring for:
PHP Api Version: 20090626
Zend Module Api No: 20090626
Zend Extension Api No: 220090626
OpenSSL install prefix (no to disable SSL support) [/usr] : no
...
Build process completed successfully
Installing '/usr/lib64/php/modules/stomp.so'
install ok: channel://pecl.php.net/stomp-1.0.3
configuration option "php_ini" is not set to php.ini location
You should add "extension=stomp.so" to php.ini

$ vi /etc/php.d/stomp.ini
extension=stomp.so

$ php -r "phpinfo();" | grep stomp
/etc/php.d/stomp.ini,
PHP Warning: phpinfo(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Tokyo' for 'JST/9.0/no DST' instead in Command line code on line 1
stomp.default_broker => tcp://localhost:61613 => tcp://localhost:61613
stomp.default_connection_timeout_sec => 2 => 2
stomp.default_connection_timeout_usec => 0 => 0
stomp.default_read_timeout_sec => 2 => 2
stomp.default_read_timeout_usec => 0 => 0

RPM を作成するのも、なかなか大変ですねっと。。。

PHP 5.4 + MySQL 5.5 の RPM を作成する方法

CentOS 5.8 x86_64 の環境で、大人の事情で PHP 5.4.4 + MySQL 5.5.24 の RPM を作成してみました。

まず、MySQL 5.5 の公式 RPM をさくっとインストールします。インストール後は、こんな感じになるはずです。

$ rpm -qa | grep MySQL
MySQL-client-5.5.24-1.rhel5
MySQL-server-5.5.24-1.rhel5
MySQL-devel-5.5.24-1.rhel5

次に PHP 5.4.4 の方ですが、ここにちゃんとメンテナンスされている SPEC ファイルやパッチファイルがありますので、これを使います。
php54 : Code : IUS Community Project

$ bzr branch lp:~ius-coredev/ius/php5

さっそく、このファイルを使って PHP 5.4 系の RPM を作成しますが、php54-mysql パッケージの名前を MySQL 5.5 系でビルドしたことが分かるように php54-mysql55 としておくと便利だと思います。

SPEC ファイルの差分は、次のようになります。

16c16
< %{!?runselftest: %{expand: %%global runselftest 1}} --- > %{!?runselftest: %{expand: %%global runselftest 0}}
20c20
< %global mysql_config %{_libdir}/mysql/mysql_config --- > %global mysql_config %{_bindir}/mysql_config
341c341
< %package mysql --- > %package mysql55
356c356
< BuildRequires: mysql-devel >= 4.1.0
---
> BuildRequires: MySQL-devel >= 5.5.50
359c359
< %description mysql --- > %description mysql55
1406c1406
< %files mysql -f files.mysql --- > %files mysql55 -f files.mysql

あとは、ビルドするだけですが MySQL のライブラリが見つからないというエラーが発生するため、次のコマンドを実行してから RPM をビルドしましょう。

$ export LDFLAGS=-L/usr/lib64/mysql
$ rpmbuild -ba ~/rpmbuild/SPECS/php54.spec

ビルドが終わると、次のような RPM ができあがります。

$ ls ~/rpmbuild/RPMS/x86_64/php54*
php54-5.4.4-1.ius.el5.x86_64.rpm
php54-mcrypt-5.4.4-1.ius.el5.x86_64.rpm
php54-bcmath-5.4.4-1.ius.el5.x86_64.rpm
php54-mssql-5.4.4-1.ius.el5.x86_64.rpm
php54-cli-5.4.4-1.ius.el5.x86_64.rpm
php54-mysql55-5.4.4-1.ius.el5.x86_64.rpm
php54-common-5.4.4-1.ius.el5.x86_64.rpm
php54-mysqlnd-5.4.4-1.ius.el5.x86_64.rpm
php54-dba-5.4.4-1.ius.el5.x86_64.rpm
php54-odbc-5.4.4-1.ius.el5.x86_64.rpm
php54-devel-5.4.4-1.ius.el5.x86_64.rpm
php54-pdo-5.4.4-1.ius.el5.x86_64.rpm
php54-embedded-5.4.4-1.ius.el5.x86_64.rpm
php54-pgsql-5.4.4-1.ius.el5.x86_64.rpm
php54-enchant-5.4.4-1.ius.el5.x86_64.rpm
php54-process-5.4.4-1.ius.el5.x86_64.rpm
php54-fpm-5.4.4-1.ius.el5.x86_64.rpm
php54-pspell-5.4.4-1.ius.el5.x86_64.rpm
php54-gd-5.4.4-1.ius.el5.x86_64.rpm
php54-recode-5.4.4-1.ius.el5.x86_64.rpm
php54-imap-5.4.4-1.ius.el5.x86_64.rpm
php54-snmp-5.4.4-1.ius.el5.x86_64.rpm
php54-interbase-5.4.4-1.ius.el5.x86_64.rpm
php54-soap-5.4.4-1.ius.el5.x86_64.rpm
php54-intl-5.4.4-1.ius.el5.x86_64.rpm
php54-tidy-5.4.4-1.ius.el5.x86_64.rpm
php54-ldap-5.4.4-1.ius.el5.x86_64.rpm
php54-xml-5.4.4-1.ius.el5.x86_64.rpm
php54-litespeed-5.4.4-1.ius.el5.x86_64.rpm
php54-xmlrpc-5.4.4-1.ius.el5.x86_64.rpm
php54-mbstring-5.4.4-1.ius.el5.x86_64.rpm

あと、PEAR ですが、別途 RPM を作成しないといけません。
php54-pear の SPEC ファイルは、ここにありますので、これを使ってさくっとビルドしちゃいます。

$ git clone https://github.com/iuscommunity/php54-pear.git
$ cd php54-pear
$ rpmbuild -ba SPECS/php54-pear.spec

そうすると、$HOME/rpmbuild/RPMS/noarch/php54-pear-1.9.4-1.ius.el5.noarch.rpm が作成されます。