ひよっこ。

I want to…

Archive for the ‘server’ Category

TracWikiExportPluginをインストールしてみた。

Posted by hikaruworld : 2009 5月 30

Tracで仕様などを管理しているとやはり問題になるのが納品の際のドキュメント。
HTMLのまま納品出来ないとなると手作業でwordなりPDFなりに変換する必要が出てくる。
さすがにそれは面倒なので、何かいいプラグインがないかなとあさっていたところ、TracWikiExportPluginという、
便利なプラグインを発見。これ幸いとインストールしてみた。

ほかにいくつかあったんだけどmiau’s blog?でも言及されているようにHTMLDoc使っているのが多くて日本語に対応していないという罠が多い。
その一方でこのTracWikiExportPuginはBeautifulSoupを利用してHTMLを解析しているっぽいので日本語もOKだった。

色々はまってしまい、無駄に疲れたので、とりあえず作業ログを残しておく。

色々環境の制約がきついが、自環境向けにHackしようにあまりに範囲が広すぎたので、
別途仮想環境上に構築した。

まず大前提として以下の環境が必要。
1. OpenOffice2.4.2(OpenOffice3.0だと引数エラーで動かない。)
2. Python2.5.X(Python2.6以降だと自環境がCentOS5.3のくせにこんなエラーになる”)

なお、OpenOfficeが必要なのはPDFの生成機構はOpenOfficeのAPIを利用(python-uno)しているため。

とりあえず、WikiExportPlugin を参考にしながら必要な物をインストールしていく。
あ、ちなみにtracのバージョンは0.11.4-ja1になります。

  1. python-unoのインストール
  2. BeautifulSoupのインストール
  3. python-imaging-library
  4. WikiExportPluginをインストール(これが目的)

1. Python-unoのインストール

Python-UnoはOpenOfficeに含まれているので、OpenOfficeをインストールする。
Openoffice.org/の左のメニューから旧版(2.4.2)でJRE付きをダウンロードしてsetupでインストール。

なお、OpenOfficeをインストールしただけではPythonからは参照できないので、
PYTHON_DIR/lib/python2.5.2/site-package/にuno.pthを作成し、/opt/openoffice.org2.4/programを設定する。

以下、動作確認。

   # python
   >>> import uno
   /opt/openoffice.org2.4/program/uno.py:37: RuntimeWarning: Python C API version mismatch for module
   pyuno: This Python has API version 1013, module pyuno has version 1012.
     import pyuno

pythonのバージョン関連で警告が出ているがとりあえず流す。OpenOfficeは内部的にpython2.3系を使っているらしいのでその辺が原因?

2. BeautifulSoupをインストール

http://www.crummy.com/software/BeautifulSoup/ からダウンロード。バージョンは3.1.0.1。
setup.pyでインストール。
話はずれるが、BeautifulSoupは大変便利ですー。

3. python-imaging-libraryのインストール

http://www.pythonware.com/products/pil/ をダウンロードしてインストール。
いつも通りsetup.pyで。

4. WikiExportPluginをインストール

http://trac-hacks.org/wiki/WikiExportPlugin をダウンロードしてインストール(svnの最新版をダウンロードした)。
いつも通り…以下省略。
あ、これはtracのプラグインなので忘れずに有効化しておく事。

で、必要なものはインストール完了。

以下、実際の起動まで。
まずは、OpenOfficeの起動。

soffice -display :0.0 "-accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager" -headless &

LISTENされているか起動確認。

netstat -anp | grep 8100
tcp        0      0 127.0.0.1:8100              0.0.0.0:*                   LISTEN      3373/soffice.bin    

とりあえず、ここを参考にpython-unoからOpenOfficeに接続できるか確認しておく。

import uno
local = uno.getComponentContext()
resolver = local.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", local)
context = resolver.resolve("uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext")

問題なく接続される事を確認。

次はTracから。
インストールが問題なく完了していれば、画面下部の【異なるフォーマットでダウンロード】の部分にテキスト以外に、

  • Export DOC
  • Exoprt PDF
  • Export ODT

が増えているはず。

今回の目的はPDFなので早速クリックしてみる…
前に、trac.iniに必要な以下の設定を追記する。

