FreeBSD Tips

From misc notes
Jump to navigation Jump to search
  • 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で警告
leapsecond file ('/var/db/ntpd.leap-seconds.list'): expired 19 days ago
service ntpd fetch
fetch: https://www.ietf.org/timezones/data/leap-seconds.list: Not Found

あらら...

/etc/rc.conf に

ntp_leapfile_sources="https://data.iana.org/time-zones/data/leap-seconds.list"

追加して、オッケー

  • FreeBSD リハビリwメモ

やってみたらやっぱりそうだったw

protect -dip 1


  • 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 がサックリ稼働した。

portmaster multimedia/libuvc multimedia/webcamd
webcamd_enable="YES"
webcamd_0_flags="-d ugen1.2"

後は、/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 使えてか...

git clone https://git.FreeBSD.org/ports.git /usr/ports

やたらとバイナリーパッケージ推しになってるが、無視して老人会モードで逝くw (油断してたら、せっせと手インストールした ports かなりの数が消されてしまったw)

git pull のあと make index がいるのかね。fetchindex はまだ動作するね

cd /usr/ports
make fetchindex

(__cxa_thread_call_dtors のワーニングが消えた状態になったら)過去にインストールした ports すべての再インストールが必須。 (portmaster の man page から)

(最低限 /usr/local/etc のバックアップしておくこと。/usr/ports/distfiles 以下のソースもとっておく方がトラフィック削減でベター)

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`

(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

set -I
set -E

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 を作成

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


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 を作成

--- 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

./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 は結構よしなにやってくれるようなので、念のために

etcupdate diff > foo.diff

しておいて、あとは引数なしで 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 出来る。

powerdxx_enable="YES"
powerdxx_flags="-n min -a hiadaptive -b adaptive -H 80C:100C"
powerdxx_oomprotect="ALL"

あと、おまじない的にこれもいるかも...

debug.acpi.suspend_bounce=1

年代物なので、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 {古い名前} で消してみると良いかも。今回ハマったのはこれで回避した。

pkg_deinstall -f atk at-spi2-atk
has a missing dependency: atk

っていくつかのportsででるが

portmaster -o accessibility/at-spi2-core accessibility/atk

これで一件落着w

  • FreeBSD リハビリwメモ

freebsd-update でハマり中...仕方が無いので、

OK unload
OK load /boot/kernel.old/kernel
OK boot

とりあえず、実験のあいだ kernel.old をどっかに保存する。カスタムカーネルをやめて GENERIC にするといけるので、カスタムカーネルをいろいろ試し中...

make kernel __MAKE_CONF=/dev/null SRCCONF=/dev/null KERNCONF=MACBOOK

これでも駄目だった。

nvidia の kernel driver があかんようだ。loader.conf から外して、rc.conf に kld_list="/boot/modules/nvidia.ko" 追加して解決。ふぅぅぅぅぅ

何れにせよ "/boot/modules/" にある kernel module は rc.conf に記述したほうが安全かもね。駄目なのもあるけど。

  • FreeBSD リハビリwメモ

protect の確認

ps aux -o flags

flag の上から3番目

  • FreeBSD リハビリwメモ

あら dig はデフォで無くなったのか drill が相当品 (unbound の tool なのね)

alias dig drill

したw

なぜ今更な感じ何だが、avahi で IPv6 を resolve したときに link-local しか出ないのでいろいろあさった。(mDNS の仕様っぽいし、無理矢理 Global IPv6 にする方法もみつからなかった)

  • FreeBSD リハビリwメモ

11.x 以降からいろいろ思想を変えてきてるっぽい。高速の外部記憶(SSD)とかが普通になってるんだったら、昔のようにswapを嫌わずに、主記憶を有効に使う方向に振りましょうとの感じか...

  • FreeBSD リハビリwメモ

FreeBSD でも Linux みたいな過保護な実装するようになったんだなぁといろいろ調べた rc.conf にこんなのが書けるっぽい

elasticsearch_oomprotect="ALL"

これ書いてたら、DB飛ばさなかったかもw

あら protect flag (P_PROTECTED) 立たないな。調査する...

  • FreeBSD リハビリwメモ

ほーーーー FreeBSD で "OOM" とい文字列が...昔はこの言葉なかったよなぁ

vm.pageout_oom_seq
vm.pfault_oom_attempts
  • FreeBSD リハビリwメモ

sambaが古いのが入ってしまってセキュリティ警告が出て install 出来ないのでデフォルトバージョンを変えた。

DEFAULT_VERSIONS+=samba=4.16

あとはおまじない

portmaster -o net/samba416 samba412


  • 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メモ

あーこんなのやってたなぁ

login.conf:#	cap_mkdb /etc/login.conf
termcap:#  cap_mkdb -f /usr/share/misc/termcap /etc/termcap

limit 解除するときにこれを忘れてハマった記憶がw

  • FreeBSD リハビリwメモ

blacklistd なるものがあるらしい。(fail2ban 設定中に見つけたw) ports の postfix には blacklistd patch もあるので使えそう。遊んでみる。

やはり pf つかうのがナウいwのかねぇ (fail2ban も pf で頑張り中...)

  • FreeBSD リハビリwメモ

今も要るみたいね... /etc/make.conf に

CFLAGS+=-DFD_SETSIZE=8192 -DSOMAXCONN=4096

20年前よりは賢くやろうw

/usr/src/sys/sys/socket.h:427:9: error: 'SOMAXCONN' macro redefined [-Werror,-Wmacro-redefined]
#define SOMAXCONN       128

ってなるソースもあるのでもう少し工夫がいるか。 "-Wno-macro-redefined" はやりすぎかなぁ?

  • FreeBSD リハビリwメモ

↓の検証をしていて

vfs.ufs.dirhash_lowmemcount

がカタカタ増えるのを見て、懐かしいなぁとw

find を sleep 入れて回し続けるというバッドハックをやってたw

#!/bin/sh

while true
do
    /usr/bin/nice -n 20 find / -ls -exec sleep 1 \;  >/dev/null 2>&1
done
  • FreeBSD リハビリwメモ

journaled soft-updates も課題を抱えているらしい。昨今のテラバイト級のストレージでショートファイルが多い場合に(単位時間内での処理過多で)、ジャーナルを食い潰して不具合を起こすらしい。

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=255799 この障碍が起きた場合は 3 回 fsck しないと復旧しないのが特徴。

回避策はいろいろ議論されている。 https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=253968#c15

 Kirk McKusick freebsd_committer 2021-06-22 06:07:48 UTC

We have had others report that they can reproduce the problem and that
1) disabling journaling (but keeping soft updates) makes the problem go away;
2) increasing the journal size moderates the problem;
3) the patch proposed in https://reviews.freebsd.org/D30041 helps to moderate the problem. This patch is hopefully in a final round of testing before being committed.

*** This bug has been marked as a duplicate of bug 255473 ***

D30041 は MFC。13.1は適用

https://reviews.freebsd.org/D30041

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:

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=255473
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=255799

The problem may be solved by simply having a bigger journal.

The size of the journal should be based on the number of operations that are expected to be done on it in a one-minute period. Unfortunately, tunefs has no direct way to compute this operation count since it knows neither how fast the disk can do transactions nor the capabilities of the system on which it will run. Tunefs is reduced to using the size of the filesystem as an indicator of how big to make the journal.

The journal size ranges from 4Mb (SUJ_MIN) to 32Mb (SUJ_MAX) where the maximum is hit for filesystems of 4Gb and above. The maximum journal size was set more than a decade ago and was based on the number of operations expected to be done in a one-minute period on systems of that era. By my estimates it needs to be about 10x larger to meet that criterion today.

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.

SUJ_MAX 増やして tunefs をビルドし直して、一旦 "-j disable" してからマウントして .sujournal を消し、再度 "-j enable" して .sujournal を作り直す。.sujournal のサイズが増えていることを確認。念のため full fsck はしておくのがよいかも。← fsck は不要。(Journal timestamp does not match fs mount time っていわれる)

あら tunefs に -S オプションがある。こんな感じかな

tunefs -j enable -S 536870912 /dev/ada0p2
-r--------  1 root  wheel     33554432 Jul 25 17:15 .sujournal
*
-r--------  1 root  wheel     536870912 Jul 25 17:19 .sujournal

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

  • FreeBSD リハビリwメモ

いろいろ実験

camcontrol identify da0
smartctl -d sat /dev/da0 -s wcache,off
camcontrol identify da0
smartctl -d sat /dev/da0 -g all


kern.cam.da.0.flags: 0x3f40<WAS_OTAG,OPEN,SCTX_INIT,CAN_RC16,PROBED,DIRTY,ANNOUCNED>
kern.cam.ada.0.flags: 0x1be3bde<CAN_48BIT,CAN_FLUSHCACHE,CAN_NCQ,CAN_DMA,WAS_OTAG,CAN_TRIM,OPEN,SCTX_INIT,CAN_POWERMGT,CAN_DMA48,CAN_LOG,CAN_WCACHE,CAN_RAHEAD,PROBED,ANNOUNCED,DIRTY,PIM_ATA_EXT,UNMAPPEDIO>

この flag って誰がどこで決めてるのかごそごそ調べてみる...


  • FreeBSD リハビリwメモ

gpart メモ

gpart show da0
gpart delete -i 1 da0
gpart add -t freebsd-ufs -s 100G -a 4k da0
gpart add -t freebsd-ufs -s 831G -a 4k da0
gpart show da0


  • FreeBSD リハビリwメモ

あらためて softupdate 考 その2

外付け SSD をつかっていろいろ実験してみたが、結論はぐたぐた言わずに SU+J にしろ!

実験中 background fsck から復帰したボリュームを umount できない場合が多く、安全な運用方法は、background fsck が終了しだい reboot を早く行う事。

(復旧中のファイルシステムが固まったら、最悪電源断とか reboot -qn で一旦リセットするしかない)

まーグダグダ言わずに SU+J にしろ! (再)

UFS snapshot が使えないってとこも、結局運用上停止メンテと同じ手間だとおもうので、もう UFS snapshot は諦める事。(か ZFS にしたまえw)

自分自身の感想では ZFS は使いどころをよく考えで、使い分けるのがよさげ


  • FreeBSD リハビリwメモ

いろいろ実験するためにアマゾンプライムデーで SanDisk Portable SSD を購入。

ses0 てなデバイスが見えたので、いろいろしらべた。smartd.conf みたら、

# An ATA disk may appear as a SCSI device to the OS. If a SCSI to                                                           
# ATA Translation (SAT) layer is between the OS and the device then                                                         
# this can be flagged with the '-d sat' option. This situation may                                                          
# become common with SATA disks in SAS and FC environments.                                                                 
# /dev/sda -a -d sat

とあり、

smartctl -d sat -a /dev/da0

で確認できた。

  • FreeBSD リハビリwメモ

あらためて softupdate 考

今リハビリ中のバージョンは 13.1-RELEASE で、インストール時に言われるままにパーティションきってファイルシステムつくると、こうなっている。

tunefs: soft updates: (-n)                                 enabled
tunefs: soft update journaling: (-j)                       enabled
tunefs: gjournal: (-J)                                     disabled
/dev/ada0p2 on / (ufs, local, soft-updates, journaled soft-updates)

(実際には noatime は追加してます)

Webで過去の記事を見ているときに

/dev/ada0p2 on / (ufs, local, journaled soft-updates)

こうなってるのばかりで、なにか変更があったのかと、

tunefs -n disable /dev/ada0p2

してみたら、

/dev/ada0p2 on / (ufs, local)

となった。-j は soft update のオプション扱いなようで、"-n" + "-j" で journaled soft-updates ということらしい。

softupdate はどんな状態で落ちても、ファイルシステムの一貫性は保たれて、障碍後の boot 時に(正しく umount されていないと) Automatic file system check(fsck on boot) で軽く修復後はすぐに mount できてすぐに使える利点がある。preen モード(手動 fsck が必要な重大な問題が無い場合)での修復・回収可能な削除領域を復帰させる(ガベッジコレクション的) fsck は必要で、それを background fsck と呼ばれる方法で稼働中に行える。しかし、この処理は一旦スナップショットをとり、裏で fsck を実行する仕組みになっており、この仕組みが大容量ボリュームの場合はとても重くて遅く、不具合といってよいほどにとらえられている。(UFS snapshot とっている間はそのデバイスがロックされる。fsck中は処理が重い。) 運用上よくある回避策は、background fsck の起動を(停止ではなく)抑制して、負荷の少ない真夜中に bgfsck を実行させる。もしログに重大な警告があれば、スケジュールメンテナンスを行うといった対応になる。(どのタイミングで停止メンテをするかを選択のする余地が出来る)

/etc/rc.conf

background_fsck_delay="-1"

/etc/crontab

0       4       *       *       *       root    /etc/rc.d/bgfsck forcestart


あとはよくあったのは ストレージの I/O cache にだまされる問題。その場合は full fsck は必須。write cache は disable にするのが安全。(昨今のATAはこのあたりは気にしなく良いという話もある)

このあたりは過去の知識。

FreeBSD から離れていた間に実装された journaled soft-updates をいろいろつついて経験中...

journaled soft-updates は dump -L (ライブでの dump) は現在のところは動かない(というか UFS snapshot が使えない)ので、dump -L を使う運用では journal は使えない。

journal をオフにした場合(tunefs -j disable)は、必ず .sujournal を削除しないとまずいらしい。

# enter single user mode
tunefs -j disable /{デバイス}
mount -o rw  {デバイス} {マウントポイント}
# chflags noschg,nosunlnk {マウントポイント}/.sujournal
rm {マウントポイント}/.sujournal
umount {デバイス}
fsck -y {デバイス}
mount -o rw {デバイス} {マウントポイント}

★訂正↑のオペレーション(chflags noschg,nosunlnk)はちゃんと -j disable にしていたら不要のはず。保護されている場合は disable 出来ていない事だ。

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

JOURNALED FILESYSTEM, CANNOT RUN IN BACKGROUND

Netflix は FreeBSD のヘビーユーザで(コンテンツ配信用の)ファイルシステムは UFS + SU+J らしい。コンフィグやログ系は ZFS も一部はつかっているらしい。RAID は一切使っていないらしい。

関連リンク集

Soft updates, hard problems
JournalしているUFSでfsckに失敗
FreeBSD/SUJ (Soft Updates Journaling)
FreeBSDの .sujournal が邪魔の場合
rsyncのためにSoft-Updates Journalingを切る。
Remove FreeBSD journal
FreeBSD Enterprise Storage
  • FreeBSD リハビリwメモ

linux の世界ではもはや当たり前につかってる ccache を使ってみる。(私がコミットしている OSS project では ccache が無いと不便なぐらい)

"/usr/local/share/doc/ccache/ccache-howto-freebsd.txt" 見たら "WITH_CCACHE_BUILD=yes" だけでイケるぜって書いてたが実際はこんな感じで有効になった

WITH_CCACHE_BUILD=yes
CCACHE_DIR=/var/cache/ccache
CCACHE_BIN=/usr/local/bin/ccache

sloppiness については "time_macros, pch_defines" を設定してみた。(不具合は経験してなく、hit rate はあがるはず)

  • FreeBSD リハビリwメモ

なぜ最初からこうなってないのか不思議なんだが.. make.conf に追加

DEFAULT_VERSIONS+= bdb=18
  • FreeBSD リハビリwメモ

make config で設定したオプションがある場所

/var/db/ports/<port>/options
  • FreeBSD リハビリwメモ

/usr/src/UPDATING や /usr/ports/UPDATING はちゃんと読め!

portmaster --check-depends
pkg check -sa

でいろいろ出てきたら、ちゃんと対処

  • MacBook6,1 (13-Inch, Late 2009) unibody polycarbonate white 再生計画 その6

kernel や kernel module の再構成の時に、ports で入った kernel module をビルドし忘れないように、

PORTS_MODULES=x11/nvidia-driver-340 net/bwn-firmware-kmod

これ系は /etc/src.conf ?

  • MacBook6,1 (13-Inch, Late 2009) unibody polycarbonate white 再生計画 その5

内蔵 Touchpad の設定をいろいろいじくったが、MacOS で使い慣れている事ができないのがストレス。

Drag を MacOS と同じやり方にしたいが見つからず。ストレスフルなので、USB マウスを使っている。

  • MacBook6,1 (13-Inch, Late 2009) unibody polycarbonate white 再生計画 その4

keymap いろいろ

syscons...失礼。いまはvtだった。us.iso.macbook.kbd があるのだが caps lock を ctrl に変更するのにスマートな方法探したが、やっぱり keymap 書き換えしかなさそう。

同様に X11 の環境では option で caps lock を ctrl に変更できるのだが、

setxkbmap -model macbook -layout "us(mac)" -option "ctrl:nocaps"

この設定では `~ のキーがおかしい。いろいろスマートな方法探したが、これも keymap 書き換えた。

