FreeBSD Tips: Difference between revisions

no edit summary
No edit summary
No edit summary
 
(236 intermediate revisions by the same user not shown)
Line 1: Line 1:
*ethernetのmedia typeを明示的に設定
何故だか flow control が off になっていたので調べた
https://gihyo.jp/admin/clip/01/fdt/201104/08
http://www.jp.freebsd.org/QandA/HTML/2460.html
*ntpdで警告
<syntaxhighlight lang="text" enclose="div">
leapsecond file ('/var/db/ntpd.leap-seconds.list'): expired 19 days ago
</syntaxhighlight>
<syntaxhighlight lang="bash" enclose="div">
service ntpd fetch
fetch: https://www.ietf.org/timezones/data/leap-seconds.list: Not Found
</syntaxhighlight>
あらら...
/etc/rc.conf に
<syntaxhighlight lang="text" enclose="div">
ntp_leapfile_sources="https://data.iana.org/time-zones/data/leap-seconds.list"
</syntaxhighlight>
追加して、オッケー
*FreeBSD リハビリwメモ
やってみたらやっぱりそうだったw
<syntaxhighlight lang="bash" enclose="div">
protect -dip 1
</syntaxhighlight>
*FreeBSD リハビリwメモ
FreeBSD-EN-23:19.pkgbase
をソースからやると make packages でこける。KERNCONF=foo を指定している場合は、make packages KERNCONF=foo
あと ports からいれた モジュールはこけるので、make.conf から PORTS_MODULES を外しておく。
あぁそうか素カーネルでないと意味ないな。とりあえず作っておくか...
*MacBook6,1 (13-Inch, Late 2009) unibody polycarbonate white 再生計画 その8
14.0-p1 が安定して稼働してるので、このハードウェアにあった設定を見直していたら、以前放置していた iSight がサックリ稼働した。
<syntaxhighlight lang="bash" enclose="div">
portmaster multimedia/libuvc multimedia/webcamd
</syntaxhighlight>
<syntaxhighlight lang="conf" enclose="div">
webcamd_enable="YES"
webcamd_0_flags="-d ugen1.2"
</syntaxhighlight>
後は、/dev/video0 /dev/usb/1.2.* 等のパーミッションを devfs.conf でごにょごにょ か operator webcamd の group に所属。
よい機会なので Autoloading module は loader.conf で明示的に _load="YES" にした。
*FreeBSD リハビリwメモ
FreeBSD 14.0 が出たので 13.2-p5 から、古式ゆかしくソースから upgrade した。いろいろハマり所があったのでメモ。
'''この作業をする前に、あらゆる ports で入れたものを rc.conf で OFF にする。(ここ重要。base system が提供しているライブラリとの不整合等があるので upgrade して make delete-old-libs 後に確認する事)'''
'''(network系 daemon で crash (kernel panic) する。avahi-daemon は駄目っぽい。gdb がライブラリ不整合にハマっているので解析は後でする)'''
make buildworld, make kernel した後 reboot していったん single user mode で起動。ここで あらゆる filesystem に対して full-fsck する事。
(結構壊れている場合があり、それが問題を起こすパターンもあるらしい)
その single user で etcupdate -p して make installworld した後 reboot してまた single user mode で起動。もう一度 make kernel する。
(13.2 の libc のバージョンが古くて、最初の kernel をビルドする時に __cxa_thread_call_dtors: dtr 0xXXXXXX from unloaded dso, skipping のワーニングが出ていて気持ち悪いので、installworld 後に、改めて make kernel する)('''実際のところ、この場合も __cxa_thread_call_dtors が出た。(下にも書いたが)delete-old の後に、もう一度 make world して解消。''')
etcupdate -B で「コンフリクトしてるから駄目よ」と言われたら、とりあえず h -> mf で古いのを生かす。(/etc/group と /etc/master.passwd)(先頭のコメント行が不要になるので、あとで手修正する)('''root の shell が (t)csh から sh に変更されたのに注意。スパルタンな仕様に戻ったw これも大きな仕様変更かも''')、これがおわったらいよいよ reboot して multi user mode に突入。(root の login shell を /bin/sh にしてからいろんな作業をすべきなのかもね)
無事 マルチユーザーモードで上がってきたら check-old delete-old check-old-libs delete-old-libs (最後に check-old-dirs delete-old-dirs)
('''delete-old して、root の login shell を /bin/sh にした後 stage1, stage2 みたいに、2回目の天地創造wしたら __cxa_thread_call_dtors のワーニングが消えた。これからが本当の地獄^h^h世界だw''')
新しい世界wで、あらゆる ports の update する。(最初に pkg bootstrap -r)
kernel driver 関連でこの修正に対応できていないのは自分でなんとかするw ('''__cxa_thread_call_dtors のワーニングが消えた状態では、互換機能が動くのでなにもしないでヨシ''')
https://reviews.freebsd.org/rG2a99dd30dfaac98fea79f084b3a13c45199e1348
'''portsnap が削除された。'''git 使えてか...
<syntaxhighlight lang="bash" enclose="div">
git clone https://git.FreeBSD.org/ports.git /usr/ports
</syntaxhighlight>
やたらとバイナリーパッケージ推しになってるが、無視して老人会モードで逝くw (油断してたら、せっせと手インストールした ports かなりの数が消されてしまったw)
git pull のあと make index がいるのかね。fetchindex はまだ動作するね
<syntaxhighlight lang="bash" enclose="div">
cd /usr/ports
make fetchindex
</syntaxhighlight>
('''__cxa_thread_call_dtors のワーニングが消えた状態になったら''')過去にインストールした ports すべての再インストールが必須。 (portmaster の man page から)
('''最低限 /usr/local/etc のバックアップしておくこと。/usr/ports/distfiles 以下のソースもとっておく方がトラフィック削減でベター''')
<syntaxhighlight lang="bash" enclose="div">
cd /usr/ports/ports-mgmt/portmaster
make install clean
portmaster --list-origins > ~/installed-port-list
cd /usr/ports
git pull
portmaster -ty --clean-distfiles
portmaster -Faf
pkg delete -afy
rm -rf /usr/local/lib/compat/pkg
# Back up any files in /usr/local you wish to save,
# such as configuration files in /usr/local/etc
# Manually check /usr/local and /var/db/pkg
# to make sure that they are really empty
# Install ports-mgmt/pkg and then ports-mgmt/portmaster.
cd /usr/ports/ports-mgmt/pkg
make install clean
cd /usr/ports/ports-mgmt/portmaster
make install clean
# Remove both from ~/installed-port-list.
# もし独自のパッチがある場合はそれも確認。
portmaster --no-confirm `cat ~/installed-port-list`
</syntaxhighlight>
(ports-mgmt/portmaster devel/git devel/ccache devel/gdb sysutils/screen security/sudo sysutils/htop sysutils/topless devel/dbus sysutils/powerdxx sysutils/smartmontools)
これだけは先にインストールする。(今、(ccacheはいれたが)これを忘れて長時間の再ビルド中...最低でも screen は再インストールしておくべきだったと。何かあったときに attach できないおそれがw)
'''kernel panic は ieee80211 あたりだとわかった。(avahi を疑っていたのだが、deny-interfaces=wlan0 したらサックリ動く)(ieee80211_crypto_ccmp.c 辺り) MacBook用wの bwn は 13.x では超安定してたのだが 14.0 では不安定。何でだろ〜^3 いろいろ調べたら、いろんな ieee 802.11 系で同じ症状らしい。まぁ昔から FreeBSD は Wi-Fi(NFSもw) には冷淡だし...'''
(自分の環境は wlan に依存した構成になっているので、もう少し頑張る...)(修正がはいらないと駄目っぽいので、手持ちのOpenWrt機器のWi-Fi bridge経由でアクセスするか...)
(手持ちの Ralink MT7601U で試してみるが、ieee80211_crypto_ccmp 辺りで落ちているのなら同じかもね->ドライバーが無かった。実験中のドライバーはあるが...)
(まだブラックフライデー対応してたので、動きそうな古めのUSB Wi-Fiアダプターをいくつか買った。届いてからテストする)
tp-link TL-WN725N (Realtek RTL8188EU) が届いて、サックリ安定して動きました!!!! (if_rtwn_usb_load="YES"  rtwn-rtl8188eufw_load="YES")
(country=JP してるのだが、変わってない希ガス)(ports の security/wpa_supplicant 使えば JP を認識した。これいろいろヤバいかもね。)
最低限のカスタマイズ .shrc
<syntaxhighlight lang="sh" enclose="div">
set -I
set -E
</syntaxhighlight>
X11関連の設定も少し挙動が変わってた。fcitx が自動で起動しないので、~/.config/autostart/fcitx.desktop を作って Exec=/usr/local/bin/fcitx -r -d してオッケー
14.0 関連のリンク Errata 系
https://www.daemonology.net/blog/2023-11-21-late-breaking-FreeBSD-14-breakage.html
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=260841
*FreeBSD リハビリwメモ
あーーーーーー kibana7 が削除されたが kibana8 が動かない! オワタ
openjdk は 17 に統一して、node は 18 に固定して kibana8 に手を加えた。
/usr/ports/textproc/kibana8/Makefile.local を作成
<syntaxhighlight lang="make" enclose="div">
BUILD_DEPENDS= npm-node18>=9.7.2:www/npm-node18
RUN_DEPENDS= ${LOCALBASE}/bin/node:www/node18
USES= compiler:c++17-lang cpe nodejs:18,build,run python:build
</syntaxhighlight>
elastic stack version 8 にあげていろいろホゲった。混乱の極みw いろいろ認証を必須にした結果ぐちゃぐちゃ&細かなバグいっぱい。
https://discuss.elastic.co/t/curl-against-an-encrypted-elasticsearch-instance-with-certificate-verification/251503
https://discuss.elastic.co/t/import-ca-cert-as-privatekeyentry-to-http-keystore-solve-unable-to-create-enrollment-token-error/313780
僕の知っている君じゃないw
最終的に filebeat の FreeBSD特有の不具合に阻まれたw
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=272701
go の FreeBSD 対応漏れ...もう少し遊ぶw
結局 filebeat は beats7 にはバージョンチェックがなさそうなので beats8 をやめて beats7 で逃げた。
*FreeBSD リハビリwメモ
いろいろ忙しかったので一月ぐらい ports の更新をサボってたら、まぁ大変。FreeBSD の ports も地獄ですなぁw
mozc 系での python3.10 の場合 AttributeError: module 'collections' has no attribute 'MutableSet' は、無理矢理FIX
/usr/ports/devel/py-gyp/files/patch-pylib_gyp_common.py を作成
<syntaxhighlight lang="diff" enclose="div">
--- pylib/gyp/common.py.oig
+++ pylib/gyp/common.py
@@ -494,7 +494,7 @@ def uniquer(seq, idfun=None):
# Based on http://code.activestate.com/recipes/576694/.
-class OrderedSet(collections.MutableSet):
+class OrderedSet(collections.abc.MutableSet):
  def __init__(self, iterable=None):
    self.end = end = []
    end += [None, end, end]        # sentinel node for doubly linked list
