10月 262011
 

ウェブで検索すると、もう既にたくさんの人がこの題材で色々書いているようですね。なのであえて書く必要も無いのではないか。と、ちょっと思うのですが、僕も書いてみます;-)。

ちょっと変わった方向性から書こうと思っています。

まず、xterm とか emacs などは X11 のリソース設定しているのですが、今回はそれについては一切は書きません。コマンドプロンプトから以下のコマンドを投入し、リソース情報を全てさっぱり削除しそこから xterm を起動します。

% xrdb -remove

 
このあと、プロンプトから xterm を起動します。まずはオプション無しで。すると以下のような状態で xterm が起動すると思います。そして jman ls と打った状態です。

xterm-default.png

なお、このブログでは写真のサイズは横幅 500 ピクセルと決めているので、今後は全て横幅 500 ピクセルで表示します。上記のキャプチャのみは横幅が 488 ピクセルなのでちょっと小さめ。

まぁ、半角文字も日本語文字も Fixed フォントで表示されているので一応は無事に起動して、無事に表示できるようです。

問題はここからで、せっかくなので自分好みのフォントを利用したい。はたまた xterm は pango やcairo をリンクしているのでアンチエイリアスを有効にしたい。などと思い、色々な人が格闘しているわけですね。
しかし、全くダメ・・。利用に耐えられない表示のしかたをしてくれます。これについて、皆さん色々書いているんですね。

xterm 自体は X11 のリソースとは別にオプションでフォントを指定できます。~/.Xresources では XLFD でフォントを記述するのですが、 -fa オプションでは fc-list で表示されるフォント名を指定します。

以下、2,3 のフォントを指定したときのコマンドラインとキャプチャを掲載してみます。

-.フォントサイズは 10 で画面の大きさは 80×30 です。
-. LANG は ja_JP.UTF-8 です。

o.メイリオフォントを指定して起動

% xterm -fa メイリオ -fs 10 -geometry 80x30

 
xterm-meiryo_500x400.png

o.Osaka の UNICODE フォントを指定して起動

% xterm -fa osaka_unicode -fs 10 -geometry 80x30

 
xterm-osaka_unicode_500x400.png

osaka_unicode は比較的良い線行っているんですが、もうひといきっ!! って感じ・・。

それにしても皆さん、この表示を嫌うんですな。カーソールの四角は全角四角ちっく。あげくの果てには全角文字の間に半角スペースが入る。非常に横長な xterm の起動画面になってしまう。

ports から xterm を make するときには WITH_WIDE_CHARS=true を指定する必要があるのでこれは有効になっています。そして、xterm でマルチバイト、CJK フォントを正しく表示するためのオプションとしては -cjk_width ってのがあるのですが、この -cjk_width がまるで有効になっていない。と、言うことですね。

いやぁ・・。まいったまいった・・。

UTF-8 を扱う場合、日本語の表示には 4Byte 必要なのだそうで、その影響が出て文字の間に半角スペースが入るとか入らないとか。考えてみると MySQL で UTF-8 を利用すると Key のサイズが既定値未満なはずなのに「キー値が長すぎる。」とエラーになる時があるのですが、その現象とも確かに似ているような似ていないような気がしますね。

で、本当に正しく表示できんのかい?とか思い、自分の持っている(インストールされている)フォント全てを xterm に指定して確認してみました。

% fc-list | wc -l
487

 
ふむ。僕の FreeBSD には 487 個のフォントがインストールされているようですね;-)。では、以下のコマンドを実行してコマンドイメージを出力し、早速確認してみましょう。

% fc-list | awk -F, '{print "xterm -fa \"" $1 "\" -fs 10 -geometry 80x30 &"}'

 
これを | sh -X とかするととんでもないことになるので、5,6 個ずつ起動することにします。

確認してみたところ、有名どころなフォントは全て全滅でしたね。正しい表示を全くしてくれません。
あと、日本語を持っていないフォントは日本語部分は表示してくれない。コード自体を持っていてもフォント自体が無いフォントは豆腐が表示されます。

そんな中、一個だけありましたよ。正しく日本語を表示してくれるフォントが;-)。

% xterm -fa "細明體" -fs 10 -geometry 80x30

 
xterm-03_500x400.png

おぉ。ちゃんと日本語が表示できて、文字と文字の間に半角スペースが入ることなく表示してくれていますね。

「けっ。そんなこと言ったってオメーの持っているフォントだろっ。」とか思うんですが、このフォント名で検索してみると、あややややや? このフォントはフリーなの? (@_o)。
いやね。自分自身、このフォントを、いつ、どー言うタイミングでインストールしたか全く覚えてないんですよf(^^;;。

以下のサイトからダウンロード可能なフォントのようです。

http://ja.cooltext.com/Download-Font-細明體+MingLiU

ダウンロードしたあと、インストールして、そのあと fc-cache すれば利用可能になるかと思います。

ちょっと明朝体チックでそれでいて色が薄いので常用に耐えられるかはちょっと疑問ですが、一応は正しい表示をしてくれてアンチエイリアスが有効になって xterm が起動してくれます。

あと、この 細明體 ってフォントは上記サイトでは「日本語フォント」ではなく「中国語フォント」のカテゴリの中に入っているんですね。 中国語のフォントの中に日本語の文字のパタンが埋め込まれている、なんともすごいフォントなのでしょうなぁ。

と、言うことで、今の段階の xterm は、もしかしたらフォント側で対応できていれば綺麗に表示できるんではないかなぁ。と思った僕の考え、合ってる?

あと、「僕も私も xterm で表示が綺麗になるフォント持っているよー。」ってのがあったら教えて頂けませんでしょうか。等幅ゴシックなフォントがあれば嬉しいなぁ。と、ちょっち思っております;-)。

10月 242011
 

いやね。とあるタイミングで ports を csup したら KDE のバージョンが KDE-4.6.5 から KDE-4.7 系にアップデートしていたので「お。新しい KDE4 がリリースされたっ!!」とか思い portupgrade -arR しようかと思ったのだけど FreeBSD 自体も 9 系が CURRENT から RELENG_9 になったので、せっかくだから RELENG_8 から RELENG_9 にしてしまえーーっ!! ってことで、 NotePC にインストールされている FreeBSD を FreeBSD 9.0-RC1 にしてしまったのでありました。