setxkbmap -option "altwin:ctrl_win"

Mac流のショートカットが一部動く。(手癖wのストレスは少しは解消)

作った keymap は custom という名前にしておくのが良いとわかった

  • MacBook6,1 (13-Inch, Late 2009) unibody polycarbonate white 再生計画 その3

asmc モジュールを修正した。

--- a/asmc/asmc.c
+++ b/asmc/asmc.c
@@ -173,6 +173,12 @@ struct asmc_model asmc_models[] = {
 	},
 
 	{
+	  "MacBook6,1", "Apple SMC MacBook Core 2 Duo (13-inch, Late 2009)",
+	  ASMC_SMS_FUNCS, ASMC_FAN_FUNCS2, ASMC_LIGHT_FUNCS_DISABLED,
+	  ASMC_MB61_TEMPS, ASMC_MB61_TEMPNAMES, ASMC_MB61_TEMPDESCS
+	},
+
+	{
 	  "MacBook7,1", "Apple SMC MacBook Core 2 Duo (mid 2010)",
 	  ASMC_SMS_FUNCS, ASMC_FAN_FUNCS2, ASMC_LIGHT_FUNCS_DISABLED,
 	  ASMC_MB71_TEMPS, ASMC_MB71_TEMPNAMES, ASMC_MB71_TEMPDESCS
--- a/asmc/asmcvar.h
+++ b/asmc/asmcvar.h
@@ -157,6 +157,18 @@ struct asmc_softc {
 				  "Heatsink 1","Heatsink 2" \
 				  "Memory Bank A", }
 
+#define ASMC_MB61_TEMPS	{ "TB0T", "TB1T", "TB2T", "TC0D", "TC0P", \
+				  "TH0P", "TN0D", "TN0P", "TN1D", "Th1H", \
+				  "Ts0P", "Ts0S", NULL }
+
+#define ASMC_MB61_TEMPNAMES	{ "enclosure_bottom0", "battery_1", "battery_2", "cpu_package", "cpu_proximity", \
+				  "hdd_bay", "northbridge0_diode", "northbridge0_proximity", "mpc_die2", "heatsink1", \
+				  "palm_rest", "memory_proximity", }
+
+#define ASMC_MB61_TEMPDESCS	{ "Enclosure Bottom 0", "Battery 1", "Battery 2", "CPU Package", "CPU Proximity", \
+				  "HDD Bay", "Northbridge Diode", "Northbridge Proximity", "MPC Die 2", "Heatsink 1", \
+				  "Palm Rest", "Memory Proximity", }
+
 #define ASMC_MB71_TEMPS		{ "TB0T", "TB1T", "TB2T", "TC0D", "TC0P", \
 				  "TH0P", "TN0D", "TN0P", "TN0S", "TN1D", \
 				  "TN1E", "TN1F", "TN1G", "TN1S", "Th1H", \
dev.asmc.0.sms.z: 262
dev.asmc.0.sms.y: 10
dev.asmc.0.sms.x: 1
dev.asmc.0.temp.memory_proximity: 46
dev.asmc.0.temp.palm_rest: 33
dev.asmc.0.temp.heatsink1: 60
dev.asmc.0.temp.mpc_die2: 72
dev.asmc.0.temp.northbridge0_proximity: 58
dev.asmc.0.temp.northbridge0_diode: 67
dev.asmc.0.temp.hdd_bay: 48
dev.asmc.0.temp.cpu_proximity: 63
dev.asmc.0.temp.cpu_package: 70
dev.asmc.0.temp.battery_2: 30
dev.asmc.0.temp.battery_1: 31
dev.asmc.0.temp.enclosure_bottom0: 30
dev.asmc.0.fan.0.targetspeed: 2000
dev.asmc.0.fan.0.maxspeed: 6200
dev.asmc.0.fan.0.minspeed: 2000
dev.asmc.0.fan.0.speed: 1996
dev.asmc.0.fan.0.id: Exhaust  
dev.asmc.0.%parent: acpi0
dev.asmc.0.%pnpinfo: _HID=APP0001 _UID=0 _CID=SMC-MCP
dev.asmc.0.%location: handle=\_SB_.PCI0.LPCB.SMC_
dev.asmc.0.%driver: asmc
dev.asmc.0.%desc: Apple SMC MacBook Core 2 Duo (13-inch, Late 2009)

