veryberry_cafeの日記 このページをアンテナに追加 RSSフィード

2007-02-01 それPla.でGo

CPANからPlaggerいれた。

ubuntuにPlaggerいれてみた。

インストールついでにRootになる方法がわかったので。これからはSudoじゃなくてRootになる。というかubuntuはユーザーのPATHにsuが入っていないだけだった。

usr>sudo su root //rootでGo
root>cpan
..
cpan>o conf urllist push htp://any.cpan.ring.server //kddiを選択した
cpan>o conf commit
cpan>quit
root>cpan install Plagger < /deb/null
....

Plaggerのインストールの長いこと。あまりにの長さに途中で飽きました。

CPANの設定に失敗したら

>perl -V //Perlの@INCを確認
>rm /usr/local/share/perl/5.8.8/CPAN/Config.pm

で設定けしてGo

aptitudeも必要

ubuntuでCPAN使ったこと無いのでCPANインストール関係のエラーがいっぱい。。

とりあえずこれはaptで入れなきゃダメっぽい。

root>aptitude install libxml2 libxml2-dev
root>aptitude install expat libexpat-dev

sudoしなくて良いのは楽

usr>sudo su root //rootに

もはやubuntu desktop使ってる意味が無くなってきた。

CPANモジュール多すぎ

Plagger使うためにインストールしたCPANモジュール多すぎて何入れたか、メモ取ってられない。覚えてられない。なんかXML関係が大事だった記憶が。。。

>aptitude install plagger

で依存モジュール解決&簡単インストール来る日を夢見る。

Gmail Notifyが動かない。

assets_path: /home/cafe/plagger/assets

とかいたらPlaggerは

/home/cafe/plagger/assets/common/

にあるファイルを探しに行くらしい。オレ「わからないよそんなことw」必死にソース読みました。

なので

root>ls ./.cpan/build/xxxx/plagger/xxxx/gmail_xxx.tt //必要なファイルを発見
>cp ./.cpan/build/xxxx/plagger/xxxx/gmail_xxx.tt ./plagger/assets

xxxってなってるところはうろ覚え。。CPANのビルドキャッシュにファイルがあるからそれをコピーしてきた。


Python/PHPでPlagger

CustomFeed::Scriptを使う

Publish側にも Publish::Scriptが欲しい

あった。Publish::Pipe

Filter側に Filter::Scriptが無いのか?

調べてみる

あった。Filter::Pipe

PlaggerがスクリプトをKick

CustomFeed::Script/Publish::Pipe/Filter::Pipeがあるから言語非依存になって嬉しいな。PerlしらないPHPユーザー*1もYAML書けばCPANの恩恵に与れるし、自分の得意な言語でカスタム出来るし、またマイナー言語のモジュールも共有できるかも。PearにPlaggerカテゴリ出来るかもね。

というか、PlaggerのどこからでもScriptキック出来るならPlaggerのクローンとかいらなくね?

PlaggerはWEB OS?

PlaggerがUNIX PipeのWEB版だとしたら

ブックマークはシンボリックリンクだよね

そのうちSVNのソースを直接毎回EVALする無茶なスクリプトとか当たり前になるんだろうな。

と思った

CustomFeedよりはSubscriptionを使う方がイイっぽい?

http://subtech.g.hatena.ne.jp/miyagawa/20061006/1160122942

Domain 失効情報を RSS/iCal に

を見ていると、

plugins:
  - module: Subscription::Config
    config:
      feed:
        - script:/home/miyagawa/tmp/domain-expire.pl
  - module: CustomFeed::Script
  - module: Publish::Feed
 .....

なんですね。ということはSubscription::Configで Script:で書けばおk?

多段Plaggerもできたりする?

YAMLの切り替えが面倒なので、PlaggerがPlaggerを起動してFeedを渡して、そのPlaggerがまた別のPlaggerを。。。Pipe使えば出来そうなんだけど、終了検知どうしよう。

*1:Python/rubyユーザーでPerl書けませんってのはいないだろう?

2007-01-09 [ubuntu][php] aptのphp5はconfigureが。。。

pecl/mailparseをmbstring忘れた環境に入れる

ubuntuでapt-getしたphp5にpecl/mailparseを入れようとしたらエラーが出た

$>sudo pear install pecl/mailparse
phpizeとかconfigureのあとにmakeでエラー

エラーがでたmbfl_no_encoding_qprint など mbfl関連のエラー。mbstringがない?そんなわけはない。phpinfo()をよく見てると、./confifureでenable mbstring がない?でも動く。組み込まれてるからか。

というか、自分でビルドしていないのでmbfl関係のパッケージがなくてあたりまえ?

