FreeBSD13の初期設定

FreeBSD 13.0-RELEASEの初期セットアップをしてみる。 本記述は13.0ーR時点での内容であるが、13.0がリリースされた後でも調整は入る可能性がある。

初期設定にあたり インストール 手順を踏んでる前提で記述している。 自分の環境で読み替える時に発生する差分は読み替えて欲しい。 また よくある設定 で典型的な設定をまとめてみた。

※本ドキュメントは随時調整が入ることがあります。

Contents

  1. FreeBSD13の初期設定
    1. 設定目標
  2. 初期設定
    1. /boot/loader.conf
    2. /etc/cron.d/ports-update
    3. /etc/login.conf
    4. /etc/newsyslog.conf
    5. /etc/newsyslog.conf.d/ntp.conf
    6. /etc/newsyslog.conf.d/ports-update.conf
    7. /etc/newsyslog.conf.d/sudo.conf
    8. /etc/newsyslog.conf.d/syslogd.conf
    9. /etc/periodic.conf
    10. /etc/rc.conf
    11. /etc/ssh/ssh_config
    12. /etc/ssh/sshd_config
    13. /etc/sysctl.conf
    14. /etc/syslog.conf
    15. /etc/syslog.d/console.conf
    16. /etc/syslog.d/daemon.conf
    17. /etc/syslog.d/devd.conf
    18. /etc/syslog.d/ntp.conf
    19. /etc/syslog.d/sudo.conf
    20. /etc/syslog.d/syslog.conf
    21. /etc/syslog.d/user.conf
    22. /etc/ttys
    23. 物理環境の場合の省電力設定
  3. OSのリビルド
    1. /etc/make.conf
    2. OSの展開
    3. OS展開時のコマンド指定方法とディスク容量の違い
    4. ブランチ切り替え
    5. オリジン名の指定
  4. portsのインストール
    1. portsの展開
    2. 互換設定
    3. 前提インストール
      1. /usr/local/etc/ports.conf
    4. 共通(定番)インストール
      1. /usr/local/etc/portmaster.rc
      2. /usr/local/etc/sudoers
      3. /usr/local/etc/zlogin
      4. /usr/local/etc/zshenv
      5. /usr/local/etc/zshrc
    5. 物理環境での追加インストール
      1. S.M.A.R.T. disk monitoring tools のインストール
      2. SATA環境
      3. HPE SmartArray Pシリーズ環境
    6. VMware環境での追加インストール
      1. /etc/make.conf
      2. The Open Virtual Machine Tools のインストール
      3. 手動立ち上げ
  5. よくある質問とその答え
    1. Q.なんで二回もリビルドしてるのですか?
    2. Q./usr/bin/perl なんて今時…
    3. Q.CPUTYPEなんてnativeを指定しておけば良きに計らってくれるんでね?
  6. 参考文献

設定目標

初期設定

/boot/loader.conf

--- /boot/loader.conf.orig      2021-02-25 04:30:48.435918000 +0900
+++ /boot/loader.conf   2021-02-25 07:03:15.844423000 +0900
@@ -6,6 +6,7 @@

 zfs_load="YES"
 nullfs_load="YES"
+cc_dctcp_load="YES"
 geom_eli_load="YES"

 vfs.root.mountfrom="zfs:zroot"

/etc/cron.d/ports-update

#minute hour    mday    month   wday    who             command
0       0       *       *       *       root            cd /usr/ports && sleep $(jot -r 1 0 86400) && (git pull && make index ) | logger -p user.notice -t ports-update 2>&1

/etc/login.conf

--- /etc/login.conf.orig        2021-03-05 16:10:22.000000000 +0900
+++ /etc/login.conf     2021-03-13 21:48:59.740931000 +0900
@@ -48,8 +48,7 @@
        :priority=0:\
        :ignoretime@:\
        :umask=022:\
-       :charset=UTF-8:\
-       :lang=C.UTF-8:
+       :charset=UTF-8:

 #
 # A collection of common class names - forward them all to 'default'

この変更実施後 cap_mkdb /etc/login.conf を実行すること。

/etc/newsyslog.conf

--- /etc/newsyslog.conf.orig    2021-02-19 15:05:34.000000000 +0900
+++ /etc/newsyslog.conf 2021-03-04 06:43:50.764180000 +0900
@@ -16,21 +16,21 @@
 #
 # logfilename          [owner:group]    mode count size when  flags [/pid_file] [sig_num]
 /var/log/all.log                       600  7     *    @T00  J