ちゃんと温度やファンの回転数はとれているが、とりあえず使い道はないw


  • 再生計画 雑多なメモ
pkg info -D nvidia-driver-340
  • MacBook6,1 (13-Inch, Late 2009) unibody polycarbonate white 再生計画 その2

/etc/loader.conf に

wsp_load="YES"

マウスやタッチパッドを動的に管理しようとした仕組みが悪さしている。libinput が動的に発見するデバイスがすべて sysmouse 収斂されるのでいろいろ便利ではあるが、細かな設定が難しい。

NaturalScrolling が touchpad で設定すると mouse で逆さま。mouse で設定すると touchpad で逆さま。Xfce の Mouse コンパネで必要に応じて換える運用にした。


  • MacBook6,1 (13-Inch, Late 2009) unibody polycarbonate white 再生計画

WiFi driver ではまる

BCM4322 - WIFI Card - Freebsd 11.2 not working
Introduce bwn(4) support for the bhnd(4) bus.
Broadcom BCM4321 Wireless connection configuration problems
Make Broadcom WLAN work (e.g., for MacBooks)
option BWN_DEBUG
option BWN_GPL_PHY

kernel option を追加して kernel 作って、かつ ports から bwn-firmware-kmod を install

/etc/loader.conf に

if_bwn_load="YES" 
bwn_v4_ucode_load="YES"
bwn_v4_n_ucode_load="YES"

