Skip to content

Instantly share code, notes, and snippets.

@t-okkn
Last active July 26, 2022 16:36
Show Gist options
  • Save t-okkn/202f1704097f7e71cea6065e02effb03 to your computer and use it in GitHub Desktop.
Save t-okkn/202f1704097f7e71cea6065e02effb03 to your computer and use it in GitHub Desktop.
オレオレ式、FreeBSDインストール手順

FreeBSD インストール手順

FreeBSD 13.1 にて検証したものになります。

また、ディスクはNVMEのSSDを利用しています。ディスクファイル名は適宜読み替えてください。

※「{{ }}」にて囲まれている部分は変数を表します(Jinja2などのテンプレートエンジンでもレンダリング可能なようにしてあります)。

■初期インストール

インストールディスク起動時の画面

pic001-a

  1. インストールディスクからFreeBSDを起動後、「Shell」に入る

    pic001-b

  2. キーボード設定をjp106にする

    # kbdcontrol -l /usr/share/syscons/keymaps/jp.106.kbd
    
  3. ZFSモジュールを読み込む

    # kldload zfs
    
  4. ZFSのプールを4kセクタで作成するためにashiftの設定値を12にする

    # sysctl vfs.zfs.min_auto_ashift=12
    
  5. ディスクのパーティション設定
    【必要がある場合】パーティション状態を確認し、全て削除する

    # 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
    
  6. ルートプールを作成する

    # zpool create -o altroot=/mnt -o cachefile=/tmp/zpool.cache -O mountpoint=none -O compression=zstd -O atime=off -O normalization=formC zroot nvd0p2
    
  7. 4kセクタで作成されたか確認する

    # zdb -U /tmp/zpool.cache | grep ashift
                ashift: 12
    
  8. デフォルトシステムのFSを作成

    # zfs create -o mountpoint=/ -o canmount=noauto -p zroot/sys/ROOT/default
    # zfs mount zroot/sys/ROOT/default
    
  9. その他の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
    
  10. パーミッションの設定

    # chmod 1777 /mnt/tmp
    # chmod 1777 /mnt/var/tmp
    
  11. FSの確認

    # zfs list
    
  12. ブートデバイスを指定する

    # zpool set bootfs=zroot/sys/ROOT/default zroot
    
  13. 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
    
  14. ブートローダが正しい位置に配置されているか確認

    # ( cd /tmp/esp && find . )
    
  15. EFI領域をアンマウント

    # umount /tmp/esp
    
  16. Shellを終了

    # exit
    
  17. 「Install」を実行

    pic001-a

  18. Keymap Selectionにおいて、「Japanese 106」を選択しEnterを押下する

    pic018-a

    pic018-b

  19. 「Continue with jp.kbd keymap」を選択し、Enterを押下する

    pic019

  20. ホスト名を入力し、Enterを押下する

    pic020

  21. インストールするコンポーネントを選択し、Enterを押下する
    こだわりがなければ初期状態でEnterを押下して問題ない
    (最近はportsを導入しなくても、正直pkgでどうにかなるのでインストールしなくても良い)

    pic021

  22. Partitioningで「Shell」を選択し、Enterを押下する

    pic022

  23. 既に設定済みなので、Shellを抜ける

    # exit
    
  24. Archive Extractionで進捗が100%になるまで待つ

    pic024-a

    pic024-b

  25. rootのパスワードを設定する

    pic025

  26. Network Configuretionでネットワーク設定を行う

    pic026-a

    多くの人が設定すると思われる例を以下に記載する

    IPv4を利用するかの設定

    pic026-b


    IPv4アドレスの取得方法(DHCP or 固定)の設定

    pic026-c


    IPv6を利用するかの設定

    pic026-d


    IPv4のDNSの設定

    pic026-e

  27. TimeZoneの設定を行う
    「4 Asia」

    pic027-a


    「19 Japan」

    pic027-b


    「Yes」でEnterを押下する

    pic027-c

  28. 日時の設定を行う
    必要に応じて日付と時刻の設定を行う

    pic028-a

    pic028-b

  29. 導入するモジュールを選択する

    pic029

  30. ハードニングの設定を行う
    私が推奨する最低限の設定は以下の画像である

    pic030

  31. ユーザー設定
    後ほどグループとユーザー設定は行うので、ここでは「No」を選択してEnterを押下する

    pic031

  32. 設定に関する最終確認画面
    特に問題がなければ、「Exit」を選択してEnterを押下する

    pic032

  33. Manual Configurationで「Yes」を選択し、Enterを押下する

    pic033

  34. fstabにswapをマウントするように設定する

    # vi /etc/fstab
    =====
    # Device     Mountpoint  FStype  Options  Dump  Pass #
    /dev/nvd0p3  none        swap    sw       0     0
    =====
    
  35. 起動時にZFSを有効にする

    # sysrc zfs_enable="YES"
    
  36. 終了する

    # exit
    
  37. Rebootを行う

    pic037

