2011年5月31日火曜日

openvpnの設定ファイル

OpenVPNで、たまにアカウントを追加すると、クライアントに置くファイルがどれだかわからなくなる。っていうんでこの表が便利かも。

Filename Needed By Purpose Secret
ca.crt server + all clients Root CA certificate NO
ca.key key signing machine only Root CA key YES
dh{n}.pem server only Diffie Hellman parameters NO
server.crt server only Server Certificate NO
server.key server only Server Key YES
client1.crt client1 only Client1 Certificate NO
client1.key client1 only Client1 Key YES
client2.crt client2 only Client2 Certificate NO
client2.key client2 only Client2 Key YES

アカウント追加したときは、クライアントに.keyファイルと.crtファイル、ca.crt, ta.keyファイルを置く必要がある。
それと、設定ファイルとしてconfig.ovpnが必要。

apacheとsubversionの連携

■やること
・subversionのインストール
・リポジトリ作成
・mod_dav_svn.soのインストール
・httpd.confの設定

# yum install subversion
# svnadmin create /var/svn/repos
# chown -R apache:apache /var/svn/repos

これでsubversion側の準備は完了。
続いてapache側

# yum install mod_dav_svn

で、httpd.conf に以下の設定を追加

LoadModule dav_svn_module       modules/mod_dav_svn.so
<Location /svn>
 DAV svn
 SVNPath /var/svn/repos
</Location>

これでapacheの再起動をして、http://hostname/svn
とかでリポジトリが参照できればおしまい。

2011年5月30日月曜日

memcachedのmake testでエラー

前回とは違う環境下でmemcachedをrpmbuildしてたんだけど、以下のエラーが。
プロジェクトサイトにもIssueとして報告があがってて、 どうやらシングルコアのcpuだとbinary.tのテストに失敗するっぽい。
マルチコア環境だとエラーは出ないので、原因はCPUのコア数みたい・・・。勘弁してよって感じ。
#   Failed test 'Expected read length'
#   in t/binary.t at line 539.
#          got: '10'
#     expected: '24'
Use of uninitialized value in multiplication (*) at t/binary.t line 545.
Use of uninitialized value in addition (+) at t/binary.t line 545.
Use of uninitialized value in numeric eq (==) at t/binary.t line 547.
t/binary.............NOK 243
#   Failed test 'Expected read length'
#   in t/binary.t at line 539.
#          got: '14'
#     expected: '24'
t/binary.............NOK 244
#   Failed test 'Got proper response magic'
#   in t/binary.t at line 543.
#          got: '0'
#     expected: '129'
Use of uninitialized value in multiplication (*) at t/binary.t line 545.
Use of uninitialized value in addition (+) at t/binary.t line 545.
t/binary.............NOK 251
#   Failed test 'Flags is set properly'
#   in t/binary.t at line 63.
#          got: undef
#     expected: '19'
Argument "somevalue" isn't numeric in numeric eq (==) at t/binary.t line 64.
Argument "" isn't numeric in numeric eq (==) at t/binary.t line 64.
t/binary.............NOK 255
#   Failed test 'Expected opaque'
#   in t/binary.t at line 560.
#          got: '38518301'
#     expected: '3628040576'
t/binary.............NOK 258
#   Failed test 'Didn't get a result from get'
#   in t/binary.t at line 76.
#          got: '3'
#     expected: '0'
Can't call method "not_found" without a package or object reference at t/binary.t line 77.
# Looks like you planned 3361 tests but only ran 258.
# Looks like you failed 6 tests of 258 run.
# Looks like your test died just after 258.
t/binary.............dubious
        Test returned status 255 (wstat 65280, 0xff00)
DIED. FAILED tests 240, 243-244, 251, 255, 258-3361
        Failed 3109/3361 tests, 7.50% okay

linuxのstatic routeの設定

linuxのスタティックルートの設定は以下のファイルにする。

/etc/sysconfig/network-script/route-ethX(Xはデバイスの数字)

構文は以下の通り

172.24.0.0/24 via 172.24.0.254
"linux static route"とかで調べると、/etc/sysconfig/static-routes に設定とかって書いてあるサイトもあるけど、古い情報なので気を付けて。

ちなみに、OSがどっちに対応してるかわからない場合は、
/etc/sysconfig/network-script/ifup-routes
を見るといいことがあるかも。

2011年5月25日水曜日

1台のサーバにapacheを複数動かすメモ

$ ./configure --prefix=/usr/local/apacheSub/
$ make
$ make install
とかすると、とりあえず準備は整う。
んで、起動は
$ /usr/local/apacheSub/bin/httpd -f /usr/local/apacheSub/conf/httpd.conf
ちなみに、既に80番で他のapacheが起動してる場合は、confのListenPortを8000とかに変えないと動かない。