FreeBSD 自体が現状では 802.11ac に対応していない。そのために TP-Link の新しい機種は TP-Link 側で 11n のみの設定にしても 11ac としてしか広報しないようで動かなかった...

  • ほぼ 20 年ぶりに FreeBSD をホゲるw

なので、↓ の記述は 大昔なはなしです。(最後に触ったのは RELENG_8 かなぁ..)(今は 13.1-RELEASE) (初めて触ったのは 2.x の末期だな)

  • Amazon EC2 の FreeBSD AMI がテスト中 (嬉!)
FreeBSD on EC2 status
FreeBSD on EC2 FAQ

なので、いろいろまとめ中

FreeBSD AMI Recipe
  • たんなるメモ26

本当にたんなるメモです。数字は意味ありません。

/boot/loader.conf

hint.acpi.0.disabled="1"
kern.maxusers=256
kern.ipc.nmbclusters=32768
kern.ipc.semmni="256"
kern.ipc.semmns="960"
/etc/make.conf

KERNCONF=GENERIC
WITHOUT_X11=yes
#WITHOUT_CDDL=yes
#X11BASE=/usr/local
EMACS_PORT_NAME=emacs21
SUP_UPDATE=     yes
SUPFLAGS=       -g -L 2
SUPHOST=        cvsup4.jp.freebsd.org
SUPFILE=        /usr/local/etc/cvsup/stable-supfile
PORTSSUPFILE=   /usr/local/etc/cvsup/ports-supfile
DOCSUPFILE=     /usr/local/etc/cvsup/doc-supfile
/etc/syslog.conf

