ラベル FreeBSD の投稿を表示しています。 すべての投稿を表示
ラベル FreeBSD の投稿を表示しています。 すべての投稿を表示

2009年3月6日金曜日

FreeBSDをbittorrentでダウンロードする話(今更?)

FreeBSD bittorrent で検索しても最近の話があまり上位に出てこないので、ちょっとだけ。
FreeBSD 7.1-RELEASE と 6.4-RELEASE についてですが、現在のところ正式に bittorrent でダウンロード出来るような体制が出来ています。

BitTorrent

7.1-RELEASE ISOs are available via BitTorrent. A collection of torrent files to download the images is available at:

http://torrents.freebsd.org:8080

http://www.freebsd.org/releases/7.1R/announce.html

FreeBSDでの詳しいダウンロード方法などについては otsune さんが書かれた記事が参考になりますね。
http://www.otsune.com/bsd/ports/bittorrent.html

個人的にハマった経験から、 portsで新しいアプリケーションに追従させる予定があるのなら、OSインストール時にpackagesを使わないほうがよいだろう、と思います。特にX関連。OSがリリースされた時のpackagesは、最新のportsからはだいぶ離れてしまっているので、整合性を取りづらてあまりいい思い出がないのです……

というわけで、全ファイルダウンロードするよりは -bootonly を焼いて基本ファイルのみをネットワークインストール、か、disk1だけで充分なのかもしれません。

2009年2月28日土曜日

設定ファイルをrcsで管理するための細かい話

個人で使っているFreeBSD機において、/etcや/usr/local/etc などにある設定ファイルの変更履歴をrcsで記録するための、ざっくりとしたメモです。setenv RCSINIT -zLTは忘れないようにしたい。あとemacs。お好みでvim+rcs-menu.vimなど。

新しい設定を書き起こすとき

設定ファイルのパーミッションに厳しいプログラムを使うことがあったのですが、rcsやcvsなどではファイルのパーミッションを保存しておくのが難しいのです。しかもどんな設定にすればいいのか忘れやすい。そこで、rcsでファイルを初めてチェックインするときに、log ではなく、description という、ファイルの説明メッセージを書く部分にメモします。意図が違うとかはまあおいといて、どうすればいいかというと……( /usr/local/etc/target.conf を例にする。)

# cd /usr/local/etc/
# mkdir RCS (ない場合は作るべき。後述。)
# ls -l target.conf | ci -i -l target.conf (これでパーミッション情報をメモする。)
# rcs -U target.conf

わざわざRCSディレクトリを作るのは、 find / -not -path '/usr/home/*' -name RCS -type d で探しやすくするため。

ファイルを変更した際には ci -l でチェックインします。-lを忘れるとチェックインしたときにファイルが消えてしまうので注意。

ls の引数と ci の引数に同じファイル名を二度打ちしないといけないところがいまいちかも。
パイプなど使わなくても、ci -i 時のインタラクティブ入力で、ls -lの結果をターミナル窓でコピペしてもOK。情報を残しておくということが重要なのだろうと思います。

何故cvs, subversion, gitではなく rcs なのか?

  • FreeBSDに標準で入っているから
  • 単に使い慣れているから
  • パスワード系のファイルも取り扱う /etc の下を丸ごとリポジトリにコピーしてしまうのはあまりよくないかなと思ったから(多分対処法はある……んじゃないかな?)

rootのままチェックインだのなんだのすることに対する抵抗感はsudoなどで払拭できるか?(未確認)

バックアップは?

設定ファイルが散逸してしまうことは間違いないので、RCSディレクトリをこまめに探しておいて保存するしかないかも?

複数台の設定を管理するノウハウはまた別にあると思いますが、それはまた別の機会に。



追記:linuxでお使いの場合は rcs を導入すれば同じような対応でOKのはず。例えば debian 系 ( ubuntu など ) であれば apt-get install rcs すればよいです。

2008年5月15日木曜日

パッケージなど検索ページとりまとめ

FreeBSD ports

公式 ports検索ページ
http://www.freebsd.org/ports/
freshports
http://www.freshports.org/search.php

Debian

Debian パッケージ
http://www.debian.org/distrib/packages
Unofficial APT repositories
http://www1.apt-get.org/search.php

Ubuntu

Ubuntu packages
http://packages.ubuntu.com/

だいたい公式で事足りてしまうので、まとめというほどもなく。キーワードを1つ入れれば上のサイトを横断的に検索できるようにする方法はないものか……

2008年4月22日火曜日

gnome2、いつ、どれを入れたらいいのやら

