木曜日, 6月 27, 2013

Apache 2.2系 スタートアップスクリプトまとめ!

Apache 2.2系のスタートアップスクリプトのまとめです!
文中にあるけど、2.4はlockfileの部分をなくせばいいだけなような気もするけど、使ってないからわからんので、2.4は他をあたってくださいw


<推奨される起動方法について>
http://httpd.apache.org/docs/2.2/invoking.html
http://httpd.apache.org/docs/2.4/invoking.html
2.2/2.4ともに、apachectl 制御スクリプトを使用するのが推奨らしいです。
ただ、サーバー起動時は勝手にこのスクリプトはなめませんので、自動起動したい場合には、
init.dにスタートアップスクリプトを用意し、「chkconfig httpd on」で登録しておきましょう。
httpdの上げ下げは、スタートアップスクリプトも直接httpdを叩くより、推奨どおりapachectl制御スクリプトへのリンクで作るとよいでしょう。


<PidFileについて>
http://httpd.apache.org/docs/2.2/mod/mpm_common.html#pidfile
http://httpd.apache.org/docs/2.4/mod/mpm_common.html#pidfile
PidFile(httpd.pid)における2.2/2.4のデフォルト保存先は、logs/httpd.pidとなっていますが、
http.confで指定すれば変更できます。デフォルトは使いづらいのでconfで変更しておきましょう。


<lockfileについて>
http://httpd.apache.org/docs/2.2/mod/mpm_common.html#lockfile
https://httpd.apache.org/docs/2.4/mod/core.html#mutex
lockfileは、2.2はlogs/httpd.pidが指定されてますが、pidfileと違って自動保存や削除はされません(2.4はこのディレクティブ自体が削除されました)。
2.2で自動作成・削除する場合には、スタートアップスクリプトで指定しましょう。


<apache付属のスタートアップスクリプト サンプルについて>
コンパイルしたときにサンプルとして作られるものがあります(httpd-2.2.xx/build/rpm/httpd.init)。
これには以下のようなものが含まれてます。
・chkconfigのスタートアップ順番の情報など
・/etc/rc.d/init.d/functionsの読み込み(daemonルーチンの読み込みなど)
・起動時の言語指定(LANG=C)
・起動時のlockfile作成
・停止時のlockfile削除
一番下に参考として張っておきました~


<2.2用 スタートアップスクリプト 例>
実際のスタートアップスクリプトの例です(ところどころサンプルパクった自作なので使用上の注意をよくよんでお使いください(笑))。

変数を見てもらえれば想定している環境はほとんどわかってもらえると思いますが、httpd.confに2行だけ追加してもらうことが推奨です。
ポイントはrestart時に確実にstopしたのを確認してから、startしているようにしている点などです。

/usr/local/apache2/conf/httpd.conf
PidFile /var/run/httpd.pid
LockFile /var/lock/subsys/httpd


/etc/init.d/httpd
#!/bin/sh
#
# chkconfig: - 85 15
# description: Apache 2.2.xx
# Source function library.
. /etc/rc.d/init.d/functions
prog=httpd
httpd=/usr/local/apache2/bin/${prog}
CONFFILE=/usr/local/apache2/conf/${prog}.conf
pidfile=/var/run/${prog}.pid
lockfile=/var/lock/subsys/${prog}
apachectl=/usr/local/apache2/bin/apachectl
start() {
        echo -n $"Starting $prog: "
daemon $apachectl -f ${CONFFILE}
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch ${lockfile}
        return $RETVAL
}
stop()  {
        echo -n $"Stopping $prog: "
daemon $apachectl -k stop
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f ${lockfile}
}
restart() {
        if [ -f ${pidfile} ]; then
           stop
           ROOP=0
           while test $ROOP -lt 600
              do
                 if [ ! -f ${pidfile} ]; then
                    break
                 else
                    sleep 1
                    ROOP=`expr $ROOP + 1`
                 fi
              done
  start
        else
           echo "$prog not running."
        fi
}
reload() {
        echo -n $"Reloading $prog: "
        if test -f ${pidfile}; then
        daemon $apachectl -k restart
        RETVAL=$?
        echo
        else
        echo "$prog not running."
        fi
}
graceful() {
        echo -n $"Graceful $prog: "
        if test -f ${pidfile}; then
        daemon $apachectl -k graceful
        RETVAL=$?
        echo
        else
        echo "${prog} not running."
        fi
}
configtest() {
        echo "Check to ${CONFFILE}"
        $apachectl -t -f ${CONFFILE}
}
version() {
        $apachectl -V
}
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        restart
        ;;
  reload)
        reload
        ;;
  graceful)
        graceful
        ;;
  version)
        version
        ;;
  configtest)
        configtest
        ;;
  status|help|v)