phpでPHP Warning: PHP Startup: Unable to load dynamic library

webサーバを引き継いだんだけど、phpがどうも調子悪い。変なエラーでるし。

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/mbstring.so' - /usr/lib64/php/modules/mbstring.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/mysql.so' - /usr/lib64/php/modules/mysql.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/mysqli.so' - /usr/lib64/php/modules/mysqli.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/pdo.so' - /usr/lib64/php/modules/pdo.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/pdo_mysql.so' - /usr/lib64/php/modules/pdo_mysql.so: cannot open shared object file: No such file or directory in Unknown on line 0
 みたいな。なんだかなあ、と思っていたら、/etc/php.d の中にextensionの設定がどっさり入っていた。全部削ってかいけつー。

2011年5月24日火曜日

memcachedのrpmbuildでcan't run as root without the -u switch

memcachedを検証する必要があったので、1.4.5を拾ってきて試しにrpmbuildしてみたんだけど、以下のエラーが出てテストが通らない。。。

t/issue_67...........can't run as root without the -u switch
Failed to start server. at t/issue_67.t line 59
        main::run_server('-p 11212') called at t/issue_67.t line 65
        main::when('specifying tcp port', '-p 11212', 11212, 11212) called at t/issue_67.t line 74
# Looks like your test died before it could output anything.
 仕方ないのでマニュアルっぽいものを読み直すと、Do not run this as rootの文字が。

rootじゃrpmbuildできないんですね。あと実行もできないみたい。

というわけで、memcachedユーザーを作って以下の手順でrpmbuild。めでたし。


echo "%_topdir /home/memcached/rpmbuild" >> ~/.rpmmacros
mkdir -p /home/memcached/rpmbuild/{SPECS,BUILD,SRPMS,RPMS,SOURCES}
wget http://memcached.org/latest
rpmbuild -ta memcached-1.4.5.tar.gz

2011年5月18日水曜日

terastationのレプリケーションでI33ReplicateFailure

terastationの検証。

フェイルオーバー機能は残念ながら使いものになる感じじゃなかったので、レプリケーション機能を使って冗長性を確保することに。

でもレプリケーションがどうもうまく機能しない。

May 18 10:10:51 TS-QVHL702 errormon[2265]: Information situation detected! Replication  I33ReplicateFailure
May 18 10:10:58 TS-QVHL702 linkstation: Replication error occured.
こんな感じ。

結局全然わからなくて、サポートに問い合わせたところ、フェイルオーバー機能を構成した場合は、たとえ構成解除してもレプリケーションがエラーになるとのこと。
システムの初期化をしてやっと使えるようになりました。

2011年5月12日木曜日

tomcatのクラスタリングのはなし

tomcat のクラスタリングについての自分メモ。

・ロードバランス
・フェイルオーバー
・ファーミング

の機能がある。ファーミングってよく知らないけど、農場ってこと?
牧畜かな?まあそれはよくて、1個デプロイすると他のサーバーにもデプロイしてくれる機能らしい。

で、そのうちのロードバランスを実現する方法として3つくらいあって、

・JKコネクタ
・mod_proxyとかmod_rewrite
・balancerアプリケーション

JKコネクタっていうのは、webサーバとtomcat間、つまりロードバランサとAPサーバ間をHTTPじゃなくて、AJPというプロトコルで通信させるものらしい。
Apacheだとmod_jkとか使う。

mod_proxyとかはまあ普通にApacheでロードバランスするよ、という感じのもの。

で、balancerはtomcat単体でロードバランシングしてくれるものっぽい。よくわからんけど。

まあロードバランシングはtomcatじゃなくてLBにまかせる話なのでおいておいて、フェイルオーバー機能のメモをのこすよ。

フェイルオーバー機能には、セッションレプリケーションが不可欠というか、イコールなので、そのあたりの設定をすればよいみたい。で、レプリケーション機能なんだけど


・PersistenceManager
・JDBCManager
・catalina-cluster.jar
 
の3つがあるみたい。
 
Persistence Managerは、セッションの保存先を共有ファイルにするしくみ。
JDBC Managerは同じくDBに保存するしくみ。
で、catalina-cluster.jarっていうのは、インメモリレプリケーション。tomcat同士が勝手に通信してレプリケーションしてくれるしくみ。
 
次回はこれについてメモ。
---
 参考:tomcatによるクラスタリングの実現

2011年5月11日水曜日

linux版antivirusのlivepudateをがんばる

LinuxでAntivirusを動かしたいという話で、SymantecのAntivirusをいれて動かしたんだけど、Liveupdateがproxy越しでできない・・・

