ライン

ポイント:いろいろ試す:問題なし

ライン

 はじめに

FreeBSD 9.1-β1

 動作環境:ESX 5.0 Update1 (無料のHypervisor)のゲストOS環境として導入を行います。

 導入

VMwareの設定

 VMware Hypervisor を使います。

 前回よりメモリーを少し多めにしました。

OSの導入

 まずは、ISOイメージのダウンロードから。
ftp2.jp.freebsd.orgからFreeBSD-9.1-BETA1-amd64-disc1.iso を入手しダウンロードしておきます。

1. Boot [ENTER]そのまま。
<Install>をそのまま。
ここもYesでそのまま選択。
Japanese 106を選択します。106xはCapsLockキーとCtrlキーの位置が入れ替わっているものになるようです。
そちらがいい人は106xを選択します。
ここはホスト名を入力。
ゲームは外してみました。
<Guided>を選択
<Entire Disk>を選択
今回、またRAID 0で動作させようということで、VMwareのストレージのそれぞれに40GBを確保。
とりあえず、da0側に導入します。
パーティション側を選択します。
Finishを選択すると、以下のようにCommitを求められます。
この後導入が開始されます。
この後はrootのパスワードを聞かれますので入力します。
その後、ネットワークの選択です。
IPアドレスとサブネットマスク、デフォルトゲートウェイのアドレスを選択。
resolv.confの設定
いつも通りに、日本で選択。
システム設定では、sshdとntpdを選択しました。
クラッシュダンプは、サポートを受けているわけでもないので、取得しない方針にしました。
ユーザは1つだけ先行して作成しておくことにしました。
ここで完了です。

 少しだけメニューが変わったけれど、ZFSの選択ができるわけでもなく、まだまだですね。

portsnap

 portsnapで最新を入手します。

# portsnap fetch
Looking up portsnap.FreeBSD.org mirrors... none found.
Fetching public key from portsnap.FreeBSD.org... done.
Fetching snapshot tag from portsnap.FreeBSD.org... done.
Fetching snapshot metadata... done.
Fetching snapshot generated at DDD MMM DD HH:MM:DD JST 2012:
c5c93b41a3b830056bf7afeb5b6bf2e4670ac8447ba868 17% of   67 MB  701 kBps 01m19s

 上記の通り、約2分程度で最新のものがダウンロードされます。

 次に、/usr/ports以下に解凍しましょう。

# portsnap extract

 完了後、 portupgradeを導入します。

# rehash
# cd /usr/ports/ports-mgmt/portupgrade
# make install clean

 導入途中で、選択メニューが表示されますが、基本は表示されたまま OKで進みます。
もうしばらくは、portsの管理はこのツールにおまかせするつもりです。

 今回のディスクは、AFTじゃないので速度が普通に出る…。iSCSI経由で使うのはありだと思うけど、VMware ESXiのストレージにマウントされたAFTのディスクの扱いは、手間になるだけなので今しばらく避けた方が良さそうな気がしてきました。

gmirror

 このタイミングで入れておくことにしました。
これまでの状態をスナップショットを入れて保存。(いつでもここに戻れるポイントの設定)

 やろうとしていることが書かれているページを見つけました。
調べる手間が減りました。FreeBSD 9.0のGPTでのミラー構築というページ。

 簡潔に書かれていてわかりやすくて良いなぁ…。ちゃっちゃと作業をしてしまいましょう。

# camcontrol devlist
<NECVMWar VMware IDE CDR10 1.00>   at scbus1 target 0 lun 0 (cd0,pass0)
<VMware Virtual disk 1.0>          at scbus2 target 0 lun 0 (da0,pass1)
<VMware Virtual disk 1.0>          at scbus2 target 1 lun 0 (da1,pass2)
# gpart backup da0 > da0.gpt
# cat da0.gpt
GPT 128
1   freebsd-boot       34      128
2    freebsd-ufs      162 79691648
3   freebsd-swap 79691810  4194236
# gpart restore -F da1 < da0.gpt
# gpart show
=>      34  83886013  da0  GPT  (40G)
        34       128    1  freebsd-boot  (64k)
       162  79691648    2  freebsd-ufs  (38G)
  79691810   4194236    3  freebsd-swap  (2G)
  83886046         1       - free -  (512B)

=>      34  83886013  da1  GPT  (40G)
        34       128    1  freebsd-boot  (64k)
       162  79691648    2  freebsd-ufs  (38G)
  79691810   4194236    3  freebsd-swap  (2G)
  83886046         1       - free -  (512B)
# gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 da1
bootcode written to da1
# shutdown -p now

 そして、動作しているゲストOS(FreeBSD)をシャットダウンします。
CD-ROMをマウントして

強制的にBIOSセットアップで、CD-ROM起動をハードディスクよりも高く設定し直し、インストールで使ったCD-ROMを再度マウント状態にする。
上記、すっとぼけて、パワーオン時起動遅延を15にしていますが、これだと間に合いません。mSが単位ですからね。
10000して利用してください。十分かと思います。
起動してきたら、FIXITの代わりに < Live CD> を選択。
ログインプロンプトが来るので、"root"と入力。

 その後は、コマンドの入力をしていきます。

root@:/root # kldload geom_mirror 
root@:/root # gmirror label -vb round-robin p1 /dev/ada0p1 
GEOM_MIRROR: Device mirror/p1 launched (1/1).
Metadata value stored on /dev/da0p1.
root@:/root # gmirror label -vb round-robin p2 /dev/ada0p2 
GEOM_MIRROR: Device mirror/p2 launched (1/1).
Metadata value stored on /dev/da0p2.
root@:/root # gmirror label -vb round-robin p3 /dev/ada0p3 
GEOM_MIRROR: Device mirror/p3 launched (1/1).
Metadata value stored on /dev/da0p3.
root@:/root # gmirror status 
Name         status     Components
mirror/p1    COMPLETE    da0p1 (ACTIVE)
mirror/p2    COMPLETE    da0p2 (ACTIVE)
mirror/p3    COMPLETE    da0p3 (ACTIVE)
root@:/root # gmirror insert p1 /dev/da1p1
GEOM_MIRROR: Device p1: rebuilding provider da1p1. 
GEOM_MIRROR: Device p1: rebuilding provider da1p1 finished.  
root@:/root # gmirror insert p2 /dev/da1p2 
GEOM_MIRROR: Device p1: rebuilding provider da1p2. 
GEOM_MIRROR: Device p1: rebuilding provider da1p2 finished.  
root@:/root # gmirror insert p3 /dev/da1p3 
GEOM_MIRROR: Device p1: rebuilding provider da1p3. 
GEOM_MIRROR: Device p1: rebuilding provider da1p3 finished.  
root@:/root # gmirror status 
     Name    Status  Components
mirror/p1  COMPLETE  da0p1 (ACTIVE) 
                     da1p1 (ACTIVE) 
mirror/p2  DEGRADED  da0p2 (ACTIVE) 
                     da1p2 (SYNCHRONIZING, 0%) 
mirror/p3  DEGRADED  da0p3 (ACTIVE) 
                     da1p3 (SYNCHRONIZING, 0%) 
root@:/root #  mount /dev/mirror/p2 /mnt 
root@:/root #  cd /mnt/etc 
root@:/root #  vi fstab 
# Device                 Mountpoint       FStype    Options  Dump   Pass# 
/dev/mirror/p2        /                     ufs         rw         1         1 
/dev/mirror/p3        none                swap      sw         0         0 
(上記を追加) 
root@:/root #  cd /mnt/boot 
root@:/root #  vi loader.conf 
geom_mirror_load="YES"
(上記を追加) 
root@:/root #  reboot 

 こんなでいいみたい。簡単でいいな。

# df
Filesystem     1K-blocks    Used    Avail Capacity  Mounted on
/dev/mirror/p2  38577660 1981296 33510152     6%    /
devfs                  1       1        0   100%    /dev

同期が取れたら完了です。

editors/vim-lite

 実は、上記で同期をしている間に導入をしてしまおうと書いています。

# cd /usr/ports/editors/vim-lite
# make install clean

 導入後には、利用するユーザごとに .vimrc を作っておきます。

 DNSの設定

設定

 まず、/etc/rc.conf の設定。

named_enable="YES"
named_flags="-4 -c /etc/namedb/named.conf"

 ディレクトリの確認。

# cd /etc/namedb
# ll
total 36
drwxr-xr-x  2 bind  wheel    512 Jul 12 18:49 dynamic/
drwxr-xr-x  2 root  wheel    512 Jul 12 18:50 master/
-rw-r--r--  1 root  wheel  14323 Jul 12 18:50 named.conf
-rw-r--r--  1 root  wheel   3130 Jul 12 18:50 named.root
drwxr-xr-x  2 bind  wheel    512 Jul 12 18:49 slave/
drwxr-xr-x  2 bind  wheel    512 Jul 12 18:49 working/
# rndc-confgen -a -b 512 -u bind
wrote key file "/etc/namedb/rndc.key"

 ゾーンファイルはmasterのディレクトリに作成するので、そこも確認。

# cd master/
# ll
total 12
-rw-r--r--  1 root  wheel  234 Jul 12 18:50 empty.db
-rw-r--r--  1 root  wheel  256 Jul 12 18:50 localhost-forward.db
-rw-r--r--  1 root  wheel  324 Jul 12 18:50 localhost-reverse.db

 では、/etc/namedb/ を編集。
最初に

acl my-network {
                192.168.0.0/24;
};

 のように、自分のネットワークを追加。
グローバル側のネットワークに忘れずに記述します。

 optionsの設定にはいくつかを追加します。
recursionの有効化とlisten-onのアドレス範囲を列挙します。

recursion yes ;

listen-on 
                          { 127.0.0.1;
                          192.168.1.0/24;  };

allow-transferには、セカンダリに加えているアドレスを追加。
allow-query には、ユーザとしてDNSを利用させるアドレス帯を追加。
blackholeは、問い合わせに正常に回答させたくない先?を記述しました。

version "";

allow-transfer {];
allow-query {};
blackhole {};

logging には、出力させたいログの内容を加えます。

logging {
        channel bind_log        {
        file    "/var/log/named.log" versions   3 size  2m;
        severity        dynamic;
        print-time      yes;
        print-category  yes;
        print-severity  yes;
        };
        category        xfer-out        {
                                bind_log;
                        };
        category        update  {
                                bind_log;
                        };
};

 その他は、ドメインごとのゾーンファイルの設定を記述します。

zone    "example.jp" {
        type master;
        file "/etc/namedb/master/example.jp.zone";
        notify yes;
        allow-query { any ; };
        allow-transfer {
                        (セカンダリサーバのIPアドレス;
                        サーダリサーバのIPアドレス;};
};

必要個数分を書いていきます。masterのディレクトリの下に example.jp.zone というファイルを書くことになります。
以前は相対パスで書いていたのですが、今回から絶対パスに変更しました。
viの一括変換で「:%s;file "master/;file "/etc/namedb/master/;g」などとするとすぐ終わります。

ZONEファイルを作成していきます。

$TTL 86400
@       IN      SOA     ns.example.jp. postmaster.example.jp. (
                                2012080100 ; Serial
                                3600    ; Refresh
                                900     ; Retry
                                604800  ; Expire
                                1800 )  ; Minimum
                IN      NS      (DNSのマスターのFQDN.)
                IN      NS      (DNSのセカンダリのFQDN.)
                IN      NS      (DNSのサーダリのFQDN.)
                IN      A       (メールサーバのIPアドレス)
                IN      MX      10      (メールサーバのFQDN.)
;
ns             IN      A       (メールサーバのIPアドレス)
                IN      MX      10      (メールサーバのFQDN.)
;
www          IN      CNAME   ns
ftp             IN      CNAME   ns
mail           IN      CNAME   ns

 イメージとしてはこんな感じ作成しておきます。

# chown bind:bind *.zone
# chmod 640 *.zone

上記のようにパーミッション等をそろえて管理します。

 セカンダリを対向側のサーバには記述するものになりますが、そちらのnamed.conf には、

zone    "example.com"  {
        type    slave;
        file    "slave/example.com.bak";
        masters {
                (DNSのマスターのIPアドレス);
                (DNSのセカンダリのIPアドレス);
                };
        allow-query     {       any;    };
};

のように記述するだけです。
slave のディレクトリには、自動的に転送されたものが入って来るので、特に準備は不要です。

namedが落ちると名前が引けなくなるので、他への影響があります。
そういうことで、namedのデーモンを一定時間間隔でプロセス監視を行い、なければ自動的に起動させるようにスクリプトを入れています。
(今回は、その詳細の記述は割愛)

後は、/etc/resolv.conf に設定を入れれば完了。

pop3関連

 MTAは後回しにして、先にpop受信。
qpopperとdovecotの共存で動かしていたのですが、そろそろ一本化したいところ。
未だにPOP before SMTPをやめられない日本らしい環境の継続。
ウェブメール関連も使うために、IMAP4も使えるようにしようと考えると、Dovecotを使うことになる。
自分のページの@Aを眺め、先に進めることにした。

 Dovecot2は、2.1.8になっていました。

TCP Wrapperを利用できるように、ここは選択を加えました。

 とりあえず、導入を実施することにしました。

# cd /usr/ports/mail/dovecot2 
# make install clean

 導入はほどなく終わります。

---------------------------------------------------------------------

 You can get basic IMAP and POP3 services running by enabling
 dovecot in the /etc/rc.conf file.

        dovecot_enable
                (bool) If set to ``YES'', run the dovecot command
                at boot time.

 In the basic configuration Dovecot will authenticate users against
 the system's passwd file and use the default /var/mail/$USER mbox
 files.

        dovecot_config
                (str) Path to dovecot configuration file(s).
                Default /usr/local/etc/dovecot/dovecot.conf.

 To start multiple instances of dovecot set dovecot_config to
 a space separated list of configuration files.

---------------------------------------------------------------------

/etc/rc.conf には以下を加えます。

dovecot_enable="YES"

 導入途中で何かREADMEを作成している様子が見えていたので、それを確認。

# cd  /usr/local/etc/dovecot
# cat README
Configuration files go to this directory. See example configuration files in
/usr/local/share/doc/dovecot/example-config/

 なるほど。なんだか別ページにわけるべきだったと思うほど、いろいろありそうな感じ。

# ll /usr/local/share/doc/dovecot/example-config/
total 36
drwxr-xr-x  2 root  wheel  1024 Aug  5 17:47 conf.d/
-r--r--r--  1 root  wheel   410 Aug  5 17:47 dovecot-db.conf.ext
-r--r--r--  1 root  wheel   782 Aug  5 17:47 dovecot-dict-sql.conf.ext
-r--r--r--  1 root  wheel  5192 Aug  5 17:47 dovecot-ldap.conf.ext
-r--r--r--  1 root  wheel  5348 Aug  5 17:47 dovecot-sql.conf.ext
-r--r--r--  1 root  wheel  4195 Aug  5 17:47 dovecot.conf

 さて、設定を入れていきます。

# cp /usr/local/share/doc/dovecot/example-config/dovecot.conf /usr/local/etc/dovecot
# grep -v "#" dovecot.conf | grep -v '^$'
dict {
}
!include conf.d/*.conf
!include_try local.conf

 ほとんど、コメントになっているファイル。conf.d ももってこないとダメっぽいです。

# cp -pR /usr/local/share/doc/dovecot/example-config/conf.d ./

これで、環境は持ってこれたはず。local.conf は追加で作るファイルだろうから、これは空ファイルは作らないでもいいのかな。
とりあえず、起動してみることに。またSSL関連のエラーからはじまるのだろうか。

# /usr/local/etc/rc.d/dovecot start
Starting dovecot.
doveconf: Fatal: Error in configuration file /usr/local/etc/dovecot/conf.d/10-ssl.conf line 12
 : ssl_cert: Can't open file /etc/ssl/certs/dovecot.pem: No such file or directory
/usr/local/etc/rc.d/dovecot: WARNING: failed to start dovecot

想定通りでしたね。
前回に同様に作業が必要そう。

# cd  /usr/ports/mail/dovecot2
# make patch
===>  Found saved configuration for dovecot-2.1.8
===>  Extracting for dovecot-2.1.8
=> SHA256 Checksum OK for dovecot-2.1.8.tar.gz.
===>  Patching for dovecot-2.1.8
# cd work/dovecot-2.1.8/doc
# mkdir /etc/ssl/certs
# mkdir /etc/ssl/private
# sh ./mkcert.sh
Generating a 1024 bit RSA private key
.................++++++
...............................++++++
writing new private key to '/etc/ssl/private/dovecot.pem'
-----

subject= /OU=IMAP server/CN=imap.example.com/emailAddress=postmaster@example.com
SHA1 Fingerprint=83:〜
# cd -
# make clean
# /usr/local/etc/rc.d/dovecot start

これで起動するところまでは問題なし。
さて、受信を試してみることにします。

+OK Dovecot ready.
USER foo
-ERR Plaintext authentication disallowed on non-secure (SSL/TLS) connections.

これがデフォルトみたいです。
conf.d/10-auth.conf にある

#disable_plaintext_auth = yes

が効いている感じでしょうか。
修正してみました。再度実施します。

-ERR [IN-USE] Internal error occurred. Refer to server log for more information.

エラーです。メールのログは、メールのsyslogに出力されてしまうようですが、そっちを確認します。

Aug  5 19:22:18 HOST dovecot: pop3-login: Login: user=<foo>, method=PLAIN, rip=192.168.x.x, lip=192.168.x.x, mpid=33113, session=<GNnBIoLGGwDAqKG0>
Aug  5 19:22:18 HOST dovecot: pop3(foo): Error: user foo: Initialization failed: Namespace '': Mail storage autodetection failed with home=/home/foo
Aug  5 19:22:18 HOST dovecot: pop3(foo): Error: Invalid user settings. Refer to server log for more information.

これはメールボックスの形式を Maildirだと勘違いしているっぽいです。
conf.d/10-mail.conf 以下にしました。

mail_location = mbox:~/mail:INBOX=/var/mail/%u
mail_privileged_group = mail

はい、やっと受信できてきました。

 次は、APOP受信ができるかを試します。
conf.d/10-auth.conf で以下を追加しました。

auth_mechanisms = plain login apop

何もパスワード設定しないままで受信してもエラーになるのはわかっているものの受信。

Aug  5 19:40:15 HOST dovecot: auth: Fatal: APOP mechanism can't be supported with given passdbs
Aug  5 19:40:15 HOST dovecot: master: Error: service(auth): command startup failed, throttling for 8 secs
Aug  5 19:40:15 HOST dovecot: pop3-login: Disconnected: Auth process broken (disconnected before greeting, waited 0 secs): user=<>, rip=192.168.X.X, lip=192.168.X.X, session=<1f/5YoLGqwDAqKG0>

auth-passwdfile.conf.ext に記述する物のようだ。
それ以前に、10-auth.conf でコメントを外す必要がありそう。

!include auth-passwdfile.conf.ext

では、修正。

passdb {
  driver = passwd-file
  args = scheme=CRYPT username_format=%u /usr/local/etc/dovecot/users
}

次に、/usr/local/etc/dovecot/usersにパスワードを記述。

foo:{PLAIN}PASSWORD#:(UID):(GID)::/home/foo (←PASSWORD#がパスワード相当。平文で入力しておく)

はい、受信ができるようになりました。
セキュリティとして、以下のようにしました。

# chown dovecot:dovecot /usr/local/etc/dovecot/users
# chmod 740 /usr/local/etc/dovecot/users

 これにより把握されてしまうのは管理者グループだけに限定となりました。

 これで終われるかと思ったら、これまでpop3sにまで対応していたみたいで、これも準備しておく必要があるみたいです。
Becky!では正常に受信することができました。Edmaxのpop3sだと認証前にエラーになってしまう。
しかしながら、原因を追及するのはやめました。

ログに出力先を変更しました。
conf.d/10-logging.conf に以下を加えます。

log_path = /var/log/pop.log

これでmaillogの中身がごちゃごちゃにならないで済みます。
ログローテーとも適当に入れるようにします。(今回は省略)

 気になるので、以下を対処。

Aug 05 22:08:08 auth-worker(34240): Error: pam(foo,192.168.x.x): pam_authenticate() failed: authentication error (/etc/pam.d/dovecot missing?)

/usr/local/etc/pam.d/dovecot にしても良かったんですが、あえてそのまま /etc/pam.d/以下に作成しました。

auth      required        pam_unix.so     nullok
account required        pam_unix.so

これでひとまず完了。

 現段階の評価

問題なし

 サーバとして利用する場合には、特に問題もなく便利に利用できています。


【改訂履歴】作成:2012/07/28 更新:2012/08/05

【リンク】
http--www.dovecot.jp-dovecot.conf

デル株式会社

Copyright © 1996,1997-2006,2007- by F.Kimura,