</syntaxhighlight>
'''./scripts/post-patch''' でうんぬんというやり方わすれた...
*Upgrade ミスってったようだ
13.2-RELEASE-p2 が出てので freebsd-update したが、そのあと ports でエラーが出た。ALLOW_UNSUPPORTED_SYSTEM を使えということで調べると、どうもシステム領域がちゃんと更新されていないようだ。(/usr/include/sys/param.h が古いのを発見)(おそらく 13.1 から 13.2 の更新のときミスったようだ) 仕方がないので、古式ゆかしいw make world をやってみた。(システムの cc が gcc から llvm clang に置き換わってるので、gcc よりもビルド時間がかかるかかる...)
昔々 mergemaster してたのが、 etcupdate に変わって、そこのところぐらいであとは同じだな。
メモ的に... etcupdate は結構よしなにやってくれるようなので、念のために
<syntaxhighlight lang="bash" enclose="div">
etcupdate diff > foo.diff
</syntaxhighlight>
しておいて、あとは引数なしで etcupdate 実行。そのあとはいつも通り check-old delete-old check-old-libs delete-old-libs
*MacBook6,1 (13-Inch, Late 2009) unibody polycarbonate white 再生計画 その7
ports build するときのかなり熱を持つ。古いCPUなら powerd++ が良いということで導入したが想定通りの動きでもう手放せないw
温度の閾値でCPUを clock down 出来る。
<syntaxhighlight lang="text" enclose="div">
powerdxx_enable="YES"
powerdxx_flags="-n min -a hiadaptive -b adaptive -H 80C:100C"
powerdxx_oomprotect="ALL"
</syntaxhighlight>
あと、おまじない的にこれもいるかも...
<syntaxhighlight lang="text" enclose="div">
debug.acpi.suspend_bounce=1
</syntaxhighlight>
年代物なので、CPUグリスがカピカピになってるにはずなので、補修しようかと調べたら、裏蓋をはずしただけで作業はできず、マザーボード外して裏側からヒートシンク外さないといけないことがわかったので、面倒くさいのでヤラナイw
*FreeBSD リハビリwメモ
GNU awk がほしくって whereis gawk したら、/usr/ports/japanese/gawk といわれて、これでおおはまり。
これじゃん /usr/ports/lang/gawk
japanese/gawk は version 3, lang/gawk は version 5
*FreeBSD リハビリwメモ
portsの名前が変わった影響がでた場合、MOVED の中身を見て、古い名前を pkg_deinstall -f {古い名前} で消してみると良いかも。今回ハマったのはこれで回避した。
<syntaxhighlight lang="bash" enclose="div">
pkg_deinstall -f atk at-spi2-atk
</syntaxhighlight>
<syntaxhighlight lang="bash" enclose="div">
has a missing dependency: atk
</syntaxhighlight>
っていくつかのportsででるが
<syntaxhighlight lang="bash" enclose="div">
portmaster -o accessibility/at-spi2-core accessibility/atk
</syntaxhighlight>
これで一件落着w
*FreeBSD リハビリwメモ
freebsd-update でハマり中...仕方が無いので、
<syntaxhighlight lang="bash" enclose="div">
OK unload
OK load /boot/kernel.old/kernel
OK boot
</syntaxhighlight>
とりあえず、実験のあいだ kernel.old をどっかに保存する。カスタムカーネルをやめて GENERIC にするといけるので、カスタムカーネルをいろいろ試し中...
<syntaxhighlight lang="bash" enclose="div">
make kernel __MAKE_CONF=/dev/null SRCCONF=/dev/null KERNCONF=MACBOOK
</syntaxhighlight>
これでも駄目だった。
nvidia の kernel driver があかんようだ。loader.conf から外して、rc.conf に kld_list="/boot/modules/nvidia.ko" 追加して解決。ふぅぅぅぅぅ
何れにせよ "/boot/modules/" にある kernel module は rc.conf に記述したほうが安全かもね。駄目なのもあるけど。
*FreeBSD リハビリwメモ
protect の確認
<syntaxhighlight lang="bash" enclose="div">
ps aux -o flags
</syntaxhighlight>
flag の上から3番目
*FreeBSD リハビリwメモ
あら dig はデフォで無くなったのか drill が相当品 (unbound の tool なのね)
<syntaxhighlight lang="bash" enclose="div">
alias dig drill
</syntaxhighlight>
したw
なぜ今更な感じ何だが、avahi で IPv6 を resolve したときに link-local しか出ないのでいろいろあさった。(mDNS の仕様っぽいし、無理矢理 Global IPv6 にする方法もみつからなかった)
*FreeBSD リハビリwメモ
*FreeBSD リハビリwメモ
journaled soft-updates も課題を抱えているらしい。昨今のテラバイト級のストレージでショートファイルが多い場合に、ジャーナルを食い潰すして不具合を起こすらしい。
11.x 以降からいろいろ思想を変えてきてるっぽい。高速の外部記憶(SSD)とかが普通になってるんだったら、昔のようにswapを嫌わずに、主記憶を有効に使う方向に振りましょうとの感じか...
 