-/var/log/auth.log                      600  7     1000 @0101T JC
+/var/log/auth.log                      600  12    *    $M1D0 XC
 /var/log/console.log                   600  5     1000 *     J
-/var/log/cron                          600  3     1000 *     JC
+/var/log/cron                          600  12    *    $M1D0 XC
 /var/log/daily.log                     640  7     *    @T00  JN
 /var/log/debug.log                     600  7     1000 *     JC
 /var/log/init.log                      644  3     1000 *     J
 /var/log/kerberos.log                  600  7     1000 *     J
-/var/log/maillog                       640  7     *    @T00  JC
-/var/log/messages                      644  5     1000 @0101T JC
+/var/log/maillog                       640  12    *    $M1D0 XC
+/var/log/messages                      644  12    1000 $M1D0 XC
 /var/log/monthly.log                   640  12    *    $M1D0 JN
 /var/log/devd.log                      644  3     1000 *     JC
-/var/log/security                      600  10    1000 *     JC
+/var/log/security                      600  53    *    $W0D0 XC
 /var/log/utx.log                       644  3     *    @01T05 B
 /var/log/weekly.log                    640  5     *    $W6D0 JN
-/var/log/daemon.log                    644  5     1000 @0101T JC
+/var/log/daemon.log                    644  12    *    $M1D0 XC

 <include> /etc/newsyslog.conf.d/[!.]*.conf
 <include> /usr/local/etc/newsyslog.conf.d/[!.]*.conf

/etc/newsyslog.conf.d/ntp.conf

# logfilename           [owner:group]   mode count size when  flags [/pid_file] [sig_num]
/var/log/ntp.log                        644  12    *    $M1D0 XC

/etc/newsyslog.conf.d/ports-update.conf

# logfilename                   [owner:group]   mode count size when  flags [/pid_file] [sig_num]
/var/log/ports-update.log                       644  12    *    $M1D0 XC

/etc/newsyslog.conf.d/sudo.conf

# logfilename           [owner:group]   mode count size when  flags [/pid_file] [sig_num]
/var/log/sudo.log                       644  12    *    $M1D0 XC

/etc/newsyslog.conf.d/syslogd.conf

# logfilename           [owner:group]   mode count size when  flags [/pid_file] [sig_num]
/var/log/syslogd.log                    644  12    *    $M1D0 XC

/etc/periodic.conf

daily_scrub_zfs_enable="YES"
daily_status_zfs_enable="YES"

/etc/rc.conf

sysrc syslogd_flags="-s -O rfc5424"

/etc/ssh/ssh_config

--- /etc/ssh/ssh_config.orig    2021-03-05 16:08:20.000000000 +0900
+++ /etc/ssh/ssh_config 2021-03-13 00:48:59.419630000 +0900
@@ -18,6 +18,16 @@
 # list of available options, their meanings and defaults, please see the
 # ssh_config(5) man page.

+Host *
+    ForwardAgent yes
+    EscapeChar none
+    GSSAPIAuthentication yes
+    GSSAPIDelegateCredentials yes
+# Send locale-related environment variables
+    SendEnv LANG LANGUAGE LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
+    SendEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
+    SendEnv LC_IDENTIFICATION LC_ALL
+
 # Host *
 #   ForwardAgent no
 #   ForwardX11 no

/etc/ssh/sshd_config

--- /etc/ssh/sshd_config.orig   2021-02-25 04:46:53.081176000 +0900
+++ /etc/ssh/sshd_config        2021-03-04 06:50:09.275221000 +0900
@@ -85,6 +85,11 @@
 # and ChallengeResponseAuthentication to 'no'.
 #UsePAM yes

+# Accept locale-related environment variables
+AcceptEnv LANG LANGUAGE LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
+AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
+AcceptEnv LC_IDENTIFICATION LC_ALL
+
 #AllowAgentForwarding yes
 #AllowTcpForwarding yes
 #GatewayPorts no

/etc/sysctl.conf

--- /etc/sysctl.conf.orig       2021-02-19 15:00:35.000000000 +0900
+++ /etc/sysctl.conf    2021-03-09 13:17:58.158067000 +0900
@@ -7,3 +7,12 @@
 # Uncomment this to prevent users from seeing information about processes that
 # are being run under another UID.
 #security.bsd.see_other_uids=0
+
+net.inet.tcp.cc.algorithm=dctcp
+net.inet.tcp.ecn.enable=1
+#et.inet.tcp.fastopen.client_enable=1
+net.inet.tcp.fastopen.server_enable=1
+net.inet.tcp.nolocaltimewait=1
+
+kern.ipc.maxsockbuf=16777216
+kern.ipc.shm_use_phys=1

/etc/syslog.conf

--- /etc/syslog.conf.orig       2021-02-19 15:05:41.000000000 +0900
+++ /etc/syslog.conf    2021-03-09 13:31:41.455039000 +0900
@@ -5,10 +5,10 @@
 #      separators. If you are sharing this file between systems, you
 #      may want to use only tabs as field separators here.
 #      Consult the syslog.conf(5) manpage.
-*.err;kern.warning;auth.notice;mail.crit               /dev/console
-*.notice;authpriv.none;kern.debug;lpr.info;mail.crit;news.err  /var/log/messages
+*.err;kern.warning;auth.none;mail.none;user.none;ntp.none              /dev/console
+*.*;authpriv.none;kern.debug;lpr.info;mail.none;news.err;cron.none;console.none;daemon.none;ntp.none;auth.none;syslog.none;user.none;local2.none        /var/log/messages
 security.*                                     /var/log/security
-auth.info;authpriv.info                                /var/log/auth.log
+auth.*;authpriv.*                              /var/log/auth.log
 mail.info                                      /var/log/maillog
 cron.*                                         /var/log/cron
 !-devd

/etc/syslog.d/console.conf

console.*                                       /var/log/console.log

/etc/syslog.d/daemon.conf

daemon.*                                        /var/log/daemon.log

/etc/syslog.d/devd.conf

!devd
*.*                                             /var/log/devd.log

/etc/syslog.d/ntp.conf

ntp.*                                           /var/log/ntp.log

/etc/syslog.d/sudo.conf

local2.*                                        /var/log/sudo.log

/etc/syslog.d/syslog.conf

syslog.*                                        /var/log/syslogd.log

/etc/syslog.d/user.conf

!-devd
user.*                                          /var/log/ports-update.log

/etc/ttys

--- /etc/ttys.orig      2021-02-19 15:00:30.000000000 +0900
+++ /etc/ttys   2021-03-09 10:00:54.967135000 +0900
@@ -31,13 +31,13 @@
 #
 ttyv0  "/usr/libexec/getty Pc"         xterm   onifexists secure
 # Virtual terminals
-ttyv1  "/usr/libexec/getty Pc"         xterm   onifexists secure
-ttyv2  "/usr/libexec/getty Pc"         xterm   onifexists secure
-ttyv3  "/usr/libexec/getty Pc"         xterm   onifexists secure
-ttyv4  "/usr/libexec/getty Pc"         xterm   onifexists secure
-ttyv5  "/usr/libexec/getty Pc"         xterm   onifexists secure
-ttyv6  "/usr/libexec/getty Pc"         xterm   onifexists secure
-ttyv7  "/usr/libexec/getty Pc"         xterm   onifexists secure
+ttyv1  "/usr/libexec/getty Pc"         xterm   off secure
+ttyv2  "/usr/libexec/getty Pc"         xterm   off secure
+ttyv3  "/usr/libexec/getty Pc"         xterm   off secure
+ttyv4  "/usr/libexec/getty Pc"         xterm   off secure
+ttyv5  "/usr/libexec/getty Pc"         xterm   off secure
+ttyv6  "/usr/libexec/getty Pc"         xterm   off secure
+ttyv7  "/usr/libexec/getty Pc"         xterm   off secure
 ttyv8  "/usr/local/bin/xdm -nodaemon"  xterm   off secure
 # Serial terminals
 # The 'dialup' keyword identifies dialin lines to login, fingerd etc.

物理環境の場合の省電力設定

sysrc powerd_enable="YES"
sysrc power_profile="NO"
sysrc powerd_flags="-a adaptive"

OSのリビルド

バイナリベースで運用したいなら以後の作業は不要。

/etc/make.conf

#
# System Dependent Configurations
#
CPUTYPE?=               cascadelake
KERNCONF?=              GENERIC