touch /var/log/all.log
chmod 600 /var/log/all.log
*.*                                             /var/log/all.log
/etc/sysctl.conf

# FreeBSD-EN-09:05.null
security.bsd.map_at_zero=0

# Set it in case of large memory system.
vm.defer_swapspace_pageouts=1
vm.disable_swapspace_pageouts=1
vm.idlezero_enable=0
# Check vfs.ufs.dirhash_mem value
# (for NFS Server: 16777216 more, Web Server: 4194304)
#vfs.ufs.dirhash_maxmem=4194304
#vfs.ufs.dirhash_maxmem=16777216
#vfs.ufs.dirhash_maxmem=33554432
#vfs.ufs.dirhash_maxmem=67108864
# Shared Memory tweaking (see also /boot/loader.conf)
kern.ipc.shmmax=134217728
#kern.ipc.shmmax=1073741824
kern.ipc.shmall=32768
#kern.ipc.shmall=262144
kern.ipc.semmap=256
# See man tuning(7)
kern.maxfiles=65536
kern.maxfilesperproc=58982
kern.ipc.somaxconn=8192
kern.ipc.maxsockbuf=524280
# rfc1323
#net.inet.raw.maxdgram=16384
#net.inet.raw.recvspace=16384
#net.inet.tcp.sendspace=65536
#net.inet.tcp.recvspace=65536
#net.inet.udp.recvspace=65536
#net.inet.udp.maxdgram=16384
#
net.inet.icmp.icmplim=600
#net.inet.tcp.always_keepalive=0
#net.inet.tcp.msl=600
#net.inet.tcp.blackhole=2
#net.inet.udp.blackhole=1
# ICMP redirect off
net.inet.ip.redirect=0
net.inet6.ip6.redirect=0
net.inet6.icmp6.rediraccept=0
/etc/ssh/ssh_config

#ForwardAgent yes
#EnableSSHKeysign yes
TCPKeepAlive no
ServerAliveInterval 60
ServerAliveCountMax 15
/etc/rc.conf

# HOST Settings
hostname="foo.bar.example.com"
ifconfig_em0="inet 192.168.1.3  netmask 255.255.255.0"
defaultrouter="192.168.1.254"

# Basic Settings
keyrate="fast"
keymap="jp.106"
saver="NO"
sshd_enable="YES"
usbd_enable="YES"
moused_enable="NO"
accounting_enable="YES"
ipv6_enable="NO"
icmp_drop_redirect="YES"
inetd_enable="YES"
inetd_flags="-wW -R 2048"
kern_securelevel_enable="NO"
fsck_y_enable="YES"
background_fsck="NO"
local_startup="/usr/local/etc/rc.d"

# BIND Settings
named_enable="YES"

# Sendmail Settings
sendmail_enable="YES"

# NTP Settings
ntpdate_enable="YES"
ntpdate_hosts="192.168.1.21"
ntpd_enable="YES"

# Ports Settings
snmpd_enable="YES"
snmpd_flags="-Lsd -Lf /dev/null"

# RPC Settings
rpcbind_enable="NO"

(特殊設定)

diff /usr/include/sys/socket.h /usr/src/sys/sys/socket.h
diff /usr/include/sys/select.h  /usr/src/sys/sys/select.h
4096
8192U
  • たんなるメモ25
