29
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

FreeBSD 12で自宅サーバの構築 基本システム編その1

はじめに

FreeBSD 12を使用した自宅サーバの構築を行った。FreeBSD 12はリリースされて間もない状態ですが、カーネルに標準でVIMAGEが取り込まれDNSの外向きと、内向きを別々のシステム(jail+VIMAGE)が同一ホストで構築できることから採用することにしました。その時の構築手順を備忘録の意味も含め、具体的にいくつかに渡り説明する。

背景

これまでに、FreeBSDを使って自宅サーバを構築していましたが、PCを更新するごとに1からインストールしている。バーチャル環境を使ったほうが便利ではあるが、サーバソフトを見直すいい機会になると思い4~5年を目処に1から更新している。
最近の更新は昨年(2018年)であるが、その時はあまり時間が取れずサーバソフトを見直さなかったが、今回Let's EncryptによるSSL化を採用したく、サーバソフトを全面的に見直すことにした。また、次回の再構築のために、ここに内容を残すことにした。

基本のインストール

OSのインストール

インストールファイルをダウンロードしインストールをする。この部分の詳細は省略するが要点は以下です。

  • 使用しているキーボードの設定
  • パーティーションの選択でZFSを選択
  • ネットワークの設定
  • タイムゾーンの選択
  • ユーザを追加(wheelグループに属するようにすることでrootになれる)

インストール時に設定した内容の確認(defaultrouter・nameserverは192.168.1.1にある。キーマップは使用しているキーボードに合わせる)

/etc/rc.conf
hostname="server1"
keymap="us.kbd"
ifconfig_em0="inet 192.168.1.32 netmask 255.255.255.0"
defaultrouter="192.168.1.1"
sshd_enable="YES"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="AUTO"
zfs_enable="YES"
/etc/resolv.conf
search example.jp
nameserver 192.168.1.1

今後殆どの作業はrootで行うがプロンプトが'%'の場合は一般ユーザによる操作、'#'の場合はrootによる操作を表す。
sudoコマンドは、自分の感覚にあっていないので以下のようにrootになって作業を行う(suでrootになる場合はwheelのグループにいる必要がある)。

% su
Password:
#

sshの設定

デフォルトでsshdは作動しているのが、設定を一部変更する
最初にキーを作成する

% ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hoge/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/hoge/.ssh/id_rsa.
Your public key has been saved in /home/hoge/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:5dFO3WW5l4utZHby7gWcLqQn3SOIYeNmNcyvHZiWvZg hoge@server1
The key's randomart image is:
+---[RSA 2048]----+
|                +|
|           . . +.|
|          o o . +|
|         = + . +.|
|        S * o * o|
|       o = % O = |
|        = O % O .|
|       o . B * o.|
|          E o oo |
+----[SHA256]-----+

~/.ssh/id_rsaファイルをTeraTermなどに設定することで接続できるようになる。(詳細は省略)
sshd_configファイルをについて以下のように変更する。
現在Protocolは2に固定になっているので設定するところがない。rootのログインについてのみ変更する。
設定できる値は以下である。

説明
yes rootユーザのログインを許可
no rootユーザのログインを拒否
without-password パスワードを使用したrootユーザのログインを拒否
forced-commands-only rootユーザのログインは拒否するが、root権限のコマンドはアクセスを許可

ここではバックアップ作業を行いたいため以下の設定を追加する

/etc/ssh/sshd_config
PermitRootLogin forced-commands-only

sshdに設定を読み込ませる

# service sshd reload
Performing sanity check on sshd configuration.

これで、TeraTermなどから広い画面を使って作業ができるようになる。

OSのアップデート

最初に最新のバージョンにアップデートする

