FreeBSD-11.0-for-N3050 設定概論

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

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

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


2016.12.16 FreeBSD 11.0-RELEASE インストールメモ

ページ内目次

1.1.1. ASUS R206SA-FD0001T にFreeBSD 11.0 RELEASE インストール

ASUS R206SA-FD0001Tは、特に下調べせずにAmazonで適当にポチった機種だが、FreeBSD 11.0 RELEASEで使うには以下の問題があった。

それでは本題。

軽く目を通しておく参考情報。

FreeBSD 11.0-RELEASE リリースアナウンス https://www.freebsd.org/releases/11.0R/announce.html

第72回 FreeBSD 11.0-RELEASEへのアップデート:BSD界隈四方山話|gihyo.jp … 技術評論社 http://gihyo.jp/admin/serial/01/bsd-yomoyama/0072

今回は、Windows 10機からメモリースティックに書き込んでインストールする。

まずはOSイメージをダウンロード。

  1. Window 10から指定して、UEFI BIOS設定画面を出す。
    1. [設定]→[更新とセキュリティ]→[回復]→[PCの起動をカスタマイズ]するの下にある[今すぐ再起動する]→[トラブルシューティング]→[詳細オプション]→[UEFIファームウェアの設定]→[再起動]。この操作でUEFI BIOSが起動する。
  2. UEFI BIOS設定画面にて、Secure Bootをoffにして、CMSをonにする。(CSMはCompatibility Support Module)
    1. BIOSの[Security]タブから、[Secure Boot menu]→[Secure Boot Control]を[Disabled]に設定。
    2. BIOSの[Boot]タブから、[Launch CSM]を[Enabled]に設定。
    3. BIOSの[Save & Exit]タブから、[Save Changes and Exit]。これで一回Windows10に戻る。
  3. Windows 10からメモリスティック起動する
    1. [設定]→[更新とセキュリティ]→[回復]→[PCの起動をカスタマイズ]するの下にある[今すぐ再起動する]→[デバイスの使用]→[UEFI:JetFlashTranscend](TranscendのUSBメモリを使っている場合)。これでmemstickイメージのFreeBSDインストーラが起動する。
  4. FreeBSDのインストール(bsdinstall)
    1. FreeBSD Handbookを見ながら操作。
      https://www.freebsd.org/doc/ja_JP.eucJP/books/handbook/index.html FreeBSD ハンドブック
      http://www.freebsd.org/doc/ja_JP.eucJP/books/handbook/bsdinstall.html FreeBSDのインストール
      http://www.freebsd.org/doc/ja_JP.eucJP/books/handbook/using-bsdinstall.html bsdinstall紹介
    2. インストール後、再起動。UEFI BIOSに入るため、ASUS機の場合はASUSロゴが出ている間にF2キーを適当に押す。Windows 10が起動してしまったら、上でやった[UEFIファームウェアの設定]→[再起動]を行う。
  5. UEFI BIOS設定画面にて、FreeBSDのブートオプションを追加する
    1. BIOSの[Boot]タブから、[Add New Boot Option]を選択。
      1. [Add boot option]にて、[freebsd]とか適当な名前を指定。
      2. [Path for boot option]にて、[PCI(13|0)\DevicePath(Type 3, SubType 12)HD(Part5,sigxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)]を選択。
        完全に謎の呪文だが、ウチの場合、FreeBSD用のEFIパーティションは5番目、FreeBSDのファイルシステム本体は6番目のパーティションに作られたので、Part5をを選択。
      3. <EFI>を選択。
      4. <BOOT>を選択。
      5. BOOTX64.EFIを選択。
      6. Createを選択。
    2. BIOSの[Boot]タブから、[Boot Option Priorities]を変更。さっき作ったfreebsdが一番上にくるように頑張る。

UEFI BIOSの場合、ブート用ファイルはFAT32で専用パーティションを用意して、EFIフォルダの中に起動用ファイルをいれておくと起動できるようだ。 上の操作で、5番目のFAT32パーティションの中の/EFI/BOOT/BOOTX64.EFIというファイルを起動用に追加した、という意味になる。

なお、余談だが、Secure Bootをoffにしないでmemstickイメージを起動した場合、以下のようなエラーメッセージがでる。

Secure Boot violation
Invalid signature detected. Check Secure Boot Policy in Setup

1.1.1.1. sshd_config の初期編集

sshdの初期設定(/etc/ssh/sshd_config)では、rootではログインできない。

ここでは、後でrsyncをrootで実施する都合でrootログインを許可する(これは非推奨)。

SSHのプロトコルはバージョン2を指定する。(デフォルトでもそうだけど)

  vi /etc/ssh/sshd_config 
  Protocol 2
  PermitRootLogin yes

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

[root@n3050 /etc/ssh]# diff -u sshd_config.20161016 sshd_config
--- sshd_config.20161016        2016-09-29 10:45:37.000000000 +0900
+++ sshd_config 2016-12-10 10:07:52.926061000 +0900
@@ -20,7 +20,7 @@
 #ListenAddress ::

 # The default requires explicit activation of protocol 1
-#Protocol 2
+Protocol 2

 # HostKey for protocol version 1
 #HostKey /etc/ssh/ssh_host_key
@@ -46,6 +46,7 @@

 #LoginGraceTime 2m
 #PermitRootLogin no
+PermitRootLogin yes
 #StrictModes yes
 #MaxAuthTries 6
 #MaxSessions 10
[root@n3050 /etc/ssh]#

sshdを再起動

  /etc/rc.d/sshd restart

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

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

teratermpro-login.ttlファイル

connect 'n3050 /ssh /2 /auth=challenge /user=root /passwd=xxxxxxxx'

1.1.1.2. rootのシェル変更

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

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

  chsh -s /bin/sh root

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

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

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

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

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

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

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

(なお、GNU RCSは近い将来標準インストールではなくなる予定なので、今後はこの手は使えなくなるようだ。)

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

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

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

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

1.1.2. FreeBSD 基本設定

1.1.2.1. bsdconfig による設定

/usr/sbin/bsdconfigコマンドを使うと、メニュー形式でちょっとした設定なら行える。

テキストで画面のイメージを再現すると、以下のような感じ。

 bsdconfig
 ------------------------------------------------------------------------------
             +-------------------Main Menu----------------------+
             | If you've already installed FreeBSD, you may use |
             | this menu to customize it somewhat to suit your  |
             | particular configuration.  Most importantly, you |
             | can use the Packages utility to load extra '3rd  |
             | party' software not provided in the base         |
             | distributions.                                   |
             | l----------------------------------------------k |
             | |        X  Exit                               | |
             | |        1  Usage                              | |
             | |        2  Documentation installation         | |
             | |        3  Packages                           | |
             | |        4  Root Password                      | |
             | |        5  Disk Management                    | |
             | |        6  Login/Group Management             | |
             | |        7  Console                            | |
             | |        8  Timezone                           | |
             | |        9  Mouse                              | |
             | |        A  Networking Management              | |
             | |        B  Security                           | |
             | |        C  Startup                            | |
             | |        D  Ttys                               | |
             | +----------------------------------------------+ |
             +--------------------------------------------------+
             |<      OK      > <Exit bsdconfig> <     Help     >|
             +--------------------------------------------------+

 Quick start - How to use this menu system

1.1.2.2. /etc/rc.conf 設定

/etc/rc.conf 編集。

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

bsdconfigから設定した項目は以下。固定IP設定としている。

local_unbound_enable="YES"はDNSキャッシュをONにした場合に書き込まれる。

/etc/rc.confファイルの内容

hostname="n3050.tokyo3.nerv"
local_unbound_enable="YES"
sshd_enable="YES"
moused_enable="NO"
ntpd_enable="YES"
powerd_enable="YES"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="AUTO"
ifconfig_ue0="inet 192.168.1.34 netmask 255.255.255.0"
defaultrouter="192.168.1.1"
saver="daemon"
moused_type="NO"

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

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

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

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

ifconfig_ue0="inet 192.168.1.34 netmask 255.255.255.0"
defaultrouter="192.168.1.1"

/etc/resolv.conf編集

DNSサーバのIPアドレスを設定しておく。 プロバイダのDNSとか、自宅にブロードバンドルーターがある場合はそのIPアドレスを書いておく。 8.8.8.8はGoogle DNS。 上の/etc/rc.confにて、local_unbound_enable="YES"と書いてある場合は、unboundというDNSキャッシュが起動しているので、nameserverの先頭にはローカルホストを示す127.0.0.1を書いておく。

search tokyo3.nerv
nameserver 127.0.0.1
nameserver 8.8.8.8

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

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

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

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

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

自動的にユーザーとグループを登録するならpw(8)が便利。

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

#
#  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 0
#
# web公開用ユーザー作成
#
pw groupadd -n webpub -g 1002
( echo "webpub-s-password" ; sleep 1 ) | pw useradd -n webpub -c "Web Publish" -b /home -e 0 -p 0 -g webpub -m -s /usr/local/bin/bash -h 0
#
# テスト用ユーザー作成
#
pw groupadd -n smith -g 1003
( echo "smith-s-password" ; sleep 1 ) | pw useradd -n smith -c "Test User" -b /home -e 0 -p 0 -g smith -m -s /usr/local/bin/bash -h 0

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

  touch /var/at/at.deny

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

  touch /var/cron/deny

余談だが、rootからは、別の一般ユーザーのパスワードを強制的に設定できる。

  passwd [設定するユーザー名]
  [georgeの新しいパスワードを入力]

1.1.2.5. /etc/hosts設定

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

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

1.1.2.6. procfs追加, fdesc追加

procfsを追加すると、psコマンドで、各プロセスの起動コマンドラインを表示できるようになる。 また、procfsとfdescfsはopenjdk8からも利用される。

下から2行を/etc/fstabに追加する。

# Device        Mountpoint      FStype  Options Dump    Pass#
/dev/ada0p6     /               ufs     rw      1       1
proc            /proc           procfs  rw      0       0
fdesc           /dev/fd         fdescfs rw      0       0

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

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

  ssh-keygen -t rsa
  # FreeBSD 12-RELEASE 以降 ( OpenSSH 7.8以降 ) なら以下のようにPEM互換フォーマットで保存すると、既存アプリからInvalid Formatと言われることが少ない
  ssh-keygen -t rsa -m PEM

上のコマンドを実行する。
「Enter file in which to save the key (/home/george/.ssh/id_rsa): 」のように、保存場所を聞いてくるが、デフォルトでOK。
「Enter passphrase (empty for no passphrase): 」パスフレーズを聞いてくるので、入力する。パスフレーズを指定したくない場合は何も入力せずにエンターを入力。

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

~/.ssh/id_rsa.pubに作成された公開鍵の文字列は、別のマシンの ~/.ssh/authorized_keys に追加書き込みしておく。

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

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

うまく設定できた場合、以下のような感じでパスワードではなく、パスフレーズを聞いてくるようになる。

ssh root@c60pc ~ $ slogin n3050
Enter passphrase for key '/root/.ssh/id_rsa':

なお、ssh-keygen -t dsa として作成されるdsa鍵は強度が十分ではないとして、現在はログインには使用できない。

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

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

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

  [george@n3050 ~]$ 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@n3050 ~]$ SSH_AUTH_SOCK=/tmp/ssh-49u9keMHYF/agent.3236; export SSH_AUTH_SOCK;
  [george@n3050 ~]$ SSH_AGENT_PID=3237; export SSH_AGENT_PID;
  [george@en3050 ~]$ echo Agent pid 3237;
  Agent pid 3237

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

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

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

  [george@n3050~]$ slogin c60pc
  ssh george@c60pc ~ $ 

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

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

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

  # for ssh-agent
  exec ssh-agent $SHELL

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

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

1.1.2.9. ssh-keygen -t rsa で作った秘密鍵をPEM形式に変換する

n3050側でssh-keygenで作った秘密鍵をTeraTerm Proで使えるPEM形式に変換する。


# opensslコマンドを使って、秘密鍵をPEM形式に変換する
# パスフレーズを指定されている場合は、パスフレーズ入力が必要
openssl rsa -in ~/.ssh/id_rsa -outform pem  -out ~/.ssh/id_rsa.pem

# 参考:PEMの内容を表示する
openssl rsa -in ~/.ssh/id_rsa.pem -inform PEM -text

n3050側でssh-keygenして作成した秘密鍵を使ってログインする場合は、 ~/.ssh/authorized_keysに、 ssh-keygenでペアとして作成した公開鍵を登録しておく。

# 公開鍵を登録
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

作成した ~/.ssh/id_rsa.pem ファイルの内容を、PC側に持ってくる。 内容はテキストなので、コピーペーストしても良い。 今回は C:\home\login-n3050-george.pem というファイル名とした。

TeraTerm Macroファイル ( n3050.ttl ) ファイルを作成し、以下のように記述。

connect '192.168.1.34 /ssh /2 /auth=publickey /user=george /keyfile=C:\home\login-n3050-george.pem'

これで、n3050.ttl を実行すると、TeraTerm Pro 経由で接続できる。

1.1.2.10. sshd パスワード認証ログインを封印する

秘密鍵公開鍵を使ったログインに成功したら、 ssh経由ではパスワード(ChallengeResponseAuthentication)によるログインを封印するのがお勧め。

/etc/sshd_configのChallengeResponseAuthentication yes の箇所を no に書き換える。

/etc/sshd_configの差分は以下のようになった。

ssh root@n3050 /etc/ssh $ diff -uw sshd_config.20161016 sshd_config
--- sshd_config.20161016        2016-09-29 10:45:37.000000000 +0900
+++ sshd_config 2017-09-10 16:05:39.651190000 +0900
@@ -20,7 +20,7 @@
 #ListenAddress ::

 # The default requires explicit activation of protocol 1
-#Protocol 2
+Protocol 2

 # HostKey for protocol version 1
 #HostKey /etc/ssh/ssh_host_key
@@ -46,6 +46,7 @@

 #LoginGraceTime 2m
 #PermitRootLogin no
+PermitRootLogin yes
 #StrictModes yes
 #MaxAuthTries 6
 #MaxSessions 10
@@ -76,7 +77,7 @@
 #PermitEmptyPasswords no

 # Change to no to disable PAM authentication
-#ChallengeResponseAuthentication yes
+ChallengeResponseAuthentication no

 # Kerberos options
 #KerberosAuthentication no

1.1.2.11. ntpの設定

時刻合わせデーモン(ntpd)を使用する。

/etc/rc.confを編集。

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

echo 'ntpd_enable="YES"' >> /etc/rc.conf

ntpdの設定ファイルは/etc/ntp.conf。

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

手動で時刻合わせを行う場合は以下。 以下の例では、-u オプションで、非特権ポート番号を使用するように指示している。 ファイアウォールで特権ポート番号の通信が制限されている場合などに便利。

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

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

元ネタ

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

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

  dd if=/dev/zero of=/usr/swap0 bs=1m count=4096
  chmod 0600 /usr/swap0

/etc/fstabを編集して、以下の1行を追加する。

  md99            none            swap    sw,file=/usr/swap0,late         0       0

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

  addswap="YES"

再起動すればswapは有効になるが、再起動なしでスワップを有効にする場合は以下。

  swapon -aL

1.1.3. pkgコマンドでソフトを色々インストール

FreeBSD 10以降では、pkg_addにかわり、pkgコマンドでバイナリインストールを行う。

詳しくは以下を参照。

よく使うコマンドを以下に示す。

1.1.3.1. shells/bashインストール

割と便利なシェル。Ubuntuでは標準シェル。

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

  pkg install -y shells/bash

chshコマンドで、自分のログインシェルをbashに設定しておく。

chsh -s /usr/local/bin/bash
Password:

余談だが、設定されたログインシェルの情報は、/etc/passwdファイルに記載されている。

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

1.1.3.2. security/sudo

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

余談だが、Ubuntuではrootユーザーでログインすることはなく、root権限が必要な場合はsudoを使う。

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

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

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

1.1.3.3. net/rsyncインストール

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

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

  pkg install -y net/rsync
1.1.3.3.1. rsyncを使った旧マシンからの引越し

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

  for i in root  home/george  home/webpub  home/webpub2
  do
    mkdir -p /home/backup/$i-$HOSTNAME
    cp -a /$i   /home/backup/$i-$HOSTNAME
  done

■rsync使い方の例1:

  FROMHOST=c60pc
  rsync --progress -av -e ssh --delete --exclude .ssh/  root@${FROMHOST}:/root/         /root/
  rsync --progress -av -e ssh --delete --exclude .ssh/  root@${FROMHOST}:/home/george/  /home/george/
  rsync --progress -av -e ssh --delete --exclude .ssh/  root@${FROMHOST}:/home/webpub/  /home/webpub/
  rsync --progress -av -e ssh --delete --exclude .ssh/  root@${FROMHOST}:/home/webpub2/ /home/webpub2/
  rsync --progress -av -e ssh          --exclude .ssh/  root@${FROMHOST}:/home/backup/  /home/backup/

■rsync使い方の例2:

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

■rsync使い方の例3:

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

  for i in bin Mail public_html
  do
    rsync -av -e ssh --delete --exclude '.*' root@e6850:/home/george/$i/ /home/george/$i/
  done
  rsync -av -e ssh --delete --exclude '.*' root@e6850:/home/webpub/ /home/webpub/
  rsync -av -e ssh --exclude '.*' root@e6850:/home/backup/ /home/backup/
1.1.3.3.2. ssh経由のrsyncで巨大なファイル(100MB程度)をコピー中に、message authentication code incorrectというエラーが出てコピーが止まってしまう場合

ssh経由のrsyncで巨大なファイル(100MB程度以上)をコピー中に、message authentication code incorrectというエラーが出てコピーが止まってしまう場合がある。

以下、エラーの例。

Corrupted MAC on input.
Fssh_ssh_dispatch_run_fatal: Connection to 192.168.1.32 port 22: message authentication code incorrect
rsync: connection unexpectedly closed (1619810198 bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [receiver=3.1.2]
rsync: connection unexpectedly closed (10397 bytes received so far) [generator]
rsync error: unexplained error (code 255) at io.c(226) [generator=3.1.2]

rsyncオプションの--progressをつけておくと、1GB程度まではなんとか耐えられるようになるみたいだ。

(6GB以上とかは --progress をつけてもダメだった)

  rsync --progress -av -e ssh --delete --exclude .ssh/  root@${FROMHOST}:/home/webpub2/ /home/webpub2/

オプション --progress をつけても、800MB程度でエラーになることはあるけど...

1.1.3.4. japanese/nkf

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

  pkg install -y japanese/nkf

1.1.3.5. japanese/less (jless)

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

  pkg install -y japanese/less

1.1.3.6. misc/lv

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

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

  pkg install -y misc/lv

1.1.3.7. net/netcat

ネットワークの先にcatするnetcat(コマンド名はnc)。

  pkg install net/netcat

ネットワークデーモンのテストに便利。

例えば、localhostにapache http サーバをインストールした後に、取得をかける場合は以下。

  printf "GET /\r\n\r\n" | nc localhost 80
ssh george@n3050 ~ $ printf "GET / HTTP/1.0\r\n\r\n" | nc localhost 80
<html><body><h1>It works!</h1></body></html>
ssh george@n3050 ~ $

ネット上の記事では、\r\nじゃなくて、\nだけ指定している例がほとんどだが、ウチでは\r\nにしないとダメだった。

RFC 7230 を見ると、HTTPメッセージの正式な改行はCRLF(\r\n)ということらしい。

1.1.3.8. japanese/w3m

テキスト画面で動作するブラウザ。

  pkg install -y japanese/w3m

1.1.3.9. japanese/jcode.pl

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

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

  pkg install -y japanese/jcode.pl

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

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

文字コードはeucJPのみ。翻訳内容は結構古いので、今は参考程度か。

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

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

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

使用方法は以下。

  jman jman

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

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

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

1.1.4. メールクライアント

1.1.4.1. mail/procmail

受信したメールをフィルタ処理するソフト。

■インストール

  pkg install -y mail/procmail

■~/.forwardに記載して、メール受信時にprocmailに処理させる(sendmailを使う場合)

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

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

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

■postfix側設定(postfixを使う場合)

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

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

■~/.courierに記載して、メール受信時にprocmailに処理させる(courierを使う場合)

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

| /usr/local/bin/preline /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

■個人設定 ~/.procmailrc

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

SHELL=/bin/sh
PATH=/bin:/usr/bin:/usr/local/bin
MAILDIR=$HOME/Maildir/
DEFAULT=$MAILDIR
LOGFILE=$MAILDIR/procmail.log

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

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

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

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

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

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

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

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

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

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

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

1.1.4.2. mail/fetchmail

プロバイダなどのPOP3からメールを取得するソフト

■インストール

  pkg install -y mail/fetchmail

■設定 ~/.fetchmailrc

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

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

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

■テスト

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

  fetchmail -v --keep

1.1.4.3. mail/cone

電子メールというキーワードに関わるありとあらゆるものを含むというCourier一家に属するテキストコンソール用のメールクライアント Courier-Cone 。

ホームディレクトリのMaildir形式に対応。その他、POP3/IMAP4にも対応。

インストールは以下。

  pkg install -y mail/cone

テキスト端末からconeで起動。

特に設定をしなくても日本語のメール読めたので驚いた。

1.1.5. pkgでGUIを持つソフトをインストール

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

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

1.1.5.1. x11/xorg

これはコンパイルするとシャレにならない時間がかかる。(遅いマシンだと2日とか) バイナリからインストールする。

  pkg install -y x11/xorg

x11/xorgを指定すると、X11関連はまとめてインストールされる。

1.1.5.2. editors/vim

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

  pkg install -y editors/vim

1.1.5.3. editors/emacs

emacsをインストールする。

  pkg install -y editors/emacs

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

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

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

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

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

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

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

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

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

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

1.1.5.4. japanese/scim-anthy 日本語かな漢字変換 scim と anthy

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

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

  pkg install -y japanese/scim-anthy

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

Remember to set environment variables XMODIFIERS and LANG:

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

To start the SCIM input method daemon, use command:

  scim -d

1.1.5.5. emacsからanthyを使う設定

Anthy Wiki Emacsから

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

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

1.1.5.6. net/tightvnc インストール

VNCクライアント専用の仮想Xサーバをメモリ上に作成し、VNCというネットワーク経由で画面接続するクライアントソフトを使って接続する。

ネットワーク越しにGUI画面が使えるリモートデスクトップのようなもの。クライアントソフトはWindows版, Mac版など色々あるのが便利だ。

(FreeBSD同志とかCentOS系とならX11でネットワーク経由でGUI接続できるのだが、Windowsじゃダメなのだ)

接続先マシンの実際のグラフィックカードが表示中のXサーバGUI画面とは関係が無い。

搭載しているビデオカードの解像度には関係なく、メモリさえあれば大きなVNC Server画面を提供することもできる。

  pkg install -y net/tightvnc

1.1.5.7. japanese/font-ipa IPA提供のTrue Type 日本語フォント

IPA提供のフォントをインストール

  pkg install -y japanese/font-ipa
  pkg install -y japanese/font-ipaex
  pkg install -y japanese/font-ipa-uigothic
  pkg install -y japanese/font-ipamjm
  pkg install -y japanese/font-mona-ipa

1.1.5.8. java/openjdk8

Javaのインストール。

  pkg install -y java/openjdk8

インストール後、java -versionとすると、バージョン番号が表示される。

root@n3050 ~ $ java -version
openjdk version "1.8.0_102"
OpenJDK Runtime Environment (build 1.8.0_102-b14)
OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode)
root@n3050 ~ $

1.1.5.9. firefox

WebブラウザFirefoxのインストール。

  pkg install -y firefox

1.1.5.10. chromium

Webブラウザchromiumのインストール。

  pkg install -y chromium

1.1.5.11. thunderbird

メーラーthunderbirdのインストール。

  pkg install -y thunderbird

1.1.6. DNSの設定

1.1.6.1. dns/bind911

nslookupやdigなどのDNS調査用ツールをインストールするため、bind911をインストール(ぉぃぉぃ。

  pkg install -y dns/bind911

今回はDNSキャッシュunboundを有効にしているため、DNS関連の設定は行わなず、bindの起動もしない。

1.1.7. メールサーバー関連の設定

1.1.7.1. mail/courier

メールサーバ機能全部入り(SMTP IMAP POP3 HTTP(Webmail))というCourierをインストール。

    pkg install -y mail/courier

以下、参考資料。

最初はローカルメールの配送機能から、順番に設定していく。

1.1.7.1.1. /usr/local/etc/rc.d/courier シェルの修正

FreeBSD 11.0 RELEASE-p1 あたりだけの問題かも。

courierデーモン起動シェルにちょっとした間違いがあるので修正しておく。

root@n3050 ~ $ diff -u /usr/local/etc/rc.d/courier.orig /usr/local/etc/rc.d/courier
--- /usr/local/etc/rc.d/courier.orig    2016-12-18 13:24:14.509995000 +0900
+++ /usr/local/etc/rc.d/courier 2016-12-18 13:25:05.655439000 +0900
@@ -86,7 +86,7 @@
                  -a -x ${sbindir}/makeacceptmailfor ]; then
                        ${sbindir}/makeacceptmailfor
                fi
-               if [ ! -f ${sysconfdir}/${ACCESSFILE}.dat \
+               if [ ! -f ${sysconfdir}/smtpaccess.dat \
                  -a -x ${sbindir}/makesmtpaccess ]; then
                        ${sbindir}/makesmtpaccess
                fi
@@ -100,7 +100,7 @@
                        esmtpdcert=1
                        ;;
                esac
-               if [ ! -f ${sysconfdir}/${ACCESSFILE}.dat \
+               if [ ! -f ${sysconfdir}/smtpaccess.dat \
                  -a -x ${sbindir}/makesmtpaccess-msa ]; then
                        ${sbindir}/makesmtpaccess-msa
                fi
root@n3050 ~ $
1.1.7.1.2. Courier ローカルメール(1台のFreeBSD機内部のメール配送機能)の設定

■1./usr/local/etc/courier/courierd ファイルを編集。

自分の場合は、procmailを使っているため、procmail配送を指定する。

ssh root@n3050 ~ $ diff -u10  /usr/local/etc/courier/courierd.20161216 /usr/local/etc/courier/courierd
--- /usr/local/etc/courier/courierd.20161216    2016-12-16 21:55:00.456923000 +0900
+++ /usr/local/etc/courier/courierd     2016-12-17 17:01:31.630441000 +0900
@@ -87,36 +87,36 @@
 #  Specify default delivery instructions by setting DEFAULTDELIVERY
 #  One of the following definitions of DEFAULTDELIVERY should be
 #  uncommented.
 #
 #  Default deliveries to $HOME/Maildir
 #
 #  DEFAULTDELIVERY=./Maildir
 #
 #  Alternatively, use procmail to deliver mail to local mailboxes.
 #
-#  DEFAULTDELIVERY="| /usr/local/bin/preline /usr/bin/procmail"
+DEFAULTDELIVERY="| /usr/local/bin/preline /usr/local/bin/procmail"
 #
 #  Here's how to have maildrop handle local deliveries.
 #
 #  DEFAULTDELIVERY="| /usr/local/bin/maildrop"
 #
 #  If you want to automatically enable .forward support globally,
 #  use something like this:
 #
 #  DEFAULTDELIVERY="|| dotforward
 #  ./Maildir"
 #
 #  Yes, it's two lines long, with an embedded newline.  Of course, you can use
 #  any default local mail delivery instruction in place of ./Maildir.
-
-DEFAULTDELIVERY=./Maildir
+#
+# DEFAULTDELIVERY=./Maildir

 ##NAME: MAILDROPDEFAULT:0
 #
 #  The following setting initializes the DEFAULT variable in maildrop,
 #  the location of the default mailbox.  You should not change this setting
 #  unless you REALLY know what you're doing.

 MAILDROPDEFAULT=./Maildir

 ##NAME: ESMTP_CORK:0
ssh root@n3050 ~ $

■2./etc/rc.conf ファイルを編集。

/etc/rc.conf ファイルを編集して、以下の内容を追記。

sendmailを使うのを停止して、courierを使うように設定する。 courierは認証デーモン(authdaemond)が必須なので、こちらも起動するように設定。

# for MTA
courier_enable="YES"
courier_authdaemond_enable="YES"
sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"

■3./etc/mail/mailer.conf ファイルを編集。

/etc/mail/mailer.conf ファイルを編集して、以下の内容にする。

最後の2行は不要。この後でperiodic.confを編集するので。

# $FreeBSD: releng/11.0/etc/mail/mailer.conf 93858 2002-04-05 04:25:14Z gshapiro $
#
# Execute the "real" sendmail program, named /usr/libexec/sendmail/sendmail
#
sendmail        /usr/local/bin/sendmail
send-mail       /usr/local/bin/sendmail
mailq           /usr/local/bin/mailq
newaliases      /usr/local/sbin/makealiases
#hoststat        /usr/libexec/sendmail/sendmail
#purgestat       /usr/libexec/sendmail/sendmail

■4. /etc/periodic.conf ファイルを編集。

/etc/periodic.conf ファイルに以下の内容を記述。ファイルが無い場合は新規作成する。

#!/bin/sh
# for courier MTA
daily_clean_hoststat_enable="NO"
daily_status_mail_rejects_enable="NO"
daily_status_include_submit_mailq="NO"

■5./usr/local/etc/authlib/authdaemonrc ファイルの編集

認証を司るauthdaemonの設定。

使用する認証はウチではPAMだけなので、リストから削除しておく。

ssh root@n3050 ~ $ diff -u10 /usr/local/etc/authlib/authdaemonrc.2016.1216 /usr/local/etc/authlib/authdaemonrc
--- /usr/local/etc/authlib/authdaemonrc.2016.1216       2016-12-16 23:28:16.995246000 +0900
+++ /usr/local/etc/authlib/authdaemonrc 2016-12-17 18:33:00.409981000 +0900
@@ -17,28 +17,28 @@
 # fit on one line.  Do not use any additional whitespace for indentation,
 # or anything else.

 ##NAME: authmodulelist:3
 #
 # The authentication modules that are linked into authdaemond.  The
 # default list is installed.  You may selectively disable modules simply
 # by removing them from the following list.  The available modules you
 # can use are: authuserdb authvchkpw authpam authldap authmysql authpgsql

-authmodulelist="authuserdb authvchkpw authpam authldap authmysql authpgsql"
+authmodulelist="authpam"

 ##NAME: authmodulelistorig:4
 #
 # This setting is used by Courier's webadmin module, and should be left
 # alone

-authmodulelistorig="authuserdb authvchkpw authpam authldap authmysql authpgsql"
+authmodulelistorig="authpam"

 ##NAME: daemons:0
 #
 # The number of daemon processes that are started.  authdaemon is typically
 # installed where authentication modules are relatively expensive: such
 # as authldap, or authmysql, so it's better to have a number of them running.
 # PLEASE NOTE:  Some platforms may experience a problem if there's more than
 # one daemon.  Specifically, SystemV derived platforms that use TLI with
 # socket emulation.  I'm suspicious of TLI's ability to handle multiple
 # processes accepting connections on the same filesystem domain socket.
ssh root@n3050 ~ $

■6./usr/local/etc/courier/aliases/system の編集(実体は/etc/aliasesへのシンボリックリンク)

Courierはrootユーザーにはメールを配信しない。 FreeBSDでは、システムが自動的に送信するメールなどはroot宛てだが、root宛てメールは配信しないのでこれらのメールが読めなくなる。 そこで、root宛てのメールは、一般ユーザーのアカウント(ここではgeorge)に転送指定する。

/etc/aliasesファイルを以下のように編集。root宛てのメールはgeorge宛てに転送する。

root@n3050 ~ $ diff -u10 /etc/aliases.2016.12.17 /etc/aliases
--- /etc/aliases.2016.12.17     2016-12-17 17:37:03.439270000 +0900
+++ /etc/aliases        2016-12-17 17:38:07.622032000 +0900
@@ -10,21 +10,21 @@
 #
 #
 # See also RFC 2142, `MAILBOX NAMES FOR COMMON SERVICES, ROLES
 # AND FUNCTIONS', May 1997
 #      http://tools.ietf.org/html/rfc2142

 # 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

 # Basic system aliases -- these MUST be present
 MAILER-DAEMON: postmaster
 postmaster: root

 # General redirections for pseudo accounts
 _dhcp: root
 _pflogd: root
 auditdistd:    root
 bin:   root
root@n3050 ~ $

ファイル編集後、Courierの場合はmakealiasesコマンドを実行して、編集内容を反映する。

  makealiases
1.1.7.1.3. ローカル配送メールの動作確認

FreeBSDではmailコマンドを使ってローカル(1台のFreeBSD機内部の)メールを送信できる。

メール本文に謎の数字を書いてあるが、これはprocmailの設定で謎の数字が書いてないメールをフィルタリング設定してあるため。

# ユーザー george 宛てのメール
mail george << "EOF"
Subject:test mail from mail command to george
mail body to george 6020-5440-3372
EOF

メール送信できたら、coneコマンドを使ってメールを読んでみる。

aliasを設定してあるので、root宛てのメールもgeorgeに届く。

# ユーザー root 宛てのメール
mail root << "EOF"
Subject:test mail from mail command to root
mail body to root 6020-5440-3372
EOF
1.1.7.1.4. esmtpの設定

■/usr/local/etc/courier/esmtpdファイルの編集

esmtpdは、TCPポート25番を待ち受けてメール送信/メール転送の受け口になるデーモン。

初期値では起動しないようになっているため、ここで有効にする。

root@n3050 ~ $ diff -u10 /usr/local/etc/courier/esmtpd.dist  /usr/local/etc/courier/esmtpd
--- /usr/local/etc/courier/esmtpd.dist  2016-12-11 13:56:12.000000000 +0900
+++ /usr/local/etc/courier/esmtpd       2016-12-17 20:08:45.679352000 +0900
@@ -451,11 +451,11 @@
 #  case x$ESMTPDSTART in
 #  x[yY]*)
 #        /usr/local/sbin/esmtpd start
 #        ;;
 #  esac
 #
 # The default setting is going to be NO, until Courier is shipped by default
 # with enough platforms so that people get annoyed with having to flip it to
 # YES every time.

-ESMTPDSTART=NO
+ESMTPDSTART=YES
root@n3050 ~ $

■/etc/pam.d/以下のファイル設定

今回はesmtpの認証にpamを使うので、以下のファイルを設定する。

cp /usr/local/etc/courier/esmtp.authpam    /etc/pam.d/esmtp

■courierデーモンの再起動。

/usr/local/etc/rc.d/courier stop
/usr/local/etc/rc.d/courier-authdaemond stop
/usr/local/etc/rc.d/courier-authdaemond start
/usr/local/etc/rc.d/courier start

これで、smtp通信を受け付けるようになる。

1.1.7.1.5. esmtpメール送信受付時の認証とメール送信のテスト

■AUTH LOGINのテスト。

LOGIN認証用のBASE64文字列を作る。

usernameとpasswordの部分は、実際のユーザ名とパスワードに編集して実行。

表示された文字列は後で使うのでコピーしておく。

# ユーザー名をbase64エンコード
perl -MMIME::Base64 -e 'print encode_base64("username");'
# パスワードをbase64エンコード
perl -MMIME::Base64 -e 'print encode_base64("password");'

実行結果の例。

ssh george@n3050 ~ $ # ユーザー名をbase64エンコード
ssh george@n3050 ~ $ perl -MMIME::Base64 -e 'print encode_base64("username");'
dXNlcm5hbWU=            # ←がユーザ名をbase64エンコードしたもの
ssh george@n3050 ~ $ # パスワードをbase64エンコード
ssh george@n3050 ~ $ perl -MMIME::Base64 -e 'print encode_base64("password");'
cGFzc3dvcmQ=            # ←がパスワードをbase64エンコードしたもの
ssh george@n3050 ~ $

■SMTP接続確認

ポート番号25での認証テスト。入力する文字をまとめると以下のようになる。

4行目と5行目は、上でbase64エンコードしたユーザ名とパスワード。

telnet localhost 25
EHLO localhost
AUTH LOGIN
dXNlcm5hbWU=
cGFzc3dvcmQ=
QUIT

実行した結果の例。

(4)と(5)は、base64エンコードしたユーザ名とパスワードを入力。 パスワード入力後、Okと表示されれば認証成功。

ssh george@n3050 ~ $ telnet localhost 25  # これを入力(1)
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 n3050.tokyo3.nerv ESMTP
EHLO localhost        # これを入力(2)
250-n3050.tokyo3.nerv Ok.
250-AUTH LOGIN
250-STARTTLS
250-XCOURIEREXTENSIONS
250-XVERP=Courier
250-XEXDATA
250-XSECURITY=NONE,STARTTLS
250-PIPELINING
250-8BITMIME
250-SIZE
250 DSN
AUTH LOGIN            # これを入力(3)
334 VXNlcm5hbWU6
dXNlcm5hbWU=          # これを入力(4)
334 UGFzc3dvcmQ6
cGFzc3dvcmQ=          # これを入力(5)
235 Ok
QUIT                  # これを入力(6)
221 Bye.
Connection closed by foreign host.
ssh george@n3050 ~ $

1.1.7.2. imapの設定

まず最初に、暗号化しない通信を行うimapを設定する。

■/usr/local/etc/courier/imapdファイルの編集

インストール直後はimapdは起動しない設定となっているので、/usr/local/etc/courier/imapd設定ファイルを編集して起動するようにする。

FreeBSD 11.0の場合、/etc/pam.d/以下にimapサービスが既に存在するので、 PAM認証に使うサービス名をimapdとimapsと変更している。

root@n3050 ~ $ diff -u10 /usr/local/etc/courier/imapd.dist /usr/local/etc/courier/imapd
--- /usr/local/etc/courier/imapd.dist   2016-12-11 13:56:13.000000000 +0900
+++ /usr/local/etc/courier/imapd        2016-12-18 14:48:44.734776000 +0900
@@ -38,20 +38,22 @@
 PORT=143

 ##NAME: AUTHSERVICE:0
 #
 #  It's possible to authenticate using a different 'service' parameter
 #  depending on the connection's port.  This only works with authentication
 #  modules that use the 'service' parameter, such as PAM.  Example:
 #
 #  AUTHSERVICE143=imap
 #  AUTHSERVICE993=imaps
+AUTHSERVICE143=imapd
+AUTHSERVICE993=imaps

 ##NAME: MAXDAEMONS:0
 #
 #  Maximum number of IMAP servers started
 #

 MAXDAEMONS=40

 ##NAME: MAXPERIP:0
 #
@@ -404,17 +406,17 @@
 #
 #  case x$IMAPDSTART in
 #  x[yY]*)
 #        /usr/local/libexec/imapd.rc start
 #        ;;
 #  esac
 #
 # The default setting is going to be NO, so you'll have to manually flip
 # it to yes.

-IMAPDSTART=NO
+IMAPDSTART=YES

 ##NAME: MAILDIRPATH:0
 #
 # MAILDIRPATH - directory name of the maildir directory.
 #
 MAILDIRPATH=Maildir
root@n3050 ~ $

■/etc/pam.d/以下のファイル設定

今回はimapの認証にpamを使うので、以下のファイルをコピーする。

cp /usr/local/etc/courier/imapd.authpam    /etc/pam.d/imapd

■courierデーモンの再起動。

/usr/local/etc/rc.d/courier stop
/usr/local/etc/rc.d/courier-authdaemond stop
/usr/local/etc/rc.d/courier-authdaemond start
/usr/local/etc/rc.d/courier start

これで、imap通信を受け付けるようになる。

1.1.7.2.1. ローカルメールのテスト

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

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

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

■SMTP接続確認

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

  telnet localhost 25
  EHLO localhost
  AUTH PLAIN george dXNlcl9uYW1lAHVzZXJfbmFtZQB1c2VyX3Bhc3M=
  QUIT

■メール中継チェック

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

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

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

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

Relay test result
All tests performed, no relays accepted.
1.1.7.2.2. IMAP接続のテスト

■IMAPの接続テスト(telnet)

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

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

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

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

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

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

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

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

1.1.8. Webサーバ関連

1.1.8.1. apache 2.4 のインストール

Webサーバのapache 2.4をインストール。

    pkg install -y www/apache24

/etc/rc.confに、以下の内容を追記して、自動起動するように設定。

# for apache 2.4
apache24_enable="YES"
apache24_http_accept_enable="YES"

/usr/local/etc/apache24/httpd.confの編集

apache 2.4系の場合、最初はモジュールがあまりロードされない設定となっているので、 自分が使っているモジュールのロード設定を色々加える。

以下、差分形式で変更内容を示す。

ssh george@n3050 ~ $ diff -u /usr/local/etc/apache24/httpd.conf.sample /usr/local/etc/apache24/httpd.conf
--- /usr/local/etc/apache24/httpd.conf.sample   2017-01-03 11:32:25.000000000 +0900
+++ /usr/local/etc/apache24/httpd.conf  2017-02-25 23:33:08.735940000 +0900
@@ -99,7 +99,7 @@
 LoadModule reqtimeout_module libexec/apache24/mod_reqtimeout.so
 #LoadModule ext_filter_module libexec/apache24/mod_ext_filter.so
 #LoadModule request_module libexec/apache24/mod_request.so
-#LoadModule include_module libexec/apache24/mod_include.so
+LoadModule include_module libexec/apache24/mod_include.so
 LoadModule filter_module libexec/apache24/mod_filter.so
 #LoadModule reflector_module libexec/apache24/mod_reflector.so
 #LoadModule substitute_module libexec/apache24/mod_substitute.so
@@ -114,7 +114,7 @@
 #LoadModule log_forensic_module libexec/apache24/mod_log_forensic.so
 #LoadModule logio_module libexec/apache24/mod_logio.so
 LoadModule env_module libexec/apache24/mod_env.so
-#LoadModule mime_magic_module libexec/apache24/mod_mime_magic.so
+LoadModule mime_magic_module libexec/apache24/mod_mime_magic.so
 #LoadModule cern_meta_module libexec/apache24/mod_cern_meta.so
 #LoadModule expires_module libexec/apache24/mod_expires.so
 LoadModule headers_module libexec/apache24/mod_headers.so
@@ -123,7 +123,7 @@
 LoadModule setenvif_module libexec/apache24/mod_setenvif.so
 LoadModule version_module libexec/apache24/mod_version.so
 #LoadModule remoteip_module libexec/apache24/mod_remoteip.so
-#LoadModule proxy_module libexec/apache24/mod_proxy.so
+LoadModule proxy_module libexec/apache24/mod_proxy.so
 #LoadModule proxy_connect_module libexec/apache24/mod_proxy_connect.so
 #LoadModule proxy_ftp_module libexec/apache24/mod_proxy_ftp.so
 #LoadModule proxy_http_module libexec/apache24/mod_proxy_http.so
@@ -131,7 +131,7 @@
 #LoadModule proxy_scgi_module libexec/apache24/mod_proxy_scgi.so
 #LoadModule proxy_fdpass_module libexec/apache24/mod_proxy_fdpass.so
 #LoadModule proxy_wstunnel_module libexec/apache24/mod_proxy_wstunnel.so
-#LoadModule proxy_ajp_module libexec/apache24/mod_proxy_ajp.so
+LoadModule proxy_ajp_module libexec/apache24/mod_proxy_ajp.so
 #LoadModule proxy_balancer_module libexec/apache24/mod_proxy_balancer.so
 #LoadModule proxy_express_module libexec/apache24/mod_proxy_express.so
 #LoadModule proxy_hcheck_module libexec/apache24/mod_proxy_hcheck.so
@@ -159,20 +159,20 @@
 #LoadModule asis_module libexec/apache24/mod_asis.so
 #LoadModule info_module libexec/apache24/mod_info.so
 <IfModule !mpm_prefork_module>
-       #LoadModule cgid_module libexec/apache24/mod_cgid.so
+       LoadModule cgid_module libexec/apache24/mod_cgid.so
 </IfModule>
 <IfModule mpm_prefork_module>
-       #LoadModule cgi_module libexec/apache24/mod_cgi.so
+       LoadModule cgi_module libexec/apache24/mod_cgi.so
 </IfModule>
 #LoadModule dav_fs_module libexec/apache24/mod_dav_fs.so
 #LoadModule dav_lock_module libexec/apache24/mod_dav_lock.so
 #LoadModule vhost_alias_module libexec/apache24/mod_vhost_alias.so
-#LoadModule negotiation_module libexec/apache24/mod_negotiation.so
+LoadModule negotiation_module libexec/apache24/mod_negotiation.so
 LoadModule dir_module libexec/apache24/mod_dir.so
 #LoadModule imagemap_module libexec/apache24/mod_imagemap.so
 #LoadModule actions_module libexec/apache24/mod_actions.so
 #LoadModule speling_module libexec/apache24/mod_speling.so
-#LoadModule userdir_module libexec/apache24/mod_userdir.so
+LoadModule userdir_module libexec/apache24/mod_userdir.so
 LoadModule alias_module libexec/apache24/mod_alias.so
 #LoadModule rewrite_module libexec/apache24/mod_rewrite.so

@@ -210,7 +210,7 @@
 # e-mailed.  This address appears on some server-generated pages, such
 # as error documents.  e.g. admin@your-domain.com
 #
-ServerAdmin you@example.com
+ServerAdmin george@yk.rim.or.jp

 #
 # ServerName gives the name and port that the server uses to identify itself.
@@ -219,7 +219,7 @@
 #
 # If your host doesn't have a registered DNS name, enter its IP address here.
 #
-#ServerName www.example.com:80
+ServerName n3050.tokyo3.nerv:80

 #
 # Deny access to the entirety of your server's filesystem. You must
@@ -277,7 +277,7 @@
 # is requested.
 #
 <IfModule dir_module>
-    DirectoryIndex index.html
+    DirectoryIndex index.html wiki.cgi cyclamen.cgi
 </IfModule>

 #
@@ -424,7 +424,7 @@
     # To use CGI scripts outside of ScriptAliased directories:
     # (You will also need to add "ExecCGI" to the "Options" directive.)
     #
-    #AddHandler cgi-script .cgi
+    AddHandler cgi-script .cgi

     # For type maps (negotiated resources):
     #AddHandler type-map var
@@ -435,8 +435,8 @@
     # To parse .shtml files for server-side includes (SSI):
     # (You will also need to add "Includes" to the "Options" directive.)
     #
-    #AddType text/html .shtml
-    #AddOutputFilter INCLUDES .shtml
+    AddType text/html .shtml
+    AddOutputFilter INCLUDES .shtml
 </IfModule>

 #
@@ -444,7 +444,7 @@
 # contents of the file itself to determine its type.  The MIMEMagicFile
 # directive tells the module where the hint definitions are located.
 #
-#MIMEMagicFile etc/apache24/magic
+MIMEMagicFile etc/apache24/magic

 #
 # Customizable error responses come in three flavors:
@@ -493,7 +493,7 @@
 #Include etc/apache24/extra/httpd-autoindex.conf

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

 # User home directories
 #Include etc/apache24/extra/httpd-userdir.conf
@@ -511,7 +511,7 @@
 #Include etc/apache24/extra/httpd-dav.conf

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

 # Configure mod_proxy_html to understand HTML4/XHTML1
 <IfModule proxy_html_module>
ssh george@n3050 ~ $

差分が多くて解説しにくいが、以下に羅列。

  1. LoadModule include_module libexec/apache24/mod_include.so
    Server Side Include (SSI) を使っているので、モジュールをロードする
  2. LoadModule mime_magic_module libexec/apache24/mod_mime_magic.so
    Unixのfile(1)コマンドと同様に、ファイルの内容を見てMIME typeを決定するモジュール。
    このモジュールはmod_mimeによるファイルの拡張子でMIME typeが決定できなかった場合に使用される。
  3. LoadModule proxy_module libexec/apache24/mod_proxy.so
  4. LoadModule proxy_ajp_module libexec/apache24/mod_proxy_ajp.so
    proxyとproxy_ajpを使ってTomcatと連携するのでロードする
  5. LoadModule cgi_module libexec/apache24/mod_cgi.so
    CGIを使うのでロードする。
  6. LoadModule negotiation_module libexec/apache24/mod_negotiation.so
    extra/httpd-languages.confを有効にする場合にロードする。
    例えば、Accept-Languageがjaだった場合、index.html.jaを返却するときに使われる。
  7. LoadModule userdir_module libexec/apache24/mod_userdir.so
    UserDirを使うためにロードする。
    http://ホスト名.ドメイン名/~unixのユーザ名/ みたいなUnixユーザー単位でWebサイトを作成できるように設定する場合に使う
  8. ServerAdmin george@yk.rim.or.jp
  9. ServerName n3050.tokyo3.nerv:80
  10. <IfModule dir_module>
    DirectoryIndex index.html wiki.cgi cyclamen.cgi
    </IfModule>
    ディレクトリ指定でのアクセス ( たとえば、http://ホスト名.ドメイン名/~unixのユーザ名/sample/ ) でアクセスがあった場合に検索するファイル名を指定する。
    通常は index.html を検索するが、自宅では wikiのCGI とか 掲示板CGIがあるので、ここに追加する。
  11. <IfModule mime_module>
    AddHandler cgi-script .cgi
    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
    </IfModule>
    拡張子によって処理を変更する。CGIとSSIの処理を指定。
  12. MIMEMagicFile etc/apache24/magic
    mime_magic_module用の設定ファイルを指定。
  13. Include etc/apache24/extra/httpd-languages.conf
    例えば、Accept-Languageがjaだった場合は、index.html.jaを返却する設定を有効にする。
  14. Include etc/apache24/extra/httpd-default.conf
    各種デフォルト設定を有効にする

apacheのモジュール一覧を表示する。 ロードが必要なモジュールが足りない場合はエラーメッセージが表示される。

  apachectl -M

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

  apachectl configtest

apacheを起動する。

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

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

  http://n3050.tokyo3.nerv/

ログファイルの分割設定

■newsyslogの設定

/etc/newsyslog.confでは、/usr/local/etc/newsyslog.conf.d/*を読み込んでくれるので、 以下のファイルを追加する。

mkdir -p /usr/local/etc/newsyslog.conf.d
cat > /usr/local/etc/newsyslog.conf.d/apache24.conf << "EOF"
# logfilename              [owner:group]    mode count size when  flags  [/pid_file]         [sig_num]
/var/log/httpd-access.log                   644  3     *    @T00   J    /var/run/httpd.pid   30
/var/log/httpd-error.log                    600  3     *    @T01   J    /var/run/httpd.pid   30
EOF

■robots.txtの設定

Googleなどの検索エンジンが自動的にWebサイトの内容を取得するのを止めてもらう場合に設定する。

あくまでも紳士協定なので、このファイルを見ないで丸ごと取得していく業者もあるようだ。

自宅サーバで通信回線が細い場合や、Amazon AWSなどのホスティングサービスを使用していてデータ通信量による従量課金がある場合、 検索エンジンに定期的に全データ取得されると困る際に設定する。

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

1.1.8.2. www/tomcat8 のインストール

■インストール

  pkg install -y www/tomcat8

■Tomcatのポート番号変更

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

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

  vi /usr/local/apache-tomcat-8.0/conf/server.xml
root@n3050 ~ $ diff -u10 /usr/local/apache-tomcat-8.0/conf/server.xml.sample /usr/local/apache-tomcat-8.0/conf/server.xml
--- /usr/local/apache-tomcat-8.0/conf/server.xml.sample 2016-12-12 00:44:40.000000000 +0900
+++ /usr/local/apache-tomcat-8.0/conf/server.xml        2016-12-18 16:19:09.330341000 +0900
@@ -59,21 +59,21 @@
     -->


     <!-- A "Connector" represents an endpoint by which requests are received
          and responses are returned. Documentation at :
          Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
          Java AJP  Connector: /docs/config/ajp.html
          APR (HTTP/AJP) Connector: /docs/apr.html
          Define a non-SSL/TLS 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-->
     <!--
     <Connector executor="tomcatThreadPool"
                port="8080" protocol="HTTP/1.1"
                connectionTimeout="20000"
                redirectPort="8443" />
     -->
     <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443
root@n3050 ~ $

■Tomcatを起動する。

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

■試験アクセス

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

■tomcat8のロケールの日本語化

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

cat > /usr/local/apache-tomcat-8.0/bin/setenv.sh << "EOF"
export LANG=ja_JP.eucJP
EOF
chown root:wheel /usr/local/apache-tomcat-8.0/bin/setenv.sh
chmod 644 /usr/local/apache-tomcat-8.0/bin/setenv.sh

設定後、tomcatを再起動する。

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

■不要なドキュメント/アプリの削除

tomcatインストール時には、サンプルやtomcatドキュメントやtomcat管理ツールもインストールされている。

不要なら削除しておく。

rm -rf /usr/local/apache-tomcat-8.0/webapps/ROOT/*
cat > /usr/local/apache-tomcat-8.0/webapps/ROOT/index.jsp << "EOF"
<!DOCTYPE html>
<html>
<head>
<title>It works!</title>
</head>
<body>
<h1>It works!</h1>
</body>
</html>
EOF
chown www:www /usr/local/apache-tomcat-8.0/webapps/ROOT/index.jsp
rm -rf /usr/local/apache-tomcat-8.0/webapps/docs
rm -rf /usr/local/apache-tomcat-8.0/webapps/examples
rm -rf /usr/local/apache-tomcat-8.0/webapps/host-manager
rm -rf /usr/local/apache-tomcat-8.0/webapps/manager

■/etc/rc.confの編集

/etc/rc.confを編集して、tomcat8を自動起動する。

# for tomcat8
tomcat8_enable="YES"
tomcat8_java_opts="-Xmx700m"
tomcat8_wait=5

1.1.8.3. apache24の詳細設定 名前ベースのVirtualHost

名前ベースのVirtualHostを設定。

ブラウザからアクセスしてきたホスト名によって、違うサイトに見せたい場合に設定する。

■newsyslogの設定

/etc/newsyslog.confでは、/usr/local/etc/newsyslog.conf.d/*を読み込んでくれるので、 以下のファイルを追加する。

mkdir -p /usr/local/etc/newsyslog.conf.d
cat > /usr/local/etc/newsyslog.conf.d/apache24-vhost.conf << "EOF"
# logfilename              [owner:group]    mode count size when  flags  [/pid_file]         [sig_num]
/var/log/httpd-access-vhost.log                   644  3     *    @T00   J    /var/run/httpd.pid   30
/var/log/httpd-error-vhost.log                    600  3     *    @T01   J    /var/run/httpd.pid   30
EOF

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

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

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

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

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

    # UserDir
    UserDir public_html
    UserDir disabled
    UserDir enabled george webpub

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

        # Access control
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
        Allow from localhost
        Allow from 192.168.1.30
        Allow from 192.168.1.31
        Allow from 192.168.1.32
        Allow from 192.168.1.33
    </Directory>

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

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

    # for tomcat
    <IfModule proxy_module>
        # 原則としてproxyはすべて禁止
        <Proxy *>
            Order Allow,Deny
            Deny from all
        </Proxy>
        # proxy_ajpの設定
        <IfModule proxy_ajp_module>
            <Location /docs>
                Order Deny,Allow
                Allow from all
                ProxyPass     ajp://c60pc.tokyo3.nerv:8009/docs
            </Location>
        </IfModule>
    </IfModule>

</VirtualHost>

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

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

  apachectl configtest

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

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

アクセステスト

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

アクセステスト(CGI)

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

掲示板、WIKIテスト(CGI)

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

JSP/Servletテスト

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

1.1.8.4. www/wwwoffle

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

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

■インストール

  pkg install -y www/wwwoffle

■設定ファイル編集

/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

1.1.9. freebsd-update によるセキュリティパッチの適用

カーネルやユーザーランドにセキュリティパッチなどが出た場合、freebsd-updateを使って取得と適用を行う。

rootになって以下を実行。

freebsd-update fetch
freebsd-update install
shutdown -r now

再起動後、カーネルのバージョンと、ユーザーランドのバージョンを表示する。

ssh george@n3050 ~ $ freebsd-version -ku
11.0-RELEASE-p7
11.0-RELEASE-p7
ssh george@n3050 ~ $

1.1.10. GENERICカーネルのビルドとインストール

rootになって以下を実行。

cd /usr/src
#
# コンパイル。
# 今回は -j2 を指定して、並列度2でコンパイル。
time make buildkernel -j2
#
# インストール。
# こっちは -j2 つけちゃダメ
make installkernel
shutdown -r now

再起動後、カーネルのバージョンと、ユーザーランドのバージョンを表示する。

ssh george@n3050 ~ $ freebsd-version -ku
11.0-RELEASE-p7
11.0-RELEASE-p7
ssh george@n3050 ~ $

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

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

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