バージョンアップしたのはデスクトップと NotePC の両方。で、今回の記事は ThinkPad X100e についてになります。

それにしてもこの NotePC、夏はてんでダメですな。温度が上がりすぎて勝手に shutdown が走ってしまう。裏を返すと正常に ACPI が動作している。とも言うんですが、Windows7 なんかは夏場の暑い時期だと起動後五分も持たずに shutdown、FreeBSD でも hw.acpi.thermal.tz0._PSV=80.0C とか設定入れて CPU クロックを落としたりするんだけど、自動 shutdown してしまう。メッセージを出力しつつ・・。orz。

熱い CPU っちゅーのはツライですなぁ・・。

と、言うことで本題の suspend/resume についてですが、以前、一回記事にしていますよね。そのとき試したのは RELENG_8 だったのだけど、今回は RELENG_9 でトライっ!! って感じ。で、見事に supend/resume してくれます。わーーいっ!!

そもそも ThinkPad X100e は無線 LAN カードに if_iwn を利用しているのですが、こいつがまた FreeBSD では動作しない・・。orz RELENG_8 では、以前は一時的に動作していたのに 2011/07/05 くらいに改修が入ってそれ以降は動作しなくなってしまった・・。RELENG_9 でも試したんだけどやっぱり動作しない。

しょーがないので僕の場合、無線 LAN は USB の if_run を利用していたのであります。が、こいつは suspend/resume の時に悪さすることが解りました。

suspend/resume するマシンの僕の環境は以下の通り

0. 僕の環境
・FreebBSD 9.0-RC 2011/10/19 10:00 頃に csup して来たものを利用
・Xorg-7.5.1 + dri-7.6.1,2 + xf86-video-ati-6.14.2
・KDE-4.7.2 しかし、なぜだか解りませんがデスクトップ効果が有効になりません・・。orz

では、実際に suspend/resume する時の手順を以下に書いてみましょう。

1. Xorg の画面を抜ける
X が起動していてその上で動作している端末上で acpiconf -s3 や KDE4 の[スリープ]を押しただけだと suspend はしますが resume してくれません。X を起動している人は Ctrl+Alt+F1 などでいったん X を抜けてコンソールの画面を表示させます。

なお、sysctl にはこれを自動でやってくれる hw.syscons.sc_no_suspend_vtswitch という MIB があるのですが、これが有効になってないんですよねぇ・・。なので手動で X を抜けます。

2. とりあえず無線 LAN の利用を停止する
僕の場合は run0 で認識している USB NIC を引っこ抜きました。その後で acpiconf-s3 とたたきました。すると suspend してくれます。その後、フタを閉じて開くと PC と言うか OS が目覚めるのでリターンキーを 2,3 発叩きます。するとコンソールが現れると思います。sync 連打して無事を確認します。おーー。 resume しましたねぇー。パチパチパチ。

ここで run0 で認識する USB NIC を接続すると無線 LAN が利用できるようになります。後は Ctrl+Alt+F2|3|4 などを押して X を表示させれば無事に X の画面が表示してくれると思います。

RELENG_8 の頃はコンソールのプロンプトが返ってきても X の再表示ができなくて drm.ko が暴走していたんだけど、 RELENG_9 ではそんなことは無いようです。それが大きな違いでしょうかね。

3. USB NIC は実はくせ者?
さてさて、上記 2. で suspend/resume が利用できるようになりました。もう一回、上記の手順で suspnd/resume すんべかと思い試してみると・・。あいや。orz resume は一回限り有効で、二回目の resume ではコンソールが凍り付きますね。

この場合は、無線 LAN の利用をきっぱりとあきらめましょう。一回目の suspend 前に X の画面を抜けた後、USB NIC を引っこ抜きます。その後で if_run を kldunload します。これがミソです。

有線 NIC を利用する場合、つまり if_re を利用している限りでは何回も suspend/resume してくれます(僕が試したのは連続四回ですが;-)。

そう考えると usb か、 if_run のどちらかに問題があるような気がしないでもないですが、今の段階ではカーネルがそれらしいログを出力してくれないのでちょっとまだ原因がわかりません。また、if_run 以外の 無線 LAN ドライバではどうなのか?もちょっと解りません。

もし if_iwn が動作したとしたら、それは多分 PCI バスに接続されているので、なんか動作しそうな感じはしないでもないんですけどねぇ。

以上は、僕が持っている ThinkPad X100e で RELENG_9 な FreeBSD を走らせたときの suspend/resume の動作になります。
けども RELENG_9 も生ものなので今日動いたものは明日は動かないかもしれない部分も多々あるので、今の環境を保持しておいたほうが良いのかなぁ?

どっちにしても FreeBSD において supend/resume したのは実に CASIO FIVA MPC-206 以来の快挙なのであります。嬉しいですなぁ;-)。わーーいっ!!

後はデスクトップ機で suspend/resume してくれるとすんげー嬉しいんですけどね;-)。

8月 242011
 

Firefox が 12 週間に一回バージョンアップするというとんでもない所業に出て、つい最近 Firefox6 が出たんですが、こいつがなんかむちゃくちゃ CPU を食いまくる。起動直後なんて一人で一個の CPU を使いやがる。ってんで Firefox の利用は最近断念しつつあります。

と、言うことで何か別のブラウザを捜すべ。とか思って色々調べてみたのですが、 QT ベースのブラウザってのは結構色々あるんですね。 arora だとか rekonq とか QtWeb (これは ports になってない) とか。

けど、結局 QT ベースブラウザってどうあがいても emacs キーバインドが利用できないみたい。

ちょっと話はそれますが KDE4 のアプリケーション群の中で emacs キーバインドが設定できるのは kwrite だけなんですよね。で、こいつの設定の「ショートカットを設定」を見ると 「Kateコンポーネント」ってのがあって、これが編集時のショートカットキーの変更を可能としている。

ちゅーこって KDE4 ではショートカットの設定のところで「Kateコンポーネント」を全てで編集できるようにすれば emacs キーバインドが可能になるのになぁ。と思うのでありました。どっかで呼びたせたりしないのかなぁ。

 
で、ここで話はブラウザ全般のネタに戻るのですが、以下ちょっと色々書いてみます。

 
・chromium
QT ベースのブラウザは emacs キーバインドが利用できないので www/chromium をインストールしてみました。 Chrome のオープンソース版と言えば良いのかな? こいつは Firefox6 よりも CPU 利用率が低いみたいなのでまぁ常用できるかもしれない。