$apachectl $@
        ;;
  *)
        echo $"Usage: $prog {start|stop|restart|reload|status|graceful|help|configtest|version}"
        exit 1
esac


<参考:apache 2.2.24をビルドしたときについてくるサンプル完コピ>

httpd-2.2.xx/build/rpm/httpd.init
#!/bin/bash
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
# httpd        Startup script for the Apache Web Server
#
# chkconfig: - 85 15
# description: The Apache HTTP Server is an efficient and extensible  \
#             server implementing the current HTTP standards.
# processname: httpd
# pidfile: /var/log/httpd/httpd.pid
# config: /etc/sysconfig/httpd
#
### BEGIN INIT INFO
# Provides: httpd
# Required-Start: $local_fs $remote_fs $network $named
# Required-Stop: $local_fs $remote_fs $network
# Should-Start: distcache
# Short-Description: start and stop Apache HTTP Server
# Description: The Apache HTTP Server is an extensible server
#  implementing the current HTTP standards.
### END INIT INFO
# Source function library.
. /etc/rc.d/init.d/functions
# What were we called? Multiple instances of the same daemon can be
# created by creating suitably named symlinks to this startup script
prog=$(basename $0 | sed -e 's/^[SK][0-9][0-9]//')
if [ -f /etc/sysconfig/${prog} ]; then
        . /etc/sysconfig/${prog}
fi
# Start httpd in the C locale by default.
HTTPD_LANG=${HTTPD_LANG-"C"}
# This will prevent initlog from swallowing up a pass-phrase prompt if
# mod_ssl needs a pass-phrase from the user.
INITLOG_ARGS=""
# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server
# with the thread-based "worker" MPM; BE WARNED that some modules may not
# work correctly with a thread-based MPM; notably PHP will refuse to start.
httpd=${HTTPD-/usr/sbin/httpd}
pidfile=${PIDFILE-/var/log/httpd/${prog}.pid}
lockfile=${LOCKFILE-/var/lock/subsys/${prog}}
RETVAL=0
# check for 1.3 configuration
check13 () {
        CONFFILE=/etc/httpd/conf/httpd.conf
        GONE="(ServerType|BindAddress|Port|AddModule|ClearModuleList|"
        GONE="${GONE}AgentLog|RefererLog|RefererIgnore|FancyIndexing|"
        GONE="${GONE}AccessConfig|ResourceConfig)"
        if grep -Eiq "^[[:space:]]*($GONE)" $CONFFILE; then
                echo
                echo 1>&2 " Apache 1.3 configuration directives found"
                echo 1>&2 " please read @docdir@/migration.html"
                failure "Apache 1.3 config directives test"
                echo
                exit 1
        fi
}
# The semantics of these two functions differ from the way apachectl does
# things -- attempting to start while running is a failure, and shutdown
# when not running is also a failure.  So we just do it the way init scripts
# are expected to behave here.
start() {
        echo -n $"Starting $prog: "
        check13 || exit 1
        LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch ${lockfile}
        return $RETVAL
}
stop() {
        echo -n $"Stopping $prog: "
        killproc -p ${pidfile} -d 10 $httpd
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
reload() {
        echo -n $"Reloading $prog: "
        check13 || exit 1
        killproc -p ${pidfile} $httpd -HUP
        RETVAL=$?
        echo
}
# See how we were called.
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        if ! test -f ${pidfile}; then
            echo $prog is stopped
            RETVAL=3
        else
            status -p ${pidfile} $httpd
            RETVAL=$?
        fi
        ;;
  restart)
        stop
        start
        ;;
  condrestart)
        if test -f ${pidfile} && status -p ${pidfile} $httpd >&/dev/null; then
                stop
                start
        fi
        ;;
  reload)
        reload
        ;;
  configtest)
        LANG=$HTTPD_LANG $httpd $OPTIONS -t
        RETVAL=$?
        ;;
  graceful)
        echo -n $"Gracefully restarting $prog: "
        LANG=$HTTPD_LANG $httpd $OPTIONS -k $@
        RETVAL=$?
        echo
        ;;
  *)
        echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|graceful|help|configtest}"
        exit 1