*FreeBSD リハビリwメモ
FreeBSD でも Linux みたいな過保護な実装するようになったんだなぁといろいろ調べた
rc.conf にこんなのが書けるっぽい
 
<syntaxhighlight lang="text" enclose="div">
elasticsearch_oomprotect="ALL"
</syntaxhighlight>
これ書いてたら、DB飛ばさなかったかもw
 
あら protect flag (P_PROTECTED) 立たないな。調査する...
 
*FreeBSD リハビリwメモ
ほーーーー FreeBSD で "OOM" とい文字列が...昔はこの言葉なかったよなぁ
 
<syntaxhighlight lang="text" enclose="div">
vm.pageout_oom_seq
vm.pfault_oom_attempts
</syntaxhighlight>
 
*FreeBSD リハビリwメモ
sambaが古いのが入ってしまってセキュリティ警告が出て install 出来ないのでデフォルトバージョンを変えた。
<syntaxhighlight lang="text" enclose="div">
DEFAULT_VERSIONS+=samba=4.16
</syntaxhighlight>
 
あとはおまじない
<syntaxhighlight lang="bash" enclose="div">
portmaster -o net/samba416 samba412
</syntaxhighlight>
 
 
*FreeBSD リハビリwメモ
rctl とかよさげかなぁと遊んでみたが、pcpu で deny すると、意識が飛び飛び状態で、これは駄目だ。throttle は使えないので、devctl で script 呼び出しかなぁ...まだ遊び中...
 