[openOffice-exporter]
user = 認証が必要な際のユーザ名
psswrd = 認証が必要な際のパスワード
host = 接続干すと。要するにsofficeのhost=の値
port = 接続ポート。要するにsofficeのport=の値
styles = OpenOfficeでの書式設定。要するに、【標準, 見出し 1, 見出し 2, 見出し 3】
enum-styles = OpenOfficeでの箇条書きの設定。要するに【箇条書き 1, 箇条書き 2, 箇条書き 3】
num-styles = OpenOfficeでの番号付けの設定。要するに【番号付け 1, 番号付け 2, 番号付け 3】

ちょっと混乱したのが、sytlesやenum-stylesやnum-stylesの設定。
これは、要するに以下の値の設定が必要らしく、全く同じ物を設定する必要がある。
sytles — 文字のスタイル。
enum-styles — 書式→段落→番号付けスタイルの番号を設定する際のスタイル。
num-styles — 書式→段落→番号付けスタイルの箇条書きを設定する際のスタイル。

また、半角スペースの適切な設定も必要。
もし設定が間違っていた場合はエラーになる。
特に見出しなどは、深さが深い場合は任意の見出しの深さを設定する必要がある。

で、以下が出力したPDFの結果。
TracGuideをPDFで出力してみた。
マクロのレンダリングがうまく出来ていないが日本語入力も問題なく出力され、必要なHTMLのみ解釈できている事を確認。

というか、ソースとか見ていたらやけに知らない単語があるなーと思ったら、
作成されたのはスペイン語圏の人だったらしい〜。

ちなみに最新版だと、WikiTemplateConfというページを設定することで出力される
任意のPDFにテンプレートを埋め込む事が出来るっぽい?のだけど、試してみたらエラーになったので、
また眠いのでまた後日。。。

Posted in program, server | Leave a Comment »

HDE Anti-Virusのアクセス制御に関して

Posted by hikaruworld : 2009 4月 8

HDE Anti-Virusを使って運用する際に、このアンチウィルスソフトの管理画面にはIPアドレス単位でアクセス制御が可能である。
で、このアクセス制御の設定を行う場合、LCサーバー設定設定画面では以下のように注意書きされている。

設定内容は、コンピューターの再起動後に有効になります。

サーバを再起動しなきゃいけないアクセス制御って何だと思ったので、
とりあえず確認してみた。

まず、デフォルトでは、hdeは

/usr/local/hde/

以下にインストールされる。
適当にソースを見ている限り、httpd+phpの構成で動いているようだ。

ソースを探るのにキーになる文字列が欲しかったので、適当にIPアドレスを振って再起動。
あらかさまに設定ファイルちっくなhde/lcserver/confというディレクトリがあったので、grepしてみる。

Allow from localhost 127.0.0.1 192.168.

発見。これか。
実体は、以下のようだ。

/usr/local/hde/lcserver/conf/lcserver.conf

中をのぞく(読みづらかったので勝手にインデント)。

<Directory /usr/local/hde/lc>
Options Includes FollowSymLinks
AllowOverride None
order deny,allow
Allow from localhost 127.0.0.1 10.131.229.206 10.0.8.
Deny from all

order allow,deny
deny from all

</Directory>

参考:http://httpd.apache.org/docs/2.0/ja/mod/mod_access.html#order

うーんApacheの設定ファイルのようにしか見えない。

わざわざサーバの再起動を行わなくてもいいんじゃね?と思いつつ、/etc/init.d以下を探索。

/etc/init.d/lcserverを発見。

ググって見ると、lcserverはApacheをカスタマイズしたものらしいとのこと。
こいつに再起動のコマンドがあれば事足りるだろと思い(Apacheベースなら当然あるよね?)、試してみる。

root# /etc/init.d/lcserver
Usage: /etc/init.d/lcserver {start|stop|restart|reload|status}

restartがあるようなので、IPアドレスを修正してlcserver(ってかapache)を再起動する。

root# /etc/init.d/lcserver restart
Shutting down lcserver: [ OK ]
Starting lcserver: [ OK ]

アクセスして確認してみる。
アクセスポリシーの設定に記述されているIPアドレスの一覧が変更されていることを確認。
OKらしい。

