サイズ: 15500
コメント:
|
サイズ: 16351
コメント:
|
削除された箇所はこのように表示されます。 | 追加された箇所はこのように表示されます。 |
行 323: | 行 323: |
再度再起動を実施。 |
|
行 343: | 行 345: |
= よくある質問とその答え = == Q.なんで二回もリビルドしてるのですか? == A.いわゆる完全なクロスコンパイル環境では発生しえませんが、セルフビルド環境ではホストのバイナリが紛れ込むことがありますので、極力排除するために二回リビルドしています。 == Q./usr/bin/perl なんて今時… == A.昔作ったスクリプトや他の環境で作ったスクリプトをそのまま運用するための設定ですね。長いこと運用しているとそういうのが…。 そういう意味では `/bin/bash` についてはケアしてるケースはあまり見付かりませんね。`bash` が `/bin` にあることを前提にしている人が多いように見受けられます。 |
FreeBSD13の初期設定
FreeBSD 13.0-RELEASEをインストールしてみる。 本記述は13.0-RC1時点での内容であるが、13.0がリリースされた後、微調整する。
目次
- FreeBSD13の初期設定
-
初期設定
- /boot/loader.conf
- /etc/cron.d/ports-svn-update
- /etc/newsyslog.conf
- /etc/newsyslog.conf.d/ntp.conf
- /etc/newsyslog.conf.d/ports-svn-update.conf
- /etc/newsyslog.conf.d/sudo.conf
- /etc/periodic.conf
- /etc/rc.conf
- /etc/ssh/ssh_config
- /etc/ssh/sshd_config
- /etc/sysctl.conf
- /etc/syslog.conf
- /etc/syslog.d/daemon.conf
- /etc/syslog.d/devd.conf
- /etc/syslog.d/ntp.conf
- /etc/syslog.d/sudo.conf
- /etc/syslog.d/user.conf
- /etc/ttys
- OSのリビルド
- portsのインストール
- よくある質問とその答え
前提条件
設定目標
- 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.*: 認証システムのログ(sshd、su 他)
cron.*: cronログ(cron、at)
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関連については色々と重たい依存関係が発生している点はご容赦願いたい。
Gitコマンドについては軽量指定してる。ガチで使うなら SUBTREE オプションは有効にした方がいい。
- 積極的にOpenSSLを使用するものとし、代替ライブラリ(NETTLEやMBEDTLS等)は選択しない(選択可能なケースで)。
- 最適化はある程度選択するが、極端な最適化を求めると重たすぎるものについては無効にする(OpenMP)。
OSの展開
ベース内にGITコマンドが無いため、GitHubのSubversionサポート機能を利用してとりあえず回避する。
GitHubのSubversionサポート機能はよくエラーが発生するので、何度かトライすること。
git clone する場合はGitHub(二次配布先)からでなく、cgit.freebsd.org から取得すること。
make -j で指定している「n」は sysctl hw.cpu を実行して得た数字+1を指定することを推奨する。
ただしメモリが2GB以下の場合はn=1としておいた方が安全である(-j オプションの指定は不要)。
certctl rehash コマンドの扱いについてメモ。
- 本コマンドの実行は原則不要。
これは make installworld 中に実施される。
ただし etcupdate (mergemaster)では実行されない。
なぜ明記しているのかというと、/etc 以下に対するオペレーションなのだけど、上記2つでカバーできないケースにおいて個別に実施する必要がある。
例えばJAIL内でホスト側の /usr や /bin などのを参照しているケースで、/var や /etc をJAIL固有で持っている場合である。
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のインストール
パッケージベースで運用したいなら以後の作業は不要。
portsの展開
svnlite co svn://svn.freebsd.org/ports/head /usr/ports
mkdir -p /usr/ports/distfiles
cd /usr/ports; make index
互換設定
- サードパーティシェル(ZSH/BASH)をベースシステムと同じように扱うための設定(主にLinuxディストリビューションとの互換)。
- Perlについて同じく(こちらは気にしないケースが多いかも)。
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
よくある質問とその答え
Q.なんで二回もリビルドしてるのですか?
A.いわゆる完全なクロスコンパイル環境では発生しえませんが、セルフビルド環境ではホストのバイナリが紛れ込むことがありますので、極力排除するために二回リビルドしています。
Q./usr/bin/perl なんて今時…
A.昔作ったスクリプトや他の環境で作ったスクリプトをそのまま運用するための設定ですね。長いこと運用しているとそういうのが…。 そういう意味では /bin/bash についてはケアしてるケースはあまり見付かりませんね。bash が /bin にあることを前提にしている人が多いように見受けられます。
= 参考文献