いま -> RELENG_7 -> RELENG_8
/boot/device.hints
hint.uart.0.*
WITHOUT_CDDL=yes
http://www.mail-archive.com/freebsd-stable@freebsd.org/msg91065.html
http://www.freebsd.org/cgi/query-pr.cgi?pr=148538
  • お便利なtool
net-mgmt/tcptrack
sysutils/smartmontools
  • たんなるメモ24

perl5.10 に上げたときいろいろ発見した件

libchk

とか

portsclean -L
/usr/local/libdata/ldconfig/

# /etc/rc.d/ldconfig start

あーやっぱり FreeBSD が大好きです。

  • たんなるメモ23
tzsetup(8)
  • /etc/mergemaster.rc
うれしす
AUTO_UPGRADE=yes
AUTO_INSTALL=yes
IGNORE_FILES='/etc/motd'
PRESERVE_FILES=yes
VERBOSE=yes
FREEBSD_ID=yes
  • Firefox35
要注意
Firefox 3.5 and HTML5

Certain functions used to display HTML5 elements need the sem module.

If your Firefox crashes with the following message while viewing a
HTML5 page:
"Bad system call (core dumped)"

you need to load the sem module (kldload sem).

To load sem on every boot put the following into your
/boot/loader.conf:
sem_load="YES"
  • たんなるメモ23
portsnap fetch
portsnap extract
portsnap update
portsnap fetch
portsnap update
ezjail-admin update -P
ついでに freebsd-update 系メモ
projects: freebsd-update-server
  • Linux にあるお便利ツール @FreeBSD
watch @Linux ===> sysutils/topless @FreeBSD
ps auxf @Linux ===> sysutils/pstree @FreeBSD
  • *BSD 系の login name 問題
CGI 等で sendmail を起動する際 -f を指定しなかった場合の sender の挙動とかとか
id -p
で確認してみそ
apache を起動する時に id -p して、login という項目が表示されていればビンゴ!
(see man 2 setlogin, getlogin)
(そーいやぁ 昔は exec login しろっていってたよなぁ...)
(*BSD のシステム運用の際は今も昔も要注意)
  • たんなるメモ22
FreeBSD の devfs 系
/sbin/devfs rule -s 1 delset
/sbin/devfs rule -s 1 add hide
/sbin/devfs rule -s 2 delset
/sbin/devfs rule -s 2 add path null unhide
/sbin/devfs rule -s 2 add path zero unhide
/sbin/devfs rule -s 2 add path crypto unhide
/sbin/devfs rule -s 2 add path random unhide
/sbin/devfs rule -s 2 add path urandom unhide
/sbin/devfs -m /foo_chrootdir/dev ruleset 1
/sbin/devfs -m /foo_chrootdir/dev rule applyset
/sbin/devfs -m /foo_chrootdir/dev rule -s 2 applyset
/sbin/devfs rule showsets
/sbin/devfs rule -s 1 show
/sbin/devfs rule -s 2 show
extended rc 系では
umount /foo_chrootdir/dev 2>/dev/null
devfs_domount /foo_chrootdir/dev devfsrules_hide_all
devfs -m /foo_chrootdir/dev rule -s 2 applyset
rulesetは rcvar の 'devfs_rulesets' で定義
(増加する ttyp*, ptyp* も hide (謎))
  • FreeBSD ports でスマートなカスタマイズ方法
/usr/ports/hoge/fugaで
Makefile.local
scripts/ほげら
を駆使してなんとかする
(ほげら: 最後に独自パッチをあてたければ、post-patch とか)
(Makefile.local も scripts/以下 も make update では消えないので安心)

過去ログ

昔のものは、雑多なメモ