# freebsd-update fetch
src component not installed, skipped
Looking up update.FreeBSD.org mirrors... 3 mirrors found.
Fetching public key from update2.freebsd.org... done.
Fetching metadata signature for 12.0-RELEASE from update2.freebsd.org... done.
Fetching metadata index... done.
Fetching 2 metadata files... done.
Inspecting system... done.
Preparing to download files... done.
Fetching 71 patches.....10....20....30....40....50....60....70 done.
Applying patches... done.
Fetching 1 files... done.
以下省略(更新されるファイルなどが表示される)
# freebsd-update install
src component not installed, skipped
Installing updates... done.
# reboot

portsの初期化

今回、パッケージのインストールはpkgコマンドを優先するが、コンパイルオプションを変更したい時はportsから自前でコンパイルすることになる。そこで、portsを準備する。

portsファイルをダウンロードする

# portsnap fetch
Looking up portsnap.FreeBSD.org mirrors... 6 mirrors found.
Fetching public key from ec2-ap-northeast-1.portsnap.freebsd.org... done.
Fetching snapshot tag from ec2-ap-northeast-1.portsnap.freebsd.org... done.
Fetching snapshot metadata... done.
Fetching snapshot generated at Fri Feb 15 09:31:00 JST 2019:
b658f6e10fdde50332f502a8167b717f9d8b92dd4ea98d          84 MB 4259 kBps    20s
Extracting snapshot... done.
Verifying snapshot integrity... done.
Fetching snapshot tag from ec2-ap-northeast-1.portsnap.freebsd.org... done.
Fetching snapshot metadata... done.
Updating from Fri Feb 15 09:31:00 JST 2019 to Fri Feb 15 10:06:21 JST 2019.
Fetching 5 metadata patches... done.
Applying metadata patches... done.
Fetching 0 metadata files... done.
Fetching 1 patches.
(1/1) 100.00%  done.
done.
Applying patches...
done.
Fetching 0 new ports or files... done.
# portsnap extract
ports collectionのファイル展開表示される(省略)
Building new INDEX files... done.

OS・portsのメインテナンス

portsの自動メインテナンスを以下のシェルソフトで1日に一回行う。

/usr/local/sbin/ports_admin.sh
#!/bin/sh
#
#       ports
/usr/sbin/portsnap cron update
/usr/sbin/pkg version -v |/usr/bin/grep -v =

実行権限をもたせる

# chmod +x /usr/local/sbin/ports_admin.sh

portsのアップグレードとOSのアップグレードを行うクローン設定

/etc/crontab
# Ports update
15      0       *       *       *       root    /usr/local/sbin/ports_admin.sh
30      1       *       *       *       root    /usr/sbin/freebsd-update cron

rootへのメールを自分宛にする

/etc/aliases
root:           hoge1@exsample.jp
# newaliases

pkgのレポシトリ

標準で/etc/pkg/FreeBSD.confでquarterlyになっているがlatestを選択することもできる。最新版を追っかける時はlatestに変更する。
しかし、直接このファイルを編集するのではなく/usr/local/etc/repos/FreeBSD.confを作成する書かれている。