Exception in thread "main" java.lang.NullPointerException
   at jluej.b(DashoA5380)
   at jluce.a(DashoA5380)
   at jluce.a(DashoA5380)
   at jluf7.c(DashoA5380)
   at jluf7.b(DashoA5380)
   at com.symantec.liveupdate.LiveUpdate.computeAvailableUpdates(DashoA5380)
   at com.symantec.liveupdate.LiveUpdate.run(DashoA5380)
   at com.symantec.liveupdate.LiveUpdate.main(DashoA5380)
   at LiveUpdate.main(DashoA5380)
Command failed: Problem with LiveUpdate.
Check that java directory is in PATH
Unable to perform update
いくらがんばってもこんな感じのエラー。
結局、liveupdate.confがあんまりよくなかったみたいで、マニュアルからコピペしたらすんなり動いた。rpmで入れたんだからそのくらい作ってよ。。。

サンプル
# LiveUpdate.conf
AllowConfigurationOverride=true
hosts/0/url=http://liveupdate.symantecliveupdate.com:80
hosts/1/url=http://liveupdate.symantec.com:80
hosts/2/login:ENC=cbea173305fc49908a4663bb377ab28c
hosts/2/mode=passive
hosts/2/password:ENC=ac7cb5f8f847be7efe8ca1084fde41c4
hosts/2/url=ftp://update.symantec.com/opt/content/onramp
jar=/opt/Symantec/LiveUpdate/jlu.jar
logfile=/opt/Symantec/LiveUpdate/liveupdt.log
maxPackageContentSize=734003200
maxPackageSize=734003200
maxTriFileSize=10485760
maxZipFileSize=614400
maximumLogFileSize=512
proxy=192.168.0.1:8080
urls=1
workdir=/tmp

2011年5月6日金曜日

proftpdのrpmbuildでエラー

環境
Cent5.6 64bit 
 
proftpd1.3.3eのrpmbuildがいくらやってもうまくいかない。 
エラーメッセージは以下の通り。
RPM build errors:
    File not found by glob:
/var/tmp/proftpd-1.3.3e-root/usr/lib64/pkgconfig/*.pc
    Installed (but unpackaged) file(s) found:
   /usr/lib/pkgconfig/proftpd.pc
わけわかんねー、と思ってたんだけど、なんか調べたらspecファイルの バグっぽかったので、proftpdのbugzillaで聞いてみた

specファイルのpkgconfigの指定が悪かったみたい。優しい外人が解決してくれました。

2011年5月2日月曜日

tcpdumpの使い方

tcpdumpでパケットキャプチャする時のメモ

だいたいのコマンド
# tcpdump -Xi eth0 host HONTNAME
 15:01:27.673120 IP myhost.60792 > ldaphost.ldap: S 740785676:740785676(0) win 5840 <mss 1460,sackOK,timestamp 1721577951 0,nop,wscale 7>
        0x0000:  4500 003c 4fd3 4000 4006 8c92 ac18 8211  E..<O.@.@.......
        0x0010:  ac18 8414 ed78 0185 2c27 7e0c 0000 0000  .....x..,'~.....
        0x0020:  a002 16d0 a12b 0000 0204 05b4 0402 080a  .....+..........
        0x0030:  669d 31df 0000 0000 0103 0307            f.1.........

16進数は4ビットなので、最初のフィールド4500は
・バージョン番号
・ヘッダ長
・サービスタイプ
になる。
次の003cはパケット長、次の4fd3はIPパケットの識別子。フラグメントすると、同じ識別子が並ぶことになる。次の4000がフラグメント用のフィールド。

次の4006はTTLとプロトコル番号。TTLは64秒、プロトコルはTCP(6)になっている。次の8c92はヘッダのチェックサム。

次の32ビットは送信元IPアドレス。
ac18 8211なので、172.24.130.17を指す。
これで0x0000のフィールドはおしまい。

0x0010の最初は宛先IPアドレス。ac18 8414なので172.24.132.20。ヘッダ長に5が指定されていれば、32ビットx5のヘッダが出てきたので、ここでヘッダはおしまい。実データになる。

実データといっても、TCPなので、次はTCPヘッダがでてくる。
ed78は送信元のポート番号で60792。0185は宛先のポートで、389(LDAP)になる。

次の32bitはTCPのシーケンス番号。2c27 7e0cがシーケンス番号。その次はACK番号。今回はSYNパケットなので、0000 0000になる。これに対するACK応答の時に、シーケンス番号+1が返ってくる。

次の16bitはデータオフセット(TCPデータの開始位置)と、TCPのフラグになっている。a002なので、
10x4byte(32bit)、SYNパケット。

これがSYN/ACKになると、a012とかになる。