Home > _Machine > tower Archive

tower Archive

Subversion使用の準備

これまで個人的にはいまだにRCSを使っていたのだが、Subversionに移行することにした。

一人で使うぶんには、RCSでもそれほど不自由しているわけではなかったのだが、機能的に便利なのは間違いがない。

ということで、まずは、サーバーの準備から。

といっても、tower(CentOS5.6)には、すでにSubversion自体はインストールされている。そして使うプロトコルは、fileか、svn+sshなので、svnserverを立ち上げる必要はない。

Subversion管理ユーザーと用ディレクトリとユーザグループの作成

SubVsersion管理用ユーザーを作成し、パスワードを設定する。

# useradd -m svn
# passwd svn

リポジトリ格納用ディレクトリ/var/svnを作成する。
以下の所有グループの変更と write 権限の付与を行う。

# mkdir /var/svn
# chown svn:svn /var/svn
# chmod g+w /var/svn

最後に自作のバックアップスクリプトの対象に、/var/svnを追加しておく。

Dropbox on Linuxが立ち上がらなくなっていた

しばらくDropBoxを活用していなかったが、気が付くとDropBoxサーバ上のデータが更新されていないことに気が付いた。

そこで、Linux上のDropBoxの状態を見てみると、動作していない。

# service dropbox startで起動しようとすると、以下のようなエラーが出て立ち上がらない。

Traceback (most recent call last):
File "<string>", line 5, in <module>
zipimport.ZipImportError: not a Zip file: '/usr/libexec/dropbox/library.zip'

Droboxの公式Forumで調べると、この事態で悩まされている人が何人もいるようだ。

ひとつめに見つけた記事の最後には、モデレータによる/usr/libexec/dropbox/library.zipのMD5SUMの確認と、最新バージョンの使用の薦めがあった。

とりあえず、MD5SUMはそこに記載されているものと異なっていたので、一度アンインストールして、DropBox公式から最新版をダウンロードしてインストールしようと思うのだが、Fedora用のRPMはFedoraのライブラリとの依存関係があり、インストールできない。

ソースからインストールすればうまく行くのかもしれないが、もう一つ、ヒントになる書き込みを見つけた。

インストール時には動作するが、再起動後には動かなくなる。
再インストールするとまた起動するが、再起動するとやはりダメだ。
そして最後に、/etc/prelink.confに"-b *dropbox*"を追加した後に、再インストールするとうまく動作する、という書き込みがあった。

そこで再度、以前の方法でインストールして試してみようとしたところ、なぜか再インストールした時点で、/etc/prelink.confの書き換えをしなくても再起動してもDropBoxは立ち上がるようになった。

とりあえず、再度立ち上がらなくなるまで放置、もし立ち上がらなくなったら、上記処理を試してみることにした。

CentOS 5.7アップデート

  • Posted by: YAMAGISHI Norimasa
  • 2011年10月 7日 21:26
  • System | tower

Apachekillerの影響もあるので、CentOSを5.7にアップデートすることにした。

「yum update」で簡単にアップデートできるはずなのだが、以前Skypeを使うために入れた新しいlibstdc++が依存性の障害になってしまった。

もはや、Linux上でSkypeを使うこともなくなったので、libstdc++-4.3.2は案インストールすることにした。といっても、既存のlibstdc++もあるので、バージョンを指定して案インストールすることになる。

# rpm -e libstdc++-4.3.2
# yum update

インストール: DropBox 1.1.27 on Linux

SugarSyncがうまく動作しなくなったので、DropBoxに移行することにした。

rpmforgeにRPMがあがっているので、yumでインストール。

# yum update dropbox

インストールされたバージョンは、1.1.27-2.el5.rf。最新版は1.1.45なのでちょっと古いものだが問題ないだろう。

# vi /etc/sysconfig/dropbox

DROPBOX_USERSにユーザー名を追加する。

DropBoxをサービスとして追加。

# service dropbox start

すると、以下のメッセージが表示されるので、FirefoxでURLを表示し、マシンを登録する。

このクライアントはアカウントにリンクされていません。
このマシンをリンクするには、https:///www.dropbox.com/cli_link?host_id=xxxxxxxxxxを開いてください。

最後に、今まで使ってきたsyncディレクトリを同期できるように、Dropboxフォルダ内にリンクを作成する(フルパスで記載すること)。

$ ln -s /home/nor/sync /home/nor/Dropbox/sync

同期が確認できたらSugarSyncをアンインストール。

SugarSync不調

CentOS上でWineで動いているSugarSyncの動作がおかしくなった。

普通に起動しようとしても、「データベースがおかしい」となって起動できない。
しかたないので、一度SugarSyncをアンインストールしてインストールし直したところ、起動はするようになったが、やはり同期がうまくいかない。

手動で起動しようとすると、以下のようなエラーが出るのだが、gnutls自体はインストールされている。ただし、バージョンは最新版が3.0.3なのに対して、1.4.1とかなり古い。

err:secur32:SECUR32_initSchannelSP libgnutls not found, SSL connections will fail

gnutlsの更新も考えてみたが、それよりも同期フォルダを指定できるようになったDropBoxに移行する方が確実だろう。

SugarSyncからDropBoxへの移行を進めることにする。

インストール: MP4Box

Docomo用の3GPPを作成するために、MP4Boxをインストールする。

ウノウラボ by Zynga Japan: FFmpegで変換した3GPP動画をNTTドコモiモーションのストリーミング再生に対応させる (for Linux)

MP4BoxはGPACの一部なので、GPACをインストール。

$ wget http://downloads.sourceforge.net/gpac/gpac-0.4.5.tar.gz
$ tar -zxvf gpac-0.4.5.tar.gz
$ cd gpac
$ sh configure
$ make

$ sudo make isntall

/usr/local/lib/libgpac.soがインストールされるので、認識させるために(すでに/etc/ld.co.confに/usr/local/libは登録済)。

$ ldconfig

テスト: MediaTomb 0.12.1

ビデオライブラリをDIGAで見るために、DLNAサーバを構築してみることにした。

DLNAサーバー構築(MediaTomb) - CentOSで自宅サーバー構築を参考に、というよりも、ほぼそのままの手順でインストール。

# wget http://jaist.dl.sourceforge.net/sourceforge/mediatomb/mediatomb-0.12.1.tar.gz
# tar zxvf mediatomb-0.11.0.tar.gz
# cp mediatomb-0.11.0/mediatomb.spec /usr/src/redhat/SPECS/
# cp mediatomb-0.11.0.tar.gz /usr/src/redhat/SOURCES/
# vi /usr/src/redhat/SPECS/mediatomb.spec ← mediatomb.spec編集

依存関係を解決するために、specファイルを修正する。

- BuildRequires: sqlite-devel, mysql-devel, libexif-devel, taglib-devel, file-devel, js-devel, zlib-devel
+ BuildRequires: sqlite-devel, mysql-devel, libexif-devel, taglib-devel, file, js-devel, zlib-devel, expat-devel

# rpmbuild -bb --clean /usr/src/redhat/SPECS/mediatomb.spec
# rpm -ivh /usr/src/redhat/RPMS/i386/mediatomb-0.11.0-8.i386.rpm

データベースにSQLLiteではなく、MySQLを使うためにMySQLデータベースを作成する。

# mysql -u root -p
Enter password: ← MySQLのrootパスワード応答
mysql> create database mediatomb;
mysql> grant all privileges on mediatomb.* to mediatomb@localhost identified by 'パスワード';
mysql> exit
# mysql -p mediatomb < /usr/share/mediatomb/mysql.sql
Enter password: ← MySQLのrootユーザのパスワードを応答

MediaTombの設定ファイル/etc/mediatomb.confを編集する。

- MT_INTERFACE="NOT_SET"
+ MT_INTERFACE="eth0"

MediaTombをいったん起動し、/etc/mediatomb/config.xmlを作成する。

# service mediatomb start ; service mediatomb stop

-       <sqlite3 enabled="yes">
+       <sqlite3 enabled="no">

-       <mysql enabled="no">
+       <mysql enabled="yes">

         <username>mediatomb</username>
+        <password>パスワード</password>
         <database>mediatomb</database>
      </mysql>

-     <protocolInfo extend="no"/><!-- For PS3 support change to "yes" -->
+     <protocolInfo extend="yes"/><!-- For PS3 support change to "yes" -->

  <import hidden-files="no">
+     <filesystem-charset>UTF-8</filesystem-charset>
+     <metadata-charset>CP932</metadata-charset>

      <extension-mimetype ignore-unknown="no">
+         <map from="jpg" to="image/jpeg"/>
+         <map from="jpeg" to="image/jpeg"/>
+         <map from="gif" to="image/gif"/>
+         <map from="png" to="image/png"/>
+         <map from="m4v" to="video/mp4"/>
+         <map from="mp4" to="video/mp4"/>
+         <map from="mpg" to="video/mpeg"/>
+         <map from="mpeg" to="video/mpeg"/>
      </extension-mimetype>

# service mediatomb start

http://サーバーIPアドレス:50500/へアクセスしてMEDIATOMBページが表示されることを確認。

そのページで、公開するフォルダの設定などを行うことができる。

とりあえず、DLNAサーバーを起動して、クライアントでデータを表示することができるようになったのだが...

まず、見つかった問題は、DLNAクライアントがDLNAサーバーを見つけることができないということ。

すなわち、WindowsMediaPlayerやDIGAなどのDLNAクライアントが、すでに起動しているMediaTombを見つけることができない。
逆にDLNAクライアントが起動しているときに、MediaTombを起動した場合には、クライアントがMediaTombを見つけることができる。

次の問題はDIGAでは、Mpeg4のデータを再生できない。

パパラクダの日記: 12月 2010によると、「VIERAでDLNAを使うためには、mime-typeが「video/mpeg」か「videoq/vnd.dlna.mpeg」でなくてはならない」とのこと。

ただし、現バージョンのMediaTombでは、メディアのトランスコードを行うことができる。

vlc がないので ffmpeg でトランスコード - Debian GNU/Linux 3.1 on PowerMac G4

MediaTomb - Free UPnP MediaServer

これで、Mpeg4のデータをMpeg2にトランスコードすることができれば、DIGAでも見ることはできるかもしれない。

が、少しトランスコードのテストをしてみたが、うまくいかず、とりあえず断念。

Sambaユーザーを登録していなかった

Sambaの共有ディレクトリにアクセスしようとすると、なぜか弾かれてどうしてもログインできないユーザーがいるので、悩んでいたのだが。

ユーザー登録をしていなかった...

smbpasswdからTDB形式に変更したときに、登録し損なったようだ。

# pdbedit -a xxxx

tower: HDCS-UR 1.0R接続

2Gのハードディスクを購入し、rodemに接続していたHDCS-U 1.0をtowerに接続することにした。

まず、HDCS-U 1.0をtowerにUSB接続してフォーマット。

http://rally.jp/comp/archives/2009/09/usb.php

マウントして、既存のUSBハードディスクをコピー。

# cp -rp /misc/prj/backup /mnt/usbhd0
# cp -rp /misc/prj/video /mnt/usbhd0

このHDDはautomountせずに常時接続状態で使うので、fstabに記載する。
また、/etc/auto.miscから、以前のUSBHDD接続のための記載を削除する。
さらに、/etc/samba/cmb.confの共有ディレクトリ名を変更。

既存のUSBハードディスクをumountして、接続解除。

インストール: Skype 2.1.0.47

CentOS WikiにSkypeの利用方法が掲載されているが、これは、2.2で変更されている模様。

すこし古いバージョン(2.1)で試してみることにする。が、2.1はSkypeの公式サイトには見当たらない。

そこで、Googleでバイナリを探して、ダウンロード。

skype_static-2.1.0.47.tar.bz2とskype_static-2.1.0.81.tar.bz2の二つが見つかったが、今回はskype_static-2.1.0.47.tar.bz2を試してみることにする。

$ tar jxvf skype_static-2.1.0.47.tar.bz2
$ su
# cd skype_static-2.1.0.47
$ cp skype /usr/bin/skype
$ mkdir /usr/share/skype
$ cp -r * /usr/share/skype/

libstdc++.so.6自体は、前回インストールしたものがそのまま残っているので、それを使う。

起動用シェルスクリプトも同様。

アイコンは、/usr/share/skype/iconsの中から使用。

これで、無事Skype起動。バージョンはちょっと古く、インターフェイスも異なるが、チャット、音声ともに問題なく使用できる。

インストール: skype for Linux 2.2.0.25 失敗

towerでTVを見る計画に挫折したので、逆にtowerにSkypeをインストールすることにした。

skypeの公式サイトから、Linux版staticバイナリ skype_static-2.2.0.25.tar.bz2 をダウンロード。

展開した後に、適当なディレクトリにコピー

$ tar jxvf skype_static-2.2.0.25.tar.bz2
$ su
# cd skype_static-2.2.0.25
# cp skype /usr/bin/skype
# mkdir /usr/share/skype
# cp -r * /usr/share/skype/

$ skype
skype: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by skype)

CentOSのlibstdc++のバージョンが古いため、GLIBCXX_3.4.9には対応していない。

そこで、Fedora 10のlibstdc++を/usr/local/libにインストール。

# rpm -i --relocate /usr/lib=/usr/local/lib http://archives.fedoraproject.org/pub/archive/fedora/linux/releases/10/Fedora/i386/os/Packages/libstdc++-4.3.2-7.i386.rpm

このライブラリを使用するように、以下のようなシェルスクリプトを、/usr/local/bin/skype.shとして作成。

#!/bin/sh
LD_PRELOAD=/usr/local/lib/libstdc++.so.6 /usr/bin/skype

しかし、最初の、ライセンスの承認ウィンドウは表示されるものの、それに対してクリックなどを行うことがまったくくできない。

挫折。

インストール: Devilspie

Devilspieは、ウィンドウを監視して、移動、最大、最小化などを自動的に行うソフトウェア。

Devil's Pie

SygarSyncのウィンドウを、他のワークスペースに自動的に移動するために導入。

# yum install devilspie

~/.devilspie/以下にそれぞれのウィンドウに対応した動作を記述したファイルを置き、devilspieを実行すると、スクリーンを監視して自動的にウィンドウを操作する。

実際の運用としては、~/.devilspie/以下にスクリプトを用意したら、[システム]-[設定]-[他の個人設定]-[セッション]で[自動起動するプログラム]に/usr/bin/devilspieを設定しておくことになる。

スクリプトの文法については、Devil's Pie documentation [foosel.(net|org)]にまとまっている。

なお(debug)コマンドの日本語が文字化けするが、特に困ることはないのでそのまま放置する。ソースにパッチを当てれば、解決するようだ。

SugarSync on Linux

SugarSyncのWindowsクライアントををLinux上で使うために、試行錯誤。

2011/08/04 towerの移設に伴い、コンソール上のXサーバーを立ち上げておくことができなくなったため、内容改定。

大きな問題は、Linux上でのファイルの更新が、すぐSugarSyncのサーバーと同期されないこと。逆に、SugarSyncのサーバー上にあるデータが更新されたときには、ちゃんと同期される。

ただし、SugarSyncファイルマネージャを立ち上げたときには、同期フォルダをスキャンしてきちんと同期を行う。

そこで、cronで定期的に、SugarSyncファイルマネージャの起動停止を行うようにした。

まずは、rc形式のSugarSyncコントロールスクリプトを作成。
このスクリプトで、restartを10分ごとに行うことにより同期を行う。

~/bin/sugarsync。

2011/08/04 exportするDISPLAY変数を、":0.0"からVNCのDISPLAYである":1.0"に変更。

#!/bin/bash
#
# SugarSync
# 

WAIT_TIME=5

export WINEPREFIX=/home/nor/.wine
export LANG=ja_JP.UTF-8
export DISPLAY=:1.0

start() {
    if [ "${CURRENT_PID}" = "" ]; then
	wine ./.wine/drive_c/Program\ Files/SugarSync/SugarSyncManager.exe >& /dev/null & 
    else
	echo SugarSync is running on PID: ${CURRENT_PID}
    fi
}

stop() {
    if [ "${CURRENT_PID}" = "" ]; then
	echo SugarSync is not running
    else
	kill ${CURRENT_PID}
    fi
}

getpid() {
    CURRENT_PID=`ps ax |grep SugarSync|grep -v grep | sed "s/^ *//" | sed "s/ .*$//"`
}

case "$1" in
  start)
	getpid
	start
	;;
  stop)
	getpid
	stop
	;;
  status)
	getpid
	if [ "${CURRENT_PID}" = "" ]; then
	    echo SugarSync is not running
	else
	    echo SugarSync is running on PID: ${CURRENT_PID}
	fi
	;;
  restart)
	getpid
	stop
	sleep ${WAIT_TIME}
	getpid
	start
	;;
  *)
	echo $"Usage: $prog {start|stop|restart}"
	exit 1
esac

exit

だがSugarSyncファイルマネージャはWindows GUIアプリケーションなので、普通に実行すると画面に表示されてしまい、とてもじゃまだ。

そこで、Xのウィンドウを操作するアプリケーションDevil's Pieを導入

~/.devilspie/sugarsync.dsの記述は以下のとおり。

(if
  (matches (application_name) "^SugarSync")
  (set_workspace 4))

SugarSyncを再起動するときに、一瞬ワークスペースに表示されるのが見えてしまうが、フォーカスは移らないし、10分に1回の同期の代償としては耐えられないほどではない。

Linuxマシンだけだったら、rsyncで定期的に同期を行ってしまえばいいのだが、Windowsマシンで、すべてのマシンにrsyncをいれる気にもならないのだよね。一応、データがSugarSyncに保存されるという安心感もあるし...

アップデート: Cent OS 5.6

  • Posted by: YAMAGISHI Norimasa
  • 2011年4月13日 01:38
  • System | tower

本家RHELからずいぶん遅れたが、CentOS 5.6がリリースされた。

1週間ほど様子を見て、yumによるアップデート敢行。

mod_nssのインストールに関する問題があるようだが、使用していないので特に問題なし。

アップデートのあとにやったことは、Apacheがアップデートされたので、SuExecの無効化のために、またリネームしたくらい。

autofsによるUSBディスクマウント

新しいtowerはスリムデスクトップタイプなので、ハードディスクが1機しか入らない。
そこで、towerにUSB経由で外部HDDを接続することにした。

とりあえず、ひかりTV録画用に使っていたHGST製のHDS721050CLA362、500GBをつないでみたが、データのコピー中にエラーが発生したのであきらめ、Mactor 7V300F0 300GBを使うことにした。

とりあえず念のためディスク容量100%まで書き込んでも、エラーは発生せず。

USB接続なので、(実際に行うかはともかく)取り外せるようにautofsでマウントすることにした。

まず、gnome-mountを無効にする。

[システム]-[設定]-[リムーバブル・デバイスとメディア]で、「ドライブがホット・プラグされたらマウントする」のチェックをはずせばOK。

そして、autofsの設定は/etc/auto.miscに以下のように。

prj	-fstype=ext3	:/dev/sda1

また、これにともない、Sambaの設定も、

smb.confでは

  • misc/prj prj
  • misc/prj/video video


で公開。

これで、/misc/の下にprjというディレクトリとしてマウントされる。
さらに、Windowsからのネットワークドライブとしての見え方には変わりはない。
ただ、Windowsがこのドライブをネットワークドライブとしてマウントしたりしている場合、Linux側でアンマウントすることが出来ないので、事前にWindowsマシンを落しておく必要がある。

まあ、ハードディスクを2台入れることが出来るマシンなら、わざわざこんなこともしないのだが...

またまたCent OSインストール

  • Posted by: YAMAGISHI Norimasa
  • 2011年4月 4日 21:41
  • System | tower

基本的には、新サーバOSインストール新サーバ再構成手順 その1を元に、変更点のみ記載。

ディスクパーティション設定

ディスクは、80Gになったので、割り当ては変更。
最初から、LVMのスナップショット用領域として、約7Gを空けてインストールすることにする。

/boot 100M
LVM領域から SWAP 2G
/ 70G

パッケージ選択

「デスクトップ環境」-「GNOME」
「アプリケーション」-「Emacs」
「アプリケーション」-「Office/生産性」をはずす。
「アプリケーション」-「グラフィカルインターネット」-「firefox」
「アプリケーション」-「グラフィカルインターネット」-「thunderbird」
「開発」-「開発ツール」
「開発」-「開発ライブラリ」
「サーバー」なし
「ベースシステム」-「X WIndow System」
「ベースシステム」-「ベース」
「仮想化」なし
「クラスタリング」なし
「クラスタストレージ」なし
「言語」-「日本語のサポート」

そのほか、適当に必要なさそうなソフトウェアは削除。

データの移行は、ルーターで外部との接続を切り、rsyncでネットワーク経由で旧サーバーからコピー。

# rsync -an --delete tower.rally.or.jp:home/ home

なお、インストール後、起動時に
「/dev/hdd: open failed: メディアが見つかりません」
という、エラーが起きる。
udevがhddを見つけているようだ。

これは、LVMを使った結果、DVDドライブである/dev/hddをLVMマネージャが認識してしまっているため。

解消するには、vgscanを実行する。

次回は、いちいちここに書かずに、ちゃんと別途手順書を作ろう...

Spec: tower(2011/04/03)

  • Posted by: YAMAGISHI Norimasa
  • 2011年4月 4日 01:51
  • spec | tower
  • CPU: Pentium 4 2.80G
  • Chipset: 845GV
  • VGA: 845GV on board
  • Sound: ADI AD1981B
  • Network: Realtek RTL8139/810x Family Fast Ethernet NIC on board
  • Memory: 1GB
  • HDD(Internal): IC35L080AVVA07-0 80G ATA100 7200rpm
  • HDD(External): I-O DATA HDCS-U 1TB
  • DVD-Multi: DVD-Multi Panasonic LF-D521JD
  • FDD: 3Mode
  • Keyboard: 86key PS2
  • Mouse: PS2
  • Case: Slim NEC

メーカー型式: PC-98NX 98MATE MY28V/R-F(PC-MY28VRZEF) スリムタワー型(バリュータイプ)

Mate


購入: 98Mate MY28V/R-F - Computer

サーバー用ハードウェア入れ替え

つい先日作ったtowerが崩壊を始めたので、サーバーマシンを安定稼動しているloplassに入れ替えることにした(そもそも、安定性に疑問があるマシンをサーバーにしたのが間違いなのだが...)。

再び、towerとloplassのメモリ(1Gと500M)、DVD-Multiドライブ、フロッピードライブ(現towerのものは調子がよくない)を入れ替える。

loplassについているビデオチューナーボードはとりあえず他で使う予定が無いので、そのまま入れたままにした。

さらに常用しないであろう新towerには、倉庫にしまってあった小型のPS2キーボードと、PS2マウスを倉庫から引っ張り出して接続する。

またまたtower崩壊?

  • Posted by: YAMAGISHI Norimasa
  • 2011年4月 2日 21:07
  • System | tower

動作中にディスクに書き込みが出来なくなり、再起動せず。
起動時に、ルートファイルシステムにfsckがはじまり、リードオンリーでしかマウントされなず、auditdの起動には失敗してとまる。また、fsck自体にも異常に時間がかかる。

ディスクのトラブルである可能性がかなり高い。

それが、M/B側のインターフェースかディスク自体であるかはわからないが、どちらにしろ、このまま使用することはできない(まあ、おそらくM/B側だろうが...)。

インストールディスクを使いレスキューモードで立ち上げると、ルートファイルシステムは/mnt/sysimageにリードライトでマウントされるので、なんとか、生き残ったデータの吸出しはできそうだ。

とりあえず、/etc/fstabで、/devVolGroup00/LogVol01の6カラム目を1から0にしてfsckを行わないようにしてみたが、やはり起動しない。

そこでUbuntuのCDで立ち上げて、lvmをインストールし領域をアクティブにしてマウント、新規マシンにネットワーク経由でコピーすることにした。
Ubuntuでは、rootが開放されていないので、sudoを使う。

