CentOS 5.8 finalなるものっそ古いOSでセットアップさせられることになったのだがyum install memcachedとかできなくて結局libeventも含めてsource tarballからインストールしたのだった

CentOS 5.8 finalって2012年リリースなのでもう1.5~2年ぐらい経過している枯れた、というかたぶん危険に近いOSな気がするのだが、そんなものに環境設定をせよとお達しが某所からやってきたのであった。まあお達しなのでどうしようもないからそのまま作業するんだけれど、yum list | grep memcachedとかしてもリストにないのでyum経由でのインストールができないとなった。仕方がないからsourceからmake && make installすることにしたのだがlibeventが必要ということで既存のyum経由でインストールされたものをconfigureで指定しようとしてもパスがうまく通らない。てんでlibeventもsourceからmakeすることになって、まあとりあえず事なきを得たというストーリー。全俺が泣いたってやつだな……。


source tarballからmake installするからといって特別なことはなにもなく、memcachedの場合は幸いにして依存関係がlibeventぐらいしかなさそうだということだ。
./configure –with-libevent=PATHとしてlibeventのパスを指定できるので、configureコマンドのオプションで既存の(yum経由でインストールされたと思われる)/usr/lib64/libevent.so.2とかがあったので./configure –with-libevent=/usr/lib64としてやるも、libeventのテストにfailしてその先に進まない。
configureを覗いてみると、どうも–with-libeventで指定したパスの配下でlibやincludeを見つけようとしているようなので、/usr/lib64を指定しても当然ヘッダファイルなどは認識されないことに。むーどないにもならへんのか。

configureを書き換えるのは手間だったので、libeventを普通にinstallすることにした。こちらも幸いなことにlibeventの特別なパッケージ等の依存関係は特になく、そのままtarballを展開してmake installするまでこぎつけた。強いて言えば./configure –prefix=/usrとかしておけば/usr/includeや/usr/lib配下にインストールできたのだろうが、もうめんどくさいのでデフォルト的に/usr/localでいいやってんで特に指定せずmakeとinstall終了。
その後にmemcachedのディレクトリから、これまた何も指定せずに./configureをまわして今度はlibeventのテストもpass。ということでこちらも事なきを得たのであった。

まずはlibeventから。memcachedのインストールに先立ちmake installしておく必要がある(当然だけど)。

[shell]
cd /usr/local/src
wget https://github.com/downloads/libevent/libevent/libevent-1.4.14b-stable.tar.gz
cd libevent-1.4.14b-stable
./configure && make
make install
[/shell]

実にシンプルである。あ、wgetのバージョンはばくちを打つ気もないからstableで持ってきている。あと、現時点での最新版を取得するほうが望ましい。
そして次は本命のmemcachedのmake install。こちらもシンプルそのものである。

[shell]
cd /usr/local/src
wget http://www.memcached.org/files/memcached-1.4.17.tar.gz
tar zxf memcached-1.4.17.tar.gz
cd memcached-1.4.17
./configure && make
make install
[/shell]

さて、インストールはこれでいいのだが、起動スクリプトを準備する必要がある。
これまた幸いなことに、System V用の起動スクリプト(/etc/init.d配下に置いてchkconfigコマンドで管理するやつ)がmemcachedに事前に用意されているのである。これを使えばいい。ただ一部修正する箇所が出てくるかもしれない。
tarballを展開したmemcachedのソースツリーの直下にscriptsというディレクトリがある。この中に各種設定ファイルが含まれている。この中にある「memcached.sysv」というファイル名のものがCentOSなどのLinuxでも使えるので、これを利用させていただくことにする。一部修正があるが、オリジナルを修正せずコピーした先のスクリプトを修正するので、ひとまずはコピーをするところから始めたい。

[shell]
cd scripts
cp memcached.sysv /etc/rc.d/init.d/memcached
[/shell]

これでコピーは終了。次にchkconfigに登録してserviceコマンドで起動できるようにする。

[shell]
chkconfig –add memcached
chkconfig memcached on
chkconfig –list | grep memcached
[/shell]