それにしても chromium で emacs キーバインドはできないのかな?とか調べたら GTK2 側で emacs キーバインドの設定をすれば良いと言うことが解ったので早速やってみました。

% cd /usr/local/share/themes/Emacs/gtk-2.0-key/
% cp gtkrc ~/.gtkrc-2.0

 
これだけ。普段 KDE4 とか利用していると GTK2 のこととかほんとにわかんない。僕だけかもしれないけど。で、この設定を入れるとほぼ全ての GTK2 アプリは emacs キーバインドになるみたいです。Firefox の場合はアドオンで firemacs 入れているので気にならないのですが、 Thunderbird3 とかも emacs キーバインドになってくれたりします。すげー;-)。

 
・midori
GTK2 的なブラウザとしてはもう一個 www/midori を試してみました。インストールしてから起動すると・・。ふむー。随分と前時代的な雰囲気を醸し出していますf(^^;;。細かい設定は「設定」→[エクステンション]として全て項目にチェック付けてと・・。とかします。

ツールバーの設定などはブラウザではできなくて、~/.gtkrc-2.0 に項目を追加していくと言ういかにも UNIX ライクな設定方法ですf(^^;;。そして、見かけは本当に”GTK2 ベース”って感じです。多分常用はしないと思われますが pkg_delete もしていません;-)。

 
・arora
QT ベースのブラウザです。まぁ、非常に質素である意味 midori に通じるものがあるかもしれません。konqueror の不要な部分を全部削ぎ落して軽量化したって感じのブラウザです。けどもまぁ、QT ベースなので KDE4 上で利用する分には割としっくり来ますかね。

フツーに問題なく利用できます;-)。

 
・QtWeb
QT ベースのブラウザです。Windows 版もバイナリで配布されています。arora と一緒で本当に質素・軽量なブラウザです。 FreeBSD では ports になってないので自分で make して、チロッと起動して動作確認などをしただけです。

FreeBSD で make するには QT4 の CJK なプラグインが必要になります。 japanese/qt4-codecs-jp 相当の中国・韓国・台湾版をインストールします。まぁ、ソースを変えて libqjpcodecs.so しか呼ばない(リンクしない)ようにすれば良いだけなんですけどね。 一応 make は通って起動はできます。ただ、 ports する意味あるの?って感じがするので僕は ports を作ってませんが;-)。

 
・rekonq
僕的には本命のブラウザですなぁ www/rekonq 。名前的に「konqueror よ再び。」みたいな感じ、車輪の再開発とか。 konqueror の悪いところを削ぎ落して再度作り直しましょう。みたいな感じのブラウザらしいです。

とりあえずキャプチャなどを。下が konqueror 、上が rekonq です。

rekonq.png

見た感じ・使った感じは Safari と Chrome の良いところを取り込んで konqueror の悪いところがちょっと残った。と言うような感じでしょうか;-)。

機能も konqueror 程度にはあるし、何よりも konqueror よりも安定している感があります。 kubuntu では rekonq が default ブラウザになったんだっけか?

FreeBSD では ports からインストールしても日本語対応していません。 ja な mo ファイルが無いんですな。あいや・・。しょーがないので kubuntu のを持ってきてしまいましょう;-)。

以下の URL から language-pack-kde-ja-base_10.10+20110618_all.deb を拾ってきます。

http://pkgs.org/ubuntu-10.10/ubuntu-proposed-main-i386/language-pack-kde-ja-base_10.10+20110618_all.deb.html

そのあとは以下の要領でインストールすると rekonq の日本語化ができます。

% mkdir deb
% cd deb/
% mv ~/language-pack-kde-ja-base_10.10+20110618_all.deb ./
% ar -vx language-pack-kde-ja-base_10.10+20110618_all.deb
% tar xvzfp data.tar.bz2
% cd usr/share/locale-langpack/ja/LC_MESSAGES
# cp rekonq.mo /usr/local/kde4/share/locale/ja/LC_MESSAGES/

 
一部翻訳されていないところも有りますがほぼ問題ないほどに利用できるでしょう。

利用した感想ですが、konqueror よりは遙かに良いと僕は思います。これが default ブラウザでも問題無いと思います。「KDEシステム設定」の中の「デフォルトのアプリケーション」のブラウザとして設定しましたが、各アプリの URL をクリックするとスルスルっと konqueror よりも軽やかに起動するみたいな感じでしょうか。

ただ、本当に KDE4 のアプリと言うか QT ベースなのでやはり emacs キーバインドは利用できないですね。長文書く時、僕はダメです。

と、言うことで Firefox6 と言うか、 Firefox がこれからドンドン変な方向に進んで行きそうなのでそろそろ潮時かぁ? とか思いブラウザを試してみましたが、サイトを見るときは rekonq 、文章を書く時には chromium 。って感じになりそうです。

あ。最後にですが、筆者は Flash などいうのはまるで見ません。プラグインインストールしていません。ブラウザの設定で「プラグインはロードしない。」をわざわざ選択しています。iOS ユーザにとって Flash プラグインは必要無い。みたいな;-)。

8月 102011
 

以前、このブログのエントリで「mozc-emacs(mozc.el) な ports 作りました。」ってのを書きました。でもってノラ pors を作って置いておいたのですが、NakataMaho さん が commt してくだり、ports として組み込まれました。ありがとうございました。

で、前回の記事とコメントに書いているのですが、 FreeBSD の ports になっている mozc は随分とバージョンが古い。おかげで mozc-el はかな入力に対応していない。など書いていたのてすが、本日 csup したら japanese/mozc-el が mozc の最新版になりましたね。うれしーっ!!

ってんで、早速 japanese/mozc-el を make install したのですが、なんとなっ!! mozc-server のバージョンが古いので mozc.el と一緒にインストールされる mozc_emacs_helper が mozc-server と通信できない・・。orz。

daichi さん はいつ japanese/mozc-server をバージョンアップしてくれるのだろう・・。とか思いつつ、やっぱり ports ができる(リリースされる)まで待ってられないのでとっとと自力で最新版を make してしまいましょう。

その手順を今から書きます。

