2008年2月27日水曜日

トラブル:メモリを4GB搭載したPCでnvidia-driverを用いるとhang upする(169.12/7.0-RELEASE)

更新:7.0-RELEASE/nvidiaのドライバが169.12になったのでそれに合わせました。

以下の構成で組んだPCにおいて、 nvidiaのドライバを用いるようにして
startx を実行するとhang-upします

(ドライバをportsからinstallしたい場合、 ports/x11/nvidia-driver において
Makefileの中にある 169.07 を 169.12 と書き換え、distfilesを削除するだけでOKです。)

OS: FreeBSD 7.0-RELEASE (i386)
MB: GIGABYTE GA-P35-DS4(Rev.2.0, BIOS F11)
CPU: Intel Core2Duo E8200
Memory: DDR2 SDRAM 1GB * 4 (4GB)
GA: GeForce 8500 GT

ACPIを切ってみてもダメでした。

ところが、ここからメモリを1枚抜いて 3GB とすると、うまく起動しました。
しかしこれではデュアルチャネルじゃなくなるわけで。
512MBを2枚買って代用すればいいんですが、それもなんだか負けた感がしますし。
さてこれ以上何が出来るやら……?

関連情報(?):
メモリを4GB以上認識させる 3
http://pc11.2ch.net/test/read.cgi/jisaku/1198949005/17-18
FreeBSD/amd64 part2 (and for oyster901)←amd64の事情なので今回とはあまり関係なし
http://pc11.2ch.net/test/read.cgi/unix/1171335849/212-216

2008年2月7日木曜日

Adobe Reader 8.1.2 (JP) Linux版はフォント不足が解消されているっぽい。

Adobe Reader 8.1.2が出ました。まだインストールしていないのですが、
Linux版のアーカイブ(.tar.gz)を見る限りでは、今回はちゃんと KozGoProVI-Medium.otf が付属しているようです。
( Linux版では 8.1.1(JP)のときに不足していて、ゴシック文字が表示できないなどちょっとトラブルがあった。 )
ゴシック体フォントが無いと途方に暮れていた or 7.x 系から再利用していた皆さんは要チェック。

% tar -tf AdobeReader811/COMMON.TAR | grep CIDFont
Adobe/Reader8/Resource/CIDFont/
Adobe/Reader8/Resource/CIDFont/KozMinProVI-Regular.otf
% tar -tf AdobeReader812/COMMON.TAR | grep CIDFont
Adobe/Reader8/Resource/CIDFont/
Adobe/Reader8/Resource/CIDFont/KozMinProVI-Regular.otf
Adobe/Reader8/Resource/CIDFont/KozGoProVI-Medium.otf

2008年2月5日火曜日

トラブル:nvidia-driverを用いてXを起動しようとするとhang upする

作業しながら記事を書いたので、問題とやったことがごっちゃになってしまった……
問題点だけ別記。

以下の構成で組んだPCにおいて、 startx を実行するとhang-upします。
デバッグ機能付きででコンパイルしたkernelで実行しても、
hang-upした後 kdbに移ることが出来ないため dumpすら取れません。

OS: FreeBSD 7.0-RC1
MB: GIGABYTE GA-P35-DS4(Rev.2.0, BIOS F11)
CPU: Intel Core2Duo E8200
Memory: 1GB DDR2 x 4本 (4GB)→OSが512MBほど無視
GA: GeForce 8500 GT

nvidia-driver についていたログ採取ツールで取得したシステムログ↓
http://www1.odn.ne.jp/taraijpn/nvidia-bug-report-bsd7.log

類似の問題が報告されている掲示板やMLなど:
http://www.nvnews.net/vbulletin/showthread.php?t=104873

http://lists.freebsd.org/pipermail/freebsd-current/2007-September/076965.html


使用したnvidia-driverについては、portsのもの(100.xx.yy)はダメ。
最新のもの(169.07)にしてもダメ。
portsパッチ↓
http://www1.odn.ne.jp/taraijpn/x11_nvidia-driver_20080205.diff.txt
(7.0-CURRENTまで非対応のものを、7.0-RC1でコンパイルできるようにしたものです。利用する場合は十分注意して下さい。

kern.smp.activeを0にしてもhang upします。SMPか否かは関係なしということ?
trussなどをかけてもOSごと止まってしまうためファイルが消失する。
(外部USBメモリをsyncでマウントし、そこに書き込ませようとしてもダメ)
いい方法はないものか……

2008年2月2日土曜日

募集: x11/nvidia-driver update patch (169.07) を作ってみた。

とりあえず寝ても覚めてもstartx→フリーズ、に変化がないので、
これはきっとドライバが悪いんだそうに違いない、
などと勝手に思いこんだ挙げ句 ports を更新してみました。
http://www1.odn.ne.jp/taraijpn/x11_nvidia-driver_20080202.diff.txt
http://www1.odn.ne.jp/taraijpn/x11_nvidia-driver-100xx_20080202.diff.txt
100xx のほうも残してあります。が、あまり意味はないような…
(100xx→169xxになってサポートされなくなるボードは1枚だけ。(おそらく96xxがカバーしている))


# cd /usr/ports
# patch -p < x11_nvidia-driver_20080202.diff.txt
# patch -p < x11_nvidia-driver-100xx_20080202.diff.txt


ただし、オフィシャルとしては FreeBSD 7.0-CURRENTには対応していない、
ということになっているそうなので、Makefileでバージョンチェックを行っています。
それとおぼしき部分をコメントアウトしていただきますと、
FreeBSD 7.0-RC1(PRERELEASE)以降 (__FreeBSD_version >= 700055) で
コンパイル出来るようになります。人柱絶賛募集中。
但しkernelがcoreすら吐かないという大変危険なフリーズの仕方をしますので、OS再インストール上等、ハードウェアに損害が出ても構わない、くらいの環境でお試し下さい。
(http://www.freebsd.org/where.html#helptestから 7.0-RC1のdisc1あたりをもってきておくと早いかも?)

参考:NVIDIA FreeBSD nv news forum
全く同じ症状の人(ボードまで同じだ!)を発見してしまいましたよ。これかーこれなのかー??

FreeBSD versionチェック(私的メモ)

http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/conf/newvers.sh
バージョン名が設定されているところ
http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/sys/param.h
__FreeBSD_version が設定されているところ
http://www.freebsd.org/doc/en/books/porters-handbook/freebsd-versions.html
__FreeBSD_version に対応する変更点リスト

試行錯誤の順番について

おかしいと思ったときの試行錯誤の順番が違う気がしてきました。
まとめておきましょう。

■portsからインストール~実行したものでトラブルに見舞われたら
(1) /usr/ports/UPDATING を調べる。
(2) send-prで報告されてないか調べる。↓おすすめ
http://portsmon.freebsd.org/portsprsbyportname.py
(3) ドキュメントを調べる。
→ /usr/local/share/doc の下にないか?
→ work/ 以下に展開された元アーカイブの下にないか?
(4) WWWで検索する
→日本語の場合はFreeBSD 4以下の情報をつかまないように注意。
→調べ先をもう少し整理したいなあ。
→→オリジナルソースの開発コミュニティがあれば見てみる。
→→ユーザフォーラムの情報も調べてみる。

というわけで、読むべきものを忘れていましたね。


% less /usr/ports/UPDATING
...
20070913:
AFFECTS: users of x11/xorg, x11/nvidia-driver
AUTHOR: flz@FreeBSD.org

X.org ports were updated to 7.3. Since we're now using the modular
build, the upgrade is pretty much painless. If you're using the
x11/xorg meta-port, upgrade should be as easy as:

# portupgrade -R xorg

Users of nvidia-driver will have to make sure Composite extension is
turned off and start Xorg with the following command:

$ startx -- -ignoreABI

The -ignoreABI option is a Xorg option. If you're using gdm, kdm or
xdm, you will have to modify your configuration file so that Xorg
starts with this option.

An updated nvidia-driver should be released soon.


これですか? これなんですか??
試してみた。フリーズ。違ったようだ。寝てしまおう。

Xorg.0.logに残っていたもの、そして……

お預けにしたとはいえ、それにしても一体何があったのでしょうか。
Xorg.0.log に何か残っているかもしれません。


■(略)
(**) NVIDIA(0): Depth 24, (--) framebuffer bpp 32
(==) NVIDIA(0): RGB weight 888
(==) NVIDIA(0): Default visual is TrueColor
(==) NVIDIA(0): Using gamma correction (1.0, 1.0, 1.0)
(**) NVIDIA(0): Enabling RENDER acceleration
(II) NVIDIA(0): Support for GLX with the Damage and Composite X extensions is
(II) NVIDIA(0): enabled.
(EE) NVIDIA(0): Failed to initialize the NVIDIA kernel module! Please ensure
(EE) NVIDIA(0): that there is a supported NVIDIA GPU in this system, and
(EE) NVIDIA(0): that the NVIDIA device files have been created properly.
(EE) NVIDIA(0): Please consult the NVIDIA README for details.
(EE) NVIDIA(0): *** Aborting ***
(II) UnloadModule: "nvidia"
(II) UnloadModule: "xaa"
(II) UnloadModule: "wfb"
(II) UnloadModule: "fb"
(EE) Screen(s) found, but none have a usable configuration.

Fatal server error:
no screens found


どうもカーネルモジュールがよろしくないらしい。
portsでコンパイルしたときは特にWarningもなく通ってたんですけどねえ。
付属のドキュメントを見てみると……?


# less /usr/ports/x11/nvidia-driverwork/NVIDIA-FreeBSD-x86-100.14.19/doc/README
...
E1. NVIDIA GEFORCE GPUS
...
GeForce 8500 GT 0x0421

ボードはあるよなあ…

______________________________________________________________________________

Appendix A. Minimum Software Requirements
______________________________________________________________________________

The official minimum software requirements for the NVIDIA FreeBSD Graphics
Driver are as follows:

Software Element Min Requirement
---------------------------------- ----------------------------------
Kernel FreeBSD 5-STABLE (5.3 or later)
XFree86/X.Org 4.2/6.7.0

Additionally, the kernel source tree must be installed in /usr/src/sys
(package 'ssys' installed)

Note that FreeBSD -STABLE versions older than FreeBSD 5.3 and FreeBSD 6.x/7.x
-CURRENT development snapshots are not supported.


えー(==;


______________________________________________________________________________

Chapter 6. Common Problems
______________________________________________________________________________

This section provides solutions to common problems associated with the NVIDIA
FreeBSD x86 Driver.

...

Q. My X server fails to start, and my X log file contains the error:

(EE) NVIDIA(0): Failed to initialize the NVIDIA kernel module!

A. Nothing will work if the NVIDIA kernel module does not function properly.
If you see anything in the X log file like

(EE) NVIDIA(0): Failed to initialize the NVIDIA kernel module!

then there is most likely a problem with the NVIDIA kernel module.

The NVIDIA kernel module may print error messages indicating a problem --
to view these messages check the output of `dmesg`, '/var/log/messages', or
wherever syslog is directed to place kernel messages. These messages are
prepended with "NVRM".


お、まさにログ通りのテキスト発見! fails で戻ってこないからもっと深刻だけど…
/var/log/messages を見よ?


Feb 2 00:08:39 basil kernel: nvidia0: port 0xa000-0xa07f mem 0xf6000000-0xf6ffffff,0xe0000000-0xefffffff,0xf4000000-0x
f5ffffff irq 16 at device 0.0 on pci1
Feb 2 00:08:39 basil kernel: nvidia0: [GIANT-LOCKED]
Feb 2 00:08:39 basil kernel: nvidia0: [ITHREAD]


カーネルモジュールが読まれている時はこれが出ているのでボードは認識しているようだけれど、停止時の記録は見あたりません。強制リブートしたあたりを見ても特になく。何故だー!?

ここで選択肢を出しておいて寝ることにしましょう。
(1)続ける
   →100.xxのまま → Webをもっとちゃんと探す
   →169.xxをもってきてportsに頼らずやってみる
(2)諦める(どうせvncで使うんだし)

df で見ると used が マイナス になる!?

強制再起動した後 fsck_ufs が回っているのですが……


%df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ar0s1a 2026030 171126 1692822 9% /
devfs 1 1 0 100% /dev
/dev/ar0s1h 97241478 4 89462156 0% /export
/dev/ar0s1g 203114302 -25494 186890652 -0% /home
/dev/ar0s1e 4058062 33662 3699756 1% /tmp
/dev/ar0s1f 152337186 9695586 130454626 7% /usr
/dev/ar0s1d 4058062 62910 3670508 2% /var

まいなす!?


%df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ar0s1a 2026030 171126 1692822 9% /
devfs 1 1 0 100% /dev
/dev/ar0s1h 97241478 4 89462156 0% /export
/dev/ar0s1g 203114302 -25494 186890652 -0% /home
/dev/ar0s1e 4058062 33662 3699756 1% /tmp
/dev/ar0s1f 152337186 9695586 130454626 7% /usr
/dev/ar0s1d 4058062 62910 3670508 2% /var
%df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ar0s1a 2026030 171126 1692822 9% /
devfs 1 1 0 100% /dev
/dev/ar0s1h 97241478 4 89462156 0% /export
/dev/ar0s1g 203114302 -26102 186891260 -0% /home
/dev/ar0s1e 4058062 33662 3699756 1% /tmp
/dev/ar0s1f 152337186 9695586 130454626 7% /usr
/dev/ar0s1d 4058062 62910 3670508 2% /var

淡々と増えてます……

そして十数分後、fsck_ufsも無事終わり、どうやらダメージは無かった様子。
よかったよかった…


%df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ar0s1a 2026030 171126 1692822 9% /
devfs 1 1 0 100% /dev
/dev/ar0s1h 97241478 4 89462156 0% /export
/dev/ar0s1g 203114302 6106 186859052 0% /home
/dev/ar0s1e 4058062 33662 3699756 1% /tmp
/dev/ar0s1f 152337186 9605298 130544914 7% /usr
/dev/ar0s1d 4058062 62912 3670506 2% /var


dfも元通り。一体何だったんだろう……

とりあえずnvidiaドライバはちょっとお預けということで、特にトラブルなく表示された nv ドライバで様子を見ることにします。カーネルモジュールは怖いですね。

2008年2月1日金曜日

nvidia-xconfigを入れてみる。

x11/xorg の make installが終わったので、とりあえず /etc/X11/ とか /usr/local/etc/X11/ を見てみたものの、.confファイルは無し。グラフィックボードのドライバを入れてから考えることにします。GeForce 8500GTなので
x11/nvidia-driver を入れてみました。100.14.19相当のようです。Version 169.07が出ている のですが、Update requestがsend-prされているのでそのうち新しくなるでしょう。

% cat /boot/loader.conf
nvidia_load="YES"
% kldstat
Id Refs Address Size Name
1 10 0xc0400000 93ba74 kernel
2 1 0xc0d3c000 693b3c nvidia.ko
3 2 0xc13d0000 27828 linux.ko
4 1 0xc13f8000 671f4 acpi.ko



ところが、なぜか同梱されているはずの nvidia-xconfig や nvidia-settings が入ってきません。work を見ると…


# pwd
/usr/ports/x11/nvidia-driver/work/NVIDIA-FreeBSD-x86-100.14.19/obj
# ls
libGL.so.1 libXvMCNVIDIA.so.1 libnvidia-tls.so.1 nvidia-bug-report.sh nvidia_drv.so
libGLcore.so.1 libglx.so.1 libnvidia-wfb.so.1 nvidia-settings
libXvMCNVIDIA.a libnvidia-cfg.so.1 linux nvidia-xconfig
# ldd nvidia-xconfig
nvidia-xconfig:
libm.so.3 => /usr/local/lib/compat/libm.so.3 (0x2809e000)
libc.so.5 => /usr/local/lib/compat/libc.so.5 (0x280b9000)
# ldd nvidia-settings
nvidia-settings:
libgtk-x11-2.0.so.400 => not found (0x0)
libgdk-x11-2.0.so.400 => not found (0x0)
libXrandr.so.2 => /usr/local/lib/libXrandr.so.2 (0x28115000)
libXi.so.6 => /usr/local/lib/libXi.so.6 (0x2811b000)
libXinerama.so.1 => /usr/local/lib/libXinerama.so.1 (0x28123000)
libXcursor.so.1 => /usr/local/lib/libXcursor.so.1 (0x28126000)
libatk-1.0.so.600 => not found (0x0)
libgdk_pixbuf-2.0.so.400 => not found (0x0)
libm.so.3 => /usr/local/lib/compat/libm.so.3 (0x2812f000)
libpangoxft-1.0.so.399 => not found (0x0)
libXft.so.2 => /usr/local/lib/libXft.so.2 (0x2814a000)
libfreetype.so.9 => /usr/local/lib/libfreetype.so.9 (0x2815b000)
libz.so.2 => /usr/local/lib/compat/libz.so.2 (0x281c7000)
libXrender.so.1 => /usr/local/lib/libXrender.so.1 (0x281d7000)
libXext.so.6 => /usr/local/lib/libXext.so.6 (0x281df000)
libfontconfig.so.1 => /usr/local/lib/libfontconfig.so.1 (0x281ec000)
libpangox-1.0.so.399 => not found (0x0)
libX11.so.6 => /usr/local/lib/libX11.so.6 (0x28215000)
libpango-1.0.so.399 => not found (0x0)
libgobject-2.0.so.400 => not found (0x0)
libgmodule-2.0.so.400 => not found (0x0)
libglib-2.0.so.400 => not found (0x0)
libiconv.so.3 => /usr/local/lib/libiconv.so.3 (0x282fd000)
libc.so.5 => /usr/local/lib/compat/libc.so.5 (0x283f3000)
libc.so.7 => /lib/libc.so.7 (0x284cd000)
libXfixes.so.3 => /usr/local/lib/libXfixes.so.3 (0x285c4000)
libz.so.4 => /lib/libz.so.4 (0x285d2000)
libXau.so.6 => /usr/local/lib/libXau.so.6 (0x285e4000)
libexpat.so.6 => /usr/local/lib/libexpat.so.6 (0x285e7000)
libXdmcp.so.6 => /usr/local/lib/libXdmcp.so.6 (0x28606000)
librpcsvc.so.4 => /usr/lib/librpcsvc.so.4 (0x2860b000)

… compat なものとか not foundっぽいものがある… ドキュメントを読むと FreeBSD 5.3相当の環境でコンパイルしたものが入っているようです。nvidia-xconfigはそのまま使えそうですが、せっかくなので x11/nvidia-xconfig を使ってみましょう。nvidia-settingsはなんだかドツボっぽそうなので回避。


# make
===> Vulnerability check disabled, database not found
=> nvidia-xconfig-1.0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
=> Attempting to fetch from http://jp.download.nvidia.com/XFree86/nvidia-xconfig/.
fetch: http://jp.download.nvidia.com/XFree86/nvidia-xconfig/nvidia-xconfig-1.0.tar.gz: size mismatch: expected 110356, actual 110373
■(中略)
=> Attempting to fetch from ftp://download.nvidia.com/XFree86/nvidia-xconfig/.
fetch: ftp://download.nvidia.com/XFree86/nvidia-xconfig/nvidia-xconfig-1.0.tar.gz: size unknown
fetch: ftp://download.nvidia.com/XFree86/nvidia-xconfig/nvidia-xconfig-1.0.tar.gz: size of remote file is not known
nvidia-xconfig-1.0.tar.gz 107 kB 77 kBps
===> Extracting for nvidia-xconfig-1.0_2
=> MD5 Checksum mismatch for nvidia-xconfig-1.0.tar.gz.
=> SHA256 Checksum mismatch for nvidia-xconfig-1.0.tar.gz.
===> Refetch for 1 more times files: nvidia-xconfig-1.0.tar.gz nvidia-xconfig-1.0.tar.gz
===> Vulnerability check disabled, database not found
=> nvidia-xconfig-1.0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
=> Attempting to fetch from http://jp.download.nvidia.com/XFree86/nvidia-xconfig/.
fetch: http://jp.download.nvidia.com/XFree86/nvidia-xconfig/nvidia-xconfig-1.0.tar.gz: size mismatch: expected 110356, actual 110373
=> Attempting to fetch from http://us.download.nvidia.com/XFree86/nvidia-xconfig/.
fetch: http://us.download.nvidia.com/XFree86/nvidia-xconfig/nvidia-xconfig-1.0.tar.gz: size mismatch: expected 110356, actual 110373
■(中略)
=> Attempting to fetch from ftp://ftp.cn.FreeBSD.org/pub/FreeBSD/ports/local-distfiles/bland/.
fetch: ftp://ftp.cn.FreeBSD.org/pub/FreeBSD/ports/local-distfiles/bland/nvidia-xconfig-1.0.tar.gz: Unknown error: 0
=> Attempting to fetch from ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/.
fetch: ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/nvidia-xconfig-1.0.tar.gz: Unknown error: 0
=> Couldn't fetch it - please try to retrieve this
=> port manually into /usr/ports/distfiles/ and try again.
*** Error code 1

Stop in /usr/ports/x11/nvidia-xconfig.
*** Error code 1

Stop in /usr/ports/x11/nvidia-xconfig.


えー。
どうも 配布されているファイルと distinfo の情報にずれがあるようです。
(httpなら持ってくる前にチェックできるけどftpは持ってきてからチェックするんですね)

とりあえず distinfo を消し、distfiles にある nvidia-xconfig-1.0.tar.gz を念のため消してから再トライ。


# mv distinfo distinfo.old
# /usr/ports/distfiles/nvidia-xconfig-1.0.tar.gz
make
===> Vulnerability check disabled, database not found
=> nvidia-xconfig-1.0.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
=> Attempting to fetch from http://jp.download.nvidia.com/XFree86/nvidia-xconfig/.
nvidia-xconfig-1.0.tar.gz 100% of 107 kB 18 MBps
===> Extracting for nvidia-xconfig-1.0_2
=> No checksum file (/usr/ports/x11/nvidia-xconfig/distinfo).
===> Patching for nvidia-xconfig-1.0_2
===> Applying FreeBSD patches for nvidia-xconfig-1.0_2
===> nvidia-xconfig-1.0_2 depends on executable: gmake - found
===> Configuring for nvidia-xconfig-1.0_2
===> Building for nvidia-xconfig-1.0_2
cc -c -O2 -pipe -march=prescott -I XF86Config-parser util.c -o util.o
■(中略)
cc -O2 -pipe -march=prescott -I XF86Config-parser gen-manpage-opts.o -lm -o gen-manpage-opts
./gen-manpage-opts > options.1.inc
m4 -D__HEADER__=".\\\" WARNING: THIS FILE IS AUTO-GENERATED! Edit nvidia-xconfig.1.m4 instead." nvidia-xconfig.1.m4 > nvidia-xconfig.1
#

オリジナルファイルもちゃんとマスターサイト(と思わしきところ)から持ってきているようなので、これでよしとしましょう。
インストールして実行。


basil# nvidia-xconfig

WARNING: Unable to locate/open X configuration file.

ps: Process environment requires procfs(5)
New X configuration file written to '/etc/X11/xorg.conf'



何故procfsが要求されるのか…なにか見たいのか?
まあいいや。とりあえずユーザに戻してstartxしてみましょう。


% startx


真っ暗。

あれ?

数分経過。

戻ってこない…何故…?
別PCから接続していたsshのコネクションも Operation timed out。
電源ボタンを押してみても無反応…
泣く泣く強制シャットダウン→再起動→絶賛fsck_ufs中

なーーーーーぜーーーーーだーーーーー??
(続く。)