lcserverの再起動だけで問題ないのに、コンピュータの再起動はひどい気がする。
それとも何か理由があるのだろうか。。。

Posted in server | タグ: , | Leave a Comment »

HudsonでFindBugsプラグインの出力結果を日本語化する方法

Posted by hikaruworld : 2009 3月 18

具体的には、プロジェクト→FindBugs WarningsのDetailsの各内容。

Hudsonは非常に便利なCIツールで、多様なプラグインが存在しているが、
日本語化されていないものも多い。

基本的には、英語でも問題ないのだが、FindBugsやCheckStyleといった
静的解析ツールの出力結果が日本語で表示されていないのは、色々と使いづらい。
※別にメニューや、見出しが英語なのは気にしないが。

今のプロジェクトではFindBugsやCheckStyleのエラーは「努力目標」に過ぎないため、理解しやすさは大切。
特にFindBugsは致命的な潜在バグを検出してくれるため、
「エラーメッセージが良くわからなくて修正できませんでした」なんていわれた日には
後で、痛い目にあう羽目になる。

それで、出力結果を日本語化できないものかと思い、試行錯誤してみた。

FindBugsの最新版を落としてきて、AntでHTML出力してみると問題なく日本語されていた。
で、1.3.2とは古いなぁと思いつつfindbugs-1.3.2.jarの中を覗いてみると、案の定、日本語ロケールのmessages.xmlがない。
この感じだと、Findbugsを最新版に置き換えれば簡単に解決しそうな感じなのでやってみるとOKだった。

で、前置きが長くなってしまったが、以下が対応方法。
結論から言うと、先述の通りFindBugsのライブラリを最新に置き換えたら解決した。
Hudsonのワークスペース(hudson.warではない)は/var/hudsonに存在していることが前提。

  1. hudsonを停止(自分の環境ではTomcat上で動いているのでTomcatを停止)
  2. 最新版のFindBugsをダウンロード(この時点では1.3.7)して展開(/usr/local/findbugsへ)
  3. Findbugsプラグインのlibがあるディレクトリ(/var/hudson/plugins/findbugs/WEB-INF/)に移動
  4. 既存のlibを./lib.dstに退避(理由は後で後述)
  5. 新規にダウンロードしたfindbugs内部のlibをHudsonのFindBugsプラグイン側にコピー
  6. 確認のためDiff

    lib.dist/だけに発見: annotations-1.0.0.jar
    lib/だけに発見: annotations.jar
    lib/だけに発見: ant.jar
    lib.dist/だけに発見: asm-3.0.jar
    lib/だけに発見: asm-3.1.jar
    lib.dist/だけに発見: asm-analysis-3.0.jar
    lib/だけに発見: asm-analysis-3.1.jar
    lib.dist/だけに発見: asm-commons-3.0.jar
    lib/だけに発見: asm-commons-3.1.jar
    lib.dist/だけに発見: asm-tree-3.0.jar
    lib/だけに発見: asm-tree-3.1.jar
    lib.dist/だけに発見: asm-util-3.0.jar
    lib/だけに発見: asm-util-3.1.jar
    lib.dist/だけに発見: asm-xml-3.0.jar
    lib/だけに発見: asm-xml-3.1.jar
    lib.dist/だけに発見: bcel-1.3.2.jar
    lib/だけに発見: bcel.jar
    lib/だけに発見: buggy.icns
    lib/だけに発見: commons-lang-2.4.jar
    lib.dist/だけに発見: coreplugin-1.3.2.jar
    lib.dist/だけに発見: dom4j-1.3.jar
    lib/だけに発見: dom4j-1.6.1.jar
    lib.dist/だけに発見: findbugs-1.3.2.jar.dist
    lib/だけに発見: findbugs-ant.jar
    lib/だけに発見: findbugs.jar
    lib/だけに発見: jFormatString.jar
    lib.dist/だけに発見: java2html-5.0.jar
    lib/だけに発見: jaxen-1.1.1.jar
    lib.dist/だけに発見: jsr305-1.3.2.jar
    lib/だけに発見: jsr305.jar

  7. 既存で退避したもののうち、バージョン違い以外で存在しているjarファイルをコピー。
    • coreplugin-1.3.2.jar
    • java2html-5.0.jar
  8. Hudsonを再起動
  9. 再度ビルドを実行