esac
exit $RETVAL

以上!

水曜日, 6月 26, 2013

OpenSSLのアップグレード

RHEL5.5にOpenSSLの最新を上書きしています(無保証w)
普通に使うには問題ないっぽいですが、問題あったら教えてください!


<概要>

[諸元]
OS : RHEL5.5 64bit
OpenSSL  : openssl-1.0.1e.tar.gz
作業フォルダは、自分のhome/tmpで作業しています。


<作業手順>

※make testで「ALL TESTS SUCCESSFUL.」が表示されればほぼ大丈夫。

ssh username@webserver1
cd ~username/tmp
wget http://www.openssl.org/source/openssl-1.0.1e.tar.gz
tar zxf openssl-1.0.1e.tar.gz
cd openssl-1.0.1e
./config --prefix=/usr --openssldir=/etc/pki/tls shared zlib
make
make test
su -
cd ~username/tmp
make install
exit


<参考 OS付属のものと比較してみる>


RHEL5.5 付属のOpenSSL
$ openssl version -a
OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008
built on: Fri Mar 12 07:43:39 EST 2010
platform: linux-x86_64
options:  bn(64,64) md2(int) rc4(ptr,int) des(idx,cisc,16,int) blowfish(ptr2)
compiler: gcc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DKRB5_MIT -I/usr/kerberos/include -DL_ENDIAN -DTERMIO -Wall -DMD32_REG_T=int -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -Wa,--noexecstack -DOPENSSL_USE_NEW_FUNCTIONS -fno-strict-aliasing -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM
OPENSSLDIR: "/etc/pki/tls"
engines:  dynamic

$

今回構築したもの
$ openssl version -a
OpenSSL 1.0.1e 11 Feb 2013
built on: Wed Jun 26 15:52:14 JST 2013
platform: linux-x86_64
options:  bn(64,64) rc4(16x,int) des(idx,cisc,16,int) idea(int) blowfish(idx)
compiler: gcc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -Wa,--noexecstack -m64 -DL_ENDIAN -DTERMIO -O3 -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM
OPENSSLDIR: "/etc/pki/tls"

$

.

月曜日, 6月 24, 2013

いまさら感いっぱいに tomcat6 x apache2.2 の連携

いまさら感いっぱいにtomcat6 x apache2.2の連携まとめます~←for me。
間違いなどあればご指摘くださいませ!


<概要>

[諸元]
OS : RHEL5.5 64bit
Httpd  : httpd-2.2.24.tar.gz
Tomcat : apache-tomcat-6.0.37.tar.gz
作業フォルダは、自分のhome/tmpで作業しています。

[tomcatについて]
/usr/local/apache-tomcat-6.0.37にインストールし、/usr/local/tomcatとシンボリックリンクを張り、管理を容易にする。

[httpについて]
/usr/local/httpd-2.2.24にインストールし、/usr/local/apache2とシンボリックリンクを張り、管理を容易にする。




<ファイルを配布するサーバーでの作業>

ssh ファイルを配布するサーバーにログイン!
cd ~/保存したいフォルダ
wget http://ftp.meisei-u.ac.jp/mirror/apache/dist/tomcat/tomcat-6/v6.0.37/bin/apache-tomcat-6.0.37.tar.gz
wget http://ftp.riken.jp/net/apache/httpd/httpd-2.2.24.tar.gz
※もし明星大学様、理研様から削除された場合は、他のミラーサイト、またはバージョンが上がっている可能性があるので公式サイトを確認してみてください。l