普段はfvwmがあれば生きていける暮らしを営んでいるわけですが、今回は珍しくgnome2など入れてみようと思い立ちました。しかしmeta-portが結構あるのでまいってしまったわけで。さすがデスクトップ環境。ウィンドウマネジャーだけじゃ収まらない世界ですねえ。

x11/gnome2x11/gnome2-liteはどれくらい違うか? 分からないときはとりあえずdiffとって眺めてみると……


% diff -u x11/gnome2-lite/Makefile x11/gnome2/Makefile
--- x11/gnome2-lite/Makefile 2007-10-25 08:36:58.000000000 +0900
+++ x11/gnome2/Makefile 2008-04-12 19:08:57.000000000 +0900
@@ -1,43 +1,112 @@
-# New ports collection makefile for: gnome2-lite
-# Date created: 30 November 2003
+# New ports collection makefile for: gnome2
+# Date created: 21 May 2002
(中略)
-RUN_DEPENDS= ${LOCALBASE}/libexec/gweather-applet-2:${PORTSDIR}/x11/gnome-applets \
+RUN_DEPENDS?= ${LOCALBASE}/libexec/gweather-applet-2:${PORTSDIR}/x11/gnome-applets \
gnome-cd:${PORTSDIR}/audio/gnome-media \
gnome-dictionary:${PORTSDIR}/deskutils/gnome-utils \
eog:${PORTSDIR}/graphics/eog \
+ gconf-editor:${PORTSDIR}/sysutils/gconf-editor \
+ gnect:${PORTSDIR}/games/gnome-games \
gedit:${PORTSDIR}/editors/gedit \
gnome-terminal:${PORTSDIR}/x11/gnome-terminal \
gnome-session:${PORTSDIR}/x11/gnome-session \
+ bug-buddy:${PORTSDIR}/devel/bug-buddy \
gnome-system-monitor:${PORTSDIR}/sysutils/gnome-system-monitor \
nautilus:${PORTSDIR}/x11-fm/nautilus \
+ ${LOCALBASE}/sbin/gdm:${PORTSDIR}/x11/gdm \
${LOCALBASE}/share/gnome/help/user-guide/C/user-guide.xml:${PORTSDIR}/misc/gnome-user-docs \
${LOCALBASE}/share/sounds/question.wav:${PORTSDIR}/audio/gnome-audio \
+ ${LOCALBASE}/libdata/pkgconfig/libgail-gnome.pc:${PORTSDIR}/x11-toolkits/libgail-gnome \
file-roller:${PORTSDIR}/archivers/file-roller \
${LOCALBASE}/share/themes/HighContrast/gtk-2.0/gtkrc:${PORTSDIR}/x11-themes/gnome-themes \
- evince:${PORTSDIR}/graphics/evince \
+ gok:${PORTSDIR}/accessibility/gok \
+ nautilus-cd-burner:${PORTSDIR}/sysutils/nautilus-cd-burner \
gcalctool:${PORTSDIR}/math/gcalctool \
gucharmap:${PORTSDIR}/deskutils/gucharmap \
+ zenity:${PORTSDIR}/x11/zenity \
${LOCALBASE}/lib/X11/fonts/bitstream-vera/Vera.ttf:${PORTSDIR}/x11-fonts/bitstream-vera \
- gconf-editor:${PORTSDIR}/sysutils/gconf-editor \
+ ${LOCALBASE}/libexec/gnome-netstatus-applet:${PORTSDIR}/net/gnome-netstatus \
+ dasher:${PORTSDIR}/accessibility/dasher \
+ evolution:${PORTSDIR}/mail/evolution \
+ ${LOCALBASE}/libexec/evolution-webcal:${PORTSDIR}/www/evolution-webcal \
+ network-admin:${PORTSDIR}/sysutils/gnome-system-tools \
+ gnome-nettool:${PORTSDIR}/net/gnome-nettool \
+ vino-session:${PORTSDIR}/net/vino \
+ exchange-connector-setup-2.22:${PORTSDIR}/mail/evolution-exchange \
+ ${LOCALBASE}/lib/gstreamer-0.10/.gstreamer-plugins-core.keep:${PORTSDIR}/multimedia/gstreamer-plugins-core \
+ ${LOCALBASE}/lib/gstreamer-0.10/libgstgconfelements.so:${PORTSDIR}/devel/gstreamer-plugins-gconf \
+ totem:${PORTSDIR}/multimedia/totem \
gnome-control-center:${PORTSDIR}/sysutils/gnome-control-center \
- gnome-mount:${PORTSDIR}/sysutils/gnome-mount \
- totem:${PORTSDIR}/multimedia/totem
-
-MASTERDIR= ${.CURDIR}/../gnome2
-CONFLICTS= gnome2-[0-9]*
-
-DESCR= ${.CURDIR}/pkg-descr
-PKGMESSAGE= ${.CURDIR}/pkg-message
+ ${LOCALBASE}/share/gnome-background-properties/gnome-branded.xml:${PORTSDIR}/x11-themes/gnome-backgrounds \
+ sound-juicer:${PORTSDIR}/audio/sound-juicer \
+ ${LOCALBASE}/libdata/pkgconfig/libgtkhtml-2.0.pc:${PORTSDIR}/www/libgtkhtml \
+ evince:${PORTSDIR}/graphics/evince \
+ ${LOCALBASE}/libexec/fast-user-switch-applet:${PORTSDIR}/x11/fast-user-switch-applet \
+ ${LOCALBASE}/lib/deskbar-applet/deskbar-applet:${PORTSDIR}/deskutils/deskbar-applet \
+ alacarte:${PORTSDIR}/deskutils/alacarte \
+ gnome-power-manager:${PORTSDIR}/sysutils/gnome-power-manager \
+ ${LOCALBASE}/libexec/gnome-volume-manager:${PORTSDIR}/sysutils/gnome-volume-manager \
+ orca:${PORTSDIR}/accessibility/orca \
+ gnome-mount:${PORTSDIR}/sysutils/gnome-mount \
+ ${LOCALBASE}/libexec/notification-daemon:${PORTSDIR}/deskutils/notification-daemon \
+ seahorse:${PORTSDIR}/security/seahorse \
+ swfdec-player:${PORTSDIR}/multimedia/swfdec-gnome \
+ mousetweaks:${PORTSDIR}/accessibility/mousetweaks \
+ vinagre:${PORTSDIR}/net/vinagre \
+ cheese:${PORTSDIR}/multimedia/cheese \
+ ${LOCALBASE}/share/hal/fdi/information/10freedesktop/10-camera-ptp.fdi:${PORTSDIR}/sysutils/hal-info
(中略)
+.if !defined(GNOME_SLAVE)
+.if (${ARCH}!="sparc64" ${OSVERSION} >= 601101) && ${ARCH}!="ia64"
+RUN_DEPENDS+= yelp:${PORTSDIR}/x11/yelp \
+ epiphany:${PORTSDIR}/www/epiphany
+.endif
+.if ${.CURDIR:T}!="gnome2-lite"
+.if ${ARCH} == "i386"
+RUN_DEPENDS+= tomboy:${PORTSDIR}/deskutils/tomboy
+.endif
+.if ${OSVERSION}>=600000
+RUN_DEPENDS+= ekiga:${PORTSDIR}/net/ekiga
+.endif
+.endif
+.endif

