nDiki : FreeBSD

2000年11月15日 (水)

www.naney.orgNamazu 設置

本日 www.naney.org に、Namazu によるサイト内検索を追加。 以前公開していたサーバでは検索を提供していたのだが、今ホスティングサービスに移ってからは設置していなかった。

実は13日に一度、ports でいれようとしたのだが(サーバは FreeBSD)、一般ユーザー権限で自分のホームにいれる方法がよくわからず。

結局、依存しているライブラリ等から順番にインストールすることにした。 インストール自体はインストール先の変更以外に特に問題なし。 一応メモ。 まずは nkf

 $mkdir NKF
 $sh nkf192.shar
 $make
 $mkdir $HOME/local
 $mkdir $HOME/local/bin
 $cp nkf $HOME/local/bin
 $cd NKF
 $perl Makefile.PL PREFIX=$HOME/local INSTALLSITELIB=$HOME/local/lib/site_perl INSTALLMAN3DIR=$HOME/local/man/man3
 $make
 $make install

次に kakasi。

 $tar zxvf kakasi-2.3.2.tar.gz
 $cd kakasi-2.3.2
 $./configure --prefix=$HOME/local
 $make
 $make install

次は Text::Kakasi。

 $tar zxvf Text-Kakasi-1.04.tar.gz
 $cd Text-Kakasi-1.04
 $perl Makefile.PL PREFIX=$HOME/local INSTALLSITELIB=$HOME/local/lib/site_perl INSTALLMAN3DIR=$HOME/local/man/man3 LIBS=-L$HOME/local/lib INC=-I$HOME/local/include
 $make
 $make install

そして Namazu。 最初に パッケージに同梱されている File::MMagic をインストールする。

 $tar zxvf namazu-2.0.5.tar.gz
 $cd namazu-2.0.5
 $cd File-MMagic
 $perl Makefile.PL PREFIX=$HOME/local INSTALLSITELIB=$HOME/local/lib/site_perl INSTALLMAN3DIR=$HOME/local/man/man3
 $make
 $make install
 $cd ..
 $./configure --prefix=$HOME/local --with-pmdir=$HOME/local/lib/site_perl
 $make
 $make install

これで、$HOME/local 以下に Namazu がインストールできた。

後は cron で定期的にインデックスを更新するように設定。 namazu.cgi を設置し .namazurc を書き、テンプレートを編集してできあがり。

一番時間がかかったのは、設定とかの FTP 転送待ちだったりして。

スポンサード リンク
[ 11月15日全て ]

2001年1月10日 (水)

OpenSSH の sshd、一般ユーザーでうまく動かず

とあるサーバー(FreeBSD)にセキュアな接続がしたいのだが、sshd が動いていない。 一般ユーザーで sshd がうまく動くのか実験。

インストールしたのは openssl-0.9.6 + openssh-2.3.0p1(zlib はインストールされていたようだ)。

 $tar zxvf openssl-0.9.6.tar.gz
 $cd openssl-0.9.6
 $./config --prefix=$HOME/local
 $make
 $make test
 $make install

 $tar zxvf openssh-2.3.0p1.tar.gz
 $cd openssh-2.3.0p1
 $./configure --prefix=$HOME/local --with-ssl-dir=$HOME/local
 $make
 $make install

インストールは成功。 さっそく sshd を起動してみる。

 $HOME/local/sbin/ssh -p 9999

起動も問題なし。外部からアクセスしてみると、接続できず。RSA認証パスワード認証も駄目。 デバッグ出力を見てみると PAM を使う権限がないようだ。 ちなみに --without-pam をつけて configure してコンパイルしてみたところ、crypt まわりのシンボルがリンクできなくてビルドできず。

ちなみに手元の Debian GNU/Linux unstable で、openssh をビルドしたものは、上記実験はなんなく成功(接続は localhost から、openssl は Debian パッケージを使用、openssh は tar ball からビルド)。 また、Plamo 2.0 の方に実験してもらったら tty のオープンの権限がなくてはねられるらしい。ssh -p 9999 ls 等の command の実行は OK らしい。

