FreeBSD-8.1-for-E6850 設定概論

Last Update (2022/05/20 09:33:31)

ミラーサイト [www.ceres.dti.ne.jp] [yk.rim.or.jp]

[ホームページ] [日記] [日記ファイル一覧] [読んでいる日記] [FreeBSD] [FreeBSD LINK] [検索]


2010.08.01 FreeBSD 8.1-RELEASE インストールメモ

ページ内目次

1.1.1. Core2Duo E6850機にFreeBSD 8.1 RELEASE インストール

FreeBSD 8.1-RELEASE リリースノート http://www.freebsd.org/releases/8.1R/announce.html

今回はWindows 7機からDVD-Rに焼いた媒体を使ってインストール。 一部で流行のzfsにはせず、普通にUFSを指定。 ちょっと勇気をだして + Softupdateを指定。

FreeBSD Boot Manager から起動時、以下のような感じで「F6 PXE」 なる謎の選択肢が出るが・・・ネットワークブート用らしい。

F1  FreeBSD


F6 PXE
Boot:  F1

この機械のネットワークインタフェースはmsk0という謎のデバイス。 man msk すると、「Marvell/SysKonnect Yukon II Gigabit Ethernet adapter driver」とのこと。 そういやそんなチップ使ってたなこの機械。

1.1.1.1. 設定を変更する前に 変更履歴の保存スクリプト

FreeBSDには標準インストールされているRCS(Revision Control System)を使って、 編集前〜編集後の設定を保存しておくシェルスクリプト。

vivc ファイル名 として使うと、RCSコマンドを使って適当に編集履歴を保存する。

ファイルを変更して保存した後に、ログメッセージを聞いてくるので、適当に入力して . (ピリオド)だけの行をEnterすると完了。

ファイル名の後ろに ,v をつけた名前で編集履歴が残るので、「うわ!やべぇ!変なトコ変えちゃったかも?」という事態に備えることができる。

今だとRCSよりGitとかMercurialを使っている人の方が多いと思うので、そのあたりは自分のお好みで工夫して欲しい。

cat > /usr/local/bin/vivc << "EOF"
#!/bin/sh
#
#  vi for version control
#
# $Id: vivc,v 1.17 2001/02/16 05:51:42 root Exp $
#

#
#  print usage message
#
usage() {
        echo vivc -- vi with version control.
        echo "usage)vivc filename"
}