1. フツーに ports から japanese/mozc-server、 japanese/mozc-tool 、japanese/mozc-additions をインストールします。この段階では mozc は 0.13.523.102 がインストールされます。
2. インストールが完了したら mozc_tool とか mozc_tool_config などを起動して、入力設定とか全部の設定を済ませてしまいます。

以上が前準備です。続いていよいよ mozc-el のインストールです。

3. japanese/mozc-el をインストールします。これで mozc の 1.1.773.102 のバージョンのソースコードを持ってきて mozc.el と mozc_emacs_helper の最新版がインストールされます。
4. japanese/mozc-server の環境を以下のように整えます。

# cd /usr/ports/japanese/mozc-server
# mv files files.orig
# cp -pr ../mozc-el/files ./
# cp -pr ../mozc-el/distinfo ./
# vi Makefile

 
5. japanese/mozc-server の Makefile の以下の行を変更します。

    :
PORTVERSION=    1.1.773.102
#PORTREVISION=   1
    :
${PYTHON_CMD} build_mozc.py build_tools \
-c ${BUILD_MODE} ; \
${PYTHON_CMD} build_mozc.py build \
-c ${BUILD_MODE} \
server/server.gyp:mozc_server
    :

 
ちょっと説明すると、
・PORTVERSION は最新版のバージョンにします。
・PORTREVISIONの行は削除します。
・–qtdir=${QT_LIBDIR} オプションを消します。

後は make NO_CHECKSUM=yes (distinfo をコピーした場合は NO_CHECKSUM=yes は必要無し) して make 、 その後は make deinstall;make reinstall すれば mozc-server も最新のものになって mozc.el と通信できるモノがインストールされます。

今回は japanese/mozc-tool はインストールしてないので古いバージョンのままとなっていて、多分正常に動作しないと思われます。なので、一番最初に mozc の設定をばっちりとやってしまいましょう。となるのであります;-)。

さてさて。mozc が最新版のバージョンになると mozc.el が動作し、emacs ではミニバッファで文字の選択ができるようになります。また emacs -nw の状態でも日本語入力ができるようになるので、 WITH_CANNA のときみたいに emacs が非常に嬉しく使えるようになるのであります。

それにしても mozc-server の ports は、メンテナの方、早く更新してくれないかなぁ。と思うのでありますが、今回のインストール方法は ports の japanese/mozc-server のバージョンがアップするまでの一時的な策ということで;-)。

それにしても NakataMaho さん。ありがとうございました。

8月 082011
 

現在、自宅のサーバは 7.4-STABLE でデスクトップ PC と NotePC は 8.2-STABLE にしています。そして、IPv6 ルータとして動作しているちょっとワンパクな EeePC は 7.4-STABLE だったんだけど、これを 9.0-BETA1 にしてみました。

このブログでは過去に何回か EeePC について取り上げていたのですが、8 系 STABLE もちょっと怪しい動作だったので 7.4-STABLE にしていたのだけど、それでも動作が怪しいので今回自宅内の FreeBSD の中ではいち早く 9.0-BETA1 にしてみた。という感じです。まぁ、インストールされている ports の数が一番少ない。ってのもあるんですけどね;-)。

では早速 9.0-BETA1 をインストールした感想などを書いてみたいと思います。

0. EeePC のシステム構成
EeePC は内蔵の SSD が 4GB しかないので 60GB の外付け USB HDD を接続し、そこに FreeBSD をインストールして起動しています。

ルータなので NIC は二個利用しています。一個は内蔵 NIC の ae0 です。もう一個は USB の BUFFALO LUA2-TX LUA2-TX と言うヤツで、これは 7.4-STABLE では aue0 として認識されていました。

内蔵無線である ath0 は今回利用していません。

1. インストーラ変わったね
最初、9.0-BETA1 を CD-R に焼いて、母艦に EeePC で利用する HDD を接続して久しぶりにクリーンインストールしようかと思ったのですが、インストーラが大きく変更されていて焦りました。母艦の HDD をケーブルからはずせば良かったんだけど、接続したまま CD で起動したら母艦の HDD しか認識してくれない。
USB HDD は通常 /dev/da0 とかで認識されるんだけど、見えなかったのでシューリョー。って感じ。結局、CD-R からのクリーンインストールは諦めました。

2. csup からバージョンアップ
EeePC は 7.4-STABLE の状態で起動するのでこの状態で csup して一気に CURRENT に持って行きます。 EeePC の CPU は遅いので make buildworld+make buildkernel は大体 14 時間位かかりました。orz。

9.0-BETA1 の起動後に注意する点としてはやはり USB 回りですね。以前に書いた「FreeBSD RELENG_8 で USB 機器からブートする。」って設定が必要です。
あと、7.4-STABLE からのバージョンアップの場合、すっかりと忘れていた(8 系 では既にそうなっいる)のですが、USB コントローラもカーネルモジュールになっていたのですね。カスタマイズカーネルを利用する場合には /boot/loader.conf に uhci.ko ohci.ko ehci.ko をロードするようにしないと、USB が一切認識してくれないです。

とまぁ、こんな感じで /usr/src/Makefile の中に書いてある手順に従うとバージョンアップが終わります。

あ。一点書いておきましょう。make delete-old とか make delete-old-libs するとひたすら “y” と打たなければならずかぁなりしんどい。そんな場合は以下のコマンドを;-)。

# yes | make delete-old

 
ドドドと削除してくれます;-)。

4. ports のインストール
ports の make config のときの青い画面の動作がちょっと変わってビビリました。[X] hoge でメニューを選択したあとに TAB キーを押すと [ OK ] から [ CANCEL ] にカーソルが動いてしまう。選択したら TAB キーを押さずにそのままリターン。みたいな感じになりました。

それにしても emacs のインストール時、全てのオプションを WITHOUT_hohe=true にしたのに X をインストールしようとしてしまう。 /etc/make.conf には WITHOUT_X11=yes って書いてあるのにねぇ。なので emacs は結局 ports からインストールせずノラビルドでインストールしました。

ちなみに サーバの場合、/etc/make.conf には以下が書いてあると良いかと思われます。

WITHOUT_X11=yes
WITH_THREADS=yes

 
WITH_THREADS=yes を書くと perl とか python は -threaded でインストールされます;-)。

3. 起動後の各種設定
/etc/rc.conf のネットワーク設定がガラリと変わりました。これはじっくり見て正しい設定をしたほうが良いかと思われます。

IPv6 回りで気がついた点として ipv6_enable=”YES” が無くなり ipv6_activate_all_interfaces=”YES” になりました。

でもって ipv6_activate_all_interfaces は “YES” でない場合は ifconfig_IF_ipv6 で判断して、 “_IF_” のインターフェースにしか link local アドレスが付加されません。今までは全てのインターフェースに link local が付いていただけに「すげー。」とか、ちょっと思います;-)。
ちなみに link local が付加されないインターフェースってのは「IPv6 を利用しないインターフェース」って認識で良いと思います。

あとは、alias アドレスの設定方法が変わりましたね。 IPv4/IPv6 で同一の設定になりました。

ipv6_prefix_IF=”” の設定も驚きました。今までは最後に “::” とか付けていたのですが、これを付けるとダメみたいです。

以下、簡単な例です。

defaultrouter="192.168.1.254"
gateway_enable="NO"
ipv6_defaultrouter="NO" ipv6_gateway_enable="YES"
ifconfig_ae0="inet 192.168.1.192 netmask 255.255.255.0" ifconfig_ae0_alias0="inet 192.168.1.253 netmask 255.255.255.0"
ifconfig_ue0="DHCP"
ipv6_activate_all_interfaces="YES" #ipv6_network_interfaces="auto" #ipv6_default_interface="ae0"
ipv6_ipv4mapping="NO"
ipv6_prefix_ae0="3ffe:3e0:a71:fee1"
ifconfig_ae0_ipv6="inet6 3ffe:f3e0:fa71::1 prefixlen 64"
ifconfig_ae0_alias1="inet6 3ffe:f3e0:fa71::ffff:2 prefixlen 64" ifconfig_ae0_alias2="inet6 3ffe:f3e0:fa71::22:1 prefixlen 64"
rtadvd_enable="YES" rtadvd_interfaces="ae0"

 
あ。aue0 名前が変わりました。8 系からかな?僕は 8 系で aue0 使ったことないので解らないのて゛すが ue0 になりました。wlan0 と一緒で USB NIC は全て ue0 になるのかなぁ? USB NIC は一種類しか持ってないので良く解らないのですが。

4. はまり道
上記 IPv6 のネットワーク設定をしたのですが、一番はまったのは gif0 に link local アドレスが付加されない。ってところでしょうか。gif0 に link local が無いので IPv6 ルーテイングができずにかぁなり焦りました。

で、詳しい方に irc で教えてもらったのですが、 /etc/rc.d/auto_linklocal があるとダメらしいです。合わせて /etc/rc.d/network_ipv6 も残っていたりする。この二つの rc ファイルは 8 系までのファイルで 9 系というか、現在の CURRENT では不要なファイルになっています。

/usr/src/Makefile 内に書かれている内容でバージョンアップするのですが、そのとき 9. mergemaster ってのがあって、それを実行します。この時、以下のように聞かれます。

*** Checking /etc/rc.d for stale files
*** The following files exist in /etc/rc.d but not in /var/tmp/temproot/etc/rc.d/:
auto_linklocal network_ipv6
The presence of stale files in this directory can cause the dreaded unpredictable results, and therefore it is highly recommended that you delete them.
*** Delete them now? [n]

 
ここで「削除するのはイヤ。」とか思いとどまって “n” などと叩いてしまうと gif0 に link local アドレスが付加されることは無いのであります。上記二つのファイル (auto_linklocal と network_ipv6) は CURRENT では既に不要なファイルなので、サクッと “y” を叩いて削除してしまいましょう;-)。

あとは ipfw の設定とかまだもう少し残っていたりしますが、一応ここまでがこの週末に行なった作業なのであります。
あとはもう少し使い込んでみてから色々やってみたいと思います。 ath0 なんかも試してみたいですね。

CURRENT に慣れてきたら NotePC とかデスクトップ PC に導入したいと思います。

それにしても /etc/default/rc.conf はじっくりと眺めたほうが良いかもしれないです;-)。あ。あと man rc.conf(5) も;-)。

8月 042011
 

okular というのは KDE をインストールすると利用できる PDF を閲覧するためのソフトです。Acroread よりも軽いので僕は Acroread をインストールせずにこればっかり利用しているのですが、時々日本語が表示できない PDF ファイルが存在するのでちょっとコマリモノなのでありました。

最初はほっといてそー言う PDF ファイルはあきらめることにしていたのですが「まぁ。いっちょ調べてみるか。」と言う気になったのでありました。

あ。今回は多分、FreeBSD に特化したネタになると思います。 ubuntu には多分、まぁるで関係の無いお話だと思います。

で、調査を開始したのですが、まずは「敵」つまり PDF ファイルを知るところから始めます。 okular で日本語が表示できない PDF ファイルを Windows 版の Acroread10 で表示させ色々情報を取得するのですが、大体以下のようなことが解ってきました。

o. iText と言う PDF プリンタを利用した PDF ファイル。
o. どうやら PDF 自体にフォントが無いようだ。
o. Windows 版 Acroread では代替フォントで表示してくれるねぇ。
o. PDF ファイル自体のフォントは HeiseiKakuGo-W5 と言う名前ですねぇ。

iText というのは今回ちゃんと調べてないんですけども、Java ベースの Acrobat4,5 互換の PDF プリンターってイメージです。出力された PDF ファイル自体にはフォントは埋め込まずビューワのほうでフォントをマッチさせるみたいですね。

さてと。以上が日本語表示できない PDF ファイル自体の調査ですが、ここからは okular の調査の開始です。

そもそも、okular が代替フォントに日本語を含むフォントを指定できないのが問題でないの?と思うわけです。[設定]のところに「代替フォント」とか項目があれば簡単に話は済んでしまうんですけどもそんなのはありはせんのです・・。orz。

で、 okular の調査は更に続くのですが、PDF ファイルの表示には poppler というのが深く絡んできていてこいつは fontconfig とも密接に絡んでくる。ということが解りました。 poppler というのは xpdf からの派生と言うか発展形のモノらしいです。こいつは graphics/poppler や graphics/poppler-data とからみ合って日本語を表示してくれるらしいんですな。

けれど、その poppler が okular とどこで結びついているのか全く解らない。okular のコード見ると Qt と絡んでいるは伺えるんだけどもね。あー。Qt 的には graphics/poppler-qt4 というのもありますねぇ。