ということで、環境によって権限関係でいろいろ結果が変わってくるようだ。 FreeBSD でなんとかうまく動かないかな。

[ 1月10日全て ]

2001年5月8日 (火)

Zebedee で念願の secure connection 達成

とあるサーバへの接続(pop, telnet, ftp)がセキュアではないのでずっと不安なのだが、ルート権限がないので sshd も動かせない。 以前 sshd を一般ユーザで動かそうとしたのだが、その時は失敗。

今回 Zebedee を知ったので試してみることにした。Zebedee はフリーのセキュアなトンネルプログラム。 設定無しで動く/Windows上でも動く/通信の圧縮あり/特許問題なし/GPLあたりが特長。

Debian GNU/Linux ではまだパッケージ化されていないようなのでソースからビルド。 インストールに必要なライブラリも一応一緒に作ることにする(Zebedee の Makefile が Zebedeeアーカイブをを展開先の親ディレクトリに各ライブララリパッケージを展開してある事を前提としているので、その方が楽)。

Zebedee のサイトからソースパッケージと必要なライブラリ(zebedee-2.2.1.tar.gz, blowfish-0.9.5a.tar.gz, zlib-1.1.3.tar.gz, bzip2-1.0.1.tar.gz を作業ディレクトリにとってくる。

ビルドする環境は Debian GNU/Linux、インストール先を /usr/localzebedee-2.2.1 とする。

 $tar zxvf blowfish-0.9.5a.tar.gz
 $cd blowfish-0.9.5a
 $make optimize
 $cd ..

 $tar zxvf zlib-1.1.3.tar.gz
 $cd zlib-1.1.3
 $./configure
 $make
 $cd ..

 $tar zxvf bzip2-1.0.1.tar.gz
 $cd bzip2-1.0.1
 $make
 $cd ..

 $tar zxvf zebedee-2.2.1.tar.gz
 $cd zebedee-2.2.1
 $make OS=linux
 $make install OS=linux ROOTDIR=/usr/local/zebedee-2.2.1
 $cd doc_jp
 $make
 $make install ROOTDIR=/usr/local/zebedee-2.2.1

でインストール終了。ローカルでテストしてみる。

zebedee -s でサーバを起動。 telnet サーバをたちあげていないので smtp にトンネリングしてみる。 zebedee localhost:smtp でクライアントを起動。

 zebedee(4621/1024):  Listening on local port 3401

と表示されたので telnet localhost 3401 で接続してみる。 成功。

ということで次は接続先のサーバ(FreeBSD)にインストール。 zebedee の make で OS=freebsd にするのと、ROOTDIRを $HOME/local/zebedee-2.2.1 にする以外は同じ。

で今度はローカルからFreeBSDサーバへ接続してみる。 FreeBSD 側で zebedee -s。 失敗。

 zebedee(50819/5152): ERROR: can't resolve host or address 'localhost'

あちゃ。localhost でひけないか。 zebedee -s 実際のサーバ名 で起動する。

クライアント側から telnet で接続してみる。 zebedee 実際のサーバ名:telnet でクライアントを起動。

 zebedee(8807/1024):  Listening on local port 2324

と出たので telnet <i>実際のサーバ名</i> 2324 で telnet 接続。 成功。

やほ。成功。 問題は Zebedee サーバが落ちたときに telnet で入って起動しなおさなければならない事。 ま、しょうがないかなぁ。 cron まわして落ちていたら再起動するようにするかな……

次は pop の設定。 fetchmail で zebedee を利用するようにする。 fetchmail-with-zebedee.conf に

 defaults
     no mimedecode
     pass8bits
 
 poll popサーバ名
      protocol pop3
      via localhost
      user ユーザ名
      password パスワード
      fetchall

と書いておき、

 $zebedee -e "fetchmail -f fetchmail-with-zebedee.conf --port %d" popサーバ名:pop3

を実行。%d がトンネルのローカルポートに置換されて fetchmail が実行されるのでこれでトンネルを開いて pop する事ができる。 もちろん、ローカルポート番号を指定して Zebedee クライアントを起動しておいて、fetchmail の設定ファイルにそのポート番号を指定しておいても可能。

とりあえずこれである程度安心。 接続が横取りされているかチェックするには Identity Checking をしなければならない(し Zebedee はそれが可能だ)が、面倒になってくるのでそこまではいいにする。

[ 5月8日全て ]

2003年4月23日 (水)

[ WiKicker ] SunOS 5.6 にインストール

結局flock 問題は、File::Flock モジュールを使う事にする。 $^O eq 'solaris' な時は File::Flock::lock を使うようにコードを修正。

それから、RCS まわりでも問題。

 Warning: missing newline at end of file /tmp/...

といった感じの警告が出て期待した結果が得られない。 調べてみると rcsdiff の呼び出しで警告。 実際には diff が吐いている。 Sun の diffGNU diff ではファイル末処理が違うようだ。 ということで、こちらは diffutils-2.8.1 と rcs-5.7 を home の下に入れて解決。

ふう、これで WiKicker

で動く事を確認。都合5つ(SunOS は一つのホストで2個動かしている)。 今の所の注意点は

といったところか。

[ 4月23日全て ]

2003年11月9日 (日)

[ WiKicker ] SpeedyCGI 対応するも……

WiKicker の高速化のために SpeedyCGI 対応作業。

  • Singleton パターンの除去
  • リクエスト処理後にデータベースunlock処理を必ず実施するようにする
  • DATAハンドルの読み込みを最初にキャッシュ

等を行う。 手元では動くようになった。

で今度は www.naney.org 上でテストしてみたのだが、無念 SpeedyCGI 自体がうまく動かない (FreeBSD 4.4-RELEASE + Perl 5.005_03)。 CGI で呼び出すと

 failed to open log file
 fopen: Permission denied

エラー。make test でもこけているテストがあったし(t/sh_bang、t/timeout)このサーバじゃ動かんのかな?

と思ったら動いた

CGI スクリプトの先頭に

 #!/home/.../bin/speedy -w -- -M30 -t300 -r30 -p/home/.../bin/speedy_backend

のように記述していたのだが path部分が長かったため sh-bang の限界を越えてしまっていたようだ。-p オプションで指定している speedy_backend のパスの方はデフォルトが Makefile.PL 実行時に適切に設定されているはずだから、実際には省略可。

ということで、

 #!/home/.../bin/speedy -w -- -M30 -t300 -r30

としてみたら動いた。 よっしゃ。 これでリクエスト毎のプログラムのローディングの必要がなくなるので、レスポンスの遅さが改善されるはず。 パラメータは

  • -M30 (MaxBackends: これ以上だとサーバによろしくない?)
  • -t300 (Timeout: デフォルトの 3600=1時間だと長いかな。不要なプロセスは早めに止めておきたい)
  • -r30 (MaxRuns: まだバグメモリリーク等があるかもしれないので30回呼ばれたらバックエンドを re-exec するように)

としておく。様子をみて微調整。 これからは、WiKicker を更新したら Wiki CGI スクリプトを touch する事を忘れないようにしなくては(SpeedyCGI にバックエンドを再起動させなおさせるため)。

[ 11月9日全て ]

2003年11月18日 (火)

Unison 2.9.1

FreeBSD につっこんでおく。 まずは ocaml を入れて

 wget http://caml.inria.fr/distrib/ocaml-3.07/ocaml-3.07pl2.tar.gz
 tar zxvf ocaml-3.07pl2.tar.gz
 cd ocaml-3.07
 ./configure -prefix /tmp/naney
 make world
 make opt
 make install
 cd ..

Unison をインストール

 tar zxvf src.tar.gz
 cd unison-2.9.1
 PATH=$PATH:/tmp/naney/bin
 gmake UISTYLE=text
 unison -version
 cp -p unison $HOME/local/bin
[ 11月18日全て ]

2004年1月12日 (月)

[ Perl ] Memcached を使ってみる

WiKicker の高速化に Memcached が使えないかいろいろいじってみる。 評価は今のところ「微妙」。 Memcached はメモリキャッシュを提供するデーモンプログラムで、キーと値の配列を記憶しておいてくれる。 Slashdot でも使っているらしい。

ホスティングサービスのサーバ(FreeBSD 4.4-RELEASE)に入れてみる。

Memcached 1.1.10

依存している libevent と一緒にビルドしてインストール。

 cd /tmp
 wget http://www.monkey.org/~provos/libevent-0.7c.tar.gz
 tar zxvf libevent-0.7c.tar.gz
 cd libevent-0.7c
 ./configure
 make
 cd ..
 wget http://www.danga.com/memcached/dist/memcached-1.1.10.tar.gz
 tar zxvf memcached-1.1.10.tar.gz
 cd memcached-1.1.10
 CFLAGS='-L../libevent-0.7c -I../libevent-0.7c' ./configure --prefix=$HOME/local/memcached-1.1.10
 make
 make install

'-l' オプションがうまく動かない。

 bind(): Can't assign requested address
 failed to listen
 /PRE

指定しなくても動くのでとりあえず、よしとする。

ちなみに、EVENT_SHOW_METHOD=1 の結果は以下の通り。

 $ EVENT_SHOW_METHOD=1 ./memcached
 libevent using: kqueue

Cache::Memcached 1.0.11

Perl 用の API モジュールを入れておく。 make test でこける。

 Your vendor has not defined Socket macro MSG_NOSIGNAL

use Socket qw(MSG_NOSIGNAL PF_INET SOCK_STREAM); のところ。 Solaris/*BSD だと駄目らしい。 CVS版だと解決されいるようなので、こちらを。

Cache::Memcached CVS

 cvs -d :pserver:anonymous@danga.com:/home/cvspub checkout wcmtools/memcached/api/perl

でとってくる。 こちらは Perl 5.005_03 という古いバージョンでいくつか問題。

 our $SOCK_TIMEOUT = 2.6;

のところの our は Perl 5.005_03 には無いので、use vars に置き換え。 use bytes も 5.005_03 に無いのでコメントアウト。

IO::Handle::blocking() も無い。

 sub my_blocking {
   my ($sock, $bool) = @_;

   my $old_flags = fcntl($sock, F_GETFL, 0)
       or die "Can't get flags for the socket: $!\n";

   if ($bool) {
       my $flags = fcntl($sock, F_SETFL, $old_flags | O_NONBLOCK)
           or die "Can't set flags for the socket: $!\n";
   }
   else {
       my $new_flag = $old_flags & ~O_NONBLOCK;
       my $flags = fcntl($sock, F_SETFL, $new_flag)
           or die "Can't set flags for the socket: $!\n";
   }
   return $old_flags & O_NONBLOCK;
 }

...でいいのかな? ささっと書いたんで一部バグっているかもしれないが、とりあえず代替しておく。

ちなみに Cache::Memecached の古い版、MemCachedClient-1.0.7 も試してみたけれどこちらも IO::Socket::INET が必要だったり面倒(なので、1.0.11 のパッチ当ての方をがんばった)。

スピード

うーん。思ったほど速くないな。 いや手元のLinuxだとかなり速いんだけれど、FreeBSD だとそうでもない。 Client側の問題が大きいようだ。 下手するとLinux BOX からADSL経由でキャッシュを読み込む方が、FreeBSD のローカルホストから読むより速かったりする。

どうも Socket の接続/切断まわりでもたついている感じである。 (無駄なはずなのだが)毎回 disconnect_all してしまった方が、Benchmark の値が良かったりするし。 接続 -> キャッシュ取得 -> 切断 で 0.6秒というのはちょっと遅すぎる。 もうちょっといじってみれば実用的な速度になるのだろうか?

[ 1月12日全て ]

2004年1月18日 (日)

[ WiKicker ] IPC共有メモリを用いた直近のアクセスログ管理

昨日から本格的に検討していたアクセスログ管理であるが、今回は IPC::ShareLite モジュールを使って、IPC共有メモリに置くことにした。

  • 共有メモリなのでファイルに書くより圧倒的に速い。
  • (ipc key を変更した時など)削除し忘れてメモリに残るおそれがあるので注意。
  • IPC::ShareLitePerl 5.005_03 でも動く。
  • FreeBSDを使っているサーバで共有メモリが使えた(共有メモリを使うPostgreSQL が使えるようになっている事からも心配なし)。1024 * 512 bytes 取っても問題なし。
  • Storable を使ってシリアライズ。
  • この共有メモリを扱うモジュールファイル名を__FILE__で取得し、その更新ファイルをマジックナンバーとして、共有メモリに一緒に書いておく。読んだ時に一致しなければ破棄するようにする(今後しばらく、ちょくちょく形式を変更すると思うので)。

ちゃちゃっと実装して、やっつけであるが直近のログを見れるようにした(RecentLog )。 順次表示する情報の追加や、表示数の調整を行う予定。 それから、各ページでのロギング処理が高負荷時に重荷にならないか要チェック。

[ 1月18日全て ]

2004年2月8日 (日)

Berkeley DB 4.2.52 + DB_File 1.808 をホームにインストール

[ Perl ]

DiKicker の二次データの保存先を何にしようか思案中。 MLDBM::Sync が候補なのだが、MLDBM::Sync::SDBM_Fileだとデータが大きくなった時に速度が出ないようだ。

このサーバ(FreeBSD)のPerl(5.005_03)は、DB_FileGDBM_Fileも有効になかったので今までDBMパッケージの使用は避けてきたのだが、さすがに今回は使えないと辛いかも。

ということで Berkeley DB も含めて DB_File をホームにインストール。

db-4.2.52

 tar zxvf db-4.2.52.tar.gz
 cd db-4.2.52/build_unix
 ../dist/configure --prefix=$HOME/local/db-4.2.52
 make
 make install
 rm -rf $HOME/local/db-4.2.52/docs

インストール自体は特に依存するものも無く簡単。 ただし、このサーバでは丁度 busy だった事もあってビルドに2時間!もかかってしまった。 本来は暇そうな時にやるべきなのだろうけど、今日中にうまくいくか検証しておきたかったので、待った。

DB_File-1.808

 tar zxvf DB_File-1.808.tar.gz
 cd DB_File-1.808
 export DB_FILE_LIB=$HOME/local/db-4.2.52/lib
 export DB_FILE_INCLUDE=$HOME/local/db-4.2.52/include
 perl Makefile.PL INSTALLDIRS=site \
                  LIB=$HOME/local/lib/perl \
                  INSTALLMAN1DIR=/tmp/man/man1 \
                  INSTALLMAN3DIR=/tmp/man/man3
 make OTHERLDFLAGS="-Wl,-rpath -Wl,$HOME/local/db-4.2.52/lib"
 make test
 make install

libdb を実行時に検索させるのに LD_LIBRARY_PATH環境変数とか指定したくなかったので、-rpath を指定してしまった。 Makefile中の OTHERLDFLAGS 変数がリンク時に空だったので、ここで設定。

しかし libdb-4.2 でかいな。 Perl からの呼び出し一発目は結構時間がかかる。

[ 2月8日全て ]

2004年2月16日 (月)

[ Perl ] DB_File - DB_BTREE のロック

ということで、DB_File::Lock が本命か。

Search::InvertedIndex では、key/value の value に next key と prev key を持たせていて(正確にはindex番号)、hash の中に自前でリンクリストを作ってしまっている。 これって十分なスピードが出ているのだろうか?

もしそうなら DB_BTREE をやめて、MLDBM::SyncDB_HASH で使うという手もあるのだが。

[ 2月16日全て ]

About Me

Naney Naney

Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。

About nDiki

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。

#nNote タグがついている記事は他の記事に比べて、より断片的・未整理・不完全なちょっとしたノートです。まだ結論に至っていない考えなども含まれます。頻繁/大幅に更新したり削除したりすることがあります。

※本サイトの内容は個人的見解であり所属組織とは関係ありません。

Other Notes

ナレッジベースアプリケーション Obsidian で書いているノートの一部を notes.naney.org で 公開しています。

月別インデックス
Process Time: 0.052621s / load averages: 0.70, 0.54, 0.40
nDiki by WATANABE Yoshimasa (Naney)
Powered by DiKicker