これはなんだろう、gnome2のほうが、マシンを面前にしてgdmからログインし、デスクトップ環境として使う場合で、gnome2-liteはコンソールログインしてstartxするとか、vncあたりから使う、ウィンドウマネージャーという位置づけでしょうかね。gstreamer、電源関係、CDバーナーなどが無いあたりからの想像です。きっと探せばports作ってる人の主張がどこかにあるのでしょう。


他にもいくつかのツールが別のメタポートに纏められている様子。

http://www.freebsd.org/gnome/docs/faq2.html#q4  より引用

* The GNOME Fifth Toe (x11/gnome2-fifth-toe) consists of stable GNOME applications that many users expect to find in a functional desktop environment. This includes image manipulation applications, chat and instant messenger applications, and music and multimedia players

* The GNOME Hacker Tools (devel/gnome2-hacker-tools) consists of applications developers would need to create and maintain GNOME software projects. This includes IDEs, interface builders, "hacker" editors, and code generation tools.

* The GNOME Office (editors/gnome2-office) consists of applications that are commonly found in office or productivity suites. This includes a spreadsheet application, word processor, project management application, database access application, groupware suite, and diagramming application.


* The GNOME Power Tools (x11/gnome2-power-tools) consists of utilities and applets for the technically-minded GNOME user. It also contains many useful add-on utilities for some of the applications found in the Desktop and Fifth Toe.

どれで何が入るかはMakefileをのぞいていただくとして。このようにいろいろなアプリがあるようなのですが、とりあえず今回はベタにliteを……

と思ってよく見たらx11/gnome2は2.22.1なのに x11/gnome2-lite は 2.20.1 のままだった……念のため、しばらく延期ということにします。orz

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中

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

2008年1月31日木曜日

portsでmakeする時-jをつけてハマる。

Core2DuoベースのPCを1台組んだので、まっさらな状態からFreeBSD 7.0ベースの環境を構築。CDがBETA3のものしかなかったので、src込みでインストール、OS部分だけとりあえずRELENG_7_0を追従したものをbuildworld。

その過程で、ふと-jオプションなんてのを思い出したので、折角だから使ってみたのですが早い早い。うとうとしていたら完成してました。(今度時間を計ってみます。)