一秒に一回イベントがくる。条件が閾値超えだけなので使いづらい。
 
*FreeBSD リハビリwメモ
FreeBSD流 cpu microcode のアップデート
https://www.thomas-krenn.com/en/wiki/Update_Intel_Microcode_on_FreeBSD
一度やればそれでCPUにフラッシュされるのかと思ったらそうでは無いっぽい。 cpu_microcode_load="YES" はそのままにしないといけない。
 
*FreeBSD リハビリwメモ
あーこんなのやってたなぁ
<syntaxhighlight lang="text" enclose="div">
login.conf:# cap_mkdb /etc/login.conf
termcap:#  cap_mkdb -f /usr/share/misc/termcap /etc/termcap
</syntaxhighlight>
limit 解除するときにこれを忘れてハマった記憶がw
 
*FreeBSD リハビリwメモ
blacklistd なるものがあるらしい。(fail2ban 設定中に見つけたw) ports の postfix には blacklistd patch もあるので使えそう。遊んでみる。
 
やはり pf つかうのがナウいwのかねぇ (fail2ban も pf で頑張り中...)
 
*FreeBSD リハビリwメモ
今も要るみたいね... /etc/make.conf に
<syntaxhighlight lang="text" enclose="div">
CFLAGS+=-DFD_SETSIZE=8192 -DSOMAXCONN=4096
</syntaxhighlight>
20年前よりは賢くやろうw
 