md5sum apache-tomcat-6.0.37.tar.gz
md5sum httpd-2.2.24.tar.gz

※上記のmd5sumチェックだけど、それぞれ
apache-tomcat-6.0.37.tar.gz ⇒ f90b100cf51ae0a444bef5acd7b6edb2
httpd-2.2.24.tar.gz ⇒ 64a3392018ad60583209a16d728180d3
になればおk。
で、Webサーバーにコピーしまくります。
scp apache-tomcat-6.0.37.tar.gz username@webserver1:~/tmp
scp apache-tomcat-6.0.37.tar.gz username@webserver2:~/tmp
scp apache-tomcat-6.0.37.tar.gz username@webserver3:~/tmp
scp httpd-2.2.24.tar.gz username@webserver1:~/tmp
scp httpd-2.2.24.tar.gz username@webserver2:~/tmp
scp httpd-2.2.24.tar.gz username@webserver3:~/tmp


<tomcatの設定>
※基本的に解凍して、移動するだけ。

ssh username@webserver1
cd ~username/tmp
tar -xzf apache-tomcat-6.0.37.tar.gz
su -
cd ~username/tmp
mv apache-tomcat-6.0.37 /usr/local/
cd /usr/local/
mv ./apache-tomcat-6.0.37/conf/ ./apache-tomcat-6.0.37/conf.org/
mv ./apache-tomcat-6.0.37/webapps/ ./apache-tomcat-6.0.37/webapps.org/
cp -r ./tomcat/conf ./apache-tomcat-6.0.37/
cp -r ./tomcat/webapps ./apache-tomcat-6.0.37/
rm -fr ./apache-tomcat-6.0.37/webapps/examples/
rm -fr ./apache-tomcat-6.0.37/webapps/ROOT/
#chown -R 使用者:使用グループ ./apache-tomcat-6.0.37/

#古いシンボリックリンク(がもしあれば)削除します。
cd /usr/local/
rm tomcat

#シンボリックリンクを張ります。
ln -s apache-tomcat-6.0.37 tomcat

#initなどの起動スクリプトはまた後日。



<httpdの設定>

cd ~username/tmp
tar -xzf httpd-2.2.24.tar.gz
cd httpd-2.2.24

#configureします。proxy以外はデフォで入りますが、数か月経つと忘れるので明示しています。
#モジュールはほぼ静的に入れてますが、DSOも将来の拡張性のために有効にしました。
#なお --with-sslはsslのprefixを指定します(デフォルトは/usr)。別個に/usr/local/opensslに入れたとかならそこを指定するし、yum updateなりopensslをソースから/usrに入れたなら、/usrを指定してください、ね!
./configure \
--prefix=/usr/local/apache2 \
--with-mpm=prefork \
--enable-so \
--enable-rewrite \
--enable-vhost-alias \
--enable-ssl \
--with-ssl=/usr \
--enable-proxy \
--enable-proxy-ajp
make
su -
cd ~username/tmp/httpd-2.2.24
make install

#ajpを使うフォルダを指定し、tomcatとの連携を有効にします。
#http://webserver1/wahaha/で使う場合を想定しています。

vi /usr/local/apache2/conf/extra/httpd-proxy.conf
<Location /wahaha/>
    ProxyPass ajp://localhost:8009/wahaha/
</Location>


#http.confを変更または確認します。
※各種モジュールを静的に入れたため、LoadModuleは使いません。
vi /usr/local/apache2/conf/httpd.conf

以下追加
Include conf/extra/httpd-proxy.conf

tomcatの設定
#それぞれの環境に合わせて変更してください。下はデフォルトをコピペしています。
vi /usr/local/tomcat/conf/server.xml
    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009"
               maxThreads="10000"
               enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />



<apacheのコンパイルの注意点>

使用するモジュールは静的に組み込みつつ、DSOを有効にし将来の拡張に備えました。