で、portsで同じように並走させたら早いかな? と思って試してみたのですが……


# cd /usr/ports/devel/make
# make -j 4
===> Vulnerability check disabled, database not found
=> make-3.81.tar.bz2 doesn't seem to exist in /usr/ports/distfiles/.
=> Attempting to fetch from http://ftp.gnu.org/gnu/make/.
make-3.81.tar.bz2 1124 kB 27 MBps
===> Extracting for gmake-3.81_2
=> MD5 Checksum OK for make-3.81.tar.bz2.
=> SHA256 Checksum OK for make-3.81.tar.bz2.
===> Patching for gmake-3.81_2
===> Applying FreeBSD patches for gmake-3.81_2
===> gmake-3.81_2 depends on shared library: intl - not found
===> Verifying install for intl in /usr/ports/devel/gettext
cd: can't cd to /usr/ports/devel/gettext/work/gettext-0.16.1
*** Error code 2
install: /usr/ports/devel/gettext/work/gettext-0.16.1/gettext-tools/misc/po-compat.el: No such file or directory
*** Error code 71
2 errors
*** Error code 2
1 error
#


あれ? 依存関係があるはずのgettextの作成を飛ばした? 慌ててやりなおし。


# make clean
===> Cleaning for gmake-3.81_2
# make
===> Vulnerability check disabled, database not found
===> Extracting for gmake-3.81_2
=> MD5 Checksum OK for make-3.81.tar.bz2.
=> SHA256 Checksum OK for make-3.81.tar.bz2.
===> Patching for gmake-3.81_2
===> Applying FreeBSD patches for gmake-3.81_2
===> gmake-3.81_2 depends on shared library: intl - not found
===> Verifying install for intl in /usr/ports/devel/gettext
===> Vulnerability check disabled, database not found
=> gettext-0.16.1.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
=> Attempting to fetch from http://ftp.gnu.org/gnu/gettext/.
gettext-0.16.1.tar.gz 0% of 8339 kB 0 Bps
...


順調順調。

もう今時は portsupgrade 等を使うのが一般的でしょうし、あまりハマることはないと思うのですが、ちょっとびっくりしたのでメモ。

2008年1月29日火曜日

2ch有志かと思ったら一人だけだったみたいです。

しばらく本業などでバタバタしていて、さっき見つけたのですが……http://www13.atwiki.jp/freebsd_manual/


つづくと書いたのはいいのだが、さほど続かなかったのが現実だ。
これが現実、ネラーはつぶやいた。
さて、そろそろ終わりにしよう。そう思った、

END


終わってました。
というか始まってもいねーだろ。


というオチがついたところで本日はこのへんで。

2008年1月18日金曜日

2ch有志が翻訳をしようと企んでいるようです。

ドキュメント翻訳用のwikiを作った人がいるようです。
http://www13.atwiki.jp/freebsd_manual/
ま、manualって書いてあるぞ……? 
それはさておき、ちょっと見てみると、どかっとリストだけ貼られてる状況。こ、これは滅入る……
wikiだけあってもしょうがないので、とりあえず3つ、提案してみます。
『目標を決めよう。』『とりあえず訳そう。』『訳すのを手伝おう。』です。

■目標を決めよう。

何よりもまず、既に訳されているかどうかを確認する必要があります。実は結構な量のドキュメントがdoc-jp(FreeBSD 日本語ドキュメンテーションプロジェクト)によって訳されているのですが、上記wikiについては、勢いでやっつけてしまいたい! 翻訳には興味あるけどSGMLとかはダルい! くらいのノリが見えます。それはそれでいいんですが、折角doc-jpが数年にわたりノウハウや訳文を積み上げているわけですから、これを活かさない手はないでしょう。