■ローカルディスクから起動後の設定

  1. rootとしてログインする

    login : root
    
  2. UEFIから起動しているか確認

    # sysctl machdep.bootmethod
    machdep.bootmethod: UEFI
    
  3. sudo をインストール

    # pkg install sudo
    
  4. 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
    =====
    
  5. グループを作成する
    管理者用グループ(sysadmin)は作成しなくても良い

    # pw groupadd -n sysadmin -g 100
    # pw groupadd -n users -g 1000
    
  6. 管理者用アカウントを作成する

    # pw useradd -n {{ Username }} -g users -G wheel -G sysadmin -s /bin/tcsh -u 1000 -m -w yes
    # passwd {{ Username }}
    
  7. SSHの設定を行う

    # vi /etc/ssh/sshd_config
    =====
    -#PasswordAuthentication no
    +PasswordAuthentication yes
    =====
    
  8. IPアドレスを確認しておく

    # ifconfig
    
  9. 再起動を行う

    # shutdown -r now
    

■最低限必要と思われる設定

ここからはSSHでリモートからの設定も可能。

  1. 必要なモジュールのインストール

    $ 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
    
  2. 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
    
  3. ZFSのプールを4kセクタで作成するためにashiftの設定値を12にする

    $ echo "vfs.zfs.min_auto_ashift=12" | sudo tee -a /etc/sysctl.conf
    
  4. 【必要がある場合】SSDのTRIMを定期的に行うように設定
    以下の例では毎週日曜日の1時10分にTRIMを行う
    (zpoolに対してautotrim=onとすることもできるが、タイミングが不明なためcronの定期実行)

    $ sudo crontab -u root -e
    =====
    +10 1 * * 0 zpool trim zroot
    =====
    
  5. 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
    =====
    
  6. 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
    =====
    
  7. ipfwを有効化する

    $ sudo sysrc firewall_enable="YES"
    $ sudo sysrc firewall_logdeny="YES"
    $ sudo sysrc firewall_type="workstation"
    $ sudo sysrc firewall_script="/etc/ipfw.rules"
    
  8. ipfwのコネクションあたりの最大ログの設定を行う

    $ echo "net.inet.ip.fw.verbose_limit=5" | sudo tee -a /etc/sysctl.conf
    
  9. ipfw.rules の設定変更
    ※各自でカスタマイズしてください

    $ sudo vi /etc/ipfw.rules
    
  10. vnStatを有効化する

    $ sudo sysrc vnstat_enable="YES"
    
  11. vnStatの設定変更

    $ sudo vi /usr/local/etc/vnstat.conf
    =====
    -;Interface ""
    +Interface "{{ InterfaceName }}"
    
    -;DatabaseDir "/var/lib/vnstat"
    DatabaseDir "/usr/local/vnstat/db"
    
    -;MaxBandwidth 1000
    +MaxBandwidth 1000
    =====
    
  12. 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
    
  13. 再起動

    $ sudo shutdown -r now
    

■その他設定

●SHELLの変更

zshに変更する例。

$ sudo chsh -s /usr/local/bin/zsh {{ Username }}

●dotfiles で環境構築

clone先Pathは適宜変更のこと(dotfiles="~/.dotfiles")。

  1. github から dotfiles を clone

    $ git clone https://github.com/t-okkn/dotfiles .dotfiles
    
  2. (まだ、全自動じゃないので)設定をする

    $ cd ~/.dotfiles
    $ gmake install
    

■参考文献

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment