ライン

ポイント:まだまだ過渡期

ライン

 はじめに

ウェブメール

 ウェブメールが利用したいので、ちょっと新しい物に触れてみました。
今回もFreeBSD上に導入しますが、仮想イメージファイルをそのままいただいてきて、Windows 7のVMPlayerで利用するところも一緒に試します。そんなことができる時代なんですね。

 VMPlayerにFreeBSD 10.1リリースをインストールする手順

ダウンロードとインストール

 まずはイメージを入手します。
どこでも置いてあるのかと思いきや、FTPサイトによるみたい。(…というか、ftp2/IIJが更新されていないまま?)
私は、
ftp://ftp3.jp.freebsd.org/pub/FreeBSD/releases/VM-IMAGES/10.1-RELEASE/amd64/Latest/
よりFreeBSD-10.1-RELEASE-amd64.vmdk.xzをいただいてきました。

 高圧縮でいいんだけど、.xzはWindows 7で利用するには面倒。
利用するには、フリーウェアのExplzh (x64)にtar64.dllを入れて解凍してください。
上記のように、vmdkファイルができあがりました。
これを使えばベイグラントを使わなくてもいいぐらいな気分です。

後で OSをインストール、を選択。
その他→FreeBSD 64ビットで。
適当にマシン名つけて、設置場所を指定。
これは無視で「続行」
ここで作成するディスクは後で削除するので、適当に。
「ハードウェアをカスタマイズ」を選択
NATやめてブリッジに変更。
メモリもCPUコアも余っていたので、割り当てを変更
さっき仮で作成したハードディスクを削除
ここで、一回保存し、「仮想マシン設定の編集」でハードディスクを追加します。
当然、ここは既存の仮想ディスクを使用を選択。
先ほど解凍したFreeBSDのVMイメージを選択。
既存の形式を保存で進める
できあがり。起動してみます。
きました!
rootでパスワードなしでログインできました。
これで後は通常の設定を加えれば完了です。

導入から起動まで11分間。
それもこのメモを付けるための作業時間込ですから、驚きのインストールスピードになりました。
これにネットワード設定を加えて、Chef soloで設定突っ込んだらいくらでも環境作り直せそうです。

bsdconfig

 では、通常の導入時に設定している内容を後から実施します。
既に、rootでログインしている前提で書きます。

# bsdconfig

入力してエンターで画面を表示させます。

106キーボードへの変更や、タイムゾーン、ホスト名、ネットワーク設定など必要な物を選択して完了させます。

rootのパスワードも付けたので、ここで一度再起動してみました。

# shutdown -r now

再度rootでログインしてみて、問題なく入れることを確認します。

後はTera Termで操作したいので、sshdを起動することにします。
※ここでは、先ほどのメニューの中でユーザを1つ作成しているため、ログインできます。rootでのログインはできません

# service sshd onestart

これで、rc.confに記述がなくても起動してきたはずです。

vimで生活したかったので、pkgから突っ込んでみました。

% su
Password:
# pkg install vim-lite
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from pkg+http://pkg.FreeBSD.org/freebsd:10:x86:64/latest, please wait...
Verifying signature with trusted certificate pkg.freebsd.org.2013102301... done
Installing pkg-1.3.8_3: 100%
Message for pkg-1.3.8_3:
 If you are upgrading from the old package format, first run:

  # pkg2ng
Updating FreeBSD repository catalogue...
Fetching meta.txz: 100%   940 B   0.9k/s    00:01
Fetching digests.txz: 100%    2 MB 515.5k/s    00:04
Fetching packagesite.txz: 100%    5 MB 484.8k/s    00:11
Processing new repository entries: 100%
FreeBSD repository update completed. 23717 packages processed:
  0 updated, 0 removed and 23717 added.
Updating database digests format: 100%
The following 1 packages will be affected (of 0 checked):

New packages to be INSTALLED:
        vim-lite: 7.4.430

The process will require 20 MB more space.
5 MB to be downloaded.

Proceed with this action? [y/N]: y
Fetching vim-lite-7.4.430.txz: 100%    5 MB 544.0k/s    00:09
Checking integrity... done (0 conflicting)
[1/1] Installing vim-lite-7.4.430: 100%

