jfbterm をインストール、カーネルを current で再ビルド

jfbterm

コンソール上で日本語出力をする方法を探していたら、いまは jfbterm というのがあるらしい。 screen や tmux とも併用できるような記事が多い上に、 OpenBSD にもインストール可能な FreeBSD 版を用意している方がいらっしゃったので、一発いれてみることにしました。

インストールにはまず、カーネルの再ビルドが必要とあります。 vesabios0 というデバイスと、 VESAFB というオプションを有効にするみたいだ。 jfbterm という名の通り、フレームバッファ(ビデオメモリ上の描画データ)に介入して描画をコントロールするみたいです。すごいなあ。理屈上それで可能そうだということは分かるけど、どうやって可能にしているかさっぱりわからないよ。ソース見てもわからないところがクライアントサイドプログラマの無力さ。

まぁ、いいや、というわけでやります。

current

current でのソースからのコンパイルなので、もう CVS からソースを持ってきます。今回は手元の ThinkPad なのでサーバは日本です。

# cd /usr
# export CVSROOT=anoncvs@anoncvs.jp.openbsd.org:/cvs
# cvs checkout -P src

無事終わったので一緒に ports も落としておくことにしました。

# cvs checkout -P ports

こちらもなんとか無事に終わったようなので、カーネルコンパイルをします。

# cd /usr/src/sys/arch/i386/conf
# mg GENERIC
option VESAFB
vesabios0 at mainbus?
のコメントを外し有効に
# config GENERIC
# cd /usr/src/sys/arch/i386/compile/GENERIC
# make clean && make depend && make
# make install
# reboot

OK!!

はい次ユーザーランド。もう何回やったんだって感じですが。

# rm -rf /usr/obj/*
# cd /usr/src
# make obj
# cd /usr/src/etc && env DESTDIR=/ make distrib-dirs
# cd /usr/src
# make build

jfbterm インストール

というわけで、やっと jfbterm のインストールです。公式のインストラクション通りに進めます。依存があるので、すべて ports から入れます。カーネルをソースからビルドにしてしまったので、 ports もすべてソースからコンパイルに切り替えます。 snapshot バイナリ同士が一番楽なんですが、もうカーネルがこうなってしまった以上どっちもソースビルドにしたほうが安心です。

  • converters/libiconv
  • devel/autoconf/2.59
  • devel/automake/1.4
  • devel/gmake
  • graphics/png
libiconv
# cd /usr/ports/converters/libiconv
# make install
(どばーっとでたあと)
libiconv-1.13p0: ok
# make clean=depends
autoconf
# cd /usr/ports/devel/autoconf/2.59
# make install
# make clean=depends
automake
# cd /usr/ports/devel/automake/1.4
# make install
# make clean=depends
gmake
# cd /usr/ports/devel/gmake
# make install
# make clean=depends
png
# cd /usr/ports/graphics/png
# make install
# make clean=depends
本体
# cd ~/
# wget www.ac.auone-net.jp/~baba/jfbterm/jfbterm-FreeBSD-0.6.1.tar.gz
# tar xzvf jfbterm-FreeBSD-0.6.1.tar.gz
# cd jfbterm-FreeBSD-0.6.1
# rm configure
# export AUTOCONF_VERSION=2.59
# export AUTOMAKE_VERSION=1.4
# aclocal
# automake -a -c
# autoconf -f
# ./configure CPPFLAGS=-I/usr/local/include \
              LDFLAGS=-L/usr/local/lib \
              --prefix=/usr/local \
              --mandir=/usr/local/man \
              --sysconfdir=/etc
# gmake
# gmake install
# cp /etc/jfbterm.conf.sample /etc/jfbterm.conf
# cat termcap.jfbterm >> /usr/share/misc/termcap
# cap_mkdb /usr/share/misc/termcap
# wget http://unifoundry.com/unifont-5.1.20080820.pcf.gz
# cp unifont-5.1.20080820.pcf.gz /usr/X11R6/lib/X11/fonts/misc/

ふむ。普通に進捗した。

# jfbterm

普通に起動した!!高精細!!と思いきや

# tmux
open terminal failed: missing or unsuitable terminal: jfbterm-color
# mg
panic: Terminal setup failed
# less temp
WARNING: terminal is not fully functional
# vi temp
vi: jfbterm-color: unknown terminal type

なんか、言いたいことはわかるエラーだな…。ターミナルとしてちゃんと機能あるいは設定できてないみたい。この辺よく知らないんだよなー…。さすがに一発どんでは使えなかったか…。と思って調べたら、 jfbterm For FreeBSDOpenBSD 用説明では terminfo.db の生成が抜けているらしい!

# cat termcap.jfbterm >> /usr/share/misc/termcap
# cap_mkdb /usr/share/misc/termcap
# captoinfo /usr/share/misc/termcap > /usr/share/misc/terminfo
# cap_mkdb -i /usr/share/misc/terminfo
# infocmp
#
# infocmp
#       Reconstructed via infocmp from file: /usr/share/misc/terminfo
jfbterm-color|jfbterm with ANSI colors
(以下略)

これでばっちり!!うーん、ちょっと感動。しかし、 Google 先生に訊いてできただけでこれがどういう意味を持つのか、なぜ jfbterm の説明が間違っていたのか、その辺がよくわからない。 termcap/terminfo というのは ncurses というテキストベースで vi とか emacs とか tmux みたいなアクロバティックな画面を構築するためのライブラリが使う情報ファイルらしいんだが、なぜ手元の OpenBSD では両方必要なのかしら?。うーん、わからない。わからないまま、人生は進む…。