#
# Package/Ports Dependent Configurations
#
OPTIONS_SET+=           ZSH BASH
OPTIONS_SET+=           NLS DOCS IPV6 EXAMPLES
OPTIONS_SET+=           LZ4 LZO LZO2 LZMA ZLIB ZSTD BROTLI
OPTIONS_SET+=           ASM SIMD SSE2 CPU_OPTS OPTIMIZED_FLAGS OPTIMIZED_CFLAGS
OPTIONS_SET+=           X265 SVTHEVC VMAF HI8P HI10P HI12P
OPTIONS_SET+=           X3F RPIRAW JPEGICC TIFFICC LIBDE265 IMAGEMAGICK7
OPTIONS_SET+=           PNG APNG HEIF JPEG TIFF RAQM LCMS2 JASPER WEBP FREETYPE FONTCONFIG
OPTIONS_SET+=           GMP ICU IDN SSL SSH SSH2 DTRACE GLIB PCAP ICONV SOCKS OPENSSL THREADS
OPTIONS_SET+=           PYGMENTS BACKSPACE ONIGURUMA ENCODINGS ETCSYMLINK DEFAULT_VIMRC
OPTIONS_SET+=           GSSAPI_BASE
OPTIONS_UNSET+=         CUPS GDBM TEST DEBUG TESTS GNUTLS NETTLE MBEDTLS OPENMP CA_BUNDLE
OPTIONS_UNSET+=         GPG_AGENT HTMLDOCS GSSAPI_HEIMDAL GSSAPI_MIT GSSAPI_NONE
OPTIONS_UNSET+=         AOM SDL X11 XPM XCB TRACE GCRYPT OPENGL GLESV2 STATIC

# per port
devel_cmake_UNSET=                      CPACK MANPAGES
devel_git_UNSET=                        P4 CVS GITWEB SUBTREE
devel_glib20_SET=                       FAM_ALTBACKEND
devel_glib20_UNSET=                     MANPAGES
devel_oniguruma_UNSET=                  STATISTICS
devel_py-yaml_SET=                      LIBYAML
dns_bind-tools_SET=                     MANPAGES
editors_vim-console_SET=                MAKE_JOBS
lang_tcl86_UNSET=                       TCLMAN TZDATA
ports-mgmt_portmaster_SET=              BASH ZSH
security_dehydrated_UNSET=              ZSH
security_sudo_UNSET=                    GSSAPI_BASE

OSの展開

なおシャロークローンと言われる状態なので、(本家から配布されてる)他のブランチに変えることができません。 他のブランチに切り替えたいと考えている場合は --no-single-branch オプションも指定しておく。

pkg install -y git

git clone -b releng/13.0 --depth 1 https://git.freebsd.org/src.git /usr/src

cd /usr/src
git config pull.ff only

make -jn buildworld buildkernel
make installkernel installworld
certctl rehash
etcupdate
etcupdate resolve

ここで一旦再起動する。

cd /usr/src
make -jn buildworld buildkernel
make installkernel installworld

再度再起動を実施。

OS展開時のコマンド指定方法とディスク容量の違い

releng/13.0 ブランチを指定してクローンした場合。別ブランチの指定や時間経過により容量が変動するので参考までに。

コマンド

ディスク消費容量

効能

git clone --depth 1

985MB

最小容量ただしログは一世代のみ

git clone --depth 1 --no-single-branch

1687MB

最小容量+ブランチ情報を持つ

git clone

2047MB

リポジトリの全てのデータ

ブランチ切り替え

--depth 1 のシャロークローン状態で別のブランチ(ここでは releng/12.2 で検証)および切り替えてみた。

cd /usr/src
git config --add remote.origin.fetch "+refs/heads/releng/12.2:refs/remotes/origin/releng/12.2"
git fetch
git branch releng/12.2 remotes/origin/releng/12.2
git checkout releng/12.2

オリジン名の指定

portsのインストール

パッケージベースで運用したいなら以後の作業は不要。

portsの展開

git clone --depth 1 https://git.freebsd.org/ports.git /usr/ports
cd /usr/ports
git config pull.ff only