はい。できあがり。

# vi .profile

試してみました。

はい。ちゃんと使えるようになっています。
※.cshrcや.vimrcは、この前で追加していますので念のため

では、以降sshdが利用できるように最初の設定をいれます。
/etc/rc.confに

# SSH Server
sshd_enable="YES"

# NTP
ntpdate_enable="YES"
ntpdate_hosts="ntp.jst.mfeed.ad.jp"
ntpdate_flags="-b -s"

ntpd_enable="YES"

のように追加して保存します。

こんな感じで環境ができあがりました。

 Mailpileのインストール

portsはまだ存在していない

 ports/pkgだけで生活するのがいいんだけど、最近はそうならないみたいです。
では、できるところまでやってみます。

 debian only ・ Issue #328 ・ mailpile-Mailpile ・ GitHubに書かれている通りで入れてみます。
 まずは、python2.7を入れます。

# pkg install python27
Updating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.
The following 4 packages will be affected (of 0 checked):

New packages to be INSTALLED:
        python27: 2.7.8_6
        libffi: 3.0.13_3
        indexinfo: 0.2
        gettext: 0.18.3.1_1

The process will require 73 MB more space.
11 MB to be downloaded.

Proceed with this action? [y/N]: y
Fetching python27-2.7.8_6.txz: 100%    8 MB 494.7k/s    00:18
Fetching libffi-3.0.13_3.txz: 100%   32 KB  33.1k/s    00:01
Fetching indexinfo-0.2.txz: 100%    5 KB   4.9k/s    00:01
Fetching gettext-0.18.3.1_1.txz: 100%    2 MB 532.7k/s    00:04
Checking integrity... done (0 conflicting)
[1/4] Installing indexinfo-0.2: 100%
[2/4] Installing libffi-3.0.13_3: 100%
[3/4] Installing gettext-0.18.3.1_1: 100%
[4/4] Installing python27-2.7.8_6: 100%

 こんなイメージ。続きは面倒なので一挙に入れます。

# pkg install git py27-lxml py27-pip
Updating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.
The following 24 packages will be affected (of 0 checked):

New packages to be INSTALLED:
        git: 2.1.2
        expat: 2.1.0_1
        p5-Authen-SASL: 2.16
        p5-GSSAPI: 0.28
        perl5: 5.16.3_11
        p5-Digest-HMAC: 1.03
        p5-Net-SMTP-SSL: 1.01_2
        p5-IO-Socket-SSL: 2.002
        p5-Mozilla-CA: 20130114
        p5-Net-SSLeay: 1.66
        p5-Socket: 2.015
        p5-IO-Socket-IP: 0.32
        p5-Error: 0.17022
        curl: 7.38.0_2
        ca_root_nss: 3.17.2_1
        cvsps: 2.1_1
        p5-MIME-Base64: 3.14
        py27-lxml: 3.4.0
        libxslt: 1.1.28_4
        libxml2: 2.9.2_2
        libgcrypt: 1.6.1_5
        libgpg-error: 1.17
        py27-setuptools27: 5.5.1
        py27-pip: 1.5.6

The process will require 113 MB more space.
23 MB to be downloaded.

Proceed with this action? [y/N]: y
Fetching git-2.1.2.txz: 100%    3 MB 407.9k/s    00:08
Fetching expat-2.1.0_1.txz: 100%   97 KB  99.6k/s    00:01
Fetching p5-Authen-SASL-2.16.txz: 100%   44 KB  44.6k/s    00:01
Fetching p5-GSSAPI-0.28.txz: 100%   40 KB  41.3k/s    00:01
Fetching perl5-5.16.3_11.txz: 100%   13 MB 461.1k/s    00:29
Fetching p5-Digest-HMAC-1.03.txz: 100%    9 KB   9.4k/s    00:01
Fetching p5-Net-SMTP-SSL-1.01_2.txz: 100%   11 KB  10.8k/s    00:01
Fetching p5-IO-Socket-SSL-2.002.txz: 100%  136 KB 139.1k/s    00:01
Fetching p5-Mozilla-CA-20130114.txz: 100%  129 KB 131.9k/s    00:01
Fetching p5-Net-SSLeay-1.66.txz: 100%  231 KB 236.6k/s    00:01
Fetching p5-Socket-2.015.txz: 100%   38 KB  38.4k/s    00:01
Fetching p5-IO-Socket-IP-0.32.txz: 100%   27 KB  27.4k/s    00:01
Fetching p5-Error-0.17022.txz: 100%   24 KB  24.8k/s    00:01
Fetching curl-7.38.0_2.txz: 100%    1 MB 439.0k/s    00:03
Fetching ca_root_nss-3.17.2_1.txz: 100%  314 KB 322.0k/s    00:01
Fetching cvsps-2.1_1.txz: 100%   34 KB  35.1k/s    00:01
Fetching p5-MIME-Base64-3.14.txz: 100%   16 KB  16.8k/s    00:01
Fetching py27-lxml-3.4.0.txz: 100%    2 MB 486.1k/s    00:04
Fetching libxslt-1.1.28_4.txz: 100%  212 KB 216.8k/s    00:01
Fetching libxml2-2.9.2_2.txz: 100%  756 KB 387.3k/s    00:02
Fetching libgcrypt-1.6.1_5.txz: 100%  440 KB 450.2k/s    00:01
Fetching libgpg-error-1.17.txz: 100%  111 KB 114.1k/s    00:01
Fetching py27-setuptools27-5.5.1.txz: 100%  284 KB 290.7k/s    00:01
Fetching py27-pip-1.5.6.txz: 100%    1 MB 407.6k/s    00:03
Checking integrity... done (0 conflicting)
[1/24] Installing perl5-5.16.3_11: 100%
[2/24] Installing p5-Socket-2.015: 100%
[3/24] Installing p5-Mozilla-CA-20130114: 100%
[4/24] Installing p5-Net-SSLeay-1.66: 100%
[5/24] Installing p5-IO-Socket-IP-0.32: 100%
[6/24] Installing libgpg-error-1.17: 100%
[7/24] Installing p5-GSSAPI-0.28: 100%
[8/24] Installing p5-Digest-HMAC-1.03: 100%
[9/24] Installing p5-IO-Socket-SSL-2.002: 100%
[10/24] Installing ca_root_nss-3.17.2_1: 100%
[11/24] Installing libxml2-2.9.2_2: 100%
[12/24] Installing libgcrypt-1.6.1_5: 100%
[13/24] Installing expat-2.1.0_1: 100%
[14/24] Installing p5-Authen-SASL-2.16: 100%
[15/24] Installing p5-Net-SMTP-SSL-1.01_2: 100%
[16/24] Installing p5-Error-0.17022: 100%
[17/24] Installing curl-7.38.0_2: 100%
[18/24] Installing cvsps-2.1_1: 100%
[19/24] Installing p5-MIME-Base64-3.14: 100%
[20/24] Installing libxslt-1.1.28_4: 100%
[21/24] Installing py27-setuptools27-5.5.1: 100%
===> Creating users and/or groups.
Creating group 'git_daemon' with gid '964'.
Creating user 'git_daemon' with uid '964'.
[22/24] Installing git-2.1.2: 100%
Updating /etc/shells
[23/24] Installing py27-lxml-3.4.0: 100%
[24/24] Installing py27-pip-1.5.6: 100%

 あっという間に完了。

ついでなので、ここでapache22も入れておきました。

# pkg install apache
Updating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.
pkg: No packages available to install matching 'apache' have been found in the repositories
kimura /home/kimura #pkg install apache2
Updating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.
pkg: No packages available to install matching 'apache2' have been found in the repositories
kimura /home/kimura #pkg install apache22
Updating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.
The following 5 packages will be affected (of 0 checked):

New packages to be INSTALLED:
        apache22: 2.2.29_2
        pcre: 8.35_1
        apr: 1.5.1.1.5.4
        gdbm: 1.11_2
        db5: 5.3.28_2

The process will require 71 MB more space.
16 MB to be downloaded.

Proceed with this action? [y/N]: y
Fetching apache22-2.2.29_2.txz: 100%    2 MB 510.5k/s    00:05
Fetching pcre-8.35_1.txz: 100%    1 MB 535.4k/s    00:02
Fetching apr-1.5.1.1.5.4.txz: 100%  394 KB 403.0k/s    00:01
Fetching gdbm-1.11_2.txz: 100%  141 KB 144.5k/s    00:01
Fetching db5-5.3.28_2.txz: 100%   12 MB 489.4k/s    00:26
Checking integrity... done (0 conflicting)
[1/5] Installing gdbm-1.11_2: 100%
[2/5] Installing db5-5.3.28_2: 100%
[3/5] Installing pcre-8.35_1: 100%
[4/5] Installing apr-1.5.1.1.5.4: 100%
===> Creating users and/or groups.
Using existing group 'www'.
Using existing user 'www'.
[5/5] Installing apache22-2.2.29_2: 100%
/usr/local/share/examples/apache22/httpd.conf -> /usr/local/etc/apache22/httpd.conf

 Mailpileのインストールにやっと入ります。

# cd /usr/local/www/
# git clone https://github.com/pagekite/Mailpile.git
Cloning into 'Mailpile'...
remote: Counting objects: 28854, done.
remote: Compressing objects: 100% (243/243), done.
remote: Total 28854 (delta 140), reused 0 (delta 0)
Receiving objects: 100% (28854/28854), 15.96 MiB | 260.00 KiB/s, done.
Resolving deltas: 100% (18870/18870), done.
Checking connectivity... done.

 入りました。
 では、続きです。

# cd Mailpile
# pip install -r requirements.txt
Requirement already satisfied (use --upgrade to upgrade): lxml>=2.3.2 in /usr/local/lib/python2.7/site-packages
 (from -r requirements.txt (line 1))
Downloading/unpacking Jinja2 (from -r requirements.txt (line 2))
  Downloading Jinja2-2.7.3.tar.gz (378kB): 378kB downloaded
  Running setup.py (path:/tmp/pip_build_root/Jinja2/setup.py) egg_info for package Jinja2

    warning: no files found matching '*' under directory 'custom_fixers'
    warning: no previously-included files matching '*' found under directory 'docs/_build'
    warning: no previously-included files matching '*.pyc' found under directory 'jinja2'
    warning: no previously-included files matching '*.pyc' found under directory 'docs'
    warning: no previously-included files matching '*.pyo' found under directory 'jinja2'
    warning: no previously-included files matching '*.pyo' found under directory 'docs'
Downloading/unpacking spambayes>=1.1b1 (from -r requirements.txt (line 3))
  Downloading spambayes-1.1b1.tar.gz (1.0MB): 1.0MB downloaded
  Running setup.py (path:/tmp/pip_build_root/spambayes/setup.py) egg_info for package spambayes

Downloading/unpacking markupsafe (from -r requirements.txt (line 4))
  Downloading MarkupSafe-0.23.tar.gz
  Running setup.py (path:/tmp/pip_build_root/markupsafe/setup.py) egg_info for package markupsafe

Downloading/unpacking pyDNS (from -r requirements.txt (line 5))
  Downloading pydns-2.3.6.tar.gz
  Running setup.py (path:/tmp/pip_build_root/pyDNS/setup.py) egg_info for package pyDNS

Downloading/unpacking pgpdump (from -r requirements.txt (line 6))
  Downloading pgpdump-1.5.tar.gz (69kB): 69kB downloaded
  Running setup.py (path:/tmp/pip_build_root/pgpdump/setup.py) egg_info for package pgpdump

Downloading/unpacking lockfile>=0.2 (from spambayes>=1.1b1->-r requirements.txt (line 3))
  Downloading lockfile-0.10.2-py2-none-any.whl
Installing collected packages: Jinja2, spambayes, markupsafe, pyDNS, pgpdump, lockfile
  Running setup.py install for Jinja2

    warning: no files found matching '*' under directory 'custom_fixers'
    warning: no previously-included files matching '*' found under directory 'docs/_build'
    warning: no previously-included files matching '*.pyc' found under directory 'jinja2'
    warning: no previously-included files matching '*.pyc' found under directory 'docs'
    warning: no previously-included files matching '*.pyo' found under directory 'jinja2'
    warning: no previously-included files matching '*.pyo' found under directory 'docs'
  Could not find .egg-info directory in install record for Jinja2 (from -r requirements.txt (line 2))
  Running setup.py install for spambayes
    changing mode of build/scripts-2.7/sb_client.py from 644 to 755
    changing mode of build/scripts-2.7/sb_dbexpimp.py from 644 to 755
    changing mode of build/scripts-2.7/sb_evoscore.py from 644 to 755
    changing mode of build/scripts-2.7/sb_filter.py from 644 to 755
    changing mode of build/scripts-2.7/sb_bnfilter.py from 644 to 755
    changing mode of build/scripts-2.7/sb_bnserver.py from 644 to 755
    changing mode of build/scripts-2.7/sb_imapfilter.py from 644 to 755
    changing mode of build/scripts-2.7/sb_mailsort.py from 644 to 755
    changing mode of build/scripts-2.7/sb_mboxtrain.py from 644 to 755
    changing mode of build/scripts-2.7/sb_notesfilter.py from 644 to 755
    changing mode of build/scripts-2.7/sb_pop3dnd.py from 644 to 755
    changing mode of build/scripts-2.7/sb_server.py from 644 to 755
    changing mode of build/scripts-2.7/core_server.py from 644 to 755
    changing mode of build/scripts-2.7/sb_unheader.py from 644 to 755
    changing mode of build/scripts-2.7/sb_upload.py from 644 to 755
    changing mode of build/scripts-2.7/sb_xmlrpcserver.py from 644 to 755
    changing mode of build/scripts-2.7/sb_chkopts.py from 644 to 755

    changing mode of /usr/local/bin/sb_client.py to 755
    changing mode of /usr/local/bin/sb_dbexpimp.py to 755
    changing mode of /usr/local/bin/sb_evoscore.py to 755
    changing mode of /usr/local/bin/sb_filter.py to 755
    changing mode of /usr/local/bin/sb_bnfilter.py to 755
    changing mode of /usr/local/bin/sb_bnserver.py to 755
    changing mode of /usr/local/bin/sb_imapfilter.py to 755
    changing mode of /usr/local/bin/sb_mailsort.py to 755
    changing mode of /usr/local/bin/sb_mboxtrain.py to 755
    changing mode of /usr/local/bin/sb_notesfilter.py to 755
    changing mode of /usr/local/bin/sb_pop3dnd.py to 755
    changing mode of /usr/local/bin/sb_server.py to 755
    changing mode of /usr/local/bin/core_server.py to 755
    changing mode of /usr/local/bin/sb_unheader.py to 755
    changing mode of /usr/local/bin/sb_upload.py to 755
    changing mode of /usr/local/bin/sb_xmlrpcserver.py to 755
    changing mode of /usr/local/bin/sb_chkopts.py to 755
  Could not find .egg-info directory in install record for spambayes>=1.1b1 (from -r requirements.txt (line 3))
  Running setup.py install for markupsafe

    building 'markupsafe._speedups' extension
    cc -fno-strict-aliasing -O2 -pipe -fstack-protector -fno-strict-aliasing -DNDEBUG -fPIC -I/usr/local/include/python2.7
 -c markupsafe/_speedups.c -o build/temp.freebsd-10.1-RELEASE-amd64-2.7/markupsafe/_speedups.o
    cc -shared -pthread -Wl,-rpath,/usr/lib:/usr/local/lib -Wl,-rpath=/usr/lib:/usr/local/lib -fstack-protector
 build/temp.freebsd-10.1-RELEASE-amd64-2.7/markupsafe/_speedups.o -L/usr/local/lib -lpython2.7
 -o build/lib.freebsd-10.1-RELEASE-amd64-2.7/markupsafe/_speedups.so
  Could not find .egg-info directory in install record for markupsafe (from -r requirements.txt (line 4))
  Running setup.py install for pyDNS
    /usr/local/bin/python2.7 -O /tmp/tmpsb_rg0.py
    removing /tmp/tmpsb_rg0.py

  Could not find .egg-info directory in install record for pyDNS (from -r requirements.txt (line 5))
  Running setup.py install for pgpdump

  Could not find .egg-info directory in install record for dump (from -r requirements.txt (line 6))
Successfully installed Jinja2 spambayes markupsafe pyDNS pgpdump lockfile
Cleaning up...

 では、続きのセットアップに進みましょう。

セットアップ

 セットアップを実施します。

# ./mp
env: python2: No such file or directory

 これは想定通り。Getting started on Open BSDに書かれているのを見ていました。

# ln -s /usr/local/bin/python2.7 /usr/local/bin/python2
# ./mp

 今度は大丈夫。

 動作しているはずなので、ポートを確認してみます。

# sockstat -4l
USER     COMMAND    PID   FD PROTO  LOCAL ADDRESS         FOREIGN ADDRESS
root     python2.7  53287 4  tcp4   127.0.0.1:33411       *:*
root     sendmail   548   3  tcp4   127.0.0.1:25          *:*
root     sshd       545   4  tcp4   *:22                  *:*
root     ntpd       511   20 udp4   *:123                 *:*
root     ntpd       511   22 udp4   192.168.161.15:123    *:*
root     ntpd       511   25 udp4   127.0.0.1:123         *:*
root     syslogd    352   7  udp4   *:514                 *:*

 Apacheでリバースプロキシを動作させて、SSLで参照できるようにすることにします。

リバースプロキシの設定

 apache22は、先ほど導入を終えていますので、設定から開始します。
/usr/local/etc/apache22/httpd.confに以下をコメントアウトして有効にします。

# Secure (SSL/TLS) connections
Include etc/apache22/extra/httpd-ssl.conf

ServerName webmail.local

 ついでに、ServerNameに名前を与えておきます。

# openssl genrsa -out /usr/local/etc/apache22/server.key 4096
Generating RSA private key, 4096 bit long modulus
.............................++
..........++
e is 65537 (0x10001)
# openssl req -new -days 3650 \
-key /usr/local/etc/apache22/server.key \
-out /usr/local/etc/apache22/server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Shinjuku
Organization Name (eg, company) [Internet Widgits Pty Ltd]:webmail
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:webmail.local
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
# openssl x509 -in /usr/local/etc/apache22/server.csr \
-out /usr/local/etc/apache22/server.crt -req \
-signkey /usr/local/etc/apache22/server.key \
-days 3650
Signature ok
subject=/C=JP/ST=Tokyo/L=Shinjuku/O=webmail/CN=webmail.local
Getting Private key
# chmod 400 server.*

 /etc/rc.conf に以下に追加。

# apache22
apache22_enable="YES"
apache22_http_accept_enable="YES"

 まずはサービスをあげて動作を確認します。

# service apache22 start
Performing sanity check on apache22 configuration:
Syntax OK
Starting apache22.

 自己認証局による動作を確認します。

 動作しました。
さて、しかしながら、デフォルトのApache22ではmod_proxyは組み込まれていないようなので、portsでリコンパイルします。

# portsnap fetch
# portsnap extract
# pkg install dialog4ports
Updating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.
The following 1 packages will be affected (of 0 checked):

New packages to be INSTALLED:
        dialog4ports: 0.1.5_2

The process will require 24 KB more space.
11 KB to be downloaded.

Proceed with this action? [y/N]: y
Fetching dialog4ports-0.1.5_2.txz: 100%   11 KB  11.4k/s    00:01
Checking integrity... done (0 conflicting)
[1/1] Installing dialog4ports-0.1.5_2: 100%
# cd /usr/ports/www/apache22
# make config

 apacheのPROXY_HTTPにチェックを入れて。

 では、コンパイルを実施します。

# make reinstall clean

 モジュールができていることを確認します。

# ll /usr/local/libexec/apache22/mod_proxy*
-rwxr-xr-x  1 root  wheel  83200 Nov 23 11:14 /usr/local/libexec/apache22/mod_proxy.so*
-rwxr-xr-x  1 root  wheel  33344 Nov 23 11:14 /usr/local/libexec/apache22/mod_proxy_http.so*

 httpd.confに以下2行を加えます。。

LoadModule proxy_module libexec/apache22/mod_proxy.so
LoadModule proxy_http_module libexec/apache22/mod_proxy_http.so

 /usr/local/etc/apache22/Includes/revproxy.confを追加作成しました。

Listen 192.168.0.15:4433
<VirtualHost 192.168.0.15:4433>
        ServerName      webmail.local
        ErrorLog        /var/log/webmail_error.log
        CustomLog       /var/log/webmail_access.log common
        <IfModule mod_ssl.c>
                SSLEngine       on
                SSLCertificateFile "/usr/local/etc/apache22/server.crt"
                SSLCertificateKeyFile "/usr/local/etc/apache22/server.key"
        </IfModule>
        <IfModule mod_proxy.c>
                ProxyRequests   Off
                ProxyPass       /       http://127.0.0.1:33411/
                ProxyPassReverse        /       http://127.0.0.1:33411/
                ProxyVia        On
        </IfModule>
        <Proxy *>
                Order deny,allow
                Deny from all
                Allow from 192.168.0.0/24
        </Proxy>
</VirtualHost>

のようにしてみました。
良くは知りませんが、mod_proxy.soだけで良かったのでは?とも思うのですが、確認していません。

ちなみに、リバースプロキシは後々ACLなどで便利そうですし、SSL接続で利用できるのがメリットなので導入しただけで、
./mp --set sys.http_host=0.0.0.0 とかにすると、ローカルホスト以外からの利用が可能になります。

# service apache22 restart
Performing sanity check on apache22 configuration:
Syntax OK
Stopping apache22.
Waiting for PIDS: 96307.
Performing sanity check on apache22 configuration:
Syntax OK
Starting apache22.

まずは画面表示を確認してみます。

さて、上記にパスフレーズを入れても先に進みません。
Youtubeで見る限り、先に進めているのに。

とりあえず、SSLのエラー画面が毎回邪魔なので、

# cd /usr/local/etc/apache22
# openssl x509 -inform pem -in server.crt -outform der -out server.der

として、得られた鍵で利用PCのルート証明書に加えました。

エラーになっている画面は、GPGの入力する画面と思うのに、GnuPGが入っていないのはおかしい。
突っ込んで再度実施することにしました。

# pkg install GnuPG
Updating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.
Updating database digests format: 100%
The following 4 packages will be affected (of 0 checked):

New packages to be INSTALLED:
        gnupg: 2.0.26_1
        libksba: 1.3.1
        libassuan: 2.1.2_1
        pth: 2.0.7_1

The process will require 8 MB more space.
2 MB to be downloaded.

Proceed with this action? [y/N]: y
Fetching gnupg-2.0.26_1.txz: 100%    1 MB 427.8k/s    00:03
Fetching libksba-1.3.1.txz: 100%  150 KB 154.0k/s    00:01
Fetching libassuan-2.1.2_1.txz: 100%   71 KB  73.1k/s    00:01
Fetching pth-2.0.7_1.txz: 100%  145 KB 148.2k/s    00:01
Checking integrity... done (0 conflicting)
[1/4] Installing libksba-1.3.1: 100%
[2/4] Installing libassuan-2.1.2_1: 100%
[3/4] Installing pth-2.0.7_1: 100%
[4/4] Installing gnupg-2.0.26_1: 100%

再度実施してみることにします。

良し!やっぱりこれだった。
メールの受信も送信も問題ないことを確認することができました。

さて、これを常時あげておくにはどうすれば良いのでしょう?
今のところ、こんな感じにしてありますが。

# ./mp --www=127.0.0.1:33411 --wait
Loaded language ja
Elapsed: 0.023s (www: Started the web server on http://127.0.0.1:33411/)

OK: Started the web server on http://127.0.0.1:33411/

Mailpile.py          a tool                 Copyright 2013-2014, Mailpile ehf
               for searching and                   <https://www.mailpile.is/>
           organizing piles of e-mail

This program is free software: you can redistribute it and/or modify it under
the terms of either the GNU Affero General Public License as published by the
Free Software Foundation or the Apache License 2.0 as published by the Apache
Software Foundation. See the file COPYING.md for details.

The Web interface address is: http://127.0.0.1:33411/

これはちゃんと上がってきますが。バックグラウンドで浮かべて、KILLで終了するものでいいのかな。
使うときだけ、sshで接続して浮かべて、終わったら消すなのかな。

とりあえず、その後も設定したパスフレーズでログインできることを確認しました。

しかしながら、一度デーモンを終了すると「Oops, wrong passphrase. Try again?」とかいってくる。

なんだか良くわからない。/root/.local の下のファイルや.gnupgのディレクトリ以下は存在しているけど。
サーバには、

Boo! GET_HIDDEN passphrase not found in
[GNUPG:] GOT_IT
[GNUPG:] NEED_PASSPHRASE_SYM 3 3 2
[GNUPG:] ERROR get_passphrase 85
[GNUPG:] MISSING_PASSPHRASE

Traceback (most recent call last):
  File "/usr/local/www/Mailpile/mailpile/crypto/gpgi.py", line 1058, in run
    self.run_script, self.main_script)
  File "/usr/local/www/Mailpile/mailpile/crypto/gpgi.py", line 868, in chat
    return callback(proc, *args, **kwargs)
  File "/usr/local/www/Mailpile/mailpile/crypto/gpgi.py", line 1045, in run_script
    self.expect_exact(proc, exp, timeout=tmo)
  File "/usr/local/www/Mailpile/mailpile/crypto/gpgi.py", line 1034, in expect_exact
    if RunTimed(timeout, self._expecter, proc, exp, timebox):
  File "/usr/local/www/Mailpile/mailpile/util.py", line 717, in RunTimed
    RunTimedThread(func.__name__, work).run_timed(timeout)
  File "/usr/local/www/Mailpile/mailpile/util.py", line 707, in run_timed
    raise TimedOut('Timed out: %s' % self.name)
TimedOut: Timed out: _expecter

のようなものが残っていました。この辺りをどうにかしないといけないんだろうか。

少し悩んでみて、https://github.com/mailpile/Mailpile/wiki/Getting-started-on-linuxにある

GnuPG (preferably on the 1.x branch for now, as Mailpile doesn't currently act as a GPG Agent) 

というフレーズを見つけた。これかな、と

# pkg delete gnupg
Checking integrity... done (0 conflicting)
Deinstallation has been requested for the following 2 packages (of 0 packages in the universe):

Installed packages to be REMOVED:
        gnupg-2.0.26_1
        gpgme-1.5.1_1 (depends on gnupg-2.0.26_1)

The operation will free 8 MB.

Proceed with deinstalling packages? [y/N]: y
[1/2] Deleting gpgme-1.5.1_1: 100%
[2/2] Deleting gnupg-2.0.26_1: 100%
# pkg install gnupg1
Updating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.
The following 1 packages will be affected (of 0 checked):

New packages to be INSTALLED:
        gnupg1: 1.4.18_1

The process will require 5 MB more space.
1 MB to be downloaded.

Proceed with this action? [y/N]: y
Fetching gnupg1-1.4.18_1.txz: 100%    1 MB 539.1k/s    00:02
Checking integrity... done (0 conflicting)
[1/1] Installing gnupg1-1.4.18_1: 100%

と入れ替えてみた。

…例のエラーはでなくなった。問題無く動作するようになりました。
そういうことか!!

はい。今度は、ちゃんとパスフレーズを記憶してくれて、デーモンを立ち上げ直しても利用できるようになりました。
ここまで動くと、日本語表示させてみたくなりますよね。
/usr/local/www/Mailpile/locale/ja/LC_MESSAGES/mailpile.poを見る限り、少しは日本語入っているみたいだ。
Yusei Nishiokaさんが作成中みたい。

のようにひっそりと、日本語。

さて、テストで使っているgmailのアカウントにはメールが届いているはずなのに、Mailpile側には表示されて来ない。
IMAP/SSLでつながっているはずなのに。あ、ゴミ箱に入っていた。何故?

上記が、ウェブから見たgmailの内容。
下がMailpileでもメール。サブジェクト以外は文字化けした状態のままみたいだ。
ちょっとまだ使うには時期が早いのかも知れない…という感想です。

また、時期が来たら、確認したいと思っています。

【改訂履歴】作成:2014/11/22 更新:2014/11/24

【参考リンク】

mailpile Let's take e-mail back! …オフィシャルページ

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