libを丸ごと置き換えるとFindBugsのソースコードviewでNoClassDeffoundErrorで落ちたので、java2html-5.0.jarをコピーしてきたら解決した。

Posted in server | タグ: , , | Leave a Comment »

PostgreSQLのSHMMAXの計算式の検証

Posted by hikaruworld : 2009 1月 8

SHMMAXの計算式の検証

PostgreSQL:8.2.4(特にカスタマイズせずにソースからインストール)
OS:RHEL4

※最近マイナーバージョンの差での問題にちょこちょこあたる(;-
今回も8.1系から8.2系で設定ファイル周りの記述が変更されているので注意。

上記でインストールした環境のデフォルト値からSHMMAX(/proc/sys/kernel/shmmax)の設定に必要な値の算出の検証を行う。

この辺りが詳しい。

※あくまで、PostgreSQLが必要とする共有メモリ。実際は当然その他のサービスのメモリを考慮する必要がある。
なお、ここでの検証はSHMMAXの値の算出を行うためであり、max_connectionsやshared_buffersの値の算出を導き出すためのものではない。
それはまたの機会に。。。

ところで、実は手っ取り早くSHMMAXの値を知るためにはとりあえずpg_ctlで起動してしまえばよい。
起動に失敗した場合は必要なサイズの詳細情報をPostgreSQLが教えてくれるからだ。

計算方法

表16-1より

大雑把には、必要とされるセグメントサイズは500キロバイト+上記表に記載された変数の量と見積もることができます。
(エラー時に表示されるメッセージには、割り当てに失敗したサイズが正確に記載されています。)
SHMMAXを1メガバイトとしてPostgreSQLを稼動させることができますが、受容できる性能を確保するためには少なくとも4メガバイト必要です。10メガバイト単位の設定を推奨します。

ドキュメントに書いてあるように、各値に対してここの計算式で値の算出を行う。
参考までにリンク先の式を張っておく。

名称 おおよその乗数(1増やした場合のバイト数)
max_connections 400 + 270 * max_locks_per_transaction
max_prepared_transactions 600 + 270 * max_locks_per_transaction
shared_buffers 8300 (BLCKSZが8Kであることが前提です。)
wal_buffers 8200 (XLOG_BLCKSZが8Kであることが前提です。)
max_fsm_relations 70
max_fsm_pages 6

算出方法

事前に(基本的には表の説明にもあるように8K)BLOCK_SIZEを確認しておく。
任意DBにログイン後、以下のSQLを実行する。

SHOW block_size

block_size
————
8192

max_connections

#max_connections = 100 # (change requires restart)

#max_locks_per_transaction = 64 # min 10 # (change requires restart)

  • 400 + 270 * 64(max_locks_per_transaction) = 17680
  • 100(max_connections) * 17680 = 1768000
max_prepared_transactions

#max_prepared_transactions = 5 # can be 0 or more

#max_locks_per_transaction = 64 # min 10
# (change requires restart)

  • 600 + 270 * 64(max_locks_per_transaction) = 17880
  • 5(max_prepared_transactions) * 17880 = 89400
shared_buffers

BLCKSZが8Kであることが前提です。

つまり、8KB辺りの増加量のため、8KB単位に乗算すると解釈。
なお、PostgreSQL8.2系からshared_buffersで設定する値が、ページ数(容量をブロックサイズで割ったもの)からByte数に変更されているとのこと。

shared_buffers = 24MB

  • 24(shared_buffers) * 1024 / 8(BLCKSZ) = 3072
  • 3072 * 8300 = 25497600
  • 24 * 1024 * 8300 = 203980800(????)
wal_buffers

XLOG_BLCKSZが8Kであることが前提です。

shared_buffers同様、8KB辺りの増加量。

wal_buffers = 64kB

  • 64(wal_buffers) / 8(XLOG_BLCKSZ) * 8200 = 65600
  • 64 * 8200 = 524800
max_fsm_relations

#max_fsm_relations = 1000 # min 100, ~70 bytes each
# (change requires restart)

  • 1000(’max_fsm_relations’) * 70 = 70000
max_fsm_pages

max_fsm_pages = 153600 # min max_fsm_relations*16, 6 bytes each
# (change requires restart)

  • 153600(max_fsm_pages) * 6 = 921600
合計値SHMMAXに必要な値の計算
  • 1768000+89400+25497600+65600+70000+921600+500*1024 = 28924200Byte
  • 28924200 / 1024 / 1024 = 27MB

実行時と計算値の検証

実際にPostgreSQLを起動し、占有する共有メモリの値をipcsで確認する。

ipcs -m

—— 共有メモリセグメント ——–
キー shmid 所有者 権限 バイト nattch 状態
0×00000002 65536 root 600 655360 2
0×00000000 196609 gdm 600 393216 2 対象
0×0052e2c1 262146 postgres 600 29237248 2

  • 29237248 / 1024 /1024 = 27M

多少誤差があるとしてもおおよその数字は計算結果と同じであることが確認できる。

OSのshmmaxの値

デフォルトの値は

cat /proc/sys/kernel/shmmax

でみてもわかるように、33554432Byteつまり32MBになっている。
ためしに、この値を小さめに設定(ここでは27Mを下回る値)にして、PostgreSQLの起動に失敗することを検証する。

[root@hoge]#echo 16777216 > /proc/sys/kernel/shmmax
[postgre@hoge]$pg_ctl start

すると、こんなエラーが発生する。

[postgres@hoge ~]$ FATAL: could not create shared memory segment: Invalid argument
DETAIL: Failed system call was shmget(key=5432001, size=29237248, 03600).
HINT: This error usually means that PostgreSQL’s request for a shared memory segment exceeded your kernel’s SHMMAX parameter. You can either reduce the request size or reconfigure the kernel with larger SHMMAX. To reduce the request size (currently 29237248 bytes), reduce PostgreSQL’s shared_buffers parameter (currently 3072) and/or its max_connections parameter (currently 100).
If the request size is already small, it’s possible that it is less than your kernel’s SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.
The PostgreSQL documentation contains more information about shared memory configuration.

DETAIL にも書いてあるように、29237248Byte確保できずに起動に失敗したと表示される。

Failed system call was shmget(key=5432001, size=29237248, 03600).

ふぅ。疲れた。

Posted in OS, server | タグ: , , | 2 Comments »

LinuxにSubversionクライアントをインストール

Posted by hikaruworld : 2009 1月 6

作業ログ。

RHEL4にSubversionクライアントのみ(バージョンは1.5.4)をソースからインストールする方法。

背景としては、ソースに関しては基本的にはSubversionで管理している訳だが、
実サーバにはSubversionがインストールされていないので、ちょっとしたスクリプトの配備時でも、
svn co(あるいは svn export) した後に、ftpであげるというめんどくさい状況に辟易したため。

要するにsvnコマンドがつかればいいのだけど、
実サーバなので余計なものをインストールしたくないし、
クライアントだけインストールする方法がないかなぁと思い探してみた。


基本的には、ここを参考に作業(というかほとんど同じ)。

./configure –includedir=/usr/local \
–without-berkeley-db \
–without-apache \
–without-apxs \
–without-swig \
–with-ssl \
–disable-nls

このconfigureでうまくいかなかった点は、apr及びapr-utilでエラーになった。
subversion1.5.4/INSTALLを読んでみると、
aprとapr-utilがREQUIREDと書いてあったので、

This will place ‘apr’, ‘apr-util’, ‘neon’, and ‘zlib’
directories directly into your unpacked Subversion distribution,
where they will be automatically configured and built by
Subversion’s build process.

上記にしたがって、neonと同様にapr及びapr-utilのディレクトリ名で、subversion1.5.4配下に配備。
※zlibも必須みたいだけど既にインストール済みなので気にしない。

–includedirを/usr/localに指定してconfigureを実行すると、
aprやapr-util、neonが/usr/local配下に展開された(汗
ので、/usr/local/subversion154とディレクトリを切って実行した。

というわけで実際の実行ログは以下。

# wget http://subversion.tigris.org/downloads/subversion-1.5.4.tar.gz
# wget wget http://www.webdav.org/neon/neon-0.28.3.tar.gz
# wget http://ftp.riken.jp/net/apache/apr/apr-1.3.3.tar.gz
# wget http://ftp.riken.jp/net/apache/apr/apr-util-1.3.4.tar.gz
# tar subversion-1.5.4.tar.gz
# tar neon-0.28.3.tar.gz
# tar apr-1.3.3.tar.gz
# tar apr-util-1.3.4.tar.gz
# mv neon-0.28.3 subversion1.5.4/neon
# mv apr-1.3.3 subversion1.5.4/apr
# mv apr-util-1.3.4 subversion1.5.4/apr-util
# mkdir /usr/local/subversion1.5.4
#./configure –includedir=/usr/local/subversion1.5.4 –without-berkeley-db –without-apache –without-apxs –without-swig –with-ssl –disable-nls
# make
# make install


以下、余談であるが、
SubversionのソースファイルのREADMEやINSTALLのドキュメント読めば、
懇切丁寧に書いてあったことに気がついたのはインストールした後である。(;

反省。

2009/1/6 投稿日がおかしかったので修正

Posted in OS, server | タグ: , , | Leave a Comment »

RHEL4にGraphvizの導入する

Posted by hikaruworld : 2008 12月 9

Graphviz をRHEL4にインストールする際の導入に関しての備忘録。

インストール

Trac0.11のチケットのワークフローをカスタマイズする必要があった。
それに関連して、後々確認しやすいようにgraphvizのインストールも行う。

  1. ここからRPMをダウンロードし、rpmコマンドでインストール(コマンドは省略)。

動作確認

Graphviz チュートリアル を参考に、簡単なサンプルを動かしてみる。

  1. sample.dotというファイルを作成して以下を書く。

    digraph sample {
    alpha -> beta;
    alpha -> gamma;
    beta -> delta;
    }

  2. コマンドラインで以下を実行する(RPMインストールなのでパスは通っていることが前提)。

    dot -Tgif sample1.dot -o sample1.gif

トラブルシューティング

Format: “XXX” not recognized.

フォーマットエラーで以下のようなエラーが発生する。

Format: “gif” not recognized. Use one of: canon cmap cmapx cmapx_np dia dot eps fig hpgl imap imap_np ismap mif mp pcl pic plain plain-ext ps ps2 svg svgz tk vml vmlz vtx xdot

ここ と同じようにgraphviz-gdをインストールする事で対応可能。

user gviz does not exist – using root

ユーザが存在しないエラー?

RPMインストール中に発生した。以下はログ。

Preparing… ########################################### [100%]
1:graphviz-gd 警告: user gviz does not exist – using root
警告: group gviz does not exist – using root
警告: user gviz does not exist – using root
警告: group gviz does not exist – using root
########################################### [100%]

警告のようだし、using rootといっているので無視する。原因は未調査。

Error: Could not find/open font

フォント参照エラーのようで、以下のようなエラーが出る。
一応画像は出力されており参照も可能だが、日本語が文字化けするみたいだ。

Error: Could not find/open font

ここ を参考に修正してみる。
フォントが参照できてい状態なので、一番強引な方法ではあるが、fontnameにフォントファイルのパスを指定した。
fontpathの設定ではなんだかうまく行かなかった。

digraph sample {
node [fontname=”/usr/share/fonts/ja/TrueType/kochi-gothic-subst.ttf”];
alpha -> beta;
alpha -> gamma;
beta -> あいうえお;
}

OK.

TracWorkFlowsとGraphviz

TracのTracWorkflowはGraphvizを用いて書き出すスクリプトが準備されている。

詳細はかおるんダイアリーが詳しい。
ここでは簡単な手順のみ。

  1. workflow_parser.pyを探す。
    • ソースからTracをインストールした場合は、%TRAC_SRC%/contrib/workflow/workflow_paser.py にあるはず
  2. workflow_pyser.pyを実行時に出力したいプロジェクトのtrac.iniを指定してGraphvizのworkflow.dotに書き出す。

    python workflow_parser.py trac.ini > workflow.dot

  3. 後は、いつものごとく以下のような感じで書き出す。

    dot -Tpng workflow.dot > workflow.png

Posted in server | タグ: , , | Leave a Comment »