Home > Linux > Application Archive

Application 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は立ち上がるようになった。

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

インストール: 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

インストール: 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に保存されるという安心感もあるし...

インストール: Wine、SugarSyncクライアント

SygarSyncをLinux上で動かすために、Wineをインストール。

DropBoxに比べ、Linux用のクライアントが無いのが(僕にとっての)弱点だったSugarSyncだが、Wineを使うことにより動作するようだ。

今までは、WindowsのソフトをあえてLinux上で動かそうとはしなかったが、これだけはどうしようもない...

# yum install wine

Wineをインストールした後に、Windows用のSygarSyncクライアントをセットアップ。

$ ./SugarSyncSetup.exe

Windows版と同様にセットアップは進む。一瞬、なにかエラーが発生したようだが、見損なってしまった。

が、なぜか過去の別のマシンの設定を引き継いでしまったようで、おかしなことになっている。"Magic Briefcase"も見つからない。

どうやら、過去のマシンを引き継いでインストールしてしまったのが悪いようで、一度、SygarSyncをアンインストールしようとする。
しかし、Wine Software Uninstallerが起動しない(インストールされていない)ので、Wine File ManagerからC:\Program Files\SugarSync\uninstall.exeを実行してアンインストール。

一見正常に動作するようになったが、Wine上からは自動同期はうまく行かないようだ。同期させたいと思ったたびに、SygerSyncファイルマネージャを起動する必要がある。
逆に、SugarSyncのサーバー上にあるデータが更新されたときには、ちゃんと同期される。

Windows Nativeの環境ではないので当然なのだが、自動同期が取れないのでは、rsyncによる同期とあまり変らない(若干楽ではあるが)。

一方、DropBoxはLinux Nativeのクライアントによる自動同期は可能なようだ。ということは、DropBoxに移行するべきだろうか。

もっとも、Linux版のDropBoxクライアントは大量にメモリを消費するらしいので、常時立ち上げずに、同期の時のみ立ち上げた方が良いらしい(2009年情報だが...)

最終的にはWindowsサーバーに移行する予定なので、そのときはSugarSyncでも良いのだが...

なお、SugarSyncも異様にメモリを消費することがあるという話もある...

とりあえず、一時的にモバイル環境にデータを持ち出すために使う分にはよいが、常用は出来ないということなのか...

とりあえず、leadでSugarSyncを使用しながら様子を見てみよう。

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でかまわない。

インストール: 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 + 日本語パッチ自体のインストール自体は完了。

アンインストール: Squid

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

# yum erase squid

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

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

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

Quick Reference: tripwire

ポリシーファイルの作成(新規に作成する場合)

# twadmin --create-polfile -S /etc/tripwire/site.key /etc/tripwire/twpol.txt

データベースの初期化

# tripwire --init

チェック

# tripwire --check

データベースの更新承認

# (LANG=C; tripwire --update --twrfile /var/lib/tripwire/report/$(HOSTNAME)-$(DATE).twr)

もちろん、$(HOSTNAME)と$(DATE)には対象のレポートのものを指定する。

ここで、viによるレポートの更新承認画面が立ち上がるので、承認しないものの先頭の[x]を[]に書き換えて(つまり、すべて更新承認するなら何もせずに)、":wq"する。

-Pオプションでパスフレーズを指定できる。

# (LANG=C; tripwire --update -P local-passphrase --twrfile /var/lib/tripwire/report/$(HOSTNAME)-$(DATE).twr)

なお、LANG=Cを行わないで、日本語環境でやると失敗する。

ポリシーファイルのアップデートと(それまで存在しなかったチェック対象の)データベースのアップデート
この場合、事前にデータベースに不一致の項目がまったく無い状態にしておかなければならない。

# tripwire --update-policy /etc/tripwire/twpol.txt

データベースに不一致の項目がある状態でデータベースをアップデートするには、lowモードにする。

# tripwire --update-policy --secure-mode low /etc/tripwire/twpol.txt

ポリシーファイルのテキスト出力

# twadmin --print-polfile > twpol.txt

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

インストール: 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が依存しているが、こちらはアップデート可能)

GParted Live CD

Linuxを利用したパーティションを操作するLive CD
loplassのNTFSのパーティションを広げるために、CD-Rに焼いて使用した。
サイズは、97M。

0.4.1-2
gparted-live-0.4.1-2.iso

GParted -- Download

日本語キーボード、日本語メニューにも対応していて、操作も非常にわかりやすい。

インストール: 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を追加した。

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のIMAPでは自動で分類をしなおしてくれる

  • Posted by: YAMAGISHI Norimasa
  • 2008年3月20日 07:14
  • Application

Webのドキュメントに書いてあったことが、今日やっと理解できた。
IMAPモジュールでは、X-Text-ClassificationヘッダーやX-POPFile-Linkヘッダーを使用できない。
しかし、その代わりに誤って振り分けたメールを正しいフォルダにMUAで手動で振り分けなおすと、それを監視していてフラグを自動でつけなおしてくれる。

これは、POPよりもよほど使いやすい。

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ファイルに設定を反映させる。そして、それを書き直し用のバックアップにコピーする。

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

POPFileとメールチェッカの間隔

POPFileのIMAPモジュールを使った場合、INBOXに入ったメールは自動的に振り分けられる。
しかし、メールチェッカがチェックする前に振り分けられてしまうと、メールチェッカでそのメールの着信を知ることができない。

うーむ、いい解決策が見当たらない。困った。
まあ当初の予定通り、携帯をBIFFとして使えばいいか。

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を排除できる。

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

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

前準備

まず、ユーザを作成する。
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インタフェースにアクセスして、メーリングリストをつくっていくだけ。

インストール: 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上で階層フォルダを作成した場合、たとえそれが疑似階層フォルダであっても、親フォルダを削除すると、子フォルダまで削除されてしまう。

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のインストールだ。

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を開放する。

インストール: 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で更新するのを忘れないこと。

rally.jpのMovableTypeを4.1にする

事前に移行テストをしっかりやってから、アップグレードしたかったが、移行テスト自体で問題が生じた。
そこでアップグレードテストのみmirageで行い、問題なくアップグレードが完了することを確認後、アップグレード。

$ unzip MT-4.1-ja.zip

展開されたたファイルを、アプリケーションディレクトリに完全に上書きする。
もちろん、mt-staticディレクトリも上書き。

そして、webGUIにログイン
データベースのアップグレードがはじまるという画面が表示される。
ここで、以下のようなメッセージも表示される。

加えて、以下のコンポーネントのアップグレード、またはインストールが必要です。
Professional Pack バージョン 1.1

なんらかの追加購入が必要かという気になるが、FAQを調べると特になんでもないようだ。

Six Apart - Movable Type 4 サポート: Professional Pack とは何ですか

「OK」でアップグレードが開始される。

アップグレードが完了、「Movable Typeに戻る」ボタンをクリックしてダッシュボードがが表示されるが、

これで、アップグレードは完了で、使えるようになる。
が、もし(テンプレートの初期化を行い)4.1のデフォルトテンプレートを使用する場合は、ウィジェットセットの作成が必要になるようだ。

MT4.0x から MT4.1 へのアップグレード後の注意点 | Movable Type 4 ドキュメント

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を使うのはあきらめ、また英文のオリジナルドキュメントを読みながら、もう一度やり直すことにする。

インストール: 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のインストールと設定は完了。

インストール: xinetd 2.3.14

$ yum install xinetd

マシン起動時に立ち上がるようにする。
# chkconfig --level 345 xinetd on

そしてxinetdの起動。
# service xinetd start

インストール: 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用のメールアドレスだけ修正。

インストール: 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"に変更。

インストール: GExplorer 2.1.10

Gyao Reader+は既読管理ができないため、結局常用するのはGExplorerに変更する。

さらに、Gyao ReaderではYahoo動画をWMPで見ることもできなくなったため、最新の、Ver.12.3を試してみたが、やはりYahoo動画のWMPでの再生はできない。

もはや、Gyao Reader+を使用するメリットはほとんど感じられなくなったため、登録されている動画サイトを一通り閲覧して、使用を中止することにした。

バージョンアップ: POPFile 0.22.4

POPFileは0.22.2を使っていたが、0.22.4にバージョンアップ。

目的は…

spamのメールヘッダの改行コードの問題でPOPFileのつけるへッダが無効になってしまう、という事態が頻繁に起るようになってきた。

> From: hitodumaskj@yahoo.co.jp
> Date: Sat, 24 Feb 2007 02:57:08 +0900X-Text-Classification: spam
> X-POPFile-Link: http://www:7070/jump_to_message?view=42008

そこで、最新バージョンでは対応がされているかもしれないとの期待の元に、バージョンアップすることにした。

それ以外にも、

0.22.4
insert.pl が日本語メールに対応

0.22.3
Base64 でエンコードされた日本語メールへの対応
Kakasi のパフォーマンス向上

などの、改良点もあるので、パフォーマンスアップも期待できる。

すでに、「Computer: testingやunstableを使えるようにする」で設定してあるので、以下のコマンドラインだけでアップグレード完了。

# aptitude install popfile/testing

インストール: Adobe Reader 7.0.9

やはり、現実問題としてはPDFリーダとしてAdobeのもの以外は再現性に問題がある。

Adobe Acrobat
のページからRPMをダウンロードしてインストール。

# sudo rpm -ivh AdobeReader_jpn-7.0.9-1.i386.rpm

たしか、5.0以前のバージョンだと日本語フォントを別途導入しなくてはならなかったように記憶しているが、本バージョンは別途日本語フォントを導入することなく、表示できた。

kinput2のキーバインド

  • Posted by: YAMAGISHI Norimasa
  • 2006年11月20日 14:28
  • Application

備忘録メモ
フェンスモード

 Ctrl-l or Return => 確定
 Ctrl-_ => JISコード入力
 Ctrl-^ => 記号入力
 ESC h => ひらがなに変換
 ESC k => カタカナに変換

漢字変換モード

 Ctrl-b => 直前の文節
 Ctrl-l Ctrl-m or RETURN => すべての変換を確定
 Ctrl-n => 次候補表示
 Ctrl-v => インスペクト(品詞名や辞書情報を見る)
 Ctrl-z => 次候補
 ESC s => 変換候補一覧表示モード
 M-x touroku-region => リージョン内の単語登録

インストール: Wnn6

Wnn6をインストール。

Emacsにて起動時にミニバッファに"Error in init file: Wrong type argument: keymapp,[27]"というメッセージが。

tamagoをインストール。

インストール: emacs-w3m

aptでインストール。
1.4.3-0vl1

Vineでは、/etc/emacs-*/site-start.d/53w3m-init.elにある程度の初期設定がしてあるので、.それを参照しながら、emacsでオーバーライトする、

インストール: rsync

Zaurusとの同期をとるためにaptでrsyncをインストール。
2.6.3-0vl1

インストール: act

インストールといっても、必要なライブラリを入れてコピーするだけ。
Jperl.pmが入っていなかったので、aptでperl-jcodeをインストール。
無事act動作。

インストール: samba

sambaをaptでインストール

samba 3.0.14a-0vl0.1
samba-client 3.0.14a-0vl0.1

さらにメニューから「サービスの設定」でsmbを有効にする。

#vi /etc/samba/smb.conf
workgroup = rally

# /etc/init.d/smb restart
# smbpasswd -a nor

インストール: VMware 4

$ sudo rpm -ivh VMware-workstation-4.5.3-19414.i386.rpm

$ sudo vmware-config.pl

Do you want to use the
version "3.3.2" of compiler "/usr/bin/gcc"? [no] yes

What is the location of the directory of C header files that match your running
kernel? [/usr/src/linux/include]

The directory of kernel headers (version 2.4.31-0vl1.12) does not match your
running kernel (version 2.4.31-0vl1.8). Even if the module were to compile
successfully, it would not load into the running kernel.

カーネルヘッダが現在のカーネルと一致していない。
とりあえず、カーネルのアップデートをする。

カーネルをvl1.12にすると、うまくvmware-config.plが完了。

Anthyの英数字入力

Zaurus上のIMEをAnthy+Anthy.elからAnthy+egg+Tamagoにしようと思った。
理由は、1byte英数字の入力のたびに"l"キーを押し、また"Ctrl+j"を押すのが面倒だったからだ。
また、入力後、ひらがな、かたかなへのダイレクトな変換キーバインドがないのも、ちょっと不満だった。
が、Anthy+egg+Tamagoに関する情報を検索中に、1byte英数字入力には、"/"を押せばよいことがわかった。
ドキュメントに書いてあるのを見のがしたのだろうか。
まあ、とりあえず、最大の不満は解消されそうなので、もうしばらくAnthy.elでいくことにする。

w3mmeeをインストール

popfileの動作確認のために、テキストブラウザのw3mmeeをインストール。
w3m version w3m/0.3.2+mee-p24-19+moe-1.5.0

w3mmeeではなくw3mも選べたが、今回はw3mmeeにした。

# apt-get install w3mmee

多符号化対応w3m

なお、popfileのUIにアクセスした後に、imgのモジュールが無いと言われる。
そういえば、recommendにあったなと思い、インストール。

# apt-get install w3mmee-img

popfileをインストール

popfile v0.22.2 をインストール

local以外からも、webUI、popともアクセスにできるように設定。
日本語を使うので、libtext-kakasi-perlもインストール。

# apt-get install popfile
# apt-get install libtext-kakasi-perl

# /etc/init.d/popfile restart

Apache2インストール

新しいstarlet予定機にApache2をインストールした。

# apt-get install apache2

とりあえず、suexecを有効にするために、
# a2enmod

http://levin.rally.or.jp/のアクセスするとhttp://levin.rally.or.jp/apache2-default/に飛ばされてしまう。
設定ファイルを修正。

# cp /etc/apache2/sites-available/default /etc/apache2/sites-available/www
# vi /etc/apache2/sites-available/www
下記行をコメントアウト
#RedirectMatch ^/$ /apache2-default/

# a2dissite default
# a2ensite www
# /etc/init.d/apache2 reload

MySQLインストール

新しいstarlet予定機にMySQLをインストールした。

# apt-get install mysql-server

とりあえず、パスワードの設定を。

# /usr/bin/mysqladmin -u root password 'new-password'

Index of all entries

Home > Linux > Application Archive

Search
etc...
Feeds

Return to page top