<syntaxhighlight lang="text" enclose="div">
/usr/src/sys/sys/socket.h:427:9: error: 'SOMAXCONN' macro redefined [-Werror,-Wmacro-redefined]
#define SOMAXCONN      128
</syntaxhighlight>
ってなるソースもあるのでもう少し工夫がいるか。 "-Wno-macro-redefined" はやりすぎかなぁ?
 
*FreeBSD リハビリwメモ
↓の検証をしていて
<syntaxhighlight lang="text" enclose="div">
vfs.ufs.dirhash_lowmemcount
</syntaxhighlight>
がカタカタ増えるのを見て、懐かしいなぁとw
 
find を sleep 入れて回し続けるというバッドハックをやってたw
 
<syntaxhighlight lang="bash" enclose="div">
#!/bin/sh
 
while true
do
    /usr/bin/nice -n 20 find / -ls -exec sleep 1 \;  >/dev/null 2>&1
done
</syntaxhighlight>
 
*FreeBSD リハビリwメモ
journaled soft-updates も課題を抱えているらしい。昨今のテラバイト級のストレージでショートファイルが多い場合に(単位時間内での処理過多で)、ジャーナルを食い潰して不具合を起こすらしい。
 
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=255799
この障碍が起きた場合は 3 回 fsck しないと復旧しないのが特徴。


