FreeBSD 13.1 にて検証したものになります。
また、ディスクはNVMEのSSDを利用しています。ディスクファイル名は適宜読み替えてください。
※「{{ }}」にて囲まれている部分は変数を表します(Jinja2などのテンプレートエンジンでもレンダリング可能なようにしてあります)。
インストールディスク起動時の画面
-
インストールディスクからFreeBSDを起動後、「Shell」に入る
-
キーボード設定をjp106にする
# kbdcontrol -l /usr/share/syscons/keymaps/jp.106.kbd
-
ZFSモジュールを読み込む
# kldload zfs
-
ZFSのプールを4kセクタで作成するためにashiftの設定値を12にする
# sysctl vfs.zfs.min_auto_ashift=12
-
ディスクのパーティション設定
【必要がある場合】パーティション状態を確認し、全て削除する# gpart show nvd0 # gpart destroy -F nvd0 # zpool labelclear -f nvd0
ディスクのパーティションをきる
※ここはお好みで設定してください# gpart create -s gpt nvd0 # gpart add -t efi -b 40 -s 409560 nvd0 # gpart add -a 4k -t freebsd-zfs -s 27999m nvd0 # gpart add -a 4k -t freebsd-swap -s 4g nvd0
確認する
# gpart show nvd0
念のため、以前のZFS情報を削除しておく
# zpool labelclear -f nvd0p1 # zpool labelclear -f nvd0p2 # zpool labelclear -f nvd0p3
-
ルートプールを作成する
# zpool create -o altroot=/mnt -o cachefile=/tmp/zpool.cache -O mountpoint=none -O compression=zstd -O atime=off -O normalization=formC zroot nvd0p2
-
4kセクタで作成されたか確認する
# zdb -U /tmp/zpool.cache | grep ashift ashift: 12
-
デフォルトシステムのFSを作成
# zfs create -o mountpoint=/ -o canmount=noauto -p zroot/sys/ROOT/default # zfs mount zroot/sys/ROOT/default
-
その他のFSを作成
# zfs create -o mountpoint=/var zroot/sys/var # zfs create -o mountpoint=/home zroot/sys/ROOT/home # zfs create -o mountpoint=/usr -o canmount=off zroot/sys/usr # zfs create -o mountpoint=/usr/src -o compression=gzip-9 zroot/sys/usr/src # zfs create -o mountpoint=/usr/ports -o compression=gzip-9 -o setuid=off zroot/sys/usr/ports # zfs create -o mountpoint=/var/tmp -o setuid=off zroot/sys/var/tmp # zfs create -o mountpoint=/tmp -o setuid=off -o exec=on zroot/sys/tmp # zfs create -o mountpoint=/var/audit -o setuid=off -o exec=off zroot/sys/var/audit # zfs create -o mountpoint=/var/crash -o setuid=off -o exec=off zroot/sys/var/crash # zfs create -o mountpoint=/var/log -o setuid=off -o exec=off zroot/sys/var/log # zfs create -o mountpoint=/var/mail -o atime=on zroot/sys/var/mail
-
パーミッションの設定
# chmod 1777 /mnt/tmp # chmod 1777 /mnt/var/tmp
-
FSの確認
# zfs list
-
ブートデバイスを指定する
# zpool set bootfs=zroot/sys/ROOT/default zroot
-
UEFI用ブートローダの設定
# newfs_msdos -F 32 -c 1 -L EFISYS /dev/nvd0p1 # mkdir /tmp/esp # mount -t msdosfs /dev/nvd0p1 /tmp/esp # mkdir -p /tmp/esp/EFI/BOOT # cp /boot/loader.efi /tmp/esp/EFI/BOOT/BOOTX64.efi
-
ブートローダが正しい位置に配置されているか確認
# ( cd /tmp/esp && find . )
-
EFI領域をアンマウント
# umount /tmp/esp
-
Shellを終了
# exit
-
「Install」を実行
-
Keymap Selectionにおいて、「Japanese 106」を選択しEnterを押下する
-
「Continue with jp.kbd keymap」を選択し、Enterを押下する
-
ホスト名を入力し、Enterを押下する
-
インストールするコンポーネントを選択し、Enterを押下する
こだわりがなければ初期状態でEnterを押下して問題ない
(最近はportsを導入しなくても、正直pkgでどうにかなるのでインストールしなくても良い) -
Partitioningで「Shell」を選択し、Enterを押下する
-
既に設定済みなので、Shellを抜ける
# exit
-
Archive Extractionで進捗が100%になるまで待つ
-
rootのパスワードを設定する
-
Network Configuretionでネットワーク設定を行う
多くの人が設定すると思われる例を以下に記載する
IPv4を利用するかの設定
↓
IPv4アドレスの取得方法(DHCP or 固定)の設定↓
IPv6を利用するかの設定↓
IPv4のDNSの設定 -
TimeZoneの設定を行う
「4 Asia」↓
「19 Japan」↓
「Yes」でEnterを押下する -
日時の設定を行う
必要に応じて日付と時刻の設定を行う -
導入するモジュールを選択する
-
ハードニングの設定を行う
私が推奨する最低限の設定は以下の画像である -
ユーザー設定
後ほどグループとユーザー設定は行うので、ここでは「No」を選択してEnterを押下する -
設定に関する最終確認画面
特に問題がなければ、「Exit」を選択してEnterを押下する -
Manual Configurationで「Yes」を選択し、Enterを押下する
-
fstabにswapをマウントするように設定する
# vi /etc/fstab ===== # Device Mountpoint FStype Options Dump Pass # /dev/nvd0p3 none swap sw 0 0 =====
-
起動時にZFSを有効にする
# sysrc zfs_enable="YES"
-
終了する
# exit
-
Rebootを行う
-
rootとしてログインする
login : root
-
UEFIから起動しているか確認
# sysctl machdep.bootmethod machdep.bootmethod: UEFI
-
sudo をインストール
# pkg install sudo
-
sudo の設定をする
# visudo ===== -# Defaults env_keep += "HOME" +Defaults env_keep += "HOME" +Defaults env_keep += "PATH" +Defaults timestamp_timeout=30 -# %wheel ALL=(ALL:ALL) ALL +%wheel ALL=(ALL:ALL) ALL =====
-
グループを作成する
管理者用グループ(sysadmin)は作成しなくても良い# pw groupadd -n sysadmin -g 100 # pw groupadd -n users -g 1000
-
管理者用アカウントを作成する
# pw useradd -n {{ Username }} -g users -G wheel -G sysadmin -s /bin/tcsh -u 1000 -m -w yes # passwd {{ Username }}
-
SSHの設定を行う
# vi /etc/ssh/sshd_config ===== -#PasswordAuthentication no +PasswordAuthentication yes =====
-
IPアドレスを確認しておく
# ifconfig
-
再起動を行う
# shutdown -r now
ここからはSSHでリモートからの設定も可能。
-
必要なモジュールのインストール
$ sudo pkg install python $ sudo pkg install py39-pip wget curl vim tmux zsh git ja-less ja-gawk ja-man ja-man-doc ja-font-ipa gmake dns/bind-tools sysutils/coreutils vnstat
-
Terminalで日本語入力もできるようにしておく
$ echo "set convert-meta off" | sudo tee /etc/inputrc $ echo "set meta-flag on" | sudo tee -a /etc/inputrc $ echo "set output-meta on" |sudo tee -a /etc/inputrc
-
ZFSのプールを4kセクタで作成するためにashiftの設定値を12にする
$ echo "vfs.zfs.min_auto_ashift=12" | sudo tee -a /etc/sysctl.conf
-
【必要がある場合】SSDのTRIMを定期的に行うように設定
以下の例では毎週日曜日の1時10分にTRIMを行う
(zpoolに対してautotrim=onとすることもできるが、タイミングが不明なためcronの定期実行)$ sudo crontab -u root -e ===== +10 1 * * 0 zpool trim zroot =====
-
sshdの設定
$ sudo vi /etc/ssh/sshd_config ===== -#Port 22 +Port {{ SSHPort }} -#PermitRootLogin no +PermitRootLogin no -#PermitEmptyPasswords no +PermitEmptyPasswords no #For Judgement of Cascade Proxy AcceptEnv SOURCE_SSH_CONNECTION =====
-
NTPの設定を行う
起動時と6時間毎のxx時10分に更新を行う
※「29. 導入するモジュールを選択する」のところで「ntpdate」を選択している場合の例$ sudo sysrc ntpdate_enable="YES" $ sudo sysrc ntpdate_flags="-b ntp.jst.mfeed.ad.jp" $ sudo crontab -u root -e ===== +10 */6 * * * /usr/sbin/ntpdate ntp.jst.mfeed.ad.jp =====
-
ipfwを有効化する
$ sudo sysrc firewall_enable="YES" $ sudo sysrc firewall_logdeny="YES" $ sudo sysrc firewall_type="workstation" $ sudo sysrc firewall_script="/etc/ipfw.rules"
-
ipfwのコネクションあたりの最大ログの設定を行う
$ echo "net.inet.ip.fw.verbose_limit=5" | sudo tee -a /etc/sysctl.conf
-
ipfw.rules の設定変更
※各自でカスタマイズしてください$ sudo vi /etc/ipfw.rules
-
vnStatを有効化する
$ sudo sysrc vnstat_enable="YES"
-
vnStatの設定変更
$ sudo vi /usr/local/etc/vnstat.conf ===== -;Interface "" +Interface "{{ InterfaceName }}" -;DatabaseDir "/var/lib/vnstat" DatabaseDir "/usr/local/vnstat/db" -;MaxBandwidth 1000 +MaxBandwidth 1000 =====
-
vnStatを起動する
$ sudo mkdir -p /usr/local/vnstat/db $ sudo chown -R vnstat:vnstat /usr/local/vnstat $ sudo chmod -R 755 /usr/local/vnstat $ sudo service vnstat start
-
再起動
$ sudo shutdown -r now
zshに変更する例。
$ sudo chsh -s /usr/local/bin/zsh {{ Username }}
clone先Pathは適宜変更のこと(dotfiles="~/.dotfiles")。
-
github から dotfiles を clone
$ git clone https://github.com/t-okkn/dotfiles .dotfiles
-
(まだ、全自動じゃないので)設定をする
$ cd ~/.dotfiles $ gmake install