2010.08.01 FreeBSD 8.1-RELEASE インストールメモ
FreeBSD 9.1-RELEASE リリースノート http://www.freebsd.org/releases/9.1R/announce.html
今回はWindows 7機からDVD-Rに焼いた媒体を使ってインストール。
ディスクパーティションエディターが新しくなっている。
今回は、Windows7 の入った機械の後ろの空き領域に FreeBSDをインストールするため、Guidedモードは使用せず、Manualで設定。
インストールの詳細については、FreeBSDハンドブックを参照。
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'
rootのデフォルトシェルは/bin/csh。
ここでは、/bin/sh に変更しておく。(後で/usr/local/bin/bashにするけど)
chsh -s /bin/sh root
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
/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"
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
普段使っている自分のユーザー(george)とグループ(george)を追加しておく。
編集後の/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
/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
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 #
ユーザー毎の秘密鍵〜公開鍵ペアを生成する。
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':
毎回パスフレーズ入力を要求されるとわずらわしい場合がある。 (シェルスクリプトから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回追加すれば、ログインシェルが生きている限りパスフレーズ入力は無用である。
出典 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
元ネタ 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
今後はportsからインストールすることが多い。
あらかじめ、以下のコマンドを入力し、packageファイル置き場を作成しておくと、 portsからmake packageした際に作成されるバイナリパッケージファイルがこのディレクトリ内部に格納される。
mkdir -p /usr/ports/packages
ちなみに、上のディレクトリが存在しない場合は、バイナリパッケージファイルは、各portsディレクトリの内部に作成される。
/usr/ports/Mk/bsd.port.mkを見ると、コメントで色々便利そうなターゲットが書いてある。 (つか、Makefile大きすぎでしょ...)
個人的によく使うものは以下。 どれも、cd /usr/ports ; make の後に続けて入力するターゲットである。 (例 cd /usr/ports ; make search key=postfix )
割と便利なシェル。
多機能・高機能路線といえば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
一時的にroot権限を得るとか、そんな場合に便利。
cd /usr/ports/security/sudo && make config-recursive && make install package-recursive clean
# 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
変更のあったファイルだけ検出して高速にコピーできる。 バックアップ用途とか、マシン引越し時に便利。
(Windows 7 でいうところの robocopyみたいなもの)
cd /usr/ports/net/rsync && make config-recursive && make install package-recursive clean
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/
日本語漢字フィルタ。文字コードの変換に使う。 非常に古くからあるコマンドで、古いスクリプトが使用しているのでインストールする。
cd /usr/ports/japanese/nkf && make install package clean
パワフルなページャ。EUC, SJIS にも対応。
cd /usr/ports/japanese/less && make install package clean
パワフルなファイルビューア。lessの代わりに使用できる。nkfの代わりに文字コード変換ツールとしても使える。
出力文字コードを色々変更できるので、端末の文字コードをUTF-8にしている場合に便利。
cd /usr/ports/misc/lv && make install package clean
テキストで表示する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
今日は何の日?を表示する
cd /usr/ports/japanese/today && make install package clean
有志が翻訳している日本語マニュアルデータと、日本語マニュアルをフォーマットするコマンド(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を必要としている。 このため、自分でつくってあげる必要がある。
テキスト端末を切り替えながら使用したり、ログを採取したりするソフト。
今ならTeraTerm Proを複数起動させるのが普通だが、一つのテキスト端末を 切り替えながら使う場合に使用。
cd /usr/ports/sysutils/screen && make config-recursive && make install package clean
screenのコンパイルオプション設定では、全部にチェックをいれる。
これからインストールする大型テキストエディタなどは、X11やGNOMEライブラリを使ったGUIを持つコンパイル時オプションがあるので、エディタより先にX11をインストールしておく。
純粋なサーバ用途の場合はX11を入れないという選択肢もあるが、自宅マシン用なのでX11を入れておく。
これはコンパイルするとシャレにならない時間がかかるので、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
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.
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)
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
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")
Emacs上で動くメールソフト。
cd /usr/ports/mail/wanderlust-devel && make config-recursive && make install clean
インストール後、~/.emacsに以下を追加。
(require 'wanderlust-startup)
設定ファイルのサンプルは /usr/local/share/examples/wanderlust 以下に格納されている。
受信したメールをフィルタ処理するソフト。
■インストール
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/
メールを取得するソフト
■インストール
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
こちらもコンパイルに時間がかかる大物。 ただ、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に設定したらうまくいった。
VNCクライアント専用の仮想Xサーバをメモリ上に作成する。
接続先マシンの実際のグラフィックカードが表示中のXサーバ画面とは関係が無い。 搭載しているビデオカードの解像度には関係なく、メモリさえあれば大きなVNC Server画面を提供することもできる。
cd /usr/ports/net/tightvnc && make config-recursive && make install package clean
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
perl用日本語文字コード変換モジュール。
相当に古いものだが、自作のperlスクリプトが使っているのでインストール。
cd /usr/ports/japanese/jcode.pl && make config-recursive && make install package-recursive clean
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 $
ここでは、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 # 外部ホスト確認
自宅内の各マシンも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 # 逆引き確認
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
■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も再起動する必要がある。
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
■/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/
■postfix起動
/usr/local/etc/rc.d/postfix start
■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.
■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
dovecotは、人気のpop3/imapサーバ。
今回は、dovecot系最新作の dovecot2 を使用してみる。
以下の方針で設定する。
■インストール
cd /usr/ports/mail/dovecot2 make config make install package clean
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 ファイルが作成される。 証明書の位置がデフォルト設定とは異なるので、 後で設定ファイルにも反映しておく。
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"
■dovecot2 起動
/usr/local/etc/rc.d/dovecot start
■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
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
■インストール
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
今回は趣向を変えて、 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に処理を回送している。
/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
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/
上のサイトを参考に設定する。
■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/
小規模な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