/usr/local/etc/pkg/repos/FreeBSD.conf
FreeBSD: { url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest" }
# mkdir -p /usr/local/etc/pkg/repos/
# echo 'FreeBSD: { url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest" }' > /usr/local/etc/pkg/repos/FreeBSD.conf
# pkg update
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from pkg+http://pkg.FreeBSD.org/FreeBSD:12:amd64/latest, please wait...
Installing pkg-1.10.5_5...
Extracting pkg-1.10.5_5: 100%
Updating FreeBSD repository catalogue...
pkg: Repository FreeBSD load error: access repo file(/var/db/pkg/repo-FreeBSD.sqlite) failed: No such file or directory
Fetching meta.txz: 100%    944 B   0.9kB/s    00:01
Fetching packagesite.txz: 100%    6 MiB   1.1MB/s    00:06
Processing entries: 100%
FreeBSD repository update completed. 31955 packages processed.
All repositories are up to date.

portupgradeのインストール

portsのコンパイルはportupgradeを使用すると便利なのでこれをインストールする

# pkg install portupgrade
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from pkg+http://pkg.FreeBSD.org/FreeBSD:12:amd64/quarterly, please wait...
Verifying signature with trusted certificate pkg.freebsd.org.2013102301... done
Installing pkg-1.10.5_5...
Extracting pkg-1.10.5_5: 100%
Updating FreeBSD repository catalogue...
pkg: Repository FreeBSD load error: access repo file(/var/db/pkg/repo-FreeBSD.sqlite) failed: No such file or directory
Fetching meta.txz: 100%    944 B   0.9kB/s    00:01
Fetching packagesite.txz: 100%    6 MiB   6.7MB/s    00:01
Processing entries: 100%
FreeBSD repository update completed. 32068 packages processed.
All repositories are up to date.
Updating database digests format: 100%
The following 9 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        portupgrade: 2.4.16,2
        ruby: 2.4.5_1,1
        libyaml: 0.2.1
        libunwind: 20170615
        libffi: 3.2.1_3
        indexinfo: 0.3.1
        libedit: 3.1.20170329_2,1
        ruby24-bdb: 0.6.6_5
        db5: 5.3.28_7

Number of packages to be installed: 9

The process will require 95 MiB more space.
22 MiB to be downloaded.

Proceed with this action? [y/N]: y
以下省略

portupgradeのログを残すためにpkgtools.confを変更、デフォルトの設定の最後の部分を以下のように変更する

/usr/local/etc/pkgtools.conf
-  PORTUPGRADE_ARGS = ENV['PORTUPGRADE']
+  PORTUPGRADE_ARGS = ENV['PORTUPGRADE'] || \
+       '-v -D -L /var/tmp/portupgrade-%s::%s.log'

日本語環境の設定

日本語コードはEUC-JPを採用する。そろそろUTF-8を考えたほうが良いようだが、これまでの資産などから、なかなか思いきれない。
以下のパッケージをインストールする。

  • japanese/less
  • libiconv
  • 日本語マニュアル

japanese/less

lessは標準でインストールされている。UTF-8は使えるようですがEUC-JP日本語コードが使えない。そこでjapanese/lessを使うのだが、japanese/lessは既にメインテナンスされていなく、バージョンはjapanese/lessが382に対しlessは530である。このことからも、UTF-8にしたほうが良いと思うが、EUC-JPを使うため以下のようにインストールする。

# pkg install japanese/less
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
The following 1 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        ja-less: 382.262.03.01

Number of packages to be installed: 1

191 KiB to be downloaded.

Proceed with this action? [y/N]: y
[1/1] Fetching ja-less-382.262.03.01.txz: 100%  191 KiB 195.8kB/s    00:01
Checking integrity... done (0 conflicting)
[1/1] Installing ja-less-382.262.03.01...
[1/1] Extracting ja-less-382.262.03.01: 100%

jlessをlessで起動できるようエリアスを作成と、言語設定・PAGERの設定を行う。

~/.cshrc
alias less      /usr/local/bin/jless
setenv  LC_CTYPE        ja_JP.eucJP
setenv  PAGER           /usr/local/bin/jless

libiconv

libiconvは、多くのパッケージで使用されていると思っていましたが、php73-iconv・p5-Locale-libintlとglibのようですが、phpではEUC-JPとUTF-8の変換は必須のためインストールする。加えて、Apply patches to fix CP932, add EUCJP-MSのパッチは必須である。また、iconvコマンドは標準でインストールされていてEUCJP-MSは使える状態になっている。標準とpkgでインストールしたパッケージで比較する。

# /usr/bin/iconv -l |grep EUC-JP
EUC-JP-MS EUCJP-MS EUCJP-OPEN EUCJP-WIN EUCJPMS
EUC-JP CSEUCPKDFMTJAPANESE EUCJP IBM-EUCJP
# /usr/local/bin/iconv -l |grep EUCJP
EUC-JP EUCJP EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE CSEUCPKDFMTJAPANESE

pkg版はEUC-JP-MSが使えない、パッケージのオプションを見るとPATCHESがoffになっている

# pkg info libiconv
libiconv-1.14_11
Name           : libiconv
Version        : 1.14_11
Installed on   : Sun Feb  3 03:07:27 2019 JST
Origin         : converters/libiconv
Architecture   : FreeBSD:12:amd64
Prefix         : /usr/local
Categories     : devel converters
Licenses       : GPLv3
Maintainer     : gnome@FreeBSD.org
WWW            : http://www.gnu.org/software/libiconv/
Comment        : Character set conversion library
Options        :
        DOCS           : on
        ENCODINGS      : on
        PATCHES        : off
以下省略

そのためportsからコンパイルする。

# portinstall libiconv
省略

オプション選択画面でチェックを入れる
libiconv.jpg
確認すると、EUC-JP-MSがサポートされている

# /usr/local/bin/iconv -l | grep EUC-JP
EUC-JP EUCJP EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE CSEUCPKDFMTJAPANESE
EUC-JP-MS EUCJP-MS EUCJP-OPEN EUCJP-WIN EUCJPMS

pkgコマンドでアップグレードされないようにロックを掛ける

# pkg lock libiconv
libiconv-1.14_11: lock this package? [y/N]: y
Locking libiconv-1.14_11

日本語マニュアル

日本語マニュアルは、正式にpkgになっているのは古いバージョン(FreeBSD 5.4かな?)のもので全てが揃っていないません。

# pkg search -f japanese/man-doc
japanese/man-doc
Name           : ja-man-doc
Version        : 5.4.20050911_3
Origin         : japanese/man-doc
Architecture   : FreeBSD:12:amd64
Prefix         : /usr/local
Repository     : FreeBSD [pkg+http://pkg.FreeBSD.org/FreeBSD:12:amd64/quarterly]
Categories     : japanese
Licenses       :
Maintainer     : kuriyama@FreeBSD.org
WWW            : UNKNOWN
Comment        : Japanese translation of FreeBSD manual pages
Annotations    :
        FreeBSD_version: 1200086
Flat size      : 5.09MiB
Pkg size       : 5.18MiB
Description    :
This is a Japanese translation of FreeBSD manual pages.
Note that to build it, you need the CVS repository in
${CVSROOT} (/home/ncvs by default) on your machine.

他には、小金丸氏が翻訳されている日本語マニュアルがあります。査読されていないようですが使わしていただいています。このページにあるやり方でインストールしようとすると以下のようにエラーが発生する。

# pkg add -f ftp://ftp.koganemaru.co.jp/pub/jman12/ja-cat-doc-12.0.20181218.amd64.txz
Fetching ja-cat-doc-12.0.20181218.amd64.txz: 100%    9 MiB 964.5kB/s    00:10
Installing ja-cat-doc-12.0.20181218.amd64...
pkg: Missing dependency 'ja-man'

Failed to install the following 1 package(s): ftp://ftp.koganemaru.co.jp/pub/jman12/ja-cat-doc-12.0.20181218.amd64.txz

ja-manが無いといっている。catpages 形式であればja-manが要らないようなので以下のようにインストールする。また、以前は、japanese/groff、japanese/man コマンドをインストールしman形式を使用していたが、ある時からjapanese/manで英語のmanを整形したときに文字化けするようになった。この時解決できなかったのでそれ以降はcatpages 形式を使っている。

# fetch ftp://ftp.koganemaru.co.jp/pub/jman12/ja-cat-doc-12.0.20181218.amd64.txz
ja-cat-doc-12.0.20181218.amd64.txz                    9419 kB  972 kBps    10s
# tar -Pzxf ja-cat-doc-12.0.20181218.amd64.txz
# rm +COMPACT_MANIFEST +MANIFEST ja-cat-doc-12.0.20181218.amd64.txz
# ln -s /usr/share/man/ja /usr/share/man/ja_JP.eucJP

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
29
Help us understand the problem. What are the problem?