英文については、この中にあるものがターゲットになることでしょう。
/usr/doc/en_US.ISO8859-1/
( http://www.freebsd.org/doc/en/ )
例えばハンドブックであれば
/usr/doc/en_US.ISO8859-1/books/handbook/
( http://www.freebsd.org/doc/en/books/handbook/ )
こうです。分割版をお勧めします。

で、日本語訳があるかどうかは、
/usr/doc/ja_JP.eucJP/
( http://www.freebsd.org/doc/ja/ )
ここを見ることになります。例えばハンドブックであれば
/usr/doc/ja_JP.eucJP/books/handbook/
( http://www.freebsd.org/doc/ja/books/handbook/ )
こうですね。分割版を(ry

で、ハンドブックの場合なら、分割されたHTMLファイルから1つを選び、wikiで翻訳作業をしてみるとよいでしょう。

さて、ハンドブックの英語版と日本語版を見比べてみると、コピーライトもさることながら、一部章立てが違うことに気づきます(例えば二章)。これは、日本語訳した英文ファイルのバージョンと、現在の英文ファイルのバージョンが違うために起こります。なので、翻訳するときには『どのファイルを訳したか』『いつのファイルを訳したか』の2つを明確にすることが重要です。wikiには当面、どのHTMLファイルを、いつ翻訳したか、書いておけばいいと思います。

(ファイルの取扱い方を把握した人なら、バージョンを書いて元ファイルを訳すのがベスト。今は7.0-RELEASE直前なので、今後さらに英文側が変更される可能性が高いことに注意。)

なお、http://www.freebsd.org/doc/ja/ には反映されていない和文もありますので注意して下さい。( /usr/doc/ja_JP.eucJP/ 以下を手元のファイルやcvswebなどで見てみてください。 )

■『とりあえず訳そう。』

どれを訳すか決まったら翻訳作業に入るわけですが、せっかくですのでdoc-jpに合わせた訳文を心がけてみましょう。

http://www.jp.freebsd.org/doc-jp/guide.html
ここから最低限チェックしとくと良さそうなことをピックアップ。

  • 翻訳上の注意
    1. 文体は「ですます調」でお願いします。
    2. ASCII 文字セットにある文字はそれを使ってください。
    3. いわゆる「半角カナ」や「全角英数字」は使わないでください。
    4. 句読点は「、」「。」を使ってください (以前は 1 バイト文字の「,」「.」が利用されていました)。
      また、既存の文書の句読点を変換するときは、 次のことを目安に臨機応変に対応してください。
      • チェックする人の負担を減らすために、diff には句読点の 変換のみを含めるようにしてください。
      • コマンドの出力メッセージ、会社名や単位、英文の参考文献の タイトルや引用の部分はそのままにしておいてください。
      • 英単語区切りには「,」を使ってください。
    5. 日本語ドキュメントのファイル名は英語ドキュメントと 同じにしてください。
         英語版と日本語版は別のディレクトリに入れるので ファイル名で区別する必要はありません。
  • 翻訳する上で参考になるもの
    1. 不完全なものですが 対訳表 があります。
    2. 今までに翻訳されたファイルの英語版と日本語版を比較してみる。
    3. その事について 検索 してみる。
    4. NEC PC98 シリーズ用 FreeBSD の日本語ドキュメントを参考にする。 ftp://daemon.jp.FreeBSD.org/pub/FreeBSD-PC98/ にあります。
    5. ハンドブックや FAQ などは、ある一定の 指針 に沿って作業が進められています。 …が、必ずしも強制されるものではありません。
      文章が必要以上に堅苦しい表現にならない範囲で作業してください。


これくらい? ターゲットを切り分けてくれる人が増えるまでは、自分で目標を宣言しながら翻訳を積み重ねることになると思います。既に訳されてた、なんてことも起こるかもしれません。

■『訳すのを手伝おう。』

英語は苦手だけど技術的なことに興味あり、みたいな人は、まず何を訳すべきなのか、そして、訳されたテキストをどうやってdoc-jpにcontributeするところまでもっていくかを考えたらいいと思います。


  • まずは /usr/doc/ にあるドキュメントをmakeして喜んでみる(必要な知識やツールはこのあたり)。
  • 貢献方法作業手順を読んでみる。
  • ターゲットになっている文章の構造を把握し、wikiに反映することを考える。
  • wikiにどこを訳せばいいかをファイル単位で明示してみる。(未訳・既訳・更新アリのチェックを含む)
  • HTMLベースで訳している人の訳文を元ファイルに落とし込んでみる。
  • (難易度激しく高!)doc-jpプロジェクトが手動でやっている処理を自動化するようなシステムを考える。(翻訳に集中できる環境を整える)


外から見て、ひとりで思いつくのはこれくらい、です。
もっと綺麗な作業分担方法を思いついた人は、ばんばん仕切っちゃっていいと思います。みんな楽になるでしょうし。

はてさて、うまく作業が進むでしょうか? これに慣れたら doc-jp に飛び込んでみるのもよいかと思います。


追記:平成20年1月29日(火)
で、その後どうなったのかというと……
2ch有志かと思ったら一人だけだったみたいです。

2008年1月15日火曜日

send-prしてみる。(mh編)


とりあえず先に進むことにする。
本当なら porttools-0.77 と nbsmtp-1.00 で快適send-pr、の予定だったのですが、
主にネットワーク上の都合によりWebから送付、ということにします。
まずはports全体のpatch作りから、ふたたび。


  1. make update で取り込んだオリジナルの /usr/ports/japanese/mh を、一旦 /usr/ports/japanese/mh.orig にコピー。
  2. /usr/ports/japanese/mh を改めて一から修正。(このへんは過去とったdiffを活用)
  3. port test -l でチェックする。warningが出る……

    WARN: /usr/ports/japanese/mh/pkg-plist: [74]: If and only if your port is
    DOCSDIR-safe (that is, a user can override DOCSDIR when building this port
    and the port will still work correctly) consider using DOCSDIR macro;
    if you are unsure if this this port is DOCSDIR-safe, then ignore this warning

    DOCSDIRを変えても問題はないか、って?
    Makefileには DOCDIR なんてのがあるんだけど、ちょっと違うようなので、
    ここでは見過ごすことにします。(ツッコミ歓迎)
  4. port diff -d .orig | gzip -c > /tmp/ja-mh.080115.diff.gz (オリジナルのディレクトリとdiffをとります。)
  5. cd /tmp/
  6. uuencode ja-mh.080115.diff.gz ja-mh.080115.diff.gz > ja-mh.080115.uu.txt


ということで送るファイルは出来ました。(このパッチには一部Ctrl+Lが
含まれているので、このようにして送るのが安全みたい。)

さて、send-prしてみます。

http://www.freebsd.org/send-pr.html
(なぜか日本語のページからsend-prしようとするとCAPTCHA風味のところで
正しい入力ではない、と撥ねられてしまうので、本家版のほうからやります。)

一部を転載。



One line summary of the problem: [PATCH] japanese/mh for gcc 4.2 on FreeBSD 7.0
: ports
: non-critical
: low

:
I modified this ports to compile with gcc 4.2 on FreeBSD 7.0.
Please review and consider applying the following patch.
(あやしい英語だ!)
:
ここにさきほどuuencodeしたpatchを読ませる。
Finally, please enter the code from the image below to prove you're not a robot:
(CAPTCHA風味の英数字入力をして・・・)


Submit!

Thank you!

おわり。

しばらくするとsend-prした内容を受け付けた旨のメールが届きます。

手順がおかしいところがあったらコメントいただけると幸いです。

次の目標は
http://www.otsune.com/bsd/ports/install_as_user.html
http://uyota.asablo.jp/blog/2006/02/15/254777
これだな……

2008年1月11日金曜日

募集:ja-plain2がbrokenだったけどなおしてみた。

こんな感じで一応解決?




--- src/macro.h.org 2008-01-11 01:36:11.000000000 +0900
+++ src/macro.h 2008-01-11 01:33:10.000000000 +0900
@@ -2,6 +2,8 @@
* Copyright (C) 1992,1993 NEC Corporation.
* $Id: macro.h,v 2.6 1994/04/19 10:16:49 uchida Exp $ (NEC)
*/
+#define MAX_MACRO_LEN 320
+
#define MACRO_MAXARG 10

#define M_DOC_BEGIN 0
@@ -74,5 +76,5 @@

struct macDefs {
int mdef_number;
- char *mdef_def;
+ char mdef_def[MAX_MACRO_LEN];
};



これでとりあえずTeX, HTMLへの変換動作はうまくいってます。
本当ならヘッダ部の怪しいところ全部、ちゃんと配列に置き換えるべきなのかもしれません。



http://www1.odn.ne.jp/taraijpn/japanese_plain2_20080111.diff.txt
http://www1.odn.ne.jp/taraijpn/japanese_plain2_20080111.tar.gz



portsにしたのでとりあえず、動作確認してくれる人を募集します。
FreeBSD関係ない部分とそうでない部分に分ければLinuxのパッケージにも入れられるかな。
分けてくれる人も大募集。

2008年1月10日木曜日

続:ja-plain2が……

結論: portsっていうレベルじゃないぞ!?

とりあえずデバッグしてみましょう。


--- plain2.org/Makefile 2008-01-09 21:35:05.000000000 +0900
+++ plain2/Makefile 2008-01-09 23:51:01.000000000 +0900
@@ -22,15 +22,11 @@
WRKSRC= ${WRKDIR}/${PORTNAME}-${PORTVERSION:R}p${PORTVERSION:E}.orig
BUILD_WRKSRC= ${WRKDIR}/${PORTNAME}-${PORTVERSION:R}p${PORTVERSION:E}.orig/src

-MAKE_ARGS= CC="${CC}" CFLAGS="${CFLAGS} -DBSD -DKANJI -DPICTURE -DHTML -fwritable-strings"
+MAKE_ARGS= CC="${CC}" CFLAGS="-g -DBSD -DKANJI -DPICTURE -DHTML"
ALL_TARGET= ${PORTNAME}

.include

-.if ${OSVERSION} >= 700042
-BROKEN= Broken with gcc 4.2
-.endif
-
post-patch:
@${REINPLACE_CMD} -e \
's|/usr/lib/plain2|${DATADIR}|g' ${BUILD_WRKSRC}/plain2.h


まあわざわざ書くまでもないところですか。


vmbsd7# make
(中略)
cc -g -DBSD -DKANJI -DPICTURE -DHTML -o plain2 plain2.o readfile.o miscutil.o section.o example.o list.o plaintxt.o spacing.o headfoot.o hint.o justify.o texout.o output.o renumout.o macro.o htmlout.o roffout.o analyze.o table.o title.o picture.o ftitle.o


順当順当。


vmfbsd7# cd work/plain2-2.54p1.orig/src/
vmfbsd7# gdb ./plain2
GNU gdb 6.1.1 [FreeBSD]
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-marcel-freebsd"...
(gdb) run -tex ./plain2.h

Starting program: /usr/ports/japanese/plain2/work/plain2-2.54p1.orig/src/plain2 -tex ./plain2.h

Program received signal SIGSEGV, Segmentation fault.
0x0805253d in macroParse (
s=0x805affd "$2]{j-article}\n\\else\\documentstyle[$3]{jarticle}\\fi\n\\setcounter{secnumdepth}{6}\n\\setcounter{tocdepth}{6}\n\\topsep=0.1cm\n\\parsep=0.1cm\n\\itemsep=0.0cm\n%\\renewcommand{\\bf}{\\protect\\pbf\\protect\\pdg}\n\\begin"..., macroNum=0,
orig=0x805af98 "\\newif\\ifNTT\\NTTfalse\n\\ifx\\gtfam\\undefined\\ifx\\gtfamily\\undefined\\NTTtrue\\fi\\fi\n\\ifNTT\\documentstyle[$2]{j-article}\n\\else\\documentstyle[$3]{jarticle}\\fi\n\\setcounter{secnumdepth}{6}\n\\setcounter{tocdept"...) at macro.c:121
121 *s = '\0';
(gdb)


macro.c で、ポインタsが指してる先に '\0' を書こうとしてますね。
んでそれは文字列の一部、と。え、文字列?


(gdb) list
116 != def_type) {
117 fprintf(stderr,"Improper argtype in \"%s %s\"\n",
118 macNames[macroNum].mname_name, orig);
119 exit(1);
120 }
121 *s = '\0';
122 if (*(s + 2) == '\0')
123 return mip;;
124 new_mip->cmac_next = macroParse(s + 2, macroNum, orig);
125 break;


これでは分からない……。該当する文字列はどこで設定しているか、macro.c を見てみると、


28 struct macDefs texMacros[] = {
29 M_DOC_BEGIN, STR_DOC_BEGIN,
30 M_DOC_END, "\\end{document}\n",
31 M_PLAIN_BEGIN, "\\par\n",
32 M_PLAIN_END, "",


とかやっていて、STR_DOC_BEGIN にあの長ったらしい文字列がdefineされていました。
で、macDefsの定義はというと、grep したらば macro.h にあるという。曰く、


75 struct macDefs {
76 int mdef_number;
77 char *mdef_def;
78 };


こ、これではダメだ……書けるはずがない。というかこれを無理やり? 書けるようにするためのコンパイルオプションが -fwritable-strings だった、というわけですね。

えー、これ直すのー?(実はすぐ直せるんだけど…)

ja-plain2がbrokenなんですけど……(未解決)

実況:ハマる ports いじり。




ja-mhの件で、過去自分が使ったことのあるものでBROKENなものが他にあるのか、調べてみると……
(参考: http://portsmon.freebsd.org/portsconcordanceforbroken.py
なんと懐かしのplain2が壊れている。
FreeBSD 7.0 では gcc4.2.1 なわけだけど、コンパイラオプションの -fwritable-strings が無いため、らしい。

なら外してみればいいじゃない!(ぉ

(本当はrootでやっちゃいけません。たぶん。)



vmbsd7# cd /usr/ports/japanese
vmbsd7# cp -r plain2 plain2.org
vmbsd7# cd plain2


こちゃこちゃとMakefileを書いてみよう。




vmfbsd7# diff -u plain2.org/Makefile plain2/Makefile
--- plain2.org/Makefile 2008-01-09 21:35:05.000000000 +0900
+++ plain2/Makefile 2008-01-09 22:20:32.000000000 +0900
@@ -22,14 +22,14 @@
WRKSRC= ${WRKDIR}/${PORTNAME}-${PORTVERSION:R}p${PORTVERSION:E}.orig
BUILD_WRKSRC= ${WRKDIR}/${PORTNAME}-${PORTVERSION:R}p${PORTVERSION:E}.orig/src

-MAKE_ARGS= CC="${CC}" CFLAGS="${CFLAGS} -DBSD -DKANJI -DPICTURE -DHTML -fwritable-strings"
+MAKE_ARGS= CC="${CC}" CFLAGS="${CFLAGS} -DBSD -DKANJI -DPICTURE -DHTML"
ALL_TARGET= ${PORTNAME}

.include

-.if ${OSVERSION} >= 700042
-BROKEN= Broken with gcc 4.2
-.endif
+#.if ${OSVERSION} >= 700042
+#BROKEN= Broken with gcc 4.2
+#.endif

post-patch:
@${REINPLACE_CMD} -e \


結果。
http://www1.odn.ne.jp/taraijpn/plain2_errlog.txt

なにが恐ろしいってbinary出来てるんだよなあ……おそるおそる実行してみよう。
(やっぱりrootでやっちゃいけません。)




vmfbsd7# ./plain2 -tex ./plain2.h
Segmentation fault (core dumped)



そりゃそうだ。まあ plain2.h に手を入れて warningを消すことを考えよう。

http://www1.odn.ne.jp/taraijpn/patch-src::plain2.h




vmbsd7# make
(中略)
===> Building for ja-plain2-2.54.1_2
cc -O2 -fno-strict-aliasing -pipe -DBSD -DKANJI -DPICTURE -DHTML -c plain2.c
cc -O2 -fno-strict-aliasing -pipe -DBSD -DKANJI -DPICTURE -DHTML -c readfile.c
cc -O2 -fno-strict-aliasing -pipe -DBSD -DKANJI -DPICTURE -DHTML -c miscutil.c
cc -O2 -fno-strict-aliasing -pipe -DBSD -DKANJI -DPICTURE -DHTML -c section.c
cc -O2 -fno-strict-aliasing -pipe -DBSD -DKANJI -DPICTURE -DHTML -c example.c
cc -O2 -fno-strict-aliasing -pipe -DBSD -DKANJI -DPICTURE -DHTML -c list.c
cc -O2 -fno-strict-aliasing -pipe -DBSD -DKANJI -DPICTURE -DHTML -c plaintxt.c
cc -O2 -fno-strict-aliasing -pipe -DBSD -DKANJI -DPICTURE -DHTML -c spacing.c
cc -O2 -fno-strict-aliasing -pipe -DBSD -DKANJI -DPICTURE -DHTML -c headfoot.c
cc -O2 -fno-strict-aliasing -pipe -DBSD -DKANJI -DPICTURE -DHTML -c hint.c
cc -O2 -fno-strict-aliasing -pipe -DBSD -DKANJI -DPICTURE -DHTML -c justify.c
cc -O2 -fno-strict-aliasing -pipe -DBSD -DKANJI -DPICTURE -DHTML -c texout.c
cc -O2 -fno-strict-aliasing -pipe -DBSD -DKANJI -DPICTURE -DHTML -c output.c
cc -O2 -fno-strict-aliasing -pipe -DBSD -DKANJI -DPICTURE -DHTML -c renumout.c
cc -O2 -fno-strict-aliasing -pipe -DBSD -DKANJI -DPICTURE -DHTML -c macro.c
cc -O2 -fno-strict-aliasing -pipe -DBSD -DKANJI -DPICTURE -DHTML -c htmlout.c
cc -O2 -fno-strict-aliasing -pipe -DBSD -DKANJI -DPICTURE -DHTML -c roffout.c
cc -O2 -fno-strict-aliasing -pipe -DBSD -DKANJI -DPICTURE -DHTML -c analyze.c
cc -O2 -fno-strict-aliasing -pipe -DBSD -DKANJI -DPICTURE -DHTML -c table.c
cc -O2 -fno-strict-aliasing -pipe -DBSD -DKANJI -DPICTURE -DHTML -c title.c
cc -O2 -fno-strict-aliasing -pipe -DBSD -DKANJI -DPICTURE -DHTML -c picture.c
cc -O2 -fno-strict-aliasing -pipe -DBSD -DKANJI -DPICTURE -DHTML -c ftitle.c
cc -O2 -fno-strict-aliasing -pipe -DBSD -DKANJI -DPICTURE -DHTML -o plain2 plain2.o readfile.o miscutil.o section.o example.o list.o plaintxt.o spacing.o headfoot.o hint.o justify.o texout.o output.o renumout.o macro.o htmlout.o roffout.o analyze.o table.o title.o picture.o ftitle.o
vmbsd7#



美しい :D

だがしかし。




vmfbsd7# ./plain2 -tex plain2.h
Segmentation fault (core dumped)


……あれー?

次回: -fwritable-strings に込められた意味とは!?
(過去どこかのblogでまったく同じハマり方をしている記事を見かけています。)