回避策はいろいろ議論されている。
回避策はいろいろ議論されている。
Line 18: Line 389:
https://reviews.freebsd.org/D30041
https://reviews.freebsd.org/D30041
<syntaxhighlight lang="text" enclose="div">
<syntaxhighlight lang="text" enclose="div">
mckusick added a comment.May 17 2021, 6:43 PM
mckusick added a comment. May 17 2021, 6:43 PM


I have been working with folks on these two bug reports which I suspect are caused by this problem:
I have been working with folks on these two bug reports which I suspect are caused by this problem:
Line 33: Line 404:
The easiest way to test this theory would be to bump up SUJ_MAX to 350Mb in sys/ufs/ffs/fs.h and then recompile tunefs. Using the recompiled tunefs, disable journaled soft updates, remove the old .sujournal, then reenable journaled soft updates to get a bigger journal.
The easiest way to test this theory would be to bump up SUJ_MAX to 350Mb in sys/ufs/ffs/fs.h and then recompile tunefs. Using the recompiled tunefs, disable journaled soft updates, remove the old .sujournal, then reenable journaled soft updates to get a bigger journal.
</syntaxhighlight>
</syntaxhighlight>
SUJ_MAX 増やして tunefs をビルドし直して、一旦 "-j disable" してから、"-j enable" して .sujournal を増やす。
SUJ_MAX 増やして tunefs をビルドし直して、一旦 "-j disable" してからマウントして .sujournal を消し、再度 "-j enable" して .sujournal を作り直す。.sujournal のサイズが増えていることを確認。念のため full fsck はしておくのがよいかも。← fsck は不要。(Journal timestamp does not match fs mount time っていわれる)
 
あら tunefs に -S オプションがある。こんな感じかな
<syntaxhighlight lang="bash" enclose="div">
tunefs -j enable -S 536870912 /dev/ada0p2
</syntaxhighlight>
 
<syntaxhighlight lang="bash" enclose="div">
-r--------  1 root  wheel    33554432 Jul 25 17:15 .sujournal
*
-r--------  1 root  wheel    536870912 Jul 25 17:19 .sujournal
</syntaxhighlight>


D30041 の適用は有効。しかしジャーナル不足の場合は、わかるぐらいオーバヘッドあり(unlink)。ジャーナルサイズを増やす事によりこの事象は解消できる。


*FreeBSD リハビリwメモ
*FreeBSD リハビリwメモ
Line 157: Line 540:
tunefs -j disable /{デバイス}
tunefs -j disable /{デバイス}
mount -o rw  {デバイス} {マウントポイント}
mount -o rw  {デバイス} {マウントポイント}
chflags noschg,nosunlnk {マウントポイント}/.sujournal
# chflags noschg,nosunlnk {マウントポイント}/.sujournal
rm {マウントポイント}/.sujournal
rm {マウントポイント}/.sujournal
umount {デバイス}
umount {デバイス}
Line 163: Line 546:
mount -o rw {デバイス} {マウントポイント}
mount -o rw {デバイス} {マウントポイント}
</syntaxhighlight>
</syntaxhighlight>
★訂正↑のオペレーション(chflags noschg,nosunlnk)はちゃんと -j disable にしていたら不要のはず。保護されている場合は disable 出来ていない事だ。


journaled soft-updates は background fsck は動かないので、それにともなう諸問題も無し。
journaled soft-updates は background fsck は動かないので、それにともなう諸問題も無し。