FreeBSD-9.1-for-C60PC 設定概論

Last Update (2017/09/16 19:51:28)

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

[ホームページ] [日記] [読んでいる日記] [秋葉原価格] [FreeBSD] [FreeBSD LINK] [検索]


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

ページ内目次

1.1.1. ASUS EPC1225BにFreeBSD 9.1 RELEASE インストール

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

今回はWindows 7機からDVD-Rに焼いた媒体を使ってインストール。

1.1.1.1. FreeBSD インストーラ

ディスクパーティションエディターが新しくなっている。

今回は、Windows7 の入った機械の後ろの空き領域に FreeBSDをインストールするため、Guidedモードは使用せず、Manualで設定。

インストールの詳細については、FreeBSDハンドブックを参照。

1.1.1.2. sshd_config の初期編集

sshdの初期設定(/etc/ssh/sshd_config)では、rootではログインできず、 パスワード認証を受け付けない。

以下のようなモードでログインする必要がある。

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

また、設定作業の都合と、rsyncの都合でrootログインも許可する(これは非推奨)。

  vi /etc/ssh/sshd_config 
  PermitRootLogin yes
  PasswordAuthentication yes

上を編集したら、差分表示。

# diff -uw /etc/ssh/sshd_config.orig /etc/ssh/sshd_config
--- /etc/ssh/sshd_config.orig   2013-01-25 23:12:11.000000000 +0900
+++ /etc/ssh/sshd_config        2013-01-25 23:12:37.000000000 +0900
@@ -43,7 +43,7 @@
 # Authentication:
 
 #LoginGraceTime 2m
-#PermitRootLogin no
+PermitRootLogin yes
 #StrictModes yes
 #MaxAuthTries 6
 #MaxSessions 10
@@ -63,7 +63,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

sshdを再起動

  /etc/rc.d/sshd restart

隣のPCからTeraTermなどでログインする。

余談だが、TeraTerm 4.76 の自動ログインマクロは以下のような感じになる。

connect 'c60pc:22 /ssh /2 /auth=challenge /user=george /passwd=xxxxxxxx'

1.1.1.3. rootのシェル変更

rootのデフォルトシェルは/bin/csh。

ここでは、/bin/sh に変更しておく。(後で/usr/local/bin/bashにするけど)

  chsh -s /bin/sh root

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

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

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

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

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

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

(普通にファイル名の後ろに日付をつけてコピーするだけの方が汎用性があるかも...)

mkdir -p /usr/local/bin
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 を参考に設定していく。

インストーラーから設定した項目は以下。固定IP設定としている。

  hostname="c60pc.tokyo3.nerv"
  keymap="jp.106.kbd"
  ifconfig_re0=" inet 192.168.1.32 netmask 255.255.255.0 "
  defaultrouter="192.168.1.1"
  sshd_enable="YES"
  moused_enable="YES"
  ntpd_enable="YES"
  powerd_enable="YES"
  # Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
  dumpdev="AUTO"

手動で追加した行は以下。コンソール画面のスクリーンセーバーを追加。

  # daemon screen saver
  saver="daemon"

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

FreeBSD機をサーバにする場合、DHCPは使用せず、IPアドレスを固定設定する。

FreeBSDインストーラからIPv4設定-DHCPを使うか?にNoと答えた場合は、設定済みのはずなので編集操作は不要。 後で変更したくなった場合のメモ。

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

ifconfig_re0=" inet 192.168.1.32 netmask 255.255.255.0 "
defaultrouter="192.168.1.1"

/etc/resolv.conf編集

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

search tokyo3.nerv
nameserver 8.8.8.8
nameserver 210.135.65.2
nameserver 192.168.1.1

1.1.2.2. ユーザー追加、グループ追加、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.3. /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
192.168.1.31    zacate    zacate.tokyo3.nerv
192.168.1.32    c60pc     c60pc.tokyo3.nerv
192.168.1.33    ivybridge ivybridge.tokyo3.nerv

1.1.2.4. procfs追加

procfsを追加する。

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

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

# cat /etc/fstab
# Device        Mountpoint      FStype  Options Dump    Pass#
/dev/ada0s4a    /               ufs     rw      1       1
proc            /proc           procfs  rw      0       0
#

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

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

  ssh-keygen -t dsa

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

[george@c60pc ~]$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/george/.ssh/id_dsa): 
Created directory '/home/george/.ssh'.
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.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx george@c60pc.tokyo3.nerv
The key's randomart image is:
+--[ DSA 1024]----+
|          . ..o=.|
|     .   o o .+..|
|      o o +  ..oo|
|       o o . o.E+|
|        S . + .o |
|         . =     |
|          o o    |
|           .     |
|                 |
+-----------------+
[george@c60pc ~]$ 

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

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

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

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

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

1.1.2.6. 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.2.7. ntpの設定

出典 http://www.server-memo.net/server-setting/ntp/ntp-install

/etc/ntp.confを設定する

FreeBSD 9.1の場合、以下のように設定されている。

man ntp.conf すると、アクセス制限や認証機能もあるが、 今回は特に設定変更はしないで、このままとする。

server 0.freebsd.pool.ntp.org iburst maxpoll 9
server 1.freebsd.pool.ntp.org iburst maxpoll 9
server 2.freebsd.pool.ntp.org iburst maxpoll 9

/etc/rc.confを編集。

ntpdを起動する設定とするため、/etc/rc.confに以下の1行を追加する。 (FreeBSDインストーラにて、起動するデーモンからntpdを選択していた場合は、最初から入っている)

ntpd_enable="YES"

手動で時刻合わせを行う場合は以下。 -u オプションで、ntpdとは別のポート番号を使用するように指示している。

  ntpdate -u 0.freebsd.pool.ntp.org

ntpd起動中に -u を付けずにntpdateを行った場合、以下のエラーがでる。