pkg delete -ayf
rm /var/db/pkg/*

mkdir -p /usr/ports/distfiles
cd /usr/ports; make index

互換設定

ln -s /usr/local/bin/zsh  /bin/zsh
ln -s /usr/local/bin/bash /bin/bash
ln -s /usr/local/bin/perl /usr/bin/perl

前提インストール

cd /usr/ports/ports-mgmt/dialog4ports && make install clean
cd /usr/ports/ports-mgmt/portconf     && make install clean

/usr/local/etc/ports.conf

databases/db5:                  NO_DIALOG=yes
databases/sqlite3:              NO_DIALOG=yes
devel/apr1:                     NO_DIALOG=yes
devel/git:                      NO_DIALOG=yes
devel/m4:                       NO_DIALOG=yes
devel/pcre*:                    NO_DIALOG=yes
devel/py-Jinja2:                NO_DIALOG=yes
devel/subversion:               NO_DIALOG=yes
dns/bind-tools:                 NO_DIALOG=yes
ftp/curl:                       NO_DIALOG=yes
lang/perl5.*:                   NO_DIALOG=yes
lang/python*:                   NO_DIALOG=yes
net/rsync:                      NO_DIALOG=yes
security/p5-Authen-SASL:        NO_DIALOG=yes
security/p5-GSSAPI:             NO_DIALOG=yes
security/sudo:                  NO_DIALOG=yes
shells/bash:                    NO_DIALOG=yes
shells/zsh:                     NO_DIALOG=yes
sysutils/tmux*:                 NO_DIALOG=yes
textproc/libxml2:               NO_DIALOG=yes
textproc/py-snowballstemmer:    NO_DIALOG=yes
www/serf:                       NO_DIALOG=yes

共通(定番)インストール

cd /usr/ports/shells/zsh             && make install clean
cd /usr/ports/shells/bash            && make install clean
cd /usr/ports/japanese/less          && make install clean
cd /usr/ports/japanese/nkf           && make install clean
cd /usr/ports/sysutils/lsof          && make install clean
cd /usr/ports/sysutils/topless       && make install clean
cd /usr/ports/sysutils/zfs-stats     && make install clean
cd /usr/ports/ports-mgmt/portmaster  && make install clean
cd /usr/ports/security/makepasswd    && make install clean
cd /usr/ports/dns/bind-tools         && make install clean
cd /usr/ports/devel/subversion       && make install clean
cd /usr/ports/devel/git              && make install clean
cd /usr/ports/sysutils/tmux          && make install clean
cd /usr/ports/net/rsync              && make install clean
cd /usr/ports/editors/vim-console    && make install clean
cd /usr/ports/security/sudo          && make install clean
cd /usr/ports/security/dehydrated    && make install clean
cd /usr/ports/security/testssl.sh    && make install clean

/usr/local/etc/portmaster.rc

SAVE_SHARED=wopt
ALWAYS_SCRUB_DISTFILES=dopt
PM_NO_CONFIRM=pm_no_confirm
PM_NO_TERM_TITLE=pm_no_term_title
PM_IGNORE_FAILED_BACKUP_PACKAGE=pm_ignore_failed_backup_package

ports更新メモ

本ファイルの設定は以下のオプションを付与した物と同じになる。

つまり下記のようにして、更新可能な全てのインストール済みパッケージをバッチ的に処理を進める。

portmaster -a

また個別にアップデートするために -a の対象外にする方法として -x オプションを指定することが可能である。

portmaster -a -x "rubygem-*"

これを /usr/local/etc/portmaster.rc に設定する場合は下記の内容を追加します。

PM_EXCL="rubygem "

なぜ「rubygem-*」が「rubygem 」になるかは、内部動作を読むしか無いです。 下記のようにコマンドを実行して PM_EXCL が設定された内容を参照します。

/bin/sh -x /usr/local/bin/portmaster -a -x "rubygem-*"

/usr/local/etc/sudoers

--- /usr/local/etc/sudoers.orig 2021-03-12 03:12:25.197155000 +0900
+++ /usr/local/etc/sudoers      2021-03-12 14:32:30.719682000 +0900
@@ -77,6 +77,9 @@
 # Defaults!/usr/local/bin/sudoreplay !log_output
 # Defaults!REBOOT !log_output

+# Allow ssh commands with ssh-agent
+Defaults env_keep += "SSH_CLIENT SSH_CONNECTION SSH_TTY SSH_AUTH_SOCK"
+
 ##
 ## Runas alias specification
 ##
@@ -90,7 +93,7 @@
 # %wheel ALL=(ALL) ALL

 ## Same thing without a password
-# %wheel ALL=(ALL) NOPASSWD: ALL
+%wheel ALL=(ALL) NOPASSWD: ALL

 ## Uncomment to allow members of group sudo to execute any command
 # %sudo        ALL=(ALL) ALL

/usr/local/etc/zlogin

stty erase $(printf "\010")
xtset Host: $(hostname)

/usr/local/etc/zshenv

PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin

/usr/local/etc/zshrc

bindkey -e
autoload compinit
compinit

alias ls="ls -lwF"
alias vi=vim

unset zle_bracketed_paste

export  LC_TIME=C
export  LESS=-FRX
export  PAGER=jless
export  EDITOR=vim
prompt='%h %n@%m%(#.#.$) '

xtset () { printf "\033]1;%s\007\033]2;%s\007" "${*}" "${*}" }

[ -f /usr/local/bin/aws_zsh_completer.sh ] && source /usr/local/bin/aws_zsh_completer.sh

物理環境での追加インストール

S.M.A.R.T. disk monitoring tools のインストール

cd /usr/ports/sysutils/smartmontools && make install clean
sysrc smartd_enable="YES"

ストレージ環境に合わせて下記(特に /usr/local/etc/smartd.conf)の設定を行いサーバーを再起動するか service smartd start で手動起動する。

SATA環境

/etc/periodic.conf

daily_status_smart_devices="/dev/ada0 /dev/ada1"

/usr/local/etc/smartd.conf

/dev/ada0 -H -m メールアドレス
/dev/ada1 -H -m メールアドレス

HPE SmartArray Pシリーズ環境

/etc/periodic.conf

daily_status_smart_devices="/dev/ciss0,0 /dev/ciss0,1 /dev/ciss0,2 /dev/ciss0,3"

/usr/local/etc/smartd.conf

/dev/ciss0 -d cciss,0 -H -m メールアドレス
/dev/ciss0 -d cciss,1 -H -m メールアドレス
/dev/ciss0 -d cciss,2 -H -m メールアドレス
/dev/ciss0 -d cciss,3 -H -m メールアドレス

VMware環境での追加インストール

/etc/make.conf

emulators_open-vm-tools_UNSET=          DOCS FUSE LIBNOTIFY

The Open Virtual Machine Tools のインストール

cd /usr/ports/emulators/open-vm-tools && make install clean
sysrc vmware_guest_vmblock_enable="NO"
echo 'rc_quiet="YES"' > /etc/rc.conf.d/vmware_guest_vmblock

手動立ち上げ

※再起動すれば自動的に立ち上がるようになっています(デフォルトON)。

service vmware-kmod start
service vmware-guestd start

よくある質問とその答え

Q.なんで二回もリビルドしてるのですか?

A.いわゆる完全なクロスコンパイル環境では発生しえませんが、セルフビルド環境ではホストのバイナリが紛れ込むことがあるため、それを排除するために二回リビルドしています。
なので以後のリビルドは一回で十分です。もちろんCPUを変更したり、メジャーバージョンアップするなら二回リビルドした方が良いです。

究極的には Thompson hack の話を無視できないので、どこまでを許容するかという話になります。

Q./usr/bin/perl なんて今時…

A.昔作ったスクリプトや他の環境で作ったスクリプトをそのまま運用するための設定ですね。長いこと運用しているとそういうのが…。
そういう意味では /bin/bash の類いはケア(/usr/local/bin/bash でもOKなように)してるケースはあまり見かけませんね。
bash/bin にあることを前提にしている人が多いように見受けられます。

Q.CPUTYPEなんてnativeを指定しておけば良きに計らってくれるんでね?

A.その通り。ではない(どっち?)。単純にコンパイルするという観点で言えばコンパイラがCPUを自動判定して最適化してくれます。
しかしビルドシステム(bsd.cpu.mk)ではランタイムに判定していないので、各種CPU拡張機能が未対応として処理が進みます。
CPUのことを何も考えてないアプリであればコンパイラが良き(SIMDエンジン使用するなど)に計らってくれますが、
CPUに応じて最適化の選択ができるアプリ(数値演算ライブラリ等)では、適切な選択が行われず、CPU拡張機能を使用してくれない場合があります。

もう一つ、最初に設定した時は native で良きに計らってくれても良いけど、後になってどのCPU向けであったか分からなくなることがあります。
そのことも踏まえて、自分が使用しているシステムのCPUアーキテクチャは把握しておいた方がいいです。

参考文献

FreeBSD/FreeBSD13-initial-setup (last edited 2021-05-07 16:49:22 by NorikatsuShigemura)