= FreeBSD13の初期設定 = FreeBSD 13.0-RELEASEの初期セットアップをしてみる。 本記述は13.0ーR時点での内容であるが、13.0がリリースされた後でも調整は入る可能性がある。 初期設定にあたり [[FreeBSD/FreeBSD13-install|インストール]] 手順を踏んでる前提で記述している。 自分の環境で読み替える時に発生する差分は読み替えて欲しい。 また [[FreeBSD/FreeBSD13-freq-setup|よくある設定]] で典型的な設定をまとめてみた。 ※本ドキュメントは随時調整が入ることがあります。 <> == 設定目標 == * ログ関連 * 各種ログは1年間の保持を目指す。 * またログローテーション期間はよく使う物について、月一をベースに、出力が多いサービスでは1週間または1日で切り替えるものとする。 * SYSLOGの書式を最新のRFC5452に準拠させる。これは時刻を正確に記録したいためである。 * TCP関連 * 輻輳制御はDcTCPを使用する(デフォルトは!NewReno)。 * 合わせてECN(`Explicit Congection Notification`)を「受信のみ」から「送受信」に切り替える。 * この辺りの設定は [[https://www.janog.gr.jp/meeting/lt-night-1/download_file/view/16/1|ECN(Explicit Congestion Notification)のあるネットワーク]] を参考にしています。 * FASTOPENをサーバー(受信)でも受け付けるようにする(対応しているサービスによる)。 * SSH関連 * 公開鍵認証とKerberos(GSSAPI)認証のみを有効にし、それ以外を明示的に無効にする。 * SSHエージェントフォワードやGSSAPIデリゲーションを有効にする。 * LANG系の環境変数を引き継ぐようにする。 * よってログイン元であるターミナルにて文字種が明示されていることを期待している。 * OSデフォルトでは `C.UTF-8` になってしまうが、特に変更しない(シェルでの運用上 `LC_TIME` だけは変更する)。 * ソースコードからのコンパイル運用 * ベースシステムもパッケージシステムも全てコンパイルベースで運用するものとする(切り分けは不可能ではないはず)。 * 配布元ではCPUTYPEが指定されていないため、amd64環境では `x86-64`、i386環境では `i686` が選択されている(コンパイラデフォルト)。 * バイナリで運用するかコンパイルして運用するかについては、使用するライフタイムとメンテナンスを天秤にかけて判断すればよいかと。 = 初期設定 = == /boot/loader.conf == {{{#!highlight udiff numbers=disable --- /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 == {{{#!highlight udiff numbers=disable --- /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 == {{{#!highlight udiff numbers=disable --- /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 /etc/newsyslog.conf.d/[!.]*.conf /usr/local/etc/newsyslog.conf.d/[!.]*.conf }}} == /etc/newsyslog.conf.d/console.conf == {{{ # logfilename [owner:group] mode count size when flags [/pid_file] [sig_num] /var/log/console.log 644 12 * $M1D0 XC }}} == /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 == {{{#!highlight shell numbers=disable daily_scrub_zfs_enable="YES" daily_status_zfs_enable="YES" }}} == /etc/rc.conf == {{{#!highlight console numbers=disable sysrc syslogd_flags="-s -O rfc5424" }}} == /etc/ssh/ssh_config == {{{#!highlight udiff numbers=disable --- /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 == {{{#!highlight udiff numbers=disable --- /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 == {{{#!highlight udiff numbers=disable --- /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 == {{{#!highlight udiff numbers=disable --- /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;syslog.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 }}} * `mail.*`: メールシステムのログ(`sendmail` 他) * `auth.*`、`authpriv.*`: 認証システムのログ(`sshd`、`su` 他) * `cron.*`: cronログ(`cron`、`at`) * `console.*`: コンソールログ(と言われる何か、実際の運用では `daemon.*` と変わらなさそうな扱い) * `daemon.*`: デーモンサービスのログ(各種) * `ntp.*`: NTPログ(`ntpd`) * `syslog.*`: syslogdのログ(`syslogd`) * `user.*`: ユーザーレベルのログ(`/etc/cron.d/ports-update` にて使用) * `local2.*`: 任意のアプリでのログ(`sudo` 他) == /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 == {{{#!highlight udiff numbers=disable --- /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. }}} == 物理環境の場合の省電力設定 == {{{#!highlight console numbers=disable sysrc powerd_enable="YES" sysrc power_profile="NO" sysrc powerd_flags="-a adaptive" }}} = OSのリビルド = バイナリベースで運用したいなら以後の作業は不要。 == /etc/make.conf == {{{#!highlight makefile numbers=disable # # 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 DAV1D RAV1E 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+= GUI 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 }}} * `CPUTYPE`: 運用するサーバーの[[https://qiita.com/nanorkyo/items/e0417d8c1388750cb72c|CPUに合わせて指定]]する(指定可能なCPU種別は `/usr/share/mk/bsd.cpu.mk` で定義されている)。 * ports用のオプションについては以下でインストールする際に要求される選択肢に対して、ある程度手を打つ形で設定している。 * X11関連は無効にする。 * 圧縮系アルゴリズム(ライブラリやその使用)はおおよそ有効にしている。 * `ImageMagick`基準で画像の取り扱いもおおよそメジャーなものは有効にしている。 * 同じく`ImageMagick`基準で動画の取り扱いもいくらか有効にしている。 * ただHEIF関連については色々と重たい依存関係が発生している点はご容赦願いたい。 * gitコマンドについては軽量指定してる。ガチで使うなら `SUBTREE` オプションは有効にした方がいい。 * 積極的にOpenSSLを使用するものとし、代替ライブラリ(NETTLEやMBEDTLS等)は選択しない(選択可能なケースで)。 * 最適化はある程度選択するが、極端な最適化を求めると重たすぎるものについては無効にする(OpenMP)。 == OSの展開 == * ベース内にgitコマンドが無いため、パッケージでgitコマンドをインストールしてから各種セットアップする。 * また `git clone` する場合はGitHub等(二次配布先)からでなく、`git.freebsd.org` から取得する。もちろんGitHubでもGitLabでもどこからでも構わないが…。 * `make -j` で指定している「n」は `sysctl hw.cpu` を実行して得た数字+1を指定することを推奨する。 * ただしメモリが2GB以下の場合はn=1としておいた方が安全である(`-j` オプションの指定は不要)。 * `certctl rehash` コマンドの扱いについてメモ。 * 本コマンドの実行は原則不要。 * これは `make installworld` 中に実施される。 * ただし `etcupdate` (`mergemaster`)では実行されない。 * なぜ明記しているのかというと、`/etc` 以下に対するオペレーションなのだけど、上記2つでカバーできないケースでは、`certctl rehash` を個別に実施しないといけないケースが発生している。 * 例えばジャイル内でホスト側の `/usr` や `/bin` などのを参照しているケースで、`/var` や `/etc` をジャイル固有で持っている場合である。 {{{#!wiki note なおシャロークローンと言われる状態なので、(本家から配布されてる)他のブランチに変えることができません。 他のブランチに切り替えたいと考えている場合は `--no-single-branch` オプションも指定しておく。 }}} {{{#!highlight console numbers=disable 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 }}} ここで一旦再起動する。 {{{#!highlight console numbers=disable cd /usr/src make -jn buildworld buildkernel make installkernel installworld }}} 再度再起動を実施。 == OS展開時のコマンド指定方法とディスク容量の違い == ※`releng/13.0` ブランチを指定してクローンした場合。別ブランチの指定や時間経過により容量が変動するので参考までに。 ||<#FFFF00> コマンド ||<#FFFF00> ディスク消費容量 ||<#FFFF00> 効能 || || `git clone --depth 1` || 985MB || 最小容量ただしログは一世代のみ || || `git clone --depth 1 --no-single-branch` || 1687MB || 最小容量+ブランチ情報を持つ || || `git clone` || 2047MB || リポジトリの全てのデータ || == ブランチ切り替え == ※`--depth 1` のシャロークローン状態で別のブランチ(ここでは `releng/12.2` で検証)および切り替えてみた。 {{{#!highlight console numbers=disable 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 }}} * この時(`git fetch` 直後) `/usr/src` のディスク消費量は2GBに達した。 * つまりこの手順はあまり意味(効果)は無く、削除して再度クローンしなおした方が安全と思われる。 == オリジン名の指定 == * [[https://docs.freebsd.org/en/books/handbook/mirrors/#git|Using Git]]によれば、`git clone` 時に `-o freebsd` オプションを指定している。 * このオプションの指定はオリジンURLのエイリアス名を指定するもので、デフォルトの `origin` から `freebsd` に変えるものである。 * 具体的には `git remote -v` を実行した際にエイリアス名とURLのペアが確認できる。 * また `git branch -a` の表示結果からも効果がわかる(URLを指定しなくてよいため)。 * このエイリアス名を変更したい場合は `git remote rename 旧エイリアス名 新エイリアス名` を実行する。 * 通常の利用では特に意識する必要は無いが運用次第で変える。 * 配布先を指定する例: `-o freebsd`、`-o github`、`-o gitlab` … * フォーク元を明示したい例: `-o upstream` * よってごく単純に `/usr/src` だけとか、`/usr/ports` だけなら `-o` オプションは指定しなくてよい。 = portsのインストール = パッケージベースで運用したいなら以後の作業は不要。 == portsの展開 == {{{#!highlight console numbers=disable 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 }}} == 互換設定 == * サードパーティシェル(ZSH/BASH)をベースシステムと同じように扱うための設定(主にLinuxディストリビューションとの互換)。 * Perlについて同じく(こちらは気にしないケースが多いかも)。 {{{#!highlight console numbers=disable 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 }}} == 前提インストール == {{{#!highlight console numbers=disable 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 }}} == 共通(定番)インストール == {{{#!highlight console numbers=disable 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 === {{{#!highlight shell numbers=disable 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更新メモ ==== 本ファイルの設定は以下のオプションを付与した物と同じになる。 * `-w`: パッケージのアンインストール時に共有ライブラリを保存する。 * `-d`: 常に古いディストファイルを削除する。 * `--no-confirm`: 特に確認プロンプト無しで処理を進める(`-y` オプションとは違います)。 * `--no-term-title`: XTERM由来のタイトルバー更新機能(意外と対応している)を使用しない。 * パッケージのバックアップに失敗しても無視する。これが無いと失敗したときの挙動についてインタラクティブに問い合せてくる。 つまり下記のようにして、更新可能な全てのインストール済みパッケージをバッチ的に処理を進める。 {{{#!highlight console numbers=disable portmaster -a }}} また個別にアップデートするために `-a` の対象外にする方法として `-x` オプションを指定することが可能である。 {{{#!highlight console numbers=disable portmaster -a -x "rubygem-*" }}} これを `/usr/local/etc/portmaster.rc` に設定する場合は下記の内容を追加します。 {{{#!highlight shell numbers=disable PM_EXCL="rubygem " }}} なぜ「`rubygem-*`」が「`rubygem `」になるかは、内部動作を読むしか無いです。 下記のようにコマンドを実行して `PM_EXCL` が設定された内容を参照します。 {{{#!highlight console numbers=disable /bin/sh -x /usr/local/bin/portmaster -a -x "rubygem-*" }}} === /usr/local/etc/sudoers === {{{#!highlight udiff numbers=disable --- /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 === {{{#!highlight shell numbers=disable stty erase $(printf "\010") xtset Host: $(hostname) }}} * `xtset` コマンド(シェル関数)は `x11/xtset` ポート由来で、わざわざインストールするまでも無く自作している(その程度のプログラム)。 * XTERMタイトルバーの更新機能に対応しているターミナルでは、これの実行によりタイトルバーが変更される。 * 何か重要な作業することがあって、ターミナル毎に作業している場合、タイトルバーで区別することが可能である。 === /usr/local/etc/zshenv === {{{#!highlight shell numbers=disable PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin }}} === /usr/local/etc/zshrc === {{{#!highlight shell numbers=disable 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 }}} == 物理環境での追加インストール == * `smartmontools` はストレージのS.M.A.R.T.情報を読み取ってくれるツールである。 * 仮想化環境ではこれの読み取りができないし、読み取った意味も無いので、そのような環境ではインストール不要である。 === S.M.A.R.T. disk monitoring tools のインストール === {{{#!highlight console numbers=disable cd /usr/ports/sysutils/smartmontools && make install clean sysrc smartd_enable="YES" }}} ストレージ環境に合わせて下記(特に `/usr/local/etc/smartd.conf`)の設定を行いサーバーを再起動するか `service smartd start` で手動起動する。 === SATA環境 === * SATA接続のHDD/SSDの場合の設定例。 * 2台のストレージがつながってるとして、`/dev/ada0`、`/dev/ada1` の場合の例を示す。 * 何かしら異常を検知したら連絡する先(メールアドレス)を用意しておく。 ==== /etc/periodic.conf ==== {{{#!highlight shell numbers=disable daily_status_smart_devices="/dev/ada0 /dev/ada1" }}} ==== /usr/local/etc/smartd.conf ==== {{{ /dev/ada0 -H -m メールアドレス /dev/ada1 -H -m メールアドレス }}} * ドライバ種別は指定していないので、自動判定を行っている。 * このケース(SATA)で、なお敢えて、指定するとしたら `-d atacam` になる。 === HPE SmartArray Pシリーズ環境 === * RAIDコントローラに接続されたストレージ(HDD/SSD)の場合の設定例。 * 4台のストレージがつながってるとして、個別には `/dev/ciss0,n` (n≧0)を指定できる場合の例を示す。 * 何かしら異常を検知したら連絡する先(メールアドレス)を用意しておく。 ==== /etc/periodic.conf ==== {{{#!highlight shell numbers=disable 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 メールアドレス }}} * `-d` オプションでしている設定は `smartmontools` のドライバ名であるため、デバイス名とは違う点に注意。 == VMware環境での追加インストール == * ホスト(ESXi)とゲスト(FreeBSD)間での状態を交換するためのツールです。 * 特に、安全にVモーションするためには必須のツールです。 * `vmblock` はホストとゲスト間でのコピー&ペーストを実現するためのドライバです。 * X11上でしかコピペできない(コンソール相手にはできない)ため明示的に無効にしています。 === /etc/make.conf === {{{#!highlight makefile numbers=disable emulators_open-vm-tools_UNSET= DOCS FUSE LIBNOTIFY }}} === The Open Virtual Machine Tools のインストール === {{{#!highlight console numbers=disable 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)。 {{{#!highlight console numbers=disable service vmware-kmod start service vmware-guestd start }}} = よくある質問とその答え = == Q.なんで二回もリビルドしてるのですか? == A.いわゆる完全なクロスコンパイル環境では発生しえませんが、セルフビルド環境ではホストのバイナリが紛れ込むことがあるため、それを排除するために二回リビルドしています。 <
> なので以後のリビルドは一回で十分です。もちろんCPUを変更したり、メジャーバージョンアップするなら二回リビルドした方が良いです。 究極的には [[https://www.archive.ece.cmu.edu/~ganger/712.fall02/papers/p761-thompson.pdf|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アーキテクチャは把握しておいた方がいいです。 = 参考文献 = * [[https://qiita.com/nanorkyo/items/e0417d8c1388750cb72c|FreeBSDでのCPUTYPEの指定方法]] * [[https://qiita.com/nanorkyo/items/a0068cafcf9112ebbb7b|Ports System における OPTIONS_SET/OPTIONS_UNSET/NO_DIALOG の活用方法]] * [[https://qiita.com/nanorkyo/items/451d1a3fda704601a14a|Ports System における公式 OPTIONS のリスト]] * [[https://github.com/bsdimp/freebsd-git-docs/blob/main/mini-primer.md|FreeBSD mini-git Primer]] * [[https://github.com/bsdimp/freebsd-git-docs/blob/main/URLs.md|Important URLs of the FreeBSD Git Infrastructure]] * [[https://www.janog.gr.jp/meeting/lt-night-1/download_file/view/16/1|ECN(Explicit Congestion Notification)のあるネットワーク]] * [[https://www.janog.gr.jp/meeting/janog41/program/sp9tcp|TCP輻輳制御技術動向]] * [[https://www.archive.ece.cmu.edu/~ganger/712.fall02/papers/p761-thompson.pdf|Thompson hack]]