ssh root@c60pc ~ $   ntpdate 0.freebsd.pool.ntp.org
24 Nov 11:26:59 ntpdate[2018]: the NTP socket is in use, exiting

1.1.2.8. swapをパーティションではなくてファイルで追加する方法

元ネタ Using a swap file instead of swap partition in FreeBSD 8.x/9.x https://www.dan.me.uk/blog/2012/01/22/using-a-swap-file-instead-of-swap-partition-in-freebsd-8-x9-x/

パーティション上にswapパーティションを用意し忘れたとか、swapをさらに追加したい場合など、ファイル上にswapを作成する方法。

長さ4GBのファイルを作る

  dd if=/dev/zero of=/swapfile.dat bs=1m count=4096
  chmod 0600 /swapfile.dat

/etc/rc.confを編集して、swapfileの記載を追加する。

  vi /etc/rc.conf
  swapfile="/swapfile.dat"

スワップを有効にする

  /etc/rc.d/addswap start

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

1.1.3.1. package置き場作成

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

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

  mkdir -p /usr/ports/packages

ちなみに、上のディレクトリが存在しない場合は、バイナリパッケージファイルは、各portsディレクトリの内部に作成される。

1.1.3.2. portsのターゲット色々

/usr/ports/Mk/bsd.port.mkを見ると、コメントで色々便利そうなターゲットが書いてある。 (つか、Makefile大きすぎでしょ...)

個人的によく使うものは以下。 どれも、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インストール

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

(Windows 7 でいうところの robocopyみたいなもの)

  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-$HOSTNAME
  done

■rsync使い方の例1:

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

■rsync使い方の例2:

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

■rsync使い方の例3:

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

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

1.1.3.6. japanese/nkf

日本語漢字フィルタ。文字コードの変換に使う。 非常に古くからあるコマンドで、古いスクリプトが使用しているのでインストールする。

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

1.1.3.7. japanese/less (jless)

パワフルなページャ。EUC, SJIS にも対応。

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

1.1.3.8. misc/lv

パワフルなファイルビューア。lessの代わりに使用できる。nkfの代わりに文字コード変換ツールとしても使える。

出力文字コードを色々変更できるので、端末の文字コードをUTF-8にしている場合に便利。

  cd /usr/ports/misc/lv && make install package clean

1.1.3.9. japanese/w3m

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

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

WebページやHTMLページをテキストに整形するのにも使える

  w3m -dump http://www.ceres.dti.ne.jp/~george/jindex.html  | jless

1.1.3.10. japanese/today

今日は何の日?を表示する

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

1.1.3.11. jman / jman-doc 日本語マニュアルページ

有志が翻訳している日本語マニュアルデータと、日本語マニュアルをフォーマットするコマンド(jman)のインストール方法は以下。

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

日本語マニュアルを表示する前に、環境変数をセットしておく。(bashの例)

  LANG=ja_JP.eucJP ;   export LANG
  PAGER=jless ;   export PAGER

使用方法は以下。

  jman jman

■jmanコマンドによる日本語マニュアルの表示で以下のエラーが出る場合は、/etc/manpath.configを作成する。

  ssh george@c60pc ~ $ jman jman
  jman: unable to find the file /etc/manpath.config
cat > /etc/manpath.config  << "EOF"
MANPATH_MAP /bin /usr/share/man
MANPATH_MAP /usr/bin /usr/share/man
MANPATH_MAP /usr/local/bin /usr/local/man
MANPATH_MAP /usr/X11R6/bin /usr/X11R6/man
MANPATH_MAP /bin /usr/share/man/ja
MANPATH_MAP /usr/bin /usr/share/man/ja 
EOF

解説:FreeBSD 9.0から英語版のmanは/etc/manpath.configを参照しないように 変更されており、ファイル自体存在しない。 jmanは古いmanを日本語化したものなので、/etc/manpath.configを必要としている。 このため、自分でつくってあげる必要がある。

1.1.3.12. sysutils/screen

テキスト端末を切り替えながら使用したり、ログを採取したりするソフト。

今ならTeraTerm Proを複数起動させるのが普通だが、一つのテキスト端末を 切り替えながら使う場合に使用。

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

screenのコンパイルオプション設定では、全部にチェックをいれる。

1.1.4. portsからGUIを持つソフトをインストール

これからインストールする大型テキストエディタなどは、X11やGNOMEライブラリを使ったGUIを持つコンパイル時オプションがあるので、エディタより先にX11をインストールしておく。

純粋なサーバ用途の場合はX11を入れないという選択肢もあるが、自宅マシン用なのでX11を入れておく。

1.1.4.1. x11/xorg

これはコンパイルするとシャレにならない時間がかかるので、DVD-ROMのisoイメージからバイナリでpkg_addするのが良いと思う。

  mount -t cd9660 /dev/cd0 /mnt
  pkg_add /mnt/packages/x11/xorg-7.5.2.tbz

DVD-ROMが手元にない場合は、pkg_add -r オプションでネットワークインストールする手もある。(FreeBSD 9.1-RELEASEの場合、ftpサイトがハクられた影響で、バイナリパッケージはftpサイト上に用意されていない。)

pkg_add -r の場合、細かいバージョン番号は指定しない。 詳しくは http://www.freebsd.org/doc/ja_JP.eucJP/books/handbook/packages-using.html を参照。

  # fetch(1) の環境変数をセット
  export FTP_PASSIVE_MODE=yes
  pkg_add -r xorg

portsを使ってコンパイルする手もある。 コンパイル時間もすごいのだが、HDDの空き容量にも注意。

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

1.1.4.2. editors/vim

vi系のエディタで、テキスト端末上でもウィンドウ分割をサポートする高機能なエディタvimをインストール。

あらかじめvimのパッチを落としておいた方が早いかも。

  mkdir -p /usr/ports/distfiles/vim
  cd /usr/ports/distfiles/vim
  for i in $(seq 1 783) ; 
  do 
      j=`printf "%03d" $i`
      fetch http://ftp.gr.vim.org/pub/vim/patches/7.3/7.3.$j
  done

コンパイルには結構時間がかかる。

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

コンパイル時、こんな感じのエラーが出るのだが、もう一度 make install package を行うとなぜか成功する。

===>   Returning to build of gtk-2.24.6_2
===>   gtk-2.24.6_2 depends on shared library: intl - found
===>   gtk-2.24.6_2 depends on shared library: atk-1.0.0 - found
===>   gtk-2.24.6_2 depends on shared library: gdk_pixbuf-2.0.0 - found
===>   gtk-2.24.6_2 depends on shared library: glib-2.0.0 - found
===>   gtk-2.24.6_2 depends on shared library: pango-1.0.0 - found
===>  Configuring for gtk-2.24.6_2
gtk-2.24.6_2: Needs cairo build with X11 support.
*** [pre-configure] Error code 1

Stop in /usr/ports/x11-toolkits/gtk20.
*** [install] Error code 1

Stop in /usr/ports/x11-toolkits/gtk20.
*** [lib-depends] Error code 1

Stop in /usr/ports/editors/vim.

1.1.4.3. editors/emacs

emacsをインストールする。

本気でシャレにならないほど時間がかかる。

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

m17n-lib では、ANTHY サポートをつける。

~/.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.4.4. 日本語かな漢字変換 scim と anthy

scimはかな漢字変換エンジン。

anthyはEmacs(コンソール)からanthyを使うEmacs Lisp パッケージ。

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

X11からscimを使う場合は、環境変数に INPUT METHOD を指定する。

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.4.5. 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.4.6. 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.4.7. mail/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形式で処理するよう設定する。

cat > /usr/local/etc/procmailrc << "EOF"
SHELL=/bin/sh
PATH=/bin:/usr/bin:/usr/local/bin
DROPPRIVS=yes
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
#LOGFILE=$MAILDIR/procmail.log
#VERBOSE=ON
EOF

■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

# ブラックリストが書いてあるファイルを指定
BLACKLIST=$HOME/bin/mail-blacklist-address.txt

# ホワイトリストが書いてあるファイルを指定
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 のどれかに
# ブラックリストファイルのメールアドレスが含まれていたらtrashへ。
# FreeBSDのgrepは、-E -f fileで1行1拡張正規表現パターンとして検索してくれる。
#
:0
* ? test -s $BLACKLIST
* ? (formail -x From: | grep -E -f $BLACKLIST)
.trash/

# ホワイトリストフィルタ
# 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.4.8. mail/fetchmail

メールを取得するソフト

■インストール

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

■設定 ~/.fetchmailrc

#----------------------------------------------------------------------
#  default setting
#
defaults
        protocol pop3
        fetchall no mimedecode
        # mda "/usr/libexec/mail.local -d george" # (default)
        # mda "/usr/local/lib/mh/slocal -user george" # MH
        mda "/usr/local/bin/procmail" # procmail
        fetchsizelimit 0
        fetchlimit 0
        batchlimit 0
        limit 0

#----------------------------------------------------------------------
#  from yk.rim.or.jp
#
poll mail.yk.rim.or.jp protocol pop3:
        no dns
        username xxxxxxxx password xxxxxxxx

#----------------------------------------------------------------------
#  Gmail pop
#
poll pop.gmail.com protocol pop3
        no dns
        username xxxxxxx@gmail.com
        password xxxxxxxx
        ssl

■テスト

テスト中は、メール取得してもサーバにメールを残すため --keep をつける。

  fetchmail -v --keep

1.1.4.9. java/openjdk7

こちらもコンパイルに時間がかかる大物。 ただ、C60マシンで1.5時間、IvyBridge上の仮想マシンで0.5時間だったので、それほどでもない...かも?

  cd /usr/ports/java/openjdk7 && make config && make fetch && make install package && make clean

余談だが、VMplayer等の仮想マシンの設定メモリ量が 512MBで、かつ、FreeBSD側でswapを設定していないと、メモリ不足でプロセスが停止させられ、コンパイルに失敗する。(エラーメッセージからはわかりにくいが。) VMplayerから仮想マシンのメモリ量を1024Mに設定したらうまくいった。

1.1.4.10. net/tightvnc インストール

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

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

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

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

IPA提供のフォント

  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.4.12. jcode.pl

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

相当に古いものだが、自作のperlスクリプトが使っているのでインストール。

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

1.1.5. ネットワークサービスの設定

1.1.5.1. dns/bind99

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

■/etc/namedb/rndc.keyの作成

bindを制御するrndcコマンドが認証に使う暗号鍵ファイルを作成する。 存在しない場合は、/etc/rc.d/namedスクリプトが作ってくれるが、今回はテスト用に作成。

  cd /etc/namedb
  cp -p /etc/namedb/named.conf /etc/namedb/named.conf.org
  rm -f rndc.key  rndc.conf
  rndc-confgen -a -b 256 -u bind

作成された/etc/namedb/rndc.keyファイルの内容は以下のような感じ。

key "rndc-key" {
        algorithm hmac-md5;
        secret "xxxxxxxxxxxxxx中略xxxxxxxxx==";
};

試しにrndcコマンドを使ってみる。 まだ、namedデーモンを起動していないので、connection refusedが表示される。

ssh root@c60pc /etc/namedb $ rndc status
rndc: connect failed: 127.0.0.1#953: connection refused
ssh root@c60pc /etc/namedb $
1.1.5.1.1. bind 9.9.2 設定 レベル1 forward and caching only

ここでは、LAN独自の設定などは行わず、DNS問い合わせをキャッシュできる程度に設定する。

■/etc/namedb/named.conf編集

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

ssh root@c60pc /etc/namedb $ diff -uw named.conf named.conf.org
--- named.conf  2013-01-26 23:15:21.000000000 +0900
+++ named.conf.org      2012-12-04 18:34:45.000000000 +0900
@@ -35,9 +35,11 @@
 // If you've got a DNS server around at your upstream provider, enter
 // its IP address here, and enable the line below.  This will make you
 // benefit from its cache, thus reduce overall DNS traffic in the Internet.
+/*
        forwarders {
-               8.8.8.8;
+               127.0.0.1;
        };
+*/

 // If the 'forwarders' clause is not empty the default is to 'forward first'
 // which will fall back to sending a query from your local server if the name
ssh root@c60pc /etc/namedb $

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

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

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

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

■/etc/resolv.conf編集

nameserver 127.0.0.1

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

#
# named.  It may be possible to run named in a sandbox, man security for
# details.
#
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_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環境を作ってくれるので楽だった。

■動作確認

  rndc status                 # バージョン番号確認
  dig @127.0.0.1    localhost # Aレコード確認
  dig @127.0.0.1 -x 127.0.0.1 # 逆引き確認
  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.5.1.2. bind 9.9.2 設定 レベル2 自宅内のマシンを登録

自宅内の各マシンもDNSが引けるように設定する。

■/etc/namedb/named.conf編集

/etc/namedb/named.conf の最後に、以下の記述を追加。

// 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";
};

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

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

e6850           IN      A       192.168.1.23
lynfield        IN      A       192.168.1.28
zacate          IN      A       192.168.1.31
c60pc           IN      A       192.168.1.32
ivybridge       IN      A       192.168.1.33

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

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

23      IN      PTR     e6850.tokyo3.nerv.
28      IN      PTR     lynfield.tokyo3.nerv.
31      IN      PTR     zacate.tokyo3.nerv.
32      IN      PTR     c60pc.tokyo3.nerv.
33      IN      PTR     ivybridge.tokyo3.nerv.

■/etc/resolv.conf編集

ドメイン名が省略された場合のデフォルト検索ドメインは tokyo3.nerv とする。

search tokyo3.nerv
nameserver 127.0.0.1

■named再起動

  /etc/rc.d/named restart

■動作確認

  rndc status                 # バージョン番号確認
  dig @127.0.0.1    localhost # Aレコード確認
  dig @127.0.0.1 -x 127.0.0.1 # 逆引き確認
  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 # 外部ホスト確認
  dig @127.0.0.1    c60pc.tokyo3.nerv # Aレコード確認
  dig @127.0.0.1 -x 192.168.1.32  # 逆引き確認

1.1.5.2. security/cyrus-sasl2

SASL(Simple Authentication and Security Layer)は、メール関連で使われる認証を行う共通的な枠組み。 cyrusは、Project Cyrus http://cyrusimap.web.cmu.edu/ で実装されたSASLライブラリとデーモンの名前。

ここでは、postfixから利用される cyrus-sasl2 をインストールする。

cyrus-sasl2インストール

  cd /usr/ports/security/cyrus-sasl2
  make config WITHOUT_OTP=yes WITH_BDB=yes 
  make install package clean

cyrus-sasl2-saslauthdインストール

  cd /usr/ports/security/cyrus-sasl2-saslauthd
  make config WITH_BDB=yes
  make install package clean

せっかくBDB付きでコンパイルしているのだが、 これから行う設定では使用していない...orz

1.1.5.2.1. saslauthd の設定

■saslauthdの起動設定

/etc/rc.confの編集

saslauthデーモンの起動フラグsaslauthd_flagsでは、認証にはPAM使ってね、と指定。

# for saslauthd
saslauthd_enable="YES"
saslauthd_flags="-a pam"

■/usr/local/lib/sasl2/smtpd.confの編集

こちらは、saslライブラリの設定。 パスワードチェックには、saslauth デーモン使ってね、と指定。

  vi /usr/local/lib/sasl2/smtpd.conf
pwcheck_method: saslauthd
mech_list: plain login

■saslauthdの起動

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

余談だが、saslauth関連の設定を変更した場合には postfixも再起動する必要がある。

1.1.5.3. mail/postfix

postfixはsendmailを置き換えることができるように、コマンド名やオプションなどユーザーに見える部分は似せて作ってあるMail Transfer Agent(MTA)。 sendmailよりも設定は簡単になっている(sendmailの設定が恐ろしすぎるのだが...)。

ここでは、以下のように設定する。

postfixインストール

  cd /usr/ports/mail/postfix
  make config WITH_SASL2=yes WITH_TLS=yes WITH_BDB=yes
  make install package clean
1.1.5.3.1. postfix 設定

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

# 各種パス名指定は FreeBSD 9.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

# IPv4を使う指定
inet_protocols = ipv4

# SMTP-AUTHの設定。cyrusを使用する場合
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = cyrus
smtpd_sasl_local_domain = $mydomain
smtpd_sasl_security_options = noanonymous
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
broken_sasl_auth_clients = yes

# end of file

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

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

sendmailを停止する。

  /etc/rc.d/sendmail stop

■/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"

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

  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/
1.1.5.3.2. postfix 起動

■postfix起動

  /usr/local/etc/rc.d/postfix start
1.1.5.3.3. postfix テスト

■FreeBSD機ローカルユーザーに対するメール送信テスト

ローカルマシン内の配送では、SMTP-AUTH認証を要求されたりはしない。

  # george宛てのメールが、Maildirのnewの中に届く
  echo "test mail" | mail george
  sleep 3
  cd ~george/Maildir/new
  ls -lt | head -5
  cat `ls -1t | head -1`
  # aliasを設定したので、root宛てのメールもgeorgeに届く
  echo "test mail" | mail root
  sleep 3
  cd ~george/Maildir/new
  ls -lt | head -5
  cat `ls -1t | head -1`

■AUTH用BASE64エンコード文字列の生成

ユーザー名とパスワードは実際に存在するものをuser_nameとuser_passの所に記載。

  perl -MMIME::Base64 -e 'print encode_base64("user_name\0user_name\0user_pass");'
  dXNlcl9uYW1lAHVzZXJfbmFtZQB1c2VyX3Bhc3M=

■SMTP接続確認

ポート番号25での認証テスト。

  telnet localhost 25
  EHLO localhost
  AUTH PLAIN george dXNlcl9uYW1lAHVzZXJfbmFtZQB1c2VyX3Bhc3M=
  QUIT

■メール中継チェック

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

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

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

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

Relay test result
All tests performed, no relays accepted.

1.1.5.4. 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.5.5. mail/dovecot2

dovecotは、人気のpop3/imapサーバ。

今回は、dovecot系最新作の dovecot2 を使用してみる。

以下の方針で設定する。

■インストール

  cd /usr/ports/mail/dovecot2
  make config 
  make install package clean
1.1.5.5.1. dovecot2 SSL 自己署名の証明書を作る

dovecotでは、自己署名証明書を作るためのシェルやテンプレが 用意されているので利用させてもらう。

■証明書の元データを記入

サーバの所在地とか、証明書に必要な事項を記入する。

Common Name(CN=)の所はメールサーバのFQDNを真面目に記載した方がいいらしい。 ここが不一致だと認証失敗にするメールクライアントがあるとのこと。

  vi /usr/local/share/doc/dovecot/dovecot-openssl.cnf
[ req ]
default_bits = 1024
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type
prompt = no

[ req_dn ]
# country (2 letter code)
C=JP

# State or Province Name (full name)
ST=Chiba

# Locality Name (eg. city)
L=Urayasu

# Organization (eg. company)
O=Dovecot

# Organizational Unit Name (eg. section)
OU=IMAP server

# Common Name (*.example.com is also possible)
CN=c90pc.tokyo3.nerv

# E-mail contact
emailAddress=george@c90pc.tokyo3.nerv

[ cert_type ]
nsCertType = server

■証明書作成シェルを変更する

証明書の有効期間は365日になっているので、3650日に変更する。

  vi /usr/local/share/doc/dovecot/mkcert.sh
@@ -33,7 +33,7 @@
   exit 1
 fi

-$OPENSSL req -new -x509 -nodes -config $OPENSSLCONFIG -out $CERTFILE -keyout $KEYFILE -days 365 || exit 2
+$OPENSSL req -new -x509 -nodes -config $OPENSSLCONFIG -out $CERTFILE -keyout $KEYFILE -days 3650 || exit 2
 chmod 0600 $KEYFILE
 echo
 $OPENSSL x509 -subject -fingerprint -noout -in $CERTFILE || exit 2

シェルを実行して、証明書ファイルを作る。

証明書ファイルは、/usr/local/etc/ssh/以下に作成することにした。

  mkdir -p /usr/local/etc/ssl/certs
  mkdir -p /usr/local/etc/ssl/private
  SSLDIR=/usr/local/etc/ssl
  export SSLDIR
  cd /usr/local/share/doc/dovecot
  bash /usr/local/share/doc/dovecot/mkcert.sh

/usr/local/etc/ssl/certs/dovecot.pem, /usr/local/etc/ssl/private/dovecot.pem ファイルが作成される。 証明書の位置がデフォルト設定とは異なるので、 後で設定ファイルにも反映しておく。

1.1.5.5.2. dovecot2 設定

dovecot2の設定ファイルは、/usr/local/etc/dovecot/ 以下に たくさん置かれている。 たしかに、細かく分割しすぎでよくわからんw

説明的には、doveconf -n の出力の方がわかりやすい。

ssh root@c60pc /usr/local/etc/dovecot $ doveconf -n
# 2.1.10: /usr/local/etc/dovecot/dovecot.conf
# OS: FreeBSD 9.1-RELEASE amd64

# 認証では、plain と login を使う。
auth_mechanisms = plain login

# 平文パスワードでの認証は許可しない ... はずだが、
# telnet localhost 143 から a login george password は通る。変なの。
disable_plaintext_auth = yes

# dovecotの待ち受けポートは IPv4の全部のポート。IPv6は使用しない。
listen = *

# メールのありかは、Maildir形式とする。
mail_location = maildir:~/Maildir

# inboxの中身の設定らしい。
namespace inbox {
  inbox = yes
  location =
  mailbox Drafts {
    special_use = \Drafts
  }
  mailbox Junk {
    special_use = \Junk
  }
  mailbox Sent {
    special_use = \Sent
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
  mailbox Trash {
    special_use = \Trash
  }
  prefix =
}

# パスワード認証は、OSのPAMを使う。
passdb {
  driver = pam
}

# IMAPのみサポート。pop3はウチの中では使用していない。
protocols = imap

# ローカルメール配信(FreeBSD機の中で閉じたメール配信)(LDA)は
# postfixを使う
sendmail_path = /usr/local/sbin/sendmail

# SSL通信は、要求されたら使う (STARTTLSモード)
ssl = required

# 自己署名の証明書は、デフォルトとは異なり
# /usr/local/etc/sslの中にした。
ssl_cert = </usr/local/etc/ssl/certs/dovecot.pem
ssl_key = </usr/local/etc/ssl/private/dovecot.pem

# ユーザー名の存在確認は、/etc/passwdファイルを使う。
userdb {
  driver = passwd
}
ssh root@c60pc /usr/local/etc/dovecot $

以下、設定ファイルを差分形式で示す。

diff -uwr dovecot.orig/conf.d/10-auth.conf dovecot/conf.d/10-auth.conf
--- dovecot.orig/conf.d/10-auth.conf	2013-01-27 19:21:21.000000000 +0900
+++ dovecot/conf.d/10-auth.conf	2013-01-27 22:24:29.000000000 +0900
@@ -7,6 +7,7 @@
 # matches the local IP (ie. you're connecting from the same computer), the
 # connection is considered secure and plaintext authentication is allowed.
 #disable_plaintext_auth = yes
+disable_plaintext_auth = yes
 
 # Authentication cache size (e.g. 10M). 0 means it's disabled. Note that
 # bsdauth, PAM and vpopmail require cache_key to be set for caching to be used.
@@ -96,7 +97,7 @@
 #   plain login digest-md5 cram-md5 ntlm rpa apop anonymous gssapi otp skey
 #   gss-spnego
 # NOTE: See also disable_plaintext_auth setting.
-auth_mechanisms = plain
+auth_mechanisms = plain login
 
 ##
 ## Password and user databases
diff -uwr dovecot.orig/conf.d/10-mail.conf dovecot/conf.d/10-mail.conf
--- dovecot.orig/conf.d/10-mail.conf	2013-01-27 19:21:21.000000000 +0900
+++ dovecot/conf.d/10-mail.conf	2013-01-27 19:35:14.000000000 +0900
@@ -28,6 +28,7 @@
 # <doc/wiki/MailLocation.txt>
 #
 #mail_location = 
+mail_location = maildir:~/Maildir
 
 # If you need to set multiple mailbox locations or want to change default
 # namespace settings, you can do it by defining namespace sections.
diff -uwr dovecot.orig/conf.d/10-ssl.conf dovecot/conf.d/10-ssl.conf
--- dovecot.orig/conf.d/10-ssl.conf	2013-01-27 19:21:21.000000000 +0900
+++ dovecot/conf.d/10-ssl.conf	2013-01-27 22:16:01.000000000 +0900
@@ -4,13 +4,14 @@
 
 # SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>
 #ssl = yes
+ssl = required
 
 # PEM encoded X.509 SSL/TLS certificate and private key. They're opened before
 # dropping root privileges, so keep the key file unreadable by anyone but
 # root. Included doc/mkcert.sh can be used to easily generate self-signed
 # certificate, just make sure to update the domains in dovecot-openssl.cnf
-ssl_cert = </etc/ssl/certs/dovecot.pem
-ssl_key = </etc/ssl/private/dovecot.pem
+ssl_cert = </usr/local/etc/ssl/certs/dovecot.pem
+ssl_key = </usr/local/etc/ssl/private/dovecot.pem
 
 # If key file is password protected, give the password here. Alternatively
 # give it when starting dovecot with -p parameter. Since this file is often
diff -uwr dovecot.orig/conf.d/15-lda.conf dovecot/conf.d/15-lda.conf
--- dovecot.orig/conf.d/15-lda.conf	2013-01-27 19:21:21.000000000 +0900
+++ dovecot/conf.d/15-lda.conf	2013-01-27 19:41:22.000000000 +0900
@@ -16,6 +16,7 @@
 
 # Binary to use for sending mails.
 #sendmail_path = /usr/sbin/sendmail
+sendmail_path = /usr/local/sbin/sendmail
 
 # If non-empty, send mails via this SMTP host[:port] instead of sendmail.
 #submission_host =
diff -uwr dovecot.orig/dovecot.conf dovecot/dovecot.conf
--- dovecot.orig/dovecot.conf	2013-01-27 19:21:21.000000000 +0900
+++ dovecot/dovecot.conf	2013-01-27 22:39:46.000000000 +0900
@@ -18,12 +18,14 @@
 
 # Protocols we want to be serving.
 #protocols = imap pop3 lmtp
+protocols = imap
 
 # A comma separated list of IPs or hosts where to listen in for connections. 
 # "*" listens in all IPv4 interfaces, "::" listens in all IPv6 interfaces.
 # If you want to specify non-default ports or anything more complex,
 # edit conf.d/master.conf.
 #listen = *, ::
+listen = *
 
 # Base directory where to store runtime data.
 #base_dir = /var/run/dovecot/

■/etc/rc.conf設定

  dovecot_enable="YES"
1.1.5.5.3. dovecot2 起動

■dovecot2 起動

  /usr/local/etc/rc.d/dovecot start
1.1.5.5.4. dovecot2 IMAP接続のテスト

■IMAPの接続テスト(telnet)

ポート番号143に接続し、「a login ユーザー名 パスワード」を入力する。 「a logout」はログアウトコマンド。

  telnet localhost 143
  a login george password
  a logout
ssh root@c60pc /usr/local/etc/dovecot $ telnet localhost 143
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN AUTH=LOGIN] Dovecot ready.
a login george password
a OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS SPECIAL-USE] Logged in
a logout
* BYE Logging out
a OK Logout completed.
Connection closed by foreign host.
ssh root@c60pc /usr/local/etc/dovecot $

■IMAPの接続テスト(STARTTLS型のssl経由)

STARTTLS型の接続を確認するには、opensslコマンドを使って ポート番号143に接続し、「a login ユーザー名 パスワード」を入力する。 「a logout」はログアウトコマンド。

  openssl s_client -connect localhost:143 -starttls imap
  a login george passwod
  a logout george password

■IMAPSの接続テスト(SSL接続)

IMAPS SSL型の接続を確認するには、opensslコマンドを使って ポート番号993に接続し、「a login ユーザー名 パスワード」を入力する。 「a logout」はログアウトコマンド。

  openssl s_client -connect localhost:993
  a login george passwod
  a logout george password

1.1.6. Webサーバ関連

1.1.6.1. apache 2.2 のインストール

  cd /usr/ports/www/apache22
  make config
    # コンフィギュレーションでは、手動で 
    # mod_proxy と mod_proxy_ajp を追加する
  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 c60pc.tokyo3.nerv:80  

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

  apachectl configtest

apacheを起動する。

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

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

  http://c60pc.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/c60pc.tokyo3.nerv-access.log   644  12    100  @01T04 B   /var/run/httpd.pid   30
  /var/log/c60pc.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.6.2. tomcat 7 のインストール

■インストール

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

tomcat7のportsにより、jsvc(commons-daemon)も自動的にインストールされる。 便利だ。

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

  # for tomcat7
  tomcat7_enable="YES"

■Tomcatを起動する

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

■試験アクセスを行う。

  http://c60pc.tokyo3.nerv:8080/
  http://c60pc.tokyo3.nerv:8080/index.jsp
  http://c60pc.tokyo3.nerv:8080/docs/

■Tomcatのポート番号変更

portsからTomcatをインストールした場合、TomcatへのHTTP接続ポート番号は8080となる。

ウチでは、小規模proxyソフトwwwoffledをポート番号8080で起動する予定なので、server.xmlを変更して、Tomcatのポート番号8180を使うように変更する。

  vi /usr/local/apache-tomcat-7.0/conf/server.xml
--- server.xml.orig     2013-01-28 02:14:37.000000000 +0900
+++ server.xml  2013-01-28 22:10:53.000000000 +0900
@@ -67,7 +67,7 @@
          APR (HTTP/AJP) Connector: /docs/apr.html
          Define a non-SSL HTTP/1.1 Connector on port 8080
     -->
-    <Connector port="8080" protocol="HTTP/1.1"
+    <Connector port="8180" protocol="HTTP/1.1"
                connectionTimeout="20000"
                redirectPort="8443" />
     <!-- A "Connector" using the shared thread pool-->

■Tomcatを再起動する。

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

■試験アクセス

  http://c60pc.tokyo3.nerv:8180/
  http://c60pc.tokyo3.nerv:8180/index.jsp
  http://c60pc.tokyo3.nerv:8180/docs/

■/usr/local/etc/rc.d/tomcat7の編集

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

  vi /usr/local/etc/rc.d/tomcat7
  export LANG=ja_JP.eucJP

1.1.6.3. mod_proxy + mod_proxy_ajp の設定

今回は趣向を変えて、 mod_jk ではなくて、mod_proxy + mod_proxy_ajp を使ってみる。 (興味本位)

apache22のコンパイル時に、mod_proxyとmod_proxy_ajpを手動で有効にして コンパイルしたので、/usr/local/libexec/apache22/以下にmod_proxy.soと mod_proxy_ajp.soが作成されている。

■/usr/local/etc/apache22/httpd.confの編集

ファイルの最後の方、Include etc/apache22/Includes/*.confの上に 以下の記述を追加する。

  vi /usr/local/etc/apache22/httpd.conf
<IfModule proxy_module>

    # 原則としてproxyはすべて禁止
    <Proxy *>
        Order Allow,Deny
        Deny from all
    </Proxy>

    <IfModule proxy_ajp_module>
        # /docs 以下は、 tomcatに任せる
        <Location /docs>
            Order Deny,Allow
            Allow from all
            ProxyPass     ajp://c60pc.tokyo3.nerv:8009/docs
        </Location>

    </IfModule>
</IfModule>

Include etc/apache22/Includes/*.conf

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

  apachectl configtest

■apacheを再起動する。

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

■試験アクセスを行う。

  http://c60pc.tokyo3.nerv/           こちらは Apache の It works! 表示
  http://c60pc.tokyo3.nerv/docs/      こちらは Tomcat のドキュメント表示
  http://c60pc.tokyo3.nerv/index.jsp  こちらは 404 Not Found になる

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

1.1.6.4. 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を再起動する。

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

1.1.6.5. 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 c60pc.tokyo3.nerv
    ServerAlias c60pc
    ErrorLog "/var/log/c60pc.tokyo3.nerv-error_log"
    CustomLog "/var/log/c60pc.tokyo3.nerv-access_log" common

    # UserDir
    UserDir public_html
    UserDir disabled
    UserDir enabled george webpub

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

        # Access control
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
        Allow from localhost
        Allow from 192.168.1.30
        Allow from 192.168.1.31
        Allow from 192.168.1.32
        Allow from 192.168.1.33
    </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 proxy_module>
        # 原則としてproxyはすべて禁止
        <Proxy *>
            Order Allow,Deny
            Deny from all
        </Proxy>
        # proxy_ajpの設定
        <IfModule proxy_ajp_module>
            <Location /docs>
                Order Deny,Allow
                Allow from all
                ProxyPass     ajp://c60pc.tokyo3.nerv:8009/docs
            </Location>
        </IfModule>
    </IfModule>

</VirtualHost>

/usr/local/etc/apache22/httpd.conf に記載した <IfModule proxy_module>〜</IfModule> の間は、コメントアウトするか、削除する。 (httpd-vhost.confに記述したので)

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

  apachectl configtest

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

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

アクセステスト

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

アクセステスト(CGI)

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

掲示板、WIKIテスト(CGI)

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

JSP/Servletテスト

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

1.1.6.6. apache22の詳細設定 SSL自己証明書の作成とmod sslの設定とvhostの設定

上のサイトを参考に設定する。

■SSL自己証明書の作成

  # 作業ディレクトリに移動
  cd /usr/local/etc/apache22
   
  # 秘密鍵の作成
  openssl genrsa -aes128 1024 > server.key
   
  # 公開鍵の作成 
  # (Common Name)はサイトのFQDNを入力する。
  # IPアドレスで運用する場合はIPアドレスを入力する。
  # ここがアクセス時の名前と異なると、偽サイト扱いとなり
  # ブラウザに蹴られる場合がある
  openssl req -new -key server.key > server.csr
   
  # デジタル証明書の作成
  openssl x509 -in server.csr -days 3650 -req -signkey server.key > server.crt
   
  # このままだとApache起動時に秘密鍵のパスフレーズの入力を求められるが、これを解除する
  mv server.key server.key.bak
  openssl rsa -in server.key.bak > server.key

■mod sslの設定

VirtualHostとSSL設定を併用する場合は、以下。

ということで、ここでは以下の方針で設定ファイルを作成する。

■/usr/local/etc/apache22/extra/httpd-ssl.conf の編集

#
# httpd-ssl.conf
#
# For detailing information about these directives
# see <URL:http://httpd.apache.org/docs/2.2/mod/mod_ssl.html>
#

Listen 443

AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl    .crl

SSLPassPhraseDialog  builtin

SSLSessionCache        "shmcb:/var/run/ssl_scache(512000)"
SSLSessionCacheTimeout  300

SSLMutex  "file:/var/run/ssl_mutex"

##
## SSL Virtual Host Context
##

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

<VirtualHost *:443>

#   General setup for the virtual host
    ServerAdmin george@yk.rim.or.jp
    DocumentRoot "/usr/local/www/apache22/data"
    ServerName c60pc.tokyo3.nerv
    ServerAlias c60pc
    ErrorLog "/var/log/c60pc.tokyo3.nerv-error_log"
    CustomLog "/var/log/c60pc.tokyo3.nerv-access_log" commonproxy

    # UserDir
    UserDir public_html
    UserDir disabled
    UserDir enabled george webpub

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

        # Access control
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
        Allow from localhost
        Allow from 192.168.1.30
        Allow from 192.168.1.31
        Allow from 192.168.1.32
        Allow from 192.168.1.33
    </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 proxy_module>
        # 原則としてproxyはすべて禁止
        <Proxy *>
            Order Allow,Deny
            Deny from all
        </Proxy>
        # proxy_ajpの設定
        <IfModule proxy_ajp_module>
            <Location /docs>
                Order Deny,Allow
                Allow from all
                ProxyPass     ajp://c60pc.tokyo3.nerv:8009/docs
            </Location>
        </IfModule>
    </IfModule>

    SSLEngine on

    SSLProtocol all -SSLv2

    SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5

    SSLCertificateFile "/usr/local/etc/apache22/server.crt"
    SSLCertificateKeyFile "/usr/local/etc/apache22/server.key"

    <FilesMatch "\.(cgi|shtml|phtml|php)$">
        SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory "/usr/local/www/apache22/cgi-bin">
        SSLOptions +StdEnvVars
    </Directory>

    BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

    CustomLog "/var/log/httpd-ssl_request.log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

</VirtualHost>

■/usr/local/etc/apache22/httpd.conf の編集


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

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

# Secure (SSL/TLS) connections ここのコメントアウトを解除
Include etc/apache22/extra/httpd-ssl.conf

#
# Note: The following must must be present to support
#       starting without SSL on platforms with no /dev/random equivalent
#       but a statically compiled-in mod_ssl.
#
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

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

  apachectl configtest

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

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

アクセステスト

  c60pc.tokyo3.nerv名義では、アクセスを許可する。
  https://c60pc.tokyo3.nerv/
  https://c60pc.tokyo3.nerv/~george/
  https://c60pc.tokyo3.nerv/~george/jindex.html
  https://c60pc.tokyo3.nerv/~george/jdiary_last.html

アクセステスト(CGI)

  https://c60pc.tokyo3.nerv/~george/cgi-bin/
  https://c60pc.tokyo3.nerv/~george/cgi-bin/env.cgi

掲示板、WIKIテスト(CGI)

  https://c60pc.tokyo3.nerv/~george/cgi-bin/cyclamen/

JSP/Servletテスト

  https://c60pc.tokyo3.nerv/docs/

1.1.6.7. www/wwwoffle

小規模なWWW proxy&キャッシュソフト。

オフラインモードがあり、htmlを解析して必要な画像などを取得するモードがあるのが特徴。

■インストール

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

■設定ファイル編集

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

ここでは、purge条件にmtimeを使用するため、use-mtime=yesとし、個別URLでpurgeするため、use-url=yesとする設定を行う。

【解説】wwwoffleのキャッシュは、デフォルトではドメイン単位でアクセスが無ければパージ(キャッシュファイルを消す)する動作だが、ドメイン単位でまったくアクセスがないWebサイトというのは滅多になくて、キャッシュ用ファイルの増大が止まらない。 パージ条件をURL単位の更新時間にすることで、人気Webサイトの中でも古いファイルを消すことができるようになる。

ssh root@c60pc /usr/local/etc $ diff -uw wwwoffle.conf.orig wwwoffle.conf
--- wwwoffle.conf.orig  2013-01-29 20:54:31.000000000 +0900
+++ wwwoffle.conf       2013-01-29 20:58:42.000000000 +0900
@@ -139,8 +139,8 @@

  password          = none

- max-servers       = 8
- max-fetch-servers = 4
+ max-servers       = 4
+ max-fetch-servers = 2
 }


@@ -552,13 +552,13 @@

  iframes     = yes

- scripts     = no
+ scripts     = yes

- objects     = no
+ objects     = yes

  webbug-images = yes

- icon-images   = no
+ icon-images   = yes

  only-same-host-images = no
 }
@@ -796,6 +796,8 @@
 {
  localhost
  127.0.0.1
+ c60pc
+ c60pc.tokyo3.nerv

  ::ffff:127.0.0.1

@@ -855,7 +857,7 @@

 AllowedConnectHosts
 {
-
+  127.0.0.1
 #### Example ####
 # Only allow connections from hosts in the foo.com domain.
 # *.foo.com
@@ -1324,12 +1326,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@c60pc /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

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

[ホームページ] [日記] [読んでいる日記] [秋葉原価格] [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 2015-12-31.)