$ sudo apt-get install lvm2
$sudo lvm vgscan
Reading all physical volums. This may take a while...
Found volume group "VolGroup00" using metadata type lvm2
$ sudo lvm vgchange -a y
2 logical volume(s) in volume group "VolGroup00" now active

が、しばらくの電源オフの後に起動した。

LVMのスナップショット領域を作成

  • Posted by: YAMAGISHI Norimasa
  • 2011年3月30日 14:18
  • System | tower

懸案のスナップショットによるバックアップを実行することにした。

論理ボリュームに空きを作らなかったので、まず、スナップショット領域を作成する。

まず、事前にバックアップを取る。
そして、OSをインストールCDからレスキューモードで起動する。

boot: linux rescue

# lvm vgchange -a y
# fsck.ext3 -f /dev/VolGroup00/LogVol01
# resize2fs /dev/VolGroup00/LogVol01 250G
# lvm lvresize -L 250G /dev/VolGroup00/LogVol01

Do you really want to reduce LogVol00? [y/n]: y

# exit

再起動後に縮小されたかを確認する。

# lvdisplay /dev/VolGroup00/LogVol01
# vgdisplay

Free PE / Size 715 / 22.34GB

22.3Gの空きができた。
まあ、対象ボリュームの10%にも満たないが、バックアップのためのミラーを更新する間だけなので、十分だろう。

スナップ領域が確保できたので、以下の自動バックアップスクリプトを作成して、cronに日に1回snapback、週に1回snaptgzを登録する。
snapbackは必要な領域をバックアップ用HDDにrsyncでコピー、snaptgzはsnapbackに加え、リムーバブルディスクにバックアップコピーするためのもの。

snapback

#!/bin/sh

RM=/bin/rm
MV=/bin/mv
TAR=/bin/tar
NICE=/bin/nice
RSYNC=/usr/bin/rsync

BACKUP_DIR=/var/backup
SNAP_DIR=/mnt/snap

VOL_GROUP=VolGroup00
TARGET_VOL=LogVol01
SNAP_VOL=snap
TARGET_VOL_PATH=/dev/${VOL_GROUP}/${TARGET_VOL}
SNAP_VOL_PATH=/dev/${VOL_GROUP}/${SNAP_VOL}
SNAP_VOL_SIZE=22G

DATE=`date '+%y%m%d'`

lvcreate -s -L ${SNAP_VOL_SIZE} -n ${SNAP_VOL} ${TARGET_VOL_PATH} >& /dev/null
mount ${SNAP_VOL_PATH} ${SNAP_DIR} || exit

${NICE} -n 5 ${RSYNC} -aq --delete ${SNAP_DIR}/etc ${BACKUP_DIR}
${NICE} -n 5 ${RSYNC} -aq --delete ${SNAP_DIR}/var/lib/mailman ${BACKUP_DIR}
${NICE} -n 5 ${RSYNC} -aq --delete ${SNAP_DIR}/var/lib/mysql ${BACKUP_DIR}
${NICE} -n 5 ${RSYNC} -aq --delete ${SNAP_DIR}/var/named/chroot/etc ${BACKUP_DIR
}/named
${NICE} -n 5 ${RSYNC} -aq --delete ${SNAP_DIR}/var/named/chroot/var ${BACKUP_DIR
}/named
${NICE} -n 5 ${RSYNC} -aq --delete ${SNAP_DIR}/var/www ${BACKUP_DIR}
${NICE} -n 5 ${RSYNC} -aq --delete ${SNAP_DIR}/root ${BACKUP_DIR}
${NICE} -n 5 ${RSYNC} -aq --delete ${SNAP_DIR}/home ${BACKUP_DIR}

umount ${SNAP_DIR}
lvremove -f ${SNAP_VOL_PATH} >& /dev/null

snaptgz

#!/bin/sh

RM=/bin/rm
MV=/bin/mv
TAR=/bin/tar
NICE=/bin/nice
RSYNC=/usr/bin/rsync

BACKUP_DIR=/var/backup
SNAP_DIR=/mnt/snap

VOL_GROUP=VolGroup00
TARGET_VOL=LogVol01
SNAP_VOL=snap
TARGET_VOL_PATH=/dev/${VOL_GROUP}/${TARGET_VOL}
SNAP_VOL_PATH=/dev/${VOL_GROUP}/${SNAP_VOL}
SNAP_VOL_SIZE=22G

lvcreate -s -L ${SNAP_VOL_SIZE} -n ${SNAP_VOL} ${TARGET_VOL_PATH} >& /dev/null
mount ${SNAP_VOL_PATH} ${SNAP_DIR} || exit

${NICE} -n 5 ${RSYNC} -aq --delete ${SNAP_DIR}/etc ${BACKUP_DIR}
${NICE} -n 5 ${RSYNC} -aq --delete ${SNAP_DIR}/var/lib/mailman ${BACKUP_DIR}
${NICE} -n 5 ${RSYNC} -aq --delete ${SNAP_DIR}/var/lib/mysql ${BACKUP_DIR}
${NICE} -n 5 ${RSYNC} -aq --delete ${SNAP_DIR}/var/named/chroot/etc ${BACKUP_DIR
}/named
${NICE} -n 5 ${RSYNC} -aq --delete ${SNAP_DIR}/var/named/chroot/var ${BACKUP_DIR
}/named
${NICE} -n 5 ${RSYNC} -aq --delete ${SNAP_DIR}/var/www ${BACKUP_DIR}
${NICE} -n 5 ${RSYNC} -aq --delete ${SNAP_DIR}/root ${BACKUP_DIR}
${NICE} -n 5 ${RSYNC} -aq --delete ${SNAP_DIR}/home ${BACKUP_DIR}

umount ${SNAP_DIR}
lvremove -f ${SNAP_VOL_PATH} >& /dev/null

cd ${BACKUP_DIR}
# for i in etc mailman www root home
for i in etc mailman named mysql www root home
do
        if [ -e ${BACKUP_DIR}/tgz/$i.tar.gz.9 ] ; then rm ${BACKUP_DIR}/tgz/$i.t
ar.gz.9; fi
        if [ -e ${BACKUP_DIR}/tgz/$i.tar.gz.8 ] ; then mv ${BACKUP_DIR}/tgz/$i.t
ar.gz.8 ${BACKUP_DIR}/tgz/$i.tar.gz.9; fi
        if [ -e ${BACKUP_DIR}/tgz/$i.tar.gz.7 ] ; then mv ${BACKUP_DIR}/tgz/$i.t
ar.gz.7 ${BACKUP_DIR}/tgz/$i.tar.gz.8; fi
        if [ -e ${BACKUP_DIR}/tgz/$i.tar.gz.6 ] ; then mv ${BACKUP_DIR}/tgz/$i.t
ar.gz.6 ${BACKUP_DIR}/tgz/$i.tar.gz.7; fi
        if [ -e ${BACKUP_DIR}/tgz/$i.tar.gz.5 ] ; then mv ${BACKUP_DIR}/tgz/$i.t
ar.gz.5 ${BACKUP_DIR}/tgz/$i.tar.gz.6; fi
        if [ -e ${BACKUP_DIR}/tgz/$i.tar.gz.4 ] ; then mv ${BACKUP_DIR}/tgz/$i.t
ar.gz.4 ${BACKUP_DIR}/tgz/$i.tar.gz.5; fi
        if [ -e ${BACKUP_DIR}/tgz/$i.tar.gz.3 ] ; then mv ${BACKUP_DIR}/tgz/$i.t
ar.gz.3 ${BACKUP_DIR}/tgz/$i.tar.gz.4; fi
        if [ -e ${BACKUP_DIR}/tgz/$i.tar.gz.2 ] ; then mv ${BACKUP_DIR}/tgz/$i.t
ar.gz.2 ${BACKUP_DIR}/tgz/$i.tar.gz.3; fi
        if [ -e ${BACKUP_DIR}/tgz/$i.tar.gz.1 ] ; then mv ${BACKUP_DIR}/tgz/$i.t
ar.gz.1 ${BACKUP_DIR}/tgz/$i.tar.gz.2; fi
        if [ -e ${BACKUP_DIR}/tgz/$i.tar.gz.0 ] ; then mv ${BACKUP_DIR}/tgz/$i.t
ar.gz.0 ${BACKUP_DIR}/tgz/$i.tar.gz.1; fi
        if [ -e ${BACKUP_DIR}/tgz/$i.tar.gz ] ; then mv ${BACKUP_DIR}/tgz/$i.tar
.gz ${BACKUP_DIR}/tgz/$i.tar.gz.0; fi
        ${NICE} -n 5 ${TAR} zcf ${BACKUP_DIR}/tgz/$i.tar.gz ./$i --exclude ./mys
ql/mysql.sock --exclude ./named/var/run/dbus/system_bus_socket
done

BCTV4-PCIをtowerにインストール

PC上でデジタルTV放送を見るためにブルーレイレコーダーDMR-BF200が購入した。

PT2を買えばいいという突っ込みは無しだ。

確かにPT2であれば、本体、カードリーダ、分波器、B-CAS再発行手数料で、25,000円あれば、おつりが来る。さらに、4波同時受信も可能だが、そのためにPCを一台立ち上げっぱなしにして、安定稼働させなければならないし、そもそも詐欺的手法でB-CASカードを再発行してもらうのは気が向かない。

もちろん、このB-CASという仕組みに賛成なわけではない、というか否定的なのだが...

閑話休題。

配送されたので、早速PCに接続するべく作業を開始したのだが、最初に遭遇した問題は...

BF200の出力は、コンポジットとHDMIしか無いのだが、それで十分だと思っていた。

しかし、大失敗だった。

接続しようと思っていたloplassのTVチューナーカードには、入力がS端子しか無かった。そこで、やむなくtowerにbt878搭載のBCTV4-PCIを接続。

接続後は、なにもしなくてもカーネルのbtドライバで認識。

# dmesg | grep BCTV

最初、視聴用ソフトはVLCを使おうと思ったが、VLCでうまくコンポジット入力を表示できない。

そこでxawtvをyumでインストールして、試してみた。

しかしアスペクト比が4:3固定のようで、却下。

が、xawtvについて調査中に、Video4Linuxのコントローラであるv4l2-ctlというコマンドで、Video4LinuxによるTVチューナーボードの入力やチャンネル設定ができることを知る。

v4l2-ctlコマンドはivtvに含まれているようなので、yumでivtvをインストール。

VLCでメディアとしてキャプチャーデバイスを選択後、「v4l2-ctl -i 1」で、コンポジット入力になることを確認。

だが、TVを見るたびに「v4l2-ctl -i 1」を打つのは非常にめんどうだ。

そこで、ふたたびVLCについていろいろ見てみたところ、[設定]で[設定の表示]で「すべて」を選び[入力/コーデック]-[アクセスモジュール]-[Video4Linux2]で以下のようにすれば、デフォルトで、Composit入力になることが判明。

  • [ビデオ入力]-[デバイス名] /dev/Video0
  • [ビデオ入力]-[標準] NTSC
  • [ビデオ入力]-[入力] 1

さらに、[入力/コーデック]-[アクセスモジュール]-[Video4Linux2]において、[オーディオ入力]-[キャッシュ値]を「300」から「50」程度に減らすと、映像の遅れが少なくなる(0にすると映像がおかしくなる)。

また、デフォルトでは、Video4Linuxの出力解像度が320x240になってしまうため、非常に写りが悪い。

そこで、[ビデオ入力]-[幅]、[高さ]でサイズを720x480に指定する。

VLCであれば、アスペクト比も調整できるし、これにて一件落着。

インストール: Java

Javaを利用しているWebページがあったので、Firefoxに誘導されるままに、http://java.com/のダウンロードページに。

「Linux RPM (自己解凍ファイル) 」を選ぶとjre-6u24-linux-i586-rpm.binがダウンロードされるので、以下のコマンドでインストールは完了する。

# sh jre-6u24-linux-i586-rpm.bin

そして、環境変数を追加。

# vi /etc/profile

...
export JAVA_HOME=/usr/java/jdk1.6.0_24
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar


Firefoxのプラグインとして使うために、Java Webページのインストラクションどおり以下のようにリンクしたのだが、Firefoxでプラグインとして認識してくれない。

# ln -s /usr/java/jre1.6.0/plugin/i386/ns7/libjavaplugin_oji.so /usr/lib/mozilla/plugins

Googleで検索したところ、Firefox 3.6では、別のファイルをプラグインとして使用するとのこと。

# ln -s /usr/java/jre1.6.0_24/lib/i386/libnpjp2.so /usr/lib/mozilla/plugins/

インストール: AdobeReader 9

Evinceで、「パスワードが設定されている」とメッセージが出て読めないpdfファイルがあったので、AdobeReaderをインストールすることにした。

すでに、Adobeのリポジトリが設定されていたので、yumでインストール可能。

# yum install AdobeReader_jpn

Anthy日本語変換キーの変更

[システム]-[設定]-[他の個人設定]-[SCIM入力メソッドの設定]で日本語入力トグルキーの設定を行う。

「Ctrl+Space」や「Shift+Space」だと、Emacsを使うときに結構誤タイプが発生することがある。
そこで、Windowsと同様「Alt+半角/全角」に変更した。

インストール: ffmpeg

あまっているマシンパワーで定期的に見るTV番組などをエンコードしてしまおうと、ffmpegをインストールすることにした。

yumでinstallするだけ。

# yum install ffmpeg

もちろんffmpegのバージョンによる変化は大きいので、他で使っているオプションはなかなか使えない。

いろいろ探りながら、把握していくことになる。が、libx264とlibfaacが使えるので、十分。

ffmpegはバージョンによるオプションの変化が大きいので、問題がない限りはバージョンを変更したくないので、/etc/yum.confにおいてyumのアップデート対象からはずす。

インストール: VLC

現在、机上のキーボードやディスプレイに接続しているので、ビデオを見ることができるように、VLCをインストールすることにした。

yumでVLCを入れようとしたが、設定したリポジトリ上のVLCはlibdvdread.so.3を使うようになっているのに、libdvdread.soは、libdvdread.so.4にあがってしまっている。

そこで、リポジトリを限定してインストール。

# yum --disablerepo \* --enablerepo base,updates,rpmforge install vlc

もし、libdvdreadをインストールしてれば、一度アンインストールしてやればいいはずだ。

現在のところ、VLCで見るファイルはTVから録画したMPEG2データが多い。
そこで、デフォルトでインタレース解除を行うために、次の設定を行う。

  • [ツール]-[設定]で、[設定の表示]を「すべて」にする。
  • [ビデオ]-[フィルター]で[インタレース解除ビデオフィルター]にチェックする。
  • [ビデオ]-[フィルター]-[インタレース解除]で[表示]-[インタレース解除モード]を「X」にする。

インストール: Firefox用flash-plugin

FirefoxでPluginが必要というメッセージによりAdobeのサイトに誘導される。

adobeのサイトで「ダウンロードするバージョンを選択してください」とあり、「Linux用YUM」をダウンロードした。
これによりリポジトリにadobeq-linux-i386が加わったので、yumを使ってflash-pluginをインストールしてみたが、rpmforgeのものが選ばれてしまった。

# yum install flash-plugin

まあ、問題なく動作しているようなのでよしとしよう。

インストール: Thunderbird

tower上でもメーラを使いたくなったのでインストール。

最初、yumによるインストールを行ったが、バージョンが2と異様に古い。

そこで、http://mozilla.jp/thunderbird/より、最新のLinux版をダウンロード、tar.bz2だったので、展開して、~/binにコピー。

/usr/localなどにインストールするのが正当なのだろうが、このマシンでThunderbirdを使用するユーザは自分しかいないので、お手軽な、~/binでかまわない。

インストール: pflogsumm

postfixのログ解析ツール、pflogsumm。

インストールといってもpostfixの一部として、以前postfixをBuildしたときにpflogsummもBuildされている。

ということで、rpmでインストールするだけ。

なのだが、必要なPerlモジュールを事前にインストールしてから、rpm -ivh。

# yum install perl-Date-Calc
# rpm -ivh /usr/src/redhat/RPMS/i386/postfix-pflogsumm-2.3.3-2.1.el5_2.i386.rpm

さらに、毎日のレポートがメールで届くように、cronに登録する。

コマンドラインオプション

-d today 今日のレポート
-d yesterday 昨日のレポート

-e
Message detail表示
処理番号と同時にすべてのメイルについて送信者、受信者を表示する。

-h
ホスト、ドメイン名の集計をTOP に限定する。0なら限定しない。

-i
--ignore_case
ドメイン名以外のユーザー名もすべて小文字に変換して扱う。
通常は、ドメイン名のみを小文字に変換する。

-m
uucp形式のアドレスも扱う。

--mailq
コマンドの最後にmailqコマンドを表示する(キューに入っているメイルを表示する)。

--no_bounce_detail
--no_deferral_detail
--no_reject_detail
それぞれ、bounce、deffer、rejectされた詳細を表示しない。

--no_no_msg_size
メッセージサイズが無いものについてのレポートを表示しない。

--no_smtpd_warnings
smtpdのWarningを「Warings」セクションにおいて表示しない。
SPAMやエラーなどで、(実害のない)大量のWaringが表示される場合などに設定する。

--problems_first
Problems(bounce、reject、defer、waring)などのレポートを先に表示する。
表示の順番が入れ替わるだけで、レポートに含まれるものは同じ。

--rej_add_from
「message reject detail」セクションに、ドメイン名だけでなく、メールアドレスも表示する。

-q
レポート内容が「none」、つまり内容が空のセクションについてはへッダを表示しない。
--smtpd_stats
smtpdコネクションの統計を表示する。

--syslog_name=name
ログ内でのpostfixのエントリーの名前を指定する。あえて変更していなければ、設定の必要なし。

-u
ユーザーの集計をTOP に限定する。0なら限定しない。

--verbose_msg_detail
「message deferral detail」の集計において、bounce、rejectの原因の同一性までも細かく見る。

--verp_mung
Senderのアドレスを、適当に短くまとめた形にして処理する。
正確には、'-'で区切られた数字の部分を'ID'に置換して処理する。
--verp_mung=2は、さらに'-'数字以降を省略して処理する。

--zero_fill
集計の桁揃えのために、数字の頭を0で埋める。

user_prefsの自動更新

  • Posted by: YAMAGISHI Norimasa
  • 2011年2月 1日 13:16
  • System | tower

今まで松田氏のuser_prefsは、自動更新はしていなかったが、今後は、自動更新をすることにする。

更新しなかったことによってクリティカルな事態が発生するわけではないので、向こうに与える負荷も考え、更新は週に1回にする。

ということで、下記のスクリプトをuser_prefsという名前で、/etc/cron.weekly/の下に保存して、実行ビットをつける。

#!/bin/sh

URL=http://www.flcl.org/~yoh/user_prefs
TMPFILE=/tmp/user_prefs
SADIR=/etc/mail/spamassassin

if [ -e ${TMPFILE} ] ; then
  /bin/rm -f ${TMPFILE}
fi

wget -qN -O ${TMPFILE} ${URL}

if [ -s ${TMPFILE} ] ; then
  if [ -e ${SADIR}/user_prefs.old ] ; then
    /bin/rm -f ${SADIR}/user_prefs.old
  fi
  /bin/mv ${SADIR}/user_prefs ${SADIR}/user_prefs.old
  /bin/mv ${TMPFILE}    ${SADIR}/user_prefs
fi

mail Reject list

当サイトでメールを拒否しているリスト。
下記以外でも、悪質サイトとして高名なところは拒否しています。

CIDR

203.155.245.0/24 COMNET-TH(th)
113.20.184.0/24 ToastNet-Net(ph)
101.78.16.0/20 YOURWEBSTREAM-PH(ph) 2011/01/30
112.109.6.0/24 Alpha-Connect(ph) 2011/01/30
182.32.0.0/12 CHINANET SHANDONG PROVINCE NETWORK(cn) 2011/01/31
219.235.96.0/19 CHINA NETCOM(cn) 2011/01/31
218.156.80.0/24 GDSYS(kr) 2011/02/01
113.10.162.0/24 Trans for reach.com 2011/02/04下記に変更
113.10.160.0/19 Trans for reach.com 2011/02/07
114.112.224.0/19 i4HK Limited 2001/02/14
211.233.62.0/24 KIDC-INFRA
115.85.144.1/20 Taiwan Fixed Network 2011/08/28
211.233.0.0/18 KIDC 2011/08/29
211.47.140.0/24 Incoin 2011/09/18
112.109.4.0/22 NEXT WEB PHIL 2011/09/20
27.123.224.0/19 pccwglobal.com 2011/12/05
111.223.192.0/19 PACNET 2011/12/05
49.156.176.0/20 ACE IDE 2012/01/12
209.205.224.0/20 SD CBS TRANSIT 2012/01/27
209.54.48.0/20 Native Hosting, Inc. 2012/01/06
91.228.68.0/22 FOP Opria Ruslan Dmitrievich 2012/04/18
64.202.37.0/24 ALTAWAY-BLK kurokage-keiba.com 2012/05/08

IPアドレス

112.78.127.157 Sakura Internet 2011/08/28

hostname

umapuro.com
binzmailsystem.net 2012/04/23

Sender

Helo

rakuraku-navi.info 2010/01/30
geomax.co.jp 2011/01/31
mail-b.net 2011/09/18
x-mailer.jp 2011/09/21

From

7uma.com 2011/11/09
/7uma.*\.com/ 2012/01/12
/ko-haito\.com/ 2012/02/14
/7uma.*\.net/ 2012/02/22
/qeen-land.*\.info/ 2012/02/24
/7uma.*\.info/ 2012/02/24
/kurokage-keiba\.com/ 2012/04/18

taRgreyをtarpit & greylistに

  • Posted by: YAMAGISHI Norimasa
  • 2011年1月30日 02:17
  • System | tower

SPAM対策としてtaRgreyを使用していたが、125秒のtarpitをすり抜けてくるSPAMが、まだかなりある。

そこで、tarpit & greylistモードを試してみることにした。

/etc/init.d/postgreyで--targreyオプションを削除し、--tarpit=35に。

おそらくこれでも、すり抜けてくるものもあるだろうが、それらは頻発するようならblacklist指定を考えることにする。

新サーバ再構成手順 その2

  • Posted by: YAMAGISHI Norimasa
  • 2011年1月28日 20:22
  • System | tower

以前も使っていたが新サーバ稼働後のインストールでかまわないプログラム、設定など。

w3m、emacs-w3m

Mule-UCS

新サーバ再構成手順 その1

  • Posted by: YAMAGISHI Norimasa
  • 2011年1月23日 00:40
  • System | tower

yumリポジトリの追加

/etc/yum.repos.d/をコピーして公開鍵を登録するだけも良いのだが、ついでに今までのものを若干変更した。

EPELとSorceForgeをrpmで登録する。

# rpm -ivh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
# rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.5.2-2.el5.rf.i386.rpm

そして、旧サーバのサードパーティー用リポジトリthird.repoをコピーして整理して公開鍵を追加する。

[atrpms]
name=Redhat Enterprise Linux $releasever - $basearch - ATrpms
baseurl=http://dl.atrpms.net/el$releasever-$basearch/atrpms/stable
enabled=0
gpgcheck=1
gpgkey=http://packages.atrpms.net/RPM-GPG-KEY.atrpms

# rpm --import http://packages.atrpms.net/RPM-GPG-KEY.atrpms

旧マシンのバックアップファイルを一時的に展開する

# mkdir tower
# cd tower
# scp nor@tower:/var/backup/tgz/*.110103
# ls | xargs -n 1 tar zxvf

iptables

# cp etc/sysconfig/iptables-config /etc/sysconfig
# cp etc/sysconfig/iptables /etc/sysconfig
# service iptables restart

Apache

# yum groupinstall "Web Server"
# cp etc/httpd/conf/httpd.conf /etc/httpd/conf
これ以外にも、ssl.confなど/etc/httpd/conf.d/内で自分で変更したファイルがあればコピーする。

/var/wwwのデータを復旧する。

# service httpd start
# chkconfig --level 345 httpd on

samba

