[FreeBSD-users-jp 96033] Re: linprocfs and mfs on 10.3-RELEASE-p16
丸山直昌
maruyama @ ism.ac.jp
2017年 2月 14日 (火) 19:39:52 UTC
統計数理研究所の丸山です。
Date: Wed, 01 Feb 2017 01:12:31 +0900
Subject: [FreeBSD-users-jp 96025] linprocfs and mfs on 10.3-RELEASE-p16
に書いた問題、PC-BSDで freebsd-update をやると変なことが起こる問題ですが、
結局Satoさんが仰ることが的を得ている、との判断に達しました。つまり、
PC-BSDの kernel は元祖FreeBSDのGENERIC kernel とは違っているのに、
/etc/freebsd-update.confを書き換えて freebsd の update server を使ったた
めに起こったことでした。
試しに PC-BSD 10.3 の /boot/kernel をそっくり元祖 FreeBSD 10.3 のものに
置き換えて freebsd の update server を使ってupdate して見ると、私が2/1に
書いた linprocfs と mfs が mount できない問題は発生しないことが確認でき
ました。
2/1に書いたこの問題が「再現できない」と一時は思ったのですが、それは次の
ようなことをしたために一見問題が発生していないように見えたためでした。
- PC-BSD 10.3 で PC-BSDの update server(fbsd-update.pcbsd.org)を使って
freebsd-update をやる -> freebsd-version は 10.3-RELEASE-p6 となる
- 更に /etc/freebsd-update.conf を書き換えて元祖FreeBSDの update server
(update.FreeBSD.org)を使って freebsd-update をやる -> freebsd-version
は 10.3-RELEASE-p16となる
これですと2/1に書いた現象は一応起きませんが、Satoさんの指摘を踏まえて考
えると、非常に怪しげなやり方、ということになるのでしょう。(この怪しげな
方法で何が起こっているかを解析してもあまり価値がないと思いますので、やめ
ておきます。)
この怪しげな方法と、もう一つ、PC-BSD10.3インストール後に /boot/kernel を
入れ替えてからfreebsd-update をやる方法というのも、取り敢えずの回避策と
しては考えてみましたが、ここはちょっと手間をかけても最大限の安全策を取る
ことにしました。それは、PC-BSDのインストーラーの /distにある *.txz をす
べて元祖 freebsd10.3 の
ncftp ...ses/amd64/10.3-RELEASE > pwd
ftp://ftp.jp.freebsd.org/pub/FreeBSD/releases/amd64/10.3-RELEASE/
This URL is also valid on this server:
ftp://ftp.jp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/10.3-RELEASE/
ncftp ...ses/amd64/10.3-RELEASE > ls -l *.txz
-rw-r--r-- 1 root wheel 70325324 3月 25 2016 base.txz
-rw-r--r-- 1 root wheel 1432464 3月 25 2016 doc.txz
-rw-r--r-- 1 root wheel 886184 3月 25 2016 games.txz
-rw-r--r-- 1 root wheel 97807424 3月 25 2016 kernel.txz
-rw-r--r-- 1 root wheel 17545052 3月 25 2016 lib32.txz
に置き換えてPC-BSDのインストーラーを使って、丸々インストールをやり直す、
うというやりかたです。PC-BSD10.3のインストーラーのUSB版は
PCBSD10.3-RELEASE-03-31-2016-x64-USB.img というもので、
# mdconfig -a -f PCBSD10.3-RELEASE-03-31-2016-x64-USB.img
md0
# gpart show md0
=> 3 8521344 md0 GPT (4.1G)
3 1600 1 efi (800K)
1603 32 2 freebsd-boot (16K)
1635 8517664 3 freebsd-ufs (4.1G)
8519299 2048 4 freebsd-swap (1.0M)
# mount /dev/md0p3 /mnt
# df /mnt
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/md0p3 4256990 3956914 -40483 101% /mnt
# ls -alg /mnt/dist
total 185644
drwxr-xr-x 3 root wheel 512 4月 1 2016 .
drwxr-xr-x 24 root wheel 1024 4月 1 2016 ..
-rw-r--r-- 1 root wheel 678 4月 1 2016 MANIFEST
-rw-r--r-- 1 root wheel 70297356 4月 1 2016 base.txz
-rw-r--r-- 1 root wheel 1431780 4月 1 2016 doc.txz
-rw-r--r-- 1 root wheel 884216 4月 1 2016 games.txz
-rw-r--r-- 1 root wheel 99627036 4月 1 2016 kernel.txz
-rw-r--r-- 1 root wheel 17691380 4月 1 2016 lib32.txz
drwxr-xr-x 7 root wheel 512 4月 1 2016 packages
ですから、この入れ替えは簡単です。(10.2で同じことをやろうとすると、
PCBSD10.2-RELEASE-09-12-2015-x64-DVD-USB.iso なので、ちょっと面倒。)この
やり方でちゃんとPC-BSDが動くかというと、ほぼ動きます。元々PC-BSDは
FreeBSD+関連pkg+αなので、「α」の分だけ調整が必要になる可能性は覚悟の
上でやったわけですが、殆どそのまま動きました。今、普段持ち歩いている
ThinkPad X230に「怪しげなp16」とこの「txz総入れ替えインストール版p16」の
両方が入っていて、いつでも比較できますが、今の時点で気が付いた差は
/etc/rc.resume
/etc/sysctl.conf
だけです。 rc.resume は、PC-BSDでは
# Check if we need to resume wpa_supp
ifconfig | grep -q 'wlan0:'
if [ $? -eq 0 ] ; then
/usr/sbin/service netif restart wlan0
fi
# Restart moused to fix suspend
/etc/rc.d/moused restart
が余分についていて、これ無しでは resume後にマウス(PS2)が効きません。
また PC-BSDの /etc/sysctl には
kern.ipc.shm_allow_removed=1
というのがあって、これ無しでは chrome を起動したときに
For correct operation, shared memory support has to be enabled
in Chromium by performing the following command as root :
sysctl kern.ipc.shm_allow_removed=1
To preserve this setting across reboots, append the following
to /etc/sysctl.conf :
kern.ipc.shm_allow_removed=1
と文句を言って、動きません。
長々と書いてしまいましたが、要するに PC-BSDのupdate server はメンテナン
スがいい加減なので、 freebsdのupdate server を使うためには、こういうこと
をせざるを得ない、ということです。昨年12月4日の時点では
PC-BSD update: 10.3-RELEASE-p6
FreeBSD update: 10.3-RELEASE-p12
で、先週2月6日の時点では
PC-BSD update: 10.3-RELEASE-p6
FreeBSD update: 10.3-RELEASE-p16
でした。つまり2ヵ月間で FreeBSD のupdate server はp12からp16に更新されて
いるのにPC-BSDの方は変化がないわけで、メンテナンスが放棄されているように
見えます。これはPC-BSDのファンである私としては悲しいことですが、対策を取
らざるを得ません。
以上、報告でした。
Mon, 06 Feb 2017 20:46:06 +0900 (JST)
Hiroki Sato <hrs @ allbsd.org> writes:
>maruyama @ ism.ac.jp (丸山直昌) wrote
> in <ydlr33bybme.fsf @ samanta.ism.ac.jp>:
>
>ma> VIMAGE のことは忘れていました。
>ma>
>ma> Date: Thu, 01 Sep 2016 14:04:04 +0900
>ma> Subject: [FreeBSD-users-jp 95966] FreeBSD と PC-BSDの違い
>ma>
>ma> に書いた通り、 10.3での元祖 FreeBSD と PCBSDの違いは
>ma>
>ma> usr/src/sys/amd64/conf/GENERIC PCBSD/usr/src/sys/amd64/conf/GENERIC
>ma> usr/src/sys/netgraph/bluetooth/drivers/ubt/ng_ubt.c
>ma>
>ma> だけで、少ないとは言え違うので、可能性だけ言えば、動かなくなる機能はある
>ma> わけですが、私は jail は使っていないので、まあこのままFreeBSD プロジェク
>ma> ト側の freebsd-update サーバを使ってみます。 PC-BSDの update サーバーは
>ma> 手抜きでどうしようもありません。
>
> VIMAGE が入っている場合、jail を使っているかどうかと関係なく
> ネットワーク周りのコードがごっそり変わりますので、
> 不具合はこれからも出ると思います。
>
> 先のメールにあった
>
>ma> link_elf_obj: symbol vnet_entry_ifnet undefined
>
> は、グローバル変数である ifnet の参照(カーネルモジュールの
> リンク時のシンボル解決)に失敗していることを示しています。
>
> linprocfs は proc/net/dev をサポートするために ifnet を使います。
> ifnet の構造体は VIMAGE がある場合とない場合とで大きく異なります。
> 具体的には、ある場合は vnet_entry_ifnet という名前に置き換えられ、
> ない場合は ifnet という名前のままです。
>
> そのため、linprocfs.ko を読んだ時点で上記のエラーが出るという情報から
> 推測すると、PC-BSD に含まれている linprocfs.ko と
> FreeBSD プロジェクトがリリースしている GENERIC カーネルとを
> 組み合わせた場合なのだと思います。GENERIC カーネルには
> vnet_entry_ifnet が定義されていませんので、カーネルモジュールの
> ロードに失敗します。
>
> なぜ再現しないのかはわかりませんが、
> 「freebsd-update によってカーネル本体だけ差し替えられた」という
> 想像が正しいなら、カーネルモジュールのうち、ifnet を参照するものは
> 全滅しています。これには linprocfs だけでなく、
> ipfw や pf, if_vlan などが含まれますので、影響は大きいです。
>
> 自己責任で使われるのは自由だと思いますが、
> メーリングリストに報告しても有益なアドバイスを得られる可能性は
> 非常に低いのではないでしょうか。
>
>-- Hiroki
--------
丸山直昌@統計数理研究所
freebsd-users-jp メーリングリストの案内