#
#  check arg
#
if [ $# -eq 0 ] ; then
        usage
        exit 1
fi
if [ \! -r $1 ] ; then
        usage
        echo file $1 is not found. abort.
        exit 1
fi

#
#  do lock
#
if [ \! -r $1,v ] ; then
        ci -t-title -minitial -u $1
        if [ $? -ne 0 ]; then
                echo initial checkin failed. abort.
                exit 4
        fi
fi
if [ -w $1 ]; then
        echo hummm. writeable file. auto checkin.
        VIVC_TEMP=`mktemp $1.XXXXXXXX`
        if [ $? -ne 0 ]; then
                echo can not create temporary file. abort.
                exit 5
        fi
        mv $1 $VIVC_TEMP
        co -l $1
        if [ $? -ne 0 ]; then
                echo auto checkout failed. abort.
                mv $VIVC_TEMP $1
                exit 4
        fi
        mv $VIVC_TEMP $1
        ci -msomebody-modified-file -u $1
        if [ $? -ne 0 ]; then
                echo auto checkin failed. abort.
                exit 4
        fi
fi
if co -l $1 ; then
        echo checkout with lock ok.
else
        echo checkout with lock failed. abort.
        exit 2
fi
#
#  edit
#
if [ x"$EDITOR"x = x""x ] ; then
        if type emacs > /dev/null ; then
                EDITOR=emacs
        elif type vim > /dev/null ; then
                EDITOR=vim
        else
                EDITOR=vi
        fi
fi
if $EDITOR $1 ; then
        echo $EDITOR is ok.
else
        echo $EDITOR is failed.
fi
#
#  do unlock
#
if ci -u $1 ; then
        echo checkin with unlock is ok.
else
        echo checkin with unlock is failed. abort.
        exit 3
fi
#
#  end of file
#
EOF
chmod +x /usr/local/bin/vivc

1.1.2. FreeBSD 基本設定

/etc/rc.conf (存在する場合は /etc/rc.conf.local) 編集。

/etc/defaults/rc.conf、man rc.conf を参考に設定していく。

  hostname="e6850.tokyo3.nerv"
  keymap="us.iso"
  keyrate="fast"
  saver="daemon"
  sshd_enable="YES"

1.1.2.1. ネットワークの基本設定(DHCPクライアント用)

DHCPクライアントとしてFreeBSD機を設定する場合の例。

/etc/rc.conf (存在する場合は /etc/rc.conf.local) 編集。 ここでは、DHCPクライアントにする場合の設定項目を記載する。

  ifconfig_msk0="DHCP"

ifconfig_の後ろに付く文字列「msk0」は、ネットワークカードのデバイス名。 ifconfig -a して、表示される一覧の中から使えるものを利用しよう。

1.1.2.2. ネットワーク基本設定(固定IP用)

FreeBSD機をDHCPサーバにするなどの場合は、自分のIPアドレスを固定設定する必要がある。

あと、デフォルトルータ(デフォルトゲートウェイ)(略称デフォゲ)の設定と、DNSサーバの設定も必要。

/etc/rc.conf (存在する場合は /etc/rc.conf.local) 編集。 ここでは、FreeBSD機を固定IPにする場合の設定項目を記載する。

  ifconfig_msk0="192.168.1.23" # e6850
  defaultrouter="192.168.1.1"

/etc/resolv.conf編集

DNSサーバのIPアドレスを設定しておく。 プロバイダのDNSとか、自宅にブロードバンドルーターがある場合はそのIPアドレスを書いておく。

search tokyo3.nerv
nameserver 210.135.65.1
nameserver 210.135.65.2
nameserver 192.168.1.1

1.1.2.3. sshホストキーを前のマシンから移植する場合

  1. インストール前マシンで使用していたホストキーファイル/etc/ssh/ssh_host*key*を戻す。
  2. 隣のマシンにて、$(HOME)/.ssh/known_hostsから一時的にターゲットホストを外し、scpでコピー。
  3. kill -HUP [sshdのpid]すれば、元のホストキーファイルが使用される。

1.1.2.4. Windows機からのslogin用設定 (FreeBSD側sshd設定)

sshdの初期設定(/etc/ssh/sshd_config)では、パスワード認証を受け付けない。 以下のようなモードでログインする必要がある。

チャレンジ&レスポンス認証の方が安全なのだが、ウチではsshdの設定すこし緩くして、パスワード認証を許可する。(あまりオススメはしない)

  1. PasswordAuthentication の設定を有効にして、Poderosaからログイン可能にする。
  2. PermitRootLogin = yes にして、rootログインを許可する。
[root@e6850 ~]$ diff -uw  /etc/ssh/sshd_config.orig /etc/ssh/sshd_config      
--- /etc/ssh/sshd_config.orig   2010-07-19 11:17:37.000000000 +0900
+++ /etc/ssh/sshd_config        2010-08-01 22:51:42.000000000 +0900
@@ -42,7 +42,7 @@
 # Authentication:
 
 #LoginGraceTime 2m
-#PermitRootLogin no
+PermitRootLogin yes
 #StrictModes yes
 #MaxAuthTries 6
 #MaxSessions 10
@@ -62,7 +62,7 @@
 #IgnoreRhosts yes
 
 # Change to yes to enable built-in password authentication.
-#PasswordAuthentication no
+PasswordAuthentication yes
 #PermitEmptyPasswords no
 
 # Change to no to disable PAM authentication
[root@e6850 ~]$ 

ちいと甘い設定だが、家庭内用というとこで。

1.1.2.5. ユーザー追加、グループ追加、at cron 使用設定

普段使っている自分のユーザー(george)とグループ(george)を追加しておく。

  1. 自分のユーザーは、rootにsuできるように、wheelグループにも追加しておく
  2. 自分のユーザーは、shutdownできるように、operatorグループにも追加しておく。
  3. 手動で編集する場合はvipwコマンドを使って/etc/passwdファイルを編集する。(viなど普通のエディタで編集した場合は、別途データベース更新コマンドを入力する必要があるので、vipwを使うのが楽)
  4. /etc/groupは直接viで編集してOK。

編集後の/etc/groupは以下のような感じ。

wheel:*:0:root,george
daemon:*:1:
kmem:*:2:
sys:*:3:
tty:*:4:
operator:*:5:root,george
mail:*:6:
bin:*:7:

バッチ的に自動登録するならpw(8)が便利。

/etc/group編集。

ユーザーgeorgeをwheel,operatorに登録。 pw(8)を使った場合は自動で登録可能。

pw(1)を使って、自動的にグループとユーザーを作成するサンプル。

  #
  #  pwを使ってユーザー登録を行う
  #
  #  create home directory
  if [ ! -d /home ]; then
    mkdir /home
  fi
  #
  # 自分用ユーザー作成
  #
  pw groupadd -n george -g 1001  
  ( echo "george-s-password" ; sleep 1 ) | pw useradd -n george -u 1001 -c "Jun Obama" -b /home -e 0 -p 0 -g 1001 -G operator,wheel -m -s /usr/local/bin/bash -h /dev/fd1
  #
  # web公開用ユーザー作成
  #
  pw groupadd -n webpub -g 1002
  pw useradd -n webpub -c "Web Publish" -b /home -e 0 -p 0 -g webpub -m -s /usr/local/bin/bash
  passwd webpub
  # ここでパスワード入力
  #
  # テスト用ユーザー作成
  #
  pw groupadd -n smith -g 1003
  pw useradd -n smith -c "Test User" -b /home -e 0 -p 0 -g smith -m -s /usr/local/bin/bash
  passwd smith
  # ここでパスワード入力

全員がatを使えるようにする。

  touch /var/at/at.deny

全員がcrontabを使えるようにする。

  touch /var/cron/deny

1.1.2.6. /etc/hosts設定

/etc/hosts編集。 自マシン部分と、周辺のマシンを記入。

#
#  my hosts
#
192.168.1.1     setup     setup.tokyo3.nerv
192.168.1.11    casper    casper.tokyo3.nerv
192.168.1.12    asuka     asuka.tokyo3.nerv
192.168.1.13    athlon    athlon.tokyo3.nerv
192.168.1.14    magi      magi.tokyo3.nerv
192.168.1.15    m1ev      m1ev.tokyo3.nerv
192.168.1.16    melchiol  melchiol.tokyo3.nerv
192.168.1.17    fmvc      fmvc.tokyo3.nerv
192.168.1.18    zorac     zorac.tokyo3.nerv
192.168.1.19    archangel archangel.tokyo3.nerv
192.168.1.20    mary      mary.tokyo3.nerv
192.168.1.24    valkyrie  valkyrie.tokyo3.nerv
192.168.1.21    vaiosz    vaiosz.tokyo3.nerv
192.168.1.22    core2duo  core2duo.tokyo3.nerv
192.168.1.23    e6850     e6850.tokyo3.nerv
192.168.1.25    phenomII  phemonII.tokyo3.nerv
192.168.1.26    dv6       dv6.tokyo3.nerv
192.168.1.27    vubu9     vubu9.tokyo3.nerv
192.168.1.28    lynfield  lynfield.tokyo3.nerv
192.168.1.29    sheeva    sheeva.tokyo3.nerv
192.168.1.30    lynfield-vubu  lynfield-vubu.tokyo3.nerv

1.1.2.7. procfs追加

procfsを追加する。

psコマンドで、各プロセスの起動コマンドラインを表示できるようになる。 (見えすぎて困るという話もあるが...)

一番最後の行を/etc/fstabに追加する。

  ssh root@e6850 ~ $ cat /etc/fstab
  # Device                Mountpoint      FStype  Options         Dump    Pass#
  /dev/ad10s1b            none            swap    sw              0       0
  /dev/ad10s1a            /               ufs     rw              1       1
  /dev/acd0               /cdrom          cd9660  ro,noauto       0       0
  proc                    /proc           procfs  rw              0       0

1.1.2.8. ssh ユーザー用 公開鍵/秘密鍵 作成

ユーザー毎の秘密鍵〜公開鍵ペアを生成する。

  ssh-keygen -t dsa

上のコマンドを実行する。 保存場所を聞いてくるが、デフォルトでOK。 パスフレーズを聞いてくるので、入力する。

  [george@e6850 ~]$ ssh-keygen -t dsa
  Generating public/private dsa key pair.
  Enter file in which to save the key (/home/george/.ssh/id_dsa):    
  Enter passphrase (empty for no passphrase): 
  Enter same passphrase again: 
  Your identification has been saved in /home/george/.ssh/id_dsa.
  Your public key has been saved in /home/george/.ssh/id_dsa.pub.

公開鍵と秘密鍵のペアが ~/.ssh/id_dsa.pub と ~/.ssh/id_dsa に生成される。

~/.ssh/id_dsa.pubに作成した公開鍵の文字列は、別のマシンの ~/.ssh/authorized_keys に追加書き込みしておく。 (別のマシンの同じユーザーの公開鍵の文字列は、自分の機械の~/.ssh/authorized_keys に追加書き込みしておく。)

この設定で、パスワード認証やキーボードインタラクティブ(チャレンジ&レスポンス)認証ではなくて、 公開鍵〜秘密鍵認証を使ってログインすることになる。

以下のような感じでパスワードではなく、パスフレーズを聞いてくるようになる。

  [george@e6850 ~/.ssh]$ slogin dv6
  Enter passphrase for key '/home/george/.ssh/id_dsa': 

1.1.2.9. ssh-agent / ssh-add を使ったセッション単位の認証の継続

毎回パスフレーズ入力を要求されるとわずらわしい場合がある。 (シェルスクリプトからscpを連射している場合など) ssh-agentとssh-addを使って認証データをログインシェルが続いている限り覚えさせておくことができる。

ssh-agent / ssh-add の基本的な使い方は以下。

  [george@e6850 ~]$ ssh-agent
  SSH_AUTH_SOCK=/tmp/ssh-49u9keMHYF/agent.3236; export SSH_AUTH_SOCK;
  SSH_AGENT_PID=3237; export SSH_AGENT_PID;
  echo Agent pid 3237;

ssh-agentはバックグラウンドプロセスになり、UNIX domain socketで接続を待っている。

  [george@e6850 ~]$ SSH_AUTH_SOCK=/tmp/ssh-49u9keMHYF/agent.3236; export SSH_AUTH_SOCK;
  [george@e6850 ~]$ SSH_AGENT_PID=3237; export SSH_AGENT_PID;
  [george@e6850 ~]$ echo Agent pid 3237;
  Agent pid 3237

ssh-agentが表示した環境変数設定をログインシェル上で実行し、環境変数に UNIX domain socketとpidを記録。

  [george@e6850 ~]$ ssh-add
  Enter passphrase for /home/george/.ssh/id_dsa: 
  Identity added: /home/george/.ssh/id_dsa (/home/george/.ssh/id_dsa)

ssh-addで、ssh-agentにパスフレーズを追加記憶させる。

  [george@e6850 ~]$ slogin dv6
  FreeBSD 7.2-RELEASE (GENERIC) #1: Tue Jun  2 00:04:58 JST 2009
  Welcome to FreeBSD!
  ssh george@dv6 ~ $ 

記憶させたセッションが続いている限りパスフレーズなしで、隣のマシン(dv6)にログインできる。(scpもパスフレーズなしで可能)

毎回上の操作をするのも面倒なので、ログインシェル実行時に自動的にssh-agentを実行させておくのが良い。

ログインシェルにbashを使っている場合は、 ~/.bash_profile の最後に 以下の記述を追加しておく。

  # for ssh-agent
  exec ssh-agent $SHELL

これで、ログインした時にはssh-agent起動済み、環境変数設定済みの状態でログインシェルが起動している。

あとは ssh-add コマンドでパスフレーズを1回追加すれば、ログインシェルが生きている限りパスフレーズ入力は無用である。

1.1.3. portsから色々インストール

1.1.3.1. package置き場作成

今後はportsからインストールすることが多い。

あらかじめ、以下のコマンドを入力し、packageファイル置き場を作成しておくと、 バイナリパッケージファイルがこのディレクトリ内部に格納される。

  mkdir -p /usr/ports/packages

1.1.3.2. portsのターゲット色々

/usr/ports/Mk/bsd.port.mkを見ると、コメントで色々便利そうなターゲットが書いてある。 (つか、230KBもあるMakefileなんて色々おかしいw)

個人的によく使うものは以下。 どれも、cd /usr/ports ; make の後に続けて入力するターゲットである。 (例 cd /usr/ports ; make search key=postfix )

  1. search key=firefox | grep Path ... キーワードがわかっている場合は、search key=xxxx で検索できる。
  2. config-recursive ... portsにはコンパイル時条件をダイアログで質問してくるものがある。このオプションで、あらかじめコンパイル時設定を決めて保存しておくこともできる。「-recursive」付きの場合、依存関係にある他のportについても同様の処理を行う。
  3. rmconfig-recursive ... 上で設定を保存したコンパイル時条件を消去する。
  4. fetch-recursive ... 必要なソースファイルをネットワークから取得しておく。「-recursive」付きの場合、依存関係にある他のportについても以下省略。
  5. install ... ソース取得&コンパイル&インストールを行う
  6. deinstall ... インストールしたファイルの削除を行う
  7. package ... バイナリパッケージファイルを作成する。依存関係にあり、インストールされた他portについてはバイナリパッケージは作成しない。
  8. package-recursive ... バイナリパッケージファイルを作成する。「-recursive」付きの場合、依存関係にある他のportについても(ry。ただ、package-recursiveはよくわからんが、失敗することも多い。

1.1.3.3. shells/bashインストール

割と便利なシェル。

多機能・高機能路線といえばzshだが、bashは標準的にインストールされる場合も多く、覚えておいて損はない。

  cd /usr/ports/shells/bash && make config-recursive && make install package-recursive clean

vipwコマンドで/etc/passwdファイルを編集し、自分のログインシェルをbashに設定しておく。

編集後の/etc/passwdファイルの自分のユーザー部分は以下。

george:*:1001:1001:Jun Obama:/home/george:/usr/local/bin/bash

1.1.3.4. security/sudo

一時的にroot権限を得るとか、そんな場合に便利。

  cd /usr/ports/security/sudo && make config-recursive && make install package-recursive clean
  1. visudoコマンドを実行して設定ファイルを変更する。
  2. 自分のユーザーをsudoできる人に追加しておく。「george ALL=(ALL) ALL」
  3. デフォルトの設定では、前回パスワードを入力してから5分以上間隔があると、再度パスワード入力を求められるのだが、結構わずらわしい。先頭付近のDefaultsの下に、「Defaults timestamp_timeout=960」を追加すると、パスワードが必要になる間隔が960分(16時間)になる。
  4. 余談だが、ユーザー george から sudo ls の後にタイプするのは、ユーザーgeorgeのパスワードである。
  # password timeout is now 16hours.
  Defaults    timestamp_timeout=960
  
  # User privilege specification
  root    ALL=(ALL)  ALL
  george  ALL=(ALL)  ALL

あまりオススメはしないが、以下のように「NOPASSWD:」を入れておくと、 パスワードなしでsudoできる。

  # User privilege specification
  root    ALL=(ALL) NOPASSWD: ALL
  george  ALL=(ALL) NOPASSWD: ALL

1.1.3.5. net/rsyncインストール

変更のあったファイルだけ検出してコピーできる。 バックアップ用途とか、マシン引越し時に便利。

  cd /usr/ports/net/rsync && make config-recursive && make install package-recursive clean
1.1.3.5.1. rsyncを使った旧マシンからの引越し

rsyncを使って各ユーザーのホームディレクトリを上書きコピーする前に、 今のホームディレクトリをバックアップしておく。

  for i in root  home/george  home/webpub
  do
    cp -a /$i   /$i-e6850
  done

■rsync使い方の例1:

  rsync -av -e ssh --delete --exclude .ssh/  root@dv6:/root/ /root/
  rsync -av -e ssh --delete --exclude .ssh/  root@dv6:/home/george/ /home/george/
  rsync -av -e ssh --delete --exclude .ssh/  root@dv6:/home/webpub/ /home/webpub/

■rsync使い方の例2:

  rsync -nav -e ssh --delete --exclude '.*' root@dv6:/root/ /root/ | less
  rsync -nav -e ssh --delete --exclude '.*' root@dv6:/home/george/ /home/george/ | less
  rsync -nav -e ssh --delete --exclude '.*' root@dv6:/home/webpub/ /home/webpub/ | less

■rsync使い方の例3:

コピーが必要なディレクトリだけコピーして持ってくる。

  for i in bin Mail public_html
  do
    rsync -av -e ssh --delete --exclude '.*' root@dv6:/home/george/$i/ /home/george/$i/
  done
  rsync -av -e ssh --delete --exclude '.*' root@dv6:/home/webpub/ /home/webpub/
  rsync -av -e ssh --exclude '.*' root@dv6:/home/backup/ /home/backup/

1.1.3.6. editors/vim

vi系のエディタで、マルチウィンドウをサポートする高機能なvimをインストール。

  cd /usr/ports/editors/vim && make config-recursive && make install package-recursive clean

1.1.3.7. editors/emacs

emacsをインストールする。

  cd /usr/ports/editors/emacs && make config-recursive && make install package clean

~/.emacsに、以下のような設定を追加する。(EUCを使う場合)

;
;  それなりの日本語設定(EUC)
;
(set-language-environment "Japanese")
(prefer-coding-system 'euc-jp-unix)
(if (not window-system) 
  (progn
    (set-terminal-coding-system 'euc-jp)
    (set-keyboard-coding-system 'euc-jp)
    (set-buffer-file-coding-system 'euc-jp)
    (set-default-coding-systems 'euc-jp)
    (setq default-buffer-file-coding-systems 'euc-jp)
    (setq file-name-coding-system 'euc-jp)
  )
)

UTF-8を使う場合では、以下のような設定となる。

;
;  それなりの日本語設定(UTF-8)
;
(set-language-environment "Japanese")
(prefer-coding-system 'utf-8-unix)
(if (not window-system) 
  (progn
    (set-terminal-coding-system 'utf-8)
    (set-keyboard-coding-system 'utf-8)
    (set-buffer-file-coding-system 'utf-8)
    (set-default-coding-systems 'utf-8)
    (setq default-buffer-file-coding-system 'utf-8)
    (setq file-name-coding-system 'utf-8)
  )
)

その他、こまかい設定を~/.emacsに追記する。

;;; バックアップファイルを作らない
(setq backup-inhibited t)

;;; カーソルの位置が何文字目かを表示する
(column-number-mode t)

;;; カーソルの位置が何行目かを表示する
(line-number-mode t)

;;; スクロールを一行ずつにする
(setq scroll-step 1)

;;; auto-save禁止
(setq auto-save-default nil)

1.1.3.8. w3m

テキストで表示するWebブラウザ(ページャー)

cd /usr/ports/japanese/w3m && make config-recursive && make install package-recursive clean

libiconvでは、Apply patches to fix CP932 add EUCJP-MS にチェックを入れる。

1.1.3.9. nkf

日本語漢字フィルタ。文字コードの変換とかに使う。

cd /usr/ports/japanese/nkf && make install package clean

1.1.3.10. 日本語マニュアルページ

cd /usr/ports/japanese/man && make install package clean

cd /usr/ports/japanese/man-doc && make install package clean

1.1.3.11. today

cd /usr/ports/japanese/today && make install package clean

1.1.3.12. typist

キーボードタイピングの練習用に。

cd /usr/ports/japanese/typist && make config-recursive && make install package clean

コンパイル時にキーボードの種類を選択。

1.1.3.13. 日本語かな感じ変換 scim と anthy

cd /usr/ports/japanese/scim-anthy && make config-recursive && make install package clean

Remember to set environment variables XMODIFIERS and LANG:

  csh/tcsh: setenv XMODIFIERS @im=SCIM  ; setenv LANG ja_JP.eucJP
  sh/bash:  export XMODIFIERS='@im=SCIM'; export LANG=ja_JP.eucJP

To start the SCIM input method daemon, use command:

  scim -d

1.1.3.14. emacsからanthyを使う

Anthy Wiki Emacsから http://anthy.sourceforge.jp/cgi-bin/hiki/hiki.cgi?Emacs%A4%AB%A4%E9

~/.emacs に以下のコードを追加する。

; 日本語をデフォルトにする。
(set-language-environment "Japanese")
; anthy.el をロードできるようにする (必要に応じて)。
(push "/usr/local/share/emacs/site-lisp/anthy/" load-path)
; anthy.el をロードする。
(load-library "anthy")
; japanese-anthy をデフォルトの input-method にする。
(setq default-input-method "japanese-anthy")

1.1.3.15. emacsからWanderlust

Emacs上で動くメールソフト。

cd /usr/ports/mail/wanderlust-devel && make config-recursive && make install clean

インストール後、~/.emacsに以下を追加。

  (require 'wanderlust-startup)

設定ファイルのサンプルは /usr/local/share/examples/wanderlust 以下に格納されている。

1.1.3.16. procmail

■インストール

cd /usr/ports/mail/procmail && make config-recursive && make install package clean

■postfix側設定

postfixの設定はこの後行うが、既にpostfixインストール済みの場合は、 /usr/local/etc/postfix/main.cf 内部で、mailbox_commandにprocmailを指定する。

# 各個人のメールボックスに格納する時、procmailを使う
mailbox_command = /usr/local/bin/procmail

■procmailマシン共通デフォルト設定 /usr/local/etc/procmailrc

Maildir形式で処理するよう設定する。

SHELL=/bin/sh
PATH=/bin:/usr/bin:/usr/local/bin
DROPPRIVS=yes
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
#LOGFILE=$MAILDIR/procmail.log
#VERBOSE=ON

■procmail個人設定 ~/.forward

~/.forwardに、以下の内容を記載して、メール受信時にprocmailに処理させる。

"| IFS=' ' && exec /usr/local/bin/procmail -f- || exit 75"

Linux系のページを見ていると、最後に#ユーザー名と書いてあるサイトが多いけど、 FreeBSDのman 5 forwardにはそれらしい記載が無い。なんじゃらほい?

■個人設定 ~/.procmailrc

~/.procmailrcに、メールの振り分け処理内容を記載する。

MAILDIR=$HOME/Maildir/
DEFAULT=$MAILDIR
LOGFILE=$MAILDIR/procmail.log

# ホワイトリストが書いてあるファイルを指定
WHITELIST=$HOME/bin/mail-known-address.txt

# メーリングリスト設定例
#  FreeBSD-users-jp ML
:0
* ^X-sequence: FreeBSD-users-jp
.freebsd-users-jp/

# ホワイトリストフィルタ
# From:, Reply-To:, Sender:, From のどれかに
# ホワイトリストファイルのメールアドレスが含まれていたらメイン受信フォルダへ。
# FreeBSDのgrepは、-E -f fileで1行1拡張正規表現パターンとして検索してくれる。
:0
* ? test -s $WHITELIST
* ? (formail -x From: -x Reply-To: -x Sender: -x From | grep -E -f $WHITELIST)
$MAILDIR

#
#  特殊キーワード 6020-5440-3372 を本文に含むメールはメイン受信フォルダ行き
#
:0B
* 6020-5440-3372
$MAILDIR

#
#  iso-2022-jp mail selection
#  if iso-2022-jp found mail header, go to inbox folder.
#
:0
* iso-2022-jp
.inbox2/

#
#  iso-2022-jp mail selection
#  if iso-2022-jp found mail body, go to inbox folder.
#
:0B
* iso-2022-jp
.inbox2/

#
#  iso-2022-jp mail selection
#  if iso-2022-jp ESC sequence [ESC $ B 〜 ESC ( B] found mail body ,
#   go to inbox folder.
#
:0B
* $\$B.*\(B\$
.inbox2/

#
#  iso-2022-jp mail selection
#  if iso-2022-jp ESC sequence [ESC $ B 〜 ESC ( J] found mail body ,
#   go to inbox folder.
#
:0B
* $\$B.*\(J\$
.inbox2/

#
#  Other mails are sent to trash folder
#
:0
* .*
.trash/

1.1.3.17. fetchmail

■インストール

cd /usr/ports/mail/fetchmail && make config-recursive && make install package clean

■設定 ~/.fetchmailrc

■テスト

テスト中は、メール取得してもサーバにメールを残す感じで。

  fetchmail -v --keep

1.1.3.18. screen

cd /usr/ports/sysutils/screen && make config-recursive && make install package clean

とりあえず、全部にチェックをいれる。

1.1.3.19. Java インストール

最初に、javavmwrapperをインストールしておく。

cd /usr/ports/java/javavmwrapper && make install package clean

http://www.freebsdfoundation.org/downloads/java.shtml から diablo-caffe-freebsd7-i386-1.6.0_07-b02.tar.bz2 をダウンロードして /usr/ports/distfiles/ 以下にコピー。

http://java.sun.com/javase/downloads/index.jsp から Java SE Timezone Updater 1.4+ v1.3.12 (tzupdater-1_3_12-2009a.zip) をダウンロード。(要 Sun Online Account登録) /usr/ports/distfiles/ 以下にコピー。

http://java.sun.com/javase/downloads/ から、 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 6" to obtain the JCE policy file jce_policy-6.zip をダウンロードして、 /usr/ports/distfiles/ 以下にコピー。

cd /usr/ports/java/diablo-jdk16 && make config && make clean install package clean

コンフィギュレーションでは、全部にチェックを入れる。

1.1.3.20. net/tightvnc インストール

VNCクライアント専用の仮想Xサーバをメモリ上に作成する。

接続先マシンの実際のグラフィックカードが表示中のXサーバ画面とは関係が無い。 搭載しているビデオカードの解像度には関係なく、メモリさえあれば大きなVNC Server画面を提供することもできる。

  cd /usr/ports/net/tightvnc && make config-recursive && make install package-recursive clean

1.1.3.21. IPA提供のTrue Type 日本語フォント

cd /usr/ports/japanese/font-ipa && make config-recursive && make install package-recursive clean

cd /usr/ports/japanese/font-ipaex && make config-recursive && make install package-recursive clean

cd /usr/ports/japanese/font-ipa-uigothic && make config-recursive && make install package-recursive clean

1.1.3.22. jcode.pl

perl用日本語文字コード変換モジュール。

自作のperlスクリプトが使っているのでインストール。

cd /usr/ports/japanese/jcode.pl && make config-recursive && make install package-recursive clean

1.1.3.23. bind9.7 設定

上のサイトを参考に、bind 9.7.1 のインストール。

  cd /usr/ports/dns/bind97 && make config-recursive && make install clean

パッケージインストール時のメッセージ。

*************************************************************************
*           _  _____ _____ _____ _   _ _____ ___ ___  _   _             *
*          / \|_   _|_   _| ____| \ | |_   _|_ _/ _ \| \ | |            *
*         / _ \ | |   | | |  _| |  \| | | |  | | | | |  \| |            *
*        / ___ \| |   | | | |___| |\  | | |  | | |_| | |\  |            *
*       /_/   \_\_|   |_| |_____|_| \_| |_| |___\___/|_| \_|            *
*                                                                       *
*       If you are running BIND 9 in a chroot environment, make         *
*       sure that there is a /dev/random device in the chroot.          *
*                                                                       *
*       BIND 9 also requires configuration of rndc, including a         *
*       "secret" key.  The easiest, and most secure way to configure    *
*       rndc is to run 'rndc-confgen -a' to generate the proper conf    *
*       file, with a new random key, and appropriate file permissions.  *
*                                                                       *
*       The /etc/rc.d/named script in the base will do both for you.    *
*                                                                       *
*************************************************************************

rndcは、BINDに含まれているユーティリティで、ローカルホスト又はリモートホストからのnamed デーモンのコマンドライン管理(start,stop)をするもの。 namedデーモンへの権限のないアクセス防止するために、共有秘密鍵認証を使用している。

■rndc.key , rndc.confの作成と設定

  cd /etc/namedb
  cp -p /etc/namedb/named.conf /etc/namedb/named.conf.org
  rndc-confgen -a

作成されたrndc.keyの内容は以下のような感じ。

  ssh root@e6850 /etc/namedb $ cat rndc.key 
  key "rndc-key" {
          algorithm hmac-md5;
          secret "xxxxxxxxxxxxxxxxxxxxxxxx";
  };

/usr/local/etc/rndc.conf.sampleを参考に、上で生成されたキーファイルを取り込むように、rndc.confを作成。

options {
        default-server  localhost;
        default-key     "rndc-key";
};

server localhost {
        key     "rndc-key";
};

include "/etc/namedb/rndc.key";

ユーザーbindから読めるようにパーミッションとオーナーを調整

  chown bind:wheel /etc/namedb/rndc.key   /etc/namedb/rndc.conf
  chmod 400        /etc/namedb/rndc.key   /etc/namedb/rndc.conf

■named.conf編集

DNS設定のコンセプトは以下。

options {
        directory       "/etc/namedb/working";
        pid-file        "/var/run/named/pid";
        dump-file       "/var/dump/named_dump.db";
        statistics-file "/var/stats/named.stats";
        listen-on-v6    { none; };
        listen-on       { 127.0.0.1; 192.168.1.0/24; };
        forwarders      { 8.8.8.8; }; // Google DNS
};

include "/etc/namedb/rndc.key";

controls {
        inet 127.0.0.1 allow { 127.0.0.1; } keys { "rndc-key"; };
};

view "internal" {
    match-clients { localnets; };
    recursion yes;

    // The traditional root hints mechanism.
    zone "." { type hint; file "/etc/namedb/named.root"; };

    // RFC 1912 (and BCP 32 for localhost)
    zone "localhost"    { type master; file "/etc/namedb/master/localhost-forward.db"; };
    zone "127.in-addr.arpa"     { type master; file "/etc/namedb/master/localhost-reverse.db"; };

    // RFC 1912-style zone for IPv6 localhost address
    zone "0.ip6.arpa"   { type master; file "/etc/namedb/master/localhost-reverse.db"; };

    // "This" Network (RFCs 1912 and 3330)
    zone "0.in-addr.arpa"       { type master; file "/etc/namedb/master/empty.db"; };
    zone "168.192.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };

    // Link-local/APIPA (RFCs 3330 and 3927)
    zone "254.169.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };

    // my domain reverse
    zone "1.168.192.in-addr.arpa" {
        type master;
        file "/etc/namedb/master/1.168.192.in-addr.arpa";
    };
    // my domain zone
    zone "tokyo3.nerv" {
        type master;
        file "/etc/namedb/master/tokyo3.nerv.zone.internal";
    };

}; // end of view "internal"

■localhost正引きファイル(/etc/namedb/master/localhost-forward.db )

最初からFreeBSD 8.1にインストールされているものを使用。

$TTL 3h
localhost. SOA localhost. nobody.localhost. 42 1d 12h 1w 3h
        ; Serial, Refresh, Retry, Expire, Neg. cache TTL

        NS      localhost.

        A       127.0.0.1
        AAAA    ::1

■localhost逆引きファイル(/etc/namedb/masater/localhost-reverse.db)

最初からFreeBSD 8.1にインストールされているものを使用。

$TTL 3h
@ SOA localhost. nobody.localhost. 42 1d 12h 1w 3h
        ; Serial, Refresh, Retry, Expire, Neg. cache TTL

        NS      localhost.

1.0.0   PTR     localhost.

1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 PTR localhost.

■"internal"用正引きファイル(/etc/namedb/master/tokyo3.nerv.zone.internal)

$TTL    86400
@       IN      SOA     e6850.tokyo3.nerv.      root.e6850.tokyo3.nerv. (
        2010081400      ;Serial
        28800           ;Refresh
        7200            ;Retry
        604800          ;Expire
        86400           ;Minimum
)
                IN      NS      e6850.tokyo3.nerv.
                IN      MX      10      e6850.tokyo3.nerv.

core2duo        IN      A       192.168.1.22
e6850           IN      A       192.168.1.23
phenomII        IN      A       192.168.1.25
dv6             IN      A       192.168.1.26
lynfield        IN      A       192.168.1.28

■"internal"用逆引きファイル(/etc/namedb/master/1.168.192.in-addr.arpa)

$TTL    86400
@       IN      SOA     e6850.tokyo3.nerv.      root.e6850.tokyo3.nerv. (
        2010081400      ;Serial
        28800           ;Refresh
        7200            ;Retry
        604800          ;Expire
        86400           ;Minimum
)
        IN      NS      e6850.tokyo3.nerv.

22      IN      PTR     core2duo.tokyo3.nerv.
23      IN      PTR     e6850.tokyo3.nerv.
25      IN      PTR     phenomII.tokyo3.nerv.
26      IN      PTR     dv6.tokyo3.nerv.
28      IN      PTR     lynfield.tokyo3.nerv.

■/etc/rc.conf編集(固定IP化)

ifconfig_msk0="192.168.1.23"
defaultrouter="192.168.1.1"

■/etc/resolv.conf編集

nameserver 127.0.0.1

■/etc/rc.conf編集(named有効化)

named_enable="YES"              # Run named, the DNS server (or NO).
named_program="/usr/local/sbin/named" # Path to named, if you want a different one.
named_conf="/etc/namedb/named.conf"     # Path to the configuration file
#named_flags=""                 # Use this for flags OTHER than -u and -c
named_pidfile="/var/run/named/pid" # Must set this in named.conf as well
named_uid="bind"                # User to run named as
named_chrootdir="/var/named"    # Chroot directory (or "" not to auto-chroot it)
named_chroot_autoupdate="YES"   # Automatically install/update chrooted
                                # components of named. See /etc/rc.d/named.
named_symlink_enable="YES"      # Symlink the chrooted pid file
named_wait="NO"                 # Wait for working name service before exiting
named_wait_host="localhost"     # Hostname to check if named_wait is enabled
named_auto_forward="NO"         # Set up forwarders from /etc/resolv.conf
named_auto_forward_only="NO"    # Do "forward only" instead of "forward first"

■named起動

  /etc/rc.d/named start

自動でchroot環境を作ってくれるので楽だった。

■動作確認

  dig @127.0.0.1    tokyo3.nerv soa # SOAレコード確認
  dig @127.0.0.1    tokyo3.nerv ns # NSレコード確認
  dig @127.0.0.1    localhost # Aレコード確認
  dig @127.0.0.1 -x 127.0.0.1 # 逆引き確認
  dig @127.0.0.1    e6850.tokyo3.nerv # Aレコード確認
  dig @127.0.0.1 -x 192.168.1.23 # 逆引き確認
  dig @127.0.0.1    www.freebsd.org # 外部ホスト確認
  dig @127.0.0.1    www.yk.rim.or.jp # 外部ホスト確認
  dig @127.0.0.1    www.ceres.dti.ne.jp # 外部ホスト確認

1.1.3.24. sendmail 設定 sendmail.cf調整

postfixを使うかsendmailを使うか悩んだが、とりあえずsendmail.cfの設定から。 freebsd.mcを元に改造をかけてgeorge.mcを作成。

  cd /etc/mail
  cp freebsd.mc george.mc

george.mcへの変更点を差分で示す。

ssh root@e6850 /etc/mail $ diff -uw freebsd.mc george.mc
--- freebsd.mc  2010-07-19 11:17:37.000000000 +0900
+++ george.mc   2010-08-08 00:48:55.000000000 +0900
@@ -54,6 +54,14 @@
 FEATURE(mailertable, `hash -o /etc/mail/mailertable')
 FEATURE(virtusertable, `hash -o /etc/mail/virtusertable')
 
+MASQUERADE_AS(yk.rim.or.jp)dnl
+FEATURE(`masquerade_envelope')dnl
+FEATURE(`local_no_masquerade')dnl
+FEATURE(`accept_unresolvable_domains')dnl
+FEATURE(`accept_unqualified_senders')dnl
+
+RELAY_DOMAIN(192.168.1)dnl
+
 dnl Uncomment to allow relaying based on your MX records.
 dnl NOTE: This can allow sites to use your server as a backup MX without
 dnl       your permission.
@@ -90,3 +98,11 @@
 define(`confPRIVACY_FLAGS', `authwarnings,noexpn,novrfy')
 MAILER(local)
 MAILER(smtp)
+
+dnl enable SMTP-Auth
+dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')
+dnl enable SMTP-Auth
+dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')
+
+dnl max mail size is 64MB
+define(`confMAX_MESSAGE_SIZE',`64485760')

/etc/rc.conf内部にて、以下の設定を記入。 sendmail_enableの意味が変わって、マシン内SMTPをsendmailにさせる場合にYESに設定する。 マシン外部からsendmailでSMTPを受け付ける場合は、sendmail_enable="NO" かつ sendmail_submit_enable="NO" かつ sendmail_outbound_enable="YES" でなければならない。 詳細は man rc.sendmail(8) と /etc/rc.d/sendmail スクリプトを見て欲しい。 (微妙に man rc.sendmail(8)の記述が間違ってる気がする...) あと、 sendmail_outbound_flagsに -bd が抜けていて、デーモン起動しないのでこちらも修正。

  # Mail Transfer Agent (MTA)
  sendmail_enable="NO"
  sendmail_submit_enable="NO"
  sendmail_outbound_enable="YES"
  sendmail_outbound_flags="-L sm-queue -bd -q30m"
  sendmail_msp_queue_enable="YES"

以下のコマンドでsendmail.cfを作成し、インストール。

  cd /etc/mail
  make SENDMAIL_MC=george.mc all install

mtaを再起動。

  sh /etc/rc.sendmail restart

さて、動作確認のため、マシン再起動をかけてみたが、sendmail が自動起動しないな・・・なんでだろ?

/etc/rc.d/sendmailの下の方にあるsendmail_outbound_enableのif文を変更する。

ssh root@e6850 ~ $ diff -uw sendmail.orig /etc/rc.d/sendmail 
--- sendmail.orig       2010-08-08 02:27:24.000000000 +0900
+++ /etc/rc.d/sendmail  2010-08-08 02:30:01.000000000 +0900
@@ -85,9 +85,12 @@
 fi
 
 if checkyesno sendmail_outbound_enable; then
-       name="sendmail_outbound"
-       rcvar=`set_rcvar`
+       name="sendmail"
+       rcvar="sendmail_outbound_enable"
        start_cmd="${command} ${sendmail_outbound_flags}"
+       start_cmd=
+       pidfile=${sendmail_pidfile:-/var/run/sendmail.pid}
+       required_files="/etc/mail/sendmail.cf"
        run_rc_command "$1"
 fi
 
ssh root@e6850 ~ $ 

せっかくsendmail_outbound_enableのif文があるのだが...これじゃ動かないw name=sendmailである必要がある。 pidファイル名とか、/etc/sendmail.cfと/etc/mail/sendmail.cf更新チェックで使っているので。

あと、start_cmdを指定すると、起動時にStarting sendmail.が出ないのと、/etc/defaults/rc.conf内部のsendmail_outbound_flagsに -bd が指定されていないのでデーモン起動しない。

マジでsendmailを外向けMTAとして使っている人って居ないのか。

postfix使うかな...。

1.1.3.25. postfix インストール

postfixはsendmailを置き換えることができるように、コマンド名やオプションなどユーザーに見える部分は似せてあるらしい。 SMTP認証プラグインをプラグインとして追加できる。 dovecotも使える。 今流行のMTA。

cd /usr/ports/mail/postfix && make config-recursive && make install package-recursive clean

上のページを参考に設定開始。

■/usr/local/etc/postfix/main.cf設定

# 各種パス名指定は FreeBSD 8.1 ports/postfix設定に従う
queue_directory = /var/spool/postfix
command_directory = /usr/local/sbin
daemon_directory = /usr/local/libexec/postfix
data_directory = /var/db/postfix
mail_owner = postfix

# alias database
alias_database = hash:/etc/aliases
# alias map
alias_maps = hash:/etc/aliases

# DynDNSのMXに登録してあるドメイン名
dyndnsdomain = xxxxxxxx.homeip.net
# DynDNSのMXに登録してあるメール処理サーバ名
dyndnsMX = xxxxxxxx.homeip.net

# ホスト名はLAN側の名前
myhostname = e6850.tokyo3.nerv
# ドメイン名はLAN側の名前
mydomain = tokyo3.nerv

# 外にメールを出すときに付加するドメイン名は、DynDNS ドメイン名
myorigin = $dyndnsdomain

# メール受信TCP socket待ちは全インタフェースで行う
inet_interfaces = all
# このメールサーバはNATの内側にあるので、WAN側の固定IPアドレスを記載
proxy_interfaces = xx.yyy.zz.ii
# このメールサーバがメールを配信する範囲は自マシン、DynDNS MX登録マシン、DynDNSドメイン
mydestination = $myhostname, localhost.$mydomain, localhost, $dyndnsdomain, $dyndnsMX

# メールを受信する(Rejectしない)宛先一覧。
# UNIXアカウントがある者、エイリアスマップに登録されている者
local_recipient_maps = unix:passwd.byname $alias_maps
# メール宛先ユーザーが存在しない場合は、エラーコード 550でRejectする。
unknown_local_recipient_reject_code = 550
# メールのリレーを受け付けるクライアントは、サブネット内に限定
mynetworks_style = subnet
# サブネット内の範囲は、192.168.1.* または 127.* とする
mynetworks = 192.168.1.0/24, 127.0.0.0/8
# メールのリレーを受け付ける宛先指定。配送先と同じ。
relay_domains = $mydestination

# プロバイダのメールサーバにリレーしたい場合は以下。
# relayhost = mail.yk.rim.or.jp

# ドメイン名のつけかえ指定。DynDNSの名前とする。個々のマシン名は消えてドメイン名のみ残る。
masquerade_domains = $dyndnsdomain
# ドメイン名のつけかえを行う範囲を全部に指定。
# masquerade_classes = envelope_sender, envelope_recipient, header_sender, header_recipient

# MailDir形式で、各個人のホームディレクトリにメールを配信する。(var/spool/mailは使わない)
home_mailbox = Maildir/
# 各個人のメールボックスに格納する時、procmailを使う
mailbox_command = /usr/local/bin/procmail

# SMTPのバージョン表示はしない。
smtpd_banner = $myhostname ESMTP $mail_name

# メールボックスのサイズ制限(1人) (1GB)
mailbox_size_limit = 1073741824
# メールのサイズ制限(1通) (100MB)
message_size_limit = 104857600


# Postfix同梱版各種コマンドのパス指定など
sendmail_path = /usr/local/sbin/sendmail
newaliases_path = /usr/local/bin/newaliases
mailq_path = /usr/local/bin/mailq
setgid_group = maildrop
html_directory = /usr/local/share/doc/postfix
manpage_directory = /usr/local/man
sample_directory = /usr/local/etc/postfix
readme_directory = /usr/local/share/doc/postfix

# SMTP-AUTH の設定 SASL経由でDovecot-authを使用
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination

# end of file

■/etc/rc.conf設定 sendmail 停止

sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"

■/etc/mail/mailer.conf

postfix提供の互換コマンドを使う設定とする

sendmail	/usr/local/sbin/sendmail
send-mail	/usr/local/sbin/sendmail
mailq		/usr/local/sbin/sendmail
newaliases	/usr/local/sbin/sendmail

■/etc/aliases設定

postfixはroot権限では動かさないので、Maildir形式の場合、root宛てのメールを配送できない。 (~root/Maildirに書き込めない)

そこで、/etc/aliasesにて、root宛てのメールを一般ユーザー(george)に転送しておく。

# Pretty much everything else in this file points to "root", so
# you would do well in either reading root's mailbox or forwarding
# root's email from here.

# root: me@my.domain
root: george

/etc/aliasesを編集した後は、newaliasesコマンドを実行して、aliases.dbファイルを更新する。

  newaliases

■/etc/rc.conf設定

postfix_enable="YES"

■postfix起動

  /usr/local/etc/rc.d/postfix start

■既存ユーザー用メールディレクトリ作成

  mkdir -p /root/Maildir/new
  mkdir -p /root/Maildir/cur
  mkdir -p /root/Maildir/tmp
  chmod -R 700 /root/Maildir
  for u in george
  do
    mkdir -p /home/$u/Maildir/new
    mkdir -p /home/$u/Maildir/cur
    mkdir -p /home/$u/Maildir/tmp
    chmod -R 700 /home/$u/Maildir
    chown -R $u:$u /home/$u/Maildir
  done

■新規ユーザー用メールディレクトリ作成

  mkdir -p /usr/share/skel/Maildir/new
  mkdir -p /usr/share/skel/Maildir/cur
  mkdir -p /usr/share/skel/Maildir/tmp
  chmod -R 700 /usr/share/skel/Maildir/

■メール中継チェック

spamメールの踏み台になってしまうと、メールサーバがブラックリストに登録され、メールがブロックされてしまう。

以下のサイトなどを使って、自分のメールサーバが中継に使用できないことをチェックしておく。

http://www.abuse.net/relay.html

「Address to test:(as host name or dotted quad)」欄にメールサーバのホスト名、またはIPアドレスを入れ、 「Test for relay」ボタンを押すとリアルタイムでチェックしてくれる。

以下のような表示が最後に出てくれば、メールの中継は許可されていないという意味。

Relay test result
All tests performed, no relays accepted.

1.1.3.26. procmail 設定

■Procmail設定

/usr/local/etc/procmailrcを編集。

Maildir形式でメールを受信して書き込む指定を行う。

SHELL=/bin/sh
PATH=/bin:/usr/bin:/usr/local/bin
DROPPRIVS=yes
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
#LOGFILE=$MAILDIR/procmail.log
#VERBOSE=ON

1.1.3.27. dovecot 設定

上のサイトを見ながら設定開始。

■dovecot設定

/usr/local/etc/dovecot.confを編集

# Dovecot configuration file

# dovecotが提供するサービス(プロトコル)
#protocols = imap pop3 imaps pop3s
protocols = imap

# plain text 認証を禁止する
disable_plaintext_auth = yes

# SSL/TLS サポートはしない
ssl = no

# maildir形式を使用。各ユーザのホームディレクトリ直下のMaildirを使用
mail_location = maildir:~/Maildir

# メールファイル操作をする時のグループID
mail_privileged_group = mail

# ファイルロックはO_EXCLを信じる
# (O_EXCLはNFS v3上、および、ローカルファイルシステム上で使用できる)
dotlock_use_excl = yes

# psで見た場合、ユーザー名とIPアドレスを見せる
verbose_proctitle = yes

# 有効なUIDの範囲
# (FreeBSD 8.xの場合、一般ユーザーは1001から開始)
first_valid_uid = 1001
#last_valid_uid = 0

# 有効なGIDの範囲
# (FreeBSD 8.xの場合、一般ユーザーは1001から開始)
first_valid_gid = 1001
#last_valid_gid = 0

# メールをコピーする際にハードリンクを使用する
maildir_copy_with_hardlinks = yes

# imapプロトコルの設定
protocol imap {
  # メールクライアントのバグ回避
  imap_client_workarounds = delay-newmail netscape-eoh tb-extra-mailbox-sep
}
  
# pop3プロトコルの設定
protocol pop3 {
  # UIDLの形式はUW-imap, Courier, Cyrus, tpop3dでバラバラ。以下の設定なら共通で使える。
  pop3_uidl_format = %08Xu%08Xv

  # メールクライアントのバグ回避
  pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}

# Local Delivery Agent設定
protocol lda {
  # メール送信に使用するバイナリ。Postfixの方を使用
  sendmail_path = /usr/local/sbin/sendmail
}

# 認証時、ユーザー名の検索は、全部小文字にしてから比較する
auth_username_format = %Lu

# デフォルトの認証設定
auth default {
  # 以下から認証方式を選択
  #   plain login digest-md5 cram-md5 ntlm rpa apop anonymous gssapi otp skey
  #   gss-spnego
  # 注意 : disable_plaintext_auth 設定にも影響を受ける
  # mechanisms = plain login cram-md5
  mechanisms = cram-md5

  # パスワードデータベース設定 ファイルを使う
  passdb passwd-file {
    args = /usr/local/etc/dovecot.users
  }

  # ユーザーデータベース設定 ファイルを使う パスワードと共通
  userdb passwd-file {
    args = /usr/local/etc/dovecot.users
  }

  # ユーザーデータベースとパスワードデータベースにアクセスする時のUNIXアカウント
  # pamとshadowのみrootが必要。
  user = root

  # 認証インタフェースを他のプログラムから使えるようにする
  socket listen {
    # Dovecotのlocal delivery agentがメールボックスの位置を知るのに使う
    master {
      path = /var/run/dovecot/auth-master
      mode = 0600
    }
    # postfixからの認証問い合わせを受け付けるためのUNIX domain socket
    client {
      path = /var/spool/postfix/private/auth
      mode = 0660
      user = postfix
      group = postfix
    }
  }
}

# end of file

■/usr/local/etc/dovecot.users ユーザーデータベース兼パスワードデータベースファイル作成

dovecotpwコマンドを使って、パスワードをハッシュ化して表示

  dovecotpw 
  ssh root@e6850 /usr/local/etc $ dovecotpw 
  Enter new password: 
  Retype new password: 
  {CRAM-MD5}d2xxxxxxx48xxxxxf0cxxxxxxxxxb4xxxxxxxxexxxxxx

ユーザーデータベース兼パスワードファイルを作成する

  touch /usr/local/etc/dovecot.users
  chmod 0600 /usr/local/etc/dovecot.users

先ほど表示したハッシュ化パスワードを 「ユーザー名:ハッシュ済みパスワード:uid:gid:(gecos):ホームディレクトリ:(shell):extra」 の1行形式で/usr/local/etc/dovecot.usersに記載。

george:{CRAM-MD5}d2xxxxxxx48xxxxxf0cxxxxxxxxxb4xxxxxxxxexxxxxx:1001:1001::/home/george::

■/etc/rc.conf設定

  dovecot_enable="YES"

■dovecot起動

  /usr/local/etc/rc.d/dovecot start

1.1.4. X11関係のインストール

1.1.4.1. HAL設定

■hald, dbus起動設定 /etc/rc.conf編集

FreeBSD Handbook の記述に従って、以下の記述を/etc/rc.confに追加する。

  hald_enable="YES"

追加後、shutdown -r nowする。

haldは、ハードウェア情報収集デーモン。 X serverや、いくつかのソフトからハードウェア情報を得る窓口として使用される場合がある。

もっとも、haldが有効になっていると、こんなキーボードやマウスは知らないから無視するよ!などと、かえってソフトが動作しない場合もあり、必須というわけではない。

最近では、HALは旧式のものとみなされており、使わない方向のLinuxディストリビューションが多いらしい。

1.1.4.2. dbus設定

FreeBSD Handbook の記述に従って、以下の記述を/etc/rc.confに追加する。

  dbus_enable="YES"

追加後、shutdown -r nowする。

dbusはX11アプリケーション間メッセージ通信用のデーモン。 これは有効にしておいて良いと思う。

1.1.4.3. Xサーバのインストール

さすがに全部コンパイルするのは大変なので、バイナリパッケージを使うと良い。

  pkg_add -r xorg

全部コンパイルする場合は以下。

  cd /usr/ports/x11/xorg && make install clean

1.1.4.4. Xサーバ設定

■X11の設定。

  Xorg -configure

Xorg -configure を実行すると、グラフィックカード情報などを調査して、/root/xorg.conf.new を作成してくれる。

/root/xorg.conf.new を適当に編集した後、/etc/X11/xorg.confにコピーしてXサーバの表示テストを行う。

Xサーバの表示テストを行う場合は、 -retro オプションを付けるのが良いらしい。 -retroをつけないと、真っ黒な画面しか出なくて、動いているのかわからない。

  Xorg -config /etc/X11/xorg.conf -retro

動いていれば、白黒ドット模様の背景に×マークのマウスカーソルが表示される。

■キーボードやマウスが動かない場合

/var/log/X.log.0に以下のような警告メッセージが出て、キーボードとマウスが効かない場合は、

  (WW) AllowEmptyInput is on, devices using drivers 'kbd', 'mouse' or 'vmmouse' will be disabled.
  (WW) Disabling Mouse0
  (WW) Disabling Keyboard0

/etc/X11/xorg.confに以下のように記載し、HAL(hald)で得た情報を無視させる。

  Section "ServerFlags"
     # pattern(3) do not use HAL
     Option   "AutoAddDevices"    "False"
     Option   "AutoEnableDevices" "False"
     Option   "AllowEmptyInput"   "False"
  EndSection

というわけで、できあがった/etc/X11/xorg.confは以下。

e6850用(Radeon HD 4850)

ちなみに、ウチではvesaでないとうまく動作しなかった。

Section "ServerLayout"
        Identifier     "X.org Configured"
        Screen      0  "Screen0" 0 0
        InputDevice    "Mouse0" "CorePointer"
        InputDevice    "Keyboard0" "CoreKeyboard"
EndSection

Section "ServerFlags"
   # pattern(3) do not use HAL
   Option   "AutoAddDevices"    "False"
   Option   "AutoEnableDevices" "False"
   Option   "AllowEmptyInput"   "False"
EndSection

Section "Files"
        ModulePath   "/usr/local/lib/xorg/modules"
        FontPath     "/usr/local/lib/X11/fonts/misc/"
        FontPath     "/usr/local/lib/X11/fonts/TTF/"
        FontPath     "/usr/local/lib/X11/fonts/OTF"
        FontPath     "/usr/local/lib/X11/fonts/Type1/"
        FontPath     "/usr/local/lib/X11/fonts/100dpi/"
        FontPath     "/usr/local/lib/X11/fonts/75dpi/"
EndSection

Section "Module"
        Load  "extmod"
        Load  "record"
        Load  "dbe"
        Load  "glx"
        Load  "dri"
        Load  "dri2"
EndSection

Section "InputDevice"
        Identifier  "Keyboard0"
        Driver      "kbd"
EndSection

Section "InputDevice"
        Identifier  "Mouse0"
        Driver      "mouse"
        Option      "Protocol" "auto"
        Option      "Device" "/dev/sysmouse"
        Option      "ZAxisMapping" "4 5 6 7"
EndSection

Section "Monitor"
        #DisplaySize      410   310     # mm
        Identifier   "Monitor0"
        VendorName   "DEL"
        ModelName    "DELL 2001FP"
        HorizSync    31.0 - 80.0
        VertRefresh  56.0 - 76.0
        Option      "DPMS"
EndSection

Section "Device"
        ### Available Driver options are:-
        ### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
        ### <string>: "String", <freq>: "<f> Hz/kHz/MHz"
        ### [arg]: arg optional
        #Option     "NoAccel"                   # [<bool>]
        #Option     "SWcursor"                  # [<bool>]
        #Option     "Dac6Bit"                   # [<bool>]
        #Option     "Dac8Bit"                   # [<bool>]
        #Option     "BusType"                   # [<str>]
        #Option     "CPPIOMode"                 # [<bool>]
        #Option     "CPusecTimeout"             # <i>
        #Option     "AGPMode"                   # <i>
        #Option     "AGPFastWrite"              # [<bool>]
        #Option     "AGPSize"                   # <i>
        #Option     "GARTSize"                  # <i>
        #Option     "RingSize"                  # <i>
        #Option     "BufferSize"                # <i>
        #Option     "EnableDepthMoves"          # [<bool>]
        #Option     "EnablePageFlip"            # [<bool>]
        #Option     "NoBackBuffer"              # [<bool>]
        #Option     "DMAForXv"                  # [<bool>]
        #Option     "FBTexPercent"              # <i>
        #Option     "DepthBits"                 # <i>
        #Option     "PCIAPERSize"               # <i>
        #Option     "AccelDFS"                  # [<bool>]
        #Option     "IgnoreEDID"                # [<bool>]
        #Option     "CustomEDID"                # [<str>]
        #Option     "DisplayPriority"           # [<str>]
        #Option     "PanelSize"                 # [<str>]
        #Option     "ForceMinDotClock"          # <freq>
        #Option     "ColorTiling"               # [<bool>]
        #Option     "VideoKey"                  # <i>
        #Option     "RageTheatreCrystal"        # <i>
        #Option     "RageTheatreTunerPort"      # <i>
        #Option     "RageTheatreCompositePort"  # <i>
        #Option     "RageTheatreSVideoPort"     # <i>
        #Option     "TunerType"                 # <i>
        #Option     "RageTheatreMicrocPath"     # <str>
        #Option     "RageTheatreMicrocType"     # <str>
        #Option     "ScalerWidth"               # <i>
        #Option     "RenderAccel"               # [<bool>]
        #Option     "SubPixelOrder"             # [<str>]
        #Option     "ShowCache"                 # [<bool>]
        #Option     "ClockGating"               # [<bool>]
        #Option     "VGAAccess"                 # [<bool>]
        #Option     "ReverseDDC"                # [<bool>]
        #Option     "LVDSProbePLL"              # [<bool>]
        #Option     "AccelMethod"               # <str>
        #Option     "DRI"                       # [<bool>]
        #Option     "ConnectorTable"            # <str>
        #Option     "DefaultConnectorTable"     # [<bool>]
        #Option     "DefaultTMDSPLL"            # [<bool>]
        #Option     "TVDACLoadDetect"           # [<bool>]
        #Option     "ForceTVOut"                # [<bool>]
        #Option     "TVStandard"                # <str>
        #Option     "IgnoreLidStatus"           # [<bool>]
        #Option     "DefaultTVDACAdj"           # [<bool>]
        #Option     "Int10"                     # [<bool>]
        #Option     "EXAVSync"                  # [<bool>]
        #Option     "ATOMTVOut"                 # [<bool>]
        #Option     "R4xxATOM"                  # [<bool>]
        #Option     "ForceLowPowerMode"         # [<bool>]
        #Option     "DynamicPM"                 # [<bool>]
        #Option     "NewPLL"                    # [<bool>]
        #Option     "ZaphodHeads"               # <str>
        Identifier  "Card0"
        # Driver      "radeonhd"
        Driver      "vesa"
        # Driver      "radeon"
        VendorName  "ATI Technologies Inc"
        BoardName   "RV770 [Radeon HD 4850]"
        BusID       "PCI:1:0:0"
EndSection

Section "Screen"
        Identifier "Screen0"
        Device     "Card0"
        Monitor    "Monitor0"
        SubSection "Display"
                Viewport   0 0
                Depth     24
                Modes     "1600x1200"
                # Modes     "1024x768"
        EndSubSection
EndSection

startx で試しに起動。ウィンドウマネージャはtwm、xtermが3個、xclockがインストール済みならxclockが起動するはず。

一番大きなxtermをexitすればXサーバも終了する。

1.1.4.5. Xのデスクトップ環境 xfce4

軽量なデスクトップ環境 xfce4 。 xfce バージョン4からはGtk2+で書き直されたらしい。

さすがにこれはコンパイルするには大物すぎるので、バイナリパッケージを使う。

  pkg_add -r xfce4

コンパイルする場合は以下。

  cd  /usr/ports/x11-wm/xfce4 && make install clean

startxfce4で実行。

xfce4でソフトウェアを起動するときは、デスクトップを右クリックしてGNOMEメニューから選択するか、 画面左下のxfceメニューから選択する。

1.1.4.6. portupgrade

rubyで書かれたports支援ツール。

インストールされた全てのports/packagesを再ビルドすることもできる。

  cd  /usr/ports/ports-mgmt/portupgrade && make config-recursive && make install clean

使用例をいくつか以下に示す。


# xfce4と名前の付いたパッケージを再ビルド&インストールする
portupgrade          --force  --force-config  --package   xfce4
portupgrade          --force  --force-config  --package   twm
portupgrade          --force  --force-config  --package   emacs
portupgrade          --force  --force-config  --package   gnome2
portupgrade          --force  --force-config  --package   xorg
portupgrade          --force  --force-config  --package  -R  hal


# xfce4と名前の付いたパッケージを再ビルド&インストールする
portupgrade          --force  --force-config  --package  --recursive  xfce4

# インストールされた全てのports/packagesを再ビルドする
portupgrade  --all   --force  --force-config  --package  --recursive

1.1.4.7. gnome2

これは大物なので、コンパイル済みのバイナリパッケージを使う。

  pkg_add -r gnome2

■ ~/.xinitrcの配置

ホームディレクトリに.xinitrcが無い場合は、/usr/X11R6/lib/X11/xinit/xinitrcをコピーする。

  cp /usr/X11R6/lib/X11/xinit/xinitrc ~/.xinitrc

■ ~/.xinitrcの変更

~/.xinitrcの以下の部分をすべてコメントにする。

  #twm &
  #xclock -geometry 50x50-1+1 &
  #xterm -geometry 80x50+494+51 &
  #xterm -geometry 80x20+494-0 &
  #exec xterm -geometry 80x66+0+0 -name login

更に、最下行に以下を追加する。

  exec gnome-session

■gnome2 実行

  startx

でXが起動し、gnome2になる。

1.1.5. Webサーバ関連

1.1.5.1. apache 2.2 のインストール

cd /usr/ports/www/apache22 && make config-recursive && make install package clean

コンフィギュレーションは、デフォルトのまま。

/etc/rc.confに、以下の内容を追記。

  # for apache 2.2
  apache22_enable="YES"
  apache22_http_accept_enable="YES"

/usr/local/etc/apache22/httpd.confの編集 以下の内容を記述する。

  ServerName e6850.tokyo3.nerv:80  

apache設定ファイルの文法チェックを行う。

  apachectl configtest

apacheを起動する。

  /usr/local/etc/rc.d/apache22 start

試験アクセスを行う。apacheが動作している場合は、It works!と表示される。

  http://e6850.tokyo3.nerv/
  http://dv6.tokyo3.nerv/

ログファイルの分割設定

/etc/newsyslog.confを編集して、以下の行を追加する。

後でヴァーチャルホスト設定を行うので、ここではまとめて色々追加している。

  /var/log/httpd-access.log               644  12    100  @01T00 B   /var/run/httpd.pid   30
  /var/log/httpd-error.log                600  12    100  @01T01 B   /var/run/httpd.pid   30
  /var/log/e6850.tokyo3.nerv-access.log   644  12    100  @01T04 B   /var/run/httpd.pid   30
  /var/log/e6850.tokyo3.nerv-error.log    600  12    100  @01T05 B   /var/run/httpd.pid   30

robots.txtを設置する。

cat > /usr/local/www/apache22/data/robots.txt << "EOF"
User-Agent: *
Disallow: /
EOF

1.1.5.2. tomcat 6 のインストール

cd /usr/ports/www/tomcat6 && make install package clean

/etc/rc.confに、以下の内容を追記。

今回はopenjdk6でtomcatを動かす。

  # for tomcat 6.0
  tomcat60_enable="YES"
  tomcat60_java_home="/usr/local/diablo-jdk1.6.0"
  tomcat60_java_home="/usr/local/openjdk6/"
  tomcat60_java_os="native"
  tomcat60_java_vendor="freebsd"

/usr/local/apache-tomcat6.0/conf/tomcat-users.xmlを変更し、tomcat管理人のロール(admin)とパスワード(xxxxxxxx)を記入しておく。

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="manager"/>
  <role rolename="admin"/>
  <user username="admin" password="xxxxxxxx" fullName="" roles="admin,manager"/>
</tomcat-users>

/usr/local/apache-tomcat6.0/conf/server.xmlにて、アクセスログを取るように設定する。

ここでは、Host name=localhostタグの中にあるValveタグのコメントを外して有効にする。

      <Host name="localhost" appBase="webapps"
       unpackWARs="true" autoDeploy="true"
       xmlValidation="false" xmlNamespaceAware="false">

      (...中略...)

        <!--  (←この行を削除)
        <Valve className="org.apache.catalina.valves.AccessLogValve"
                 directory="logs"  prefix="localhost_access_log." suffix=".txt"
                 pattern="common" resolveHosts="false"/>
        -->   (←この行を削除)

ファイルのパーミッションなど確認。

tomcat 6は、ユーザー:グループ www:wwwで動作するようにインストールされるため、設定ファイルが読めなくて起動失敗することが昔のportsであったので。

tomcat 6を起動する

  /usr/local/etc/rc.d/tomcat6 start

試験アクセスを行う。

  http://e6850.tokyo3.nerv:8180/
  http://e6850.tokyo3.nerv:8180/index.jsp
  http://e6850.tokyo3.nerv:8180/docs/
  http://core2duo.tokyo3.nerv:8180/
  http://core2duo.tokyo3.nerv:8180/index.jsp
  http://core2duo.tokyo3.nerv:8180/docs/
  http://dv6.tokyo3.nerv:8180/
  http://dv6.tokyo3.nerv:8180/index.jsp
  http://dv6.tokyo3.nerv:8180/docs/

portsからTomcatをインストールした場合、TomcatへのHTTP接続ポート番号は8180となる。 (ポート番号8080は、HTTP PROXYソフトが使う場合が多いため)

/usr/local/etc/rc.d/tomcat6の編集

マジ邪道だが、Tomcatを動かすロケールを日本語に設定する行を追加する。

  export LANG=ja_JP.eucJP

1.1.5.3. mod_jk のインストール

Apache 2.2とtomcatの間を取り持つ「mod_jk」のインストール

cd /usr/ports/www/mod_jk-apache2 && make install package clean

/usr/local/etc/apache22/mod_jk.confの編集

/usr/local/etc/apache22/mod_jk.conf.sampleを元に作る。 jsp-hostnameとなっている部分を、localhostに変更する。 Tomcatに処理させたいURLのWebアプリ名と、転送先のホスト名をJkMountで指定する。

<IfModule mod_jk.c>
        JkWorkersFile etc/apache22/workers.properties
        JkLogFile  /var/log/jk.log
        JkShmFile  /var/log/jk-runtime-status
        JkLogLevel error

        # Sample JkMounts.  Replace these with the paths you would
        # like to mount from your JSP server.
        # JkMount /*.jsp localhost
        JkMount /docs/* localhost
</IfModule>

/usr/local/etc/apache22/workers.propertiesの編集

/usr/local/etc/apache22/workers.properties.sampleを元に作る。 jsp-hostnameとなっている部分を、localhostに変更する。

worker.list=localhost

worker.localhost.port=8009
worker.localhost.host=localhost
worker.localhost.type=ajp13
worker.localhost.lbfactor=1

/usr/local/etc/apache22/httpd.confを編集して、以下の記述を追加する。

  LoadModule jk_module libexec/apache22/mod_jk.so
  
  <IfModule jk_module>
  # mod_jk settings
  Include etc/apache22/mod_jk.conf
  </IfModule>

apache設定ファイルの文法チェックを行う。

  apachectl configtest

apacheを再起動する。

  /usr/local/etc/rc.d/apache22 restart

試験アクセスを行う。

  http://e6850.tokyo3.nerv/          こちらは Apache の It works! 表示
  http://e6850.tokyo3.nerv/docs/     こちらは Tomcat のドキュメント表示
  http://core2duo.tokyo3.nerv/
  http://core2duo.tokyo3.nerv/docs/
  http://dv6.tokyo3.nerv/
  http://dv6.tokyo3.nerv/docs/

【解説】 ポート番号を指定していないので、ポート番号はデフォルトの80番でapacheにアクセスする。 JkMount指定により /docs/ の場合、ApacheはTomcatに処理を回送している。

1.1.5.4. Tomcat6 管理マネージャーの接続元IPアドレスを制限する

Tomcatにありがちなセキュリティリスクの改善 http://www.atmarkit.co.jp/fjava/rensai4/safetomcat_04/safetomcat_04_4.html

■/usr/local/apache-tomcat-6.0/conf/Catalina/localhost/manager.xml の編集

アクセス制限の指定は、/usr/local/apache-tomcat6.0/conf以下のディレクトリに [Engine名]/[Host名]のディレクトリが用意されているので、 その下のmanager.xmlを以下のように記述する。

ここでは、192.168.1.0/24のアドレスからのアクセスのみを受け付けるように設定する。

<?xml version="1.0" encoding="UTF-8"?>
<Context antiResourceLocking="false" privileged="true" path="/manager" docBase="${catalina.home}/webapps/manager">
  <Valve
    className="org.apache.catalina.valves.RemoteHostValve"
    allow="192.168.1.*" />
</Context>

Tomcatを再起動する。

  /usr/local/etc/rc.d/tomcat6 restart

管理マネージャを見る

1.1.5.5. apache22の詳細設定 共通部分

/usr/local/etc/apache22/httpd.conf を編集する。

いくつかの掲示板スクリプトとwikiスクリプトをディレクトリ指定だけで起動するように設定する。

#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
<IfModule dir_module>
    DirectoryIndex index.html wiki.cgi cyclamen.cgi
</IfModule>

拡張子がcgiの場合、スクリプトとして起動する。 拡張子がshtmlの場合、SSIを処理する。

<IfModule mime_module>
    AddHandler cgi-script .cgi
    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
</IfModule>

MIME type設定を有効に。

MIMEMagicFile etc/apache22/magic

言語設定は有効に。

# Language settings 
Include etc/apache22/extra/httpd-languages.conf 

各種デフォルト設定を読み込む行を有効に。

# Various default settings 
Include etc/apache22/extra/httpd-default.conf 

ここまでの設定をテストする。

apachectl configtest

問題が無いようなら、apacheを再起動する。

apachectl restart

1.1.5.6. apache22の詳細設定 名前ベースのVirtualHost

http://kazmax.zpp.jp/apache/apache4.htmlを参考に、名前ベースのVirtualHostを設定してみる。

/usr/local/etc/apache22/httpd.conf を編集し、Virtual Host設定ファイルの読み込みを有効にする。

# Virtual hosts
Include etc/apache22/extra/httpd-vhosts.conf

VirtualHostの設定ファイルを設定する。

/usr/local/etc/apache22/extra/httpd-vhosts.confファイルを編集。

注意:VirtualHostを有効にした場合、VirtualHostではない箇所で設定した公開URLに関する設定は基本的に無視される。 VirtualHost内部で、VirtualHost毎に設定を記載する必要がある。

UserDirの指定については下のサイト参照。

ここでは一個しか<VirtualHost>〜</VirtualHost>を書いていないのでありがたみが無いが、 DynDNS名からのアクセスを自宅用とは別設定にしたい時には便利なものだ。

#
# Virtual Hosts
#
# If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them. Most configurations
# use only name-based virtual hosts so the server doesn't need to worry about
# IP addresses. This is indicated by the asterisks in the directives below.
#
# Please see the documentation at 
# <URL:http://httpd.apache.org/docs/2.2/vhosts/>
# for further details before you try to setup virtual hosts.
#
# You may use the command line option '-S' to verify your virtual host
# configuration.

#
# Use name-based virtual hosting.
#
NameVirtualHost *:80

#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any <VirtualHost> block.
#
<VirtualHost *:80>
    ServerAdmin george@yk.rim.or.jp
    DocumentRoot "/usr/local/www/apache22/data"
    ServerName e6850.tokyo3.nerv
    ServerAlias e6850
    ErrorLog "/var/log/e6850.tokyo3.nerv-error_log"
    CustomLog "/var/log/e6850.tokyo3.nerv-access_log" common

    # UserDir
    UserDir public_html
    UserDir disabled
    UserDir enabled george webpub

    # Directory settings (george, webpub)
    <Directory "/home/george/public_html">
        AllowOverride FileInfo AuthConfig Limit
        Options MultiViews SymLinksIfOwnerMatch Includes ExecCGI
        XBitHack full

        # Access control
        Order allow,deny
        Allow from 127.0.0.1
        Allow from localhost
        Allow from 192.168.1.30
        Allow from 192.168.1.29
        Allow from 192.168.1.28
        Allow from 192.168.1.27
        Allow from 192.168.1.26
        Allow from 192.168.1.25
        Allow from 192.168.1.24
        Allow from 192.168.1.23
        Allow from 192.168.1.22
    </Directory>

    # Directory settings (webpub)
    <Directory "/home/webpub/public_html">
        AllowOverride FileInfo AuthConfig Limit
        Options MultiViews SymLinksIfOwnerMatch Includes ExecCGI
        XBitHack full

        # Access control
        Order allow,deny
        Allow from all
    </Directory>

    # for tomcat
    <IfModule mod_jk.c>
        JkLogFile  /var/log/e6850.tokyo3.nerv-jk.log
        JkMount /docs/* localhost
    </IfModule>

</VirtualHost>

ここまでの設定をテストする。

  apachectl configtest

問題が無いようなら、apacheを再起動する。

  /usr/local/etc/rc.d/apache22 restart

アクセステスト

  e6850.tokyo3.nerv名義では、アクセスを許可する。
  http://e6850.tokyo3.nerv/
  http://e6850.tokyo3.nerv/~george/
  http://e6850.tokyo3.nerv/~george/jindex.html
  http://e6850.tokyo3.nerv/~george/jdiary_last.html
  IPアドレス指定では...アクセスできちゃうなw
  http://192.168.1.23/
  http://192.168.1.23/~george/
  http://192.168.1.23/~george/jindex.html

アクセステスト(CGI)

  http://e6850.tokyo3.nerv/~george/cgi-bin/
  http://e6850.tokyo3.nerv/~george/cgi-bin/env.cgi

掲示板テスト(CGI)

  http://e6850.tokyo3.nerv/~george/cgi-bin/cyclamen/
  http://e6850.tokyo3.nerv/~george/cgi-bin/freestylewiki/
  http://e6850.tokyo3.nerv/~george/cgi-bin/usemodwiki/
  http://e6850.tokyo3.nerv/~george/cgi-bin/WalWiki2/

JSP/Servletテスト

  http://e6850.tokyo3.nerv:8180/
  http://e6850.tokyo3.nerv/docs/

1.1.5.7. wwwoffle

■インストール

cd /usr/ports/www/wwwoffle && make install package clean

■設定ファイル編集

/usr/local/etc/wwwoffle.confを編集する。 ここでは、purge条件にmtimeを使用するため、use-mtime=yesとし、個別URLでpurgeするため、use-url=yesとする設定を行う。

ssh root@e6850 /usr/local/etc $ rcsdiff -r1.1 -u wwwoffle.conf
===================================================================
RCS file: wwwoffle.conf,v
retrieving revision 1.1
diff -u -r1.1 wwwoffle.conf
--- wwwoffle.conf       2010/10/09 18:01:07     1.1
+++ wwwoffle.conf       2010/10/09 18:15:54
@@ -139,8 +139,8 @@
 
  password          = none
 
- max-servers       = 8
- max-fetch-servers = 4
+ max-servers       = 4
+ max-fetch-servers = 2
 }
 
 
@@ -535,15 +535,15 @@
 
  iframes     = yes
 
- scripts     = no
+ scripts     = yes
 
- objects     = no
+ objects     = yes
 
  webbug-images = yes
 
- icon-images   = no
+ icon-images   = yes
 
- only-same-host-images = no
+ only-same-host-images = yes
 }
 
 
@@ -779,6 +779,8 @@
 {
  localhost
  127.0.0.1
+ e6850
+ e6850.tokyo3.nerv
 
  ::ffff:127.0.0.1
 
@@ -837,7 +839,7 @@
 
 AllowedConnectHosts
 {
-
+127.0.0.1
 #### Example ####
 # Only allow connections from hosts in the foo.com domain.
 # *.foo.com
@@ -1299,12 +1301,12 @@
 
 Purge
 {
- use-mtime     = no
+ use-mtime     = yes
 
  max-size      = -1
  min-free      = -1
 
- use-url       = no
+ use-url       = yes
 
  del-dontget   = yes
  del-dontcache = yes
ssh root@e6850 /usr/local/etc $ 

■/etc/rc.conf編集

/etc/rc.confに以下の行を追加する。

# for wwwoffle 
wwwoffled_enable="YES"

■起動

  /usr/local/etc/rc.d/wwwoffled start

■動作確認

環境変数 HTTP_PROXY に、wwwoffle待ち受けポートを指定し、proxyとして使用する。 wwwoffleをオンラインモード(要求されたデータはすぐに取りに行く)にして、ブラウザを起動。

  export HTTP_PROXY=http://localhost:8080/
  wwwoffle -online
  w3m http://www.yk.rim.or.jp/~george/

wwwoffleをオフラインモード(要求されたデータがあれば返してくる。無ければ取得予約)にして、ブラウザを起動。

  wwwoffle -offline
  w3m http://www.yk.rim.or.jp/~george/

環境変数 HTTP_PROXYを解除する。

  unset HTTP_PROXY

1.1.6. ファイルサーバ関連

1.1.6.1. samba 4 devel インストール

■ 概要

■ 参考

■ インストール

gnome2をインストールした後だと、自動的にインストールされているが、 UTILSが入っていない(ldbsearchなどがインストールされていない)

make config では、UTILSにチェックを入れて、再インストールする。

  cd /usr/ports/net/samba4-devel && make config && make deinstall reinstall clean

■ グループ users の作成

provisionコマンドは、グループ users が必要らしい。

ここでは、pw(8)を使ってグループ users を作成し、georgeを所属させておく。

  pw groupadd -n users -g 2001 -M george

■ 設定 provisionコマンド

samba4では、/usr/local/sbin/provisionコマンドを使って 設定ファイルの雛形を作成したり、LDAPの初期登録データを作成したりする。

オプション指定はたくさんあるので、provision --helpで見物しておくと良い。

  provision --realm=tokyo3.nerv  \
            --domain=tokyo3      \
            --adminpass=secret   \
            --server-role=standalone  \
            --setupdir=/usr/local/share/samba4/setup

FreeBSD 8.1のportsでインストールした場合、設定ファイルは /usr/local/etc/smb4.conf に。 LDAPデータなどは /var/db/samba4/private/ 以下に作成されている。

provision実行時の様子。

ssh root@e6850 /usr/ports/net/samba4-devel $   provision --realm=tokyo3.nerv  \
>             --domain=tokyo3      \
>             --adminpass=secret   \
>             --server-role=standalone  \
>             --setupdir=/usr/local/share/samba4/setup
Setting up share.ldb
Setting up secrets.ldb
Setting up the registry
Setting up the privileges database
Setting up idmap db
Setting up SAM db
Setting up sam.ldb partitions and settings
Setting up sam.ldb rootDSE
Pre-loading the Samba 4 and AD schema
Adding DomainDN: DC=E6850
pdc_fsmo_init: no domain object present: (skip loading of domain details)

Adding configuration container
naming_fsmo_init: no partitions dn present: (skip loading of naming contexts details)

Setting up sam.ldb schema
Reopening sam.ldb with new schema
naming_fsmo_init: no partitions dn present: (skip loading of naming contexts details)

Setting up sam.ldb configuration data
Setting up display specifiers
Adding users container
Modifying users container
Adding computers container
Modifying computers container
Setting up sam.ldb data
Setting up sam.ldb users and groups
Setting up self join
Setting up sam.ldb rootDSE marking as synchronized
Please install the phpLDAPadmin configuration located at /var/db/samba4/private/phpldapadmin-config.php into /etc/phpldapadmin/config.php
Once the above files are installed, your Samba4 server will be ready to use
Server Role:           standalone
Hostname:              e6850
NetBIOS Domain:        E6850
DNS Domain:            tokyo3.nerv
DOMAIN SID:            S-1-5-21-1891439357-3798478124-1179405570
Admin password:        secret
ssh root@e6850 /usr/ports/net/samba4-devel $ 

■ /usr/local/etc/smb4.conf の設定

ウチの場合、ワークグループ名はWORKGROUPにした。

自分のホームディレクトリを公開してみた。

samba4に登録したユーザーは自分だけなのでこんなんでいいけど、 ユーザー別に違うディレクトリをアクセス可能にする設定方法は不明。

Samba3系とは異なり、特殊セクション[homes]は動かないようだ。

ssh root@e6850 ~ $ cat /usr/local/etc/smb4.conf
[globals]
        netbios name    = E6850
        workgroup       = WORKGROUP
        realm           = TOKYO3.NERV
        server role     = standalone


[george]
        path = /home/george
        comment = george's home directory
        read only = no

;
; end of file
;

■ 設定ファイルのチェック

■ /etc/rc.conf編集。以下の設定を追加。

  # for samba 4
  samba4_enable="YES"
  samba4_config="/usr/local/etc/smb4.conf"

■ sambaサーバを開始

  /usr/local/etc/rc.d/samba4 start

■ smbclient で試験アクセス

  smbclient -L localhost -U%

standaloneモードだと、netlogonとかsysvolが表示されてなくて寂しい。

ssh root@e6850 ~ $   smbclient -L localhost -U%

        Sharename       Type       Comment
        ---------       ----       -------
        IPC$            IPC        IPC Service (Samba 4.0.0alpha11)
        ADMIN$          Disk       DISK Service (Samba 4.0.0alpha11)
REWRITE: list servers not implemented
ssh root@e6850 ~ $ 

■ ユーザー登録

Active Directoryドメインで管理されているWindowsと同じく、 コマンドラインからnet newuser ユーザー名などと入力する。

パスワードを聞いてくるので、入力する。

  ssh root@e6850 ~ $ net newuser george
  New Password: 
  ssh root@e6850 ~ $ net enableaccount george
  ssh root@e6850 ~ $ 

■ smbclient で試験アクセス

ssh root@e6850 ~ $ smbclient //localhost/george/ -Ugeorge
Password for [WORKGROUP\george]:
smb: \> pwd
Current directory is \
smb: \> ls
  .                                   D        0  Sun Oct 24 06:02:09 2010
  ..                                  D        0  Sun Aug 15 18:28:11 2010
  .ssh                                D        0  Sat Aug  7 15:13:12 2010
  .login                                     258  Sat Dec 27 08:40:36 2008
  .mail_aliases                              379  Sat Dec 27 08:40:36 2008
  .login_conf                                167  Sat Dec 27 08:40:36 2008
  .cshrc                                     759  Sat Aug  7 21:59:41 2010
  .mailrc                             R      309  Sat Aug  7 22:04:09 2010
  .profile                            R     1008  Sat Aug  7 22:04:37 2010
  .shrc                               R      990  Sat Aug  7 22:05:15 2010
  .rhosts                             R      284  Sat Aug  7 22:05:01 2010
  .bash_history                            24319  Sun Oct 24 04:03:23 2010
  .cache                              D        0  Fri Jan  9 01:59:39 2009
  .config                             D        0  Sun Oct 10 03:45:34 2010
  .emacs.d                            D        0  Fri Jan 23 20:43:01 2009
...skip

                1320252204 blocks of size 512. 1154466384 blocks available
smb: \> q
ssh root@e6850 ~ $ 

■ Windowsから試験アクセス

  \\e6850\george\

■ ユーザーgeorgeのパスワード変更

  net setpassword george 

「New Password: 」と表示されるので、ユーザーgeorge用の新しいパスワードを入力。

■ ユーザーgeorgeの有効期限設定(うまく動いていない....)

  net setexpiry george --days=365

■ 余談 LDAPエントリの確認

make config にてUTILSを有効にしてインストールしている場合は、 LDAP エントリを見物できる。

  ldbsearch -H /var/db/samba4/private/sam.ldb

以下はユーザーgeorgeのエントリを抜粋。 本当にLDAPしてるなぁ。

# record 132
dn: CN=george,CN=Users,DC=E6850
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
cn: george
instanceType: 4
whenCreated: 20101023190047.0Z
uSNCreated: 3577
name: george
(後略)

Copyright(c) 1996-2022 George(小濱 純). All rights reserved.
私の作成したページへのリンクはご自由にどうぞ。
このページに間違いや要望などがありましたら george@yk.rim.or.jp まで御連絡ください。
メール本文に 6020-5440-3372 とか私の 本名 を漢字で書いて頂くと、ウチのSPAMフィルタを通過できます。

[ホームページ] [日記] [日記ファイル一覧] [読んでいる日記] [FreeBSD] [FreeBSD LINK] [検索]

home: <george@yk.rim.or.jp> or <george@ceres.dti.ne.jp>
(I am using white list SPAM filter. To avoid it, please write 6020-5440-3372 in mail body. This key word is valid since 2009-06-14 until 2022-12-31.)