# yum groupinstall "Windows File Server"
# cp etc/samba/* /etc/samba
# chkconfig --level 345 smb on
# service smb start

mySQL

# yum install mysql
# yum install mysql-server
# vi /etc/my.cnf

以前のmy.cnfをコピーしてもよいのだろうが、以下のみ加えておく。

[mysqld]
default-character-set = utf8
[mysql]
default-character-set = utf8

そして、起動設定と起動。

# chkconfig --level 345 mysqld on
# service mysqld start

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

こんなメッセージが出るが、support-files/mysql.serverは/etc/mysqldのことなので、なにもしなくていい。

が、以下のメッセージには従う。

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h levin.rally.or.jp password 'new-password'

Alternatively you can run:
/usr/bin/mysql_secure_installation

# /usr/bin/mysql_secure_installation
パスワード入力以外は「Enter」でかまわない。

Dovecot

# yum -y install dovecot
# cp etc/dovecot.conf /etc

# service dovecot start
# chkconfig --level 345 dovecot on

postfix

標準のPostfixは、PostgreSQLを使うようになっているので、mySQLを使うためにソースからビルド。

# wget http://ftp.riken.jp/Linux/centos/5.5/os/SRPMS/postfix-2.3.3-2.1.el5_2.src.rpm

また、taGrayからsleep中に接続を切れるように、postfix-sleep.patchを、K2-net small patchesからとってくる。

# rpm -ivh postfix-2.3.3-2.src.rpm
# cp postfix-sleep.patch /usr/src/redhat/SOURCES <-パッチのコピー。
# vi /usr/src/redhat/SPECS/postfix.spec <-specファイルの編集

%define MYSQL 1 <-MySQLを使うように指定
...
Patch11: postfix-sleep.patch <- # Patchesに以下の行を追加。

yum install pcre-devel mysql-devel <-必要なライブラリをインストール
# rpmbuild -ba --define 'dist .el5_2' /usr/src/redhat/SPECS/postfix.spec
# rpm -ivh /usr/src/redhat/RPMS/i386/postfix-2.3.3-2.1.el5_2.i386.rpm

/etc/postfix/main.cfに以下を追加。

smtp_destination_recipient_limit = 1

/etc/postfix/master.cfでは、
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject


# mkdir Maildir <-既存ユーザーである、rootのMaildirを作成
# chmod 700 Maildir
# service sendmail stop
# service postfix start
# service saslauthd start
# chkconfig sendmail off
# chkconfig --level 345 postfix on
# chkconfig --level 345 saslauthd on
# alternatives --config mta
<-/usr/sbin/sendmailが/usr/sbin/sendmail.postfixにリンクされる。

このmySQLを使う自前でビルドしたPostfixは、yumでアップデートして欲しくないので、/etc/yum.confに除外設定をしておく。

exclude=postfix*

OP25B(Outbound Port25 Blocking)に対応

/etc/postfix/master.cfの設定を以下のようにコメントアウト。

submission inet n       -       n       -       -       smtpd
#  -o smtpd_enforce_tls=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject

Docomoあてメールのエラー対策

/etc/postfix/main.cfに以下を追加。

smtp_destination_recipient_limit = 1

taRgrey

まず、postgreyのインストール

# yum install postgrey
# cp etc/init.d/postgrey /etc/init.d

taRgreyのサイトから使用しているpostgreyのバージョンに対応するパッチをダウンロード。

# pushd /usr/sbin
# patch -p0 < ~/targrey-0.31-postgrey-1.33.patch

/etc/yum.confでアップデート除外設定。

exclude=postfix* postgrey

以下の/etc/postfix内の設定ファイルを旧マシンからコピーする。

check_ns
check_sender_info
permit_client_nots25r
prepend_client
reject*
whitelist*

/etc/postfix/main.cfを旧マシンのものを参考にしながら修正。
(ついでに、自作のreject_my_fromの設定も行う)

/etc/init.d/postgreyで起動オプションを変更。

OPTIONS="--unix=$SOCKET --inet=10023 --tarpit=125 --targrey --retry-count=2 --delay=3600"

# postfix reload <- Postfix再起動

SpamAssassin 3.2.5 + 日本語パッチ

SpamAssassinのルール設定

松田氏のuser_prefsはhttp://www.flcl.org/~yoh/user_prefsに移動している。

spampd

Spamassassin: spamの自動学習

Mailman

インストールは以前の記録参照。

ただし/etc/mailman/mm_cfg.pyは/usr/lib/mailman/Mailman/mm_cfg.pyへのリンクなので、/etcのバックアップからのコピーでは復旧しない。

さて、登録してあるメーリングリスト自体の移行だが、
/etc/mailman/aliases
/etc/mailman/aliases.db
/var/lib/mailman/lists
/var/lib/mailman/archives
の2つのファイルと、2つのディレクトリを(ownerをmailmanで)コピーするだけ。

BIND

インストールは、yumで。
# yum install bind caching-nameserver bind-chroot

設定ファイルは、バックアップを展開して、/var/named/chroot以下のetc、var/namedを入れ替える。

ついでに、今まで適当に追加していたマシンのIPアドレスなどもきちんと登録しておく。

/usr/local内などのデータの移行

自作プログラムや、それに必要なライブラリをインストール。
基本的に/usr/local内にインストールしてあるので、それをチェック。
それ以外は、以下のものなどを。

  • i-forward /usr/local/bin
  • jcode.pl /usr/lib/perl5/site_perl
  • yum install perl-MIME-tools
  • yum install perl-HTML-Tree

wnn6とtamago

Wnn6tamagoともに、前回のインストール記録と、ほぼ同じでインストール可能。

ただし、wnnのchmod usr/norはtarでパーミッションやオーナーが残っているので不要。

ユーザ移行

まず、旧マシンの/etc/passwd、/etc/groups、/etc/shadow、/etc/gshadowからシステムユーザを削除したファイルを用意して、それぞれを新マシンに追加する。

ルータで旧マシンの外部ポートをすべて閉じる。

大量の転送を避けるために、バックアップを/に展開しておく。

旧マシンにrootでsshできるように/etc/ssh/sshd_configを編集("PermitRootLogin yes")し、sshdを再起動、rsyncで/homeを更新する。

さらに/rootのデータも復旧する。

ホスト移行

旧マシンを停止して、新マシン名をtowerに変更。

Postfixの設定ファイルmain.cfでホスト名を変更する。

myhostname = mail.rally.or.jp

とりあえず、使用可能なサーバ機が完成。

新サーバOSインストール

  • Posted by: YAMAGISHI Norimasa
  • 2011年1月23日 00:33
  • System | tower

ハードウェアの準備ができたので、CentOS 5.5のインストール開始。

www.centos.orgから、ミラーサイトを探し、CentOS 5.5のDVDイメージCentOS-5.5-i386-bin-DVD.isoをダウンロード。DVDを焼いて、ブート。

やった作業は「インストール: CentOS 5」とほぼ同じ。

そして、以下のポイントの記述も、ほぼ同じ。

ディスクパーティション設定

ハードディスクのパーティションは、280Gのハードディスクは/boot以外はすべてLVMに割り振り、/とswapに使用、80Gのハードディスクはすべてバックアップ用に使う。

Maxtor 7V300F0 286181MB(sda)
/boot 100M
LVM
swap 2G
/

Maxtor D740X-6L(6L080J4) 80G(hda)
/var/backup

ネットワークデバイス

空いているアドレスと名前を適当に割り当てる、ただし自分のもの以外は正しい値を設定しておいた方が、あとで手間がかからない。

仮に、
FQDN: levin.rally.or.jp
IP Address: 192.168.1.10/255.255.255.0
GW Address: 192.168.1.1
DNS: 192.168.1.6, 192.168.1.1

IPv6は無効にした。

地域設定

「システムクロックでUTCを使用」のチェックをはずす。

パッケージ選択

追加リポジトリは設定しない。設定すると、依存関係のチェックで例外エラーが発生してしまう(バグだ)。

詳細は「今すぐカスタマイズする」。

「デスクトップ環境」-「GNOME」
「アプリケーション」-「Emacs」
「アプリケーション」-「グラフィカルインターネット」-「firefox」
「開発」-「開発ツール」
「開発」-「開発ライブラリ」
「サーバー」なし
「ベースシステム」-「X WIndow System」
「ベースシステム」-「ベース」
「仮想化」なし
「クラスタリング」なし
「クラスタストレージ」なし
「言語」-「日本語のサポート」

再起動した後に、Setup Agentが立ち上がるが、
「ファイアウォール」あとで設定するのでデフォルト。
「日付と時刻」ネットワークタイムプロトコルを有効にする。
「SELinux」無効。
「ユーザの作成」あとで、コピーするのでしない。

そして、ログインして、自動的に現れるPackage Updaterで更新。

「更新があります」という通知があるので、[更新を表示]をクリックすると、Package Updatarが立ち上がる。とりあえずは、すべて更新しておくのが良いだろう。

これで、とりあえずインストール作業は完了だが、不要なサービスは停止しておく。

# chkconfig --level 345 bluetooth off
# chkconfig --level 345 ip6tables off

当たり前だが、VAIOに比べれば、とてもきびきび動くので気持がよい。
これなら、動画を見ることもできるかも、

tower 20110121版

  • Posted by: YAMAGISHI Norimasa
  • 2011年1月21日 09:31
  • System | spec | tower
  • CPU: AMD Athlon XP 2600+(1916Mhz)
  • Memory: 512M x 2(DDR230)
  • Motherboard: Asrock K7NF2-RAID
  • HDD: Maxtor 7V300F0 286181MB(sda)
  • HDD: Maxtor D740X-6L(6L080J4) 80G(hda)
  • Video: GeForce6200
  • DVD: Panasonic LF-D521(ATA)
  • Keyboard: PFU Happy Hacking Keyboard Lite(PS2)
  • Mouse: ELECOM M-M1P2WH(PS2)

New towerハードウェアの準備

  • Posted by: YAMAGISHI Norimasa
  • 2011年1月21日 09:22
  • Hardware | tower

現メインサーバtowerであるVAIOのハードディスクから異音がするようになったので、towerの後継機を準備することにする。

ほんとうは、不調になる前に、作っておきたかったのだが、いつも後手後手。

以前調子が悪くなって放置していたAthlon 2600+機を調査。

まずDVDドライブとしてLF-D521を接続。DVD-RAMが読めないこのドライブの余生にはふさわしい。

そして、一番怪しいSATA関連を、ハードディスク、ケーブル、マザーボード側のインタフェースといろいろ組み合わせてテストした。
F2でBIOS、F11で(たとえBIOSで設定していなくても)ブートドライブ選択ができるのが、ありがたい。

最新(5.0.3)のUltimate Boot CDに入っている、PowerMax 4.23で調査したところ、マザーボードのSATA2コネクタに接続した場合のみ認識しないことが判明。

おそらく、これが主な原因だったのだろう。今までは、RAIDの時もそれ以外も常に同銘柄のHDDを2台つないでいた。

SATAインタフェースが1つしか使えず、既存のSATA250Gが1つ無駄になるが、このマザーボードを使うのが、現状最大のディスク容量を用意できることになる。

ということで、とりあえずMaxtor 7V300F0 286181MBを接続して準備完了。

GeForce6200とATX筐体、430W電源がちょっと贅沢すぎる気がするが、余力があるのはいいこと、としておこう。

ATAの32Gくらいのディスクを接続して、一日3回くらいcronでバックアップをとるようにすると安心だろう。

インストール: postgrey-1.33向けtaRgreyパッチ

postgrey-1.33がCentOSのyumのリポジトリに乗ったが、taRgreyが対応していなかったので、インストールはしばらく保留していた。

が、気が付くと、postgrey-1.33向けtaRgreyパッチが、モーグルとカバとパウダーの日記さんで公開されていたので、まずyumでpostgreyをアップデート。

そしてすぐにtaRgreyパッチもあてることにした。

基本的に、以前の手順そのまま。

SpamAssasinの設定の修正

local.cfで"report_safe 0"にしたのだが、いつのまにかオリジナルのメールが添付ファイルになるようになってしまった。

どこかで、ルールセットが上書きされているようだ。

調べてみると、sa-updateでアップデートされるルールセットで"report_safe 1"に設定されている。

sa-updateでアップデートされるルールセットは、local.cfより後に読み込まれるため、で上書きされてしまう。

そこで、これらのルールセットを一番最初に読み込むように以下の行を、local.cfの一番最初に記載する。

include /var/lib/spamassassin/3.002005/updates_spamassassin_org.cf

POPFileの停止

SapmAssassinが順調に機能しているようなので、POPFileを停止することにした。

いままでは、POPFileのバケツによる振り分けに頼っていたが、SpamAssassinではspamの切り分けしかできないので、しばらくの間はi-forwardの転送設定を鍛えないといけない。

もちろん、同時にThunderbirdの振り分け設定も、やり直すことにする。

Spamassassin: spamの自動学習

ベイジアンフィルタを有効活用するためには、spamを学習させる必要がある。

指定のフォルダ(spam)に入っているものは、自動的にspamとして学習、削除するという方法が一般的だが、あえて登録専用に、sa_spam、sa_hamという二つのフォルダを作り、そこに入れたもののみ登録するという方法をとることにする。

# vi /etc/cron.daily/spam-learn

#!/bin/bash

PATH=/usr/sbin:/usr/bin:/bin

HAMS=sa_ham
SPAMS=sa_spam
MAILDIR=/home/nor/Maildir

sa-learn --ham ${MAILDIR}/.${HAMS}/cur/*
rm -f ${MAILDIR}/.${HAMS}/cur/*

sa-learn --spam ${MAILDIR}/.${SPAMS}/cur/
rm -f ${MAILDIR}/.${SPAMS}/cur/*

# chmod +x /etc/cron.daily/spam-learn

インストール: spampd 2.30

SpamAssassin自体のインストールが完了したので、次はPostfixへの組み込みになる。

もちろん、Postfixの機能だけでSpamAssassinでフィルタリングすることはできるのだが、ちょっと調べていたところ、さらに良さそうな方法を佐藤氏のBlogにて見つけた。

Postfixの設定でClamSMTPと、受信時だけSpamAssassinを利用する - モーグルとカバとパウダーの日記

spampd、SMTPを話すSMTPプロキシだ。

これであれば、常時spamdを立ち上げておく必要もない(代りにspampdを立ち上げておかなければならないが...)
そして単純なフィルタに比べ、リソース問題にも強く、(きちんと設定すれば)パフォーマンスも高いようだ。

spampdからspampd-2.30.tar.gzをダウンロード。

完全なPerlプログラムで、makeなどの必要はない。

/usr/local/binにコピーして、付属のspampd-rh-rc-scriptをほぼそのまま/etc/init.d/にコピーする。

$ sudo cp spampd-rh-rc-script /etc/init.d/spampd

いくつかのファイルを
佐藤氏のBlogを参考に修正する。

/etc/postfix/main.cf

smtpd_recipient_restrictions =
  ...
  reject_unauth_destination
  check_client_access    regexp:$config_directory/filter_spampd
  ...

content_filter = 
receive_override_options = no_address_mappings

/etc/postfix/filter_spampd

/./             FILTER scan:127.0.0.1:10025

/etc/postfix/master.cf

# SA scan filter (used by content_filter)
scan      unix  -       -       n       -       10      smtp
        -o smtp_send_xforward_command=yes
# For injecting mail back into postfix from the filter
127.0.0.1:10026 inet  n -       n       -       10      smtpd
        -o content_filter=
        -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
        -o smtpd_helo_restrictions=
        -o smtpd_client_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o mynetworks_style=host
        -o smtpd_authorized_xforward_hosts=127.0.0.0/8

/etc/init.d/spampd

daemon spampd --port=10025 --relayhost=127.0.0.1:10026 --tagall --auto-whitelist

設定が完了したら、

# /etc/rc.d/init.d/spampd start
# postfix reload

動作が確認できたら、

# chkconfig spampd on
# chkconfig --list spampd

SpamAssassinのルール設定

SpamAssassin日本語パッチ版のインストールも完了したので、まず、ルール設定。

ルール設定だが、サンプルとして、配布されているルールでとても参考になると思われるものは2つ。

一つは松田氏が公開しているuser_prefs

もう一つは、日本語対応パッチに対応したルールセットのサンプル。
http://spamassassin.jp/download/rules/jp_rules-20060729.cf

まずは、松田氏のuser_prefsを基本に、日本語ルールセットを追加していくことにした。

今回は、サーバに到着したすべてのメールをPostfix内から呼び出したSpamAssassinで処理することを考えているので、すべての設定は/etc/mail/spamassassinに集約する。

local.cf

最終行以下に追加。

sa-upateでルールを上書きされないように、アップデート用のファイルを最初に読み込むようにする(4/20追加)。

include /var/lib/spamassassin/3.002005/updates_spamassassin_org.cf

NFSを使っていないので、パフォーマンスを上げるために追加。

lock_method flock

出力において、本文を加工せず、SPAMかどうかに限らず、SpamAssassinのへッダをつけるために以下を指定。

report_safe 0
add_header spam Flag _YESNOCAPS_

日本語化を有効にするために、(すでに)追加。

normalize_charset 1

ベイズデータは、全ユーザ共通のものとするために以下を指定。

bayes_path /var/spool/spamassassin/bayes
bayes_file_mode 0700

ただし、実際に読むのはユーザmail(もしくはroot)だけなので、ファイルモードは600でよい。
ここで気をつけるのは、bayes_pathにはパスだけでなく、ファイル名のベースになる部分を書くと言うこと。
この結果/var/spool/spamassassinの下にbayes_with_toksとbayes_seenが作成される。
まず、事前に、

# mkdir /var/spool/spamassassin
# chown mail:mail /var/spool/spamassassin

作成されたら、
# chown mail:mail /var/spool/spamassassin/bays*
# chmod 600 /var/spool/spamassassin/bays*

松田氏作のuser_prefsを読み込むために。

include user_prefs

v310.pre

松田氏によると、Auto White Listは、結局From、Toの詐称が多いSpamの現状から、無意味。
同感するので、Auto White Listは切る。

# AWL - do auto-whitelist checks
#
#loadplugin Mail::SpamAssassin::Plugin::AWL

user_prefsのok_languages ja enを有効にするために、以下の行のコメントアウトを解除。

# TextCat - language guesser
#
loadplugin Mail::SpamAssassin::Plugin::TextCat

さらに、松田氏のuser_prefs向けドキュメントにあるように、以下のコメントアウトも解除。

# MIMEHeader - apply regexp rules against MIME headers in the message
#
loadplugin Mail::SpamAssassin::Plugin::MIMEHeader

# ReplaceTags
#
loadplugin Mail::SpamAssassin::Plugin::ReplaceTags

user_prefs

松田氏のuser_prefをそのまま使う。

$ wget http://tlec.linux.or.jp/docs/user_prefs

ただし、更新をチェックして、最新版を常に使うようにする。

wgetを利用した自動更新も考えたが、手動でルールを入れ替えて動作を確認しての方が良いので、別途大元の更新チェックのみ行うことにする。

private_prefs

user_prefsから呼ばれるprivate_prefsを作成。

MYMTAは不要になったと最新のuser_prefに記載がある。

ドキュメントには、trusted_networksに127.0.0.1/8があるが、これを書いてしまうと、lintで以下のような警告が出るので外す。

[6096] warn: netset: cannot include 127.0.0.1/8 as it has already been included

trusted_networks 192.168.0.1/16 10.0.0.1/8 172.16.0.1/12 219.117.204.128
internal_networks 192.168.0.1/16 10.0.0.1/8 172.16.0.1/12 219.117.204.128

# replace_tag   MYMTA (mail\.rally\.or\.jp|rally\.jp)

とりあえず以上の設定が完了したら、"spamassassin --lint"で設定を確認。

本来なら、sa-updateでルールセットの更新を行うべきなのであろうが、本家のsa-qupdateで提供されるルールセットではspamの閾値が5、松田氏のuser_prefでは閾値が13に設定されているので、同時に使うことはあまり意味がない。
そこで、sa-updateはあえて無視することにする。

また、今後の使用の中で、日本語版用ルールセットの内容は、private_prefに徐々に追加していくことにする。

インストール: SpamAssassin 3.2.5 + 日本語パッチ

考えた末に、結局日本語パッチもあてることにする。

フィルタによる選別結果を転送の基準付けに使用しているので、やはり精度が高いことが望ましいからだ。

まず、すでに(なぜか)インストールされている、3.3.1をアンインストールする。

# yum remove spamassassin

perl-Encode-Detect

すでにperl-Encode-Detect-1.01-1.el5.rf.i386がインストールされている。

MeCab 0.93

MeCab関連のインストールはちょっとてこずった。

MeCab: Yet Another Part-of-Speech and Morphological Analyzerより、mecab-0.98.tar.gzをダウンロード、 "--with-charset=utf-8"をつけて、configureなのだが...

src/mecab.h内の以下を修正しておく必要がある(数字に付いている括弧を外す)。

#define MECAB_NOR_NODE  0
#define MECAB_UNK_NODE  1
#define MECAB_BOS_NODE  2
#define MECAB_EOS_NODE  3
#define MECAB_EON_NODE  4

#define MECAB_USR_DIC   1
#define MECAB_SYS_DIC   0
#define MECAB_UNK_DIC   2

これを直しておかないと、Text::MeCabのmake testでエラーになってしまう。

$ tar zxvf mecab-0.98.tar.gz
$ cd mecab-0.98
$ ./configure --with-charset=utf-8
$ make
$ sudo make install

(/usr/local/libが、/etc/ld.so.confに書いてあるのを確認して)
$sudo /sbin/ldconfig

MeCab IPA 辞書

やはり、MeCab: Yet Another Part-of-Speech and Morphological Analyzerからmecab-ipadic-2.7.0-20070801.tar.gzをダウンロード。

char.defのASCIIの部分をを以下のように編集。

# ASCII
#0x0021..0x002F SYMBOL
#0x0030..0x0039 NUMERIC
#0x003A..0x0040 SYMBOL
#0x0041..0x005A ALPHA
#0x005B..0x0060 SYMBOL
#0x0061..0x007A ALPHA
#0x007B..0x007E SYMBOL
0x0021..0x007E ALPHA

$ ./configure --with-charset=utf-8
$ make
$ sudo make install

文字コードは当然utf-8。

Text::MeCab

cpanでインストール可能。
文字コードは当然utf-8。

# cpan Text::MeCab

なお、前述のmecab.hの修正を行わないと、make testでエラーが発生するため、cpanはもちろん、http://search.cpan.org/~dmaki/Text-MeCab/からダウンロードしたtarballからもインストールできない。

最初、ぐぐってみた結果いくつか見つかったMakefile.PLのパスの修正をしたのだが、ダメだったので試行錯誤。

日本語パッチ版SpamAssassin

SpamAssassinから、Mail-SpamAssassin-3.2.5.tar.gzをダウンロード、さらに日本SpamAssassinユーザ会から、spamassassin-3.2.5-ja-test1.patchをダウンロード、展開して日本語パッチをあてて、インストール。

$ cd Mail-SpamAssassin-3.2.5
$ patch -p1 < spamassassin-3.2.5-ja-test1.patch
$ perl Makefile.PL
$ make
$ make test
$ sudo make install

このままだと、ログにwarningがでるので、/usr/lib/perl5/site_perl/5.8.8/Mail/SpamAssassin/Plugin/Tokenizer/MeCab.pmのsub tokenizeを以下のように修正。

参考: http://xoops.fens.net/modules/wiki/?Linux/cfg/Mail-SpamAssassin-3.2.5

    for (my $node = $mecab->parse($text); $node; $node = $node->next) {
#      push(@buf, $node->surface);
      if ( defined $node->surface) {
       push(@buf, $node->surface);
      }
    }

/etc/mail/spamassassin/lcoal.cfに次の行を追加。

normalize_charset 1

tokenizer.preを/etc/mail/spamassassin/にコピーして、以下の行をコメントアウトして、

loadplugin Mail::SpamAssassin::Plugin::Tokenizer::SimpleJA

以下の行のコメントを解除してMeCabを有効化。

loadplugin Mail::SpamAssassin::Plugin::Tokenizer::MeCab

これで、SpamAssassin 3.2.5 + 日本語パッチ自体のインストール自体は完了。

スパムフィルタの検討

  • Posted by: YAMAGISHI Norimasa
  • 2010年4月 9日 10:42
  • Internet | tower

現状、POPFileの精度、そして、複数のバケツを使ったIMAPフォルダ上での自動振り分けには十分満足しているのだが、いずれは自前のメール(IMAP)サーバは無くして、プロバイダに預けて運用するという最終的な方針を考えると、POPFileの使用をそろそろやめることを検討しなくてはいけない。

POPFileによる自動振り分けは非常に便利なのだが、POPFileのIMAP対応がINBOXをスキャンし振り分けるというサーバ側での動作なので、自前のメールサーバを持たない限りは使いにくい。
どこかで妥協しなくてはならないので、プロバイダのメールサーバを使うことを優先とし、POPFileの使用をあきらめることにする。

rally.or.jp、rally.jpのアドレスは残すが、IMAPをサポートしているプロバイダを使用するのであれば、外部にメール委託をしても大きな問題はない。
また、外部からのメールの参照も、GMailへの転送が可能な限り、大きな問題にはならないだろう。

さらに言えば、どのクライアントからも保存したメールを読むことができるというIMAP自体は非常に便利ではあるのだが、実際にサーバに大量のメールをため込んでしまうと、通信によるオーバーへッドが大きい。

Thunderbirdで実装された全文検索機能などでは大きな弱点になる。
また、サーバが遠い場所にある場合のフォルダスキャンなどの待ち時間も長くなってしまう。

大規模組織かつ通信速度が高速である場合は、本来のIMAPが生き、ストレージをまとめることができるというメリットも大きくなるのだろうが...

ということで、一定期間が経過したメール、単に記録として取っているレベルのメールは、IMAPフォルダからクライアントに移してしまい、IMAPフォルダは可能な限り軽量にしておくという運用を考えよう。

こうなると、POPFileの自動振り分けよりも、IMAPフォルダからローカルに振り分けることが可能なThunderbirdの振り分けの方が都合がよい。

前置きが非常に長くなったが、要するにPOPFileはやめて、新規のスパムフィルタを導入したいと言うことだ。

SpamAssassinBogofilterb、bsfilterの3つが有名どころ。

bsfilterは日本人が開発していると言うこともあり、日本語対応については一番安心感がある。そういえば、以前は使っていて、不満もなかった。Rubyで動く。

Bogofilterは、そのままではどうやら、日本語の扱いがあまりうまくないらしい。ただ、Cで作られているゆえに、動作は軽いだろう。
bogofilter を正しく使おうという、日本語をうまく扱う方法も見つかったが、ちょっと面倒だ。

そして、SpamAssassinは、Perl製と言うことで、若干重いと思われるが、多機能で拡張性も高く、ベイジアンフィルタ以外によるSpam発見機能が豊富。
ただ、若干日本語の対応には難があり、日本語パッチをあてる必要がありそうだ。
日本語対応パッチをあてるというのは、yumによりSpamqAssassinをインストールして使おうと考えている僕には、向かない手段だ。
さらに、日本語パッチは、3.2.5のものまでしか出ておらず、yumでインストールすることもできない。

ウノウラボ Unoh Labs: ベンチャー流のスパムメール対策術(後編)

この実験では、どうやら日本語対応パッチをあてていないSpamAssassinとbsfilterでは速度がほぼ変わらない。
そこで、結局のところ、これを参考にSpamAssassinnをまず試してみることにした。

アンインストール: Squid

もはや、使っていないSquidをアンインストールした。

# yum erase squid

キャッシュデータは、自分で消さないと残ってしまう。

# rm -rf /var/spool/squid/*

インストール: Squid 2.6.STABLE6-5 - Computer

I・Oデータ HDCS-UR 1.0Rをrodemに接続

rodemの再構築にともない、いままでtowerに接続してあった1TBのUSB接続HDDをrodemに接続することにした。

理由は、ネットワーク接続による速度低下が著しいこと。
特にtowerでは、USB HDDアクセス時に異常なまでに負荷がかかるため好ましくないと判断した。

towerの/etc/fstabを、起動時にマウントしないようにコメントアウトした後、umountして、取り外す。

そして、rodemに接続後、NTFSに完全フォーマット。
別HDDに保存してあった、データを書き戻す。

実際の中身は、ネットワーク接続時とほぼ同じ。

ハードウェア付属ソフトもOSがWindows XPになったので使えるようになったが、
実際に使ったのは、「マッハUSB」によるUSB2.0高速化のみ(インストール不要)。

省電力ソフト「ECO番人」もインストールしてみたが、体感的に若干の速度低下などのストレスが感じられたので、アンインストール。
特に、高速な動作を必要としなければ、別に問題なく良いソフトなのかもしれないが...

rpmnew、rpmsaveファイルの確認修正

  • Posted by: YAMAGISHI Norimasa
  • 2009年10月27日 17:23
  • System | tower

Cent OSが5.4になったのを機会に、yumのアップデートで放置されていた、rpmnew、rpmsaveファイルの確認をすることにした。

まず、rpmnew、rpmsaveファイルの洗い出し。

# find / -print | egrep "rpmnew$|rpmsave$" >foo

変更内容確認と、同時に必要なら修正

# chkrpm foo

chkrpmは自作のdiffを実行するperlスクリプト

#! /usr/bin/perl
while(<>) {
  chop;
  if ($_ =~ /rpmnew$/) {
    $RPMNEW = $_;
    $RPMNEW =~ s/.rpmnew$//;
    system "diff -c $RPMNEW $_|lv";
  } elsif ($_ =~ /rpmsave$/) {
    $RPMNEW = $_;
    $RPMNEW =~ s/.rpmsave$//;
    system "diff -c $_ $RPMNEW|lv";
  }
}

これで先に現れるのが、現在の設定ファイル
rmpnewについては、変更行が!で、自分が追加していたと思われる行が"-"で、(まだ追加していないが)新規に追加するべき行が"+"で表示される。
rmpsaveについては、変更行が!で、自分が追加していたと思われる(削除された)行が"-"で、新規に追加された行が"+"で表示される。

最後にrmpnewとrpmsaveファイルを削除。

# cat foo | xargs -t rm

今回のrpmnewファイルによる修正事項は以下のもの。

/etc/dovecot.conf

セキュリティホールになりうる以下のパラメータを削除。

valid_chroot_dirs = /home


以下のパラメータを追加。

auth default {
    mechanisms = plain
}

/etc/smartd.conf

rpmnewのものに入れ替え。

/etc/yum.d/CentOS-Base.repo

gpgkeyがローカルのファイルを使うようになっていたので修正。

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

USBハードディスク接続

  • Posted by: YAMAGISHI Norimasa
  • 2009年9月13日 01:27
  • Hardware | tower

購入した、I・Oデータ機器の1.0TBのUSBハードディスクを、towerに接続する。

目的は、towerを含む各マシンのバックアップと、ビデオ、サウンドなど、いろいろなマシンから使いたいファイルのネットワークストレージとして使うこと。
1TBあれば、これらの複合用途でもしばらくはもつだろう。

製品出荷時からFAT32でフォーマット済なので、とりあえず、rodemに接続して動作確認OK。

そして、いよいよtower(VAIO)に接続。

まず、USBデバイスを確認。

# lsusb
Bus 001 Device 002: ID 04bb:0121 I-O Data Device, Inc.
Bus 001 Device 001: ID 0000:0000
Bus 002 Device 001: ID 0000:0000

USBディスクはSCSIとして認識されるので、SCSIデバイスとしても確認。

# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: I-O DATA Model: HDCS-U           Rev:
  Type:   Direct-Access                    ANSI SCSI revision: 02

さらに、dmesgでsda1として認識されていることを確認。

# dmesg
USB Mass Storage support registered.
  Vendor: I-O DATA  Model: HDCS-U            Rev:     
  Type:   Direct-Access                      ANSI SCSI revision: 02
SCSI device sda: 1953525168 512-byte hdwr sectors (1000205 MB)
sda: Write Protect is off
sda: Mode Sense: 34 00 00 00
sda: assuming drive cache: write through
SCSI device sda: 1953525168 512-byte hdwr sectors (1000205 MB)
sda: Write Protect is off
sda: Mode Sense: 34 00 00 00
sda: assuming drive cache: write through
 sda: sda1
sd 0:0:0:0: Attached scsi disk sda
usb-storage: device scan complete
sd 0:0:0:0: Attached scsi generic sg0 type 0

fdiskでFAT32領域を削除して、再度領域確保。

# fdisk /dev/sda

このディスクのシリンダ数は 121601 に設定されています。
間違いではないのですが、1024 を超えているため、以下の場合
に問題を生じうる事を確認しましょう:
1) ブート時に実行するソフトウェア (例. バージョンが古い LILO)
2) 別の OS のブートやパーティション作成ソフト
   (例. DOS FDISK, OS/2 FDISK)

コマンド (m でヘルプ): d
Selected partition 1

コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本領域 (1-4)
p
領域番号 (1-4): 1
最初 シリンダ (1-121601, default 1): 
Using default value 1
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-121601, default 
121601): 
Using default value 121601

コマンド (m でヘルプ): p

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot      Start         End      Blocks   Id  System
/dev/sda1               1      121601   976760001   83  Linux

コマンド (m でヘルプ): w
領域テーブルは交換されました!

ioctl() を呼び出して領域テーブルを再読込みします。
ディスクを同期させます。

そして、ext3にフォーマット。

# mke2fs -j -L usbhd1 /dev/sda1

実は、hashed b-treeによりディレクトリアクセスを高速化するdir_indexオプションをつけようと思ったが、すでに/etc/mke2fs.confのbase_fearuresにデフォルト設定として、記載されていた。

[defaults]
        base_features = sparse_super,filetype,resize_inode,dir_index
        blocksize = 4096
        inode_ratio = 8192

容量が大きいだけあって、フォーマットには非常に時間がかかる。1TBで6時間弱。

マウントポイントを作成し、マウント。

# mkdir /mnt/usbhd
# mount /dev/sda1 /mnt/usbhd

# df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
                      17775388  14836780   2021104  89% /
/dev/hda1               101086     24512     71355  26% /boot
tmpfs                   127772         0    127772   0% /dev/shm
/dev/sda1            976521536        32 976521504   1% /mnt/usbhd

読み書きをテストした後に、fstabに記載して、起動時にマウントするようにする。
一旦、umountした後にmount -aでテスト。

# mount -t ext3 /dev/sda1 /mnt/usbhd
# vi /etc/fstab

LABEL=usbhd1 /mnt/usbhd ext3 defaults 0 2

起動時にマウントできるようになったら、ディレクトリ作成、およびアクセス権の設定をする。すべて、ディレクトリの所有者はnorにして、アクセス権を755にした。

次は、ネットワーク経由で使えるようにsambaを設定する。
mmfは誰でも読み出し可、norのみ書き込み可、backupはnor(とroot)のみが読み書き可とする。

/etc/samba/smb.confに以下を追加。

[mmf]
        comment = MultiMedia Files
        path = /mnt/usbhd/mmf
        public = yes
        writable = yes
        printable = no

[backup]
        comment = Backup 
        path = /mnt/usbhd/backup
        public = no
        writable = yes

しかし、実際動作させてみると、Sambaのパフォーマンスが低すぎる。パフォーマンスが低いと言うよりも、実際には負荷が大きすぎると言うべきだろうか。

一般的な使い方では、それほど問題にはならないだろうが、10GB以上のファイルがいくつもあるという、僕の環境の場合、それ一つのコピーで3時間近くかかってしまう。

どうするか悩んだが、とりあえずは、最初の方針どおり、1TBのディスクを、towerに接続して、運用してみるすることにする。
様子を見て、rodemに1TBのディスクを接続し必要に応じてON/OF、towerでは80G程度のディスクを使うという手もありかもしれない。

購入: I・Oデータ機器 HDCS-U 1.0R

  • Posted by: YAMAGISHI Norimasa
  • 2009年9月11日 13:34
  • Hardware | tower

tower接続用にUSB 2.0対応の1.GBのUSBハードディスクを購入(まあ、tower自体はUSB 1.0なのだが...)。

09091101.jpg

メーカー製品ページ

当初、1.GBのバルクハードディスクと、USBケースを購入しようと思っていたのだが、価格調査をしているときに、TUKUMOで、9,800円で販売していることを知った。
1年間の保証や、付属するユーティリティプログラムを考えれば十分安いので、こちらにすることに。

念のため楽天で価格調査をすると、I・Oデータ機器の直販ショップのioPLAZA 楽天市場店で、集合梱包箱の不具合で返品になったワケあり品を8,800円で販売しているのを見つけた。

[アイオーデータ]ワケあり!USB 2.0/1.1対応 外付型ハードディスク1.0TB

が、どうせ秋葉原を通る用事があるので、税や送料を考えれば9,800円でもかわらない。
TSUKUMO .exで9,800円で購入した。

TSKUMOのポイントカードは、YAMADA電器の傘下に入ったときに切り替わり、以前のポイントが無効になってしまっていた。だから、ポイント制はいやなんだよな...

yumのエラー

  • Posted by: YAMAGISHI Norimasa
  • 2009年8月14日 04:08
  • System | tower

yum updateでエラーが出た。
個別にupdateしていくと、どうやらfile.i386 0:4.17-15.el5_3.1のアップデートがうまく行かないようだ。

そこで、yumデータベースをクリアするべくyum clean all。

うまくいった。

VNCのサーバ側でのディスプレイサイズの変更

主にVNCクライアントを動かすWindowsマシンのディスプレイは1024x768。
タスクバー、ウィンドウ枠などの大きさを考慮すると、スクロールバーを表示させずにVNCクライアントを使うには、画面サイズが1000x700くらいがちょうどよい。

しかし、設定ファイルだと思っていた/etc/sysconfig/vncserversの記載をいくら変えても画面サイズが変更にならない。

/usr/bin/vncserverスクリプトの中身などを調べたら、結局のところ/etc/sysconfig/vncserversは/etc/rc.d/init.d/vncserverでvncserverを起動するときに読み込むファイルだった。
コマンドラインから起動する場合は、-geometryオプションを使わないとだめなようだ。

今後しばらくは常時vncを使うことになりそうなので、rcで起動してしまうことにしよう。xinetdで必要なときだけ起動すると言う手もあるが、メモリ、CPUともに余裕があるし、なによりクライアントが再接続したときに以前の状態からはじめられるので、常時起動でよいだろう。

# chkconfig vncserver on
# chkconfig --list vncserver
vncserver 0:off 1:off 2:on 3:on 4:on 5:on 6:off

FromでのメールのReject

あまりやりたくなかったがFromでのメールのRejectに手をつける。
SpamのFromなどしょっちゅう変わるものだし、いちいち登録するのも面倒だが、プロバイダがSpammerを止めようと言う気がないので仕方が無い。

/etc/postfix/reject_my_fromを作成。
以下のような内容で記載。

/info@clb-garden\.com/  REJECT reject_my_from

さらに、/etc/postfix/main.cfに以下のような記載を追加する。

smtpd_sender_restrictions=
        permit_mynetworks,
        check_sender_access regexp:$config_directory/reject_my_from

そして、# postfix reload。


現状、手動でやってもたいした手間ではないが、fool proofとしてMakefileを作成した。

# /etc/postfix/Makefile 
# Rules for Postfix data files.

all : reload

reload: makedb
	/usr/sbin/postfix reload

makedb: reject_my_black_ip.db

reject_my_black_ip.db : reject_my_black_ip
	/usr/sbin/postmap hash:/etc/postfix/reject_my_black_ip

良く使うマシンすべてにsshパスフレーズの登録

LANなので、生パスワードによるsshログインで満足していたのだが。

Zaurusのユーザであるzaurusはノンパスワードをなので、sshでログインができない。

よい機会なので、すべてDSAで統一しお互いにパスフレーズのやり取りをして登録した。

$ ssh-keygen -t dsa
$ scp ./ssh/id_dsa.pub user@server:/~/tmp
$ ssh user@server

$ vi ./ssh/authorized_keys2

dovecotの起動スクリプト修正

  • Posted by: YAMAGISHI Norimasa
  • 2009年2月23日 10:41
  • System | tower

towerが電源断で落ちるという事故があり、/var/run/dovecot/master.pidが残っていて、dovecotが起動しなかった。
pidファイルが存在すると、lockファイルが存在しなくても起動できないようだ。
正常終了および、正常起動したときには問題は発生しないが、対策として/etc/init.d/dovecotをいじっておくことにした。

# vi /etc/init.d/dovecot

start() {
        echo -n $"Starting $prog: "
        if [ ! -f /var/lock/subsys/dovecot -a  -f /var/run/dovecot/master.pid ]; then
            /bin/rm /var/run/dovecot/master.pid
        fi	
        daemon /usr/sbin/dovecot
        RETVAL=$?
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/dovecot
        echo
}

インストール: taRgrey

  • Posted by: YAMAGISHI Norimasa
  • 2009年2月11日 20:33
  • System | tower

postgreyでかなりのspamを減らすことができるようになった。

が、問題は最初はすべてのメールに対して再送要求を行なうため、メール配信の遅延が大きいということだ。

whitelistを作成し、どんどん登録していくというのが一番確実な手段なのだが、永遠に続く不毛な作業だ...

そこで、導入することにしたのは、postgreyの公式ページでもパッチが紹介されているtaRgrey。

taRgrey - S25R + tarpitting + greylisting (tarpit + greylist policy server)

S25R(Selective SMTP Rejection:選択的SMTP拒絶)は、浅見氏が考案されたスパム対策技術で紹介されている、エンドユーザー回線からのSMTP接続を拒否する手法。ただし、これは、自宅でメールサーバを運用している場合など、誤検出の危険が無いとはいえない。

そこで、S25Rにsarpitting(SMTPサーバの応答遅延)とgreylistingを組み合わせ、誤検出を少なくしたものがtaRgrey。

postgreyに対するパッチの形で提供されているので、taRgreyのサイトから使用しているpostgreyのバージョンに対応するパッチをダウンロード。

# pushd /usr/sbin
# patch -p0 < ~/targrey-0.31-postgrey-1.32.patch

次に、postgreyの起動オプションを変更

# vi /etc/init.d/postgrey

OPTIONS="--unix=$SOCKET --inet=10023 --tarpit=125 --targrey --retry-count=2 --delay=3600"

/etc/postfix/main.cfを修正し、テーブル定義ファイルを追加。


これらは、とりあえずtaRgreyのサイトで設定ファイル例として配布されているものをほぼそのまま使用した。

書き換えたのはreject_heloの最初の自分のドメインの設定くらいか。
そして、正規表現以外のものはhashテーブルを作成して、postfixを再起動。

# vi /etc/postfix/main.cf
# vi /etc/postfix/whitelist_recipient
# postmap /etc/postfix/whitelist_recipient
...
# postfix reload

とりあえず、運用は2日弱だが、Spamの数は激減した。

あとは今後来るスパムを監視して、適度にブラックリストを追加していくくらいで済むとよいのだが。

postgreyのDBには以下のように登録される。


# ls -l /var/spool/postfix/postgrey/

  • postgrey.db 再送待ち
  • postgrey_clients.db オートホワイトリスト
  • tarpit_clients.db tarpitを抜けなかったリスト

参考:

インストール: postgrey

  • Posted by: YAMAGISHI Norimasa
  • 2009年2月10日 19:01
  • System | tower

大量のSpamを減らすためにpostgreyを使うことにした。
postgreyは、送信されてきたメールを一旦拒否し(greyとし)、再送があった場合のみ受け取るというspam対策greylistingの実装のひとつ。

postfix自体も、greylist.plというgreylistingを持っているが、postgreyのほうが高機能なためpostgreyを使う。

公式サイト: Postgrey - Postfix Greylisting Policy Server
日本語サイト: Postgrey(Postfix Greylisting Policy Server)日本語ポータル

基本的な動作は、CLIENT_IP、SENDER、RECIPIENTの3つを監視記録し、5分以上前に送信された記録があれば再送と判断し、受け取る。
5分以内の送信記録があれば、再度拒否する。
35日で記録はexpireされる。

CentOS5では、yumでdagからインストールできる。

# yum install postgrey

そして、postgreyの接続ポートを指定する。
# vi /etc/init.d/postgrey

OPTIONS="--unix=$SOCKET --inet=10023"

また、postfixがpostgreyを使うように変更する。

# vi /etc/postfix/main.cf

smtpd_recipient_restrictions = permit_mynetworks, ..., check_policy_service inet:127.0.0.1:10023    

postgreyを起動する。
# /etc/inet.d/postgrey start

修正したmail.cfをpostfixに読み込ませる。
# postfix reload

とりあえず、しばらくログを監視してみる。
# tail -f /var/log/maillog

とりあえず、記録されていないものはrejectされる。

Feb 10 17:01:35 tower postfix/smtpd[19810]: connect from magdeliv01.itmedia.co.jp[202.218.219.97]
Feb 10 17:01:35 tower postgrey[19744]: action=greylist, reason=new, client_name=magdeliv01.itmedia.co.jp, client_address=202.218.219.97, sender=magowner-mailmag-mobileex@itmedia.co.jp, recipient=xxx@rally.or.jp
Feb 10 17:01:35 tower postfix/smtpd[19810]: NOQUEUE: reject: RCPT from magdeliv01.itmedia.co.jp[202.218.219.97]: 450 4.2.0 <xxx@rally.or.jp>: Recipient address rejected: Greylisted, see http://postgrey.schweikert.ch/help/rally.or.jp.html; from=<magowner-mailmag-mobileex@itmedia.co.jp> to=<xxx@rally.or.jp> proto=SMTP helo=<magdeliv01.itmedia.co.jp>
Feb 10 17:01:35 tower postfix/smtpd[19810]: disconnect from magdeliv01.itmedia.co.jp[202.218.219.97]

そして、一度送信されて拒否したものは、記録によりpassされる。

Feb 10 17:39:09 tower postfix/smtpd[20160]: connect from magdeliv01.itmedia.co.jp[202.218.219.97]
Feb 10 17:39:09 tower postgrey[19744]: action=pass, reason=triplet found, delay=2254, client_name=magdeliv01.itmedia.co.jp, client_address=202.218.219.97, sender=magowner-mailmag-mobileex@itmedia.co.jp, recipient=xxx@rally.or.jp
Feb 10 17:39:09 tower postfix/smtpd[20160]: 4323D19802D: client=magdeliv01.itmedia.co.jp[202.218.219.97]
Feb 10 17:39:09 tower postfix/cleanup[20164]: 4323D19802D: message-id=<20090210073335.9273.qmail@magdeliv01.itmedia.co.jp>
Feb 10 17:39:09 tower postfix/qmgr[19807]: 4323D19802D: from=<magowner-mailmag-mobileex@itmedia.co.jp>, size=13083, nrcpt=1 (queue active)
Feb 10 17:39:09 tower postfix/smtpd[20160]: disconnect from magdeliv01.itmedia.co.jp[202.218.219.97]
Feb 10 17:39:09 tower postfix/local[20165]: 4323D19802D: to=<xxx@rally.or.jp>, relay=local, delay=0.38, delays=0.16/0.03/0/0.19, dsn=2.0.0, status=sent (delivered to maildir)

正しく動作しているようなら、
postgreyを常時起動するように、変更。

#chkconfig postgrey on

また、postgreyのdbの中ものぞいてみる。
dbファイルへの登録はある程度(1時間程度?)遅延がある。

BerkeleyDB Version4を使っているので、db4-utilsもインストール。

# yum install db4-utils

# db_dump -p /var/spool/postfix/postgrey/postgrey.db

83.10.241.0/limbekcs@aegon.hu/webmaster@rally.or.jp
1234254582,1234254582,5

ただし、greylistingでは、最初はすべてのメールに対して再送要求を行なうため、メール配信の遅延が生じる。

そのための対策はあとで。

インストール: Rhythmbox

今までmpg123を使っていたが、GUIのプレイヤーを試したくなったのでCentOSのデフォルトであるRhythmboxを使ってみることにする。

# yum install rhythmbox

デフォルトではMpeg系のデコーダは入っていないので、さらにgstreamer-plugins-uglyをインストール。

# yum install gstreamer-plugins-ugly

GUIはこんな感じ。

09020201.png

メニューから[編集]-[設定]を選んで[ライブラリの場所]に音声データのある場所を指定、[ライブラリを監視する]にチェックする。

ついでに、Windowsマシンからssh経由で簡単に起動できるように、.bash_profileに以下を追加した。

alias rhythmbbox='ssh tower rhythmbbox'

ただ、gstreamer-plugins-uglyをインストールすると依存関係によってlibdvdreadがインストールされるが、これは0.9.7 1.el5.rfという古いバージョン。
現在はlibdvdreadは4.1.3 1.el5までバージョンがあがっているので、yum updateによってlibdvdread、libmpeg2-utilsののアップデートが要求される。
しかし、gstreamer-plugins-uglyがlibdvdread 0.9.7 1.el5.rfに依存しているのでlibdvdreadはアップデートできない。

そこで、libdvdreadをアップデート対象から外す。

# vi /etc/yum.conf
[main]
exclude= libdvdread*

(libmpeg2-utilsもgstreamer-plugins-uglyが依存しているが、こちらはアップデート可能)

CentOS5で音を鳴らす

  • Posted by: YAMAGISHI Norimasa
  • 2009年1月18日 02:08
  • System | tower

サーバマシンなので音は不要だと思っていたが、
CPUパワーもあまっているし、なにより設置位置的にも最適なので、家の中のBGMマシンとして使うことを思い立った。

ということで、

mpg123をインストール。

$ sudo yum install mpg123

が、エラーが...

audio open error
Unknown PCM default

サウンドデバイスが見当たらない、という。

が、Xによるサウンドの設定を行うと、テストで普通に音はなる。
そう一般ユーザーではdspに書き込めなかったのだ。

# chmod 666 /dev/dsp

これで、OK。

音量調整はrootになってalsamixierで行う。

後日談:
再起動するとこのchmodは無効になる。
そのため、

$ sudo groupadd audio
$ sudo usermod -G audio nor
$ sudo vi /etc/security/console.perms.d/50-default.perms

-<console>  0600 <sound>      0600 root
+<console>  0660 <sound>      0600 root.audio

インストール: POPfile 1.1.0

さて、しばらくバージョンアップも放置してあったPOPFileだが、1.1.0になって、不正なSubjectヘッダによる振り分け不良の問題の解決が期待できそうなので、バージョンアップを試みることにする。

POPFile now handles quoted-printable encoded text in multiple lines correctly.

If a message without a SUBJECT line is received POPFile no longer inserts an
empty SUBJECT line.

Fixed the bug that sometimes resulted in POPFile concatenating headers into a
single line instead of appending them.

また、popofile.cfgの保存されない問題も、うまくすれば解決されているかもしれない。


The configuration file (popfile.cfg) is saved more safely.

ただし、POPFileをIMAPかつユーザ権限で動かすようにしているので、そのままインストールではうまくいかないかもしれない。

とりあえず、1.1.0をダウンロード。

そして、動作しているPOPFileを停止して、POPFileディレクトリのバックアップを取る。
対象となるディレクトリは、

  • /usr/share/popfile/
  • ~/.popfile(本来であれば/var/lib/popfile)

必要なPerlモジュールが増えていないことを確認して、(バージョン番号までのチェックは無し)、必要なファイルをコピーする。
ただし、ダウンロードしたCross-platform Version、改行コードがCRLFになっているので、WinSCPを使って、テキストモードでコピーし、トップディレクトリのgif、pngファイルだけ、バイナリコピーで上書きする。
なお、いちいち手作業でコピーするのは、間違いのもとなので、以下のスクリプトを書き、一気に行った。

#!/bin/sh

USP=/usr/share/popfile/

cp *.gif *.pl *.png *.ico ${USP}
cp stopwords ${USP}
cp license ${USP}
cp v*.change* ${USP}
# chmod +x ${USP}*.pl
cp -Rf Classifier ${USP}
cp -Rf POPFile ${USP}
cp -Rf Proxy ${USP}
cp -Rf UI ${USP}
cp -Rf languages ${USP}
cp -Rf skins ${USP}
cp -Rf Services ${USP}

以上の作業で、とりあえず、1.1.0の起動を確認。

そして、SQLiteのバージョンを3に上げる、
で動作している、cfgファイルの保存が確実になっているはず、など細かい調整は徐々に行うことにする。

次に、cfgファイルの保存が確実になっていることを期待しての、POPFile起動スクリプトの修正。
下記のバックアップされているcfgファイルの復元部分を削って、テストしてみたところ、正常に保存される(内容を変更して更新した時に保存される)ようなので、修正されたスクリプトで運用することにする。

#	cp popfile.cfg.bak popfile.cfg

次は、SQLite 3(DBD::SQLite 1.x)を使用するテスト。
yumで調べると、SQLite 1.0以降をインストール可能なのでインストール。

# yum install perl-DBD-SQLite

ドキュメントによれば、SQLite 1.0以降がインストールされていれば、POPFileは起動時に自動的に、SQLiteのデータベースを2から3用に変換してくれるとのこと。

ためしに再起動してみる。
変換した場合、データフォルダ内に「popfile.db-sqlite2」という名前でデータベースのバックアップを取るということなので、それが作成されるのを確認した。
また、cfgファイルの内容も、bayes_dbconnectの値がdbi:SQLite:dbname=$dbnameになっている。

このときデータベースが大きな場合は、変換に数十分かかる場合もあるということなので気長に待つこと。

ついでに、~/.popfile内の不要に見える、古いファイルを削除した。

このバージョンアップの結果、今まではとなっていたメールの分類が今までおかしかったのが、正常に分類されるようになった。

ついでに、いままで、POPFileのWebUIのポートがiptablesでブロックされていたのを修正。
別のコンピュータからでも操作できるようにした。

sambaの共有ディレクトリに書き込めない

sambaの共有ディレクトリを使ってみようとしたら、書き込みができない。

/var/sambaのパーミッションがrootの755になっていた...
所有者をnobodyにして、samba.confもguest account = nobodyを追加した。

ローカルのMovableTypeを自分のアカウントに

いままで、テスト用のローカルのMovableTypeは、テスト用のアカウントで運用していたが、面倒になってきたので、自分のアカウントで動作させることにする。

まずMySQLを同じアカウントで使うため、テスト用のアカウントを消去。
もちろん、同じアカウントである必要もないけれど、わざわざ別のアカウントを作る必要も無し。

以前ダウンロードしたMT-4_1-ja.zipが消えてしまっていたので、再度ダウンロード。
個人ライセンスの場合、ECバイヤーズの面倒な認証手続きが必要なくなっているのが楽で良い。

以下のディレクトリを作成、必要なファイルをコピー。
publib_html/mt 777
publib_html/cgi-binq/mt 755

そして、インストール。

mt-config.cgiはapacheのアカウントで作成されてしまうので、chownして、パーミッションも変更する。
さらに、復元用のファイルをアップロードできるように、mt-config.cgiに"CGIMaxUpload 100000000"を追加。

リモートのバックアップを復元。

そして、Mt.Vicunaをインストール。
このとき選ぶのは、あくまでも「テンプレートセット「mtVicuna 2.1.2の初期化」」。ここで「新しいテンプレートセットを適用」を選ぶと、自分のカスタマイズ内容まで初期化されてしまい、サイドバーの内容なども初期化されてしまう。

と、思ったのだが、どちらを選んでもテンプレートは初期化されてしまう。しかたないので、すべてバックアップから書き戻す。

その後に、再構築。

「ヘッダー」テンプレートのXML宣言も初期化されており、これもPHPを使用するように修正しないとサイトが表示されないので注意。

EmacsでUTF-8を

EmacsでUTF-8の文書を編集するために、Mule-UCSをインストール。

まずは、簡単なMeadow。
NetinstallのSetup-jp.exeでインストール。

つぎは、Linux上のEmacs。
http://www.meadowy.org/~shirai/elips/mule-ucs.tar.gz
を使う。

% tar zxvf mule-ucs.tar.gz
% cd mule-ucs-20061127-1
% emacs -q --no-site-file -batch -l mucs-comp.el
% ( cd lisp/jisx0213; emacs -q --no-site-file -batch -l x0213-comp.el )
% ( cd lisp/big5conv; emacs -q --no-site-file -batch -l big5-comp.el )
% sudo rm -rf /usr/share/emacs/site-lisp/Mule-UCS
% sudo cp -Lr lisp /usr/share/emacs/site-lisp/Mule-UCS

そして、それぞれの.emacsに以下を追加。

(require 'un-define)
(require 'jisx0213)

Docomo宛てメールのエラー

Mailman+PostfixでDocomo宛てのメールに一件でもエラーが発生した場合、Docomo宛てのメールはすべてエラーとなり、その上Mailmanの配送停止にまで影響してしまう。

これは、Docomoの大量SPAMメール対策だと思われるが、困ることこの上ない。
そこで、Postfixで同一ドメインへの配送においても、SMTPコネクション1あたりの宛て先を1に制限するようにした。

main.cfに以下を追加後

smtp_destination_recipient_limit = 1

そして、Postfixを再起動。

service postfix restart

mailmanをメールマガジンのように使うために

「一般オプション」の「メールの送信者を隠して, リストのアドレスに置きかえる」を「オン」にする。

「会員管理」-[会員リスト] -「会員関連のその他の操作」-「全員の制限(モデレーション)フラグをセットする. (隠れ会員を含む)」を「オン」にする。

「プライバシー・オプション... 」の[送信者フィルター]、「会員フィルタ」で「新しく登録する会員のデフォルトを制限付き会員にしますか? 」を「はい」、「制限付き会員から投稿があったときの動作」を「破棄」にする。

「会員名簿の公開」で「会員名簿を閲覧できる人は?」を「リスト管理者のみ」にする。

mailman: mm_cfgの変更の適用

いまさら、気がついたのだが、mailmanのWeb管理画面で内部ドメイン名が使われていた。
これは、mm_cfg.pyでベースとなるドメイン名を指定するのだが、その前にメーリングリストを作成してしまっていたため。

mm_cfg.pyを修正しても、すでに存在するメーリングリストの管理画面には、その修正は反映されない。

修正を適用するには、一つ一つメーリングリストに対して以下のようなコマンドを発行する。

# bin/withlist -l -r fix_url rbac

POPFileをIMAPで動作させたときの負荷

POPFileをIMAPで動作させている場合、振り分け対象のフォルダにメールが大量に貯まっていると、負荷が大きくなる。
そのため、振り分け対象のフォルダ内のメール件数はできるだけ少なめに常に整理するようにしたほうがよい。

これはPOPFileのIMAPモードが、該当フォルダをスキャンして、振り分けの再設定を行うため。

これに気づかずに、POPFileの負荷を非常に高くしてしまい、ほとんど動かなくしてハマッタ。

POPFileで、たまにマグネットをすり抜けるメールがある

どうも、おかしいと思っていたら、POPFileでマグネットを設定していても、すり抜けるメールがあるようだ。

以下は、その例。
マグネットにFrom=atmarkit.co.jpを使用していて、ほとんどキャッチできているのだけれど、

08032702.png

たまに、マグネットをすり抜けているメールがある。

08032701.png

上のスクリーンショットは、すでに分類しなおしたものだけれど。

マグネットなんて、動作は単純そうなのでバグが出そうにもないんだけれどな。
あまりにも頻発するようなら、対策というか、原因追求をしてみよう。

POPFileのpipe.plに問題が...

POPFileのユーティリティpipe.plの調子が悪い。
pipe.plはPOPFileのデータベースを外部から使って、POPFileへッダをつけるスクリプトで、その動作自体はきちんとする。しかし、configファイルに余計な書き込みをしてしまう。
具体的には、動作した瞬間に、設定しているIMAPの設定をすべて削除し、しかもconfig_piddirの値をおかしなものにして、configファイルを保存してしまう。
実際に動作しているpopfile自体の内部の値には影響をおよぼさないが、POPFileを再起動した場合、保存したconfigファイルの値を読もうとして、おかしくなってしまう。

pipe.plの中を見てみると、確かにその様な事象を起こしそうなコードがあり、ご丁寧に"TODO:..."とコメントが付いてる。

直そうかとも思ったが、すぐ直るものなら残っているはずはないし、時間もないのでアドホックな対応として、再起動のたびにconfigファイルを、バックアップから上書きするようにした。

設定を変えた場合は、一度WebGUIからPOPFileを終了させて、configファイルに設定を反映させる。そして、それを書き直し用のバックアップにコピーする。

そうそう設定は変えるものでもないので、暫定対応としてはこれでいいだろう。

logwatchの整理

  • Posted by: YAMAGISHI Norimasa
  • 2008年3月 6日 23:08
  • System | tower

logwatchをとめる気はないが、今のままだと量が多すぎてみる気が無くなる。
ということで、吐くメールの量を整理することにした。

logwatchの設定ファイルは/usr/share/logwatch/default.conf/serviceの下にある。
この下の各サービスに無視する行を大量に設定。

sshd.conf

*Remove = error retrieving information about user

postfix.conf

*Remove = delivered to command:  /
*Remove = (delivered to maildir)
*Remove = (250 Requested mail action okay, completed)
*Remove = Queued mail for delivery
*Remove = Message accepted for deliver
*Remove = message queued for delivery
*Remove = 250 Ok:
*Remove = 250 +Ok
*Remove = 250 \+OK
*Remove = 250 2.0.0
*Remove = 250 2.5.0
*Remove = 250 Message received:
*Remove = NOQUEUE: reject: RCPT
*Remove = reject: RCPT from unknown

なんで、logwatchを整理する気になったかというと、f-aca.jpとかいう日本国内から、ウチのSSHをrootでひっぱたいている跡があったからだ。
webを見ると、フリーダイヤルのお問い合わせ窓口があるので、電話かけてやろうかしら(笑)。

rsyncでバックアップ

towerの必要なデータをrsyncでミラーリングして、それをtar+gzipでまとめてPDやDVD-RAMにバックアップするという方針。

NFSでディスクをマウントすることも考えたが、UIDなどの問題もあるので、安易なSSHによるrsyncにした。
あと、tarよりはdumpを使う方が望ましいのはわかっているが、諸般の事情によりtar。

towerでsshの鍵を作って、公開鍵をミラーリングを置くposeidonに渡す。

そして非常に気分がよくないが、poseidonの/etc/sshd_configでPermitRootLoginをyesにしてやる。

あとは、バックアップ用スクリプトの作成。
まずはrsyncを行う、tower側で走らせるスクリプト。
複数回rsyncを動かすので、ssh-agentを使って認証を1回ですむようにして動かす。

#!/bin/sh
RSYNC=/usr/bin/rsync
SSH=/usr/bin/ssh

BACKUP_HOST=poseidon
MIRROR_DIR=/root/mirror

eval `ssh-agent`
ssh-add
${RSYNC} -av --delete /etc ${BACKUP_HOST}:${MIRROR_DIR}/etc
${RSYNC} -av --delete /var/lib/mailman ${BACKUP_HOST}:${MIRROR_DIR}/mailman
${RSYNC} -av --delete /var/lib/mysql ${BACKUP_HOST}:${MIRROR_DIR}/mysql
${RSYNC} -av --delete /var/named/chroot/etc ${BACKUP_HOST}:${MIRROR_DIR}/named
${RSYNC} -av --delete /var/named/chroot/var ${BACKUP_HOST}:${MIRROR_DIR}/named
${RSYNC} -av --delete /var/www ${BACKUP_HOST}:${MIRROR_DIR}/www
${RSYNC} -av --delete /home ${BACKUP_HOST}:${MIRROR_DIR}/home
${RSYNC} -av --delete /home ${BACKUP_HOST}:${MIRROR_DIR}/home

homeを2回やっているのは、一回リストを取って転送している間に、新しいファイルが増えている可能性を考えて(というより、ほぼ新しいメールは届いている)。

そして、poseidonでは、これをまとめてディスクに記録できる大きさに分割するスクリプトを用意する。
とりあえず、PDを使うのでファイルは600Mに分割。まあ、外部メディアに記録できなくても最新のバックアップがposeidonのHDDにあると思うだけでも、気が楽だ。

#!/bin/sh
TAR=/bin/tar
SPLIT=/usr/bin/split
STORE_DIR=/mnt/fat32
MIRROR_DIR=/root/mirror

mktargzs ()
{
        echo "Backup $1"
        cd ${MIRROR_DIR}
        ${TAR} zcf - ./$1 | ${SPLIT} --byte=600m - ${STORE_DIR}/$1.tar.gz.
}


mktargz ()
{
        echo "Backup $1"
        cd ${MIRROR_DIR}
        ${TAR} zcf ${STORE_DIR}/$1.tar.gz ./$1
}

mktargzs home
mktargz etc
mktargz www
mktargz mailman
mktargz mysql
mktargz named

IMAPでPOPFileを使う

Wanderlustでpopしようとすると、以下のエラーが出るようになった。

entered--Lisp error: (elmo-open-error elmo-pop-auth-user)

追求しようかと思ったが、いい機会なので、POPFileのIMAPサポートを試してみることにする。

POPFileのIMAP自体はプロキシではなく、IMAPフォルダを監視し自動振り分けを行う。まあ動作結果はProcmailに近いもの。

ただ、popとの違いとして、X-POPFile-Link、X-Text-Classificationなどのへッダがつけられない。IMAPモジュールがサーバーをチェックしたり、メッセージを分類したり、再分類やその他でビジーな間は、POPFile UI にアクセスできない、という制限がある。

以下のページを参考に行ったら、ほぼすんなりとIMAPに対応できた。

IMAP.pm の入手と起動方法 [POPFile Documentation Project]

監視フォルダの既存のファイルについては振り分けはしないで、新着メールのみをきちんと振り分けてくれる。したがって、分類しなかったメールをinboxに残しておいたとしても、POPFileに負荷がかかることはなさそうだ。

これはかなり便利だ。もうPOPを使う必要はないかな。

Wanderlustのincで、いったんpopフォルダからinboxに取ってきて、POPFileのへッダで分類するという、面倒で時間のかかるEmacs Lispを排除できる。

おまけにこれで念願のメールチェッカが導入できそうだ。

Egg+Wnnで候補一覧を出す方法

  • Posted by: YAMAGISHI Norimasa
  • 2008年3月 4日 21:44
  • Emacs | tower

Meta-sで変換候補一覧が出ないので、調べてみた。
昔は、関数がhenkan-select-kouho-daiとかだったんだけど、今のEggでは違うようだ。

Eggのelispを一通り眺めてみると、Meta-sにはegg-select-candidate-majorが割り当てられている。これが、それらしいのだが、どうも正常に機能しないようだ。
たぶん、僕のやり方が悪いのだと思うが。

Webで調べてみたが、ある程度変換候補を表示すると一覧を表示する方法が見つかったのみ。

とりあえず、それでも用は足りるので、それでお茶を濁すことにする。

Wnn7なら専用の関数があるようなのだが。

;; 変換時に下部に候補を表示(数字で何回後に候補表示するかが決まる).
(setq egg-conversion-auto-candidate-menu 4)
;; 候補表示時,数字あるいはアルファベットを入力した時点で確定にする.
(setq menudiag-select-without-return t)
;; 候補の最後まで行ったら先頭に戻る
(setq egg-conversion-wrap-select t)

外向けサーバマシンの変更

前準備

まず、ユーザを作成する。
UIDを指定してユーザディレクトリを作成。

# useradd -m -u 1002 foo

/etc/shadowのパスワード部分をコピーで完了。

移行作業

旧マシンでipchainsを使って、LAN内部向けのssh以外のすべてのポートを閉じる。

ホームディレクトリの移動。

まず、ユーザのホームディレクトリをコピーする。
# tar zcvf - ./home | ( ssh nor@192.168.1.6 "cat - > home.tar.gz")

ユーザは以下の3通り。

普通に使うユーザ。
メール転送のみするユーザ。 すでにあるホームディレクトリに、i-forwardをしかけるために、.forwardと.i-forwardrcをセットした。 ".forward"は単純にすべてのメールをi-forwardに渡すのみ。
"| /usr/local/bin/i-forward"
メールのみ使うユーザ。
.forwardをMaildirに配送するように記述。
/home/foo/Maildir/
さらに、メール転送を行うユーザはi-forwardにも送るように付け加える。 "/usr/local/bin/i-forward" そして、ホームディレクトリのバックアップからMaildirのみを書き戻す。
普通に使うユーザ。
普通にホームディレクトリをtarでコピー。.forwardを設定。 ただし、ユーザ用のhtmlディレクトリが"html"から"public_html"に変更になったので、これだけ気をつけて作業する。

ルータにより、DMZを新規登録

DMZのマシンをstarletからtowerに変更。

Postfixの設定ファイル変更

Postfixの設定ファイルmain.cfでホスト名を変更する。

myhostname = mail.rally.or.jp

BINDの設定を変える

外向きのものは、そのままでかまわないが、内向きのmail, wwwのCNAMEの対象をstarletからtowerに変更。

直後

接続テスト

まず、BINDにアクセスできるか。
Zaurusで携帯経由でテストした。
dig @ns.rally.or.jp rally.or.jp mx
など。

メールを外から送れるか、受け取れるか。
まず、外から、直接SMTP、POP、IMAPサーバへ接続できるか。
これも、Zaurusでテストした。
配送テストは、送信受信テストともにWebメールで行った。

受取りは、IMAPは外部にはサポートしない予定なので、POP3(110)のみ。
OB25、つまりポートは25と587の二つを試さなければならない。

webは、携帯から見れるかだけをチェックした。

インストール: Mailman 2.19

いままではメーリングリストをezmlmで運用していたが、これはqmail用のもの。

今回はデファクトになりつつある、Mailmanを使用しよう。

# yum install mailman

まず、Mailman管理用のパスワードの設定。
# /usr/lib/mailman/bin/mmsitepass

# vi /etc/mailman/mm_cfg.py

DEFAULT_URL_HOST   = 'www.rally.or.jp' <- 管理画面用Webを提供するホスト
DEFAULT_EMAIL_HOST = 'rally.or.jp' <- メーリングリストを提供するホスト
MTA = 'Postfix' <- 使用するMTAを指定
DEFAULT_SERVER_LANGUAGE = 'ja' <- 管理画面の言語
DEFAULT_GENERIC_NONMEMBER_ACTION = 2 <- メーリングリストは登録メンバー以外使えない
DEFAULT_LIST_ADVERTISED = No <- メーリングリスト一覧は非公開
DEFAULT_SUBJECT_PREFIX = "[%(real_name)s: %%d] " <- 件名のフォーマット(記事番号を付加)
DEFAULT_REPLY_GOES_TO_LIST = 1 # Reply-Toを書き換える(メーリングリストにする)
DEFAULT_URL_PATTER = 'http://%s:80/mailman/' # 2011年4月3日追加

Postfixが参照するaliasファイルを作成する。
# /usr/lib/mailman/bin/genaliases

Postfixからもaliasを参照できるようにアクセス権限を変更する。
# chmod g+w /etc/mailman/aliases.db

Postfixの設定ファイル/etc/postfix/main.cfのalias_mapに、Mailmanのaliasを追加する。
# vi /etc/postfix/main.cf

alias_maps = hash:/etc/aliases, hash:/etc/mailman/aliases

Postfixを再起動する。
# service postfix restart

Mailman管理用のメーリングリストを作成する。
メッセージが化けることがあるが、まず管理者アドレスを入力、そして先ほど登録したパスワードを入力。最後にEnterを入力する。

[root@tower ~]# /usr/lib/mailman/bin/newlist mailman
... : nor@rally.or.jp
mailman ...:
Enter mailman...

自動起動を設定して、Mailmanを起動する。

# chkconfig mailman on
# service mailman start

さて、ここでtower.rally.or.jpにアクセスすると管理画面に行けるはずなのだが、だめだ。(2011/01/23以下に修正)

さて、あとは、httpdをリスタートすれば、/etc/httpd/conf.d/mailmanが有効になって、web管理画面に行けるはずなのだが、だめだ。

URLから、調べてみると、管理画面はCGI。
しかし、ApacheがsuEXECで動作しているため、このCGIは実行できない。

さて、MailmanのFAQのページによると対処方法はふたつあるようだ。

ひとつは、ApacheでsuEXECを無効にすること。
もうひとつは、ApacheのVartualHost機能を使い、そちらのホストに飛ばす形でCGIを動かすと言う方法。

# vi /etc/httpd/conf/httpd.conf

##
## Mailman Virtual host
##
Listen 3000
<VirtualHost _default_:3000>
   <IfModule mod_suexec.c>
    SuexecUserGroup mailman mailman
   </IfModule>
    Servername tower.rally.or.jp:3000
    ServerAdmin nor@rally.or.jp
    DocumentRoot /usr/lib/mailman
    ErrorLog /var/log/httpd/mailman-error_log
    TransferLog /var/log/httpd/mailman-access_log
    ScriptAlias /mailman/ "/usr/lib/mailman/cgi-bin/"
    Alias /pipermail/ "/usr/lib/mailman/archives/public/"
    Alias /icons/ "/usr/lib/mailman/icons/"

    <Directory "/usr/lib/mailman/cgi-bin/">
        AllowOverride All
        Options ExecCGI
        Order allow,deny
        Allow from all
    </Directory>

    <Directory "/usr/lib/mailman/archive/public/">
        AllowOverride None
        Options All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

# vi /etc/mailman/mm_cfg.py

add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)
DEFAULT_URL_PATTERN = 'http://%s:3000/mailman/'

しかし、mailmanがUID=41でインストールされている。
ApacheはsuEXECできるのは、デフォルトではUIDが100以上。
だめだ。

上の細工をして、mailmanのUIDを変えるか、それともApacheを再コンパイルするか。

結局suEXECを無効にするという選択をする。
# mv /usr/sbin/suexec /usr/sbin/suexec.bak

これで、インストール完了。
あとはWebインタフェースにアクセスして、メーリングリストをつくっていくだけ。

bbdbの使用をあきらめた

  • Posted by: YAMAGISHI Norimasa
  • 2008年2月27日 18:34
  • Emacs | tower

いくつかのバージョンのbbdbを試してみたが、どうもエンコードされた文字列をうまく扱えないようだ。
以前はかなり便利に使えていて良かったんだけど...

lsdbの使用も考えたけれど、まあ標準のアドレス帳で妥協をすることにする。

インストール: Squid 2.6.STABLE6-5

回線が高速になった今日、それほどProxyサーバは重要ではないのかもしれない。ということで、インストールはしないでおいたが、やはり限りある資源は大切に使いたいし、アクセスの高速化が期待できるのは間違いない。

ということで、Squidをインストールしよう。

# yum install squid

プロキシ経由のアクセスを許可しないページがあるので、プロキシであることは隠すようにする。

# vi /etc/squid/squid.conf

http_port 8080
cache_dir ufs /var/spool/squid 2048 16 256 <- キャッシュの大きさなどの設定
ftp_user webmaster@rally.or.jp <-anonymous ftpユーザの設定
acl our_networks src 192.168.1.0/24 <-コメントアウトして、LANのアドレスを指定
http_access allow our_networks <-コメントアウト
follow_x-forwarded-for deny all <- Forwarded-forを追加しない
via off <- Viaへッダを付加しない
header_access Cache-Control deny all <- Cache-Controlへッダを追加しない
error_directory /usr/share/squid/errors/Japanese <- エラーページを日本語に
forwarded_for off <- Forwarded-for

起動して動作確認して、自動起動の設定。
# /etc/rc.d/init.d/squid start
# chkconfig squid on


iptablesで8080をLANに解放するのもわすれない。

ApacheのSSL対応

暗号化通信を行う必要が出てきたので、ApacheでSSLを使えるようにする。
CentOSのApacheはmod_sslモジュールを追加するだけで、SSLが使える。

まず、mod_sslモジュールを追加する。

# yum install mod_ssl

SSL用のコンテンツは別途用意することにして、ドキュメントルートも変えるので、/etc/httpd/conf.d/ssl.confを修正。

DocumentRoot "/var/www/sslhtml"
ServerName www.rally.or.jp:443

ftpを止める

LAN内部でいろいろ作業をするためにFTPを動かしていたが、実際FTPを使う場面というのはほとんどなかった。

外部むけサーバとしても、現在FTPを必要とする場面はほとんどない。
もし、必要になれば、そのときだけ公開すれば良い。

ということで、xinetdによるFTPサーバの起動を無効にして、FTPのポートも閉じることにする。

WanderlustのIMAPへの移行

IMAPサーバも順調に動いているようなので、WanderlustのローカルMHフォルダも徐々にIMAPに移行することにした。

ただ、IMAP自体には当然フォルダを圧縮する機能とかはないので、古くてメール検索時に必要なかったりするメールに付いては、そのまま、Wanderlustのアーカイブフォルダを使い続ける方針で行く。

いつの日かWanderlustを使わなくなったら、Thunderbirdのローカルフォルダ上に、アーカイブフォルダをつくってやれば良いだろう。

まあ、WanderlustからIMAPへメールを移すのは、結構手間がかかった。もっといい方法がありそうなのだが、個々のフォルダを開いて、メールをすべて選択し、新しいIMAPフォルダにコピーして、古いフォルダを削除という手順を踏んだからだ。

IMAPの仕様自体をよく理解していないので、「ほー」と思った店をここにメモしておく。もっとも、これはDovecotの仕様で、IMAPで定義されているものではないかもしれない。

IMAPのデータ自体は、サーバ上では"~/Maildir"に保存される。ただし、最初に"."付きのフォルダなので、通常のlsでは見ることができない。

Tunderbirdなどでフォルダが階層構造をもって作成されるフォルダは、サーバ上では"."区切りの別のフォルダになる。
ただし、Thunderbirdで[フォルダの位置をコピー]すると以下のようにコピーされるので、これはDovecotの仕様なのかもしれない。

imap://nor@tower.rally.or.jp/testf
imap://nor@tower.rally.or.jp/testf/subdir

Wanderlustでアクセスするときには、"/testf.subdir"のように"."区切りでアクセスする。
Wanderlustでは、IMAPフォルダを階層構造を持って利用することはできない。"."区切りのフォルダが、ベタに並んで見える。

よって、Thunderbirdから階層構造で見えるフォルダを作成したい場合、Wanderlustからは、上位のフォルダを作成する必要はなく、直接"foo.bar"という用に作成すれば良い。

ただしそのようにしてつくった場合、Thunderbirdでは"foo"フォルダはグレーで表示され、アクセスしようとした場合には"現在のコマンドは成功しませんでした。"というメッセージが表示される。

また、このようにしてWanderlust上で階層フォルダを作成した場合、たとえそれが疑似階層フォルダであっても、親フォルダを削除すると、子フォルダまで削除されてしまう。

IPAフォントとM+フォントのインストール

  • Posted by: YAMAGISHI Norimasa
  • 2008年2月23日 20:09
  • System | tower

以下のページを参考に、というよりも、そのままに作業を行った。

CentOS 5 インストール個人的ノート

IPAフォント バージョン 002.03は、以下のページからダウンロード。
一般利用者向けIPAフォントのダウンロード || OSS iPedia

IPAfont00203.zip

M+ TESTFLIGHT 014は、以下のページからダウンロード。
M+ FONTS

mplus-TESTFLIGHT-014.tar.gz

fontforgeのインストール。
$ sudo yum install fontforge

まず、IPAフォントとM+フォントをダウンロードして展開。

合成フォントを作成。
$ cd ~nor/work/font/mplus-TESTFLIGHT-014.tar/
$ cp ../IPAfont00203/ipag.ttf .
% fontforge -script m++ipa.pe

フォントをフォントディレクトリにコピーする。
# cp ~nor/work/font/IPAfont00203/*.ttf /usr/share/fonts/japanese/TrueType/
# cp M*IPAG.ttf /usr/share/fonts/japanese/TrueType

フォントキャッシュをクリアする。
# fc-cache -fv /usr/share/fonts/japanese/TrueType

フォント設定ファイルを作成する。

# vi /etc/fonts/local.conf

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
  <match target="font">
    <test name="family" compare="eq">
      <string>IPAPMincho</string>
    </test>
    <edit name="hinting" mode="assign">
      <bool>false</bool>
    </edit>
    <edit name="embeddedbitmap" mode="assign">
      <bool>false</bool>
    </edit>
  </match>
  <match target="font">
    <test name="family" compare="eq">
      <string>M+2P+IPAG</string>
    </test>
    <edit name="hinting" mode="assign">
      <bool>false</bool>
    </edit>
    <edit name="embeddedbitmap" mode="assign">
      <bool>false</bool>
    </edit>
  </match>
  <alias>
    <family>IPAPMincho</family>
    <default><family>serif</family></default>
  </alias>
  <alias>
    <family>serif</family>
    <prefer>
      <family>IPAPMincho</family>
    </prefer>
  </alias>
  <alias>
    <family>M+2P+IPAG</family>
    <default><family>sans-serif</family></default>
  </alias>
  <alias>
    <family>sans-serif</family>
    <prefer>
      <family>M+2P+IPAG</family>
    </prefer>
  </alias>
  <alias>
    <family>M+2M+IPAG</family>
    <default><family>monospace</family></default>
  </alias>
  <alias>
    <family>monospace</family>
    <prefer>
      <family>M+2M+IPAG</family>
    </prefer>
  </alias>
</fontconfig>

インストール: BIND 9.3.3

  • Posted by: YAMAGISHI Norimasa
  • 2008年2月22日 19:07
  • System | tower

さて、インストール大会の最後を飾るのはBIND。
DNSサーバが動けば、晴れてこのマシンは、外部向けサーバとして完全にリプレイスできるようになる。
もっとも、BINDもインストール自体はyumで一発。

設定ファイルも、実際はすでに動いているものをコピーすればほとんど変更なしで行けるだろう。

# yum install bind caching-nameserver bind-chroot

インストールしたのは、bind BIND本体の他に、キャッシュサーバとして動かすためのパッケージcaching-nameserver 、BINDをchrootして動かすためのパッケージbind-chroot。

まず、既存の設定ファイルをtowerにコピーする。

starler# tar cvf - | ssh nor@192.168.1.6 (cd ~work ; tar xf - )
starler# tar cvf - | ssh nor@rally.or.jp (cd ~work ; tar xf - )

rpm -q --filesbypkg bindでは、/etc/named.confが見えるのだが、実際にはインストールされていない。

設定ファイルのサンプルは/usr/share/doc/bind-9.3.3/sample/etcと/usr/share/doc/bind-9.3.3/sample/var/namedの下にある。

今までは、20世紀のBIND8の頃からの設定ファイルを流用していたが、ここで最新の設定ファイルを見て、1からつくり直すことにする。

named.confは、まあコメントなども参考にはなるが、モジュールファイル化を使いまくって書いてあるので、追っていくのがちょっと面倒だ。
さらに、named.confは/etcに置くのは普通だが、キャッシュサーバ用のnamed.root.hintsやnamed.rfc1912.zonesも/etcに置くようになっている。

この構成について解説しているページを探すと、非常に丁寧かつ技術的にもしっかりしたページが見つかった。

view 機能を使ったネームーサーバ

ここを参考にしながら、以下の作業を行った。

  • "localhost_resolver" view の削除
  • "internal" view にダミーの逆引きゾーンを追加
  • "internal" view に自分のドメインのゾーンを追加
  • "internal" view からサンプルのゾーン定義を削除
  • DDNS用のkey 節の削除
  • "external" view から match-clients と match-destinations 文を削除
  • "external" view のヒントゾーンを無効化
  • "external" view からサンプルのゾーン定義を削除
  • "external" view に独自ドメインのゾーンを追加
  • パスの修正

そこそこファイルはあるものの、実際にいじるのは一部。
いちいち書くのも面倒なので、基本的にはそのままでも動作するファイルは以下のもの。
まずは、ローカルホスト関連と、不要な問い合わせを吸収するためのもの。
named.rfc1912.zones(とそれに関連した以下のもの。)
localdomain.zone
localhost.zone
named.local
named.ip6.local
named.broadcast
named.zero
named.root.hints

これらは、自分のドメインの設定を書く。
my.external.zone.db
my.internal.zone.db

ルートキャッシュファイルは、当然最新のものを取ってくる。
# dig . ns @198.41.0.4 > /var/named/named.root

これらの設定ファイルを/var/named/chroot/etcと/var/named/chroot/var/namedにコピー。オーナーをroot:namedにして、モードを640にする。

あとは、動作を確認して、
# service named start

マシン起動時にBINDも起動するように。
# chkconfig named on

もちろん、ポートは開けておく。

# vi /etc/sysconfig/iptables

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT

# service iptables restart

ゾーンファイルのみを書き換えた場合は、Serial値を増やして「# rndc reload」。

POPFileをユーザ権限で動かす

POPFileをユーザ権限で動かすことにした。理由は、以下の3つだ。

もちろんセキュリティのため。
複数のユーザがいる場合にも、個々のユーザごとにPOPFileを使いたい。
POPFileがたまに落ちることがあるので、ユーザのcronで定時に再起動をかける。

ついでに、データやログをユーザのディレクトリに移すことにした。。
いままで、/var/lib/popfileにあったデータやログは、ホームディレクトリ直下の.popfileに置くことにする。

まず、動作しているPOPFileを停止する。
そしt、/var/lib/popfileのデータをすべて.popfileディレクトリにコピーし、ファイルのオーナーをユーザ自身にする。

# service popfile stop
# mv /var/lib/popfile ~nor/.popfile
# chown -R nor ~/nor/.popfile

そして、以下のコマンドを~/binディレクトリにpopfileという名で作成する。

#!/bin/sh
# popfile
# usage: popfile { start | stop | restart | }

POPFILE_USER=${HOME}/.popfile/
POPFILE_ROOT=/usr/share/popfile/
popfile="${POPFILE_ROOT}popfile.pl"
cwd=`/bin/pwd`
POPFILE_LOGDIR=${POPFILE_USER}log/
POPFILE_PID=${POPFILE_LOGDIR}popfile.pid
HTML_PORT=8081
PID=`/bin/cat ${POPFILE_PID} 2> /dev/null`

start() {
   echo -n "Starting POPFile as background process:"
   if [ "${PID}" = "" ] ; then
echo " "
       cd ${POPFILE_USER}
       export POPFILE_ROOT=${POPFILE_ROOT}
       export POPFILE_USER=${POPFILE_USER}


        ${popfile} --set config_piddir=${POPFILE_LOGDIR} --set logger_logdir=${POPFILE_LOGDIR} --set html_port=${HTML_PORT} &> ${POPFILE_LOGDIR}popfile.boot &
       echo " done"
   else
       echo " POPFile already running PID=${PID}"
   fi
} 

stop() { 

   echo -n "Stopping POPFile: "

   if [ "${PID}" = "" ] ; then
       echo "POPFile not running"
   else
       kill ${PID}
#       echo PID ${PID}
       if [ -e $POPFILE_PID ] ; then
          rm ${POPFILE_PID}
       fi
       PID=""
       echo " done"
   fi
} 

status() { 

   if [ "${PID}" = "" ] ; then
       echo "down"
   else
       echo "up"
   fi
} 

case "$1" in 
   start)
       start
       ;;
   stop)
       stop
       ;;
   restart)
       stop
       start
       ;;
   status)
       status
       ;;
   *)
       echo $"Usage: $0 {start|stop|restart|status}"
       exit 1
       ;;
esac 

cd $cwd
exit 0 

POPFileが起動したらWebインタフェースで一度[詳細設定]を開き、設定を保存する。

あとは、cronにpopfile restartが一時間後とに実行されるようにセットする。

自動起動が設定してあるなら、それを止めておく。
# chkconfig --level 345 popfile off

インストール: tamago CVS 080214

tamagoのインストール。

$ cvs -d :pserver:anonymous@cvs.m17n.org:/cvs/tamago login
$ cvs -d :pserver:anonymous@cvs.m17n.org:/cvs/tamago checkout tamago
$ cd tamago
$ ./configure
$ vi Makefile

prefix = /usr/local

prefix = /usr

$ make
$ su
$ make install

これで、あとは.emacsで設定すればWnn+Tamagoq+Eggで日本語が使える。

しかし、Egg ReMixなども使ってみたい気もするのだけれど、英語日本語間にスペースを入れるのだったら、結局日本語モードへの変換キーを押すか、英語を入力するときに"q"を押すのもたいして変わらない気もするので、今一つ踏み切れない。

インストール: Wnn6 Ver3.02

towerではAnthyを使おうと思ったが、変換効率の悪さに耐えかねて、結局Wnn6をインストールすることにした。
世間の評判を聞いていると、AnthyはCannnaよりは変換効率はいいようだが、Wnn6にはかなわないように思える。

もはや、lancerはほとんど起動しないので、jserverはtowerで動かすことにしてしまえばいいだろう。

しかし、Wnn4相当のFreeWnnでもCannaの方が優勢だったことを考えると、Wnnは6で劇的に効率が上がっているのだろうか。
さすがにWnn4がどのようなものだったかはもう記憶が定かではない。

と、前置きはこのくらいにして、インストール。

Wnn6 Ver.3.02用のアップデートモジュールをRPMでそのままインストールする。

tower# rpm -ivh dpkey-3.02-1.i386.rpm
tower# rpm -ivh wnn6-3.02-1.i386.rpm

mirage# service wnn6 stop
mirage# service dpkey stop

ユーザ辞書およびライセンスパスワードのバックアップを取る。
mirage# cd /usr/local/lib/wnn6/ja_JP/dic
mirage# tar cvf /tmp/usrdic.tar usr
mirage# cd /usr/local/lib/dp
mirage# cp dpkeylist /tmp

これらのバックアップをtowerに転送してリストア。

tower# cd /usr/local/lib/wnn6/ja_JP/dic
tower# tar xvf /tmp/usrdic.tar

tower# chmod usr/nor/* <- これを忘れるとせっかくコピーしたユーザ辞書が作り直されてしまう
tower# cd /usr/local/lib/dp
tower# cp /tmp/dpkeylist ./

郵便番号辞書、電話番号辞書、単漢字辞書を有効にするために、unuse_hinsiの行から郵便番号、電話番号、単漢字を削除する

# vi /usr/local/OMRONWnn6/wnn6linux/ja_JP/wnnenvrc

dpkeyservおよびjserverを起動。

# service dpkey start
# service wnn6 start

そして、他のマシンからも使えるようにWnnのポートを空けておく。

さて、次はいよいよEmacsからWnnを使うためにtamagoのインストールだ。

インストール:tripwire 2.4.1.2

  • Posted by: YAMAGISHI Norimasa
  • 2008年2月20日 19:01
  • System | tower

ファイル改竄探知ソフトtripwire。これもやはり商用製品としてもリリースされているが、オープンソースのものももちろん健在だ。

セキュリティ関連だということもあり、今回はソースからビルドすることにしよう。

ということで、SourceForge.net: Open Source TripwireRから、最新版のソースをダウンロードして、コンパイル。

tripwire-2.4.1.2-src.tar.bz2

まず、展開して./configure。

$ bzcat -d tripwire-2.4.1.2-src.tar.bz2 |tar xvf -
$ ./configure --prefix=/usr --sysconfdir=/etc/tripwire

install/install.cfgが初期設定ファイルになる。
デフォルトでは、データベースを"$prefix/lib"に収納し、sendmailを使うようになっているので修正。

TWDB="/var/lib/tripwire"

#TWMAILMETHOD=SENDMAIL

TWMAILMETHOD=SMTP
TWSMTPHOST="mail.rally.or.jp"
TWSMTPPORT=25

そして、make、make install。

$ make
$ sudo make insatall

ライセンスに同意することを求められる。

Press ENTER to view the License Agreement.
Please type "accept" to indicate your acceptance of this
license agreement. [do not accept] accept

Continue with installation? [y/n] y

サイトキーファイルパスフレーズの入力。

Enter the site keyfile passphrase:
Verify the site keyfile passphrase:

ローカルキーファイルパスフレーズの入力。

Enter the local keyfile passphrase:
Verify the local keyfile passphrase:

この後、サイトキーファイルパスフレーズを2回入力してインストール完了。

----------------------------------------------
Generating Tripwire configuration file...

----------------------------------------------
Creating signed configuration file...
Please enter your site passphrase:
Wrote configuration file: /usr/etc/tw.cfg

----------------------------------------------
Customizing default policy file...

----------------------------------------------
Creating signed policy file...
Please enter your site passphrase:
Wrote policy file: /usr/etc/tw.pol

作成される設定ファイルは、

/etc/tripwire/tw.cfg <- configurationファイル
/etc/tripwire/twcfg.txt <- configurationファイルのプレーンテキスト版
/etc/tripwire/tw.pol <- policyファイル
/etc/tripwire/twpol.txt <- policyファイルのプレーンテキスト版

まずtw.cfgで、ファイルに変更があった場合ディレクトリに関する警告を報告しないようにする。

LOOSEDIRECTORYCHECKING =false

まずデフォルトのpolicyファイルを編集。そして、暗号化する。
デフォルトのポリシーファイルはあくまでもサンプルなので、編集しないとエラーと不要な告知が多数出ることになる。

# cp /etc/tripwire/tw.pol /etc/tripwire/tw.pol.org
# vi /etc/tripwire/tw.pol
# twadmin --create-polfile -S /etc/tripwire/site.key /etc/tripwire/twpol.txt

データベースの初期化をする。

# tripwire --init

エラーが出たら再度policyファイルの見直しをして、そして整合性のチェック。

# tripwire --check

これで、tripwire自体は動作するようになった。

メールによる通知がされるように、それぞれのルールに以下を付け加えておく。

emailto = $(MAILADRESS)

そして、cronに登録。

# vi /etc/crontab

0 4 * * * root /usr/sbin/tripwire --check --email-report

ntpの導入

既にインストールされているので、設定ファイルのみ変更。

# vi /etc/ntp.conf

server ntp.nict.jp
server ntp1.jst.mfeed.ad.jp

まず、現在の時計をサーバと同期させる。

# ntpdate ntp.nict.jp

そしてサービスを起動して、さらに自動起動するように設定。

# service ntpd start
# chkconfig --level 345 ntpd on

LAN内部でも使えるように、iptablesでポート123/tcpを開放する。

yum-securityの導入

  • Posted by: YAMAGISHI Norimasa
  • 2008年2月18日 11:51
  • System | tower

yum-securityはyumにセキュリティアップデートのみの表示、インストール機能を追加するパッケージ。

# yum install yum-security

これで、yumに"--secrity"オプションを付けての実行が可能になる。

例:
yum --security check-update

インストール: Dovecot Released v1.1.beta2

いままではqmail-popperを使用していたが、qmailはやめるし、そろそろIMAP4も使いたい。
ということで、
IMAP4とPOP3両方に対応しているDovecotだ。

# yum -y install dovecot
# vi /etc/dovecot.conf

diff /etc/dovecot.conf /etc/dovecot.conf.org
17c17
< protocols = imap imaps pop3 pop3s <- IMAP4とPOP3の両方を使用する
---
> #protocols = imap imaps pop3 pop3s
198c198
< mail_location = maildir:~/Maildir <-Maildirを使用する
---
> #   mail_location = maildir:~/Maildir
331c331
< valid_chroot_dirs = /home <- chrootさせる
---
> #valid_chroot_dirs =


起動してテスト。

# service dovecot start

正常に動作したので、マシン起動時に動作するように設定。

# chkconfig dovecot on

iptablesでポートを空けておく。

# vi /etc/sysconfig/iptables

-A RH-Firewall-1-INPUT -p tcp --dport 110 -j ACCEPT <- pop3
-A RH-Firewall-1-INPUT -p tcp --dport 143 -j ACCEPT <- imap4
-A RH-Firewall-1-INPUT -p tcp --dport 995 -j ACCEPT <- pop3 over SSL
-A RH-Firewall-1-INPUT -p tcp --dport 993 -j ACCEPT < imaps-ssl

# service iptables restart

OP25B(Outbound Port25 Blocking)対応

インストールしたPostfixにOP25Bの対応をする。

submission portを開ける。

# vi /etc/postfix/master.cf

TLSのための鍵を作成していないので、TLSの強制はしない。

submission inet n       -       n       -       -       smtpd
#  -o smtpd_enforce_tls=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject

iptablesで外部からのポート587での接続を許可する。

# vi /etc/sysconfig/iptables

...
-A RH-Firewall-1-INPUT -p 587 -j ACCEPT
...

# service iptables restart

インストール: Postfix 2.3.3

いままでは、ずっとqmailを使ってきた。
qmail自体の信頼性はいまでも高いとは思うのだが、最終バージョンリリース後に現れた規格等に対応するために、現実に運用するには、数多くのパッチを当てる必要ががあり、非常に手間がかかる。
そして、Postfixは現在も開発が継続しており、安全性もqmailに劣らないと思われる。
そこで、今回からはPostfixを使用することにした。

# もっとも、qmailやtcpserverの理念自体は、非常によいものであるとは思うのだが...

CentOSのRPMはPostfixはPostgreSQLを使うようにコンパイルされているので、自分でコンパイルしなくてはならない。
実際にはバーチャルドメインを使うわけでなし、データベースはいらないはずなのだが、依存関係が存在するので、RPMでインストールしようとするとPostgressまでインストールしなくてはならない。

もっともSRPMのspecファイル内の1文字を置換するだけなので、不要なPostgreSQLは入れずに、SRPMからいれてみる。

まず、SRPMをとってくる。

wget http://ftp.riken.jp/Linux/centos/5/os/SRPMS/postfix-2.3.3-2.src.rpm
そして、ソースを展開。

# rpm -ivh postfix-2.3.3-2.src.rpm

specファイルの編集。

# vi /usr/src/redhat/SPECS/postfix.spec

%define MYSQL 1 <-MySQLを使うように指定

そして、RPMを作成しようとするが、以下のライブラリが必要だと言われるので,yumでインストール。

db4-devel
zlib-devel
openldap-devel >= 2.0.27
cyrus-sasl-devel >= 2.1.10
pcre-devel
mysql-devel
openssl-devel >= 0.9.6

# rpmbuild -ba postfix.spec
# rpm -ivh /usr/src/redhat/RPMS/i386/postfix-2.3.3-2.i386.rpm

無事インストールは完了。
そして設定ファイル/etc/postfix/main.cfを編集する。
変更内容は以下のとおり。

$ diff /etc/postfix/main.cf /etc/postfix/main.cf.org
71d70
< myhostname = tower.rally.or.jp <-ホスト名
79d77
< mydomain = rally.or.jp <-ドメイン名
95c93
< myorigin = $mydomain <-送信元ドメイン名(送信メールアドレスの@以降をドメイン名に)
---
> #myorigin = $mydomain
109c107
< inet_interfaces = all <- メールを受け取るネットワークインターフェイスのアドレス範囲
---
> #inet_interfaces = all
112c110
< #inet_interfaces = localhost
---
> inet_interfaces = localhost
157c155
< mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain <- 受け取るドメイン
---
> mydestination = $myhostname, localhost.$mydomain, localhost
261d257
< mynetworks = 192.168.1.0/24, 127.0.0.0/8 <- ローカルネットワークのアドレス範囲
291c287
< relay_domains = $mydestination <- リレーを許可するドメイン
---
> #relay_domains = $mydestination
414c410
< home_mailbox = Maildir/ <- メールボックスの形式指定
---
> #home_mailbox = Maildir/
672,677d667
< mailbox_size_limit = 10240000000 <- メールボックスのサイズ指定
< message_size_limit = 40960000 <- 一通のメールのサイズ指定
< smtpd_sasl_auth_enable = yes <- SASLによるSMTP認証の使用
< smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination <- リレーを許可するものを設定
< smtpd_sasl_local_domain = $mydomain <- ローカル認証

とりあえずroot用のMaildirを作成する。

# mkdir Maildir
# chmod 700 Maildir
# chown root:root Maildir

sendmailを停止し、PostfixとSASL認証を起動する。

# service sendmail stop
# service postfix start
# service saslauthd start

動作を確認後、自動起動と、sendmailの入れ替えを行う。

# chkconfig sendmail off
# chkconfig postfix on
# chkconfig saslauthd on
# alternatives --config mta

alternativeにより、/usr/sbin/sendmailが/usr/sbin/sendmail.postfixにリンクされる。

iptablesで外部からのポート25での接続を許可する。

# vi /etc/sysconfig/iptables

...
-A RH-Firewall-1-INPUT -p 25 -j ACCEPT
...

# service iptables restart

/etc/aliasesを修正して、root、webmaster、postmasterなど宛のメールはnorに行くようにする。修正後newaliasesで更新するのを忘れないこと。

MTバックアップの復元(別サイトへの移行)

Sakusaインターネットにて、運用中のMovableTypeデータのバックアップを取り、復元する。

復元時には、各サイトパスとURLの変更修正メッセージが出る。

復元したら、再構築は必須。
さらにその後、スタイルを適用しなおさないと、CSSが正しく表示されない。

しかし、ここで問題が発生。

テンプレートをいくら直しても、その変更が反映されない。

結局、SakuraインターネットのMovableTypeを4.1に上げて、さらに
テンプレートの[ファイルへのリンク]を一旦削除した後に、バックアップして、復元。

どちらが、原因かははっきりしないが、これでとりあえず、テンプレートの変更は反映されるようになった。

インストール: MovableType 4.1

towerにMovableTypeのテスト用環境を用意することにした。

towerでは、suexecが動いている。
しかし今のApacheでは、suexecの動作するユーザディレクトリ名はコンパイル時に指定する。
つまり、今までrally.or.jpではユーザ用のWebディレクトリはhtmlという名称で運用してきたが、RPMで提供されるhttpdを使う限り、public_htmlという名称にしなくてはならない。
suexecを止めるか、Webディレクトリの名称を変えるか悩んだが、結局安全を取り、suexecは生かすことにした。

そのため、マシン移行時にはユーザのwebディレクトリ名の変更を忘れないようにしなくてはならない。

という、前置きは終わって、いよいよインストール。

まず、必要なperlのモジュールをインストールする。

必須のperl-Image-Size。

それから、以下のものをyumで入れていく。

Crypt::DSA
Digest::SHA1
Archive::Tar
Image::Magick
XML::Atom

ただし、以下の2つはそのままの名前ではなくperl-IO-Compress-Base、とperl-IO-Compress-Zlibという名前で入れる。
IO::Uncompress::Gunzip
IO::Compress::Gzip

さて、あとは、MySQLのデータベースとユーザを作って準備完了。

$ mysql -uroot -pcn9aaw11
mysql> create database mt character set utf8;
mysql> grant all on mt.* to mtuser@localhost identified by 'mt2008pw02';

mt.cgiを動かして、適切なものを指定していけば、特に問題なくインストールも完了。

Sakuraインターネットのデータのバックアップを取り、復元する。
復元したら、再構築は必須である。
さらにその後、スタイルを適用しなおさないと、CSSが正しく表示されない。

インストール: PHP 5.1.6

$ sudo yum install php

あとは、/etc/httpd/conf/httpd.confのDirectoryIndexにindex.phpを加えるだけ。

インストール: POPFIle 1.0.0(成功)


再度、英文のオリジナルドキュメントを読みながら、SQLiteを使い、もう一度やり直すことにする。

まず、不要かもしれないが、無いとエラー出力されていたBerkelyDBをインストールする。

# yum install perl-BerkeleyDB

そして、さらにyumでDBD::SQLiteをインストールしようとするが、yumで取ってこようとするバージョンは1.14-2.el5。
POPFileのドキュメントによると、1.0以降はSQLite3で、POPFileでは使えないという。

SQLite2用のperl-DBD-SQLite2をインストールすることにする。

# yum install perl-DBD-SQLite2

すでに、作成していたpopfile.cfgのbayes_dbconnectをSQLite2用に書き換えて無事起動。

dbi:SQLite2:dbname=$dbname

特にエラーなく動作しているようなので、以前別のマシンで使っていたpopfile.dbを移動して完全移行完了。

手順としては、MySQLを使用しようとして失敗したものとごちゃごちゃになってしまい、わかりにくいが、POPFileがバージョンアップしたときに、また書き直そう。

インストール: POPFIle 1.0.0(失敗)

もはや、離れられないスパムフィルタPOPFileをインストール。
長いこと愛用してきたが、ついに、1.0.0になったようだ。

POPFile - Automatic Email Classification

popfile-1.0.0.zip

まず、日本語解析のためにKakasiを入れる。

$ wget http://kakasi.namazu.org/stable/kakasi-2.3.4.tar.gz
$ ./configure --prefix=/usr
$ make
$ sudo make install

そして、必要になるモジュールのチェック。

Webページのマニュアルを見ると以下のモジュールが必要になるようだ。
しかし、リリースノートによると、必要なモジュールはもっと少ない。

DBI
DBD::SQLite(SQLiteを使うなら)
DBD::mysql(MySQLを使うなら)
Digest::base
Digest::MD5
HTML::Tagset
MIME::Base64
MIME::QuotedPrint
Date::Parse
HTML::Template
Text::Kakasi
Encode
IO::Socket::Socks(SOCKSを使うなら)
IO::Socket::SSL(SSLを使うなら)
Net::SSLeay(SSLを使うなら)

とりあえず、下記のスクリプトによって、モジュールが存在するかチェックした。


echo DBI
perl -MDBI -e 'print $DBI::VERSION' 2> /dev/null
echo ""
echo DBD::SQLite
perl -MDBD::SQLite -e 'print $DBD::SQLite::VERSION' 2> /dev/null
echo ""
echo DBD::mysql
perl -MDBD::mysql -e 'print $DBD::mysql::VERSION' 2> /dev/null
echo ""
echo Digest::base
perl -MDigest::base -e 'print $Digest::base::VERSION' 2> /dev/null
echo ""
echo Digest::MD5
perl -MDigest::MD5 -e 'print $Digest::MD5::VERSION' 2> /dev/null
echo ""
echo HTML::Tagset
perl -MHTML::Tagset -e 'print $HTML::Tagset::VERSION' 2> /dev/null
echo ""
echo MIME::Base64
perl -MMIME::Base64 -e 'print $MIME::Base64::VERSION' 2> /dev/null
echo ""
echo MIME::QuotedPrint
perl -MMIME::QuotedPrint -e 'print $MIME::QuotedPrint::VERSION' 2> /dev/null
echo ""
echo Date::Parse
perl -MDate::Parse -e 'print $Date::Parse::VERSION' 2> /dev/null
echo ""
echo HTML::Template
perl -MHTML::Template -e 'print $HTML::Template::VERSION' 2> /dev/null
echo ""
echo Text::Kakasi
perl -MText::Kakasi -e 'print $Text::Kakasi::VERSION' 2> /dev/null
echo ""
echo Encode
perl -MEncode -e 'print $Encode::VERSION' 2> /dev/null
echo ""
echo IO::Socket::SSL
perl -MIO::Socket::SSL -e 'print $IO::Socket::SSL::VERSION' 2> /dev/null
echo ""
echo Net::SSLeay
perl -MNet::SSLeay -e 'print $Net::SSLeay::VERSION' 2> /dev/null

かなり、足りない...

リリースノートを見るとcpanからBundle::POPFileバンドルによって、必要なすべてのモジュールをダウンロードできるとなっている。
とりあえずは、この方法でやってみた。

# perl -MCPAN -e shell
cpan> install Bundle::POPFile

しかし BerkeleyDB、File::Copy、File::Find、IO::Socket::SSL、Net::SSLeayが"make test"でエラーとなってインストールできない。

とりあえず、perl-IO-Socket-SSL、perl-Net-SSLeayはyumのリポジトリに存在するので、yumでインストールする。

# yum install perl-IO-Socket-SSL

perl-Net-SSLeayも依存関係で同時にインストールされた。

残るは、 BerkeleyDB、File::Copy、File::Findだが、そもそもこれらのBerkeleyDBは1.0.0では使っていないはずだ。
そして、File::Copy、File::Findは既にインストールされている。

ということは、バックエンドにMySQLを使うのであれば、もう使えるはずだ。

# yum install perl-DBD-MySQL

Mandrake向けだが、サービスとしてPOPFileを起動するための以下の英文ドキュメントを参考に作業。

Installing POPFile on Mandrake [POPFile Documentation Project]

# mkdir /usr/share/popfile/
# mkdir /var/lib/popfile
# mkdir /var/log/popfile
# cp *.gif *.pl *.png *.ico /usr/share/popfile/
# cp stopwords /usr/share/popfile/
# cp license /usr/share/popfile/
# cp v*.change /usr/share/popfile/
# chmod +x /usr/share/popfile/*.pl
# cp -Rf Classifier /usr/share/popfile/
# cp -Rf Classifier /usr/share/popfile/
# cp -Rf POPFile /usr/share/popfile/
# cp -Rf Proxy /usr/share/popfile/
# cp -Rf UI /usr/share/popfile/
# cp -Rf languages /usr/share/popfile/
# cp -Rf manual /usr/share/doc/popfile/
# cp -Rf skins /usr/share/popfile/
# cp -Rf Services /usr/share/popfile/ <-Webにはなかったが、無いとIMAPが動かなそうだ
# vi /usr/sbin/popfile-bayes <- Webの通りに編集
# vi /usr/sbin/popfile-insert <- Webの通りに編集
# vi /usr/sbin/popfile-pipe <- Webの通りに編集
# vi /usr/sbin/popfile <- Webの通りに編集
# chmod +x /usr/sbin/popfile*
# vi /etc/init.d/popfile
# chmod +x /etc/init.d/popfile
# /sbin/chkconfig --level 345 popfile on
# ln -s /etc/init.d/popfile /usr/sbin/popfile-service

これで、起動の準備は整ったはずだ。

MySQLを使うので、まず、MySQLにPOPFileのユーザを作成。

pfuserは実際はユーザ名、pfpasswordは実際はパスワード。

# mysql -u root -p
mysql> create database popfile;
mysql> grant all on popfile.* to pfuser identified by '********';
mysql> flush privileges;
mysql> quit

そして設定ファイルをWenページの通りに作成する。

# vi /var/lib/popfile/popfile.cfg
bayes_dbconnect dbi:mysql:database=popfile;host=localhost
bayes_dbuser pfuser
bayes_dbauth pfpassword

# /usr/sbin/popfile-service start

が、エラーがいくつか出る。

23950: bayes: 747: Attempting to connect to dbi:mysql:database=popfile;host=localhost (1)
23950: bayes: 753: Using SQLite library version
23950: wordmangle: 88: Failed to open stopwords file
20037: WARNING: Couldn't open POPFile packing list (/usr/share/popfile/popfile.pck) so cannot check configuration[0a]

popfile.pckについては、最初にソースを展開したディレクトリにあったものをコピーして対処。

$ sudo cp popfile.pck /usr/share/popfile/

"Failed to open stopwords file"は、ソースを見たところ、stopwordsの正しい置き場所は、環境変数POPFILE_USERとして指定した場所、すなわち今回は"/var/lib/popfile"のようだ。
まあ考えてみれば、置き場所としては当然こっちだ。

# mv /usr/share/popfile/stopwords /var/lib/popfile/

しかし今回はSQLiteは使用していないのに、ログにUsing SQLite library versionとあるのは不可解だ。

とりあえず動作テストをしてみて様子を見るが、一度登録したデータをうまく反映してくれないようだ。
また、頻繁にログにはエラーが出力され、またPOPFile自体が落ちてしまう。

DBD::mysql::st execute failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 3 at /Classifier/Bayes.pm line 1595.
DBD::mysql::st fetchrow_arrayref failed: fetch() without execute() at /Classifier/Bayes.pm line 1600.
DBD::mysql::st execute failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')
and matrix.bucketid = 2' at line 3 at /Classifier/Bayes.pm line 1615.
DBD::mysql::st fetchrow_arrayref failed: fetch() without execute() at /Classifier/Bayes.pm line 1619.

とりあえずMySQLを使うのはあきらめ、また英文のオリジナルドキュメントを読みながら、もう一度やり直すことにする。

CentOSのリポジトリを増やす

  • Posted by: YAMAGISHI Norimasa
  • 2008年2月14日 15:11
  • System | tower

まずは、リポジトリをもっとも早いミラーに設定する。

# yum install yum-fastestmirror

そして、CentOSPlusを有効にする。

# vi /etc/yum.repos.d/CentOS-Base.repo

[centosplus]

- enabled=0
+ enabled=1

さらに、いくつかのリポジトリを追加しよう。
まずは、RedHatのサポートするEPELだ。

# wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-2.noarch.rpm
# rpm -ivh epel-release-5-2.noarch.rpm

これで、リポジトリの追加は完了する。

[root@tower ~]# ls /etc/yum.repos.d/
CentOS-Base.repo CentOS-Media.repo epel-testing.repo epel.repo

epel-testing.repo、epel.repoの2ファイルが追加されている。

epel-testing.repoの中はすべてenabled=0であるのを確認。
epel-testing.repoの中は[epel]はenabled=1、[epel-debuginfo]、[epel-source]は0。

この設定で問題ないだろう。

# yum update

で、リストを入手する。

ついでなので、他にもいくつか気になるリポジトリを追加。

# vi /etc/yum.repos.d/third.repo

[dag]
name=Dag RPM Repository for Red Hat Enterprise Linux
baseurl=http://ftp.riken.jp/Linux/dag/redhat/el$releasever/en/$basearch/dag
http://apt.sw.be/redhat/el$releasever/en/$basearch/dag
enabled=1
gpgcheck=1
gpgkey=http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt

[dries]
name=Extra Fedora rpms dries - $releasever - $basearch
baseurl=http://ftp.riken.jp/Linux/dag/dries/redhat/el$releasever/en/$basearch/dries/RPMS
http://ftp.freshrpms.net/pub/dag/dries/redhat/el$releasever/en/$basearch/dries/RPMS
enabled=1
gpgcheck=1
gpgkey=http://dries.studentenweb.org/rpm/RPM-GPG-KEY.dries.txt

[flash]
name=macromedia.mplug.org - Flash Plugin
baseurl=http://macromedia.mplug.org/rpm
enabled=0
gpgcheck=1
gpgkey=http://macromedia.mplug.org/FEDORA-GPG-KEY

[atrpms]
name=Redhat Enterprise Linux $releasever - $basearch - ATrpms
baseurl=http://dl.atrpms.net/el$releasever-$basearch/atrpms/stable
enabled=0
gpgcheck=1
gpgkey=http://ATrpms.net/RPM-GPG-KEY.atrpms

そして、GPGキーを追加する。
# rpm --import http://ftp.riken.jp/Linux/dag/packages/RPM-GPG-KEY.dag.txt
# rpm --import http://dries.studentenweb.org/rpm/RPM-GPG-KEY.dries.txt
# rpm --import http://ATrpms.net/RPM-GPG-KEY.atrpms
# rpm --import rpm --import http://ATrpms.net/RPM-GPG-KEY.atrpms
# rpm --import http://macromedia.mplug.org/FEDORA-GPG-KEY

RPMForgeのリポジトリはrpmで追加できるようなので、その手法でいく。

# wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
# rpm -ivh rpmforge-release-0.3.6-1.el5.rf.i386.rpm

ただし、RPMForgeのリポジトリも、デフォルトがenable=1なので、0に修正。

とりあえずはこんなところで、以下に今回追加したリポジトリをまとめておく。

enable=1
base CentOS 5.0のベース
updates CentOS 5.0のアップデート
addons CentOS 5.0のアドオン
extras CentOS 5.0の追加パッケージ(addonsとの切り分けが今ひとつ不明)
centosplus CentOS 5.0の拡張パッケージ(デフォルトではOff)
epel Extra Packages for Enterprise Linux(EPEL) FedoraExtraなどでは提供されているものがある
dag Dag、Red Hat Enterprise Linux向け。パッケージの種類は豊富

enable=0
rpmforge RPMforge Dag's repository, FreshRPMS, Dries, PlanetCCRMAなどを統合したもの。
dries Dries RPM Repository。RHEL、Fedora向け
flash Macromediaの Flash Plugin
atrpms ATrpms RHEL向けのマルチメディア系とプログラミング系など

インストール: MySQL 5.0.22

いろいろなデータベースのバックエンドとして使う予定だが、とりあえずはPOPFileのためにMySQLのインストール。

$ sudo yum install mysql
Installing:
mysql i386 5.0.22-2.2.el5_1.1 updates 3.0 M
Installing for dependencies:
perl-DBI i386 1.52-1.fc6 base 605 k

$ sudo yum install mysql-server
Installing:
mysql-server i386 5.0.22-2.2.el5_1.1 updates 10 M
Installing for dependencies:
perl-DBD-MySQL i386 3.0007-1.fc6 base 147 k

設定は、文字コード以外は特にいじるところはない。

# vi /etc/my.cnf
[mysqld]
default-character-set = utf8 <-デフォルトのCHARSETをUTF-8に

[mysql]
default-character-set = utf8 <-デフォルトのCHARSETをUTF-8に

そして、起動設定と起動。

$ sudo /sbin/chkconfig --level 345 mysqld on
$ sudo /sbin/service mysqld start

まず、rootのパスワードを設定して、ゲストユーザを消しておく。

nor@tower ~]$ mysql -u root

mysql> set password for root@localhost=password('********');
mysql> set password for root@'tower.rally.or.jp'=password('********');
mysql> delete from mysql.user where user='';
mysql> quit

とりあえず、これでmySQLのインストールと設定は完了。

インストール: vsftpd 2.0.5

  • Posted by: YAMAGISHI Norimasa
  • 2008年2月13日 22:08
  • System | tower

FTPサーバvsftpd。
パッケージマネージャから[サーバー]-[FTPサーバー]でインストール。

インストールしただけでは起動しないので、[サービスの設定]で起動するように設定し、[保存]する。内部で行っているのは、/etc/rc.d/rc5.d/S60vsftpdとK50vsftpdの変更だけ。
さらに、vsftpdを選んで[開始]すればよい。
少なくとも、LAN内部で使用するだけであれば、このままで動作する。

しかし、常時必要なサービスではないし、xinetd経由の起動にしたい。
が、そもそも、xinetd自体がインストールされていないので、まずxinetdをインストール

そして、現在起動しているvsftpdを止めて、
# service vsftpd stop

xinetd用の設定ファイル/etc/xinetd.d/vsftpdの作成。


service ftp
{
         disable                 = no
         flags                   = NOLIBWRAP
         socket_type             = stream
         protocol                = tcp
         wait                    = no
         user                    = root
         server                  = /usr/sbin/vsftpd
         server_args             = /etc/vsftpd/vsftpd.conf
         nice                    = 10
}

そしてvsftpd設定ファイルの/etc/vsftpd/vsftpd.confを編集


listen=NO <-スタンドアロン起動を行わない
tcp_wrappers=NO <-TCP-Wrappersによるアクセス制限を行わない

マシン起動時の起動設定を解除。
# chkconfig --del vsftpd

最後にxinetdの再起動。
# service xinetd restart

インストール: xinetd 2.3.14

$ yum install xinetd

マシン起動時に立ち上がるようにする。
# chkconfig --level 345 xinetd on

そしてxinetdの起動。
# service xinetd start

SSHのX転送の問題

ssh でログインした後、リモートホストでEmacsを起動するとなぜか、Ctrl-kで落ちる。

エラーは以下のもの。

X Error of failed request: BadAtom (invalid Atom parameter)
Major opcode of failed request: 18

これは、OpenSSH 3.8 移行ではX11 cookiesをデフォルトで使うようになったため。
対策としては、sshでのログイン時に-Yオプションをつけるか、/etc/ssh/ssh_configに"ForwardX11Trusted yes"を追加する。

今回は/etc/ssh/ssh_configを編集して対応。

OpenSSH FAQ

ただし、この場合以下のようなWarningが発生する。

Warning: No xauth data; using fake authentication data for X11 forwarding.

ついでに、sshでrootでログインできないように、towerの/etc/ssh/sshd_configに"PermitRootLogin no"を追加した。

sshのキーを登録

とりあえずということで、towerに対しては、sshではあるもののパスフレーズは使わずに、ログインしていたが、各マシンのパスフレーズを登録し、ssh-agentを使えるようにした。

今までRSAキーをメインに使っていたが、混在も気分がよくないので、これを機会にDSAキーにそろえることにした。

nor@mirage$ ssh-keygen -t dsa
nor@tower$ mkdir .ssh
nor@tower$ chmod 700 .ssh
nor@tower$ scp nor@mirage:~/.ssh/id_dsa.pub .
nor@tower$ cat id_dsa.pub >>.ssh/authorized_keys2
nor@tower$ chmod 600 authorized_keys2

loplassでもキーを作り、towerに登録した。

インストール: act Rev.0.11

自作のAsahi.comリーダactも、towerで動かすことにする。
これで、もはやmirageは常時起動しておく必要は無くなる。

ただし、towerにはJcode.pmがインストールされていなかったので、まず、Jcode.pmをインストールした。

# perl -MCPAN -e shell

cpan> install Jcode

あとは、自動でデータをとってくるために、cronに登録。
$ crontab -e
HELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin

# run-parts
20 7 * * * $HOME/bin/act
20 14 * * * $HOME/bin/act
20 21 * * * $HOME/bin/act

インストール: Wanderlust 2.14.0

そしていよいよ、Wanderlustだ。
Thnuderbirdへの移行も考えられるが、どうするかな。
もはや、外からログインするということはほぼ考えられない。GMailに転送をかけているのである程度古いメールも見ることができる。正直、今Wanderlustを使う必要性はかなり低い。
将来性もThunderbirdの方が上だろう。
ただ、書くということに限って言えば、やはりEmacs上で書きたい。

あえて言えば、Thunderbirdのメールを圧縮できないと言うのは大きな弱点だが、これも、手動で不要なmboxを圧縮すればよいだろう。
それよりも、この際popとimapの共存をして、自分のメールはサーバ上に置きっぱなしにするのもよい。
ThunderbirdなどのIMAP対応のメーラなら外から見ることもできるし、いろいろなマシンから、メールを見ることができる。

まず、Wanderlustをインストール。
そして、pop、imapのインストール。
さらに、メールをすべてimapに移行。

こういう手順でいくことにする。

apel-10.7.tar.gz APEL 10.7
flim-1.14.9.tar.gz FLIM 1.14.9 (五条)
semi-1.14.6.tar.gz SEMI 1.14.6 (丸岡)

まず、MIMEに必要なモジュールをインストールしていく。

APEL 10.7
apel-10.7.tar.gz
APEL

FLIM 1.14.9 (五条)
flim-1.14.9.tar.gz
FLIM

SEMI 1.14.6 (丸岡)
semi-1.14.6.tar.gz
SEMI

上記3つは、すべて"sudo make install"でインストール完了。

Wanderlustの最新Stable版を取ってきて、展開、Makefileを修正する。

ftp://ftp.gohome.org/wl/stable/wl-2.14.0.tar.gz

LISPDIR = /usr/share/emacs/site-lisp
INFODIR = /usr/share/info

$ make
$ make install

さらに、infoのインストール。

$ make info

ここで、"make install-info"といきたいところだが、日本語infoはJISで作成されるがCentOS5はUTF-8なので、以下のように手動でコピーする。

$ mv wl-ja.info.orig wl-ja.info

$ mv wl-ja.info wl-ja.info.orig
$ nkf -w3 wl-ja.info.orig > wl-ja.info
$ sudo cp wl*.info /usr/share/info
$ vi /usr/share/info/dir

Wanderlustのノードを追加する。

最後に、.emacsなどにWanderlustの設定を追加して、インストールは完了。

mirageより、Mailと.elmoディレクトリをコピーして、環境の移行も完了。

nor@mirage$ tar czvf - ./Mail | ssh nor@mirage "tar zxf -"
nor@mirage$ tar czvf - ./.elmo | ssh nor@mirage "tar zxf -"

インストール: BBDB

Wanderlustでのアドレス収集用にBBDBをインストール。

The Insidious Big Brother DataBase @ SourceForge
bbdb-2.35.tar.gz

Makeではlispファイルのコピーやinfoの追加はしてくれないので、自分でする必要がある。

$ tar zxvf bbdb-2.35.tar.gz
$ cd bbdb-2.35
$ ./configure
$ make
$ sudo mkdir /usr/share/emacs/site-lisp/bbdb
$ cd lisp/
$ sudo cp *.el* /usr/share/emacs/site-lisp/bbdb
$ cd ../texinfo
$ gzip bbdb.info
$ sudo cp bbdb.info.gz /usr/share/info
$ vi /usr/local/info/dir
以下を追加。

* BBDB: (bbdb). Big brother database.

しかし、日本語を含むFrom行を自動で取り込んでくれない。
FLIMの代わりにLIMITを使ったり、Wanderlustのメーリングリストのログを調べてみたが、解決しなかった。
MIMEデコードがうまく行っていないのだと思うが、追求にも時間がかかりそうなので、とりあえず使用はあきらめることにする。

インストール: w3m、emacs-w3m

WanderlustでHTMLメールを見るために、w3mとemacs-w3mをインストール。

$ sudo yum install w3m
しかし、これだけではw3mは画像表示に対応しないので、さらに、
$ sudo yum install w3m-img
(これで、w3mが必要とするGC libraryもインストールされる)
w3mのバージョンは0.5.1。

emacs-w3mはリポジトリにないので、自分で取ってくる。

Text browser works on Emacs
emacs-w3m-1.4.4.tar.gz

$./configure
$ make
$ make check
$ sudo make install
$ sudo make install-icons

そして、.emacsと.emacs-w3mを編集。
.emacsには
(require 'w3m-load)
他を追加。

インストール: EmacsとAnthy

さて、そろそろEmacsを使えるようにしよう。
[アプリケーション]-[Emacs]
で、インストール完了。

そして、ついに10年以上の付き合いのWnnとは決別する決意をする。

今回は、日本語変換にはAnthyを使うことにした。
が、CentOS5のデフォルトがSCIM+Anthyなので、あとは、Emacsから使えるようにAnthy.elを入れるだけ。

# yum install anthy.el

これで、以下の設定をするだけで、Anthyが使えるようになる。


;;;;;;;;;;;;;;;;
;; Anthy の設定
;;;;;;;;;;;;;;;;

(if (equal emacs-ime "anthy")
(progn
(set-language-environment "Japanese")
(load-library "anthy")
(setq default-input-method "japanese-anthy")
))

anthy.elを使うならこれでいいのだが、anthy.elの場合、日本語のインクリメンタルサーチができない。anthy+tamagoにすれば解決するのだが、そろそろanthy.elのキーバインドに慣れてしまいたい。
tamago以外の解としては、migemoを使うという手もある。

まあ、しばらくanthy.elで使ってみよう。

あとは、徐々に.emacsを移行しながら、必要なアプリケーションをインストールしくことにする。

インストール: gftp 1:2.0.18

$ sudo yum install gftp

anonymous ftp用のメールアドレスだけ修正。

sudo

  • Posted by: YAMAGISHI Norimasa
  • 2008年2月12日 14:59
  • System | tower

いいかげん、suしまくるのが面倒になったので、とりあえず、

# visudo

nor ALL=(ALL) ALL

あまりよくはないが、設定が終わるまではこれでいこう。
ここに書いておけば、忘れないだろう。

インストール: samba 3.0.25b

# yum groupinstall "Windows File Server"

[システム]-[管理]-[サーバー設定]-[Samba]からsystem-config-sambaを起動する。

まずは、[プリファレンス]-[サーバー設定]で、[ワークグループ]と[記述](説明)を設定する。

08021308.png

そして、任意のユーザ向けの共有を作成。

# mkdir /var/samba

これにtmpという共有名を割り当て、[書き込み可能]、[可視]をチェックする。

08021309.png

設定ファイル/etc/samba/smb.confを確認すると、以下が追加されている。

[tmp]
path = /var/samba
writeable = yes
; browseable = yes
guest ok = yes

そして、ユーザの設定。
[プリファレンス]-[Sambaのユーザー]で追加するのだが、追加した後も、[Sambaのユーザー]画面に追加が反映されない。バグかな。

08021307.png


これ以降は、直接/etc/samba/smb.confを編集する。と言ってもとりあえずは、ホームディレクトリの公開のみ。実際にしたのはvalid usersをコメントアウトしただけ。

[homes]
comment = Home Directories
browseable = no
writeable = yes
valid users = %S

これでとりあえず、使用は可能になった。

念のため、アクセスできるホストを192.168.1. サブネットで指定。

hosts allow = 192.168.1.

あとは、プリンタの接続後に、共有できるようにすることくらいか。

インストール: Apache 2.2.3

towerにApacheの導入。
yumを使ってWeb Serverグループでインストール。

# yum groupinstall "Web Server"

ただし、マニュアルはインストールされてないのでこれはインストール。

# yum install httpd-manual

しかし、日本語マニュアルは入っていないようなので、
http://httpd.apache.org/docs/2.2/
を参照した方が良い。

バージョンは2.2.3。
とりあえずは、設定ファイルは何もいじらずに起動してみる。

# service httpd start

問題なく起動し、別のマシンからでもデフォルトのトップページを見ることはできた。

そこで、デフォルトでhttpdが起動するように設定する。

# chkconfig --level 345 httpd on

system-config-httpdというGUIプログラムでも設定は可能だが、デフォルトではインストールされないので、ここはhttpd.confを直接編集して設定。

設定ファイルの場所は/etc/httpd/conf/httpd.conf。
とりあえず設定した内容は以下のもの。
いずれ、コンテンツを移動するときに、もう少しきちんといじることにする。

KeepAlive On <-セッションの維持
erverTokens ProductOnly <-OS名を表示しない
ServerAdmin nor@rally.or.jp <-サイトの管理者
ServerName www.rally.or.jp:80 <-ホスト名
ServerSignature Off <-サーバ情報を出力しない

<Directory "/var/www/html">
Options Includes  <-  SSIのIncludeを使えるようにする。

#AddDefaultCharset UTF-8 <-デフォルトのCharsetをUTF-8にしない。
    UserDir html <-ユーザのホームディレクトリの下のhtmlを各ユーザのWeb公開ディレクトリに。

DirectoryIndex index.php index.shtml index.html index.html.var <- インデックスページの優先度設定。

インストール: VMware Player 2.0.2 for Linux

CentOS5へのVMware Workstation 4のインストールはとりあえず中断し、VMware Playerを使ってみることにした。

まず、VMwareの公式サイトから、最新のVMware Player 2.0.2 Build: 59824をダウンロード

Player Version History - VMware

VMware-player-2.0.2-59824.i386.rpm

今度は、カーネルモジュールも見つけられるようで、すんなりインストールが完了。

mirageにおいてあったWindowsのイメージをそのままコピーして実行した。
しかし、古すぎるためかVMWare Toolsが動作していないようだ。

そこで、最新のVMWare Toolsもインストールする。
VMWare Tools自体はVMWare Playerには含まれていない。
そのため、VMWare Workstationを展開し、Windows ISOを取り出し、これをCDとして仮想マシン上でマウントしインストールする。
マウントの設定は、foo.vmxを直接エディタなどで編集する。

VMware-workstation-6.0.2-59824.i386.tar.gz

まず、事前に古いVMWareをアンインストールする。

VMWareのサウンドはOFF、ゲストのWindowsのCDの自動読み込みもOFFにしていたせいか、ハードウェアの自動認識がされたのは、VGAのみ。

そしてその後、CDドライブにマウントされたVMWare Toolsをインストール。
しかしVMware Toolsをインストールしても、やはり動作は遅い。

CPU自体の負荷は高くないようなので、おそらくCentOS自体でメモリがスワップしているせいだろう。実用には耐えないか。
これだったら、PentiumII-500MHzメモリ512MBのマシンのほうがまだマシに動く。

まあ、物理メモリ256MBのマシンで、256MBの仮想マシンを動かそうというほうがそもそも無理な話なのだが。
ちなみに、wmxファイルでメモリを128MBに設定すると、少しは動きがマシになった。

ということで、インストール自体は完了したものの、使用は断念。
アンインストールとなった。

インストール: CentOS5にVMWareWorkstation 4 失敗

CentOSにVMWareをインストールしてみることにする。
VMWareのバージョンは4と古いので、もちろんCentOS5などが、動作保証されているわけが無い。

VMware-workstation-4.5.3-19414.i386.rpm

gccをまだ入れていなかったので、vmware-config.plで怒られる。

ついでなので、Gnome上でパッケージマネージャから[開発]-[開発ツール]を選んで、gccなどをインストール。
当然ながら依存関係が大きく、非常に時間がかかる。

そういえばカーネルソースも必要だったはずなので、
# yum install kernel-devel
kernel-devel-2.6.18-53.1.6.el5がインストールされた。

しかし、vmware-config.plでカーネルソースが見つからないと怒られる。

What is the location of the directory of C header files that match your running
kernel? [/usr/src/linux/include] /usr/src/kernels/2.6.18-53.1.6.el5-i686/include/

The directory of kernel headers (version @@VMWARE@@ UTS_RELEASE) does not match
your running kernel (version 2.6.18-53.1.6.el5). Even if the module were to
compile successfully, it would not load into the running kernel.

/usr/src/linuxにシンボリックリンクを貼ってもダメ。

バージョン定義しているファイルが、version.hから変わってしまったため、見つけられないようだ。

とりあえず中断。

Linuxでリモートデスクトップ

VNCではリモートマシンのデスクトップを開くことができる。
Windowsがリモートマシンの場合は、リモートマシンにおいて物理的に表示されているデスクトップそのものが開かれる。Windowsのリモートデスクトップと同じ動作だ。
しかし、X Window SystemベースのVNCでは、別のディスプレイ番号を使用して新しいデスクトップを開く。物理的に表示されているものとは別のものだ。

これをWindowsのリモートデスクトップと同じような動作するには、Gnomeに搭載されているvinoを使う。
これは、[システム]-[設定]-[リモートデスクトップ]で設定できる。

08021203.png

これで、クライアントからディスプレイ番号0に接続することができる。
ただし、これはリモートマシンにおいてGnomeでログイン後にしか使うことができない。

まあ、この機能は、ヘルプデスクなど以外ではほとんど使い道がないかと思われる。

もし、一人で使おうとするならば、常にログイン状態にしておくしかない。

まあ、[システム]-[管理]-[ログイン画面]の[セキュリティ]タブで、自動ログインを有効にすることもできるが、そもそもそこまでの必要性も感じないし、常時VNC接続をできるようにするというのも気持ちが悪い。
08021205.png

VNCの導入

VAIOは普段は、マシンラックにおきっぱなしにして動作させるので、直接触ることは少ない。そこで、VNCだ。
VNC Serverをインストールしようとしたところ、すでにインストールされていた。

あとは、サーバを設定して起動するだけだ。

# vi /etc/sysconfig/vncservers
VNCSERVERS="1:nor"
VNCSERVERARGS[2]="-geometry 1024x768 -nolisten tcp -nohttpd"

$ vncpasswd
Password: ********
Verify: ********

いつでも使えるようにサービスとして登録したり、xinetd経由であげたりすることもできるが、頻繁に使うものではないし、セキュリティのことも考え、使うたびにコマンドラインで立ち上げるようにする。

$ vncserver

これで、接続される準備は完了。

終了は、
$ vncserver -kill :1

ただし、このままだとウィンドウマネージャとしてtwmが使われるので、.vnc/xstartupの最終行の"twm"を"gnome-session"に変更。

iptablesによるファイアウォールの設定

  • Posted by: YAMAGISHI Norimasa
  • 2008年2月10日 12:49
  • System | tower

さて、インストールが終わったらセキュリティである。
最終的には、外部に公開するサーバとするので、ガチガチに固めることが望ましい。
なお、今回はSELinuxは使用しないで、iptablesによるファイアウォールを使う。
もちろん、基本的に全部閉じておいて、必要なサービスのみ開くという方針でいく。

GUIから[システム]-[管理]-[セキュリティレベルとファイヤーウォールの設定]で、基本設定を行う。コマンドラインでは「# system-config-securitylevel」に相当する。

08021201.png

まず、FTP、SSH、Samba、HTTPS、HTTP、SMTPを信頼できるサービスとして登録する。
そのほかに、以後も確実に開くものとして、VNCの5900~5902/TCPをその他のポートで登録。
そして、[OK]。

この設定は/etc/sysconfig/system-config-securitylevelに保存される。このファイル自体は、アプリケーションの保存ファイルとしての役割で、さらに/etc/sysconfig/iptables-config、および詳細ルールが/etc/sysconfig/iptablesにも保存される。

[root@tower ~]# cat /etc/sysconfig/iptables
# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*filter      hosts.allow  hosts.deny   
:INPUT ACCEPT [0:0]s /etc/hosts.allow 
:FORWARD ACCEPT [0:0]/etc/hosts.deny 
:OUTPUT ACCEPT [0:0] /etc/sysconfig/iptables
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5900 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5901 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5902 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT

ただし、最終的にこのマシンをDMZに置き外部に公開することを考えると、VNCなどはIPアドレスにおけるアクセス制限をかけておいたほうがいい。もちろん、そういったPORTはゲートウェイで止めてしまうのが正しいのだが、やってやりすぎることはない。
しかし、system-config-securitylevelではそこまできめ細かい設定はできないので、直接/etc/sysconfig/iptablesを編集することになる。

とりあえず、sambaとVNCのみ、LAN内部からのみ接続可能なように"-s 192.168.1.0/24"を追加する。

-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp -s 192.168.1.0/24 --dport 137 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp -s 192.168.1.0/24 --dport 138 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -s 192.168.1.0/24 --dport 139 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -s 192.168.1.0/24 --dport 445 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -s 192.168.1.0/24 --dport 5900 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -s 192.168.1.0/24 --dport 5901 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -s 192.168.1.0/24 --dport 5902 -j ACCEPT

いずれはDNS、pop3なども開くことになるはずだが今回はとりあえず、この辺で。

インストール: CentOS 5

  • Posted by: YAMAGISHI Norimasa
  • 2008年2月 9日 18:28
  • System | tower

さて、本命のCentOS5のインストールだ。

迷ったのはバージョン。CentOS4でもいいような気もするが、サポート期間がちょっと気になる。
しかし、メモリ要件がRHEL4では最小256MBだったのだが、RHEL5で最小512MBに上がっている。インストールしようとしているマシンは256MBしかない。

まあ、実際にインストールしてみて、メモリの使用状況を見て考えることにする。

なお今回のマシンでは、できるだけGUIによる設定を行い、それがどのように動作するのかを確認する方針で行く。
ただし、残念ながらインストールそのものはFDブートによるネットワークインストールのため、テキストモードでのインストールとなった。

CentOS5はFDからのインストールはできない。

initrd.img自体が5Mあり、CD以外の外部メディアではUSBメモリくらいしか使えないだろう。
しかし、VAIOのCDドライブは故障している。

そこで、すでにインストールしたDebianのGrubを使ってインストールイメージをブートすることにした。

まず、インストールイメージのvmlinuzとinitrd.imgをFTPサイトから持ってくる。

ftp://ftp.nara.wide.ad.jp/pub/Linux/centos/5.1/os/i386/isolinux/

そして、/root/bootにvmlinuzとinitrd.imgをコピー。

Grubにこのイメージからのブート設定を追加。
# vi /boot/grub/menu.lst

title CentOS Install
root (hd0,0)
kernel /root/boot/vmlinuz ramdisk_size=8192
initrd /root/boot/initrd.img

(もし/bootが別パーティションだった場合は、インストールイメージを/bootの下におき、パス名は/bootの下から記載、さらにrootのパラメタも変更する必要がある。)

これで、リブートし、GrubでCentOS Installを選ぶと、インストールが始まる。

この方法、参考にしたのは暇人日記blog版: FDはあるけどCD-ROMドライブの無いノートPCに最新版Linuxをインストール

以下はポイントだけ。

Configure TCP/IPでは、Manual configurationしておけば、インストール完了後も有効になる。

ftpサイト名はftp.nara.wide.ad.jp。ディレクトリは/pub/Linux/centos/5.1/os/i386/。

Partitioning Typeでは、Remove linux partitions on selected drives and create default layout.を選ぶ。

Review Partition LayoutではYesにして、/を18432から17920に、swapを512から1024に容量を変更。これは、仮想マシンを使うため。ただし、非常に動作が重くなるのは覚悟の上。

Time Zone Selectionでは、System clock uses UTCのチェックを外す。

Package selectionでは、すべてのチェックをはずし、Customize software selectionのオプションにチェック。

Package Group selectionでは、EditorsとGNOME Desktop Environment、X Window Systemだけチェック(GNOME Desktop EnvironmentはX Window Systemに依存していると思われるのだが、Xは自動ではインストールされない)。

ソフトウェアは、後からインストーラと同等の画面で追加が可能なので、最初は最小のインストールをしておくのがよいだろう。

再起動後のSetup Agentでは、System servicesを選びbluetooth、ip6tablesを停止する。Setup Agentを終了すると、ログインプロンプトが表示される。

ログインしstartxでXを立ち上げる。

「更新があります」という通知があるので、[更新を表示]をクリックすると、Package Updatarが立ち上がる。とりあえずは、すべて更新しておくのが良いだろう。

これで、とりあえずインストール作業は完了。


と、思ったが、マシン名を変更しておこうと思い立ち、GUIでmr2からtowerに変更。さらに、starletのDNSサーバの設定ファイルも変更して再起動。

08021204.png

このときWindowsでDNSの変更を反映にするには、[ネットワーク接続]で[ローカル エリア接続]を修復し、DNSキャッシュを削除する必要がある。

インストール: Debian etch

  • Posted by: YAMAGISHI Norimasa
  • 2008年2月 9日 18:20
  • System | tower

インストールしようとしているVAIO PCG-FX99V/BPは、DVDドライブが壊れている。そのためCDなどからのインストールが使えないのでFDインストールしかない。

まず、インストール用のFDを作ることにする。

まず、
http://www.t.ring.gr.jp/archives/linux/debian/debian/dists/etch/main/installer-i386/current/images/floppy/から、
boot.img
cd-drivers.img
net-drivers-1.img
net-drivers-2.img
root.img
をダウンロード、DOS上でrawriteを使いFDに書き込む。

そして、BOOT FDで起動。

Load driversでCD-DRIVER、NET-DRIVER1,2を読み込む。

ホスト名はmr2に、IPアドレスなどはDHCPで取得、そしてドメイン名はrally.or.jpが自動設定された。

パーティションは1パーティションを選択、hda1がext3に、hda5がswapになった。

そして、適当に質問に答えてインストールは完了。

実は、このDebianは実際に使うことは意図していない。
あくまで、本当に使う予定のCentOSのインストールのための前作業。

Spec: tower

型名: VAIO PCG-FX99V/BP
CPU: ADM mobile AMD Athlon 4 1.2GHz
Memory: 256MB(PC100)
Network : Realtek RTL-8139 100BASE-T
Video: ATI 3D RAGE Mobility M1(ATI|Rage Mobility P/M AGP 2x) 8MB
DVD/CD-Drive: UJDA720 DVD/CDRW
HDD: Toshiba MK2018GAP 20GB (換装)
FDD: 2mode
Display: 15型 SXGA+(1,400×1,050)対応 TFTカラー液晶(故障)
OS: CentOS5

メーカーWebページ

08021102.jpg

Index of all entries

Home > _Machine > tower Archive

Search
etc...
Feeds

Return to page top