3行目は登録されたかどうかの確認で、ここで以下のように表示されていれば問題なく登録されている。

[text]
memcached 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[/text]

[Sponsored Link]


コピーした先のスクリプトの修正をする。memcached-1.4.17付属のスクリプトでいうと、1行目と34行目が該当する。
1行目は単に起動スクリプトの指定が「/bin/sh」になっているので「/bin/bash」にしている。と、まあこれは気分である。Linux系だとそもそも/bin/shは/bin/bashへのシンボリックリンクになっており、どのみちbashで起動することに変わりはない。修正するかどうかは趣味の問題とも言えるだろう。

[shell]
# ls -la /bin/*sh
-rwxr-xr-x 1 root root 801528 Jul 22 2011 /bin/bash
lrwxrwxrwx 1 root root 4 Feb 4 03:30 /bin/csh -> tcsh
lrwxrwxrwx 1 root root 21 Feb 4 03:31 /bin/ksh -> /etc/alternatives/ksh
lrwxrwxrwx 1 root root 4 Feb 4 03:27 /bin/sh -> bash
-rwxr-xr-x 1 root root 352904 Nov 4 2010 /bin/tcsh
[/shell]

ちなみにどちらが多いのかというと、/bin/bashで記述されているもののほうが多いっぽい。
「#!」と「/bin/sh(bash)」の間に空白が1つ入るかどうかというのも趣味の問題ぽいことが分かるが、どうやら空けない派が多いようだ。
などと、つまらん考察をはさみつつコトを進めていく。

[shell]
# head -1 /etc/init.d/*|grep sh|sort|uniq -c
8 #! /bin/bash
41 #!/bin/bash
5 #! /bin/sh
29 #!/bin/sh
[/shell]

肝心なのは34行目のところで、/usr/local/binにパスが通ってない(環境変数PATHに/usr/local/binの記述がない)とmemcachedが起動しない状態で書かれているので、memcachedコマンドをフルパスで指定している。

[shell]
daemon <strong><u>/usr/local/bin/</u></strong>memcached -d -p $PORT -u $USER -m $CACHESIZE -c $MAXCONN -P /var/run/memcached/memcached.pid $OPTIONS
[/shell]

diffコマンドで違いを確認してみる。

[shell]
# diff memcached.sysv /etc/init.d/memcached
34c34
< daemon memcached -d -p $PORT -u $USER -m $CACHESIZE -c $MAXCONN -P /var/run/memcached/memcached.pid $OPTIONS

> daemon /usr/local/bin/memcached -d -p $PORT -u $USER -m $CACHESIZE -c $MAXCONN -P /var/run/memcached/memcached.pid $OPTIONS
[/shell]

そしていよいよ起動……の前に、もう1つだけ作業。
34行目でも指定されているプロセスIDを保存するディレクトリ「/var/run/memcached」を事前に作成しておく必要がある。ないとserviceコマンドで起動してもエラーでその先に進まないので注意が必要である。オーナーは特に変更しなくてもよい。ディレクトリさえあれば/etc/init.d/memcachedスクリプトが処理してくれる。オーナー変更は/etc/init.d/memcachedの33行目を見れば一目瞭然である。
パーミッションは755でよいだろう。rootのumask設定が022になっていれば問題がない。umaskコマンドをrootで実行すれば(オプションなし)、現在のumask値を表示してくれる。

[shell]
# mkdir /var/run/memcached
[/shell]

そして、serviceコマンドで起動する。

[shell]
service memcached start
ps -ef | grep memcached
[/shell]

psコマンドでプロセスが上がっているのを確認。あがっていればまずはOKとみればいいだろう。

できるPRO CentOS 6 サーバー (できるプロシリーズ)はじめてのCentOS6 Linuxサーバ構築編 (TECHNICAL MASTER)たった2日でわかるLinux―Cent OS 6.4対応Linuxシステム[実践]入門 (Software Design plus)プロのための Linuxシステム・10年効く技術 (Software Design plus)

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください