2016.12.16 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イメージをダウンロード。
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
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'
rootのデフォルトシェルは/bin/csh。
ここでは、/bin/sh に変更しておく。(後で/usr/local/bin/bashにするけど)
chsh -s /bin/sh root
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
/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
/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"
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
普段使っている自分のユーザー(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)が便利。
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の新しいパスワードを入力]
/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
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
ユーザー毎に秘密鍵〜公開鍵ペアを生成する。
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鍵は強度が十分ではないとして、現在はログインには使用できない。
毎回パスフレーズ入力を要求されるとわずらわしい場合がある。 (シェルスクリプトから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回追加すれば、ログインシェルが生きている限りパスフレーズ入力は無用である。
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 経由で接続できる。
秘密鍵公開鍵を使ったログインに成功したら、 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
時刻合わせデーモン(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
元ネタ
パーティション上に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
FreeBSD 10以降では、pkg_addにかわり、pkgコマンドでバイナリインストールを行う。
詳しくは以下を参照。
よく使うコマンドを以下に示す。
割と便利なシェル。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
一時的にroot権限を得るとか、そんな場合に便利。
余談だが、Ubuntuではrootユーザーでログインすることはなく、root権限が必要な場合はsudoを使う。
pkg install -y security/sudo
# 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
変更のあったファイルだけ検出して高速にコピーできる。 バックアップ用途とか、マシン引越し時に便利。
(Windows 7 でいうところの robocopyみたいなもの)
pkg install -y net/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/
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程度でエラーになることはあるけど...
日本語漢字フィルタ。文字コードの変換に使う。 非常に古くからあるコマンドで、古いスクリプトが使用しているのでインストールする。
pkg install -y japanese/nkf
パワフルなページャ。EUC, SJIS にも対応。
pkg install -y japanese/less
パワフルなファイルビューア。lessの代わりに使用できる。nkfの代わりに文字コード変換ツールとしても使える。
出力文字コードを色々変更できるので、端末の文字コードをUTF-8にしている場合に便利。
pkg install -y misc/lv
ネットワークの先に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)ということらしい。
テキスト画面で動作するブラウザ。
pkg install -y japanese/w3m
perl用日本語文字コード変換モジュール。
相当に古いものだが、自作のperlスクリプトが使っているのでインストール。
pkg install -y japanese/jcode.pl
有志が翻訳している日本語マニュアルデータと、日本語マニュアルをフォーマットするコマンド(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を必要としている。 このため、自分でつくってあげる必要がある。
受信したメールをフィルタ処理するソフト。
■インストール
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/
プロバイダなどの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
電子メールというキーワードに関わるありとあらゆるものを含むというCourier一家に属するテキストコンソール用のメールクライアント Courier-Cone 。
ホームディレクトリのMaildir形式に対応。その他、POP3/IMAP4にも対応。
インストールは以下。
pkg install -y mail/cone
テキスト端末からconeで起動。
特に設定をしなくても日本語のメール読めたので驚いた。
これからインストールする大型テキストエディタなどは、X11やGNOMEライブラリを使ったGUIを持つコンパイル時オプションがあるので、エディタより先にX11をインストールしておく。
純粋なサーバ用途の場合はX11を入れないという選択肢もあるが、自宅マシン用なのでX11を入れておく。
これはコンパイルするとシャレにならない時間がかかる。(遅いマシンだと2日とか) バイナリからインストールする。
pkg install -y x11/xorg
x11/xorgを指定すると、X11関連はまとめてインストールされる。
vi系のエディタで、テキスト端末上でもウィンドウ分割をサポートする高機能なエディタvimをインストール。
pkg install -y editors/vim
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)
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
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")
VNCクライアント専用の仮想Xサーバをメモリ上に作成し、VNCというネットワーク経由で画面接続するクライアントソフトを使って接続する。
ネットワーク越しにGUI画面が使えるリモートデスクトップのようなもの。クライアントソフトはWindows版, Mac版など色々あるのが便利だ。
(FreeBSD同志とかCentOS系とならX11でネットワーク経由でGUI接続できるのだが、Windowsじゃダメなのだ)
接続先マシンの実際のグラフィックカードが表示中のXサーバGUI画面とは関係が無い。
搭載しているビデオカードの解像度には関係なく、メモリさえあれば大きなVNC Server画面を提供することもできる。
pkg install -y net/tightvnc
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
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 ~ $
WebブラウザFirefoxのインストール。
pkg install -y firefox
Webブラウザchromiumのインストール。
pkg install -y chromium
メーラーthunderbirdのインストール。
pkg install -y thunderbird
nslookupやdigなどのDNS調査用ツールをインストールするため、bind911をインストール(ぉぃぉぃ。
pkg install -y dns/bind911
今回はDNSキャッシュunboundを有効にしているため、DNS関連の設定は行わなず、bindの起動もしない。
メールサーバ機能全部入り(SMTP IMAP POP3 HTTP(Webmail))というCourierをインストール。
pkg install -y mail/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./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
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
■/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通信を受け付けるようになる。
■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 ~ $
まず最初に、暗号化しない通信を行う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通信を受け付けるようになる。
■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.
■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
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 ~ $
差分が多くて解説しにくいが、以下に羅列。
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
■インストール
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
名前ベースの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/
小規模な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
カーネルやユーザーランドにセキュリティパッチなどが出た場合、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 ~ $
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 ~ $