Roads to Linux - JNetHack 1.0.5.4.1のインストール
■JNetHackのバージョンアップ
NetHackは、UNIX互換システムにおいてはカーネルに次ぐ重要なプログラムです。
私はこれの日本語版であるJNetHackをJGからインストールしていましたが、このバージョンは1.0.3で、これはオリジナルのNetHackの3.1.xベースのものです。
しかしNetHackは既に3.2.2へとバージョンが上がっており、また3.2.1を日本語化したJNetHack 1.0.5.4.1が存在しているのを知っていました。しかし、NetHack 3.2.xは、インタフェースに大きな(慣れるのが難しい)変化があり、しかもJNetHack 1.0.5.4.1には思想的に私の信条と大きく違うフィーチャーが盛り込まれていたので、これをインストールするべきかどうかとても迷っていました。
でもやはり、こういった重要なプログラムはバイナリインストールではなく自分でコンパイルすべきものですし、インタフェースの問題は慣れるしかありません。思想的な問題は、そのフィーチャーを私が使用しなければよいだけの話です。そう決心して、JNetHack 1.0.5.4.1をインストールする事にしました。
■コンパイルの準備
まず準備として、インストール済みの1.0.3をpkgtoolを使用してアンインストールします。その後、nethack-3.2.1.tar.gzを入手し、/usr/local/srcに展開します。
cd /usr/local/src
tar zxvf nethack-3.2.1.tar.gz
jnethack-1.0.5.4.gz、jnethack-1.0.5.4.1.gzを入手し、nethack-3.2.1ディレクトリにコピーし、nethack-3.2.1ディレクトリへ移動して日本語化パッチを当てます。
cd nethack-3.2.1
gzip -dc jnethack-1.0.5.4.gz | patch -p
gzip -dc jnethack-1.0.5.4.1.gz | patch -p
■Makefileの作成と修正
sys/unixディレクトリへ移動し、setup.shスクリプトを使用してMakefileを作成します。
cd sys/unix
sh setup.sh
nethack-3.2.1ディレクトリへ戻り、Makefileを修正します。ここでは、以下の行を修正しました。
GAMEDIR = /usr/local/games/lib/$(GAME)dir
SHELLDIR = /usr/local/games
# VARDATND =
# VARDATND = x11tiles pet_mark.xbm
VARDATND = x11tiles pet_mark.xbm rip.xpm
■config.hの修正
include/config.hを修正します。ここでは、以下の行を修正しました。
#define X11_GRAPHICS /* X11 interface */
# define USE_XPM /* Disable if you do not have the XPM library */
/* # define COMPRESS "/usr/ucb/compress" /* Lempel-Ziv compression */
/* # define COMPRESS_EXTENSION ".Z" /* compress's extension */
# define COMPRESS "/bin/gzip" /* FSF gzip compression */
# define COMPRESS_EXTENSION ".gz" /* normal gzip extension */
# define HACKDIR "/usr/local/games/lib/jnethackdir" /* nethack directory */
■unixconf.hの修正
include/unixconf.hを修正します。ここでは、以下の行を修正しました。
/* #define SUNOS4 /* SunOS 4.x */
/* #define NEWSOS4 /* NEWS-OS 4.x */
#define LINUX /* Another Unix clone */
#define TEXTCOLOR /* Use System V r3.2 terminfo color support */
■src/Makefileの修正
src/Makefileを修正します。ここでは、以下の行を修正しました。
CFLAGS = -O2 -fomit-frame-pointer -I../include -I/usr/X11/include
LFLAGS = -L/usr/X11/lib
# OR compile backwards compatible a.out format
# CFLAGS = -O2 -b i486-linuxaout -fomit-frame-pointer -I../include -I/usr/X11/include
# LFLAGS = -b i486-linuxaout -L/usr/X11/lib
# CFLAGS = -g -I../include
# LFLAGS = -g
WINSRC = $(WINTTYSRC) $(WINX11SRC)
WINOBJ = $(WINTTYOBJ) $(WINX11OBJ)
WINTTYLIB = -ltermcap
# WINTTYLIB = -lcurses
# WINTTYLIB = -lcurses16
# WINTTYLIB = -ltermlib
# WINX11LIB = -lXaw -lXmu -lXext -lXt -lX11
# WINX11LIB = -lXaw -lXmu -lXt -lX11
WINX11LIB = -lXaw -lXmu -lXext -lXt -lXpm -lX11 -lm
# WINX11LIB = -lXaw -lXmu -lXpm -lXext -lXt -lX11 -lSM -lICE -lm # BSD/OS 2.0
WINLIB = $(WINTTYLIB) $(WINX11LIB)
LIBS = -lbsd
■makeとインストール
makeとインストールを行います。
make
make install
最後に、ディレクトリの名前をjnethackにしておきます。
cd ..
mv nethack-3.2.1 jnethack-1.0.5.4.1
これで、TTY上では動く状態になりました。さらにX11上で動かすために、以下のようにX用の定義ファイルをXのディレクトリにコピーします。
cp jnethack-1.0.5.4.1/win/X11/NetHack.ad /usr/X11R6/lib/X11/app-defaults/NetHack
chmod 644 /usr/X11R6/lib/X11/app-defaults/NetHack
これで、
export NETHACKOPTIONS=windowtype:X11
jnethack
等としてX11上で実行できるようになりました(.jnethackrc等でwindowtypeを指定してもよいのですが、ここではTTYがメインなので指定しません)。
また、/usr/X11R6/lib/X11/app-defaults/NetHackの!NetHack.tile_file: x11tilesという行の先頭の!を外して有効行にすれば、タイル表示を有効にできますが、ここでは(タイル表示が嫌いなので)行いませんでした。