麦酒堂
RSS
エントリ一覧
カテゴリ一覧
月別一覧
スープカレー[10 entries]
AH-K3001V[5 entries]
Beer[955 entries]
Books[11 entries]
Camera[17 entries]
Cygwin[10 entries]
iPhone[2 entries]
Java[9 entries]
JavaScript[6 entries]
Linux[67 entries]
mac[12 entries]
Movabletype[15 entries]
.NET[2 entries]
Photos[24 entries]
PHP[8 entries]
Ruby[7 entries]
Underground[11 entries]
WX310SA[4 entries]
早起きブログ[11 entries]
2010年08月[11 entries]
2010年07月[13 entries]
2010年06月[12 entries]
2010年05月[17 entries]
2010年04月[13 entries]
2010年03月[23 entries]
2010年02月[18 entries]
2010年01月[17 entries]
2009年12月[22 entries]
2009年11月[13 entries]
2009年10月[6 entries]
2009年09月[11 entries]
2009年08月[33 entries]
2009年07月[19 entries]
2009年06月[16 entries]
2009年05月[17 entries]
2009年04月[15 entries]
2009年03月[16 entries]
2009年02月[35 entries]
2009年01月[11 entries]
2008年12月[20 entries]
2008年11月[18 entries]
2008年10月[18 entries]
2008年09月[16 entries]
2008年08月[12 entries]
2008年07月[11 entries]
2008年06月[18 entries]
2008年05月[15 entries]
2008年04月[4 entries]
2008年03月[13 entries]
2008年02月[13 entries]
2008年01月[10 entries]
2007年12月[11 entries]
2007年11月[21 entries]
2007年10月[11 entries]
2007年09月[16 entries]
2007年08月[11 entries]
2007年07月[14 entries]
2007年06月[24 entries]
2007年05月[20 entries]
2007年04月[15 entries]
2007年03月[29 entries]
2007年02月[24 entries]
2007年01月[21 entries]
2006年12月[14 entries]
2006年11月[14 entries]
2006年10月[26 entries]
2006年09月[28 entries]
2006年08月[16 entries]
2006年07月[37 entries]
2006年06月[30 entries]
2006年05月[27 entries]
2006年04月[25 entries]
2006年03月[32 entries]
2006年02月[22 entries]
2006年01月[31 entries]
2005年12月[19 entries]
2005年11月[25 entries]
2005年10月[37 entries]
2005年09月[14 entries]
2005年08月[30 entries]
2005年07月[23 entries]
2005年06月[16 entries]
2005年05月[33 entries]
2005年04月[14 entries]
2005年03月[12 entries]
2005年02月[26 entries]
2005年01月[16 entries]
2004年12月[28 entries]
2004年11月[10 entries]
2004年10月[19 entries]
2004年09月[13 entries]
2004年08月[17 entries]
2004年07月[19 entries]
2004年06月[10 entries]
2004年05月[16 entries]
2004年04月[17 entries]
2004年03月[32 entries]
2004年02月[23 entries]
2004年01月[35 entries]
2003年12月[29 entries]
2003年11月[25 entries]
2003年10月[15 entries]
麦酒堂 TOP > >
  • 001586
    CentOS 5.3 に Apache CouchDB をインストール
    miz 2009-09-10 22:11
    このエントリーを含むはてなブックマーク はてなブックマーク - CentOS 5.3 に Apache CouchDB をインストール

    明日 09/11 は Apache CouchDB の勉強会に参加してきます。

    • RelaxCafe@CouchDB break.1 : ATND

    話を聞きながら実際に触れる環境があったほうが良かろうと、自宅サーバーに最新の Apache CouchDB をセットアップし直しました。 最初は Windows XP が動いている NetBook にインストールしようとしたのですが、いろいろとハードルがあって断念。 勉強会の会場はルノワールなので、Wi-Fi が使えて自宅サーバーにアクセスできるからまあ良いかと。

    • Apache CouchDB: The CouchDB Project

    Apache CouchDB は Erlang で書かれている RESTful なデータベースシステムで、アクセスに使用するプロトコルは HTTP です。 key-value を JSON の形投げ込み、Map-Reduce で取り出すことができます。 Map-Reduce の記述は JavaScript です。 データベースといっても ACID なトランザクションモデルではなく、いわゆる BASE で Eventually Consistent なイマドキ風です 元々は伝統的なほうのデータベースのエンジニアだった身としては、眉毛にツバをつけたくならなくもないんですが、どれも魅力な技術要素なのでつい手を出してしまいました。 特に RESTful なあたりはぼくの好みです。

    インストールの手順はこちらが詳しいです。

    • Installing on RHEL5 - Couchdb Wiki
    必要なパッケージの準備

    必要なパッケージのいくつかは EPEL (EExtra Packages for Enterprise Linux) のリポジトリーから取得できるので、まずは EPEL を使えるようにセットアップします。

    • EPEL - FedoraProject
    $ wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
    $ sudo rpm -Uvh epel-release-5-3.noarch.rpm
    

    これで /etc/yum.repos.d 以下に epel.repo と epel-testing.repo の二つのファイルが作成されます。 ぼくの環境は CentOS 純正以外のリポジトリは /etc/yum.repos.d/extra に分けているので、二つの *.repo ファイルを extra ディレクトリに移動しました。 これで、以下のように必要なパッケージをインストールできます。

    $ sudo yum install unixODBC unixODBC-devel
    $ sudo yum install -c extra.conf js js-devel erlang

    "js" というのは SpiderMonkey という Firefox が使用している JavaScript エンジンの Standalone 版です。

    icu のインストール

    EPEL には icu も用意されているのですが、一部コマンドが不足していたので別途ソースからインストールしました。

    • ICU 4.2 Release
    $ wget http://download.icu-project.org/files/icu4c/4.2.1/icu4c-4_2_1-src.tgz
    $ tar zxf icu4c-4_2_1-src.tgz
    $ cd icu
    $ ./configure && make
    $ sudo make install
    
    Apache CouchDB のインストール

    さて、いよいよ Apache CouchDB 本体のインストールです。 前回は Erlang などもソースから入れたりしたので結構手間取ったのですが、今回は yum で入れられたのであっさりです。 2009-09-10 時点で最新の 0.9.1 をインストールします。

    • Apache CouchDB: Downloads
    $ wget http://ftp.kddilabs.jp/infosystems/apache/couchdb/0.9.1/apache-couchdb-0.9.1.tar.gz
    $ tar zxf apache-couchdb-0.9.1.tar.gz
    $ cd apache-couchdb-0.9.1
    $ ./configure && make
    $ sudo make install
    
    インストール後の設定

    デフォルトでインストールすると /usr/local 以下に設定ファイルなどが配置されます。 今はよいですが、いずれ絶対に忘れてしまうので、Linux の標準的な位置から参照できるようにしておきます。

    $ sudo ln -s /usr/local/etc/couchdb /etc/couchdb
    $ sudo ln -s /usr/local/etc/rc.d/couchdb /etc/rc.d/init.d/couchdb
    

    続いて Apache CouchDB 起動用のユーザーを追加します。

    $ sudo /usr/sbin/adduser -r \
    > --home /usr/local/var/lib/couchdb \
    > -M --shell /bin/bash \
    > --comment "CouchDB Administrator" couchdb
    起動と動作確認

    さきほど symbolic link を張っておきながら何なんですが、/etc/rc.d/init.d/couchdb はうまく機能してくれません。 今のところ定常的にサービスを提供する必要はないので、デーモンではなくターミナルから起動してお茶を濁します。

    $ sudo couchdb

    これでエラーが出ずに起動すれば成功です。 こんな感じにしておけば静かに動いてくれます。

    $ sudo couchdb > /dev/null 2>&1 &

    Apache CouchdDB へは HTTP でアクセスします。 curl を使って動作を確認して見ます。

    $ curl http://127.0.0.1:5984/
    {"couchdb":"Welcome","version":"0.9.1"}
    

    "Welcom" の文字と Apache CouchDB のバージョンが返ってきます。 終了するときは、不本意ですがこれで。

    $ fg
    ^C
    その後

    以上の手順でひとまず Apache CouchDB を動かすことはできるようになりました。 これからここにデータを入れたり、Map-Reduce で取り出したりする必要があります。 そのあたりはこれを読むと良いでしょう。

    • CouchDB: The Definitive Guide

    紹介した本人もまだ読み切ってはいないのですが、O'Reilly から出ている書籍の Web 版です。 これが無償とは、なんとも太っ腹。 ありがたく活用させていただきましょう。

    [ permalink ] [ 0 comment(s) ] [ 0 trackback(s) ]
  • 001470
    Squirrelmail でファイル添付に失敗
    miz 2009-03-08 06:57
    このエントリーを含むはてなブックマーク はてなブックマーク - Squirrelmail でファイル添付に失敗

    自宅では Web mail に Squirrelmail を利用しています。 ここ最近、ファイルを添付できなくなったので、調査してみました。

    添付ファイルは一時的に /var/spool/squirrelmail/attach に保存されます。 このディレクトリをチェックしてみたところ、こんな状態でした。

    $ ls -l /var/spool/squirrelmail
    drwx------  2 user00 user00 4096 Jan 24 07:11 attach 

    所有者と所有グループが Apache の実効ユーザーと異なっています。 恐らくこれが原因。

    $ sudo chmod apache:apache /var/spool/squirrelmail

    といった具合で、解消しました。

    [ permalink ] [ 0 comment(s) ] [ 0 trackback(s) ]
  • 001328
    HDD の Write Cache を有効化
    miz 2008-07-20 00:14
    このエントリーを含むはてなブックマーク はてなブックマーク - HDD の Write Cache を有効化

    諸事情で HP ML115 を 13,750 円で購入し、2GB のノー・ブランド DIMM DDR2 SDRAM 二枚を 7,760 円で購入して突っ込み、CentOS5.2 をインストールし、MySQL で大きめな統計処理をぐるぐると回しておりました。 が、あまりにも遅い。 同じ処理を RAM 512MB の Dell SC430 でも実行していたのだけれど、その数倍の時間をかけても完了しません。 おかしい・・・。

    vmstat をみても、block in / block out がさして多いわけでもなく、CPU usage が 100% 近辺をさまよっています。 ディスクを使わず、メモリ上で CPU がブン回っている理想的な状態です。 が、しばらく見ていると、たまに cpu wait が跳ね上がります。 確かに、データベースを使っていて disk I/O を 0 にするのは厳しいので、これは仕方ない。 が、しかし、よくよく見ると I/O wait が 100% 近くになったまましばらくまたされます。 SC430 はもう少し頻繁に Disk I/O が発生していますが、ML115 ほど I/O wait が跳ね上がったままの状態が続かないぞ・・・。 確かに CPU 性能には差がありますが(AMD Athlon 64 3500+ / Intel Pentium D 2.8GHz)、それは I/O wait 時間に関係がありません。 となると、ディスク性能があやしくなってきます。

    まずは dbench を実行してみました。

    • dbench

    以下の手順でコンパイルし、

    $ wget http://samba.org/ftp/tridge/dbench/dbench-4.0.tar.gz
    $ tar zxf dbench-4.0.tar.gz
    $ cd dbench-4.0
    $ ./autogen.sh
    $ ./configure
    $ make

    実行。

    ML115
    $ ./dbench -c client.txt 1
    ...
       1     30795     8.61 MB/sec  warmup  21 sec  latency 201.968 ms
       1     31612     8.50 MB/sec  warmup  22 sec  latency 500.014 ms
       1     32777     8.41 MB/sec  warmup  23 sec  latency 810.937 ms
    ...
    
    SC430
    $ ./dbench -c client.txt 1
    ...
       1    257768    53.93 MB/sec  warmup  26 sec  latency 21.852 ms
       1    272487    54.93 MB/sec  warmup  27 sec  latency 21.601 ms
       1    287121    55.80 MB/sec  warmup  28 sec  latency 21.750 ms
    ...

    桁違いです・・・。 スループットもレイテンシーも文字通り桁が違います。 参った・・・。

    続いて hdparm を走らせてみます。

    • Manpage of HDPARM
    ML115
    $ sudo hdparm -t /dev/sda
    
    /dev/sda:
     Timing buffered disk reads:  222 MB in  3.00 seconds =  73.93 MB/sec
    
    SC430
    $ sudo hdparm -t /dev/sda
    
    /dev/sda:
     Timing buffered disk reads:  216 MB in  3.02 seconds =  71.61 MB/sec
    

    あれ? 殆ど同じ数値です。 何度か取り直しても殆ど同じ。 あれれ・・・うーむ・・・

    ここではたと気付いたのですが、hdparm は "disk reads" だけを測定しているんですね。 一方の dbench はもちろん read / write 双方。 これは怪しい。 そこで、ディスクの情報を確認してみると、

    ML115
    $ sudo hdparm -i /dev/sda
    
    /dev/sda:
    
     Model=FB080C4080                              , FwRev=    HPF0, SerialNo=6RW2A54G
     Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }
     RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4
     BuffType=unknown, BuffSize=8192kB, MaxMultSect=16, MultSect=?16?
     CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=156301488
     IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
     PIO modes:  pio0 pio1 pio2 pio3 pio4
     DMA modes:  mdma0 mdma1 mdma2
     UDMA modes: udma0 udma1 udma2
     AdvancedPM=no WriteCache=disabled
     Drive conforms to: unknown:  ATA/ATAPI-1 ATA/ATAPI-2 ATA/ATAPI-3
    ATA/ATAPI-4 ATA/ATAPI-5 ATA/ATAPI-6 ATA/ATAPI-7
    
     * signifies the current active mode
    
    
    SC430
    $ sudo hdparm -i /dev/sda
    
    /dev/sda:
    
     Model=ST3320620AS                           , FwRev=3.AAD   , SerialNo=            3QF0KHCA
     Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }
     RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4
     BuffType=unknown, BuffSize=16384kB, MaxMultSect=16, MultSect=?8?
     CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=268435455
     IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}
     PIO modes:  pio0 pio1 pio2 pio3 pio4
     DMA modes:  mdma0 mdma1 mdma2
     UDMA modes: udma0 udma1 udma2
     AdvancedPM=no WriteCache=enabled
     Drive conforms to: Unspecified:  ATA/ATAPI-1 ATA/ATAPI-2 ATA/ATAPI-3
    ATA/ATAPI-4 ATA/ATAPI-5 ATA/ATAPI-6 ATA/ATAPI-7
    
     * signifies the current active mode
    

    なんと ML115 は Write Cache が disabled です! こいつか・・・。 この設定を変えるには以下のようにします。

    $ sudo hdparm -W1 /dev/sda
    

    これで WriteCache enabled になります。 dbench の結果も改善されました。

    ML115
    $ ./dbench -c client.txt 1
    ...
       1    290707    63.28 MB/sec  warmup  25 sec  latency 48.369 ms
       1    302699    63.30 MB/sec  warmup  26 sec  latency 48.974 ms
       1    314756    63.30 MB/sec  warmup  27 sec  latency 44.975 ms
    ...
    

    めでたい!


    と、さらっと書いていますが、ここまで 12h 近くが経過してしまいました。 ふぅ、大変だった。 さて、計算のやり直しだ。

    [ permalink ] [ 0 comment(s) ] [ 0 trackback(s) ]
  • 001322
    CentOS4.6 から 5.2 へのアップグレード
    miz 2008-06-29 23:40
    このエントリーを含むはてなブックマーク はてなブックマーク - CentOS4.6 から 5.2 へのアップグレード

    先週 2008/06/24 に CentOS 5.2 がリリースされました。

    • [CentOS-announce] Release for CentOS-5.2 i386 and x86_64
    • Manuals/ReleaseNotes/CentOS5.2 - CentOS Wiki

    ぼくの自宅サーバーは CentOS 4.6 が稼動しており、そろそろバージョンを上げたいなと思っていたところなので、せっかくだからと、最新版に手を出してしまいました。 これが間違いの元だった・・・。 なにやらいろいろと苦労したのでメモを残して起きます。

    CentOS 5.2

    CentOS 5.2 はリリースされてからまだ日も浅く、それほど情報はありませんが、4.x から 5.1 にアップグレードした記録を見る限りは yum upgrade では上げられそうにありません。 ここは素直に DVD の ISO イメージを手に入れ、インストーラーでアップグレードすることにします。 いや、それでもあまりオススメされていない手順ですけどね。

    ここでまず最初の問題に遭遇。 自宅サーバーの光学ドライブは CD-ROM でした・・・。 これは自分の問題であって CentOS の問題ではないので仕方ない。 筐体をあけて、余っていた DVD を読み書きできるコンボ・ドライブを装着して事なきを得ました。 アップグレード・インストールの手順自体は至って簡単。 パッケージをインストールするのに非常に時間がかかりましたが、これはリリース・ノートにも書かれているようなメモリー容量の問題のような気がしています。 まぁ、待てば終わるので気長に。

    アップグレードが終わったら、

    $ wget  http://ftp2.riken.jp/Linux/centos/5.2/os/i386/RPM-GPG-KEY-CentOS-5
    $ sudo  rpm --import RPM-GPG-KEY-CentOS-5
    $ sudo yum update

    としてパッケージを最新の状態にしておきましょう。

    Apache

    アップグレード直後の起動時に、サービスの起動がいくつか FAILED になっているのが見えました。 まぁ、バージョンを大幅に上げたからねぇ。 予想される範囲内。

    そのフェールしているものの一つが Apache でした。 CentOS4.6 では Apache2.0 だったのが、CentOS5.2 では Apache2.2 になっています。 これに伴い、モジュールの構成などが大幅に変わっています。 特に認証周りが顕著。

    • Overview of new features in Apache 2.2 - Apache HTTP Server

    LoadModule ディレクティブなどを新しい設定ファイル(/etc/httpd/conf/httpd.conf.rpmnew として保存されている)を参考にして書き直します。 そして /etc/rc.d/init.d/httpd start として Apache を起動します。

    dovecot

    IMAP サーバーとして導入している dovecot は 0.99 から 1.0 に上がっています。 メジャー・バージョンが変わっているだけあって、設定ファイルにいろいろと変更が発生していました。

    プロトコルごとの LISTEN の設定は次のようにブレースでまとめるようになっていました。

    protocols = imap imaps
    
    protocol imap {
      listen = *:143
      ssl_listen = *:993
    }

    続いては SSL の設定です。

    ssl_cert_file = /etc/ssl/service.crt
    ssl_key_file = /etc/ssl/common.nokey

    最後に認証の設定。 ここもブレースでまとめるように変更されていました。 認証は dovecot 用のユーザー・ファイルを独自にメンテナンスしていたので、それを指定します。

    login_dir = /var/run/dovecot/login
    
      passdb passwd-file {
        args = /etc/dovecot.passwd
      }
    
      userdb passwd-file {
        args = /etc/dovecot.passwd
      }

    最後に /etc/rc.d/init.d/dovecot restart として dovecot を再起動します。

    SquirrelMail

    Apache と dovecot が動くようになると、次は WebMail システムの SquirrelMail の設定を見直しました。 なかなか動かなかったのですが、結局は

    $ sudo chown -R apahce:apache /var/lib/php

    が正解。 それって SquirrelMail というよりも PHP の問題・・・。

    BIND

    bind は 9.2.4 から 9.3.4 に上がりました。 RPM が古い設定ファイルを /var/named/chroot/etc/named.conf.rpmsave としてバックアップするので、これを新しい named.conf に上書きすると問題なく動作しました。 Apache といい、この BIND といい、きちんと backward compatibility が保たれているのは素晴らしいですな。

    PostgreSQL

    一番苦労したのが PostgreSQL。 CentOS4.6 では 7.4 だったものが 8.1 になっています。 PostgreSQL は小数点以下一桁目が変わるとデータのマイグレーションが必要になります。 今回はそもそも最上位桁が上がっているのでもう必要も必要。 本来は OS のアップグレード前に pg_dumpall で書き出しておくべきだったのですが、まったく気にせずにアップグレードしてしまいました。

    • PostgreSQL: Documentation: Manuals: PostgreSQL 8.1: Migration Between Releases

    残念というか当然というか PostgreSQL8.1 では 7.4 のデータ・ファイルを読むことができません。 CentOS5.2 上に PostgreSQL7.4 を導入することも検討したのですが、なかなか難しそうだったので結局は VMware 上に CentOS4.6 を導入してデータを吸い出すことにしました。

    新たに導入した CentOS4.6 の PostgreSQL7.4 を停止し、/var/lib/pgsql の中身をごっそりと旧データ・ファイルで上書きして再起動します。 最初はセオリーどおり

    @vmware $ sudo su postgres
    @vmware $ pg_dumpall > backup.dmp
    @vmware $ scp backup.dmp postgres@real:~/
    @real $ sudo su postgres
    @real $ psql -f ~/backup.dmp

    としたのですが、データの不正が発生してうまくいきません。 最終的には新マシンで

    @real $ pg_dumpall -h vmware -U popsql | psql

    として、直接パイプで流し込むことで移行できました。 失敗ケースが 7.4 の pg_dumpall で吸い出して 8.1 の psql で読んでいるのに対して、成功したケースは 8.1 の pg_dumpall を 7.4 のサーバーにつないで、その出力を 8.1 の psql で読んでいる状態です。 ということは、やはり一時的に両方のバージョンを用意する必要があったんですね。

    移行とは直接関係ないのですが、PGDATA を切り替える方法です。

    @real $ sudo /etc/rc.d/init.d/postgresql stop
    @real $ sudo vi /etc/sysconfig/pgsql/postgresql
    PGDATA=/opt/pgsql/data
    @real $ PGDATA=/opt/pgsql/data
    @real $ initdb
    @real $ sudo /etc/rc.d/init.d/postgresql start
    Subversion

    Subversion は、その裏で使っている BerklyDB のバージョンが 4.2 から 4.3 へ上がっており、過去のリポジトリをそのままは読めない場合があります。 そのときは以下の手順を踏むことで解決するようです。

    • subversion: Subversion FAQ

    過去と同じバージョンの BerklyDB を持つ環境で、

    $ svnadmin recovery ~/svnrepo
    $ rm `svnadmin list-unused-dblogs ~/svnrepo`
    $ rm ~/svnrepo/db/__db.00*

    として余計なファイルを消しておきます。 多分、OS のアップグレード前に実施しておくのが本当は正しいんだろうね。 今回は PostgreSQL のアップグレードに使った CentOS4.6 環境を使いました。

    Trac

    Trac は、その稼働環境であるところの Python が 2.3 から 2.4 に上がっています。 Trac そのものの問題ではないのかもしれないけれど、案の定うまく動きませんでした。 そういえば WebAdmin plugin が Python2.3 用のものだったような気も・・・。 そこで一旦 rpm --erase trac してからあらためて yum install trac としてインストールしなおしました。 WebAdmin plugin も入れなおし。

    $ wget http://trac.edgewall.org/raw-attachment/wiki/WebAdmin/TracWebAdmin-0.1.2dev_r4240-py2.4.egg.zip
    $ mkdir TracWebAdmin
    $ cd TracWebAdmin
    $ unzip ../TracWebAdmin-0.1.2dev_r4240-py2.4.egg.zip
    $ cd ..
    $ sudo easy_install TracWebAdmin-0.1.2dev_r4240-py2.4.egg
    • The Trac Project - Trac
    • WebAdmin - The Trac Project - Trac
    その他自作ツール

    PHP が 4.3 から 5.1 に上がったため、自作のツールの一部が動かなくなりました。 結構直したつもりなのだけれど、まだいくつか調子がおかしいです。


    というわけで、軽い気持ちで始めた CentOS4.6 から 5.2 へのアップグレードはなかなか大変な作業でした。 でもま、最新版ってのは気持ちがいいですな。

    [ permalink ] [ 0 comment(s) ] [ 0 trackback(s) ]
  • 001261
    LVM の拡張
    miz 2008-02-04 01:10
    このエントリーを含むはてなブックマーク はてなブックマーク - LVM の拡張

    先日、どうもメールが届いてこないと思ったら /var があふれていました。

    $ df -h | grep var
    /dev/mapper/VG00-LV05
                          2.0G  2.0G  0.0G  100% /var

    幸いこのマシンでは LVM を使用してディスクを運用していたので、以下の手順でパーティションが拡張できました。

    状況確認

    まずはボリューム・グループ (VG) の状況を確認します。

    $ sudo vgdisplay VG00
      --- Volume group ---
      VG Name               VG00
      System ID
      Format                lvm2
      Metadata Areas        1
      Metadata Sequence No  9
      VG Access             read/write
      VG Status             resizable
      MAX LV                0
      Cur LV                6
      Open LV               6
      Max PV                0
      Cur PV                1
      Act PV                1
      VG Size               297.81 GB
      PE Size               32.00 MB
      Total PE              9530
      Alloc PE / Size       4992 / 156.00 GB
      Free  PE / Size       4538 / 141.81 GB
      VG UUID               xxxxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxxxx

    320GB のディスクの半分程度しか使っていません。 142GB 近い十分な未使用領域が残っています。

    続いてボリューム・グループ (VG) の状況も確認。

    $ sudo lvdisplay /dev/VG00/LV05
      --- Logical volume ---
      LV Name                /dev/VG00/LV05
      VG Name                VG00
      LV UUID                xxxxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxxxx
      LV Write Access        read/write
      LV Status              available
      # open                 1
      LV Size                2.00 GB
      Current LE             64
      Segments               2
      Allocation             inherit
      Read ahead sectors     0
      Block device           253:4
    論理ボリューム (LV) の拡張

    現在 2GB の /var を、倍の 4GB に拡張します。

    $ sudo lvextend -L +2G /dev/VG00/LV05
    ファイル・システムの拡張

    論理ボリュームを拡張しただけではファイル・システムとして利用可能な状態になりません。 以下のようにファイル・システムを拡張する必要があります。

    $ sudo ext2online /dev/VG00/LV05
    番外 : yum が使っている領域の開放

    未使用領域が潤沢だったので、/var の使用状況を調査せずに拡張してしまいましたが、よくよく状況を確認すると yum がかなりの容量を消費していることが分かりました。 ダウンロードした *.rpm ファイルなどは以下のコマンドで削除することができます。

    $ sudo yum clean packages

    以上の作業で、/var は現在こんな感じになりました。

    $ df -h | grep var
    /dev/mapper/VG00-LV05
                          4.0G  1.5G  2.4G  38% /var
    [ permalink ] [ 0 comment(s) ] [ 0 trackback(s) ]
  • 001206
    Cacti でサーバーの稼動状況を可視化
    miz 2007-09-24 00:57
    このエントリーを含むはてなブックマーク はてなブックマーク - Cacti でサーバーの稼動状況を可視化

    自宅サーバーを常時稼動させているのですが、その稼動状況をあまりきちんと把握しておりませんでした。 よろしくない。 そこで、今月の Software Design で取り上げられていた Cacti をインストールすることにしました。

    • Cacti: The Complete RRDTool-based Graphing Solution

    "Cacti" は「カクタイ」と発音するそうです。 Cacti は MRTG の後継であるグラフ化ツールであるRRDTool のフロントエンドとして振る舞い、各種ステータスをグラフ化して表示する Web アプリケーションです。

    • MRTG - Tobi Oetiker's MRTG - The Multi Router Traffic Grapher
    • RRDtool - About RRDtool

    MRTG は古くから使われていて実績のあるグラフ化ツールではあるものの、二系統しかグラフ化できないなどの制約があり使い勝手はさすがに見劣りしてきています。 そこで開発されたのが RRDTool で、MRTG の蓄積を生かしつつ(開発者は同じ人)機能の拡充がなされています。 がしかし、欠点としてその扱いが複雑になってしまったようです。 という経緯で、この Cacti のようなフロントエンドが必要になるわけですな。

    Cacti は SNMP にも対応しているので、今回は Linux サーバーだけではなく Windows XP マシンも監視対象に入れてみたいと思います。

    Cacti をセットアップします

    自宅サーバーは CentOS なのでインストールは簡単。 RPMForge.net から、こんな具合にインストールできます。

    $ yum install cacti

    インストールが終わったら、DB スキーマの作成です。 Cacti はバックエンドのデータストアとして MySQL を使います。

    $ sudo su - mysql
    $ mysqladmin -u root create cacti
    $ mysql -u root cacti < /var/www/cacti/cacti.sql
    $ mysql -u root mysql
    mysql> grant all on cacti.* to cactiuser@localhost \
    identified by '<password>';
    mysql> flush privileges

    続いて、作成した DB への接続情報を Cacti に設定します。 設定ファイルは /var/www/cacti/include/config.php になります。

    $database_type = "mysql";
    $database_default = "cacti";
    $database_hostname = "localhost";
    $database_username = "cactiuser";
    $database_password = "<password>";
    $database_port = "3306";

    念のため、Apache の設定を確認してから起動します。 Apache 用の設定は /etc/httpd/conf.d/cacti.conf に置かれます。 httpd.conf に "Include conf.d/*.conf" というディレクティブがあるので、自動的に Apache の設定として読み込まれます(ぼくはこの動きが気持ち悪いので当該ディレクティブを無効化していますが)。

    $ sudo /etc/rc.d/init.d/httpd restart

    設定した URI(たとえば http://example.net/cacti/)にアクセスすると、初回アクセス時のコンフィギュレーション画面が表示されます。 ぼくの場合は特に設定を変更すべき箇所が見当たらなかったので、そのまま次へ次へと。 やがてログイン画面が表示されるので admin/admin にてログインしましょう。 新しいパスワードを聞かれるので適当なパスワードを設定すれば起動完了。

    ログイン後の画面

    デフォルトでは Localhost が登録されています。 crond を使って五分間隔で値を取得しているので、しばらく待つとグラフが表示される状態になります。 左上の "graph" タブをクリックしましょう。

    グラフ画面
    Windows XP マシンの稼動状況をグラフ化する

    Cacti のインストールが終わったので、Windows XP マシンの稼動状況を SNMP で取得してグラフ化してみましょう。 Windows XP Professional には標準で SNMP Agent 機能が用意されています。 "サービス" に "SNMP Service" がリストされているはずです。 これが存在しない場合は "コントロールパネル > プログラムの追加と削除 > Windows コンポーネントの追加と削除" から "管理とモニタツール" を追加してください。 続いて、"サービス > SNMP Service" のプロパティを開き "セキュリティ" タブを開きます。 デフォルトのコミュニティ名 "public" を変更しましょう。 また、必要に応じて接続元ホストも絞りましょう。 今回の Cacti 用には Linux サーバーの IP アドレスを指定しておけば問題ないでしょう。

    SNMP Service のセキュリティ設定

    SNMP Service が起動してなければ起動します。 必要に応じてファイアウォールの設定も変更してください。 以上で Windows マシン側の設定は完了です。

    続いて Cacti の設定です。 箇条書きで。

    • 先ほどの Web の "console" タブ画面のメニューから "Devices" をクリックします。
    • 画面右上の "Add" リンクをクリックします。
    • 以下のように入力します。
    Windows の設定画面
    Description 何か分かりやすい表示名
    Hostname Windows マシンのホスト名
    Host Template Windows 2000/XP
    SNMP Community 先ほど指定したコミュニティ名
    SNMP Version Version 2
    SNMP Port 161
    SNMP Timeout 適当に
    • "create" ボタンをクリックして設定を作成します

    続いてグラフ定義の作成です。

    • 表示された画面の "Create Graphs for this Host" リンクをクリックします
    • すべてのグラフにチェックをつけて "create" ボタンをクリックします
    • メニューの "Devices" をクリックします
    • 先ほど作成した Windows マシンの設定にチェックをつけます
    • "Cheese an action" の "Place on a Tree (Default Tree)" を選択して "go" をクリックします
    • "yes" をクリックします

    以上でグラフの追加は完了です。 "graph" タブから Windows マシンのグラフを表示して見ましょう。

    ログイン後の画面
    [ permalink ] [ 0 comment(s) ] [ 0 trackback(s) ]
  • 001205
    CentOS 用に yum repository 追加
    miz 2007-09-23 23:21
    このエントリーを含むはてなブックマーク はてなブックマーク - CentOS 用に yum repository 追加

    ぼくは CentOS のパッケージ管理に yum を使っています。 CentOS の公式リポジトリだけでもそれなりには使えるのですが、やはりほかにもパッケージが必要になる場合もあります。 そこで、非公式リポジトリをいくつか yum に登録することにしました。 非公式リポジトリを利用するにあたって注意したいのが、リポジトリが継続的にメンテナンスされるかという点。 そのリポジトリからパッケージをインストールしたはよいけれど、その後のアップデートがなくてセキュリティ・ホールもそのまま放置、なんてことになるのは非常にまずいです。 ということで、Web でもそこそこ言及の多い三つのリポジトリを選びました。

    CentOS Extras

    CentOS の開発者の一人、Karanbir Singh 氏が公開しているリポジトリ。 Fedora Extras から持ってきたパッケージを CentOS 用にパッケージングしたものだそうです。

    • CentOS Repository of pkgs at CentOS.Karan.Org

    設定方法はこんな具合。

    $ cd /etc/yum.repos.d
    $ sudo wget http://centos.karan.org/kbsingh-CentOS-Extras.repo

    いたって簡単です。

    dig

    こちらは Dag Wieers 氏が個人的に公開しているリポジトリ。

    • DAG: Field Commander Wieers
    • DAG: RPM packages for Red Hat, RHEL, CentOS and Fedora

    氏のリポジトリは理研の FTP サイトでもミラーされているので、日本からはそちらを使うのが吉でしょう。 というわけで、以下のような内容で /etc/yum.repos.d/dag.repo ファイルを作成します。

    [dag]
    name=Dag RPM Repository for Fedora Core
    baseurl=http://ftp.riken.jp/Linux/dag/redhat/el$releasever/en/$basearch/dag
    enabled=1
    gpgcheck=1

    続いて PGP key をインポートします。

    $ sudo rpm --import http://ftp.riken.jp/Linux/dag/packages/RPM-GPG-KEY.dag.txt
    RPMForge

    前述の Dag 氏のサイトでも紹介されているリポジトリです。 Dag 氏を含む何名かのメンバーが中心になりメンテナンスを行っているようです。

    • RPMforge: RPMforge.net - the 2nd party RPM repository

    設定には rpmforge-release という RPM パッケージが便利です。 これをインストールすると yum 用にリポジトリ設定ファイルが出来上がります。

    $ wget http:// ftp.belnet.be/ packages/ dries.ulyssis.org/ fedora/ fc4/ i386/ RPMS.dries/ rpmforge-release-0.2-2.2.fc4.rf.i386.rpm
    $ sudo rpm -i rpmforge-release-0.2-2.2.fc4.rf.i386.rpm

    これでいろいろなパッケージをお手軽にインストールできるようになります。 便利便利。 ただし、ちょっと問題もあって、公式リポジトリからインストールしたパッケージが非公式リポジトリのパッケージで上書きされてしまう場合もあります。 ちょっと気持ち悪いけれど、バージョンが進むわけなので良しとするか。

    [ permalink ] [ 0 comment(s) ] [ 0 trackback(s) ]
  • 001203
    HTTP proxy server Squid 導入
    miz 2007-09-23 13:07
    このエントリーを含むはてなブックマーク はてなブックマーク - HTTP proxy server Squid 導入

    さて、ipchains と iptables - 麦酒堂 でも触れたとおり、我が家のルーターが FORWARD 全面停止となりました。 これは不便だ。 不便というか、そもそもクライアント PC から外に出られない。 というわけで、こいつを導入。

    • squid : Optimising Web Delivery

    HTTP proxy サーバーの Squid である。 これがあれば、少なくとも Web は見られるようになる。 さらに、最近のサービスでは HTTP proxy をトンネルに使っているものもあるので、そういうサービスも使えちゃう(Skype とか)。 素敵、HTTP Proxy。

    まずはインストール。 対象ディストリビューションは CentOS 4.5。 我が家の場合はすでにインストールされた状態でしたが、もし入っていない場合は yum などで入れてしまいましょう。

    $ rpm -q squid
    squid-2.5.STABLE14-1.4E
    # インストールされてますね
    # インストールされていない場合は yum で入れます
    $ sudo yum install squid

    続いて設定です。 設定ファイルは /etc/squid/squid.conf にあります。 が、デフォルトのものは長いので、いったん全部消してから必要な設定項目のみを記述しましょう。 参考になるのはこのあたりです。

    • Squid Configuration Basics - Squid User's Guide
    • Squid 2.6.STABLE16 configuration file
    • Squid 2.6 Configuration Manual

    今回の環境では Cache としての役割をほとんど期待せず、アクセス制御ポイントを集約する程度の役割しか担わせないことにします。

    # Squid が聴くポートを指定
    # icp は分散キャッシュ間の調停に使われるもののようなので今回は disabled
    # ---------------------------------
    http_port 172.16.100.254:8080
    http_port 172.16.200.254:8080
    icp_port 0
    
    # QUERY_STRING を含む URI へのアクセスはキャッシュしないことにする
    # ---------------------------------
    acl QUERY urlpath_regex cgi-bin \?
    no_cache deny QUERY
    
    # キャッシュに使用するメモリ容量 / ディスク容量
    # デフォルトではメモリ 8MB、ディスク 100MB なのだけれど
    # そんなにいらないのでそれぞれ 2MB / 16MB に変更しました
    # ---------------------------------
    cache_mem 2 MB
    cache_dir ufs /var/spool/squid 16 16 128
    
    # これは "suggested" と書いてあったのでとりあえずそのまま残す
    # ---------------------------------
    refresh_pattern ^ftp:           1440    20%     10080
    refresh_pattern ^gopher:        1440    0%      1440
    refresh_pattern .               0       20%     4320
    
    # アクセス制御
    # アクセス先のポートを制限するのだけれど、そもそもこの Linux box は
    # iptables で outgoing のパケットをかなり絞ってあるので、
    # ここでどう設定しようがあまり影響はない。
    # ひとまず 80 / 443 はあけておくことにした。
    # 相変わらず icp は拒否。
    # ---------------------------------
    acl all src 0.0.0.0/0.0.0.0
    acl home src 172.16.100.0/24
    acl jail src 172.16.200.0/24
    acl localhost src 127.0.0.1/255.255.255.255
    
    acl Safe_ports port 80          # http
    acl Safe_ports port 443         # https
    acl SSL_ports port 443
    acl CONNECT method CONNECT
    
    http_access deny !Safe_ports
    http_access deny CONNECT !SSL_ports
    http_access allow home
    http_access allow jail
    http_access deny localhost
    http_access deny all
    
    http_reply_access allow all
    
    icp_access deny all
    
    # メールアドレス、クラッシュ時の core 吐き場所など
    # ---------------------------------
    cache_mgr admin@example.net
    coredump_dir /var/spool/squid

    設定が終わったら起動しましょう。

    $ sudo /etc/rc.d/init.d/squid start

    最後にクライアントの設定を忘れずに。 これで HTTP および HTTP をトンネルするタイプのサービスは使えるようになりました。

    [ permalink ] [ 0 comment(s) ] [ 0 trackback(s) ]
  • 001202
    ipchains と iptables
    miz 2007-09-23 12:02
    このエントリーを含むはてなブックマーク はてなブックマーク - ipchains と iptables

    我が家では Linux box をルーターとして使用していて、iptables でフィルタリングを行っています。 かつて、Linux kernel 2.2 の頃は ipchains を使っていて、当時使っていたフィルター設定スクリプトに少しずつ手を入れながら今もそれで設定を行っています。

    で、本日驚愕の事実が。 ipchains と iptables とでは built-in のチェーンがいろいろと変更されているのですが、その変更にきちんと追随できておりませんでした。 いやー、自分でもびっくりした。 あれだけ言われていたのに。 そしてその仕組みを、自分ではきちんと理解していたつもりだったのに。

    具体的に説明しましょう。 ipchains 時代は INPUT-FORWARD-OUTPUT が一本道になっていて、INPUT チェーンと OUTPUT チェーンをがっちり締めておけば IP masquerading も堅くなる仕組みでした。 ぼくの使っていたスクリプトも、もちろんこの仕組みをベースにして作成されていました。 ところが、iptables になると INPUT-OUTPUT と FORWARD が分離されて(ほかにいくつかテーブルも追加されて)、FORWARD の前後で INPUT-OUTPUT のフィルターが適用されなくなりました。 つまり FORWARD 自体をがっちり締めないと丸裸。 IP masquerading があるので完全な素通しではないけれど、意図しないパケットが外向きに出て行ってしまう危険性があります。

    というわけで、早急に対策を施しました。

    # フォワードする UDP のポート
    T=""
    HOME_UDP_FORWARD=${T}
    
    # フォワードする TCP のポート
    T=""
    HOME_TCP_FORWARD=${T}
    
    # フォワードする UDP のポート
    T=""
    JAIL_UDP_FORWARD=${T}
    
    # フォワードする TCP のポート
    T=""
    JAIL_TCP_FORWARD=${T}
    
    # チェーンの追加
    ${IPTABLES} -N FORWARD_HOME
    ${IPTABLES} -N FORWARD_JAIL
    
    function forward {
      PROTOCOL=$1
      CHAIN=$2
      USING_PORTS=$3
      ## 使用サービスの outgoing (request) パケット
      for port in ${USING_PORTS}; do
        ${IPTABLES} -A ${CHAIN} -p ${PROTOCOL} --dport ${port} -j ACCEPT
      done
    }
    
    # FORWARD チェーンの振り分け設定
    ${IPTABLES} -P FORWARD DROP
    ${IPTABLES} -A FORWARD -s ${HOME_NETWORK} -j FORWARD_HOME
    ${IPTABLES} -A FORWARD -s ${JAIL_NETWORK} -j FORWARD_JAIL
    ${IPTABLES} -A FORWARD -m conntrack ! --ctstate ESTABLISHED -j LOGGED_DROP
    
    # ##########
    # FORWARD_HOME
    echo configuring FORWARD_HOME chain...
    ## UDP
    forward "udp" "FORWARD_HOME" "${HOME_UDP_FORWARD}"
    ## TCP
    forward "tcp" "FORWARD_HOME" "${HOME_TCP_FORWARD}"
    ## ICMP
    ## termination
    ${IPTABLES} -A FORWARD_HOME -j LOGGED_DROP
    
    # ##########
    # FORWARD_JAIL
    echo configuring FORWARD_JAIL chain...
    ## UDP
    forward "udp" "FORWARD_JAIL" "${JAIL_UDP_FORWARD}"
    ## TCP
    forward "tcp" "FORWARD_JAIL" "${JAIL_TCP_FORWARD}"
    ## ICMP
    ## termination
    ${IPTABLES} -A FORWARD_JAIL -j LOGGED_DROP

    結局やっていることは、FORWARD の全拒否です。 "JAIL" "HOME" などは以下のエントリの "UNKNOWN" "KNOWN" と同等です。

    • dhcp / iptables を組み合わせた仮想的なネットワーク分離 - 麦酒堂

    経験を過信するのは恐ろしい、と再認識した次第です。

    [ permalink ] [ 0 comment(s) ] [ 0 trackback(s) ]
  • 001061
    samba のセットアップ
    miz 2007-02-05 21:35
    このエントリーを含むはてなブックマーク はてなブックマーク - samba のセットアップ

    Linux に samba を立ててファイルサーバーにしました。

    • Samba - opening windows to a wider world

    要件は以下の通り。

    • ホーム・ディレクトリは所有ユーザーのみが読み書き可能
    • "ro" ディレクトリは任意ユーザーが読み取り可能(書き込みは出来ない)
    • "rw" ディレクトリは認証済みユーザーのみがそのユーザー権限で読み書き可能

    samba の設定は smb.conf ファイルに記述されています。 swat などの便利ツールは今回使用しませんでした。 勇ましく設定ファイルの直接編集で。

    • smb.conf

    smb.conf - 全体の設定

    最初に samba 全体の設定を行います。

    所属するワークグループとサーバーの説明を設定します。

       workgroup = example.com
       server string = Samba Server %v@%h

    samba がポートを開くインタフェースと接続を許可するホストを指定します。

    interfaces = 192.168.100.0/24
    hosts allow = 192.168.100. 127.

    プリンタは使用しません。

    ;  printcap name = /etc/printcap
    ;  load printers = yes
    ;cups options = raw

    名前解決関連の設定を行います。 このサーバーの名前解決順は以下の通りです。

    1. WINS サーバーに問い合わせる
    2. lmhosts ファイルを参照する
    3. ブロードキャストにより問い合わせる

    また、WINS サーバーとして振舞います。

    name resolve order = wins lmhosts bcast
    wins support = yes

    ユーザー認証関連の設定です。 認証を通っていないユーザーはゲスト扱いで、ゲストは UNIX アカウント "nobody" として扱われます。 ユーザー認証に使用するパスワードは暗号化されて "/etc/samba/smbpasswd" ファイルに格納します。

    map to guest = bad user
    guest account = nobody
    encrypt passwords = yes
    smb passwd file = /etc/samba/smbpasswd
    smb.conf - home の設定

    まずはユーザーのホーム・ディレクトリの共有設定です。 このあたりは samba の決り文句的な設定になります。

    [homes]
        comment = Home Directories
        browseable = no
        public = no
        guest ok = no
        writable = yes
        create mask = 0644
        directory mask = 0755
        hosts allow = 192.168.100.0/24
    smb.conf - 読取専用の設定

    続いて読取専用ディレクトリの共有設定です。 "guest ok" としているので誰でも参照できますが "writeable = no" により書き込みは行えません。

    [ro]
        comment = Read Only Directory
        path = /var/ro
        guest ok = yes
        guest account = nobody
        writable = no
        hosts allow = 192.168.100.0/24
    smb.conf - 読み書き可能の設定

    最後に読み書き可能なディレクトリを設定します。

    [rw]
        comment = Read Write Directory
        path = /var/rw
        public = no
        guest ok = no
        writable = yes
        create mask = 0644
        directory mask = 0755
        hosts allow = 192.168.100.0/24

    ここで注意しなければならないのは「書き込まれたファイルは誰のもの?」というパーミションの問題。 認証を通ったユーザーは誰でも書き込み可能なので 777 にしておく必要がありそうです。 しかし単純にそう設定すると、たとえばユーザーAが作成したファイルをユーザーBが削除できてしまいます。 これを避けるために、Linux では sticky bit を使用することができます。 /tmp などにも用いられているもので、これが立っているディレクトリではファイルの所有者とディレクトリの所有者以外はファイルを削除できません。 sticky bit の本来の意味からは離れているようですがこの際気にしません。

    • Manpage of CHMOD
    $ sudo mkdir /var/rw
    $ sudo chmod 1777 /var/rw
    $ ls -dl /var/rw
    drwxrwxrwt  3 root      root        4096 Feb  7 00:06 /var/rw

    others の実行権限部分が "t" になっているのが sticky bit が立っている状態です。

    smbpasswd の設定

    認証が必要なユーザーのパスワードを設定します。

    $ sudo smbpasswd -a user001
    New SMB password: <password>
    Retype new SMB password: <password>
    Added user user001. 
    動作確認

    samba を起動して Windows マシンでエクスプローラから "\\example.com\rw" などを開きファイルを参照 / 作成 / 削除できることを確認します。

    $ sudo /etc/rc.d/init.d/samba start

    [ permalink ] [ 0 comment(s) ] [ 0 trackback(s) ]
  • 001054
    htmllint のインストール
    miz 2007-02-01 18:29
    このエントリーを含むはてなブックマーク はてなブックマーク - htmllint のインストール

    最近 HTML をちくちくといじる事が多いので、HTML の書式チェッカーを手元に置きたくなりました。 で、これをインストール。

    • Another HTML-lint

    インストール手順は以下のような感じでした。 すでに Apache は動いているという前提で、CGI モードで動作させるよう設定しています。

    ファイルの入手

    以下から htmllint.zip をダウンロードします。

    • Another HTML-lint : Download
    ファイルの展開

    ファイルを展開します。 カレント・ディレクトリにフラットにどばっと吐かれるので、ひとつディレクトリを掘っておきます。

    $ cd /var/web
    $ mkdir htmllint
    $ cd htmllint
    $ unzip ~/htmllint.zip
    Another HTML-lint の設定変更

    設定ファイルを用意します。 サンプル設定のコピーで充分です。

    $ cp htmllintenv htmllint.env

    必要に応じて *.cgi ファイルの Perl のパスを変更します。

    #!/usr/bin/perl

    *.cgi ファイルを実行可能にします。

    $ chmod +x *.cgi
    Apache の設定変更

    Apache の適当な VirtualHost に以下の設定を追加します。

      Alias         /htmllint         /var/web/htmllint
      <Location /htmllint>
        AddDefaultCharset iso-2022-jp
        Options +ExecCGI
        AddHandler cgi-script .cgi
      </Location>

    htmllint が吐く HTML は iso-2022-jp でエンコードされているので "AddDefaultCharset" で指定します。 また、拡張子 "cgi" を持つものは CGI として扱うように設定しています。

    動作確認

    Apache を再起動して http://example.com/htmllint/ など適切な URI にアクセスします。


    で、まずは手始めに麦酒堂をチェックしたところ、あちらこちらにほころびが……。 直すの面倒くさいなぁ。

    [ permalink ] [ 0 comment(s) ] [ 0 trackback(s) ]
  • 001041
    Outbound Port25 Blocking 対策
    miz 2007-01-20 12:40
    このエントリーを含むはてなブックマーク はてなブックマーク - Outbound Port25 Blocking 対策

    メール関連セットアップ の続き。 ぼくが契約している ISP では Outbound Port25 Blocking を実施しています。

    • セキュリティ対策及び迷惑メール対策の更なる強化について~「Outbound Port25 Blocking」を開始!~

    まぁ、最近多いですよね。 これまでの設定(qmail使用)ではこの規制に引っかかったことがなかったので全く気にしていなかったのですが、Postfix で運用を開始したとたんに引っかかってしまいました。 何故。

    引っかかってしまったものは仕方がないので対策を考えます。 ISP の Web サイトをよく読んでみると、以下の二つの手の併用で抜けられるようです。

    1. 外に出て行くメールをすべて ISP の SMTP サーバーにリレーさせる
    2. ISP の SMTP サーバーに接続する際に SMTP Auth を使う

    一つ目は既に設定済みなので、さっそく Postfix に SMTP Auth の設定を行います。


    Postfix での SMTP Auth の設定は、以下のドキュメントに詳しく書かれています。

    • Postfix SASL Howto
      • Enabling SASL authentication in the Postfix SMTP client
    main.cf の設定

    SMTP で接続する場合に SMTP Auth を使うように設定します。 "smtp_sasl_password_maps" は使用するパスワードを指定するファイル(後述)です。

    smtp_sasl_auth_enable = yes
    smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
    smtp_sasl_type = cyrus
    パスワードの指定

    SMTP Auth に使用するパスワードをファイルに保存します。 ファイル名は先ほど指定したものです。 接続先の SMTP サーバーごとに使用するパスワードを切り替えられますが、今回は外に出てゆくすべてのメールを同一のの SMTP サーバーに渡すのでエントリは一行だけです。

    [<SMTP サーバー名>]   <アカウント名>:<パスワード>

    SMTP サーバー名 / アカウント名 / パスワードは ISP から指定されたものを使います。 アカウント名 / パスワードは POP のものと同一とは限らないのでご注意を。

    いつものごとく postmap にて形式変換を行います。

    $ postmap /etc/postfix/sasl_passwd
    設定反映

    Postfix に設定を読み込ませます。

    $ /etc/rc.d/init.d/postfix reload

    関連エントリ
    • メール関連セットアップ - overview
    • MTA / MDA - Postfix のセットアップ
    • POP3 / IMAP - Dovecot のセットアップ
    • 麦酒堂: Web Mail - SquirrelMail のセットアップ
    [ permalink ] [ 0 comment(s) ] [ 0 trackback(s) ]
  • 001040
    Web Mail - SquirrelMail のセットアップ
    miz 2007-01-08 14:53
    このエントリーを含むはてなブックマーク はてなブックマーク - Web Mail - SquirrelMail のセットアップ

    メール関連セットアップ の最後。 Web Mail 環境を構築します。 外出時も自宅メールをチェックできるので重宝します。 CentOS 4.4 には SquirrelMail が含まれているのでこれを利用します。

    再度繰り返しになりますが、要件は以下の通り。

    1. UNIX アカウントAに届いたメールは POP / IMAP (WebMail) の双方で「独立して」アクセスできる。 POP 側でメールを削除しても IMAP 側に影響を与えない。逆もまた然り。
    2. 非 UNIX アカウントBに届いたメールは他ドメインのアカウントB'に転送する。
    3. 非 UNIX アカウントCに届いたメールは IMAP (WebMail) でのみアクセスできる。

    このうち要件1,3に書かれている IMAP アクセスを Web Mail から利用できるように設定します。


    参考リンクです。

    • SquirrelMail - Webmail for Nuts!

    SquirrelMail の公式サイトです。 以前のバージョンでは UNIX コマンドで各種設定を行っていたのですが、現在のバージョンは Web のインタフェースから大部分の設定を行うことが出来ます。


    インストール

    SquirrelMail がインストールされていることを確認します。

    $ rpm -qa | grep -i squirrelmail
    squirrelmail-1.4.8-2.el4.centos4

    インストールされていない場合は何らかの方法でインストールします。 以下は yum を利用した場合の例です。

    $ sudo yum install squirrelmail
    パーミションの設定

    CentOS 4.4 の標準では Apache を apache ユーザーで実行するように設定されていますが、ぼくの環境では www ユーザーで実行するようになっています。 そのため、いくつかのファイル / ディレクトリについて所有者を変更する必要がありました。

    $ sudo chown -R www:www \
    > /var/spool/squirrelmail/attach
    $ sudo chown -R www:www \
    > /var/lib/squirrelmail/pref
    $ sudo chgrp -R www /etc/squirrelmail/
    設定変更

    今回の環境では特に設定すべきことはないのですが、設定の方法だけを一応ご説明します。

    $ sudo /usr/share/squirrelmail/config/conf.pl
    SquirrelMail Configuration : Read: config.php (1.4.0)
    ---------------------------------------------------------
    Main Menu --
    1.  Organization Preferences
    2.  Server Settings
    3.  Folder Defaults
    4.  General Options
    5.  Themes
    6.  Address Books
    7.  Message of the Day (MOTD)
    8.  Plugins
    9.  Database
    10. Languages
    
    D.  Set pre-defined settings for specific IMAP servers
    
    C   Turn color off
    S   Save data
    Q   Quit
    
    Command >>

    たとえば IMAP サーバーとは別のノードに SquirrelMail を立てる場合などは "2. Server Settings" > "A. Update IMAP Settings" を変更します。

    ターミナルの設定によっては設定値が読めない場合があります。 その場合は "C Turn color off" を選択して色設定をオフにしてください。
    Apache の起動

    CentOS 4.4 の SquirrelMail はインストール直後に既に Apache の設定が完了しています。 ひとまず何も設定を変更せずに Apache を起動します。 この際、インターネット接続を切っておくことをおすすめします。

    $ sudo /etc/rc.d/init.d/httpd start
    動作確認

    SquirrelMail の動作を確認します。 ブラウザから http://example.com/webmail にアクセスします。

    IMAP アカウントとパスワードを入力してログインします。

    自アカウント宛にメールを送るなどして正常に機能することを確認します。

    アカウントごとの設定

    SquirrelMail 1.4.8-2 では Web から様々な設定を行うことが出来ます。 日本語を扱えるようにするには "Options" > "Display Preferences" > "Language" の値を "Japanese" に変更します。

    他にも設定項目がいろいろあるので、必要に応じて設定を変更しておきます。


    以上で SquirrelMail の設定は完了です。 ただ、この状態だとパスワードがプレーン・テキストで流れてしまうので必要に応じて SSL と組み合わせて利用してください。


    関連エントリ
    • メール関連セットアップ - overview
    • MTA / MDA - Postfix のセットアップ
    • POP3 / IMAP - Dovecot のセットアップ
    [ permalink ] [ 2 comment(s) ] [ 0 trackback(s) ]
  • 001039
    POP3 / IMAP - Dovecot のセットアップ
    miz 2007-01-08 11:32
    このエントリーを含むはてなブックマーク はてなブックマーク - POP3 / IMAP - Dovecot のセットアップ

    メール関連セットアップ の第二弾。 Postfix の設定に続いては POP3 / IMAP サーバーの設定です。 CentOS 4.4 に含まれる標準 POP3 / IMAP サーバーは Dovecot となります。 バージョンは 0.99.11 です。 このバージョンではぼくが使いたい機能の一部(APOPなど)が未実装ですが、1.0.x では実装される予定なので今後に期待して標準品をそのまま使用します。

    繰り返しになりますが、要件は以下の通り。

    1. UNIX アカウントAに届いたメールは POP / IMAP (WebMail) の双方で「独立して」アクセスできる。 POP 側でメールを削除しても IMAP 側に影響を与えない。逆もまた然り。
    2. 非 UNIX アカウントBに届いたメールは他ドメインのアカウントB'に転送する。
    3. 非 UNIX アカウントCに届いたメールは IMAP (WebMail) でのみアクセスできる。

    要件2は IMAP / POP3 には関係ありません。 要件1,3について設定を進めてゆきます。 要件1は二箇所(~/Maildir と ~/Webmail)に配信されたメールをそれぞれ別のアカウントを用意してアクセスできるように設定します。 ただし UNIX アカウントを追加するのは好ましくないので、Dovecot の passwd-file を利用することにします。 要件3についても同様です。


    参考リンクです。

    • Dovecot
      • FrontPage - Dovecot Wiki
      • Authentication - Dovecot Wiki
      • AuthDatabase/PasswdFile - Dovecot Wiki

    但し、上記サイトの記述は Dovecot 1.0.x のものになっています。 0.99.11 には適用できない説明もあるのでご注意ください。 正確を期するためには /usr/share/doc/dovecot* 以下にインストールされたドキュメントを参照してください。

    今回の設定のキモは passwd-file の記述方法です。 取り立てて複雑な設定を行っているわけではないのですぐに設定が完了するはずです。

    では、以下手順です。


    インストール

    SquirrelMail がインストールされていることを確認します。

    $ rpm -qa | grep -i squirrelmail
    squirrelmail-1.4.8-2.el4.centos4

    インストールされていない場合は何らかの方法でインストールします。 以下は yum を利用した場合の例です。

    $ sudo yum install squirrelmail
    プロトコルの設定

    Dovecot が使用するプロトコルを設定します。 設定ファイル /etc/dovecot.conf を編集して以下の設定を行います。

    protocols = imap pop3
    認証 / ユーザー情報の設定

    認証 / ユーザー情報を設定します。 設定ファイル /etc/dovecot.conf を編集して以下の設定を行います。

    auth_userdb = passwd-file /etc/dovecot.passwd
    
    auth_passdb = passwd-file /etc/dovecot.passwd

    "auth_userdb" はユーザー名やMaildir の場所などの問い合わせ先です。 次項で定義する passwd-file を指定します。 "auth_passdb" はパスワードの問い合わせ先です。 デフォルトでは PAM を使用するようになっていますが、今回はすべてのユーザー情報を passwd-file に集約します。

    passwd-file の設定

    今回の設定のキモ、passwd-file の設定です。 前項で passwd-file のパスを "/etc/dovecot.passwd" と指定しました。 このファイルを以下の内容で作成します。

    Apop3:{md5}xx:1000:1000::/home/A/::userdb_mail=maildir:/home/A/Maildir
    Aimap:{md5}xx:1000:1000::/home/A/::userdb_mail=maildir:/home/A/Webmail
    C:{md5}xx:5000:5000::/home/vmailbox/::userdb_mail=maildir:/home/vmailbox/C

    各フィールドの説明です。

    1 アカウント名
    2 パスワード(PLAIN-MD5 使用時のパスワード文字列生成方法は後述)
    3 uid。要件3のアカウントには Postfix の設定時に作成した vmailbox ユーザーの uid を指定します。
    4 gid。要件3のアカウントには Postfix の設定時に作成した vmailbox ユーザーの gid を指定します。
    5 -
    6 ホーム・ディレクトリ(上記 uid / gid の権限でアクセスできること)
    7 -
    8 各種オプション。今回の設定ではここでメール・ボックスの場所を指定する。

    パスワード文字列は以下のコマンドで生成できます。

    $ md5sum --string=<パスワード文字列>

    コマンド履歴に残したくない場合は以下のような方法もあります。

    $ md5sum --string=`cat`
    <パスワード文字列>^M
    ^D
    起動 / 動作確認

    Dovecot を起動します。

    $ sudo /etc/rc.d/init.d/dovecot start

    POP3 / IMAP を話す MUA を使用して動作を確認してください。 "MTA / MDA - Postfix のセットアップ" で送信したテスト・メールが参照できれば問題ありません。


    関連エントリ
    • メール関連セットアップ - overview
    • MTA / MDA - Postfix のセットアップ
    • Web Mail - SquirrelMail のセットアップ
    [ permalink ] [ 0 comment(s) ] [ 0 trackback(s) ]
  • 001038
    MTA / MDA - Postfix のセットアップ
    miz 2007-01-07 22:48
    このエントリーを含むはてなブックマーク はてなブックマーク - MTA / MDA - Postfix のセットアップ

    メール関連セットアップ - overview でも書いた通り、以下の要件を満たすべくまずは MTA / MDA として Postfix のセットアップを行います。

    1. UNIX アカウントAに届いたメールは POP / IMAP (WebMail) の双方で「独立して」アクセスできる。 POP 側でメールを削除しても IMAP 側に影響を与えない。逆もまた然り。
    2. 非 UNIX アカウントBに届いたメールは他ドメインのアカウントB'に転送する。
    3. 非 UNIX アカウントCに届いたメールは IMAP (WebMail) でのみアクセスできる。

    それぞれの要件について、メールをメールボックスに届けるまでは MTA / MDA の役割になります。 要件1については Postfix は通常どおりメールを配送し、その後 procmail で二つのメールボックスに同時に配信します。 要件2については Postfix の virtual alias 機能を利用して転送します。 要件3については Postfix の virtual map 機能を利用して特定のディレクトリに配信します。

    以下、説明となります。 以降の説明ではドメインとして example.com を用います。

    最初に参考リンクです。

    • The Postfix Home Page
      • Postfix Architecture Overview
      • Postfix Configuration Parameters
      • Postfix Virtual Domain Hosting Howto
      • Postfix Address Rewriting
      • Postfix Manual Pages

    最低でも Architecture Overview の "How Postfix receives mail" と "How Postfix delivers mail" は事前に目を通しておくべきです。 Postfix のメール配信の流れ / 各デーモンの機能が説明されており、これを把握しておくと設定項目の理解が格段に深まるはずです。 それら設定項目の個別の説明は Configuration Parameters に詳しいです。 また、要件2,3で非 UNIX アカウントを処理するために利用する Virtual 系の設定は Virtual Domain Hosting Howto で詳しく説明されています。 Address Rewriting ではメール送受信時のさまざまなタイミングで、エンベローブとヘッダのアドレス情報をどのように加工できる / 加工されるかを詳しく説明しています。 一般的な Postfix の設定は "/etc/postfix/main.cf" ファイルが主となりますが、今回はいくつかの設定ファイルを追加します。 これらの設定ファイルの中身、設定ファイル処理コマンドなどは Manual Pages に記載されています。


    インストール

    Postfix がインストールされていることを確認します。

    $ rpm -qa | grep -i postfix
    postfix-2.2.10-1.RHEL4.2

    もし存在しなければ何らかの方法でインストールします。 以下は yum を利用した場合の例です。

    $ sudo yum install postfix
    MTA の切り替え

    CentOS 4.4 では MTA として Postfix と Sendmail を選択できるようになっています。 デフォルトでは Sendmail が起動しているので、停止した後に Postfix に切り替えます。

    最初に Sendmail を停止します。

    $ /etc/rc.d/init.d/sendmail stop

    続いて MTA を切り替えます。

    $ sudo /usr/sbin/update-alternatives --config mta
    
    There are 2 programs which provide 'mta'.
    
      Selection    Command
    -----------------------------------------------
    *+ 1           /usr/sbin/sendmail.sendmail
       2           /usr/sbin/sendmail.postfix
    
    Enter to keep the current selection[+],
    or type selection number: 2
    基本的な設定

    Postfix を動かすにあたっての基本設定です。 主にメール・アドレスの "@" 以降に関する設定です。 各設定項目の詳細は "Postfix Configuration Parameters" を参照してください。

    # 自サーバー名です
    myhostname = mailserver.example.com
    # 自サーバーのドメイン名です
    mydomain = example.com
    # メール・アドレスの補完などに使用されるドメイン名です
    myorigin = $mydomain
    # Postfix が聴くインタフェースです
    inet_interfaces = all
    # 自サーバーが最終処理を行う必要のあるドメイン名です
    mydestination = $mydomain, $myhostname,
          localhost.$mydomain, localhost(実際は一行)
    上流 SMTP の設定

    野良 SMTP サーバーからの接続を受け付けない SMTP サーバーが世には存在するため、外部に送るメールは一度プロバイダの SMTP を経由させます。 外部に送るメールは smtp(8) が処理します。 main.cf に以下の行を追加します。

    default_transport = smtp:[<プロバイダの SMTP サーバー>]

    "[]" で囲まないと SMTP サーバーの指定ではなくドメイン名の指定と見なされ、MX レコードによる解決が行われてしまいます。 必ず "[]" で囲みましょう。

    ローカル配信に procmail を使用するための設定

    ローカル配信は local(8) がキックします。 デフォルトでは所定のファイルに書き出されるのですが、処理を渡す外部コマンドを mailbox_command により設定することも可能です。 main.cf に以下の行を追加します。

    mailbox_command = /usr/bin/procmail

    そして各 UNIX アカウントのホーム・ディレクトリに procmail のレシピ・ファイル ~/.procmail を作成します。 今回は "~/Mailbox/" (POP3用)と "~/Webmail/"(IMAP用)の二箇所にメールを配信するので以下のような具合です。

    :0 c
    ${HOME}/Webmail/
    :0
    ${HOME}/Maildir/

    メールを受信する各 UNIX アカウントの権限で配信先ディレクトリを作成します。

    $ mkdir ~/Mailmail
    $ mkdir ~/Webmail
    非 UNIX アカウント宛のメールの設定(転送)

    特定のアドレスに届いたメールを他ドメインに転送するには virtual_alias_map が利用できます。 この設定は cleanup(8) の挙動に影響を与えます。 値にはアカウントのマッピングを記述したマップ・ファイルのパスを指定します。 マップ・ファイルの詳細はvirtual(5) に記述されています。

    virtual_alias_maps = hash:/etc/postfix/virtual

    マップ・ファイル(/etc/postfix/virtual)は以下のように設定します。 "B@example.com" 宛のメールを他ドメインの "B'@otherdomain.example.net" に転送する設定です。

    B@example.com       B'@otherdomain.example.net

    マップ・ファイルを編集した際には以下のコマンドが必須です。

    $ sudo postmap /etc/postfix/virtual
    非 UNIX アカウント宛のメールの設定(IMAP 用ローカル配信)

    非 UNIX アカウント宛メールを IMAP でアクセスさせるためには別エントリで後述予定の Dovecot の機能と組み合わせる必要があります。 大まかな流れは以下の通りです。

    1. Postfix の Virtual Alias 機能により対象メールのエンベローブを書き換える。具体的には、メールの宛先を次の Virtual Domain 機能の適用対象となるように変更する。
    2. Postfix の Virtual Domain 機能により変更後のメールを捕捉 / 受信 / 指定したディレクトリに配信する。
    3. Dovecot にて上記配信先ディレクトリを当該ユーザーのメール・ボックスとして扱う

    ここではこのうちの 1,2 について説明します。

    最初に Virtual Alias 機能です。 これは前項でも説明しているので詳細は割愛します。 設定のキモは内部的な一時ドメイン(ここでは仮に "vmailbox.example.com" とする)の利用です。

    C@example.com       C@vmailbox.example.com
    $ sudo postmap /etc/postfix/virtual

    この設定で C@example.com 宛のメールのエンベローブが内部的に C@vmailbox.example.com に書き換えられ incoming キューに入ります。

    続いて Virtual Domain の設定です。 Virtual Domain は virtual(8) により処理されます。 main.cf に以下の設定を追加します。

    virtual_mailbox_domains = vmailbox.example.com
    virtual_mailbox_base = /var/spool/postfix/vmailbox
    virtual_mailbox_maps = hash:/etc/postfix/vmailbox
    virtual_minimum_uid = 100
    virtual_uid_maps = static:5000
    virtual_gid_maps = static:5000

    1行目で Virtual Domain として扱うドメイン名 "vmailbox.example.com" を指定しています。 2行目はメールの保存先となるディレクトリ名です。 このディレクトリ以下にアカウントごとのディレクトリが掘られます。 3行目は Virtual Domain のアカウントを定義している設定ファイルを指定しています。 4~6行目はメールを保存する際に使用する uid / gid の指定です。

    ユーザー / グループを追加し保存先ディレクトリを作成します。

    $ sudo groupadd -g 5000 vmailbox
    $ sudo useradd -g vmailbox -d /dev/null \
    > -s /bin/false -u 5000 vmailbox
    $ sudo mkdir /var/spool/postfix/vdomain
    $ sudo chown vmailbox:vmailbox \
    > /var/spool/postfix/vdomain

    Virtual Domain のアカウント設定するためにマッピングファイル(/etc/postfix/vmailbox)を作成し postmap コマンドで処理します。 マッピング・ファイルはアカウント名と保存先ディレクトリの組です。 保存先ディレクトリは上で指定した virtual_mailbox_base からの相対パスとして処理されます。

    C@vmailbox.example.com  C/
    $ sudo postmap /etc/postfix/vmailbox
    起動と動作確認

    Postfix を起動します。

    $ sudo /etc/rc.d/init.d/postfix start

    簡単な動作確認を行います。 尚、"^D" は Ctrl+D、"^M" は Ctrl+Mです。

    最初に A@example.com 宛のメールです。 ~A/Mailbox と ~A/Webmail の双方にメールが届けば問題ありません。

    $ mail A@example.com
    Subject: Test Mail 1
    Test Mail 1
    ^D
    Cc: ^M
    $ find ~A/Mailbox
    $ find ~A/Webmail

    B@example.com 宛のメールです。 指定した外部のメール・アカウントに届けば問題ありません。

    $ mail B@example.com
    Subject: Test Mail 2
    Test Mail 2
    ^D

    最後に C@example.com 宛のメールです。 設定どおりのディレクトリに届けば問題ありません。

    $ mail C@example.com
    Subject: Test Mail 3
    Test Mail 3
    ^D
    $ sudo find /var/spool/postfix/vmailbox/C

    以上でメールの配信 / 配送の設定が完了しました。 大規模環境などでは "Postfix Performance Tuning" などの設定を行う必要があるのでしょうが、今回はそこまで気にする必要はないため割愛です。


    関連エントリ
    • メール関連セットアップ - overview
    • POP3 / IMAP - Dovecot のセットアップ
    • Web Mail - SquirrelMail のセットアップ
    [ permalink ] [ 0 comment(s) ] [ 0 trackback(s) ]
  • 001037
    メール関連セットアップ - overview
    miz 2007-01-07 20:36
    このエントリーを含むはてなブックマーク はてなブックマーク - メール関連セットアップ - overview

    年末年始の長期休暇を利用してサーバー環境を Dell PowerEdge SC430 上の CentOS 4.4 に移行しています。 いくつかのサービスを移行した中でもっとも難航したのがメール関連。 これまでは qmail を使用していましたが、公開サービスは RPM で管理しまうのがなにかと便利なので CentOS 4.4 標準の Postfix に乗り換えることにしました。 ただメール絡みの要件が少々厄介で、以下のような具合です。

    1. UNIX アカウントAに届いたメールは POP / IMAP (WebMail) の双方で「独立して」アクセスできる。 POP 側でメールを削除しても IMAP 側に影響を与えない。逆もまた然り。
    2. 非 UNIX アカウントBに届いたメールは他ドメインのアカウントB'に転送する。
    3. 非 UNIX アカウントCに届いたメールは IMAP (WebMail) でのみアクセスできる。

    "UNIX アカウント" は当該マシンに存在する(/etc/passwd にエントリがある)ユーザー、"非 UNIX アカウント" はその逆で当該マシンに存在しない(/etc/passwd にエントリがない)ユーザーを指します。 個々にはそれほど複雑な要件ではないのですが、どのソフトウェアのどの機能をどのように利用すれば実現できるのかを見極めるところでなかなか苦戦しました。

    セットアップ手順はそれぞれ以下のような別エントリに分けます。

    • MTA / MDA - Postfix のセットアップ
    • POP3 / IMAP - Dovecot のセットアップ
    • Web Mail - SquirrelMail のセットアップ
    [ permalink ] [ 0 comment(s) ] [ 0 trackback(s) ]
  • 001018
    Seagate Barracuda 7200.10 (320GB) 購入
    miz 2006-12-02 23:12
    このエントリーを含むはてなブックマーク はてなブックマーク - Seagate Barracuda 7200.10 (320GB) 購入

    半ば死蔵されかかっている Dell PowerEdge SC430 に火を入れるべく、まずは形からということで HDD を増強しました。 購入したのは容量単価が非常に低い Seagate Barracuda 7200.10 の 320GB です。

    RAID を組むためにこれを二台と、接続するための SATA 用ケーブルを購入。 一時期、購入半年で HDD がバタバタと死んでゆく経験をしたため、HDD には500円の追加で10ヶ月保証をつけておきました。 ケーブルは Dell PowerEdge SC430 の HDD 取り付け位置から考えて、片側L字コネクタを選択。

    HDD
    メーカー Seagate
    型番 Barracuda 7200.10 (ST3320620AS)
    インタフェース SATA II (3Gb/s)
    容量 320GB
    速度 7,200rpm
    キャッシュ 16MB
    SATA ケーブル
    メーカー Ainex
    型番 SAT-3007LBL
    インタフェース SATA
    ケーブル長 70cm
    コネクタ 片側L字(ラッチなし)

    我が家には Dell PowerEdge SC430 が二台あるので、既存の2台の HDD を片側に寄せて、購入した2台を空いたマシンに載せました。 ケーブルは、既存 HDD を真似て取り回そうとすると 70cm では微妙に足りませんでした。 ただ、コネクタの形状は正解。 ストレート型のコネクタだと間違いなくケースと干渉するし、ラッチ付だと M/B 側のコネクタが干渉しそう。

    さぁ、投資した分使うぞ。

    [ permalink ] [ 0 comment(s) ] [ 0 trackback(s) ]
  • 000894
    dhcp / iptables を組み合わせた仮想的なネットワーク分離
    miz 2006-06-24 22:58
    このエントリーを含むはてなブックマーク はてなブックマーク - dhcp / iptables を組み合わせた仮想的なネットワーク分離

    ぼくの自宅環境では DHCP サーバーが稼動しているので、ハブに PC をつなぐだけでインターネット環境に出られるようになっています。 これまでは既存の自宅 LAN に直接参加させていたのですが、セキュリティ上はあまり好ましくない状況です。 そこで今回、dhcp による IP アドレスのアサインと iptables によるフィルタリングを組み合わせることで、登録されていない PC は仮想的に分離された別の LAN に参加させるように設定します。

    今回の設定で実現できる動作

    今回の設定では以下のような振る舞いを実現します。

    PC をハブにつなぐと、自動的に IP アドレスなどの情報が設定されます。 この情報を用いることでインターネットへの NAPT 経由のアクセスが可能となります。 さらに、登録済みの PC の場合は自宅 LAN 内のサービスを利用できます。 しかし、登録していない PC からは自宅 LAN へは接続できません。

    基本アイディアはシンプルで、同一の Ethernet セグメントに異なる IP サブネットワークを重畳させることで仮想的な分離を実現します。 一方のサブネットワークは通常の LAN で、比較的自由に振舞うことのできる環境です。 LAN 内のサーバーが提供する各種サービスはすべて利用可能です。 もう一方のサブネットワークは制限された LAN で、インターネットに出ることのみに行動を制限します。 LAN 内のサービスは(DHCP / DNS など必須のもの以外は)利用できません。 互いのサブネットワーク間の IP による通信はすべて禁止とします。

    同一の Ethernet に二つの IP サブネットワークが載っている状態は慣れないと直感的には理解しにくいかもしれませんが、Ethernet と TCP/IP のプロトコル・スタックはこういったことができるような設計になっています(詳細はここでは取り上げませんが、ARP が今回の構成のキモとなります)。 しかし、ある程度ネットワークの知識のある方なら思い当たるでしょうが、この構成にはいくらでも抜け穴があります。 制限された LAN の中でも、もう一方の LAN で使用している IP アドレスを覗き読むことが可能です。 IP アドレスがわかれば、DHCP に頼らずに直接 NIC にアドレスを指定でき、もう一方の LAN に入ってゆけます。 インターネット層よりも上での分離なので、これは仕方のないことです。 完全な分離を目指すのであれば他の方法を検討すべきでしょう。 ここではあくまでも、自宅 LAN へ参加する障壁を高くすることでリスクを少しでもおさえることを目的とします。

    必要なツール / コマンド / 機能

    Linux Kernel 2.6 の機能を使用しますので、相応のディストリビューションを用意します。 その他に以下のツール / 機能も使用します。

    IP alias
    IP alias を使用すると、ひとつの NIC に複数の IP アドレスを割り当てることができます。Linux Kernel の機能で、ifconfig コマンドで設定することが可能です。
    dhcpd
    ネットワーク関連の設定を自動化するデーモンです。登録の有無を判断してクライアントPCを適切なサブネットワークに所属させるために使用します。
    iptables
    Linux の IP パケットフィルタリング・ルールの制御を行うコマンドです。各サブネットワークに適切なサービスのみを提供し、サブネットワーク間の通信を制御するために使用します。

    これらを組み合わせることで、LAN の仮想的な分離を実現します。 Kernel コンパイルのコンフィギュレーションによっては iptables / IP alias が機能しないかもしれません。 その場合は insmod でモジュールを読み込むか、設定を変更して Linux Kernel の再構築を行ってください。

    それぞれのコマンドについてのリファレンスをご紹介します。

    • Setting up IP Aliasing on A Linux Machine Mini-HOWTO - JF
    • Manpage of dhcpd-options - JM
    • Manpage of IPTABLES - JM

    iptables については、コマンドそのものよりも Linux の IP パケットフィルタリングについてきちんと理解しておくことが非常に重要です。 その目的には、以下のドキュメントは非常に役立ちます。 TCP/IP の基礎のお勉強にもなりますのでざっと目を通してください。。

    • Iptables Tutorial 1.2.0
    • Iptablesチュートリアル 1.2.0(Tatsuya Nonogaki 氏による日本語訳)
    想定する構成

    以降の説明では各ネットワークを以下のように想定します。

    目的 Subnet NIC
    GLOBAL 0.0.0.0/0 ppp0
    自宅 LAN 172.16.100.0/24 eth0
    制限された LAN 172.16.200.0/24 eth0:0
    NIC に複数の IP アドレスを割り当てる

    設定ファイル /etc/sysconfig/network-scripts/ifcfg-eth0:0 を以下の内容で作成します。 ifcfg-eth0 を雛形にすると良いでしょう。

    DEVICE=eth0:0
    BOOTPROTO=static
    BROADCAST=172.16.200.255
    IPADDR=172.16.200.254
    NETMASK=255.255.255.0
    NETWORK=172.16.200.0
    ONBOOT=yes
    TYPE=Ethernet

    続いて eth0:0 を有効化します。

    # ifup eth0\:0

    ifconfig などで 172.16.200.254 のアドレスを持つ NIC を確認してください。

    dhcpd の設定

    多くの Linux で採用されている ISC の dhcpd は、設定ファイルにマッピング情報をもつことで、NIC の MAC アドレスから割り当てる IP アドレスを判断することが出来ます。 設定ファイルにマッピング情報が登録されていない PC (正確には NIC)は “unknown-clients” として扱われます。 この機能を利用すると、登録済みの PC と未登録の PC とで割り当てる IP アドレスを切り分けることが可能になります。 設定ファイルは /etc/dhcpd.conf となります。 まず、登録済み PC に対する設定を行いましょう。

    pool {
      deny unknown-clients;
    
      range 172.16.100.1 172.16.100.253;
      option subnet-mask 255.255.255.0;
      option broadcast-address 172.16.100.255;
      option routers 172.16.100.254;
      option domain-name-servers 172.16.100.254;
      default-lease-time   86400;
      max-lease-time     2592000;
    
      host registered01 {
        hardware ethernet 00:11:22:33:44:55;
        fixed-address 172.16.100.1;
      }
    }

    1行目で未登録 PC への IP アドレス割り当てを拒否しています。 以降は 172.16.100.0/24 のサブネットワークの設定です。 最後に記述のある “host ~” の部分が PC の登録となります。 NIC の MAC アドレスと割り当てる IP アドレスの対が記述されていますね。

    続いて、未登録 PC に対する設定です。

    pool {
      allow unknown-clients;
    
      range 172.16.200.1 172.16.200.127;
      option subnet-mask 255.255.255.0;
      option broadcast-address 172.16.200.255;
      option routers 172.16.200.254;
      option domain-name-servers 172.16.200.254;
      default-lease-time   300 ;
      max-lease-time       300 ;
    }

    こちらは未登録 PC の接続を許可しています。 未登録のものはこちら側の pool から IP アドレスを割り当てられるので、172.16.200.0/24 を使用することになります。

    以上の設定を含む dhcpd.conf 全体のサンプルは以下となります。

    • dhcpd.conf

    この設定により、登録済みの PC と未登録の PC は分離されたサブネットワークに所属することになります。

    iptables の設定

    続いて、サブネットワークごとに提供サービスを切り分ける構成を iptables によるフィルタリングで実現します。 最初に各ネットワークに便宜上の名前をつけます。

    名前 NIC Subnet 概要
    GLOBAL ppp0 0.0.0.0/0 いわゆるインターネット。
    KNOWN eth0 172.16.100.0/24 登録済み PC が参加するネットワーク。GLOBAL への NAPT および LAN 内のサービスを全て利用可能。
    UNKNOWN eth0:0 172.16.200.0/24 未登録 PC が参加するネットワーク。GLOBAL への NAPT は制限なく利用できるが、LAN 内のサービスは一部を除いて利用不可。

    繰り返しになりますが、iptables を利用する前に以下にざっと目を通しておいてください。 TCP/IP プロトコル・スイートの基本的な動作と、Linux の IP パケット・フィルタリングの動作原理を理解していないと iptables を使いこなすのは難しいでしょう。

    • Iptables Tutorial 1.2.0
    • Iptablesチュートリアル 1.2.0(Tatsuya Nonogaki 氏による日本語訳)

    特に“Chapter 6. Traversing of tables and chains(日本語訳:テーブルとチェーンの道のり)”が重要です。 3つのテーブルと、それぞれのテーブルに属するビルトイン・チェーンの役割分担はしっかりと理解してください。 ipchains 時代を知る人が陥りがちなのが、転送パケットには INPUT / OUTPUT が適用されない点。 転送パケットは PREROUTING / FORWARD / POSTROUTING のみが適用され、INPUT / OUTPUT が適用されるのは当該 Linux Box 自身が発信元 / 送信先であるパケットのみです。 ipchains は転送パケットを INPUT => FORWARD => OUTPUT と処理していたため、これを想定すると iptables では痛い目を見ます。 ご注意ください。

    これ以降、これら 3 つのテーブル、5 種類のビルトイン・チェーンに対して、ユーザー定義チェーンとルールを追加することで、様々なフィルタリングを実現します。

    iptables 実行時の注意

    iptables を実行する際はスクリプトなどで一括設定を行いましょう。 実環境にて手作業でチクチクと設定変更を行うと、その過程で一時的にセキュリティが低下するタイミングが発生する恐れがあります。 さらに、スクリプト言えども0秒で設定が完了するわけではありません。 スクリプトの最初に以下の3行を入れておきましょう。

    iptables -I INPUT -j DROP
    iptables -I OUTPUT -j DROP
    iptables -I FORWARD -j DROP

    これは、パケットの出入りと転送全てを停止します。 そして最後に以下の3行で停止状態を解除します。

    iptables -D INPUT -j DROP
    iptables -D OUTPUT -j DROP
    iptables -D FORWARD -j DROP

    停止している間に届いたパケットはすべて破棄されます。 TCP であれば再送機能でリカバリされるはずですが、UDP などの場合の挙動はアプリケーション依存です。 ご注意ください。

    ネットワークごとの処理振り分け

    一つの Linux Box は1セットの IP table を持ちます。 “NIC ごとに1セット”ではなく Linux Box につき1セットです。 つまり、GLOBAL から入ってくるパケットも KNOWN から入ってくるパケットもどちらも同一の INPUT チェーンで処理されます。 出てゆくパケットも同様です。 そこで、ルールの設定をシンプルにするために INPUT と OUTPUT の最初の時点で GLOBAL / KNOWN / UNKNOWN を別チェーンに振り分けてしまいます。

    最初に、ユーザー定義チェーンを追加します。

    iptables -N INPUT_GLOBAL
    iptables -N INPUT_KNOWN
    iptables -N INPUT_UNKNOWN
    iptables -N OUTPUT_GLOBAL
    iptables -N OUTPUT_KNOWN
    iptables -N OUTPUT_UNKNOWN

    続いて、INPUT 側のパケットを振り分けます。 ここで注意したいのですが、iptables は “eth0” と “eth0:0” を区別できません。 そこで、KNOWN と UNKNOWN の識別にはネットワーク・アドレスを使用します。

    iptable -P INPUT DROP
    iptable -A INPUT -i lo -j ACCEPT
    iptable -A INPUT -i ppp0 -j INPUT_GLOBAL
    iptable -A INPUT -s 172.16.100.0/24 -j INPUT_KNOWN
    iptable -A INPUT -s 172.16.200.0/24 -j INPUT_UNKNOWN

    OUTPUT についても同様です。

    iptables -P OUTPUT DROP
    iptables -A OUTPUT -o lo -j ACCEPT
    iptables -A OUTPUT -o ppp0 -j OUTPUT_GLOBAL
    iptables -A OUTPUT -d 172.16.100.0/24 -j OUTPUT_KNOWN
    iptables -A OUTPUT -d 172.16.200.0/24 -j OUTPUT_UNKNOWN

    これ以降、各ネットワーク・インタフェースを出入りするパケットは、それぞれ対応する INPUT_* チェーンと OUTPUT_* チェーンでフィルタリングします。

    サービスの提供 / 利用

    ネットワーク・インタフェースごとのフィルタリング・ルールを考えるにあたって、サービスの提供と利用の概念が重要になります。 提供しているサービスは新規通信の開始要求を受け入れなければなりませんが、利用しているだけのものはこちら主導で通信を開始するのみです。 つまり、INPUT_* については以下のようにフィルタリング処理をおこなう必要があります。

    1. 提供サービスの incoming はすべて受け入れる
    2. 通信開始要求はすべて落とす
    3. 利用サービスの incoming はすべて受け入れる

    2 で通信開始要求を落としているので、3 にたどり着くものはすべて自分が開始した通信の応答パケットです。 逆に OUTPUT_* は以下のように設定します。

    1. 利用サービスの outgoing はすべて受け入れる
    2. 通信開始要求はすべて落とす
    3. 提供サービスの outgoing はすべて受け入れる

    INPUT_* とは「利用 / 提供」が逆になっています。 このあたりは直感的には理解しにくいかもしれないので、具体的な通信開始時のパケットのやりとりを想像してみてください。

    ここまで漠然と「通信開始要求」と書きましたが、TCP の SYN だけを指すわけではありません。 UDP や ICMP でもまとまりとして意味のある一連の通信が発生します。 その一連のパケットの一番最初のものを「通信開始要求」と呼んでいます。 iptable ではステートフル・パケット・フィルタリングが可能なので、通信開始要求に該当するパケットにマッチするルールを記述可能です。

    例として、GLOBAL のネットワークに HTTP (tcp/80) / HTTPS (tcp/443) を提供し、DNS (udp/53) を利用する場合のフィルタリング・ルールを挙げます。

    iptables -A INPUT_GLOBAL -p tcp --dport 80 -j ACCEPT
    iptables -A INPUT_GLOBAL -p tcp --dport 443 -j ACCEPT
    iptables -A INPUT_GLOBAL -m conntrack \
    ! --ctstate ESTABLISHED -j DROP
    iptables -A INPUT_GLOBAL -p udp --dport 53 -j ACCEPT
    
    iptables -A OUTPUT_GLOBAL -p udp --sport 53 -j ACCEPT
    iptables -A OUTPUT_GLOBAL -m conntrack
    ! --ctstate ESTABLISHED -j DROP
    iptables -A OUTPUT_GLOBAL -p tcp --sport 80 -j ACCEPT
    iptables -A OUTPUT_GLOBAL -p tcp --sport 443 -j ACCEPT
    FORWARD の設定

    FORWARD は以下のようなポリシーを設定します。

    • TCP のみ許可し、UDP / ICMP は FORWARD しない
    • KNOWN=>GLOBAL / UNKNOWN=>GLOBAL の通信は特に制限しない
    • GLOBAL=>KNOWN / GLOBAL=>UNKNOWN の通信開始要求はすべて落とす
    • KNOWN<=>UNKNOWN の通信はすべて落とす

    以上をフィルタリング・ルールに翻訳すると以下のようになります。

    iptables -A FORWARD ! -p tcp -j DROP
    iptables -A FORWARD -s 172.16.100.0/24 -o ppp0 -j ACCEPT
    iptables -A FORWARD -s 172.16.200.0/24 -o ppp0 -j ACCEPT
    iptables -A FORWARD -d 172.16.100.0/24 -i ppp0 \
    -m conntrack --ctstate ESTABLISHED -j ACCEPT
    iptables -A FORWARD -d 172.16.200.0/24 -i ppp0 \
    -m conntrack --ctstate ESTABLISHED -j ACCEPT
    iptables -P FORWARD DROP

    “-P”はデフォルト・ポリシーで、いずれにもマッチしなかった場合に適用されるターゲットを指定します。 ビルトイン・チェーンでのみ設定可能です。

    IP Masquerading (NAPT) の設定

    今回の環境では、グローバル IP アドレスを持つのは ppp0 だけで、他はすべてプライベート・アドレスを使用しています。 これでは、Linux Box 以外はインターネットに出てゆかれないので、NAPT を適用します。 NAPT はひとつのグローバル IP アドレスを複数のマシンで共用するためのしくみで、TCP / UDP のポートごとに各マシンに割り当てることが出来ます。 Linux Kernel で実装される NAPT は “IP Masquerade” と呼ばれています。

    IP Masuquerade の設定は nat テーブルの POSTROUTING チェーンにて行います。

    iptables -t nat -P POSTROUTING ACCEPT
    iptables -t nat -A POSTROUTING -s 172.16.100.0/24 \
    -o ppp0 -j MASQUERADE
    iptables -t nat -A POSTROUTING -s 172.16.200.0/24 \
    -o ppp0 -j MASQUERADE
    今回の環境は、ppp0 は動的に IP アドレスが振られるため IP Masquerade を使用しましたが、固定 IP の場合は SNAT を使用してください。
    ログの記録

    iptables ではターゲット “LOG” を利用することで syslog にログを残すことが出来ます。 特に多いのが、DROP するパケットをログに残しておきたいというニーズだと考えられます。 これを実現するためには「ログに記録して破棄」をおこなうユーザー定義チェーンを用意すると便利です。

    iptables -N LOGGED_DROP
    iptables -A LOGGED_DROP -j LOG
    iptables -A LOGGED_DROP -j DROP
    iptables 以外の設定

    iptables で設定するルール・ベースのフィルタリング以外にも、Linux Kernel のパラメータも幾つか設定したほうが良いです。

    ICMP echo のブロードキャストを無視します。 ブロードキャストの ICMP echo メッセージを許可すると、ネットワーク上で有効な IP アドレスを一覧される恐れがあります。

    echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

    他のマシンが ICMP ブロードキャスト・メッセージに不正に反応した場合でも、その旨をログには残しません(デフォルトでは warning が出力される)。 これは直接セキュリティの向上には寄与しませんが、ログが読みやすくなります。

    echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

    以下は NIC ごとに設定します。 どちらも、man-in-the-middle attack を防止するための設定です。

    for i in /proc/sys/net/ipv4/conf/* ; do
      ## Ignore Source Routed Packet
      echo 0 > ${i}/accept_source_route
      ## Ignore ICMP Redirect
      echo 0 > ${i}/accept_redirects
    done

    その他の設定項目については以下などを参照ください。

    • Linux Advanced Routing & Traffic Control HOWTO : Chapter 13. カーネルのネットワークパラメータ
    IP forwarding の設定

    Linux のディストリビューションや設定によっては、フォワードが無効になっている場合があります。 この場合は Linux Box がルーターとして動作することができません。 以下のように IP forwarding を有効にします。

    echo 1 > /proc/sys/net/ipv4/ip_forward

    以上のようなことを考慮しつつ、まとめられる部分は関数にしてくくりだしたりしました。 最終的に出来上がったスクリプトは以下のようになります。 (セキュリティ上、実環境で使っているものを少し改変してあります)

    • reftables

    今回は dhcp と組み合わせて未登録 PC を隔離するという特殊な設定でしたが、フィルタリングの基本的な考え方は再利用が可能な筈です。 特に上で紹介したチュートリアルを読んだ上で、それぞれの環境に合ったフィルタリング・ルールを考えてみてください。

    [ permalink ] [ 0 comment(s) ] [ 0 trackback(s) ]
  • 000884
    勝手 yum リポジトリ
    miz 2006-06-18 15:21
    このエントリーを含むはてなブックマーク はてなブックマーク - 勝手 yum リポジトリ

    Dell PowerEdge SC430 に CentOS4.3 をインストールしました。 その後、何度かインストールし直したりしていじくっていたのですが、そろそろ本格的にセットアップを開始しようかと思います。

    このマシンの役目は、現在のルーター兼Firewall兼Webサーバー兼メールサーバー兼ネームサーバー etc マシンのリプレース。 直接インターネットに接続することになるので、パッケージの最新状況を常に把握しておくことは必須です。 yum - Yellowdog Updater Modified を使用して、ネットワーク越しに最新パッケージを取得することにします。

    yum によるパッケージの更新

    最初に、そのパッケージを本当に信頼してよいのかを確認するための PGP キーをインポートします。 yum は更新状況のチェック / 取得を行いますが、最終的なパッケージ管理は RPM が行います。 以下のように rpm に PGP キーを読み込ませましょう。

    # rpm --import /usr/share/rhn/RPM-GPG-KEY-centos4

    続いて、更新の確認を行います。

    # yum check-update

    ズラリとパッケージの更新が一覧されたと思います。 以下のようにするとダウンロードして更新が適用されます。

    # yum update
    勝手 yum リポジトリの準備 / 設定

    このように、yum によりパッケージ更新の追跡 / 適用が可能になります。 他にも機能があり、ネットワーク越しにパッケージの追加も可能です。

    # yum install <package>

    このときに、いちいち Web に出て行くのも遅くて面倒です。 更新分は常に外にチェックしに行くのは仕方ありませんが、ベース・インストールイメージは既にダウンロードしてあるので(参照)、これを利用しないともったいない。 そこで、勝手に yum のレポジトリを立ててしまいます。 CentOS ディレクトリに加えて、headers ディレクトリと repodata ディレクトリも Disk1 からコピーして以下のような配置にします。

    • /tmp
      • /CentOS
        • /4.3
          • /CentOS
            • /base
            • /RPMS
          • /headers
          • /repodata

    これに http://example.com/CentOS でアクセスできるように Web サーバーを設定します。 最後に /etc/yum.repos.d/CentOS-Base.repo ファイルを以下のように変更します。

    [base]
    name=CentOS-$releasever - Base
    baseurl=http://example.com/CentOS/4.3/
    gpgcheck=1
    gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos4
    (省略)

    以上で、base に関しては LAN 内だけで完結できるようになりました。 パッケージの追加 / 削除が早くて素敵です。 もちろん、更新があるものについてはきちんと最新版を持ってきてくれます。

    定期更新チェック

    最後に、パッケージ更新の有無を定期的にチェックするよう設定します。 yum をデーモンとして起動しておけば定期的に更新をチェックしに行き、更新の適用も行ってくれるのですが、サーバーマシンでそれもちょっと気持ち悪い。 更新の適用は手動で行いたいので、あくまでもチェックだけを行うスクリプトを作成します。

    #!/bin/sh
    
    ADMINMAIL=admin-mobile@example.com
    SUBJECT="yum find updated package(s) at `hostname`"
    
    # yum returns status code 0 when there is no updates
    yum check-update > /dev/null 2>&1
    
    if [ $? != 0 ]; then
      yum check-update | mail -s "${SUBJECT}" ${ADMINMAIL}
    fi

    これを crontab に設定しておけば、定期的に更新をチェックして、更新が存在する場合はメールを送信します。

    [ permalink ] [ 0 comment(s) ] [ 0 trackback(s) ]
  • 000882
    GbE 導入
    miz 2006-06-18 02:24
    このエントリーを含むはてなブックマーク はてなブックマーク - GbE 導入
    Hub and NIC

    Dell PowerEdge SC430 を購入したことにより、とうとう我が家にも GbE 対応機種が登場したことになります。 しかし、NIC だけが GbE に対応しても、hub やケーブルが対応していなければ意味がありません。 宝の持ち腐れ。 もったいない。 というわけで、これらを購入して LAN を GbE 化しました。

    • HUB : corega CG-SW05GTV2B
    • NIC : BUFFALO LGY-PCI-GT

    LGY-PCI-GT は、メインマシン用。 残念ながらメインマシンは 32bit 33MHz の PCI v.2.2 にしか対応していません。 32bit 33MHz の理論上の帯域は 132MByte/sec となります。 GbE はバイト換算で 125MByte/sec。 数字は足りているように見えますが、諸々考えると心許ないですな。 でも 100BASE-TX よりは早くなるだろうということで、メインマシンも GbE 化します。

    “GbE” と漠然と書いていますが、正確には 1000BASE-T なので Cat.5e のケーブルが必要となります。 しかし、生憎これまでは 100BASE-TX を使っていたので手持ちのケーブルはすべて Cat.5。 これも買い足さなければ。 というわけでお買い物へ。 現時点での主流は Cat.6 なのでわざわざ Cat.5e を探して買う必要もありません。 価格差もそれほどないのでここは素直に Cat.6 で。 それにしても、1000BASE-T 対応の NIC が2,000円を切ってるなんて驚き。

    HUB corega CG-SW05GTV2B 6,180円
    NIC BUFFALO LGY-PCI-GT 1,780円
    NIC
    (onboard)
    Broadcom BCM95751 (5750) --
    cable KB-T6-02(Cat. 6 / 2m / ストレート) 500円 x 2
    cable KB-T6-03(Cat. 6 / 3m / ストレート) 600円

    さて、勢いで購入したのは良いけれど果たしてどれだけネットワーク性能が向上したのかが気になるところです。 パフォーマンス測定を行ってみましょう。

    今回はスループットを指標にします。 ネットワークのスループットを測定するツールは幾つかありますが、Windows でも Linux でも動くことが必要な条件なので ttcp を選択。

    • ttcp

    Windows 用は cygwin に含まれているのでそれをインストール。 Linux 用は上記サイトからソースを入手して gcc でコンパイル。

    $ gcc -o ttcp ttcp.c

    警告が出ますが、無視して大丈夫なようです。 コマンド一発のシンプルなツールですが、思いのほかいろいろな機能があります。 今回は TCP と UDP の場合をそれぞれ計測します。 まず片側で ttcp を -r オプション付きで起動し、続いてもう一方で -t オプション付きで起動します。以下は UDP の場合の例。TCP の場合は“-u”を除く。

    $ ttcp -r -s -u
    $ ttcp -t -s -u <host>

    今回はこれに加えてデータ量を指定する -l -n を使い、600,000,000byte の場合を計測しました。

    ttcp を使うと理想的な状態でのネットワークの性能は判断できますが、もっと重要なのは普段の作業効率がどれだけ向上するかってこと。 プロトコルの特性やエンコーディングなどによるオーバーヘッド、ネットワーク以外のリソースによるボトルネックなど色々な要素が絡むので、実際の作業に近い環境で測定することにします。 帯域を多く使う作業で真っ先に思い浮かぶのがファイルのやりとり。 そこで、HTTP と SMB(Windows のファイル共有)も併せて測定しました。

    計測には二台のPCを使用し、片側からもう一方へデータを送出します。 片側の NIC は常に BCM95751 に固定し、もう一方の NIC を替えて計測しました。 結果はこんな感じになりました。 単位は Mbps です。

    100Mbps 1000Mbps
    (LGY-PCI-GT)
    1000Mbps
    (BCM95751)
    ttcp - udp 91.589 791.979 890.591
    ttcp - tcp 73.324 243.621 897.576
    HTTP (wget) 55.008 105.516 408.204
    SMB 9.091 118.150 141.202

    HTTP と SMB は 630MB 強のファイルをやりとりしました。 HTTP の 408.204Mbps という数字は、このファイルをダウンロードするのに 13 秒程度で完了することを意味します。 CD-ROM 一枚分がほんの十数秒。 早いねー。 ttcp による計測だけではなく、HTTP や SMB もこれだけスループットが向上しているのであれば、 GbE を導入した価値は十分にあるといえます。

    [ permalink ] [ 0 comment(s) ] [ 0 trackback(s) ]
  • 000878
    CentOS 4.3 を HTTP 経由でインストール
    miz 2006-06-13 02:18
    このエントリーを含むはてなブックマーク はてなブックマーク - CentOS 4.3 を HTTP 経由でインストール

    PowerEdge SC430 を購入したので、久し振りに Linux をインストールしてみました。

    これまでは Fedora Core を使っていたのだけれど、アップデートの早さに追従するのはなかなか骨が折れました。 そこで今回は、RHEL から派生した(一応)エンタープライズ向けのディストリビューションである CentOS を使ってみることにしました。

    • www.centos.org

    CentOS は "The Community ENTerprise Operationg System" から名付けられています。 中身はRedhat 社が公開しているソースコード (SRPM) からバイナリを構築したもので、差分は Redhat 社その他が権利を保有している部分(ロゴや商用パッケージ)の有無となります。 Fedora Core とは異なり、リリース・スケジュールは基本的に RHEL に準じるので安定したパッケージ・マネジメントが期待できます。 サーバーマシンであんなにボコボコとアップデートがかかるのは正直怖い。 あるアップデートが 2,3 日で上書きされたりするしね。

    もちろん、Fedora Core の意義を否定するものではなくて、あくまでも「サーバー・マシンとして使うのなら」ということ。 もう一台の SC430 にインストールするにはやぶさかではない。 というかむしろ入れて遊びたい。 そのための二台目です。

    毎度のことながら、インストールのために CD-ROM を焼くのが嫌いなのでネットワーク経由でインストールすることにします。 ところが! CentOS 4.3 は FD からのインストーラ起動が行えません。 ブート・イメージだけで 6.0MB あります。 FD に入らない……。 確か Fedora Core 3 からは既に FD からのインストールは棄てられてたんだよな。 仕方がないので一枚 (Disk1) だけ CD-ROM を焼き、そこからブートしてネットワーク・インストールを行いました。

    以下手順。

    前提

    ここでの手順は、同一の LAN 内に充分なディスク・スペースを持った Linux サーバーが存在していることが前提です。 自前で Linux サーバーを用意できない場合はインターネット経由でどこかのサーバーからファイルを取得してください。 手順も一部変化しますのでご注意ください(“2~4枚目のCD-ROMは不要”など)。 もしかすると、NTFS の Windows 2000 に Apache をインストールした場合も HTTP 経由のインストールが可能かもしれません。

    ISO イメージの入手

    適当なミラーから CentOS 4.3 の ISO イメージを入手します。

    • isoredirect.centos.org

    PowerEdge SC430 は Intel Pentium D 搭載なので、アーキテクチャは x86_64 を選びます。 必要なイメージは全部で4つです。

    • CentOS-4.3-x86_64-bin1of4.iso
    • CentOS-4.3-x86_64-bin2of4.iso
    • CentOS-4.3-x86_64-bin3of4.iso
    • CentOS-4.3-x86_64-bin4of4.iso
    起動ディスクの作成

    適当な CD-R 書き込みソフトで一枚目 (CentOS-4.3-x86_64-bin1of4.iso) を焼いて起動ディスクを作成します。

    ディスクを HTTP 経由で公開

    既存のサーバー上で行う作業です。

    4枚すべてのディスクの中身を、HTTP 経由でアクセスできるようにします。 まずは4つの ISO イメージに含まれる *.rpm ファイルを以下のディレクトリ構造に集約します。

    • /tmp
      • /CentOS
        • /4.3
          • /CentOS
            • /base
            • /RPMS
     # mkdir -p /tmp/CentOS/4.3/CentOS
     # mkdir -p /tmp/CentOS/mount
    
     # mount -o loop -o ro CentOS-4.3-x86_64-bin1of4.iso \
     > /tmp/CentOS/mount
     # cp -r /tmp/CentOS/mount/CentOS/* \
     > /tmp/CentOS/4.3/CentOS/
     # umount /tmp/CentOS/mount
    
     # mount -o loop -o ro CentOS-4.3-x86_64-bin2of4.iso \
     > /tmp/CentOS/mount
     # cp -r /tmp/CentOS/mount/CentOS/RPM/* \
     > /tmp/CentOS/4.3/CentOS/RPM/
     # umount /tmp/CentOS/mount
    
     # mount -o loop -o ro CentOS-4.3-x86_64-bin3of4.iso \
     > /tmp/CentOS/mount
     # cp -r /tmp/CentOS/mount/CentOS/RPM/* \
     > /tmp/CentOS/4.3/CentOS/RPM/
     # umount /tmp/CentOS/mount
    
     # mount -o loop -o ro CentOS-4.3-x86_64-bin4of4.iso \
     > /tmp/CentOS/mount
     # cp -r /tmp/CentOS/mount/CentOS/RPM/* \
     > /tmp/CentOS/4.3/CentOS/RPM/
     # umount /tmp/CentOS/mount
    

    続いて Apache の設定です。 httpd.conf に以下の行を追加し、"/CentOS" というパスでインストール・ファイルにアクセスできるように設定します。 インストーラでのポート番号の指定方法が怪しかったので、Well-known の80番を使用しました。

    Alias /CentOS /tmp/CentOS

    Apache を再起動しましょう。

     $ ./bin/apachectl restart

    念のため、ブラウザからアクセスできることを確認しておくと安心です。

    http://example.com/CentOS
    インストール開始

    先ほど作成した起動CDを使用して、PowerEdge SC430 を起動します。 “boot:” というプロンプトが表示されたら、インストール・メソッドを指定できるように以下のとおり入力します。

    boot: linux askmethod
    言語 / キーボードの選択

    “インストールに使用する言語” にはお好きなものを選択してください。 “キーボードの種類” ではお使いのものを。 (選択肢の例示で、ぼくが選んだものがある程度ばれてしまうわけですが)。

    インストール方法の選択

    インストール方法の選択画面が表示されるので、“HTTP” を選択します。

    TCP/IP の設定

    NIC の設定です。 今回使用した環境では DHCP サーバーが立っているので「動的 IP 設定を使用する」を選択すれば自動的に NIC が設定されます。 そうでない環境では、有効な IP アドレス及びサブネット・マスクを指定しましょう。

    HTTP の設定

    インストール・メディアを取得する HTTP サーバーの指定です。 Web サイト名は IP アドレスでも構わないはずですが、Apache で Name based Virtual Host を使用している際は注意が必要です。 ディレクトリは “CentOS” ディレクトリのひとつ上を指定するので、今回は “/CentOS/4.3” と入力。

    ここまでは昔懐かしのインタフェースですが、ここからはマウスも使えちゃうリッチなanaconda が立ち上がります。


    以上の手順でネットワーク・インストールが行えます。 ここから先は一般的な Linux のインストール手順なのでエントリーを改めるか、割愛します。

    [ permalink ] [ 0 comment(s) ] [ 0 trackback(s) ]
  • 000877
    Dell PowerEdge SC430 購入
    miz 2006-06-13 01:16
    このエントリーを含むはてなブックマーク はてなブックマーク - Dell PowerEdge SC430 購入
    • PowerEdge SC430 製品詳細
    • オンライン広告限定ページ

    Intel Pentium D 820 (2.8GHz / 2 core / 2x1MB L2 Cache / EM64T / 800MHz FSB) 搭載で29,980円(消費税込 / 送料込)という驚異的な低価格に惹かれてポチッとお買い上げ。 しかも「数量:2」。 だって、フェイルオーバーとかさせてみたいんだもの。

    もう少し詳しいスペックは以下。

    CPU Intel Pentium D 820 (2.80GHz / 2 core / 2x1MB L2 Cache / EM64T / 800MHz FSB)
    Chipset Intel E7230
    RAM 512MB (256MB x 2) (533MHz / DDR2 SDRAM / ECC)
    HDD WDC WD800JD-75MSA2 (80GB / SATA / 7200rpm)
    Optical LITE-ON CD-ROM LTN-4891S (min x20 / max x48)
    OS N/A

    ちょっと気をつけたいのが対応メモリ。 この SC430 は ECC が必須です。 non-ECC のメモリは挿しても動作しないことが報告されています。 「ECC / non-ECC の混在がダメ」なのではなくて non-ECC がそもそもダメ。 メモリを増設する場合のコストが幾分高くなるのでこれは注意です。 とはいえ、これで30,000円切るんだもんな。 メイン・マシンとして使うには多少難ありだけれど、自宅サーバー / 開発機として使用するには充分。

    ただ Dell のちょいとした難点は発送が遅いこと。 もう少し正確には「国際輸送」に時間がかかりすぎること。 荷物のステータスを Web から確認できるのだけれど、6/1にどこかの国を発った SC430 が日本に着いたのは 6/8 の夕方でした。 "Made in China" という文字がみえるので、日本海を渡るのに一週間もかかるってこと?

    しっかし恐ろしいことに、同等スペックのものがたった二週間で22,980円まで下がっているんだよね。 何その値崩れ具合は。 ぼくの SC430 がぶらぶらと一週間も船旅を続けている間に何があったというのか。

    [ permalink ] [ 0 comment(s) ] [ 0 trackback(s) ]
  • 000670
    pgpool による PostgreSQL のレプリケーション
    miz 2005-10-12 02:39
    このエントリーを含むはてなブックマーク はてなブックマーク - pgpool による PostgreSQL のレプリケーション
    • pgpool

    「麦酒堂」は PostgreSQL で運用しています. 今回,定期バックアップの代わりにレプリケーションを行ってみました. PostgreSQL のレプリケーションを行うには幾つか方法があるのですが,今回は一番楽そうな pgpool を使用することにします.

    現在 PostgreSQL が動いているのは Linux マシンです. これとは別に,新たに Mac OS X 上に PostgreSQL をセットアップし, Linux を Master,Mac を Secondary として運用します. pgpool はデフォルト設定では参照系も Master / Secondary 双方にリクエストを投げ,その結果をつき合わせます. 麦酒堂の環境は Master と Secondary の性能差があるため,デフォルトだと遅いほうに引っ張られます. 今回の目的はバックアップの代替としてのレプリケーションなので,select 結果の整合性チェックまでは求めません. そこで更新系処理のみを Master / Secondary 双方に対して行い,参照系は Master のみで処理するように設定します.

    インストール

    Master である Linux マシンに pgpool をインストールします.

    上記サイトからファイルをダウンロードして解凍します. ここでは 2005-10-12 時点で最新の 2.6.3 を使用します.

    $ wget http://.../pgpool-2.6.3.tar.gz
    $ tar zxvf pgpool-2.6.3.tar.gz

    続いて,お決まりの configure / make です.

    $ cd pgpool-2.6.3
    $ ./configure \
    > --prefix=/home/pguser/pgpool-2.6.3
    $ make
    $ make install
    $ ln -s /home/pguser/pgpool-2.6.3 \
    > /home/pguser/pgpool
    Master 側 PostgreSQL の設定

    PostgreSQL は通常は UNIX domain socket を使用します. 今回,マシンをまたがる接続が必要となるため,TCP/IP を使用するように設定を変更します. また,待ち受けに使う TCP のポート番号はデフォルト 5432 と衝突しないように 5433 とします. 以上の設定変更には ${PG_DATA}/postgresql.conf を編集します.

    tcpip_socket = true
    ...
    port = 5433
    Secondary 側 PostgreSQL の設定

    最初に,データベースクラスターを新規に作成します. 後ほど,Master からデータをここに移します.

    $ mkdir ~/pgdata/
    $ initdb -D ~/pgdata/ -U pguser

    設定は Master と同様です. TCP/IP によるリクエストを受け付けて,待ち受けは 5433 番ポートにします. Master とはマシンが異なるので,同じポート番号を使用しても問題ありません.

    tcpip_socket = true
    ...
    port = 5433

    Master 側マシンの pgpool から接続できるように ${PG_DATA}/pg_hba.conf を変更します.

    host  all  all  192.168.1.0  255.255.255.0  trust
    pgpool の設定

    いよいよ今回のキモとなる pgpool の設定です. 設定ファイルは pgpool/etc/pgpool.conf.sample を pgpool/etc/pgpool.conf とコピーして使用します.

    今回 pgpool はアプリケーションに対して透過的に動作するように設定します. そのために,待ち受けポート番号は PostgreSQL のデフォルトである 5432 とします.

    listen_addresses = '*'
    port = 5432

    Master / Secondary それぞれに接続するための設定を行います.

    backend_host_name = '127.0.0.1'
    backend_port = 5433
    ...
    secondary_backend_host_name = '192.168.1.2'
    secondary_backend_port = 5433

    今回は Master と Secondary の間でレプリケーションを行います. これにより,同じデータが二箇所に保存されるようになります.

    replication_mode = true

    最後に,ロード・バランス・モードで動作するように指定します. 通常のモードでは,select 時に Master と Secondary 両方にクエリーを投げてその結果の整合性をチェックします. 上でも書いたように,select 時は Master のみにリクエストを投げてくれれば充分なので,1:0 の比でロード・バランスするような設定を行います.

    load_balance_mode = true
    weight_master = 1
    weight_secondary = 0

    まだこの時点では pgpool を起動しないで下さい.

    データの複製

    Master のデータを Secondary に複製します. pgpool はオブジェクトIDなども含めて,Master と Secondary が同期されていることが前提です. このような複製はデータファイルの丸ごとコピーか pg_dumpall によるデータ移行で実現できるのですが,ファイルコピーではうまく行きませんでした. CPU アーキテクチャの違いが原因ではないだろうかという気がします. そこで今回は pg_dumpall を採用します.

    $ pg_dumpall -p 5433 > pg_dumpall.dmp
    $ scp pg_dumpall.dmp pguser@192.168.1.2:~/
    $ psql -p 5433 -f pg_dumpall.dmp \
    > -U pguser template1
    動作確認
    [ permalink ] [ 0 comment(s) ]
  • 000641
    コマンドラインで計算
    miz 2005-09-14 22:01
    このエントリーを含むはてなブックマーク はてなブックマーク - コマンドラインで計算

    日々,ちょっとした計算をする場面があります. そんなときにぼくは TeraTerm のウィンドウに手を伸ばします. "cd" を慌てて入力して "dc" と typo した経験があるのはぼくだけではないと思いますが,この dc って実は計算機なんですよ.

    • dc

    逆ポーランド記法で入力する任意精度の計算機です. 逆ポーランドという時点で嫌になる(もしくはわけがわからない)人もいるかもしれませんが,ぼくのように常にターミナルが起動している人間は覚えておいて損はないと思いますよ. 逆ポーランド記法で書かれた計算式は,情報工学 / 計算機工学を学んだ人にはお馴染みのスタックを使って簡単に計算できます. そんなに難しい概念じゃないし,演算子の優先順位にとらわれずに入力できて非常に便利(つまりは括弧がいりません).

    • 逆ポーランド記法

    以下,使い方を簡単に.

    dc は標準入力から式を受け取ります. p は,スタックの TOP を表示するためのコマンドです.

    $ echo '25000 50 / p' | dc
    500

    同様のことが "-e" オプションでも可能です.

    $ dc -e '25000 50 / p'
    500

    スクリプトも使えます.

    $ cat calc.txt
    2500
    50
    /
    p
    
    $ dc -f calc.txt
    50

    対話形式も可能です. このモードはちょっと込み入った計算をするには非常に便利です.

    $ dc
    
    # スタックに積んで TOP を表示
    1 100 p
    100
    
    #スタックの中身を表示
    f
    1
    100
    
    # 割り算を実行
    / p
    0
    
    # スタックをクリアして TOP を表示
    c p
    dc: stack empty
    
    # 精度を 10 に変更
    10 k
    
    # 割り算を実行
    1 100 k
    .0100000000
    
    # 2 の平方根を計算
    2 v p
    1.4142135623
    
    # 終了
    quit
    [ permalink ] [ 0 comment(s) ]
  • 000605
    SpamAssassin 導入
    miz 2005-08-01 01:03
    このエントリーを含むはてなブックマーク はてなブックマーク - SpamAssassin 導入

    手動で spam メールを消すのにも嫌気が差してきたので,丁度 Software Design で取り上げられていた SpamAssassin を導入することにしました.

    • Software Design - 技術評論社
    • SpamAssassin

    Software Design の記事によると,なかなか精度もよろしい様子です.

    ちなみに,いわゆる「スパムメール」を “SPAM” と全部キャピタルで表記してはいけません. “spam” や “Spam” と表記しましょうね. 本家がそういっていますから.

    • SPAM and the Internet

    自宅のサーバーは, MTA は qmail,MDA は procmail を使用しています. Software Design の記事は,SpamAssassin を Postfix とともに使用する方法を取り上げていましたが,SpamAssassin は procmail と連携することができるので問題ありません.

    SpamAssassin のご紹介
    SpamAssassin の入手

    このサイトからダウンロードできます.

    • SpamAssassin

    今回は 2005-07-31 時点で最新の 3.0.4 を使用します.

    セットアップ手順
    1. Perl のモジュールを幾つか追加

      SpamAssassin は外部の公開データベースと連携して spam 判定を行うことができます. そのためには Perl のモジュール Net::DNS が必要となりますので,まずはこれを追加します. ただ,ぼくの環境では Net::DNS が依存する以下のモジュールが必要となりました. これらを全部インストールします. 通番は依存関係によるインストール順です.

      • Digest::SHA1
      • Digest::HMAC
      • Net::IP
      • Net::DNS

      モジュールの入手はこちらから.

      • Index of /CPAN/modules/by-module - CPAN

      手順は各モジュール共通でこんな感じ.

      $ tar zxvf Net-DNS-x.xx.tar.gz
      $ cd Net-DNS-x.xx
      $ perl Makefile.PL
      $ make test
      $ make
      $ su
      Password:
      # make install

      make test がこける場合はログをチェックして,必要なモジュールがあればそれを先に追加しましょう.

    2. SpamAssassin のインストール

      続いて SpamAssassin のインストールです. 基本的な手順は上記のモジュールと一緒ですが,perl Makefile.PL 時に幾つか入力項目があります.

      $ tar Mail-SpamAssassin-3.0.4.tar.gz
      $ cd Mail-SpamAssassin-3.0.4
      $ perl Makefile.PL
      What email address or URL should be used in the suspected-spam report text for users who want more information on your filter installation? (In particular, ISPs should change this to a local Postmaster contact)
      default text: [the administrator of that system] admin@example.com

      Check network rules during 'make test' (test scripts may fail due to network problems)? (y/n) [n] y

      Run SQL-based Auto-whitelist tests during 'make test' (additional information required) (y/n) [n] n

      Run Bayes SQL storage tests during 'make test' (additional information required)? (y/n) [n] n

      Writing Makefile for Mail::SpamAssassin
      Makefile written by ExtUtils::MakeMaker 6.17
      $ make test
      $ make
      $ su
      Password:
      # make install

      perl Makefile.PL の入力項目を上からご説明.

      1. spam としてブロックされたことをレポーティングする際に使用する連絡先です.
      2. 外部の公開データベースを使用するためのテスト.使用します.y.
      3. Whitelist(無条件通過アドレス一覧)を RDB に格納するためのテスト.今回は使用しないので n.
      4. ベイジアンフィルタのデータを RDB に格納するためのテスト.今回は使用しないので n.
    3. spamd の起動設定 & 起動

      メール受信時に叩くのは spamc コマンドですが,このコマンドの実行には spamd デーモンが必要となります. spamd の起動設定を行います. システム起動時に自動的に spamd が上がるようにしましょう.

      $ su
      Password:
      # cp /spamd/redhat-rc-script.sh \
      > /etc/rc.d/init.d/spamd
      # chkconfig spamd on

      この設定は次回起動時から有効なので,今回は手動で起動します.

      # /etc/rc.d/init.d/spamd start
      # ps ax | grep spamd
      17399 ?   Ss  0:01 /usr/bin/spamd -d -c -m5 -H
      17409 ?   S   0:08 spamd child
      17410 ?   S   0:09 spamd child
      17411 ?   S   0:09 spamd child
      17412 ?   S   0:09 spamd child
      17413 ?   S   0:08 spamd child
    4. .qmail の設定

      以上で SpamAssassin が動く状態になったので,メール受信時に SpamAssassin を叩くように設定しましょう. まずは,.qmail を編集して Procmail を MDA として使用するよう設定します.

      |/var/qmail/bin/preline /usr/bin/procmail
    5. .procmail の設定

      メール受信時に SpamAssassin にメールを渡すように設定します. ぼくの環境では他に幾つか設定があるのだけれど,関係する部分のみ抜粋します.

        :0fw: spamassassin.lock
        | /usr/bin/spamc
        :0 :
        ${MAILDIR}

      実は .procmail の設定次第では,SpamAssassin が spam と判定したメールを Procmail で削除(/dev/null行き)してしまうことも可能です. ただ,まだ false positive が怖いのでそこまで設定していません.

    6. MUA の設定

      Procmail で削除していないので,MUA で振り分け設定を行います. SpamAssassin は spam と判断したメールに対してこのようなヘッダーフィールドを追加します.

      X-Spam-Flag: YES
      X-Spam-Checker-Version: SpamAssassin 3.0.4 (2005-06-05) on mizba.net
      X-Spam-Level: *****
      X-Spam-Status: Yes, score=5.8 required=5.0 tests=FORGED_RCVD_HELO, MIME_BOUND_NEXTPART, MISSING_MIMEOLE, NO_REAL_NAME, PRIORITY_NO_NAME, RCVD_IN_NJABL_DUL, RCVD_IN_SORBS_DUL, RCVD_IN_XBL autolearn=no version=3.0.4
      (改行は加工)

      “X-Spam-Flag: YES” を目印に,spam と判定されたメールを放り込むフォルダなりに振り分けてください. ぼくの MUA は電信八号なので,正規表現で振り分けです.

    以上で設定完了です. 現在のところ,spam 判定はかなりの好成績です. 素晴らしい.

    [ permalink ] [ 0 comment(s) ]
  • 000590
    vi の ex コマンドで特殊文字
    miz 2005-07-07 13:57
    このエントリーを含むはてなブックマーク はてなブックマーク - vi の ex コマンドで特殊文字

    よく忘れるので備忘録.

    ^V^M

    ^V (Ctrl+V) が特殊文字のエスケープ. 上記は Enter の例で,Tab も同様に可能.

    例えば,全タブ文字を半角空白二つに置換するのは下のような感じ.

    :%s/^VTab/  /g
    [ permalink ] [ 3 comment(s) ]
  • 000470
    セットアップ関連のまとめ
    miz 2005-01-17 01:43
    このエントリーを含むはてなブックマーク はてなブックマーク - セットアップ関連のまとめ

    昨年末から続いた移行作業がひとまず一段落しました. エントリの数が多くなってしまったのでここで一旦整理しておきたいと思います. エントリの時系列は無視します.

    FedoraCore インストール ~ ネットワークの設定
    • Fedora Core 3 を HDD からインストールする
    • probe_partition_for_geom() faild
    • rp-pppoe で ADSL 接続
    • EveryDNS.net で Dynamic DNS
    • Fedora Core 1 で Firewall 構築
    • NV III を導入しました
    Web 関連
    • apache 2.0.52 + php 5.0.2
    • PostgreSQL 7.4.6 セットアップ
    • PostgreSQL 移行手順
    • MT3.121 移行とパッチ幾つか
    メール関連
    • qmail のセットアップ
    • qmail で APOP
    • qmail で POP before SMTP (未稿)
    • IMAP サーバー dovecot のセットアップ
    • SquirrelMail のセットアップ
    その他
    • Oracle Database 10g 30日間トライアル版
    • Fedora その後の各種作業
    • 時刻同期の設定 - ntp
    • CVS のリモート接続
    [ permalink ] [ 0 comment(s) ]
  • 000469
    SquirrelMail のセットアップ
    miz 2005-01-16 23:48
    このエントリーを含むはてなブックマーク はてなブックマーク - SquirrelMail のセットアップ

    出先から自宅のメールをチェック,返信する場合があるので Web メールシステムを導入します.

    以前までは sqwebmail を使っていたのですが,C で書かれているためカスタマイズが面倒でした. そこで今回は,PHP で書かれた SquirrelMail を導入したいと思います.

    • SquirrelMail
    • SquirrelMail - 日本

    1. ファイルのダウンロード

      2005-01-17 時点での最新版,1.4.3a-ja-20041014 をダウンロードします.

    2. ファイルの展開

      ダウンロードしたファイルを展開します.後ほど Apache 経由でアクセスするので,それを考慮した位置に展開するのが良いでしょう.

      # cd /var/web
      # tar zxvf /tmp/squirrelmail-1.4.3a-ja.tar.gz
    3. ディレクトリの作成

      設定を保存するディレクトリと,添付ファイルを一時的に保存するディレクトリを作成します.所有者,グループは apache を動かすユーザ,グループにします.

      # cd /var/spool
      # mkdir squirrelmail
      # mkdir squirrelmail/attach
      # cp -r /var/web/squirrelmail-1.4.3a-ja/data \
      > squirrelmail/
      # chown -R apache:apache squirrelmail
      # chmod 730 squirrelmail/attach
    4. 設定ファイルの編集

      設定ファイルを編集するためのツールが用意されているので,それを利用します.

      $ cd /var/web/squirrelmail-1.4.3a-ja/config
      $ ./conf.pl

      設定項目が沢山あるのですべてを説明することはしませんが,一部書いておきます.

      Organization Preferences > Default Languageja
      General Options > Default Charsetiso-2022-jp
      General Options > Data Directory/var/spool/squirrelmail/data/
      General Options > Attachment Directory/var/spool/squirrelmail/attach/
    5. Apache の設定変更

      Web ブラウザからアクセスできるよう Apache を設定し,再起動します.

    6. 設定確認

      http://www.example.com/src/configtest.php にて,squirrelmail の設定を確認することができます.何らかのエラーが表示される場合は修正します.

    以上で設定は完了です. 使ってみたところ,メール文中の一部に文字化けが生じています. どのような文字で発生する問題なのかはまだ切り分けられていませんが注意が必要ですな. また,From ヘッダフィールドを設定できないのもイマイチなので,ここは今度手を入れることにします.

    [ permalink ] [ 2 comment(s) ]
  • 000468
    IMAP サーバー dovecot のセットアップ
    miz 2005-01-16 23:07
    このエントリーを含むはてなブックマーク はてなブックマーク - IMAP サーバー dovecot のセットアップ

    しばらく間が開きましたが,メール環境構築の続きです.

    以前までは Courier-imap を使用していたのですが,バージョンが上がってなにやら事前にやるべきことがいろいろ増えたのと,わざわざ configure make しなくても FC3 には dovecot という IMAP サーバーが用意されていたのとで,こちらに乗り換えることにしました.

    • dovecot

    設定の方針は以下の通りです.

    • 提供するのは IMAP のみ.POP は使用しない.
    • 開くのはローカル側のみ.
    • dovecot 専用のパスワードファイルを用意する.
    1. 設定ファイルの編集

      設定ファイルは /etc/dovecot.conf になります.デフォルトからいじった箇所だけを書きます.

      protocols = imap
      
      imap_listen = 192.168.100.1
      #pop3_listen = [::]
      
      #imaps_listen = [::]
      #pop3s_listen = [::]
      
      disable_plaintext_auth = no
      
      #login = pop3
      
      auth_userdb = passwd-file /etc/dovecot.passwd
      
      auth_passdb = passwd-file /etc/dovecot.passwd
    2. パスワードファイルの作成

      設定ファイルで設定した通り,/etc/dovecot.passwd に dovecot 専用のパスワードファイルを作成します.パスワードファイルの形式は次の通りです.

      user:password:uid:gid:::::maildir

      デフォルトの設定では uid と gid の範囲に制限があって,uid は500以上,gid は root と wheel 以外を選択しなければなりません.また,password は MD5 で記述しておく必要があります.perl を使って以下のように生成できます.

      cat | perl -e 'while(<>){ print crypt("$_","\$1\$01234567\$")."\n";}'
      (実際は一行)

      実行すると入力待ちの状態になるので,パスワードを入力してください.終わるときは ^D や ^C で抜けてください.

    3. 起動

      # /etc/rc.d/init.d/dovecot start
    [ permalink ] [ 0 comment(s) ]
  • 000464
    qmail で APOP
    miz 2005-01-01 00:18
    このエントリーを含むはてなブックマーク はてなブックマーク - qmail で APOP

    ぼくの使っている PHS,AH-K3001V は MUA が載っています. こいつを使って自宅サーバに接続してメールチェックができるのだけれど,POP はパスワードもプレーンテキストで垂れ流なのでさすがに気持ち悪い. そこで,APOP の導入です.

    APOP は RFC1939 で定められていて,メールの受信に OTP (One-time password) を使用するものです. qmail はそもそも POP のパスワードチェックを自前で持っていなくて,checkpassword を併用していました. これを APOP 対応のものに差し替えることで,簡単に APOP による認証を導入することができます.

    qmail と併用できる APOP 対応ツールとしては qmail-vida というものもありますが,今回はもっとシンプルな vucheckpw を採用します.

    設定手順
    1. ソースの入手と展開

      以下のページから vucheckpw-1.01.tar.gz を入手します.

      • Project: checkpw: File List

      展開を行います.

      $ cd /tmp
      $ tar zxvf vucheckpw-1.01.tar.gz
    2. インストール先の設定

      コンパイル前に幾つかのファイルを変更することで,インストール先を変更することができます.付属の INSTALL より抜粋します.

      • The vucheckpw home directory, normally /var/qmail/alias. To change this directory, edit conf-home now.
      • The qmail home directory, normally /var/qmail. To change this directory, edit conf-qmail now.
      • The maildir directory, normally Maildir. To change this name, edit conf-maildir now.
      • The password file, normally .password. To change this name, edit conf-password now.

      ぼくの環境ではデフォルトで問題がないので何も設定を行いません.

    3. コンパイル

      make 一発です.

      $ cd vucheckpw-1.01
      $ make
    4. インストール

      インストール先が ~alias なので alias に su して行います.

      $ su alias
      Password:
      $ ./install
      $ ./instcheck

      instcheck はインストール状況をチェックするのですが,こいつが WARNING を吐く場合があります.パーミション関連の場合は以下のようにしてみてください.

      $ su
      Password:
      # chmod g+s ~alias/bin ~alias/rc
      # ^D
      $ ./instcheck

      参考までに,現在の設定状況です.

      $ ( cd ~alias ; ls -ld bin rc )
      drwxr-sr-x  2 alias qmail 4096 12月 31 23:57 bin
      drwxr-sr-x  2 alias qmail 4096 12月 31 23:57 rc
    5. tcpserver の設定変更

      AH-K3001V からアクセスできるよう,tcpserver の設定を変更します.

      /etc/tcprules/pop3.rules
      192.168.100.:allow
      :allow

      次に設定ファイルを tcpserver が使用する形式に変換します.

      # cd /etc/tcprules
      # /usr/bin/tcprules pop3.cdb pop3.tmp < pop3.rules
    6. 起動スクリプトの変更

      vcheckpw により認証を行うために,起動スクリプトの pop3d に関する部分を以下のように書き換えます.

      # Starting pop3d/tcpsrver
      echo "Starting pop3d/tcpserver..."
      /usr/local/bin/tcpserver -HR \
      -x /etc/tcprules/pop3.cdb \
      0 pop3 \
      /var/qmail/bin/qmail-popup mizba.net \
      /bin/vucheckapoppw \
      /var/qmail/bin/qmail-pop3d Maildir \
      2>&1 | /var/qmail/bin/splogger pop3d 2 &
    7. qmail の再起動

      qmail-pop3d を再起動します.

    8. ユーザーの追加

      ユーザーの追加は以下のように行います.

      # ~alias/bin/adduser newuser
      # ~alias/bin/passwd newuser pass

      この手順で追加されたユーザーは OS ユーザーとしては存在せず,メール受信のみのユーザーとなります.

    [ permalink ] [ 0 comment(s) ]
  • 000462
    CVS のリモート接続
    miz 2004-12-31 13:10
    このエントリーを含むはてなブックマーク はてなブックマーク - CVS のリモート接続

    今までは pserver を使って CVS をリモートから使用していたのだけれど,どうやら SSH 経由でいけるらしいことが判明しました.

    • 2.9.2 Connecting with rsh - Version Management with CVS

    上記が "official" manual for CVS だそうです.

    設定方法
    $ export CVS_RSH=ssh
    $ export CVSROOT=:ext:cvshost:/home/cvsuser

    これで cvs co などを行えば SSH 経由で CVS の操作が可能です. ただ,ポートの変更方法が未だ見つからず.

    [ permalink ] [ 0 comment(s) ]
  • 000461
    時刻同期の設定 - ntp
    miz 2004-12-30 23:40
    このエントリーを含むはてなブックマーク はてなブックマーク - 時刻同期の設定 - ntp

    PC の時計は案外狂いやすいそうです. しかし,そこはよくしたもので,きちんと正確な時刻を取得するための仕組みも用意されています.

    • NTP: The Network Time Protocol
    • 4. 正確な世界時に同期する - JF

    原子時計等を使用した,かなりの精度で正確な時刻を持ったサーバをルートに据えて,それと時刻を同期させるためにサーバ階層を構築しています. 今回はその階層の末端に自分のドメインのマシンを一つぶら下げる設定を行いました.

    NTP はネットワーク経由で時刻情報をやり取りする関係上,伝送遅延の影響を完全には排除し切れませんが,ターンアラウンドタイムなどを用いてかなりの精度で時刻合わせを行うことができます(我が家では 10 msec オーダー). ただしこの際注意したいのが,同期先のサーバがいかに正確であろうとも,伝送遅延の変動が大きい場合は精度が落ちる点です. 非常に正確 (例えば Stratum1) だけれど遠いサーバにつなぎにゆくよりも,プロバイダなりが提供するような,Stratum3,4 程度だけれど近いサーバのほうが結果的により精度が出る可能性があります. それに,いきなり Stratum1 につなぎにいってしまったのでは,階層構造をもたせている意味もないですしね. まずは,近所の NTP サーバを探してみましょう.

    設定手順
    1. NTP サーバ探し

      プロバイダのページに記述がありました.以下の二つが用意されているようです.

      • ntp1.wakwak.com
      • ntp2.wakwak.com
    2. 設定ファイルの編集

      上記 NTP サーバの設定に加え,本サーバに接続できるクライアントマシンを制限する設定を行います.

      /etc/ntp.conf
      ...
      restrict 192.168.100.0 mask 255.255.255.0 nomodify notrap
      ...
      server ntp1.wakwak.com
      server ntp2.wakwak.com
      ...
    3. ntpd の起動

      設定が終わったら以下のように ntpd を起動します.

      # /etc/rc.d/init.d/ntpd start
    4. 動作確認

      ntpd を起動してしばらく経ったら,以下のように動作を確認します.

      # ntpq -p

      "offset" が同期先サーバと本マシンの時刻のズレ (ms) です.

    設定ファイルの詳細は次のページを参考にしてください.

    • ntpd - Network Time Protocol (NTP) daemon

    一番下に設定ファイルについての説明ページへのリンクがあります.

    [ permalink ] [ 0 comment(s) ]
  • 000459
    PostgreSQL 移行手順
    miz 2004-12-30 13:45
    このエントリーを含むはてなブックマーク はてなブックマーク - PostgreSQL 移行手順

    PostgreSQL 7.3.4 から PostgreSQL 7.4.6 にデータを移行しました.

    結論を述べますと,バックアップ / リストア の手順そのままですんなりいきます.

    • PostgreSQL 7.4.6 文書 - 第 22章バックアップとリストア
    • pg_dumpall

    今回ちょっと気になったのがバージョンが変わる点だったのだけれど,まったく問題なく以下の手順でいけました.

    この手順ではラージオブジェクトの移行は行えません.
    pg=# \dl
    として何か結果が返る場合は別の手順をご検討ください.
    1. データ抽出

      7.3.4 付属の pg_dumpall を用いて全データを抽出します.

      $ pg_dumpall > pg_dump.dat

      途中,データベースごとにパスワードを訊き直されました.

    2. データの書き戻し

      7.4.6 を立ち上げてのち,以下の手順です.

      $ pg_sql -f pg_dump.dat template1

      これは,新規データベースクラスタを作成 (initdb) した直後に行うのがシンプルで良さそうです.データベースサーバが起動している必要がある点にご注意.

    [ permalink ] [ 0 comment(s) ]
  • 000458
    PostgreSQL 7.4.6 セットアップ
    miz 2004-12-30 05:33
    このエントリーを含むはてなブックマーク はてなブックマーク - PostgreSQL 7.4.6 セットアップ

    サーバーの OS 入れ替えに伴い,PostgreSQL もバージョンをあげました.

    • PostgreSQL
    • 日本 PostgreSQL ユーザ会

    本当は 8 も試してみたかったのだけれど,今は妙なところで引っかかる事態はできるだけ避けたいので7系最新の 7.4.6 で我慢.

    • PostgreSQL 7.4.6 文書 - 第 14章 インストール手順

    このあたりを参考に作業を行いました.

    1. ユーザーの追加

      PostgreSQL 用のユーザーを作成します.

      # adduser postgresql
    2. ソースの入手

      適当なミラーサイトから postgresql-7.4.6.tar.gz をダウンロードします.

      $ wget http://.../postgresql-7.4.6.tar.gz
    3. ソースの展開

      適当なディレクトリでソースを展開します.

      $ cd /tmp
      $ tar zxvf ~/postgresql-7.4.6.tar.gz
    4. configure の実行

      configure を実行します.インストール先と,スレッド関連のオプションを指定しました.

      $ ./configure \
      > --prefix=/home/pg/7.4.6 \
      > --enable-thread-safety
    5. コンパイルとテスト

      コンパイルには gmake を使います.make ではダメだそうです.

      $ gmake

      インストールが終わったら念の為回帰テストを実施しましょう.

      $ gmake check

      以下のメッセージが出れば O.K. です.

      ======================
       All 93 tests passed.
      ======================
    6. インストール

      ヘッダファイルも含めてインストールします.

      $ gmake install-strip
      $ gmake install-all-headers

    以上でインストールは完了です. 続いてインストール直後の設定を幾つか行います.

    1. データベースクラスタの初期化

      データベースが管理するデータを格納するファイル群を作成します.ここでいう「クラスタ」はサーバを束ねる所謂「クラスタリング」とは別物で,後に作成するデータベースを複数格納するためこの名がついていると思われます.この際デフォルトで,実行したユーザと同名のデータベースユーザが作成されます.

      $ mkdir ~/pgdata
      $ initdb -D ~/pgdata
    2. 追記
      7.4.8 を入れてみたところ,ここで
      $ createdb userName
      としてデータベースを作成する必要がありました.
    3. データベース・サーバの起動

      先ほど作成したデータベースクラスタを指定してデータベース・サーバを起動します.

      $ pg_ctl -D ~/pgdata start
    4. データベースユーザの作成

      デフォルトのデータベースユーザは権限が強すぎるので,作業用のデータベースユーザを作成します.

      $ psql -U postgresql
      postgresql=# create user userName 
      postgresql-# with password 'password';
      
    5. データベースの作成

      データベースを作成します.所有者,エンコーディングを指定することができます.

      postgresql=# create database dbName
      postgresql-# with owner=userName
      postgresql-# encoding 'Unicode';
      
    [ permalink ] [ 0 comment(s) ]
  • 000457
    probe_partition_for_geom() faild
    miz 2004-12-27 01:38
    このエントリーを含むはてなブックマーク はてなブックマーク - probe_partition_for_geom() faild
    本エントリに現れる手順はパーティションテーブルに変更を加えるものがあります. 最悪の場合データを失う恐れがないとはいえないので,必要なデータはバックアップを取るなど十分にご注意ください. 一応,ぼくの場合は問題は発生しませんでしたが.

    今回の Fedora Core 3 のインストールは,既存のディスクの空きパーティションを使用しました. インストール前のパーティションの状況は以下でした.

    /dev/hde1 /boot
    /dev/hde2 swap
    /dev/hde3 拡張
    /dev/hde5 /
    /dev/hde6 空き
    /dev/hde7 /u01 (雑多なデータ)

    この空いている hde6 に Fedora Core 3 をインストールしようとしました.

    前回述べたようにフロッピーディスクから grub 経由でインストーラーを起動したのですが,以下のようなエラーが発生します.

    Assertion (serectors<=xx) at disk_dos.c:xxx
    in function probe_partition_for_geom () faild.

    Google で検索してみたところ,幾つかそれらしきものがヒット.

    • FC3のインストールが止まります - Fedora JP BBS
    • BUG: Anaconda probe of partitions fails - FedoraForum.org

    原因は Windows パーティションにあるらしいとのこと. 確かに,エラーの発生箇所が "disk_dos.c" となっていますしね. work around は「パーティション切り直す」なのだけれど,今回は既存の環境を残さなければならないのでこの方法は採れません. そこで,以下のようにパーティションタイプの変更で回避できないか試みました.

    # fdisk /dev/hde
    Command (m for help): p
    
    Disk /dev/hde: 255 heads, 63 sectors, 14946 cylinders
    Units = cylinders of 16065 * 512 bytes
    
       Device Boot Start    End    Blocks   Id  System
    /dev/hde1   *      1     33    265041   83  Linux
    /dev/hde2         34    164   1052257+  82  Linux swap
    /dev/hde3        165  14946 118736415    5  Extended
    /dev/hde5        165   1470  10490413+  83  Linux
    /dev/hde6       1471   2776  10490413+  83  Linux
    /dev/hde7       2777  14946  97755493+  83  Linux
    
    Command (m for help): t
    Partition number (1-7): 3
    Hex code (type L to list codes): 85
    
    Command (m for help): w

    「拡張領域」を「Linux 拡張領域」に変更してみたのですが,これでも同じエラーが発生しました.

    他に手はないかと更に調べてみたところ,以下のようなものを発見.

    • Assertion at disk_dos.c:485? when trying to install(update) to Fedora Core 3? - FedoraForum.org
    • Fedora Core 3 Install - Jim O'Halloran's Weblog

    sfdisk というパーティションを切り直すツールを使用して,バッチでパーティションテーブルを書き換える方法です.

    • sfdisk
    # sfdisk -s /dev/hde | sfdisk --no-reread /dev/hde

    前半の "sfdisk -s /dev/dhe" の部分は現在のパーティションのサイズをリストします. 後半の "sfdisk --no-reread /dev/hde" は標準入力から設定を読み込んでパーティションを切り直します. 組み合わせることで,現在のパーティションのサイズ通りにもう一度切り直す(パーティションテーブルを書き直す)操作を行うことになります. 結果として,これでインストーラーが正常に動作するようになりました.

    もし同様の問題が発生した場合は,試してみるのも良いかもしれませんが,at your own risk でよろしくお願いします.最後に sfdisk の manpage より.

    BE EXTREMELY CAREFUL - ONE TYPING MISTAKE AND ALL YOUR DATA IS LOST
    [ permalink ] [ 0 comment(s) ]
  • 000456
    Fedora Core 3 を HDD からインストールする
    miz 2004-12-26 14:40
    このエントリーを含むはてなブックマーク はてなブックマーク - Fedora Core 3 を HDD からインストールする

    昨晩,とうとう Fedora Core 3 の導入に成功しました.

    世では,カーネルサイズが 1.44 MB を越えているためフロッピーブートで Fedora Core 3 をインストールすることは無理といわれています. となると,ISO イメージを CD-ROM に焼く必要があるのだけれど,他にもこういう方法が紹介されています.

    • FAQ/FC3をHDDからインストールする

    上記ページでは既存の grub を使って HDD 上のインストール用カーネルイメージを叩く方法を紹介していますが,grub が入っていなくても,フロッピーディスクから起動することで Fedora Core 3 をインストールすることができました.

    概要を述べると,grub をフロッピーに入れて,これから HDD 上のインストール用カーネルイメージを叩く,という流れです. たいしたひねりではありませんが,ぼくのようにいまだに lilo を使っている人には役立つ手法です. また,ぼくは試していませんがネットワークインストールも可能な筈なので,CD-ROM ブートもできず,HDD にメディア4枚分も空きがないマシンにインストールする際にも応用できるかと思います.

    参考リンク
    • Fedora Core 3をハードディスクインストールするには
    • GRUB メモ
    前提情報

    今回使用する環境はパーティション /dev/hde1 を /boot 用に切ってあり,ここに起動イメージが置かれています.

    手順
    1. grub 起動ディスクの作成

      フロッピーディスクを一枚用意し,まずはフォーマット.

      # fdformat /dev/fd0
      # mkfs.ext2 /dev/fd0

      続いてgrub のイメージを書き込みます.

      # cd /usr/share/grub/i386-vine
      # dd  if=stage1  of=/dev/fd0  count=1
      # dd  if=stage2  of=/dev/fd0  seek=1

      stage1 , stage2 のパスはお使いのディストリビューションに応じて変更してください.

      # rpm -qa | grep grub
      grub-0.95-3
      $ rpm -ql grub | grep stage

      などとして見つけることも可能です.

    2. インストール用カーネルイメージのコピー

      Fedora の CD イメージに含まれる,以下のファイルを /boot ディレクトリ (/dev/hde1) にコピーします.

      # mkdir /boot/install
      # cd $_
      # mount -o loop -o ro FC3-i386-disc1.iso /mnt/cdrom
      # cp /mnt/cdrom/isolinux/vmlinuz .
      # cp /mnt/cdrom/isolinux/initrd.img .
    3. 起動

      作成した grub 起動ディスクを使用してマシンを起動します.grub のプロンプトが出た時点で以下のように入力してインストール用カーネルイメージから起動します.

      grub> root (hd0,0)
      grub> kernel /install/vmlinuz ramdisk_size=8192
      grub> initrd /install/initrd.img
      grub> boot

      "root" の引数は,BIOS が認識したディスクを順に 0 , 1 , ... と番号を振るのでたとえ /dev/hde でも hd0 (一番最初)となります.二つめの "0" はパーティション番号 (0 origin) です.fdisk のパーティション番号より一つ小さいのでご注意を.

      "kernel" , "initrd" の引数にファイル名を渡す際は,"root" で指定したパーティションがルートディレクトリになっている点にご注意ください.

      ちなみに,このプロンプトは tab による補完が効きます.

    以上の手順で FC3 のインストーラが起動するはずです. 途中,インストール方法を聞かれるのでネットワークなり,ハードドライブなりを選択してください.

    今回は CD-ROM なしでもなんとかいけたけれど,やはり今後 FDD 等々の所謂レガシーは置き去りにされるんでしょうかね・・・. 少々寂しいし,何より不便ですな.

    [ permalink ] [ 0 comment(s) ]
  • 000455
    NV III を導入しました
    miz 2004-12-25 17:00
    このエントリーを含むはてなブックマーク はてなブックマーク - NV III を導入しました

    先日の夜中に急に思い立って,フレッツ ADSL モア III の申込みを行いました.

    • フレッツ ADSL

    下り最大 47Mbps もさることながら,上り最大 5Mbps もかなり魅力. 自宅サーバーにファイルをアップしておいて,出先でダウンロードすることも多いし,他にも色々サービスを提供している関係上,下りだけではなく上り速度も結構重要です.

    今まで利用していたのが フレッツ ADSL 8M タイプなので,レンタルモデムは ADSL モデム - MN というものなのですが,これは 47Mbps に対応していません(対応規格が ITU-T G.992.1 Annex C,ITU-T G.992.2 Annex C). そこで新たに送られてきてのがこのモデムです.

    • ADSL モデム - NV III

    これはなかなか多機能で,速度アップだけではなく次のようなことも行えます.

    • IP 電話
    • ルーター (w/t NAT , NAPT)
    • 仮想 DMZ の構築
    • 他多数

    最近の ADSL モデムはすごいねぇ. 使っているプロバイダも丁度 IP 電話が無料なので,使ってみようかなぁ,と思っていました.

    しかし,IP 電話ということは ADSL モデムが 第3層 aware なわけですよ. つまりはルーター + NAPT にしなければならない. それをやってしまうと,今までのネットワーク構成ががらりと変わるのでただいま躊躇しております. ひとまず,今のところはブリッジモードを使って2層で Linux サーバーと接続し,そこでルーター,NAPT ,Firewall を実現しています. まぁ,今まで通り.

    でもなぁ.IP 電話って周りに使っている人がいないから特にメリット感じないしなぁ. モデムにルーターやってもらう必要もないし,別に今のままでもいいか.

    このモデムのドキュメントはオンラインで提供されていますが,見つけにくい場所にあります. 「バージョンアップ情報」というリンクを辿ったページの一番下にあります.
    • 詳細取扱説明書
    [ permalink ] [ 0 comment(s) ]
  • 000454
    qmail のセットアップ
    miz 2004-12-25 02:14
    このエントリーを含むはてなブックマーク はてなブックマーク - qmail のセットアップ

    本番運用サーバーを停止している間も,メールサーバーだけは止めたくありません. というわけで,VAIO 505R に qmail をセットアップしました. 本番運用サーバーでは以前に色々と追加の設定を行いましたが,今回はいたってシンプルに以下のオーソドックス三点セットの導入となります.

    • qmail
    • tcpserver
    • checkpassword

    何ゆえ三つも必要なのかと申しますと,qmail はメールを送受信,配信する機能だけを担うシンプルなプログラムで,単体では認証の仕組みなどを持たないためです. qmail は他のツールと組み合わせることで,例えばセキュリティを高めたり,例えば OS ユーザー以外の仮想ユーザーを扱える仕組みを追加したりなど,様々な拡張が可能となります. 今回はそれらの中から,最低限必要と思われる POP3 のユーザー認証,SMTP の不正中継防止機能を追加したいと思います.

    導入手順にはいる前に,qmail と組み合わせて使われるツールに良くある特長を述べておきます. 後ほど起動スクリプトを作成する際に,スクリプトの内容を理解する助けになるかと思います.今回の tcpserver , checkpassword もそうなのですが,実行ファイルへのパスを引数にとるものが多くみられます. これらは,そのツールの中で何らかの処理を行い,何らかの条件に従って環境変数を設定,変更したのちに,引数として与えられたプログラムを exec する,という動きをします. exec ですので,プロセス自体が取って代わられます. 今回を例に挙げると,tcpserver は接続元 IP アドレスに基づいて後続のプログラムの実行を行ったり拒否したり,特定 IP アドレスの場合は環境変数を設定したりします. checkpassword は OS のユーザ認証と同一ロジックでパスワードチェックを行い,正しいパスワードが与えられた場合は後続のプログラムを実行します.
    これらのツール群を使用した起動スクリプトを理解する際は,どれがコマンドで,何処までがそのコマンドが処理する引数で,何処からが次のコマンドなのか,という点に注目する必要があります. パイプがあるわけでも,";" で区切るでもなくコマンドがずらずらと並ぶので,慣れるまでは読みにくいと思うのでご注意ください.

    それでは,以下 qmail の設定手順です. インストールを行うにあたって,次のサイトを参考にしました.

    • qmail
    • MioCity : qmail
    1. ユーザーの作成

      qmail では,メール送受信,配信といった機能ごとにプロセスが分かれており,更にそれらの実効ユーザー ID も異なっています.最初に qmail が使用するユーザーとグループを作成します.

      $ su
      Password:
      # mkdir /var/qmail
      # groupadd nofiles
      # useradd -g nofiles -d /var/qmail/alias \
      > -s /bin/false alias
      # useradd -g nofiles -d /var/qmail -s /bin/false qmaild
      # useradd -g nofiles -d /var/qmail -s /bin/false qmaill
      # useradd -g nofiles -d /var/qmail -s /bin/false qmailp
      # groupadd qmail
      # useradd -g qmail -d /var/qmail/ -s /bin/false qmailq
      # useradd -g qmail -d /var/qmail/ -s /bin/false qmailr
      # useradd -g qmail -d /var/qmail/ -s /bin/false qmails
    2. qmail のインストール

      最初に,qmail をインストールします.ソースを解凍した後に,タイムゾーンに関するパッチを適用します.

      • qmail-date-localtime.patch

      glibc 2.3.1 以降の場合は以下のパッチも必要となります.

      • qmail-1.03.errno.patch
      • qmail-1.03.qmail_local.patch
      $ tar zxvf qmail-1.03.tar.gz
      $ cd qmail-1.03
      $ patch -p1 < ../qmail-date-localtime.patch
      $ patch -p1 < ../qmail-1.03.errno.patch
      $ patch -p1 < ../qmail-1.03.qmail_local.patch
      $ su
      Password:
      # make setup
      # make check
    3. tcpserver のインストール

      glibc 2.3.1 以降の場合は以下のパッチが必要となります.

      • ucspi-tcp-0.88.a_record.patch
      • ucspi-tcp-0.88.errno.patch
      • ucspi-tcp-0.88.nobase.patch
      $ tar zxvf ucspi-tcp-0.88.tar.gz
      $ cd ucspi-tcp-0.88
      $ patch -p1 < ../ucspi-tcp-0.88.errno.patch
      $ patch -p1 < ../ucspi-tcp-0.88.a_record.patch
      $ patch -p1 < ../ucspi-tcp-0.88.nobase.patch
      $ su
      Password:
      # make setup
      # make check
    4. checkpassword のインストール

      glibc 2.3.1 以降の場合は以下のパッチが必要となります.

      • checkpassword-0.90.errno.patch
      $ tar zxvf checkpassword-0.90.tar.gz
      $ cd checkpassword-0.90
      $ patch -p1 < ../checkpassword-0.90.errno.patch
      $ su
      Password:
      # make
      # make setup
      # make check
    5. SMTP サーバーとしての設定

      最初に SMTP サーバーとしての設定を行います. 不正中継を防止するために,以下の挙動が必要となります.

      • 中継を許可されていないホストからの接続の場合
        • 自ドメイン宛であれば受信して配信
        • 他ドメイン宛であれば破棄
      • 中継を許可されているホストからの接続の場合
        • 中継して送信

      以上の挙動を実現するためには,中継を許可されている/いないを判断する必要があることはお判り頂けるかと思いますが,そのために使用するのが tcpserver です. tcpserver で IP アドレスをチェックし,中継を許可されているホストからの接続の場合は環境変数「RELAYCLIENT」を設定した後に qmail-smtpd に exec します. qmail-smtpd は環境変数をチェックし,その有無で中継の挙動を制御します.

      最初に設定ファイルを作成します.192.168.100.0/24 からの接続は中継を許可(RERAYCLIENT を設定)し,それ以外も接続は許可します. 接続を許可するのは,中継不許可の接続であっても自ドメイン宛の場合が考えられるためです. 自ドメインか否かの判断は qmail-smtpd が行います.

      /etc/tcprules/smtp.rules
      192.168.100.:allow,RELAYCLIENT=""
      :allow

      次に設定ファイルを tcpserver が使用する形式に変換します.

      # cd /etc/tcprules
      # /usr/bin/tcprules smtp.cdb smtp.tmp < smtp.rules

      続いて幾つかの設定ファイルを作成します.

      • /var/qmail/control/me
        mizb.net
      • /var/qmail/control/defaultdomain
        mizb.net
      • /var/qmail/control/locals
        localhost
        mizba.net
      • /var/qmail/control/plusdomain
        mizba.net
      • /var/qmail/control/rcpthosts
        localhost
        mizba.net
    6. POP3 サーバーとしての設定

      SMTP ときたら,次は POP サーバとしての設定なのですが,実は特にやることがありません.仮想ドメイン,仮想ユーザーなどを使用する場合は色々と手順が必要となるのですが,今回は実ドメイン,実ユーザーのみなので tcprules の設定のみを行います.

      /etc/tcprules/pop3.rules
      192.168.100.:allow
      :deny
      # cd /etc/tcprules
      # /usr/bin/tcprules pop3.cdb pop3.tmp < pop3.rules
    7. ローカル配信の設定

      qmail は mbox 形式ではなく Maildir 形式を使用します.

      $ cd ~
      $ /var/qmai/bin/maildirmake Maildir
      $ echo "./Maildir/" > .qmail

      当該ドメイン宛のメールをすべて特定のアカウントで受け取りたい場合は以下のように設定します.

      # echo "all@your-domain" > ~alias/.qmail-default
    8. 起動

      以下のように起動スクリプトを準備します.tcprules はデフォルトで auth にリクエストを投げるのですが,それを止めるために -HR をいうオプションを渡しています.

      • The tcpserver program
      #!/bin/sh
      
      exec env - PATH="/var/qmail/bin:$PATH" \
      qmail-start ./Maildir splogger qmail 2 &
      
      #Starting smtpd/tcpserver
      echo "Starting smtpd/tcpserver..."
      /usr/local/bin/tcpserver -HR \
      -x /etc/tcprules/smtp.cdb \
      -u qmaild -g nofiles \
      0 smtp \
      /var/qmail/bin/qmail-smtpd \
      2>&1 | /var/qmail/bin/splogger smtpd 2 &
      
      # Starting pop3d/tcpsrver
      echo "Starting pop3d/tcpserver..."
      /usr/local/bin/tcpserver -HR \
      -x /etc/tcprules/pop3.cdb \
      0 pop3 \
      /var/qmail/bin/qmail-popup mizba.net \
      /bin/checkpassword \
      /var/qmail/bin/qmail-pop3d Maildir \
      2>&1 | /var/qmail/bin/splogger pop3d 2 &

    以上で設定完了です. qmail は非常に堅いアプリケーションで,長い間セキュリティーホールは一つも発見されていませんでした. ただ,現在のところ唯一このようなものがあります. ご注意ください.

    • qmailにバッファオーバーフローの脆弱性
    TIPS - パッチの当て方

    パッチを当てる際に,いちいちパッチのファイルをローカルに保存する必要はありません.

    $ patch -p1

    として patch を実行した状態で,ターミナル画面にパッチの中身をペースト. 標準入力から patch に流れ込みます. ペーストし終えたら,ctrl + D で終了です.

    [ permalink ] [ 0 comment(s) ]
  • 000447
    Fedora その後の各種作業
    miz 2004-12-23 22:57
    このエントリーを含むはてなブックマーク はてなブックマーク - Fedora その後の各種作業

    諸事情で作業のペースをあげます. 細かな記録は整形せずにテキスト化します. 精度は,一月以内ならば自分がそのテキストを見ながら同じ作業を行える程度. このエントリには,その項目と概略のみを記します. 詳細は今後余裕を見てアップ予定.

    最初に,作業の目的から. 本番運用サーバーを Fedora Core 3 に移行するにあたり,そのセットアップ作業中に最低限のサービスを確保するために VAIO 505R を仮サーバーとして運用する準備です.

    • 静的 IP に変更

      現在,本番運用サーバーから DHCP で各種ネットワーク設定を取得していますが,移行作業中は自前でネットワーク設定を行わなければなりません.

      • /etc/sysconfig/network-scripts/ifcfg-eth0
      • /etc/resolv.conf
    • DHCP サーバーとして設定

      移行作業中は VAIO 505R からネットワーク設定を取得します.

      • /etc/dhcpd.conf
    • DNS サーバーとして設定

      移行作業中は VAIO 505R が DNS サーバーとして稼動します.

      • /etc/named.conf
      • /etc/named/*
    • qmail のセットアップ

      移行作業中は一時的に VAIO 505R にメールを貯めます.

    • Apache のセットアップ

      お詫びページを表示しておくために使用します.

    [ permalink ] [ 0 comment(s) ]
  • 000445
    iptables -m limit のアルゴリズム
    miz 2004-12-18 13:30
    このエントリーを含むはてなブックマーク はてなブックマーク - iptables -m limit のアルゴリズム

    iptables の設定を行っていて,limit モジュールに与えるオプションの意味がわからなくなってきたので Linux Kernel のソースを読んでみました.

    以下のドキュメントにも limit モジュールの詳細が載っています.

    • Linux 2.4 Packet Filtering HOWTO 7.3 フィルタリングの仕様

    まず,limit モジュールに与えるオプションがコード内で持つ意味を示します.

    include/linux/netfilter_ipv4/ipt_limit.h
    --limit平均パケット到着間隔.要するに --limit の逆数.--limit は内部で逆数として扱われる.
    --limit-burst瞬間最大パケット数

    チェーンにルールを追加する際の初期化は次のように行われます.

    net/ipv4/netfilter/ipt_limit.c
    持ち点 = 平均パケット到着間隔 * 瞬間最大パケット数
    持ち点の上限 = 平均パケット到着間隔 * 瞬間最大パケット数
    減点幅 = 平均パケット到着間隔

    パケットが到着するごとに以下の計算が行われます.

    net/ipv4/netfilter/ipt_limit.c
    持ち点 += 前回のパケット到着からの経過時間
    if ( 持ち点 > 持ち点の上限 ) 持ち点 = 持ち点の上限
    if ( 持ち点 >= 減点幅 ) {
      持ち点 -= 減点幅
      パケット許可
    }
    パケット拒否

    これを,平均パケット到着間隔で正規化するとロジックがわかりやすくなります.

    持ち点 = 瞬間最大パケット数
    持ち点の上限 = 瞬間最大パケット数
              前回のパケット到着からの経過時間
    持ち点 += -------------------------------
                    平均パケット到着間隔
    if ( 持ち点 > 持ち点の上限 ) 持ち点 = 持ち点の上限
    if ( 持ち点 >= 1 ) {
      持ち点 -= 1
      パケット許可
    }
    パケット拒否

    パケット到着ごとに一点減点され,時間の経過とともに徐々に点数が回復していく,という挙動です. 減点されて持ち点が一点を下回ると,一点以上に回復するまではパケットを拒否します. 瞬間最大パケット数 (--limit-burst) は初期持ち点(かつ最大持ち点)を表し,平均パケット到着間隔 (--limit の逆数) は回復するレートを表します.

    実際の Linux Kernel ソースコードでは,これらに underflow 防止のロジックや各種補正計算がくっついているため多少追いにくくなっていますが,基本的な考え方を押さえておけば理解しやすいかと思います.

    以下に,--limit-burst 4 の場合の模式図を示します. 赤掛けの部分がパケットが拒否される期間です. 右肩上がりの線分の傾きは --limit により変化します.

    最後に,このエントリで使用した用語とソースコード内の変数名との対応を載せておきます. ご自身でソースを読み解く際のご参考までに.

    credit持ち点
    credit_cap持ち点の上限
    avg平均パケット到着間隔
    burst瞬間最大パケット数
    cost減点幅
    [ permalink ] [ 0 comment(s) ]
  • 000444
    Fedora Core 1 で Firewall 構築
    miz 2004-12-18 10:44
    このエントリーを含むはてなブックマーク はてなブックマーク - Fedora Core 1 で Firewall 構築

    続いて,Firewall としての設定を行います.

    現在契約しているプロバイダはグローバル IP を一つしかもらえないので,IP Masquerade を使用して複数のクライアントがインターネットにアクセスできるよう設定します. さらに,iptables でパケットフィルタリングの設定を行い,接続可能なホスト,使用可能なサービスを制限します.

    • Linux 2.4 Packet Filtering HOWTO
    • Linux IP Masquerade HOWTO(November 14, 2000.ちょっと古めです.)
    • JM : iptables

    今回は,Linux Box で提供するサービスはローカル向きの SSH だけとします. また,IP Masquerade はローカル --> グローバル のみを許可します.

    この設定を順に実行する過程で,一時的にセキュリティーが低下するステップがあります. 下記を step-by-step で実行する際は十分に注意してください. なるべく,下記設定を理解した上でスクリプト化するなどして,セキュリティーが低下している時間をなくすよう対策を行ってください.
    1. IP packet forwarding の設定

      最初に,複数 NIC 間でのパケットのやりとりを有効に設定します.

      # echo 1 > /proc/sys/net/ipv4/ip_forward

      ただし,上記設定は再起動を行うと元に戻ってしまいます.そこで /etc/sysctl.conf の以下の行を "1" に変更します.

      # Controls IP packet forwarding
      net.ipv4.ip_forward = 1
    2. 幾つかの iptables 以外の設定

      Linux Box をネットワークに接続するにあたって,セキュリティの観点から幾つかの設定項目を変更します.

      # cd /proc/sys/net/ipv4
      # echo 1 > icmp_echo_ignore_broadcasts
      # for i in conf/*/accept_source_route; do
      > echo 0 > $i
      > done
      # for i in conf/*/accept_redirects; do
      > echo 0 > $i
      > done

      それぞれ以下のような設定です.

      • Broadcast の PING (echo request) を拒否します.Broadcast PING はサブネット内のマシンを検出する目的で使われることがあります.
      • IP のソースルートオプションを無視します.ソースルートは IP パケットが経由すべきネットワークノードを明示的に指定するものです.これを使用すると man-in-the-middle 攻撃も可能となる場合があります.
      • IP のリダイレクトオプションを無視します.これは,何だっけな・・・.
    3. SSH のみの提供

      最初に,グローバル向きのインタフェースからのパケットをすべて破棄します.

      # iptables -A INPUT -i ppp0 -j DROP

      続いてローカル向きインタフェースへの SSH (22 番ポート) を許可します.

      # iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
      # iptables -A OUTPUT -o eth0 -p tcp --sport 22 -j ACCEPT

      最後に,上記にマッチしなかった場合の処理を定義します.

      # iptables -P INPUT DROP
      # iptables -P OUTPUT DROP
    4. IP Masquerade の設定

      ppp0 から出てゆくパケットは IP Masquerade の対象とします.

      # iptables -t nat -P POSTROUTING ACCEPT
      # iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
      # iptables -t nat -P PREROUTING ACCEPT
    5. 保存

      以上の設定は,再起動すると消えてしまします.設定を保存しておきましょう.

      # /etc/rc.d/init.d/iptables save

    簡単な設定の手順は以上です. 以下,更に詳細なルールを設定するにあたっての参考に.

    • TCP, UDP は大抵の場合 in と out の双方のパケットがあってはじめて意味をなします.どちらか一方のみを許可し,もう一方を拒否している場合は正常な通信が行えません.
    • TCP の 3 way handshake を理解しましょう.--syn で SYN パケットを引っ掛けることができるので,自分がクライアントなのかサーバーなのかで異なるルールを設定することができます.ポートによる振り分けの際にはどちらなのかを意識しましょう.
    [ permalink ] [ 0 comment(s) ]
  • 000443
    EveryDNS.net で Dynamic DNS
    miz 2004-12-12 22:17
    このエントリーを含むはてなブックマーク はてなブックマーク - EveryDNS.net で Dynamic DNS

    ADSL 接続ができるようになったので,次は Dynamic DNS の設定を行います. Dynamic DNS というのは,固定 IP アドレスを取得できないかわいそうな人たちのために,ホスト名に対応する IP アドレスを動的に変更することができる仕組みです.

    • RFC2136 : Dynamic Updates in the Domain Name System (DNS UPDATE)

    とはいえ,DNS サーバーが勝手にホストの状態を監視して設定を変更してくれるわけではなく,クライアント側から IP アドレスの変更を通知しなければなりません. ぼくは EveryDNS.net というサービスを利用しているので,通知のためのツールとして eDNS.pl というものを使用します.

    • EveryDNS.net
    • eDNS.pl
    1. ダウンロード

      eDNS.pl.txt をダウンロードし,適当な場所に "eDNS.pl" として保存します.

      $ wget http://www.everydns.net/eDNS.pl.txt
      $ mv eDNS.pl.txt eDNS.pl
      $ chmod +x eDNS.pl
    2. パッチの適用

      オリジナルの eDNS.pl は引数として IP アドレスを渡す必要があったり,色々あるので少し改変しました.パッチを以下のロケーションにおいてあります.

      • eDNS.pl.patch
      $ patch < eDNS.pl.patch
    3. 設定

      eDNS.pl に EveryDNS.net のユーザー名,パスワードなどを書き込みます.

    4. 定期実行

      以下のように crontab の設定を行います.実行間隔は適当に調整してください.IP アドレスが変更にならないと変更要求が飛ばないので,間隔を短くしても EveryDNS.net のサーバーに迷惑をかけることはありません.

      $ crontab -e
      */3 * * * * /usr/local/bin/eDNS.pl
    [ permalink ] [ 2 comment(s) ]
  • 000442
    rp-pppoe で ADSL 接続
    miz 2004-12-12 17:43
    このエントリーを含むはてなブックマーク はてなブックマーク - rp-pppoe で ADSL 接続

    ぼくが使っているフレッツ ADSL は,交換局と加入者宅間の通信に PPP over Ethernet (PPPoE) というプロトコルを使用しています.

    • フレッツ公式ホームページ
    • PPP over Ethernet

    今回,Fedora Core 1 がインストールされいるマシンで,ADSL 接続の設定を行います. Fedora Core 1 にはデフォルトの PPPoE クライアントとして rp-pppoe が入っています.

    • Roaring Penguin 社
    • rp-pppoe
    1. 設定ファイルの準備

      /usr/share/doc/rp-pppoe-3.5/configs/pppoe.conf に雛形が用意されていたのでこれを使用します.

      # cd /etc/ppp
      # cp /usr/share/doc/rp-pppoe-3.5/configs/pppoe.conf .

      雛形が上記ロケーションにない場合は以下のように探してみてください.

       # rpm -ql rp-pppoe | grep pppoe.conf
    2. 設定ファイルの編集

      ADSL モデムに接続されている NIC ,接続に使用するユーザー名を設定します.

      # Ethernet card connected to ADSL modem
      ETH=eth0
      ...
      USER=guest@flets
    3. 認証情報の設定

      パスワードをファイルに書き込みます.編集するファイルは以下の二つです.

      • chap-secrets
      • pap-secrets
      "guest@flets"   *       "guest"
      PAP , CHAP というのは認証の方式です. PAP は認証情報が平文で流れますが,CHAP は Challenge Response 方式なので比較的安全です.
    4. 接続 / 切断

      以下のコマンドで接続します.

      # /usr/sbin/adsl-start

      以下のコマンドで接続状態を確認します.

      # /usr/sbin/adsl-status

      以下のコマンドで切断します.

      # /usr/sbin/adsl-stop
    5. 接続スクリプト

      VineLinux には次のようなスクリプトが付属されていました.なかなか便利です.

      • /etc/rc.d/init.d/adsl
    [ permalink ] [ 0 comment(s) ]
  • 000439
    apache 2.0.52 + php 5.0.2
    miz 2004-12-06 01:32
    このエントリーを含むはてなブックマーク はてなブックマーク - apache 2.0.52 + php 5.0.2

    PHP5 がなかなか面白げなので,麦酒堂を今後 PHP5 化してゆこうかと考えています.

    その第一弾として,既存環境の PHP4 を置き換えようとしたのですが apache が worker thread で構築されていて失敗. 仕方がないので apache を prefork で構築しなおすことにし,ついでに最新バージョンにあげました.

    • Apache 2.0.52 のインストール手順ログ
    • PHP 5.0.2 のインストール手順ログ

    今のところ,これまでの PHP4 系で書かれたスクリプトもきちんと動作しているようです. ただ,Vine の libxml2 が古くて,libxml2 関連の機能が動作しない状態です. これではせっかくの PHP5 の機能が活かせないので,OS から入れ直しを検討中です. それまでは,中途半端ながらこの環境で PHP5 でのプログラミングを試してゆきます.

    [ permalink ] [ 2 comment(s) ]
  • 000438
    Oracle Database 10g 30日間トライアル版
    miz 2004-12-05 20:24
    このエントリーを含むはてなブックマーク はてなブックマーク - Oracle Database 10g 30日間トライアル版

    ちょいと試してみようと思い,Oracle Database 10g の30日間トライアル版をインストールしました.

    • Oracle Database 10g のインストール手順ログ

    念の為書きますと,これはあくまでもぼくの個人的活動の範囲で行ったインストールの記録です. 参考にする場合がありましたら,どうぞ at your own risk でお願いします.

    [ permalink ] [ 0 comment(s) ]
  • 000391
    XFree86 の xfs にフォント追加
    miz 2004-08-30 01:00
    このエントリーを含むはてなブックマーク はてなブックマーク - XFree86 の xfs にフォント追加

    XFree86 4.2.1 on VineLinux2.6 の xfs にフォントを追加する手順です. 今回は *.ttc を *.ttf に分割するところから始めます.

    まずは *.ttc を *.ttf に分割するツール,ttc2ttf を入手します.

    TrueType Collection を True Type Font にバラす

    このサイトに ttc2ttf のソースがあるのでダウンロードしましょう. ただし,これだけでは Linux 上でコンパイルが通らないので,次のパッチを使ってください.

    ttc2ttf.linux.patch
     $ patch < ttc2ttf.linux.patch
    patching file ttc2ttf.cpp
    $ gcc -DINTEL -o ttc2ttf ttc2ttf.cpp
    ttc2ttf.cpp: In function `int main(int, char **)':
    ttc2ttf.cpp:47: warning: multi-character character constant

    文句を言われるけれど気にせずに.動きますから. コンパイルが完了したら,*.ttc を分割しましょう.

     $ ./ttc2ttf SH_G30.ttc
     $ ls *.ttc *.ttf
    SH_G30.ttc  SH_G300.ttf  SH_G301.ttf

    *.ttf を xfs が読めるディレクトリに移動します. /etc/X11/fs/config を参考に,既存のディレクトリを流用するのも楽でよいかもしれません. 自分でディレクトリを掘る場合は /etc/X11/fs/config への追加を忘れずに.

    そして当該ディレクトリで以下のように設定を行います.

     # cd <当該ディレクトリ>
     # ttmkfdir > fonts.dir

    最後に,xfs を再起動すれば完了です.

     # /etc/rc.d/init.d/xfs restart
    [ permalink ] [ 0 comment(s) ]
  • 000356
    貴重な体験
    miz 2004-07-02 10:50
    このエントリーを含むはてなブックマーク はてなブックマーク - 貴重な体験

    時々話には聞くけれど,実際に目にしたのは初めてでした. (やったのはぼくではないですよ.)

     $ TMPDIR=/home/tmp
     $ export TMPDIR
     $ su -
     Password:
     # rm -fr $TMPDIR/*

    何が起こるか判りますか?

    でも,これってそれほど特殊なコマンドシーケンスでもなくて,結構やってしまいそうなので注意したいです.

    [ permalink ] [ 2 comment(s) ]
  • 000270
    一時ディレクトリの作成 2
    miz 2004-02-19 23:38
    このエントリーを含むはてなブックマーク はてなブックマーク - 一時ディレクトリの作成 2

    以前,一時ディレクトリの作成 というエントリを書きました.これはこれで便利だったのだけれど,日付のディレクトリがずらりと並んでしまい,何に使っていたものなのかが良くわからない状態になってしまいました.そこで,半ば強制的に README を書くように変更しました.

    #!/bin/sh
    
    TMPBASE=${PWD}
    TMPNAME=`date +%Y-%m-%d`
    SEQ=0
    SUFFIX=
    
    _NOREADME=""
    if [ ! "x${1}" == "x" ]; then
      if [ "x${1}" == "x-q" ]; then
        _NOREADME="y"
        if [ ! "x${2}" == "x" ]; then
          TMPBASE=${2}
        fi
      else
        TMPBASE=${1}
      fi
    fi
    
    while [ -d ${TMPBASE}/${TMPNAME}${SUFFIX} ];
    do
      SEQ=`dc -e "${SEQ} 1 + p"`
      if [ 10 -gt ${SEQ} ]; then
        SUFFIX="_0"${SEQ}
      else
        SUFFIX="_"${SEQ}
      fi
    done
    
    mkdir ${TMPBASE}/${TMPNAME}${SUFFIX}
    if [ $? -eq 0 ]; then
      if [ "x${TMPBASE}" == "x${PWD}" ]; then
        echo "\"${TMPNAME}${SUFFIX}\" is created."
      else
        echo "\"${TMPBASE}/${TMPNAME}${SUFFIX}\" is created."
      fi
    fi
    
    if [ "x${_NOREADME}" == "xy" ]; then
      exit
    fi
    
    README=${TMPBASE}/${TMPNAME}${SUFFIX}/README
    cat <<___END___> ${README}
    // Filename:    README
    // Author:
    // Created:     `date "+%Y-%m-%d %H:%M"`
    // Updated:     `date "+%Y-%m-%d %H:%M"`
    // Description: about this directory
    // //////////////////////////////
    
    ___END___
    vi ${README}
    [ permalink ] [ 0 comment(s) ]
  • 000268
    ndtpd のセットアップ
    miz 2004-02-15 20:02
    このエントリーを含むはてなブックマーク はてなブックマーク - ndtpd のセットアップ

    長らく,やろうと思っていながら先延ばしにしてしまっていた,ndtpd のセットアップを行いました.ndtp は Network Dictionary Transfer Protocol で,ネットワーク経由で辞書検索を行うためのプロトコルです.そのサーバが,ndtpd.この ndtpd を動かすためには,辞書ファイルを直接操作する EB ライブラリ が必要になります.

    EB ライブラリのセットアップログ

    ndtpd のセットアップログ

    ここまで作業を終えると,telnet で辞書検索が行えるようになります.しかし,ndtp のコマンドがよく判らなかったので,ソースコードからコマンド一覧を起こしました.

    ndtp のコマンド一覧

    でもさすがに,telnet で辞書検索は厳しいので,PHP の勉強を兼ねて,Web からの検索インタフェースを作ろうかと思います.

    [ permalink ] [ 0 comment(s) ]
  • 000266
    Fedora on VAIO 505R
    miz 2004-02-13 12:59
    このエントリーを含むはてなブックマーク はてなブックマーク - Fedora on VAIO 505R

    昨晩,ふと思い立って,VAIO 505R に Fedora core 1 をインストールしました.睡眠時間を削ってまですることなのかと,疑問に思わないでもないですが・・・.

    思い立ったのは良いのですが,この VAIO には大きな問題がありまして,頂きもののため CD-ROM ドライブが付いていません.となると,ネットワーク経由でインストールする必要があります.ぼくの手元にある Ethernet 用の PCMCIA カードは Corega Ether II PCC-TD.ソケット一体型なので,使い勝手は良いのですが,fedora のインストールディスクはデフォルトでは対応していません.そこで,次のサイトを参考にして,インストールディスクに手を入れました.

    [linux-users:84044] [報告]CoregaEther PCC-TD

    CD-ROM のないノート PC に、Corega Ether PCC-TD から Vine 2.1 をインストールする方法

    このリンク先は Ether PCC-TD の話なので,厳密には型番が異なりますが,チップは一緒なのでいけるでしょう.

    Corega Ether II PCC-TD 経由での Fedora core 1 インストールログ

    以上で,無事にセットアップ完了です.省電力サーバにでも仕立て上げようかなと思っています.

    [2004-02-15 02:00] 追記

    インストールに使用した起動ディスクのイメージをアップしておきます.

    bootdisk.img
    [ permalink ] [ 0 comment(s) ]
  • 000265
    NFS の設定(サーバ編)
    miz 2004-02-12 01:53
    このエントリーを含むはてなブックマーク はてなブックマーク - NFS の設定(サーバ編)

    Windows Services for UNIX の機能を試すために,Linux 機を NFS サーバとしてセットアップしました.インストール自体はカーネルの再構築と rpm で済んでしまうので,設定周りについて書きます.

    /etc/exports の編集

    NFS 経由で公開したいディレクトリを設定します.詳細はこちら.NFS は,マウント先の uid/gid でファイル操作されるので,注意しましょう.特に no_root_squash を設定するのは,非常に危険です.リスクを充分に理解した上で運用してください.

    mountd のポート

    mountd はデフォルトではランダムにポートを開きます.パケットフィルタリングルールの記述が難しくなるため,固定ポートを開くように設定しました.

    /etc/sysconfig/network に以下の行を追加

    MOUNTD_PORT=801

    VineLinux2.5 の場合は,さらに /etc/rc.d/init.d/nfs に記述ミスがあったため,それを修正します.(49行目から)

    if [ -n "$MOUNTD_PORT" ]; then
        RPCMOUNTDOPTS="$RPCMOUNTDOPTS --port $MOUNTD_PORT"
    fi

    lockd のポート

    lockd もランダムでポートを開きます.これはカーネルが直接起動しているため,カーネルパラメータで指定する必要があります.

    image=/boot/vmlinuz-2.4.24-20040208
            label=2.4.24
            read-only
            root=/dev/hde5
            append="lockd.udpport=802"
     # lilo 

    rquotad のポート

    これだけは,どうやってもポートを指定できませんでした.今のところ必須というわけではないため,起動しないことにします.

     # chmod -x /usr/sbin/rpc.rquotad

    いよいよ起動

    起動しましょう.

     # /etc/rc.d/init.d/portmap start
     # /etc/rc.d/init.d/nfs start 

    この順番は大切です.必ず portmapper を先に起動しましょう.portmapper は,サービスのレジストリの役割を果たします.mountd , lockd などは起動時に portmapper にサービスを登録するため,nfs よりも portmapper が先に起動している必要があります.

    サービスの状況は rpcinfo で確認することができます.

     $ rpcinfo -p
       program vers proto   port
        100000    2   tcp    111  portmapper
        100000    2   udp    111  portmapper
        100005    1   udp    801  mountd
        100005    1   tcp    801  mountd
        100005    2   udp    801  mountd
        100005    2   tcp    801  mountd
        100005    3   udp    801  mountd
        100005    3   tcp    801  mountd
        100003    2   udp   2049  nfs
        100003    3   udp   2049  nfs
        100021    1   udp    802  nlockmgr
        100021    3   udp    802  nlockmgr
        100021    4   udp    802  nlockmgr

    /etc/exports を編集した場合には

    exportfs で変更を反映します.特に再起動等は必要ないようです.

     # exportfs -r

    [ permalink ] [ 0 comment(s) ]
  • 000262
    kernel を 2.4.24 に
    miz 2004-02-08 12:40
    このエントリーを含むはてなブックマーク はてなブックマーク - kernel を 2.4.24 に

    Windows Services for UNIX は NFS クライアントの機能も提供するので,試そうと思ったのですが,我が家の Linux 機は nfs 無効でコンパイルしてありました.リコンパイルのついでに,バージョンを 2.4 系の最新である 2.4.24 に上げました.

    kernel2.4.24 へのアップデートログ

    作業のキモになる Configuration の部分を端折っているので,あまりログの意味はないかもしれませんが・・・.menuconfig で表示されるヘルプを手がかりに設定を行えば,何とかなるはずです.

    [ permalink ] [ 0 comment(s) ]
  • 000259
    ezwebにメールが届かない
    miz 2004-02-05 13:53
    このエントリーを含むはてなブックマーク はてなブックマーク - ezwebにメールが届かない

    自宅の SMTP サーバから ezweb.ne.jp 宛にメールを送ろうとすると,接続が拒否されるという問題が発生していました.しかも,キュー内にしばらく (数日間) とどまった後にエラーが返るため,ちょっと痛い状況です.調べてみたところ,ezweb の SMTP サーバがはじいている可能性が高そうです.

    auの迷惑メール対策でメールが送れません。
    EIMS1.3.1でezwebにのみ送信できない

    かなり前から知られていた問題なのですね.知らなかったぼくが悪いのかな・・・.

    自宅 SMTP サーバで明示的に経路指定を行えば,解決しそうです.qmail で経路指定を行うための設定ファイルは smtproutes のようです.

    今ちょっと出先なので,帰宅し次第試してみます.

    [2004-02-06 02:25 追記]

    実際に試してみました./var/qmail/control/smtproutes に以下のように記述しました.

    ezweb.ne.jp:<ISPのSMTPサーバ>

    どうやらこれでうまくいったようです.

    [2004-02-07 01:45 追記]

    keio.ac.jp にもはじかれてしまいました.もういっそと,こうしてしまいました.

    :<ISPのSMTPサーバ>

    自宅 SMTP サーバ,意味無し!

    [ permalink ] [ 0 comment(s) ]
  • 000247
    PHP4 のセットアップ
    miz 2004-01-30 08:19
    このエントリーを含むはてなブックマーク はてなブックマーク - PHP4 のセットアップ

    以前から入れようと思っていて先延ばしになっていた PHP をセットアップしました.

    php4.3.4 セットアップログ

    現在運用している apache2 が worker で動いているので,セットアップも多少注意が必要でした.セットアップだけではなく動作も不安といえば不安なのですが,特にクリティカルな用途でもないので,問題が起きてから対処したいと思います.(ファイルロックあたりが多少不安)

    今後,複眼中心 に倣い,麦酒堂もインタフェースを php 化してゆく予定です.

    [ permalink ] [ 15 comment(s) ]
  • 000242
    Cygwin/X
    miz 2004-01-25 14:11
    このエントリーを含むはてなブックマーク はてなブックマーク - Cygwin/X

    未だに環境構築に手を焼いています.満足のゆく環境でないと気が散って仕事がはかどらない性分は,何とかならないものか・・・.

    今度は Cygwin/X を試してみました.Windows 上で動くフリーの X Server です.だいぶん前にセットアップはしていたのだけれど,いかんせん TeraTerm さえあれば十分な使い方しかしていなかったので,忘れていました.

    インストールの詳細な手順は,Cygwin/X の User's Guide を参照してください.ぼくがインストールしたころから,もしかしたら手順が多少変わっているかも知れませんが,基本的には "XFree86" というカテゴリを "Default" で入れれば良いはずです.

    [2004-01-26] "Default" ではなく "Install" でした.

    起動するには /usr/X11R6/bin にある "startxwin.bat" というバッチファイルを走らせれば良いのですが,デフォルトであがる xterm はいらないのでちょっと編集しました.

    startxwin.bat

    [2004-01-25] レイアウトがあまりにひどいのでリンクにしました

    コメント行などは省略しています.xterm を起動する行を消し,最後に xhost を追加しました.これにより,該当する IP アドレスからウィンドウを飛ばすことが出来るようになります.逆に xhost しないのであれば xterm は起動してあげたほうが良いです.面倒なので.

    あとはこのバッチファイルを実行すれば,Cygwin/X サーバが起動します.タスクトレイにアイコンが現れるはずです.終了はこのアイコンからどうぞ.

    以上を終えた上で,Linux box で次のように Tgif を走らせれば,Windows マシンに Tgif のウィンドウが表示されます."192.168.1.1" の部分は適宜変更してください.

    $ DISPLAY=192.168.1.1:0 tgif &

    しかし,この Tgif は日本語入力,日本語のコピペなどが出来ませんでした・・・.そこまで調査する余裕はさすがになく,結局は tightVNC に逆戻りです.となると,ぼくがこれを使う可能性があるのは ethereal くらいだな・・・.

    [ permalink ] [ 4 comment(s) ]
  • 000241
    Tgif の *.obj を一括変換
    miz 2004-01-24 19:02
    このエントリーを含むはてなブックマーク はてなブックマーク - Tgif の *.obj を一括変換

    Tgif で図を書くと,*.obj で保存されます.しかし LaTeX で読み込むためには EPS 形式で出力しなければなりません. 編集している間なら Ctrl+P で良いのですが,なにかの理由で *.eps を消してしまうともう一度 Tgif で開いて出力しなおさなければなりません.これは面倒. そこで, make 一発で *.obj を *.eps に変換するための Makefile 記述例です.

    OBJ_FILES=$(wildcard *.obj)
    EPS_FILES=$(addsuffix .eps , $(basename $(OBJ_FILES) ) )
    
    .SUFFIXES: .obj .eps
    
    TGIF=tgif
    TGIF_OPT=-print -eps -one_file_per_page
    
    default: $(EPS_FILES)
    
    .obj.eps:
    	$(TGIF) $(TGIF_OPT) $<
    
    clean:
    	-rm -f *.eps
    [2004-01-25] wildcard と -one_file_per_page を追加

    これで

    $ make

    とすれば *.obj ファイルのうち更新分を *.eps に変換してくれます.

    GNU Make version 3.79 , Tgif Version 4.1 (patchlevel 41) にて動作確認済みです.

    [ permalink ] [ 8 comment(s) ]
  • 000240
    $CLASSPATH の表示
    miz 2004-01-23 13:59
    このエントリーを含むはてなブックマーク はてなブックマーク - $CLASSPATH の表示

    論文を書き進めながら,並行して未だに Java を書いています.Java をいじるときは,普通は環境変数 CLASSPATH を設定するのだけれど,":" 区切りで一行に詰め込むため,

    $ echo $CLASSPATH

    とやっても非常に読みにくいです.そこで,.bash_profile などに以下のように記述しておきます.

    showClassPath () {
      echo $CLASSPATH | perl -pe 's/:/\n/g;'
    }

    これで,

    $ showClassPath

    とすると,":" を改行に置換して表示してくれるので,1行1Path になります.

    同様に $PATH にも応用可能.

    [ permalink ] [ 0 comment(s) ]
  • 000237
    tightVNC
    miz 2004-01-22 18:19
    このエントリーを含むはてなブックマーク はてなブックマーク - tightVNC

    ぼくの修論執筆環境は自宅のPC上に構築しているため,研究室にいるときも SSH で自宅にログインして作業しています.いままでは主に裏のロジック部分と Web のインタフェース部分のコーディングを行っていたため,TeraTerm + TTSSH と Mozilla があれば事足りていました.しかし,ここに来て,(やっと)実際に論文を書くことになり,さすがにこれまでの環境では厳しくなってまいりました.最初は *.dvi を WebDAV 経由で研究室の PC に持ってきて,dviout で開くという,かなりな荒業でしのいでいたのだけれど,もう無理.

    というわけで,SSH port forwarding 経由で VNC を使うことにしました.が,重い.自宅で使っている分には平気だったのですが,研究室から使うには厳しめです.

    そして見つけたのが tightVNC です.標準の VNC のプロトコルを拡張し,データの圧縮や認証経路の暗号化などを施したものです.下位互換性は確保されており,tightVNC のサーバに標準の VNC クライアントでつないでもきちんとつながります.特徴は ここ に簡単にまとめてあります.これは標準の VNC に比べるとかなり早く,しかもなぜか表示がとてもきれいになりました.理由は不明.

    ただし,これらの恩恵を享受するためには,サーバ側も tightVNC を使わないといけない点には注意しましょう.サーバが標準の VNC のまま,クライアントだけ tightVNC を使っても,画質,速度ともに変化はありませんでした.Linux の場合は RPM が用意されているので,インストールは簡単です.もし標準の VNC をすでにインストールしてあった場合は

    # rpm -e vnc-server

    で先にアンインストールしましょう.パッケージ名が異なるため "-U" が効かず,ファイルの依存関係がぐちゃぐちゃになる恐れがあります.
    # rpm -ivh tightvnc-server-1.2.9-1.i386.rpm

    でインストール完了.

    次はサーバの起動だけれど,SSH port forwarding を用いる関係上,127.0.0.1 で聴いてくれれば十分です.

    $ vncserver :0 -localhost

    vncserver はデフォルトで 5900 + ディスプレイ番号 のポートで聴くので,
    $ netstat -na | grep 5900
    tcp 0 0 127.0.0.1:5900 0.0.0.0:* LISTEN

    とすれば起動したかどうかを調べられます.

    次に,自宅 PC に TTSSH でログインします.
    その上で [Setup] ==> [SSH Forwarding] ==> [Add]
    で SSH Port Forwarding の設定画面を開き,

    Forward local port : 5900
    to remote machine : 127.0.0.1
    port : 5900

    と設定し,tightVNC のクライアントを起動します.サーバは "127.0.0.1:0" を指定.お好みで Option の設定などを行ってから接続します. Option では圧縮方式や JPEG の圧縮率などを指定できるのだけれど,目いっぱいまで圧縮率を上げてもたいして画質が落ちないので,いまは最大の 9 を使っています.
    さらに Full Screen 表示にすると,デスクトップ画面が VNC に取って代わられたような感じになり,より使いやすくなります.Alt + TAB などは普通に効くので問題ありません.

    という感じで,ぼくの研究室 PC の必需品に tightVNC が加わりました.提出まであと7日!

    [ permalink ] [ 0 comment(s) ]
  • 000236
    qmail にセキュリティホール
    miz 2004-01-21 22:30
    このエントリーを含むはてなブックマーク はてなブックマーク - qmail にセキュリティホール

    gadget に教えていただきました.ありがとう.

    qmailにバッファオーバーフローの脆弱性 - slashdot

    なんと,あの qmail がです.今のところ回避策は見つかっていないようですが,とうとう 1.04 が出るのでしょうかね.セキュリティホールを見つけた人には,qmail の作者から賞金が出るという噂も耳にしたことがあるのだけれど,その行方も気になるところ.

    ちなみに,このセキュリティホールがぼくのサーバに与える影響だけれど,うちで動いている qmail-smtpd は rcpthost で制限をかけているので, DATA を発行する前に拒否することはします.しかし,ぼくのドメイン宛の場合はまったく効果なし.困った・・・.しばらくはこのニュース追いかけておかないと,あぶないですな・・・.

    いやぁ qmail にも穴はありましたなぁ.その枯れっぷりと堅さには定評があったのに.やはり,プログラムに完璧はありえないのでしょうかね.

    [ permalink ] [ 3 comment(s) ]
  • 000232
    一時ディレクトリの作成
    miz 2004-01-18 20:34
    このエントリーを含むはてなブックマーク はてなブックマーク - 一時ディレクトリの作成

    YYYY-MM-DD[_XX]という形式の作業用ディレクトリを作るシェルスクリプトを書いてみました."_XX" は通し番号で,既存のディレクトリと重複しないように,ディレクトリ名の末尾に付与されます.

    #!/bin/sh
    TMPBASE=${PWD}
    TMPNAME=`date +%Y-%m-%d`
    SEQ=0;
    SUFFIX=
    
    if [ ! "x${1}" == "x" ]; then
      TMPBASE=${1}
    fi
    
    while [ -d ${TMPBASE}/${TMPNAME}${SUFFIX} ];
    do
      SEQ=`dc -e "${SEQ} 1 + p"`
      if [ 10 -gt ${SEQ} ]; then
        SUFFIX="_0"${SEQ}
      else
        SUFFIX="_"${SEQ}
      fi
    done
    
    mkdir ${TMPBASE}/${TMPNAME}${SUFFIX}
    if [ $? -eq 0 ]; then
      if [ "x${TMPBASE}" == "x${PWD}" ]; then
        echo "\"${TMPNAME}${SUFFIX}\" is created."
      else
        echo "\"${TMPBASE}/${TMPNAME}${SUFFIX}\" is created."
      fi
    fi
    

    スクリプトを組むちょっとの手間で,作業効率が大きく向上するのが,シェルスクリプトの良いところですな.

    [ permalink ] [ 0 comment(s) ]
  • 000223
    mod_proxy で SSL 対応 Proxy
    miz 2004-01-14 19:11
    このエントリーを含むはてなブックマーク はてなブックマーク - mod_proxy で SSL 対応 Proxy

    このコメントに関して,実際に実験してみました.

    Proxy を使って,自宅に SoftEther 仮想 HUB を立てる実験です

    結果は,見事に成功.プライベートアドレスを持った Win2000 サーバ上で動いている,SoftEther 仮想 HUB に Proxy 経由でつながりました.自宅の Win マシンを立ち上げっぱなしにすることを厭わなければ,研究室からでも快適な TeX 編集が可能かもしれません.(<-ここが自分の中での大義名分.)

    SSL 対応 Proxy サーバの立ち上げ方法はこちらをどうぞ.
    mod_proxy のセットアップログ

    [ permalink ] [ 1 comment(s) ]
  • 000219
    WebMail の導入
    miz 2004-01-13 11:56
    このエントリーを含むはてなブックマーク はてなブックマーク - WebMail の導入

    ぼくは,出先で自宅に届いたメールを確認したい,なんてことが結構頻繁にあります.
    今までは apache + mod_ssl で直接 Maildir をのぞいていたのだけれど,当然使い勝手は悪く,しかも閲覧のみしか行えず,返信などは不可能でした.

    そこで,フリーのWebMailシステムを導入してみました.

    SqWebmail
    日本語の解説ページ

    Maildir をローカルで直接のぞく WebMail システムです.
    ここで試すことが出来ます.
    webmail@webmail.com/webmail でログインが可能.

    セットアップログはこちらになります.

    SqWebMail セットアップログ

    まだ自宅からしか試していないけれど,とても快適です.返信,転送,ファイル添付も可能で,YahooMail などと較べても遜色ありません.From を変更することも可能だったり,こちらのほうが優っている点もいくつかあります.

    まぁ,自由度という点では,電信八号には遠く及びませんが,Web 経由でそこまで求めても仕方がないですね.

    [ permalink ] [ 4 comment(s) ]
  • 000208
    apache2.0 のセットアップ
    miz 2004-01-02 16:19
    このエントリーを含むはてなブックマーク はてなブックマーク - apache2.0 のセットアップ

    これまでは apache1.3 の上で Movabletype を動かしていたのですが,今日から apache2.0 に移行しました.
    その作業ログです.

    apache2.0
    mod_ssl
    WebDAV
    mod_jk2

    これらのログは,正確には昨日行った443番 (SSL) の移行作業のものなので,パスなどの細かな点は異なりますが,手順はほぼこのとおりです.また,mod_ssl , WebDAV は80 番では動いていませんが,参考資料ということで,リンクを張っておきます.

    本当は mod_jk2 を使っての oc4j との連携も試そうと思ったのですが,必須というわけではないので割愛しました.mod_jk2 も mod_jk と変わらず,ajp13 を話すので,恐らく問題なくつながるのではないかと,思ってはいます.

    移行を終えての感想は,インストールや設定のレベルでは,apache1.3 との大きな違いはありませんでした.ただ,設定ファイルやディレクティブが整理されていたり,mod_ssl が取り込まれていたりと,細かなところで楽になっている印象です.本当は MPM なんてのも良さそうではあるのですが,いかんせん,それほどスケーラビリティを要求するような使い方をしていないので,あまり恩恵がありませんなぁ.でも一応 80番は worker で動かしています.
    それと,mod_jk2 についての情報が Web 上にあまりなく,とりあえず動いていることは動いているけれど・・・という感じです.カウンタがおかしかったりしたら,お知らせください.
    (いまのところ mod_jk2 を通るのはカウンタだけです.)

    [ permalink ] [ 5 comment(s) ]
  • 000201
    bash のプロンプトをカスタマイズしてみる
    miz 2003-12-25 13:33
    このエントリーを含むはてなブックマーク はてなブックマーク - bash のプロンプトをカスタマイズしてみる

    ぼくはテキスト編集には vi をメインに使っていて,
    ^Z などを良く使います.
    また,シェルでは pushd/popd なども多用します.
    su を使って他ユーザになることも管理上必須です.

    これらは非常に便利ではあるのですが,
    何回使ったかが判らなくなることが,間々あります.
    こうなると,popd しても "空っぽよ" と怒られたり,
    ^Z の状態なのにそれを忘れてシェルから抜けてしまったり,
    いろいろと問題が出てきます.

    dirs , jobs , ps などで調べられなくもないのですが,
    それはそれで面倒です.
    そこで,プロンプトに常に表示させることにしました.

    まず,background jobs の表示は bash-2.04 の
    標準機能で可能でした.

    \j

    次に,directory stack は標準では無理だったので,
    スクリプトを組むことにしました.
    dirs の出力を wc で数えればよいのですが,
    pushd しなくてもカレントディレクトリが積まれてしまっています.
    そこで,dc で 1 を引くことにしました.

    echo `dirs -p | wc -l ` 1 - p | dc

    最後の,シェルの呼び出し回数がなかなか厄介で,
    ps でとろうにもうまくゆきません.
    そこで,vine2.5 のデフォルトでは ~/.bashrc から
    /etc/bashrc を常に読むことを利用して,
    /etc/bashrc に以下の行を追加しました.

    BASHNESTDEPTH=`echo ${BASHNESTDEPTH:-_1} 1 + p | dc`
    export BASHNESTDEPTH

    以上の下調べ & 準備を終えて,最終的にプロンプトを変更します.
    ~/.bashrc に以下の行を追加します.

    PS1='[\u@\h \j:\
    `echo \`dirs -p | wc -l \` 1 - p | dc`:\
    `echo ${BASHNESTDEPTH:--}` \w]\$ '

    表示はこんな感じ.

    [miz@linux 0:0:0 ~]$ su
    [root@linux 0:0:1 /home/miz]# vi test
    ^Z
    [root@linux 1:0:1 /home/miz]# pushd ~
    [root@linux 1:1:1 ~]# fg
    :q
    [root@linux 0:1:1 ~]# popd
    [root@linux 0:0:1 /home/miz]# ^D
    [miz@linux 0:0:0 ~]$

    使い勝手はなかなか良いです.
    ただし,"su -" してしまうと,
    シェルの起動数は正しく機能しないようです.
    これは,いかんともしがたい・・・.

    [ permalink ] [ 2 comment(s) ]
  • 000184
    qmail の設定見直し
    miz 2003-12-07 15:16
    このエントリーを含むはてなブックマーク はてなブックマーク - qmail の設定見直し

    というわけで,自前サーバをメールサーバに仕立てました. 以前から qmail は入っていて,MDA としては使っていたのですが,これからは MTA としての機能も活用してゆきます.

    [できるようになったこと]
    • 自前ドメインへのメールを手元で一括管理
    • PHS への転送
    • Web メールへの転送
    [問題点]
    • IPアドレスが変わったときに,DDNS に反映されるまではメールが届かない
    • サーバが停止している間はメールが届かない
    [手順]
    大きく3つにわかれます.
    1. qmail の設定見直し
    2. tcprules の設定見直し
    3. 転送設定

    参考にしたのはこのサイト.

    • MioCity
    • André Oppermann's Homepage の qmail 構成図
    1. qmail の設定見直し

      インストール自体はすでに終わっていたので省略./var/qmail/control/ 以下の設定を書きます.

      • me  

        これは必須です.

        mizba.net
      • plusdomain , defaultdomain
      • これらを設定すると,メール送信時に宛先のドメインを省略できます.でも,mizba.net にメールを送ることはないなぁ.

        mizba.net
      • locals

        このファイルに含まれるドメインが宛先になっているメールは,ユーザがこのサーバに存在するとみなしてローカル配信します.

        localhost
        mizba.net
      • rcpthost

        これはとても大事.SMTP で外から入ってくるメールの宛先 (正確にはRCPT) がここに含まれない場合は拒否します.ここでは,ローカル配信するもののみを書きます.さもないと,不正中継の踏み台にされます.ただ,このままだと,他のドメインへメールが送れないので,次の 02. tcprules の設定見直し を行ってください.

        localhost
        mizba.net
    2. tcprules の設定見直し

      自前サーバの qmail は,tcpserver を利用しています.これの設定次第で,特定のクライアントから送られてきたメールは,宛先 (RCPT) に関わらず中継するように設定できます.セットアップの詳細は省きますが,特定のクライアントからの接続には, RELAYCLIENT という環境変数を設定すれば,qmail は中継してくれます.

      /etc/tcprules/smtp.rules
      127.0.0.1:allow,RELAYCLIENT=""
      192.168.100.:allow,RELAYCLIENT=""
      :allow

      という感じでファイルを用意して,

      # tcprules smtp.cdb smtp.tmp < smtp.rules

      と,形式変換をします.

    3. 転送設定

      ~alias/ 以下に, .qmail ファイルを作成することで,転送設定を行えます. ここを参考にしてください.

      • INSTALL.alias

      ".qmail-default" というファイルは,システムデフォルトの転送先を指定します. 存在しないアカウント宛のメールは,すべてこの処理対象です. 例えば,"hoge@mizba.net" というアカウントを,"hogehoge@hogehoge.net" に転送したい場合は,~alias/.qmail-hoge というファイル内に,

      hogehoge@hogehoge.net

      と,一行記述します.

    以上のような感じで,設定完了です. あ,F/W の設定にも注意.

    これで,masurai とお互いに backup mx に設定すれば,上記の問題点も,ある程度解消されるはずです. ただ,backup mx 用の設定も必要ですね.

    [ permalink ] [ 1 comment(s) ]
  • 000183
    ドメイン取得
    miz 2003-12-06 14:55
    このエントリーを含むはてなブックマーク はてなブックマーク - ドメイン取得

    いやに安かったので,ドメインを取得してみました.

    mizba.net

    レジストラはここです.
    Value-Domain.com
    年間 $9 です.日本円で1000円強.
    安すぎて,逆に不安を感じたりもしましたが,
    まぁ,1000円程度なら,損しても良いかなと思って,
    思い切って取得しました.
    ドメインの移管も自由に行えるようなので,
    不満があったら,どこかに移ればいいし.

    ここ,値段もさることながら,
    ネームサーバの設定を自分で自由に行える点や,
    メール転送が無料で使える点なども,
    なかなかポイントが高かったです.
    NS レコードが使えると,さらに良かったのだけれど,
    この値段で,贅沢言ってはいけませんね.

    ここは,外部のネームサーバを使用することもできるので,
    手元のサーバで BIND なりを立ててあげれば,
    好き勝手できます.
    しかし,手元のサーバではアベイラビリティに不安があるので,
    EveryDNS.net の使用も検討しました.
    ここであれば,NS レコードも使えるので,
    かなり自由度が高まります.
    サブドメインを切ってやって,
    そこは手元のサーバで管理,なども可能.

    でも,そこまで設定する時間がとれないので,
    現在は,DynDNS.org の Dynamic DNS で
    もともと運用していた turu.mine.nu を
    CNAME に指定しています.
    この方法なら,手元のサーバの設定をいじらずに,
    独自ドメインで Dynamic DNS を使えています.
    Value-Domain.com にも,
    Dynamic DNS の機能はあるみたいだけれど,
    更新スクリプトがいまいちだし,どうもうまく動かないようなので,
    CNAME を使った方法をお勧めします.

    そうは言っても,本当は固定IPをとるのが良いとは思います.
    それは,いずれ・・・.

    [ permalink ] [ 10 comment(s) ]
  • 000167
    久しぶりにシステム管理っぽく
    miz 2003-11-19 20:15
    このエントリーを含むはてなブックマーク はてなブックマーク - 久しぶりにシステム管理っぽく

    久し振りに,サーバをガシガシいじり,
    そして,めでたく,新 HDD への移行が完了しました.
    なんとか,初期不良保証期間内.よかったよかった.

    本当は,OS から入れ直すつもりだったのだけれど,
    手間を考えて今回は断念.
    ただ単純にシステム丸ごと,
    新 HDD にコピーするだけで済ませました.
    その割に,丸二日もかかったのだけれど・・・.

    サーバダウン中も,
    httpd を止めたくなかったことと,
    Web 閲覧は行いたかったため,
    古いノートPCを引っ張り出して,
    PC9821nb10 + FreeBSD4.9R で
    nat box + web server に仕立て上げました.
    これに時間がかかった・・・.

    それが終わってから,今度はディスクの移行.
    これも,lilo 周りで何かと紆余曲折がありましたが,
    何とか完了.
    一時は起動しない恐れもあっただけに,
    無事終わってほっとしています.


    作業を行うにあたって,
    有用だったページを貼っておきます.

    LILO 周りの設定方法
    HDD の交換と環境移行 (Linux)

    ブート用FDの作成方法
    フロッピーディスクの扱い方

    ファイルシステム
    ext3 ファイルシステムへの変換

    ファイルのコピー
    Linux Tips

    [ permalink ] [ 0 comment(s) ]
概要
Linux による PC サーバ運用に関するエントリです.
最近のコメント
  • new 03/02 出張三日目 : Sydney [4]
    last comment : miz : 03/04 21:31
  • new 01/04 出張一日目 : 東京 - Dublin [3]
    last comment : miz : 01/08 15:08
  • new 2009年 冬 青春18きっぷの旅 五日目 [2]
    last comment : miz : 12/15 18:00
  • new 2009年 冬 青春18きっぷの旅 四日目 [2]
    last comment : miz : 12/14 20:13
  • new 祝 パクチー初収穫 [2]
    last comment : miz : 12/03 20:40
  • new Windows Mobile (Advanced W-ZERO3 [es]) から iPhone へ電話帳データを移行 [2]
    last comment : miz : 12/03 20:39
  • new 裁判員制度スタートということで傍聴に行ってきた [2]
    last comment : miz : 10/25 23:41
  • new 時間軸上で発生するイベント同士がとりえる関係についての考察 [2]
    last comment : miz : 08/31 21:04
  • new 今年の変な病気 - 黄色ブドウ球菌による感染症 [2]
    last comment : miz : 07/12 18:10
  • new ビアフェスを楽しむ10のコツ [6]
    last comment : miz : 07/09 10:06
最近のエントリ
  • 飲みました - KIRIN 秋味
  • 飲みました - 旨味たっぷり秋楽 SUNTORY
  • 本日のビール - 08/12
  • 本日のビール - 08/08 10 - Golden Nights @KEEL'S BAR HOUSE AOBADAI / 新橋 DRY-DOCK
  • 今週発売になったアルコール・フリー・ビール・テイスト飲料二種
  • 本日のビール - 08/02
  • 本日のビール - 07/28
  • 本日のビール - 07/31
  • 本日のビール - 07/30
  • 本日のビール - 07/26
  • and more ...
このページの被検索語(最新20件)
  • centos iptable
  • postfix iptables フィルタリング
  • CentOS Oracle xhost
  • POPサーバの立ち上げ方 redhat ES
  • CentOS lint gcc
  • ES4 TELNET TIP 使用
  • webmail 比較 SquirreMail
  • dhcpd command parameters eth
  • Oracle10g lite リポジトリ 使用しない
  • dovecot-passwd 書式
  • imap-pop3
  • RedhatES4 ntpクライアント設定 
  • fedora2 firewall 設定ファイル
  • redhat es4 vncserver
  • dovecot フォワード 認証
  • squirremail spam 破棄
  • redhat es4 samba
  • bat 時間測定 netstat
  • ES4メモリサイズ コマンド TIP
  • RedHat Linux TCPIP カーネルパラメータ
(C) Copyright 2003-2009 miz

Some rights reserved.
You can copy the contents in this page (including text and photographs, except program code) and/or redistribute it under the terms of the Creative Commons Attribution-ShareAlike 2.5 License.
(C) Copyright 2003-2009 miz