※"--with-ssl=/usr/local/ssl \"は、SSLヘッダーが見つからないエラーを回避するために必須。
---
no SSL-C headers found
configure: error: ...No recognized SSL/TLS toolkit detected

---

※--enable-ssl=shared \はエラーが出るので、静的に組み込む。
---
/usr/bin/ld: /usr/local/ssl/lib/libcrypto.a(x86_64-gcc.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/usr/local/ssl/lib/libcrypto.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make[4]: *** [mod_ssl.la] エラー 1

---




<参考 コンパイル・モジュールの確認>

上記方法でコンパイルしたhttpdの状態やモジュールの詳細をログっときます。

コンパイル時の引数など状態確認(-V)
$ ./httpd -V
Server version: Apache/2.2.24 (Unix)
Server built:   Jun 26 2013 16:29:42
Server's Module Magic Number: xxxxxxxxxxx
Server loaded:  APR 1.4.6, APR-Util 1.4.1
Compiled using: APR 1.4.6, APR-Util 1.4.1
Architecture:   64-bit
Server MPM:     Prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/prefork"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=128
 -D HTTPD_ROOT="/usr/local/httpd-2.2.24"
 -D SUEXEC_BIN="/usr/local/httpd-2.2.24/bin/suexec"
 -D DEFAULT_PIDLOG="logs/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_LOCKFILE="logs/accept.lock"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

$

モジュールの確認(-M)
$ ./httpd -M
Loaded Modules:
 core_module (static)
 authn_file_module (static)
 authn_default_module (static)
 authz_host_module (static)
 authz_groupfile_module (static)
 authz_user_module (static)
 authz_default_module (static)
 auth_basic_module (static)
 include_module (static)
 filter_module (static)
 log_config_module (static)
 env_module (static)
 setenvif_module (static)
 version_module (static)
 proxy_module (static)
 proxy_connect_module (static)
 proxy_ftp_module (static)
 proxy_http_module (static)
 proxy_scgi_module (static)
 proxy_ajp_module (static)
 proxy_balancer_module (static)
 ssl_module (static)
 mpm_prefork_module (static)
 http_module (static)
 mime_module (static)
 status_module (static)
 autoindex_module (static)
 asis_module (static)
 cgi_module (static)
 vhost_alias_module (static)
 negotiation_module (static)
 dir_module (static)
 actions_module (static)
 userdir_module (static)
 alias_module (static)
 rewrite_module (static)
 so_module (static)
Syntax OK

$

月曜日, 6月 10, 2013

Couchbase Client Library Rubyを使ってドキュメントの追加と削除をやってみる

Couchbase Client Library Rubyを使ってドキュメントの追加と削除をやってみましょう!
このライブラリのメリットは以下の通りです。

・インストールは簡単
・サーバーとバケットを指定するだけでCouchbaseにアクセス可能
・「Client.なにがし」で、データの追加や削除が可能

さっそく使ってみますよ!


詳しいマニュアル
http://www.couchbase.com/jp/develop/ruby/current


Documentを追加・更新するときのコマンドと挙動について
新規追加は2種類、変更用に1種類ありますが、「client.set」はキーが既になければ追加、あれば更新(上書き)するのでとても便利ですが、キーがないときはエラー処理に回したいなどの要望があれば、きちんと使い分けましょう。

client.add client.set client.replace
新規 ×
上書き ×
ドキュメント追加 ×
ドキュメント変更 ×



新規でキーを作成する場合
追加は、client.addもしくはclient.setを使い、キーや値を指定して実行します。
---
require 'rubygems'
require 'couchbase' 
client = Couchbase.connect(:bucket => "バケット名",
                           :hostname => "サーバー名")
key = "キー名"
doc = {"サブキー" => "値","サブキー" => "値"} 
client.set(key,doc) 
client.disconnect
---
具体例
サーバー「abc01.com.local」の、バケット名「Yuru-chara」に、キー「kumamon」、JSONが「"No":001,"Prefecture":"Kumamoto Ken","Symbol":"Kuma"」を登録してみる。

kumareg.rb
---
require 'rubygems'
require 'couchbase' 
client = Couchbase.connect(:bucket => "Yuru-chara",
                           :hostname => "abc01.com.local")
key = "kumamon"
doc = {"No"=>001,"Prefecture"=>"Kumamoto Ken","Symbol"=>"Kuma"} 
client.set(key,doc) 
client.disconnect
---
実行する
ruby kumareg.rb

管理画面で確認してみる



ドキュメントを削除する場合
削除はキーを指定して、client.deleteで削除できます。
さっきのキー「kumamon」を削除してみましょう。

kumadel.rb
---
require 'rubygems'
require 'couchbase' 
client = Couchbase.connect(:bucket => "Yuru-chara",
                           :hostname => "abc01.com.local")
key = "kumamon" 
client.delete(key) 
client.disconnect
---

管理画面で確認してみる
※Item Countが「0」になっています




金曜日, 6月 07, 2013

Couchbase Client Library Ruby 1.3.1のインストール(失敗そして後日談へ)

ruby経験1時間未満の僕がCouchbaseをrubyで使おうとしているんだけど、インストールは正常にできた、と思う。

けど使うところで「can't modify frozen string (RuntimeError)」なんつーエラーが出てだめ。

とりあえずRuby 1.9.3は全然だめで、recommendedな1.9.2を使うとなにかしらで引っかかっている感じ。長年の経験からはruby clientがアレだと思って、CouchbaseのForumのぞいたら、なんと昨日clientが新しくなって1.3.1になってるw さっそくupdateして試した!

けど同じエラーorz

困ったけどとりあえずインストール方法だけでも、自分のために残しときますね!



■Couchbase Client Library Ruby 1.3.1のインストール
※RHEL5.5 64bitで実施。たぶんほかの5系64bitならまんまでおk。

[参照ページ]
http://www.couchbase.com/jp/develop/ruby/current
https://rubygems.org/gems/couchbase/versions/1.3.1
http://www.slideshare.net/avsej/getting-started-with-couchbase-ruby

[epelのインストール]
rpm -ivh http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm

[libevのインストール]
yum install -y --enablerepo=epel libev

[couchbaseライブラリのインストール]
wget -O/etc/yum.repos.d/couchbase.repo http://packages.couchbase.com/rpm/couchbase-centos55-x86_64.repo
yum install -y  libcouchbase2 libcouchbase-devel

[couchbase Ruby Client Libraryのインストール]
gem install couchbase

[確認とだめなところ]
$ ruby -rrubygems -rcouchbase -e 'puts Couchbase::VERSION'
/usr/local/rbenv/versions/1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/version.rb:191:in `strip!': can't modify frozen string (RuntimeError)
        from /usr/local/rbenv/versions/1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/version.rb:191:in `initialize'
        from /usr/local/rbenv/versions/1.9.2-p320/lib/ruby/gems/1.9.1/gems/couchbase-1.3.1/lib/ext/multi_json_fix.rb:35:in `new'
        from /usr/local/rbenv/versions/1.9.2-p320/lib/ruby/gems/1.9.1/gems/couchbase-1.3.1/lib/ext/multi_json_fix.rb:35:in `<top (required)>'
        from /usr/local/rbenv/versions/1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
        from /usr/local/rbenv/versions/1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
        from /usr/local/rbenv/versions/1.9.2-p320/lib/ruby/gems/1.9.1/gems/couchbase-1.3.1/lib/couchbase/transcoder.rb:19:in `<top (required)>'
        from /usr/local/rbenv/versions/1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
        from /usr/local/rbenv/versions/1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
        from /usr/local/rbenv/versions/1.9.2-p320/lib/ruby/gems/1.9.1/gems/couchbase-1.3.1/lib/couchbase.rb:21:in `<top (required)>'
        from /usr/local/rbenv/versions/1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `require'
        from /usr/local/rbenv/versions/1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `rescue in require'
        from /usr/local/rbenv/versions/1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:35:in `require'
$


後日談!(笑)


Clientがruby 1.8.7もサポートしているので、そっちを試してみる・・・

# rbenv global 1.8.7-p371
# rbenv rehash
実行
# ruby -rrubygems -rcouchbase -e 'puts Couchbase::VERSION'
ruby: no such file to load -- couchbase (LoadError)
#
ファイルが読めないらしい・・・たぶんパスだろ・・・


モジュールをフルパスで書いてあげてみると・・・
#
# ruby -rrubygems -r /usr/local/rbenv/versions/1.8.7-p371/lib/ruby/gems/1.8/gems/couchbase-1.3.1/lib/couchbase -e 'puts Couchbase::VERSION'
[WARNING] MultiJson is using the default adapter (ok_json). We recommend loading a different JSON library to improve performance.
1.3.1

#

お?! 変なエラーも出てるけど・・・イッた・・・(ヘブン


MultiJsonのエラーはyajl-rubyを入れてあげて・・・
gem install yajl-ruby
rbenv rehash

今度はパスに移動してから実行すると
# cd /usr/local/rbenv/versions/1.8.7-p371/lib/ruby/gems/1.8/gems/couchbase-1.3.1/lib
#
# ruby -rrubygems -rcouchbase -e 'puts Couchbase::VERSION'
1.3.1
#
出たー!
そっかー、パスかー。てことで.bashrcにパスを直書きしてみた → けどだめだった。
1.9.2でパスを指定してみた → けどだめだった。1.9.2は後回しにする。

rbenvはどっかでパスを指定するのか? ってことでさらに続く。


後後日談!

1行をやめて、普通に書いてみたらどうなるかやってみた。

ver.rb
---
require 'rubygems'
require 'couchbase' 
puts Couchbase::VERSION
---

実行する
$ ruby ver.rb
1.3.1$

普通に使えた・・・。 1行で出せなかったのはなんだったんだ・・・。つまり、pathなどは大丈夫?で、単に1行でやるのがだめなんだ、という結論にしてみる(が、識者の方がいれば教えてくださいorz)。


Couchbase Client Library Rubyを使うときのまとめ for 自分!

・rubyのバージョンは、1.8.7-p371を使う
・バージョンを1行で表示させるテストはあきらめるw

以上!

rubyのインストール (rbenvを使って)

rubyは生まれてこの方1度も触ったことがないけれど、使う必要に迫られインストール。

で、RHEL5.5 64bitに素の1.9.3を入れたら「missing psych (for YAML output).」なんつーエラーが出て、いくつかやったけどだめでrbenvを入れたら1発で通ったので素敵だったので、記念カキコの備忘録for me.


パクらせてもらったページはこちら↓(ありがとうございます!)
http://yatmsu.hatenablog.com/entry/20120413/1334300058
http://blog.kyanny.me/entry/2012/02/03/155652

※RHEL5.5 64bitで実施。たぶんほかの5系64bitならまんまでおk。

[gitのインストール]
cd ~
mkdir tmp
cd tmp
wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el5.rf.x86_64.rpm
su -
rpm -ivh rpmforge-release-0.5.3-1.el5.rf.x86_64.rpm
yum -y install git

[rbenvのインストール]
su -
cd /usr/local
git clone git://github.com/sstephenson/rbenv.git rbenv
chgrp -R root rbenv
chmod -R g+rwxX rbenv
git clone git://github.com/sstephenson/ruby-build.git ruby-build
cd ruby-build
./install.sh

[環境変数の設定]
su -
echo 'export RBENV_ROOT="/usr/local/rbenv"' >> /etc/profile.d/rbenv.sh
echo 'export PATH="/usr/local/rbenv/bin:$PATH"' >> /etc/profile.d/rbenv.sh
echo 'eval "$(rbenv init -)"' >> /etc/profile.d/rbenv.sh

[rubyのインストール]
yum install readline.x86_64 readline-devel.x86_64 zlib.x86_64 zlib-devel.x86_64 openssl-devel.x86_64
rbenv install 1.9.3-p429
rbenv global 1.9.3-p429
rbenv rehash

[確認]
ruby -v
ruby -e 'puts ("Okku senman")'

[rubyのバージョンを変更する]
su -
rbenv install 使いたいバージョン
rbenv global 使いたいバージョン
rbenv rehash


てな感じで