okular を起動して [ファイル]→[プロパティ]から表示されるダイアログの「フォント」タブに現在利用しているフォントが表示されます。

このキャプチャは日本語が表示できないときのフォント。

Okular_font1.png

HeiseiKakuGo-W5 に対応するフォントとしては Bitstream Vera が選択されたことが解ります。この Bitstream Vera は日本語を持ってないので日本語が表示できない。ある意味納得。けど、そしたらどうしてそのフォントが選択されるんだろう?と悩むわけです。

そーこーしている間に「これはどうやらまじめに ~/.fonts.conf を書かなければならない。」と思えるようになってくるわけです。

色々調べて書きましたよ。fontconfig の設定は /usr/local/etc/fonts/ になるんですけども、この中に conf.avail/50-user.conf と言うファイルがあるんですね。このファイルの中を見ると、参照先が書かれているのでそこにファイルを一個用意してあげます。

僕の場合、 mkdir ~/.fonts.conf.d/ したあとにこのディレクトリの中に以下のフアイルを置きました。ファイル名は 51-HeiseiKakuGo-W5.conf にしました。 50-user.conf の次の番号ということで 51 にしました。そのあとの HeiseiKakuGo-W5 の部分は好きな文字列を指定できます。数値と .conf は変更することができません。

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <dir>/usr/local/lib/X11/fonts/sitefont</dir>
    <alias>
        <family>HeiseiKakuGo</family>
        <prefer>
            <family>MS ゴシック</family>
        </prefer>
    </alias>
</fontconfig>

 
さてと。設定が終わったので再度 okular を起動します。どうだっ!! あやや・・。orz

実は family の部分ですが、 HeiseiKakuGo-W5 と書いてもダメでした。上のように HeiseiKakuGo と書いたら Bold フォントは MS ゴシックになったのですが Regular フォントは相変わらず日本語が表示されない。

上記のダイアログはこんな感じ・・。そんなバナナ・・。orz。

Okular_font2.png

上二個のフォントは MS ゴシックを利用できるようになりましたが、下の二個のフォントは今まで通り Bitstream Vera を参照しているようです。orz。ダメだこりゃ (c)いかりや長介。

もう一度仕切り直し。各種設定を眺めます。また、ウェブで探し回ります。で、思ったのが、ubuntu のほうは日本語環境ちゃんとできているのねぇ。ってこと。それなら ubuntu の設定をちょっとパクってしまえ。ってんで、 /usr/local/etc/fonts/conf.d/ 辺りを眺めます。

ubuntu 的に言うと「default のフォントの設定を削除するパッチ」ってのがあるので「あれ? FreeBSD 的だと default が Bitstream Vera の設定なので、それを削除すれば良いんじゃね?」と思いつくわけです。それが解ればあとは簡単。 /usr/local/etc/fonts/conf.d/ で grep “Bitstream Vera” * します。で、その結果、 60-latin.conf を改修すれば良いわけねー。というのが解りました。

以下の URL に /usr/local/etc/fonts/conf.avail/60-latin.conf に適用すべきパッチを置いておきました。

http://icmpv6.org/Prog/KDE/okular_ja-60-latin.conf.patch

まぁ、パッチなんてたいそうなものは必要無いとは思うのですが、簡単に説明すると、60-latin.conf では一番最初に利用されるフォントが Bitstream Vera になります。こいつは日本語を持たないフォントですね。それならば、それよりも上の行に ume フォントを追加してしまえーっ!! って感じです。

なので、上記パッチを適用した場合には japanese/font-ume をインストールする必要があります。自分の好みのフォントに設定したい場合には “Ume Gothic” の部分を好きな文字列に変更すればそれで OK です。

で、このパッチを適用したフォントのダイアログはと言うと、

Okular_font3.png

んー。ちゃんと ume フォントが利用されていますね。そして okular でも日本語がバッチリ表示できるようになりました。いやー。良かった良かった。

もしかしたら /usr/local/etc/fonts/conf.avail/60-latin.conf はそのままで、パッチ適用後の 60-latin.conf を ~/.fonts.conf.d/ の下に置いても同じ動作をするかもしれません。が、私は試していません。

それにしてもこれで okular が無事にちゃんと利用できるようになりました。良かった。

7月 202011
 

KDE4 のアプリケーションの中で Twitter を表示できるヤツなんかないかなぁ。と探し回っていたら Choqok というのが見つかりました。ports 的には www/choqok になります。Makefile を見てみると KDE micro-blogging client と書いてありますね。

で、実際に make して起動すると、ふむ。Twitter クライアントとして利用できるようです。なので KDE4 を利用している場合には、これを使うことにしましょうかねぇ。となるのであります。

あ。今回は Choqok の設定方法とか使い方については一切書かないです。直感的に利用できるので頑張って設定してください;-)。

で、しばらく使い続けていると、どうも日本語がしっくり来ない部分があるのであります。

Choqok_orig.png

こちらが default の日本語表示。LANG が ja だと ja.po を利用するので日本語表示してくれるようになります。

ただ、MacOSX や Windows、iPhone アプリなどで数々の Twitter クライアントを利用して、それと日本語の表示を比べてみてもしっくり来ない。なのでちょっと po ファイルをいじって見ました。ソースファイル的には choqok-1.0/po/ja/choqok.po ですかねぇ。

改修した後の表示はこんな感じ。あと、キャプチャでは見えない部分の直訳ぎみのヤツもそれらしく直しました。

Choqok_new.png

タブの部分は「タイムライン」とか書くと長くなってしまうので「Timeline」にしました。これとかは他のアプリ作っている人も苦労しているんだろうなぁ。というのが実際にやってみるとわかりますね。なので半角英数字で 「Timeline」て書いた方が短いタブで済む。みたいな。

それにしても「返信」ってのはやっぱり Twitter 的にはちょっと変で「Mentions」かなぁ。みたいな。もとの英文は以下のように “Reply” ってなっているんですが、最近の Twitter では “Mentions” だよなぁ。みたいな。

#: helperlibs/twitterapihelper/twitterapimicroblog.cpp:110
msgctxt "Timeline Name"
msgid "Reply"
msgstr "Mentions"

 
今回改修した po ファイルは以下の URL に置いたので、試してみたいと言う方いましたらちょっとお願いできませんでしょうか。

http://icmpv6.org/Prog/ja.po/choqok-20110613.po

感想やパッチなどを頂ければと思います;-)。

あるタイミングで本家のほうに送ろうかと思っております。 JKUG のほうでもその方向で話が進んでいる感じですねぇ。

7月 082011
 

なんとっ!! 自宅のネットワーク環境において、無線 LAN 環境のネットワークが二つできてしまい、SSID をネットワーク毎に切り替える必要性がでてきてしまいました。

Windows なんかの場合だと比較的容易にアクセスポイントを切り替えられるのだけど、 FreeBSD の場合は CUI がメインかなぁ。なので「なんか GUI ないかなぁ?」とか思い探しまわったら ports に net-mgmt/wifimgr というのがあったので早速インストールしてみました。

まぁ、QT ベースの KDE4 を利用している僕にとって、gtk ベースのアプリっちゅーのはどうもしっくりこないんだけどもそれはそれしょーがない。 QT ベースのものを利用したい場合には net/wpa_gui ちゅーのがあります。こっちは FreeBSD でインストールされている wpa_cui の GUI 版なんだけど、wpa_supplicant のバージョンがずいぶんと古い。でもって実際に起動してみてもたともに動作しているようにみえなかったんですね。

なので、今回は net-mgmt/wifimgr を利用しました。 ports からインストールして wifimgr と叩いて起動するだけです。コンパイルも早いですしね。非常に簡単。

起動する時に /etc/rc.conf の ifconfig_ をチェックして WPA と言う文字があった場合にのみ起動します。最初、ifconfig_wlan0=”DHCP ssid test” だけしか書いてない状態で wifimgr を起動したんだけど、動作しなくて・・。で、ソースコード見たら WPA って文字をチェックしているみたいだったので ifconfig_wlan0=”DHCP ssid test WPA” とか書いたら無事に起動しました;-)。

起動後は root のパスワードを聞かれ、そのあとで管理画面が表示されます。

スクリーンキャプチャを掲載しようと思ったのですが、表示されているのが SSID とかパスフレーズだったのでちょっとやめました。実際に自分で起動して確認してみてください;-)。

起動したあとは Windows 上でよく見る Wi-Fi マネージャとほぼ一緒です。まだあまり使い込んでないのですが、使い方も直感的で解りやすいです。

新しいアクセスポイントを利用するようにした場合、その設定情報は /etc/wpa_supplicant.conf にダイレクトに書き込まれます。そのあとで「保存と再起動」ボタンを押すと wpa_supplicant が再起動されて指定したアクセスポイントに接続されるようになります。すげーぞ。

以上が動作です。さてと。ソースコードを見てみると po ファイルがあるのでこらー日本語化は簡単だな。とか思い覗いてみると、今のところは英語とフランス語にのみ対応しているようですね。

まぁ、せっかくなので ja.po を書きました;-)。

日本語に対応した ports は以下にあるので良かったら皆さん試してみて頂けませんでしょうか。

http://icmpv6.org/Prog/FreeBSD_ports/ports-wifimgr-20110708.tgz

po ファイルの追加だけなら簡単だっんですけど、 src/Makefile にも手を加える必要があったので新しい ports にしてしまいました。

po ファイルだけは別に切りだしてあって以下の URL にあります。「日本語変だよ。」とか思われた方、改修して頂ければと思います。

http://icmpv6.org/Prog/ja.po/wifimgr-20110708.po

もし、問題がなければ作者さんにメールを送って、実際に ja.po ファイルをソースコードに取り込んでもらおうかなどと思っています。

と、言うことで、wifimgr と言う、GUI インターフェースが利用できる Wi-Fi マネージャなのでありました。ところで、ソースをちろっと眺めただけなんだけど、wlan が 0,1 と複数あったらどう言う動作するんだろうなぁ・・。

6月 292011
 

僕はメールを読んだり書いたりするときに emacs 上の mew を利用しています。で、今回たまたま「マニュアル」というのを見ていたら “対話” というのがあったんですね。

この “対話” と言うのは mew のインストール時に合わせて /usr/local/bin/cmew と言うコマンドをインストールして、こいつが sqlite3 に Massage-ID を突っ込んで、一括して mew のバーチャルモードで表示してくれる。と言う機能です。

cmew 自体は ruby で書かれているので、実行。ばーんっ!! とかやるのですが、 require ‘sqlite3’ の行がエラーになります。どうやら ruby の sqlite3 モジュールが無いみたいなんですね。

それならば ports からインストールするべか。とか思って /usr/ports/ 辺りを捜すのですが、あれあれ? ports になって無いじゃん・・。orz。 となるのでありました。

ちゅーこって、ports 作って以下の URL に置いたので使ってみたい人はご利用くださいー。って感じなのであります;-)。

ダウンロードした後、/usr/ports/databases 辺りで展開して make;make install すればおしまいです。

http://icmpv6.org/Prog/FreeBSD_ports/ports-sqlite3-ruby-20110629.tgz

インストールが完了したら cmew を実行する(mew 上で “KI” と叩く)と ~/Mail/id.db とかいうのができて “V” で一覧表示してくれるようになります。この辺りについては mew のマニュアルを見てください。

それにしても FreeBSD の ports 的には databases/ruby-sqlite は sqlite2 対応、databases/rubygem-sqlite3 っちゅーのはなんかちょっと冗長気味ででかいぞ。でもって cmew が動かないぞ。的なので、ズバっと cmew が動作する sqlite3 モジュールは存在していないんですねぇ。

中々思い白い。それにしても ruby をおいかけるなんざ dtcpc 以来だぞぉ;-)。

