8と9のリビジョン間の差分
2021-03-09 18:29:04時点のリビジョン8
サイズ: 10815
コメント:
2021-03-10 11:44:01時点のリビジョン9
サイズ: 13596
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 241: 行 241:
バイナリベースで運用したいなら以後の作業は不要。
行 243: 行 244:
{{{#highlight makefile {{{#!highlight makefile numbers=disable
行 253: 行 254:

# generic
行 257: 行 256:
OPTIONS_SET+= CPU_OPTS OPTIMIZED_CFLAGS
OPTIONS_SET+= LZ4 LZO LZO2 LZMA ZSTD BROTLI
OPTIONS_SET+= GMP IDN SSL SSH SSH2 PCAP ICONV SOCKS OPENSSL THREADS
OPTIONS_SET+= LZ4 LZO LZO2 LZMA ZLIB ZSTD BROTLI
OPTIONS_SET+= ASM SIMD 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 GLIB PCAP ICONV SOCKS OPENSSL THREADS
行 261: 行 263:
OPTIONS_UNSET+=  X11 CUPS GDBM TEST DEBUG TESTS
OPTINOS_UNSET+= NETTLE MBEDTLS CA_BUNDLE GPG_AGENT
OPTIONS_UNSET+= CUPS GDBM TEST DEBUG TESTS OPENMP NETTLE MBEDTLS CA_BUNDLE
OPTIONS_UNSET+=
GPG_AGENT HTMLDOCS
OPTIONS_UNSET+= AOM SDL X11 XPM XCB TRACE GCRYPT OPENGL GLESV2
行 265: 行 268:
devel_cmake_UNSET= CPACK MANPAGES
devel_git_UNSET= P4 CVS GITWEB SUBTREE
devel_glib20_SET= FAM_ALTBACKEND
devel_glib20_UNSET= MANPAGES
editors_vim-console_SET= MAKE_JOBS
security_dehydrated_UNSET= ZSH
}}}
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
ports-mgmt_portmaster_SET= BASH ZSH
security_dehydrated_UNSET= ZSH
}}}

 * `CPUTYPE`: 運用するサーバーのCPUに合わせて指定する(指定可能なCPU種別は `/usr/share/mk/bsd.cpu.mk` で定義されている)。
 * ports用のオプションについては以下でインストールする際に要求される選択肢に対して、ある程度手を打つ形で設定している。
   * X11関連は無効にする。
   * 圧縮系アルゴリズム(ライブラリやその使用)はおおよそ有効にしている。
   * ImageMagick基準で画像の取り扱いもおおよそメジャーなものは有効にしている。
   * 同じくImageMagick基準で動画の取り扱いもいくらか有効にしている。
   * ただHEIF関連については色々と重たい依存関係が発生している点はご容赦願いたい。
   * 積極的にOpenSSLを使用するものとし、代替ライブラリ(NETTLEやMBEDTLS等)は選択しない(選択可能なケースで)。
   * 最適化はある程度選択するが、極端な最適化を求めると重たすぎるものについては無効にする(OpenMP)。
行 274: 行 291:
{{{
make buildworld buildkernel
 * ※ベース内にGITコマンドが無いため、GitHubのSubversionサポート機能を利用してとりあえず回避する。
 * `git clone` する場合はGitHub(二次配布先)からでなく、`cgit.freebsd.org` から取得すること。
 * `make -j` で指定している「n」は `sysctl hw.cpu` を実行して得た数字+1を指定することを推奨する。
 * ただしメモリが2GB以下の場合はn=1としておいた方が安全である(`-j` オプションの指定は不要)。

{{{#!highlight shell numbers=disable
svnlite co https://github.com/freebsd/freebsd-src.git/branches/releng/13.0 /usr/src

cd /usr/src
make -jn buildworld buildkernel
行 282: 行 307:
ここで一旦再起動する。

{{{#!highlight shell numbers=disable
cd /usr/src
make -jn buildworld buildkernel
make installkernel installworld
}}}

FreeBSD13の初期設定

FreeBSD 13.0-RELEASEをインストールしてみる。 本記述は13.0-RC1時点での内容であるが、13.0がリリースされた後、微調整する。

前提条件

設定目標

  • TCP輻輳制御はDC-TCPを使用する。
  • 各種ログは1年間の保持を目指す。
  • またログローテーション期間はよく使う物について、月一をベースに、出力が多いサービスでは1週間または1日で切り替えるものとする。

初期設定

/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
@@ -5,6 +5,7 @@

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

 vfs.root.mountfrom="zfs:zroot"

/etc/cron.d/ports-svn-update

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

※2021年02月末日時点ではportsのGIT移行は未完了。

/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-svn-update.conf

# logfilename                   [owner:group]   mode count size when  flags [/pid_file] [sig_num]
/var/log/ports-svn-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/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-02-19 15:01:46.000000000 +0900
+++ /etc/ssh/ssh_config 2021-03-04 06:49:21.854238000 +0900
@@ -18,6 +18,14 @@
 # list of available options, their meanings and defaults, please see the
 # ssh_config(5) man page.

+Host *
+    ForwardAgent yes
+    EscapeChar none
+# 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;daemon.none;ntp.none;auth.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
  • mail.*: メールシステムのログ(sendmail 他)

  • auth.*authpriv.*: 認証システムのログ(sshdsu 他)

  • cron.*: cronログ(cronat

  • daemon.*: デーモンサービスのログ(各種)

  • ntp.*: NTPログ(ntpd

  • user.*: ユーザーレベルのログ(/etc/cron.d/ports-svn-update にて使用)

  • local2.*: 任意のアプリでのログ(sudo 他)

/etc/syslog.d/daemon.conf

daemon.*                                        /var/log/daemon.log

/etc/syslog.d/devd.conf

!devd
*.>=notice                                      /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/user.conf

user.*                                          /var/log/ports-svn-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.

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 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 GLIB PCAP ICONV SOCKS OPENSSL THREADS
OPTIONS_SET+=           PYGMENTS BACKSPACE ONIGURUMA ENCODINGS ETCSYMLINK DEFAULT_VIMRC
OPTIONS_UNSET+=         CUPS GDBM TEST DEBUG TESTS OPENMP NETTLE MBEDTLS CA_BUNDLE
OPTIONS_UNSET+=         GPG_AGENT HTMLDOCS
OPTIONS_UNSET+=         AOM SDL X11 XPM XCB TRACE GCRYPT OPENGL GLESV2

# 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
ports-mgmt_portmaster_SET=              BASH ZSH
security_dehydrated_UNSET=              ZSH
  • CPUTYPE: 運用するサーバーのCPUに合わせて指定する(指定可能なCPU種別は /usr/share/mk/bsd.cpu.mk で定義されている)。

  • ports用のオプションについては以下でインストールする際に要求される選択肢に対して、ある程度手を打つ形で設定している。
    • X11関連は無効にする。
    • 圧縮系アルゴリズム(ライブラリやその使用)はおおよそ有効にしている。
    • ImageMagick基準で画像の取り扱いもおおよそメジャーなものは有効にしている。

    • 同じくImageMagick基準で動画の取り扱いもいくらか有効にしている。

    • ただHEIF関連については色々と重たい依存関係が発生している点はご容赦願いたい。
    • 積極的にOpenSSLを使用するものとし、代替ライブラリ(NETTLEやMBEDTLS等)は選択しない(選択可能なケースで)。
    • 最適化はある程度選択するが、極端な最適化を求めると重たすぎるものについては無効にする(OpenMP)。

OSの展開

  • ※ベース内にGITコマンドが無いため、GitHubのSubversionサポート機能を利用してとりあえず回避する。

  • git clone する場合はGitHub(二次配布先)からでなく、cgit.freebsd.org から取得すること。

  • make -j で指定している「n」は sysctl hw.cpu を実行して得た数字+1を指定することを推奨する。

  • ただしメモリが2GB以下の場合はn=1としておいた方が安全である(-j オプションの指定は不要)。

svnlite co https://github.com/freebsd/freebsd-src.git/branches/releng/13.0 /usr/src

cd /usr/src
make -jn buildworld buildkernel
make installkernel installworld
certctl rehash
etcupdate
etcupdate resolve

ここで一旦再起動する。

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

portsのインストール

FreeBSD/FreeBSD13-initial-setup (最終更新日時 2021-05-19 03:55:38 更新者 NorikatsuShigemura)