手っ取り早い解決は、PHPビルドしなおし。

でもmakeはconfigure設定をaptのパッケージとそろえるのが面倒。


pecl/mailparseを自分でビルドすることに。

ディレクトリ構造はFedraのパッケージを参照。

php-pecl-mailparse-debuginfo-2.1.1-1.fc3 RPM for x86_64

ふむふむ。RPMはこうやってたのか

Files
/usr/lib/debug/usr/lib64/php4/mailparse.so.debug
/usr/src/debug/mailparse-2.1.1
/usr/src/debug/mailparse-2.1.1/ext
/usr/src/debug/mailparse-2.1.1/ext/mbstring
/usr/src/debug/mailparse-2.1.1/ext/mbstring/libmbfl
/usr/src/debug/mailparse-2.1.1/ext/mbstring/libmbfl/mbfl
/usr/src/debug/mailparse-2.1.1/ext/mbstring/libmbfl/mbfl/mbfl_convert.h
/usr/src/debug/mailparse-2.1.1/ext/mbstring/libmbfl/mbfl/mbfl_encoding.h
/usr/src/debug/mailparse-2.1.1/mailparse.c
/usr/src/debug/mailparse-2.1.1/php_mailparse.h
/usr/src/debug/mailparse-2.1.1/php_mailparse_mime.c
/usr/src/debug/mailparse-2.1.1/php_mailparse_mime.h
/usr/src/debug/mailparse-2.1.1/php_mailparse_rfc822.h

mbfl関係のソースは、php本体のソースにほしいものがあることを確認

$> ls php-5.2.0/ext/mbstring/ 
CREDITS              config.m4   mb_gpc.h      oniguruma      php_unicode.h
README               config.w32  mbstring.c    php_mbregex.c  tests
README.libmbfl       libmbfl     mbstring.dsp  php_mbregex.h  unicode_data.h
README_PHP3-i18n-ja  mb_gpc.c    mbstring.h    php_unicode.c

これらのmbstringのソースを使えばmakeできそうだ。php本体のソースからmailparseのソースに突っ込む。参照してもいいけど突っ込むほうが楽かも。

$>ls php-5.2.0/ext/mbstring/
$>mkdir ./mailparse-2.1.1/ext/
$>cp ./php-5.2.0/ext/mbstring ./mailparse-2.1.1/ext/ -R
$>cd mailparse-2.1.1
$>phphize
$>./configure
$>make
$>sudo make install

これでビルドは通った。

ちゃんと動くかな?wkwk

2006-12-09 TRAC

UbuntuにPythonアプリTRACを入れてみた

TRACのバックエンドはSQLiteにしてみた。

手順は、apt-getを用いたもの。

  • Ubuntuで複数プロジェクトをTRACで管理する場合

http://trac.edgewall.org/wiki/TracUbuntuMultipleProjects

  • Ubuntuで単一プロジェクトをTRACするばあい

http://trac.edgewall.org/wiki/TracOnUbuntu

  • TRACをmod_pythonで動かす場合

http://trac.edgewall.org/wiki/TracUbuntuMultipleProjects

などを参考に。

どうしても動かない。

Apache2の構成は、virtual host mpm=prefork mod_rewrite libphp5 dav_fs dav_svn userdir


でも

trac unsupported file format

と怒られた。

激しく悩む。

ある、ログに行き着く

PHP5をモジュールから消したら動作するよ!!

http://lists.edgewall.com/archive/trac/2006-April/007686.html

マジかよ。

やってみた。

#>sudo a2dismod php5
#>sudo /etc/init.d/apache2 reload

動いた。。。。。

php5と同居できないのか?


どうもunsupported file formatということは、SQLite関連のエラーっぽい?ならPostgreSQLにすれば動くかも?これはweb.pyに移行しろという神のお告げだと思うことにする。PHPにGood-byするかなぁ

まぁたぶん、php5が内部で使ってるSQLiteモジュールとpythonが使ってるSQLiteがあって、Pythonが使いたいSQLiteモジュールはPHP5に上書きされててつかえねぇぇって事なんだろうな。

php.iniからsqliteのモジュールを外してみた

;extension=pdo_sqlite.so
;extension=sqlite.so

で、Apache2をreloadする。

TRAC動いた。でも何だかなぁ・・・・PDO_SQLITE使えないと困るなぁ

追記

PGSQLを使うことで回避する。

SQLITEはいろいろな場面で組み込まれているんで、こういうことが起こるのかもしれない。WindowsでいうところDLL Hellってやつだろうな。

2006-12-08 bashの基本

bashの基本をおさらいしてみる。

Linux使うのは3年ぶりなので、すっかり錆付いてる。


@ITbash使いこなし


tabで補完

当たり前だけど。[tab]でコマンド、引数、パスを補完できる。

$>apt[tab]
apt-cache             apt-ftparchive        apt-sortpkgs
apt-cdrom             apt-get               aptitude
apt-config            apt-key               
apt-extracttemplates  apt-mark              

! [digit] でHistoryを実行

$>history 
$>! 102

カーソルキー

cmd.exeでHOMEキーやENDキーをの代用に。

行頭に移動[Ctrl]+[A]
行末に移動[Ctrl]+[E]
1文字左に移動[Ctrl]+[B]
1文字右に移動[Ctrl]+[F]
1単語左に移動[ESC]+[B]
1単語右に移動[ESC]+[F]
1文字削除[Ctrl]+[D]、[Ctrl]+[H]

bashがぁぁぁっ

動作が変になったときは、設定ファイルをロードしてみる

$>source /etc/profile
$>source ~/.bash_profile
$>source ~/.bash_login
$>source ~/.profile
$>source ~./.bashrc

などを試してみる。

pgpoolは期待より遅かった。

そのままでは、pgpoolは期待したほど早くなかった。

pgpool-ii 経由でpgbenchを測定したよ。

動作モードは、レプリケーション、キャッシュあり。ベンチはSELECTを測定。更新系クエリはレプリケーションだと絶対遅いだろうと予想してる。

#>./pgbench -p 9999 bench -S
starting vacuum...end.
transaction type: SELECT only
scaling factor: 1
number of clients: 1
number of transactions per client: 10
number of transactions actually processed: 10/10
tps = 16.971186 (including connections establishing)
tps = 17.087299 (excluding connections establishing)

postmasterにpgpool(プロキシ,レプリケーション)無しで接続

#>./pgbench -p 5433 bench -S
starting vacuum...end.
transaction type: SELECT only
scaling factor: 1
number of clients: 1
number of transactions per client: 10
number of transactions actually processed: 10/10
tps = 59.243461 (including connections establishing)
tps = 62.716371 (excluding connections establishing)
#>./pgbench -p 5434 bench -S
starting vacuum...end.
transaction type: SELECT only
scaling factor: 1
number of clients: 1
number of transactions per client: 10
number of transactions actually processed: 10/10
tps = 211.815043 (including connections establishing)
tps = 262.460303 (excluding connections establishing)

ubuntuにpgpool-iiを苦労して入れたけど、サーバースペックが足りないようで、思ったほどベンチが伸びない。というか、明らかにスコアが悪い。postgresql.confを見直す必要がありそうだ。そもそも、古いノートPCなのでDBサーバーを動かすには向いていないのかもね。コネクションプーリングは都市伝説なのかもしれない。

測定環境 Celeron 500MHz, Men 386MB

NFSも良いけどさ、SambaのNAS資源を活用したいよね。

SAMBAで動いてるNASがいっぱいあるし、低価格でRAID1/0を搭載してる箱もある。これは使うべきだろう。NASの方が便利だし。

どうやるの?検索すると、smbmountってのが見つかった。でもsmbmountは裏方で、使い方はmountするだけらしい。実際やってみた。

%>sudo mkidir /mnt/nas
%>sudo mount -t smbfs -o username=veryberry,password=[hoge] //samba-fs/common /mnt/nas/

はいできた。日本語も見えるよ!!。ShiftーJISをUTF-8に変換してくれてる。国際化対応ってすばらしい。

使ったモノ。

Sambaサーバー:何処にでもあるNAS箱

クライアント:ssh(poderosa)

sshホスト:ubuntu 6.02-ja

smbd:3.x

usage

mount -t smbfs[Samba形式を指定]
 -o username=[sambaユーザー名],password=[sambaパスワード] 
//[Windows(samba)ホスト名]/[ディレクトリ] /[マウント先]

NFSもいいけど、長いものに巻かれてみる。共有は全部Sambaで良いじゃん。

何かあったとき、Windowsからみれるし。日本語通からubuntuで良いじゃん、uft-8でいいじゃん

Debianのapache2は使いやすい

使いやすいけれど、クセが強い。

モジュールを組み込むときは、専用のコマンドを使うと良い。

#>a2enmod [使いたいモジュール名]
#>a2dismod [ロードをやめるモジュール名]

利用可能なモジュール一覧は、

#>a2enmod [Enter]

で表示された。

同じように、VirtualHostやLocationの管理も出来る

#>a2ensite [利用したいサイト設定]
#>a2dissite [利用しないサイト設定]

頻繁に設定を変更するテストサーバーには便利だ。でも、状態バックアップがとりづいらいのは、便利さとのトレードオフかな。

2006-12-06 pgpool-iiする

pgpool-ii の設定。

ubuntuにpgpool-iiを入れる。postgresql-8.1はaptitude でインストールしている。pgpool-iiはapt出来ないので、自分でビルドした。

まず、pgpool の管理用データベースを作る。これがないと話にならないので真っ先に作る。

管理用データベースpgpoolにSCHEMAとTABLEを作る

#>createdb pgpool
#>psql -f /usr/local/pgpool/share/sysytem_db.sql pgpool

dblinkが必要なので aptitudeから contribを入れた

/usr/lib/postgresql/8.1/lib/dblink.so 
/usr/share/postgresql/8.1/contrib/dblink.sql 

があることを確認してデータベースpgpoolに対して実行

#>psql -p 5432 -f dblink.sql pgpool
CREATE FUNCTION
CREATE FUNCTION
...
CREATE TYPE
CREATE FUNCTION
...

なんかいっぱいFUNCTIONが出来た。


/usr/local/pgpool/etc/pgpool.conf を書き換える。 Debianの設定にする。(ubuntuはDebian)

# Unix domain socket path.  (The Debian package defaults to
# /var/run/postgresql.)
socket_dir = '/var/run/postgresql'

# Unix domain socket path for pgpool communication manager.
# (Debian package default to /var/run/postgresql)
pcp_socket_dir = '/var/run/postgresql'

# Unix domain socket path for the backend. Debian package default to /var/run/postgresql!
backend_socket_dir = '/var/run/postgresql'

pgpool が使うシステムデータベースを設定。system_db_user='postgres'を確認しつつ、レプリケーションデータベースを指定する。管理用データベースはすでに作成済み

# system DB info
system_db_hostname = 'localhost'
system_db_port = 5432
system_db_dbname = 'pgpool'
system_db_schema = 'pgpool_catalog'
system_db_user = 'postgres'
system_db_password = ''

# backend_hostname, backend_port, backend_weight
# here are examples

pgpoolの認証ユーザーを決めてやる

/usr/local/pgpool/etc/pcp.conf

# USERID:MD5PASSWD
pgpool:ba777e4c2f15c11ea8ac3be7e0440aa0
postgres:e8a48653851e28c69d0506508fb27fc5

pgpool-II を起動する

#>sudo /usr/local/bin/pgpool -n &

ココまでで、接続をテストする。(コネクションプーリング機能のみ)

#>psql -p 9999 -U postgres

次に、レプリケーションするので、replication_modeを書き換える

# Replication mode
replication_mode = true

レプリケーションするpostmasterを設定する。

#DB1
backend_hostname0 = '' #Unixドメインソケットで通信する
backend_port0 = 5433   #ポートは5433
backend_weight0 = 1    #値の大きい方が優先度が高い
#DB2
backend_hostname1 = ''
backend_port1 = 5433
backend_weight1 = 1

レプリケーションするpostmasterを立ち上げる。同一マシン内で複数Postmasterを起動する

pgpoolが動いているシステムpostgresとは別に、レプリケーションのテスト用にPostmasterを二つ立ち上げる

#>/usr/lib/postgresql/8.1/bin/postmaster -p 5433 -D /home/pgpool/db/psql-01
#>/usr/lib/postgresql/8.1/bin/postmaster -p 5433 -D /home/pgpool/db/psql-02

それぞれのPostmasterのユーザーと、データベースを設定する。

#>createuser **
#>createdb

pgpoolを再起動する

#>sudo pgpool stop
#>sudo pgpool -n &

作成済みデータベースへ接続してみる

#> psql -p 9999 test 

レプリケーションを体験するためのデータベースを作る

#>createdb repli -p 9999

レプリケーションを体験する

#>psql -p 9999 
&>CREATE TABLE test1( i, integer );
&>INSERT INTO test1  VALUES( 1 );
&>\q

レプリケーション出来てるか確認する

#>psql -p 5433
&>SELECT * FROM test1;

おおおお出来た。

フラッシュメモリでディスクアレイ

1GBのフラッシュメモリでRAID0を構成してスワップに使うとどれくらい早くなるんだろう。2GBのUSBフラッシュメモリが5000円程度で入手できる。Ubuntuのハイバネート機能を使うときにUSBフラッシュメモリに保存すると起動が瞬時になるんじゃないか?試してみたいモノだ。

RAMディスクやMemCacheも良いけど、DBのストレージをUSBフラッシュメモリに作るのも良いんじゃないか。これも試してみたいモノだ。

USBメモリでソフトウェアRAID組めたらいいのにな。ハードRAIDは絶対無理だろう(w