あ。当然ながら “ノラ ports” です。コミットしてくださる方、絶賛募集中;-)。けど、利用者、少ないんだろうなぁ。だとするとコミットしてもあまり価値無いような気がしますねぇ・・f(^^;;。

6月 162011
 

さてさて。このブログでは過去三回ほど、MRTG の IPv6 化と言うか対応について書いたことがあります。

mrtg が IPv6 で動作しない。
net-snmpd+mrtg の IPv6 化とその他もろもろ。(2)
net-snmpd+mrtg の IPv6 化とその他もろもろ。

今回は過去に検証したものについて、再度の検証を行い、実際にはどういう動作になったのかを確認してみたいと思います。

と、言うのも最近の perl は 5.14.0 になって IPv6 回りに改良が加えられました。 Socket モジュールがちょっと変更になったんですね。そして、mrtg 自体も以前からはバージョンが上がっているので IPv6 回りに改修が入ったのではないかと思い、再度の検証とするのであります。

今回利用するのは最新の ports-current です。このエントリーの一日前に csup したものを利用します。mrtg が動作するのに必要なものは以下辺りでしょうかねぇ。

    perl-5.14.0
    p5-IO-Socket-INET6-2.67
    p5-Net-SNMP-6.0.1
    p5-SNMP_Session-1.13
    p5-Socket6-0.23
    mrtg-2.17.1
    net-snmp-5.5_4

今回の検証はこれで試してみました。ports の net-mgmt/mrtg は WITH_IPV6=true で make config します。すると関連性で net/p5-IO-Socket-INET6 と net/p5-Socket6 がインストールされ、IPv6 Ready な mrtg となります。

IPv6 の機器に対応した設定ファイルである mrtg.cfg を書いて、早速 env LANG=C mrtg mrtg.cfg とかを実行します。が・・。エラーが出て動作しませんでした。

一個目は SNMP_Session.pm が以下のメッセージを出力します。長いので改行してあります。

% env LANG=C mrtg mrtg.cfg
Subroutine SNMP_Session::pack_sockaddr_in6 redefined at \
/usr/local/lib/perl5/5.14.0/Exporter.pm line 67. at\
/usr/local/lib/perl5/site_perl/5.14.0/SNMP_Session.pm line 149
Subroutine SNMPv1_Session::pack_sockaddr_in6 redefined at \
/usr/local/lib/perl5/5.14.0/Exporter.pm line 67. at\
/usr/local/lib/perl5/site_perl/5.14.0/SNMP_Session.pm line 608

 
このメッセージはエラーだと思い込んでいたのですが、ただのワーニングメッセージなので一応は mrtg は問題なく動作するようです。

しかし、インストールした mrtg コマンド、つまり /usr/local/bin/mrtg のほうが別のエラーを出力してまともに動作してくれません。エラーメッセージは以下の通り。

% env LANG=C mrtg mrtg.cfg
Undefined subroutine &main::AF_UNSPEC called at /usr/local/bin/mrtg line 2247.
Undefined subroutine &main::AF_UNSPEC called at /usr/local/bin/mrtg line 2247.

 
AF_UNSPEC が無い。と言われるんですね。このメッセージは本当にエラーなので、 mrtg はまともに動作しないので問題を取り除く必要があります。

僕は以下のように改修しました。

--- mrtg.orig   2011-06-16 15:40:42.000000000 +0900
+++ mrtg        2011-06-16 17:22:07.000000000 +0900
@@ -2244,7 +2244,7 @@
my @res;
my ($too,$port,$otheropts) = split(':', $$target{SnmpOpt}, 3);
$port = 161 unless defined $port;
-            @res = getaddrinfo($hostname, $port, AF_UNSPEC(), SOCK_DGRAM());
+            @res = getaddrinfo($hostname, $port, &Socket::AF_UNSPEC(), &Socket::SOCK_DGRAM());
if (scalar (@res) < 5) {
warn "$NOW: WARNING: Skipping host $hostname as \
it does not resolve to an IPv4 or IPv6 address\n";
return 'DEADHOST';

 
AF_UNSPEC がどこにあるのか解らないみたいなので、明示的に Socket モジュールの中のを利用するように記述しました。あと、SOCK_DGRAM も「&main には無いよ。」と言われるのでこっちも直します。しかし、他にもっと美しい改修の方法があるんでしょうなぁ。とは思いますが・・f(^^;;。

これで実行すると無事に mrtg が動作するようになりました。良かったです。

さてさて。ここまでで一応 mrtg コマンドは動作しました。実は順番が逆になっているかもしれないのですが、続いて mrtg.cfg のほうを見ていきたいと思います。

以前の「net-snmpd+mrtg の IPv6 化とその他もろもろ。(2)」のエントリーのところで Target 節のパラメータに ifIndex しか指定できない。などと書いたのですが、この点は結構重要になってきます。

ifIndex と NIC なんてのは増設すると同期が取れなくなるので ifIndex で mrtg は取得してくないですよね。今回試したのは以下の四パターン。

Target[server_bge0]: 1:public@[2001:3e0:a71::f:10]:::::2
Target[server_bge1]: \bge1:public@ipv6.running-dog.net:::::2
Target[router_gi01]: 32:public@2001:3e0:a71::f:1]:::::2
Target[router_gi02]: \GigabitEthernet0/1:public@cisco.running-dog.net:::::2

 
ふむ。以前試した時は ifDescription では mrtg で情報が取得ができず ifIndex でのみしかダメだったのですが、今回は無事に上のどのパータンでもトラフィック情報を取得することができました。インターフェースだけでなく、フツーの MIB も IPv6 アドレスでも FQDN でもどちらでもきっちり取れるようになりました。これは非常に嬉しいことですね。

あと、MRTG の公式サイト http://oss.oetiker.ch/mrtg/doc/mrtg-ipv6.en.html を見れば色々書いてありますが、FQDN で問い合せた時、当該機器の snmp が IPv6 に対応していない場合 IPv4 に fall back せずにそのまま終わってしまう件ですが、

1. EnableIPv6: yes の設定で
2. Target: 節に FQDN を書いていて
3. その機器は IPv4 にしか対応していない場合は mrtg が取れない。
4. そんな時は IPv4Only: 節を利用すると良いですよ。

と、言うことらしいです。つまりは IPv4Only: 節がある機器の場合は最初から IPv4 で mrtg が動作するみたいです。これは良かった;-)。

Target[macosx_en0]: \en0:public@mac.running-dog.net:
IPv4Only[macosx_en0]: yes

 
こんな感じで mrtg.cfg を書けば IPv4 にしか対応していない MacOSX SL の snmpd に対しても無事に mrtg が取得できます。

過去、何回かこのブログに書いた mrtg ですが、これで多分は全部大丈夫っぽいかなぁ。

いやぁ。良かった良かった。それにしても CentOS 5.6 では IPv6 対応の mrtg がまともに動作していなんだよなぁ。今回は FreeBSD で検証したんだけど、CentOS の Final でも再度検証が必要かなぁ。

と、おもーちょります。