ここに、Unix に関するメモ、パッチなどを上げていきます。 メモは下から順に新しくなっていきます。 詳しくは、「Unix に関するメモ等 (04/01 2006) を参照してください。
なお、ここに書かれていることは、 うちの環境での話でしかありませんから、 一般的な話ではありませんし、 内容の保証はしません。
「しおり用」と書かれた所は、それをクリックしてからブックマークに入れると、
それはページの先頭ではなく、その箇所へのブックマークになります。
ページが長くなったときには便利だろうと思います。
(04/01 2006)
このページを含む、Unix のページから検索ができるようにしてみました。
Unix のページ の
検索セクション
をご利用ください。
(04/03 2006)
過去にさかのぼって、昔メモとして書き残したことなどを、
古い日付で書き足していくことにしました。
(04/08 2006)
tgif で絵を書いて LaTeX に張り込む場合、 psfrag を使って絵の中の文字も LaTeX 文字に置き換えることが多いのですが、 それを pdf ファイルに変換する場合は dvipdfmx が使えないので、 dvips + ps2pdf + replacecjkfonts で pdf ファイルを作っていました。
その手順が面倒なので、簡単なスクリプトを書いて その作業を自動化していたのですが、 あるとき ps2pdf がエラーを起こすことに気がつきました。
そのスクリプト内では、tgif による eps ファイルの更新もやるようにしていて、 tgif の obj ファイルから eps ファイルへの変換を、
tgif -print -eps *.obj
と行っていて、その後で LaTeX にかけていたのですが、
どうやらそれがダメらしく、
tgif を対話的に立ち上げて C-p で一つ一つ
eps に変換した場合にはうまくいっていました。
どうも変なので、両者の eps を比較したところ、 コマンドラインから一発で変換した方は、 日本語文字に関する妙なコードが残っていることがわかりました。 結論から言えば、
tgif -print -eps *.obj
でも確かに各 obj 毎に eps ファイルを作ってくれるのですが、
どうやら前に処理した obj ファイルの設定が相互作用を起こして
妙なことを起こしているようでした。
よって、一度ではなく、ファイルを一つ一つ tgif に処理させるように
foreach i ( *.obj )
tgif -print -eps $i
end
としたら (csh スクリプト)、問題ないようでした。
これまで Ghostscript は、日本語対応がちゃんと取れていた 7.07 を使用していたのですが、 最近は 8.6X, 9.0X もよくなっている、という話を目にしていたので、 9.04 をインストールしてみました。 環境は Solaris 9 + gcc 3.4.3 です。
ghostscript-9.04.tar.gz には freetype や jasper, lcms などのソースも 付属していますが、それが結構新しいものなので、 インストールされているヘッダファイルを見にいって コンパイルエラーになることがあります。 私も最初インストールされている lcms や jasper が古かったので そういう問題が起きましたが、 jasper については gs 付属のものは独自にパッチを当ててあるようで うまく問題を解消できなかったので、
./configure --prefix=$prefix --without-jasper --disable-compile-inits
のようにしてコンパイルしました。
--disable-compile-inits は、cidfmap という設定ファイル用に必要なようです。
なお、それ以外にも LDFLAGS に -liconv を入れて、
GNU iconv をリンクするようにしています。
それでだいたい問題なくコンパイルでき、 Resource というディレクトリを $prefix/share/ghostscript/9.04 にコピーして (make install ではコピーされなかった)、 とりあえず使えるようになりました。
日本語の設定は、 $prefix/share/ghostscript/9.04/Resource/Init/cidfmap で行いますが、Solaris に付属する TrueType フォント用に以下のようにしました:
/Ryumin-Light /HG-MinchoL ;
/GothicBBB-Medium /HG-GothicB ;
/HeiseiMin-W3 /Ryumin-Light ;
/HeiseiKakuGo-W5 /GothicBBB-Medium ;
/HG-MinchoL << /FileType /TrueType /CSI [(Japan1) 6]
/Path (/usr/openwin/lib/locale/ja/X11/fonts/TT/HG-GothicB.ttf) >> ;
/HG-GothicB << /FileType /TrueType /CSI [(Japan1) 6]
/Path (/usr/openwin/lib/locale/ja/X11/fonts/TT/HG-MinchoL.ttf) >> ;
この後 $prefix/share/ghostscript/9.04/examples/cjk/article9.ps を見たのですが、残念ながら文字が重なったり、 句読点やかっこが縦書きに対応した位置に出ない状態になります。
調べてみたのですがネット上にはあまり情報はありませんでした。 フォントを IPA フォントを使うように変えると、 文字の重なりは解消するのですが、句読点やかっこはそのままです。
freetype ライブラリの問題らしいという情報を見つけたので、
./configure --prefix=$prefix --without-jasper --disable-compile-inits \
--disable-fontconfig --disable-freetype
のようにしてコンパイルし直したところ、
ようやくちゃんと表示できるようになりました。
freetype を使う方が問題があるとは考えなかったので、 やや気がつきにくい話でした。 そういう情報もあまり見られませんので (自前でコンパイルする人が少ない ?) ここに残しておきます。
Solaris 9 + gcc 3.4.3 で Qt 4.7.4 をインストールしてみたのですが、 修正がかなり必要だったので、ここで紹介しておきます。 Qt は、qt-everywhere-opensource-src-4.7.4.tar.gz を http://get.qt.nokia.com/qt/source/ からダウンロードして使いました。
修正したのは以下の点です。
いずれも Solaris 9 ではありがちなものですが、 実は Qt 4.7.4 は、マルチプラットホーム指向というだけあって ソースを見るとある程度その辺りの対応もできているのですが、 Solaris 9 への対応ができていない (抜けている ?) 部分が上のパッチの対象部分です。 なお、configure オプションの指定によっては、 さらに修正が必要になるかもしれませんが、 その場合は上のパッチを参考にすればいいだろうと思います。
以前、Qt 4.5.2 をコンパイルしたときはこのようなパッチは 必要なかったように思いますが (qt-x11-opensource-src-4.5.2.tar.gz)、 今回このようになったのは、 Solaris でコンパイルする人が減っているのか、 または今どき Solaris 9 を使っている人がいないか (Solaris 10 には float 関数も trunc() も stdint.h もあるようです) のどちらかなんでしょうか。
「Unix に関するメモ等 (03/06 2009)」 に書いた Solaris 9 での ming-0.4.2 のコンパイルの問題の件ですが、 最近 ming-0.4.4 が出たのでコンパイルしてみたら、 いくつかは解消されているようですが、 やはり同様の問題が起きたので、ML に報告してみました。 そうしたら私のパッチにも多少問題があることがわかって、 修正しましたので、それを下に置きます。
今回気がついた問題は以下のものです。
上のパッチで解消している問題もありますが、 そうでないものもかなりあります。 なお、パッチや上の問題なども、 次のバージョンでいくつかは直してもらえることになりそうです。
なお、7. については、「#!/usr/bin/php」等を「#!/bin/bin/env php」 に変えたらどうか、といった話もしていました。 こちらの方が汎用性があっていいですね。
Tgif 4.2.5 ですが、EPS ファイルに export した日本語が化けることがある、 という問題が起きました (というか気がついていませんでした)。
.obj ファイルの str_seg 行に文字列が保存されていますが、 日本語の場合はそこに日本語フォント名が入り、_DoubleByte フィールドが 1 になります。そしてその次の _DBModBytes フィールドなんですが、 これが何をするものなのかよくわからないのですが、 どうやらこの値によって文字化けしているようです。 それが 1 のときは文字化けし、0 のときは文字化けしません。 1 のときは、できた EPS ファイル内の 2 バイトコード (EUC-JP) の 8 bit 目が落ちているようです。
昔の .obj ファイルを見たら、一つの .obj ファイル内で、 _DBModBytes フィールドが 0 の日本語文字列の str_seg 行と、 _DBModBytes フィールドが 1 の日本語文字列の str_seg 行が 混在しているものもありました。 これは tgif 4.2.5 で処理すると、当然一部の文字列は化けず、 一部は化ける、となります。
問題のコードはすぐに見つかり、 tgif-4.2.3 からそのパッチが入っているようですが、 作者に報告したところ、以下のパッチで改善する、と連絡がありました。
詳しくは http://bourbon.usc.edu/tgif/download.html#tgif-QPL-4.2.5b を参照してください。 EUC-JP の環境では、とりあえず問題は解消するようです。
「Unix に関するメモ等 (08/01 2011)」 に書いた、Tgif 4.2.X が SIGSEGV で落ちる件ですが、 作者に報告したところ、以下のパッチの方が正しい、 という返信がありました。
各最終フィールドの SVG のエントリが抜けていたようです。 次期バージョンには反映されるようです。
「Unix に関するメモ等 (08/01 2011)」 に書いた、Tgif 4.2.5 のメニューの日本語が正しく表示されない件ですが、 普段 remote の FreeBSD (8.1) から作業していて そちらからだと表示されないのですが、 Solaris 本体で使用したら問題なく日本語が表示されました。 よって、フォントかリソースの設定の問題で remote からは表示できないだけのような気がします。
なお、Xutf8TextListToTextProperty() を持っているような 新しい X lib を無理矢理 tgif に Solaris 9 上でリンクしてみたら、 FreeBSD からでもちゃんと日本語が表示されるようになりました。 とすると、もしかしたら X (X lib) のバージョンによる問題なのかもしれません。
tgif 4.2.2, 4.2.5 を Solaris 9 + gcc-3.4.3 でコンパイルしたのですが、 いずれも左上の Print/ExportFormat menu (「LaTeX(EPS)」と表示されているもの) を何回かクリックしていると 「SIGSEGV signal received.」というメッセージを出して落ちてしまいます。 これは、以下のパッチで解消されるようです。
なお、Solaris 9 は UTF-8 関連の X の関数がまだ入ってなくて、 tgif 4.2.X をコンパイルしようとすると Xutf8TextListToTextProperty() がないと言われます。 これは、tgif 4.2.5 では -D_NO_XUTF8FUNCTIONS をつけることでコンパイルが通るようになっています。 しかし、そのためかどうかわかりませんが、 4.2.5 では今度は -DENABLE_NLS をつけてコンパイルしても メニューの日本語が正しく表示されなくなってしまうようです。 これについては、もう少し調べてみたいと思います。
(cf. 「Unix に関するメモ等 (08/02 2011)」, 「Unix に関するメモ等 (08/04 2011)」)
Solaris 9 で autogen-5.X をコンパイルしていたのですが、 どうしてもエラーがでて困っていました。 Web で検索しても適当な情報が見つかりませんでしたが、 なんとか解決したのでまとめておきます。
コンパイル環境は、Solaris 9, gcc-3.4.3, guile-1.8.8, libxml2-2.7.8, rx-1.5 (,bash-4.2) です。 configure では以下のようにしています (csh 環境上):
set prefix = /usr/local
setenv LIBS "-lrx"
setenv CPPFLAGS "-I$prefix/include"
setenv LDFLAGS "-L$prefix/lib -R$prefix/lib"
setenv CONFIG_SHELL $prefix/bin/bash
./configure --prefix=$prefix --with-regex-header="rxposix.h"
--disable-shared
configure してみると言われるのですが、
正規表現ライブラリは POSIX のものが要求される
(例えば rx を使えと言われる) ので、
librx.a, rxposix.h を使うために LIBS, CPPFLAGS, LDFLAGS,
および configure オプションの --with-regex-header
を指示通りに指定しています。
しかし、その後で make すると xml2ag/ の中の make で以下のようなエラーが出て止まってしまいます:
top_builddir=.. top_srcdir=.. PATH=`cd ../columns;pwd`:$PATH ;
export top_builddir top_srcdir PATH ;
/hoge/fuga/autogen-5.11/agen5/autogen -MFstamp-opts -L../autoopts
--definition=./xmlopts.def
Error in template /hoge/fuga/autogen-5.11/autoopts/optlib.tpl, line 373
DEFINITIONS ERROR in
/hoge/fuga/autogen-5.11/autoopts/optlib.tpl line 373 for xmlopts.h:
Error: value for opt output is `O'
must be single char or 'NUMBER'
Failing Guile command: = = = = =
(error (sprintf
"Error: value for opt %s is `%s'\nmust
be single char or 'NUMBER'"
(get "name") (get "value")))
autogen-5.8, 5.9, 5.10 でもほとんど変わりません。
そもそもエラーメッセージに矛盾があるようにも見えます
('O' が一文字でなければならない ?)。
上記のエラーの箇所を色々調べてみたところ、 どうも autogen バイナリの正規表現のマッチングが うまくいってないことに気がつきました。 つまり、せっかく指定してリンクしているはずの rx ライブラリが 使われていないようなのです。
実は、Solaris 9 には libc 内に正規表現関数 (regcmp() 等) が既に用意されているようですが、 それが autogen では使えない (POSIX でない ?) らしく、 それを使おうとすると configure にはじかれてしまいます。 それで rx を使うために指示通りに上のように configure 時に LIBS で -lrx を指定したのですが、なぜかそれが使われておらず、 libc 内の正規表現関数が使われてしまっているのがエラーの原因のようでした。
コンパイルログを見るとそれは libtool の仕業で、 libtool が勝手に -lrx よりも前に -lc をつけてしまっています。 よって、agen5/Makefile.in に以下のようなパッチを当てて、 -lc を -lrx よりも後ろにくるように autogen を make したら ようやくうまく行きました。
一応 autogen-5.11.6 用ですが、どのバージョンでもそう違わないと思います。
Unicode 関連で 2 点報告します。
PDF ファイルの表示に最近は xpdf-3.02 を使用しているのですが、 LaTeX の utf パッケージで生成した文字 (「日の下に立」の漢字) を dvipdfmx で作った pdf ファイルを見ようとしたら、 *-Identity-H がないとか言われました。
xpdfrc (~/.xpdfrc) に以下のような displaCIDFontTT の設定を入れたら出なくなりました:
displayCIDFontTT Adobe-Japan1 /XXX/YYY/ipam.ttf
また、このままだとゴシック体も明朝体も全部 ipam.ttf
になってしまいますが、それも以下のような設定で解消しました。
displayNamedCIDFontTT Rymin-Light /XXX/YYY/ipam.ttf
displayNamedCIDFontTT GothicBBB-Medium /XXX/YYY/ipag.ttf
上の、utf パッケージを利用した出力は、xdvi, dvipdfmx はいいんですが、 dvips の出力の表示/印刷がうまく行きませんでした。 調べてみると、dvips の設定というよりは、 表示の gs の設定やプリンタの問題のようでした。
上の utf パッケージを使用した文字は、dvips の出力では Ryumin-Light-UniJIS-UTF16-H になっているようです。 gs は gs7.07 を使っているのですが、 CMap のディレクトリには UniJIS-UCS2-H はありますが、 UniJIS-UTF16-H が入っていませんでした (acro5-cmaps-2001.tar.gz, adobe-cmaps-200204.tar.gz)。 よって、xpdf の日本語化で使用したファイル (xpdf-japanese) に含まれる UniJIS-UTF16-H を gs の CMap ファイルのディレクトリにリンクを貼ることで 正しく表示されるようになりました。
印刷は、PS プリンタでやっているのですが、 これはプリンタ内の PS インタプリタの問題でどうにもならないので、 コンピュータ側で ps2ps でラスタライズしてから プリンタに送ることでうまく印刷できるようになりました。
なお、UniJIS-UTF16-H は aj16.tar.Z に含まれているようです。
学生のデータ持ち帰り用として、 Solaris 9 での USB メモリの利用について調べてみました。
まず、UnixUser 2005 11 月号にある、という情報を見つけましたが、 これは第 2 特集である「何でも接続 ! USB 活用術」の方ではなく、 p134-135 の「UNIX 処方箋」の方に書いてあります。 Blade150 (Solaris 9) では、USB メモリを差して vold に HUP シグナルを送れば自動的に認識してくれて、 eject -n でそれに対応する項目が出力される、 と書いてあるのですが、残念ながらそれはうまく行きませんでした。 ルートで volrmmount -i rmdisk0 とするとマウントされる、 と書いてあるのですが、それもだめです (うちも Solaris 9 の Blade 150 なんですが)。
しかし、dmesg を見ると一応それらしい表示はあるので、 つながってはいるようです。volcheck -v をすると、 USB メモリをつないでいないときは「媒体が見つかりませんでした」 となるのですが、つなぐと「媒体が見つかりました」と出ますので、 それなりに認識されているようです。 /usr/sbin/cfgadm でも、つないだ場合には
Ap_Id Type Receptacle Occupant Condition
c0 scsi-bus connected configured unknown
usb0/1 unknown empty unconfigured ok
usb0/2 usb-storage connected configured ok
usb0/3 usb-kbd connected configured ok
usb0/4 usb-mouse connected configured ok
のように表示されます (usb0/2 の usb-storage が USB メモリ)。
ということで手動でのマウントをしてみました。dmesg の出力から、 usb0/2 に対応しているのは /dev/dsk/c2t0d0s0 だとわかりました (ls -l /dev/dsk と dmesg のデバイス名を比較してみるとわかる) ので、
# /sbin/mount -F pcfs /dev/dsk/c2t0d0s0 /mnt
としてみたのですが、
「mount: /dev/dsk/c2t0d0s0 is already mounted, /mnt is busy,
or allowable number of mount points exceeded」
のように表示されるだけでマウントできません。
s0 を s1, s2 のように変えてみても変化なしです。
さらに情報を探してみると、どうやらデバイス名の最後に :c のようなものをつけるらしい、とありましたので、
# /sbin/mount -F pcfs /dev/dsk/c2t0d0s0:c /mnt
とやったらうまくいきました。これを sudo で学生に許可すれば、
家にデータを持ってかえるのも楽にできそうです。
UTF-8 への対応や SVG 出力ができる Tgif-4.2.2 が出ていました。 内部で Xutf8TextListToTextProperty() なる UTF-8 用の関数を使っているようですが、 Solaris 9 にはありません。 XmbTextListToTextProperty() は libX11.so 内にあるようです。 よって、ローカルに新しい libX11 (libX11-6.2.1) を必要なもの (例えば libXau-0.1.1) とともにインストールして、 そちらを参照するようにしてコンパイルしました。
しかし、そのせいか不安定なようで「SIGSEGV signal received.」 などと言って落ちることがあるようです。
ちなみに SVG への出力は自前ではなく、pstoedit などを使用するようです。
OpenOffice 3.X は Solaris 10 を要求するようなので、 Solaris 9 用に OpenOffice 2.4.2 を入れてみました。 OOo_2.4.2_SolarisSparc_install_ja.tar.gz をダウンロードして、 展開して root で
./update
とすると GUI のインストーラーが立ち上がって対話的にインストールが進みます。
/opt/openoffice.org2.4/program/soffice
を実行するととりあえず使えるようなので、
パスの通っているところにこれのリンクを貼りました。
Solaris 9 で firefox-3.X をコンパイルしようと、 gtk+-2.X のコンパイルを以下を参考に始めました。
結論から言えば、Solaris 9 では firefox3.X のコンパイルには成功していません (ちゃんと動くものはできていません)。 ただ、その途中でいくつか Solaris 特有の問題にであったので、 ここに情報を上げておきます。
cairo のコンパイルで、ctime_r() で問題がでました。 一般的な ctime_r() は引数は 2 つらしいのですが、 Solaris には 3 つ目の引数があります。 これに対する解決策は以下のようなものがあるようです。
pango のコンパイルでは make check で nm のところでこけたので、 GNU nm を入れようかと思ったのですが、 nm を nm -p に変えてうまくいきました。
また、libnotify-0.4.5 のコンパイルで、 libnotify/notification.h の NotifyUrgency の定義で enum の最後のエントリが , で終わっているところでコンパイルエラーとなりました (gcc-3.4.3)。他にも、よくある stdint.h の問題 (inttypes.h で代用)、 テストスクリプトなどの /bin/sh を /bin/bash に変更、 などがありました。
firefox のコンパイルでもいくつかパッチを当てました。 典型的なものは、floorf(), ceilf(), round() がない問題、 X11/Xlib.h の前に X11/extensions/Xrender.h が インクルードされているために起きる問題、 madvise() のプロトタイプが引けない問題、 setenv(), unsetenv() がない問題などです。 その辺りのパッチにミスがあったのか、 gcc のバージョンが古いせいかはわかりませんが、 シンプルな Web サイトなら表示できるところまでは行ったようなのですが、 安定して動作するところまではいっていません。
やはり Solaris 10 に移行するしかないのでしょうか。
emacs-23.2 を Solaris 9 にインストールしてみたのですが、 Solaris 9 では atok12setup を実行すれば XIM で atok が使えるようです (kterm ではだめ)。 M-x set-input-method を見ると japanese ってのがあってこれも使えます。 japanese-anthy なんてのもありますし、 skk の設定をすると japanese-skk も入ります。 けど、下手をすると skk, input-method, XIM が 3 重に立ち上がることもあって、 ちょっと厄介です。
Perl-5.12.1 を Solaris 9 にインストールしようと、 コンパイルして make test したのですが、
t/op/stash.........Segmentation Fault - core dumped
ok
なんてのがでました。調べてみると Solaris で起きるもののようです。
syslog に
Sep 8 17:17:32 localhost perl: uid XXXX is testing Perl
5.012001 syslog(3) capabilities by connecting to a inet
socket, setting a fake errno: Not owner
なんてのが残ってました。まあ普段の利用で問題が出るようなら考えてみます。
今まで私はメールを読む場合、 メールサーバから MH の inc を用いて pop3 (APOP) でメールを取得していました。 しかし、APOP だとメールサーバのパスワードは暗号化してくれますが、 メール本文は暗号化してくれませんから、 今回 SSH のポート転送を用いて途中の経路を暗号化してみることにしました。 今ごろ MH なんて使う人はいないのか、 こういう話は Web 上にもほとんどないようですので、 ここにまとめておきます。
まず、メールサーバホスト名を仮に mailserver とし、 ここでは qpopper が inetd 経由で立ち上がるとします。 mailserver の /etc/services には以下のエントリがあります。
pop3 110/tcpメールを取得するローカルホストは myhost (= localhost) とし、 こちらで inc (MH) でメールを取得します。 これまでは、myhost の ~/.mh_profile には 以下のようなエントリが書かれていました。
inc: -host mailserver -apop -form scan.mimemyhost の /etc/services にも上と同じ
pop3 110/tcpが書かれています。また、apop のパスワードは、myhost の ~/.netrc に 以下のように書かれています (user 名は仮に hoge、 パスワードは仮に hugahuga とします)。
machine mailserver
login hoge
password hugahuga
これを SSH のポート転送を行うように変更するためには、 以下のようにすればいいようです。
myhost で SSH のポート転送を行うために以下のように バックグラウンドで ssh を立ち上げる。
ssh -f -N -L 8110:localhost:110 mailserverこれによって localhost の 8110 番のポートが SSH を通して mailserver の 110 番ポートにつながることになる。
なお、localhost の 110 番ポート自体を使用しようとすると、 ssh に "Privileged ports can only be forwarded by root." のように言われて一般ユーザでの使用は拒否される。
inc: -host localhost -apop -form scan.mimeこれによって inc は localhost に接続してメールを取得しようとする
pop3 8110/tcpこれで、localhost (= myhost) への inc の接続は 8110 番ポートを利用しようとすることになる。
machine localhost
login hoge
password hugahuga
これによって、inc によって mailserver から APOP でメールを ssh を通して取得できることになります。 この設定に関しては、以下の本を参考にいたしました (もちろん MH や inc について書いてあるわけではありません)。
まあ本来は、現在のメール配送経路の状況からして、 暗号化が必要なほどの内容のものはメールでは送らない、 というポリシーを皆で共有するべきなんでしょうが...
Solaris 9 で swftools-0.8.1 をコンパイルしました。 コンパイル自体はそれほど問題なく、 configure & make でほぼうまくいったのですが、 画像を SWF に変換したときに問題が起こりました。
PNG 画像ファイルを png2swf で SWF に変換したものは問題はなかったのですが、 GIF 画像ファイルを gif2swf で SWF に変換したものは、 なぜか背景が黒くなってしまいました (原画像は背景は白)。 GIF animation も同様に背景が黒くなってしまいます。
インターネット上には情報がありませんでしたので、 ソースを読んで見たのですが、 gif2swf.c で背景色と透過色を黒にしているコードがありましたので、 それを修正することでうまくいきました。 ただ、SWF の仕組みとかをよく知りませんので、 元の仕様も残すようにして、 オプションによって GIF 画像の背景色をそのまま使用する、 というパッチを作りました。
これを適用すると、-b, --bgcolor というコマンドラインオプションが追加され、 これをつけて実行すると GIF 原画像の背景色を利用するようになります (オリジナルの仕様は背景色は強制的に黒になるよう)。
「Unix に関するメモ等 (03/04 2009)」 に書いた Solaris 9 で ming-0.4.2 のコンパイルの問題ですが、 よく調べると、configure スクリプトで endian の判別をしているのですが、 どうやら configure スクリプトの問題 (正確には configure.in のバグ) でそれがうまく反映されていないようで、 Makeifle の CFLAG に "-DSWF_LITTLE_ENDIAN" がついていました。 これを含め以下のような対処が必要なようです。
以上のものをまとめたのが以下のパッチです。
また実際には、うちは上のパッチに加え、さらに以下の対処も行っています。
まだ実際に使ってみたわけではありませんので、 これで完全だとはいいませんが、 とりあえず configure, make, make check 位は通るようになるようです。 また、うちは Python が安定していませんので、 configure で --with-python はつけていませんから、 ほかにも python 関連のバグがあるかもしれません。
Solaris 9 で ming-0.4.2 のコンパイルをしたのですが、 いくつか問題があってまだうまくいっていません。 小さい修正で一見うまくいったように見えたのですが、 make check すると listswf の出す SWF ファイルの情報のうち、 整数値がまるで変でした。
インターネットで検索してもまるで情報が見当たりませんでしたが、 ソースを見てみると、どうやら ming のソースは PC 用の Linux などの little endian マシンを仮定して書かれているようで、 Solaris (というより正確には Sparc) のような big endian マシンのことを考慮していないようです (例えば util/read.c, util/listfdb.c など)。 SWF ファイルのヘッダデータは little endian らしいので、 ファイル入出力のところをちゃんと直さないとうまくなさそうです。 その辺がうまくいきそうならまた報告したいと思います。
「Unix に関するメモ等 (12/31 2008)」 に書いた、自前コンパイルの firefox (2.0.0.20) ですが、 やはり安定性が良くなく、 ちょっと凝ったページを開くと落ちてしまいます (remote の FreeBSD から立ち上げると落ちなかったりするんですが...)。
ということで、現在は残念ながらまともに使用できていません。 引き続き 3.0.5 のコンパイルに挑戦していますが、 これがまた難物で、なんとかコンパイルは通ったものの、 まだ動くものができていません。 多少でも動くようになったら報告します。
うちの Solaris 9 には、今まで firefox は、 以下の contrib/ にあるボランティアによる Solaris 8 用の コンパイル済みバイナリをインストールしていまいた。
ところが、以下のような事情で、 今回は 2.0.0.20 のソースを自前でコンパイルしてみました。
実は今までもコンパイルしてみたことはあったのですが、全然うまくいかず、 しかも Solaris でのコンパイルに関する情報が ほとんどなかったのであきらめていたのですが、 今回は少し気合いを入れてやってみました。 そのときの話をここにまとめておきたいと思います。
従来の Solaris 8 用のバイナリは gtk1 でコンパイルされていたのですが、 Solaris 9 には、gtk は以下のように 2 種類入っているようです。
まずは /usr/lib の方を使って gtk2 でのコンパイルを試みました。 コンパイラは gcc-3.4.3 です。
環境変数を以下のように設定します (うちは tcsh)。
set path = ( $prefix/bin /usr/bin $path )なお、$prefix はインストール先ですが、 ここは最初は何もインストールされていないディレクトリです。 これらの変数に /usr/sfw を入れてしまうと そちらの glib.h などをインクルードしようとして失敗しますので、 この場合は /usr/sfw を入れないようにします。
setenv PKG_CONFIG_PATH "$prefix/lib/pkgconfig:/usr/lib/pkgconfig"
setenv LDFLAGS "-L$prefix/lib -L/usr/lib -R$prefix/lib:/usr/lib"
setenv CPPFLAGS "-I$prefix/include -I/usr/include"
pango は /usr/lib には pango-1.0.0 しか入ってないのですが、 configure では 1.1.0 以上を要求されます。 よって先に $prefix にそれより新しい pango を入れる必要があります。 ただし、pango-1.1.5 以上だと glib-2.1.3 以上を要求されるのですが、 /usr/lib には glib-2.0.7 しか入ってません。 だから、pango-1.1.4 などを入れる必要があります。
しかし、pango は freetype ライブラリを必要としますので、 pango のコンパイルでは /usr/sfw を入れないといけません (/us/lib には freetype ライブラリが入ってない)。 よって、pango のコンパイル時だけ 上の PKG_CONFIG_PATH, LDFLAGS, CPPFLAGS に /usr/sfw の各ディレクトリを追加してコンパイルしました。
また freetype に関して、直接「#include <freetype/freetype.h>」 と書いてあるところは、以下のように変更する必要がありました。
#include <ft2build.h>
#include FT_FREETYPE_H
X のディレクトリの /usr/openwin は自動的に認識してくれるのですが、 そこにある Xrender.h (/usr/openwin/include/X11/extensions/Xrender.h) は古いのか PictStandardA4 等が定義されてなくて、 それでコンパイルに失敗します。 よって、render-0.8.tar.gz, xrender-0.8.3.tar.gz を $prefix に入れておきます。 これはほぼ configure ; make ; make install でできます。
/usr/include/gnome-vfs-2.0/libgnomevfs/gnome-vfs-{file-info,xfer}.h の enum の定義の最後に ',' が残っているところでエラーが出ますので、 それを削除しておきます。
mozilla/.mozconfig は、とりあえず以下のように設定しました。
. $topsrcdir/browser/config/mozconfigdebug と tests を disable にしておかないと、 できあがったバイナリを実行すると ずらずらとデバッグメッセージが表示されるものができます。 --disable-libxul, --disable-crashreporter は、 Solaris に関する情報としてあったようなのでつけておきました。 これで gmake -f client.mk build すると、gtk2 などを認識してくれます。 この設定でコンパイルすると、 そのバイナリ等は mozilla/obj-ff/ 以下にできます。
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/obj-ff
ac_add_options --disable-libxul
#ac_add_options --enable-debug --disable-optimize
ac_add_options --disable-debug --disable-test --enable-optimize
ac_add_options --enable-shared --disable-static
#ac_add_options --disable-shared --enable-static
ac_add_options --disable-crashreporter
ac_add_options --enable-svg
ac_add_options --prefix=$prefix
リンクオプションに不正なオプションがあったので、 configure が済んだあとで mozilla/obj-ff/config.status を見ると、
s%@MOZ_FIX_LINK_PATHS@%-Wl,-rpath-link,$(DIST)/bin%gとなっていました。これは Solaris の ld では
s%@MOZ_FIX_LINK_PATHS@%-R $(DIST)/bin%gとならないといけません。よって、configure を直接修正して、 そのようになるように変えました。
うちは gcc を /usr/local/GNU に入れてあるのですが、 できたバイナリ、shared library が libgcc_s.so が引けない 問題が起こることがあるので、 それを -R/usr/local/GNU/lib として入れる必要があります。 それを LDFLAGS とデフォルトの設定 (mozilla/security/coreconf/SunOS5.9.mk) に入れておきます (LDFLAGS だけではうまくいかないようです)。
setenv LDFLAGS "$LDFLAGS -L/usr/local/GNU/lib -R/usr/local/GNU/lib"
せっかく上で $prefix に Xrender をインストールしたのですが、 cairo のコンパイル時にコンパイルオプションとして /usr/openwin を $prefix より先につけてしまうので、 $prefix の方を読んでくれません。 よって、環境変数として以下を追加する必要がありました。
setenv X_CFLAGS "$prefix/lib/pkgconfig:/usr/lib/pkgconfig"
setenv X_LIBS "-L$prefix/lib -L/usr/lib -R$prefix/lib:/usr/lib"
freetype ライブラリのヘッダファイルも必要となるようなのですが (mozilla/gfx/src/ps/nsFontMetricsPS.h)、 そのヘッダファイルを探せないようなので、 $prefix にヘッダファイルへのリンクを入れ、 configure スクリプトに freetype ライブラリ (に必要なもの) を追加しました。
pushd $prefix/include
ln -s /usr/sfw/include/ft2build.h .
ln -s /usr/sfw/include/freetype2/freetype .
popd
コンパイルは gmake -f client.mk build とせよ、とあるのですが、 インストールについてはあまりちゃんと書いてありません (インストーラーを作るには、なんてのはあるみたいですが)。 けどそれは、gmake -f client.mk install でできました。
とりあえずこれで一応動くものができましたが、 やはりだいぶ感じが違っています (し、多少問題もありました) ので、 インストールした $prefix ディレクトリの名前を一旦 mv で変えておいて、 今度は 2.0.0.19 のバイナリ配布物と同じようなもの (gtk1) を作ってみることにしました。
mozilla/.mozconfig の設定はよくわかりませんが、 ldd で 2.0.0.19 の引いているライブラリと 2.0.0.20 のライブラリを比較して、 違っているところを設定するようにして、今度は以下のようにしてみました。
. $topsrcdir/browser/config/mozconfig変更点は、obj-ff2 にしたこと、 --enable-crypto と --enable-default-toolkit=gtk (gtk1) としたことです。
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/obj-ff2
ac_add_options --disable-libxul
#ac_add_options --enable-debug --disable-optimize
ac_add_options --disable-debug --disable-test --enable-optimize
ac_add_options --enable-shared --disable-static
#ac_add_options --disable-shared --enable-static
ac_add_options --disable-crashreporter
ac_add_options --enable-svg
ac_add_options --enable-crypto
ac_add_options --enable-default-toolkit=gtk
ac_add_options --prefix=$prefix
環境変数は今度は以下のように設定します。
set path = ( /usr/sfw/bin $prefix/bin /usr/bin $path )この場合は /usr/lib を入れないようにします。
setenv PKG_CONFIG_PATH "/usr/sfw/lib/pkgconfig:$prefix/lib/pkgconfig"
setenv LDFLAGS "-L/usr/sfw/lib -L$prefix/lib -L/usr/local/GNU/lib"
setenv LDFLAGS "$LDFLAGS -R/usr/sfw/lib:$prefix/lib:/usr/local/GNU/lib"
setenv CPPFLAGS "-I/usf/sfw/include -I/usr/sfw/lib/glib/include -I$prefix/include"
setenv X_CFLAGS "$CPPFLAGS"
setenv X_LIBS "$LDFLAGS"
libIDL が必要なようです。 /usr/lib にも入ってるのですが、 これは glib-2.0 を引いていますので多分使用できません。 少し前の libIDL を入れる必要があるようなので、 libIDL-0.6.8 を $prefix に入れました。 ほぼ configure ; make ; make install でできるのですが、 途中で libtool が LDFLAGS に入れてある -R の設定を抜いてしまうようで、 できたライブラリが /usr/sfw/lib の shared ライブラリを 一部引けていませんでした。よって、make の際には、
( setenv LD_RUN_PATH /usr/sfw/lib ; make )としました。
Xrender の問題はやはり起こるようだったので、 先にコンパイルした Xrender のヘッダとライブラリを 新しい $prefix にもコピーしました。
obj-ff2/dist/include/gfx/nsIFreeType2.h で FTC_Image_Cache がない とかいうエラーがでました。 確かに freetype のヘッダファイルにはそういうものはないようでしたが、 FTC_ImageCache はあったので、その変更だけすればいいのかな、 と思ったらそうではありませんでした。 これは検索したら情報が見つかりました。
主にこの後者を参考に、以下のようなパッチを作って対処しました。
とりあえずこれでめでたくそれなりに使えるものができました。
なお、上の .mozconfig では native の svg を有効にしてあるのですが、 実際に svg ファイルを開くと firefox が落ちてしまいます。 あまり安定していないようなので、 もう少し様子を見て外そうかと思っています。
私は今まで HTML ファイルは主に emacs-19.34 (mule-2.3) を使って書いていて、 html-mode は元々 emacs 付属の sgml-mode のまま、 font-lock も色を多少変える程度で ほとんどカスタマイズもせずに使っていました。
今後、HTML を emacs-20.7 で書かないといけなくなったのですが、 コメントの部分の font-lock の表示が以下のように変わってしまっていて、 今までと同じ作業をするのがやや面倒になってしまいました。
HTML ファイルを更新するときに、[Update] などの強調表示部分や、 あるブロックをコメントアウトしたりすることはよく行うので、 そこがまるまるコメント部分らしく表示されないと、 どこがコメントアウトされているのかそうでないのかが非常にわかりづらく、 更新作業にやや支障をきたし始めていました。
インターネットで情報を検索したり、 両者の font-lock.el や sgml-mode.el を比較してみたりしたのですが、 どうもよくわかりませんでした。 他の html-mode (yahtml, psgml) などを見てもよくわからなかったのですが、 結局 html-helper-mode (のβ版) を参考にしながら、 以下のようなもので適当に逃げることができました。
(font-lock-add-keywords
'html-mode
'(("<!--\\([^-]\\|-[^-]\\)*-->"
0 font-lock-comment-face t)))
html-helper-mode には、コメント内の "--" の扱いを考慮して
もうちょっと複雑に書いてあるのですが、
私はまあコメント内に "--" を書くことはほとんどなかろうと思って
簡単にしてあります。
とりあえず上のような対処で、
今までのように HTML ファイルの一部分を
簡単にコメントアウトできるようになってほっとしています。
学生が Mew を使っているのですが、 署名がついていないことに気がついて、 はて、自動的に署名をつけるにはどうするのかと調べてみました。
インターネットで検索すると、 以下のようにするという情報が 2 件ほどみつかりました:
(setq mew-signature-insert-last t)
(add-hook 'mew-send-hook 'mew-draft-insert-signature)
1 行目のものは、signature を本文最後にとりこむための設定、 2 行目のものが、メール送信時に C-c TAB を行ったのと 同じ動作をさせるための設定です。
ただ、これだと Draft バッファでメール本文を作成したときには署名はなくて、 最後に C-c C-c でメールを送信しようとしたときに署名がつきます。 だから、署名を C-c TAB で取り込んだ後にメールを送信してしまうと 2 つの署名をつけてしまいますし、 逆に署名を消してメールを送ることができません。
これを解消するためには、「Draft バッファが開いたときに signature を自動的に取り込むようにする」とすればいいのですが、 Mew のソースを見ながらテストしてみたら、 以下のような感じでそれができそうなことがわかりました:
(setq mew-signature-insert-last t)
(add-hook 'mew-draft-mode-hook 'mew-draft-insert-signature)
(add-hook 'mew-before-cite-hook
(function (lambda ()
(goto-char (mew-header-end))
(forward-line))))
この 2 行目は、Draft モードになったときに最後の方で実行される設定です。
しかし、これだけだと、w (新規の送信メールの作成) や
a (引用なしの返信作成) はいいのですが、
A (引用ありの返信作成) の場合に、
本文に署名が書かれた後に引用 (citation) が行われてしまうので、
mew-signature-insert-last の設定に関わらず、
署名の下に引用部分がついてしまいます。
これを回避するために、3 行目以降の設定を行っています。 mew-befor-cite-hook は、引用のとりこみ前に実行されるもので、 そこで現在位置をメールの本文の先頭 (ヘッダの最終行の次の行) へと移動しています。 そこに引用を取り込めば、ヘッダと署名の間にうまく入ってくれるわけです。
もちろん、引用を署名の後ろに書きたい (商用メールはそういう形式が多いようですが) 場合には、 この 3 行目以降の設定は不要です。
最近 Solaris (9) のマシンに PostgreSQL-8.3.0 をインストールしたのですが、 少し問題がありましたので、ここにまとめておきます。
まずは、OpenSSL サポートもあるようだったので、 それをつけて (configure --with-openssl) 普通にコンパイルしたら link エラーが大量に発生しました。 これは、OpenSSL のライブラリ libcrypto, libssl を static ライブラリ (.a) しか作っていないためのものです。 OpenSSL のドキュメントを見るとわかりますが、 デフォルトでは OpenSSL は shared ライブラリは 作らないようになっているようです。 この問題を回避するには、例えば以下のような 3 通りの方法があります。
OpenSSL も新しいものが出ていたので、 ここでは最終的には最後のものを選択しましたが、 実は最初は --disable-shared を選択して PostgreSQL をコンパイルしたのですが、 もう忘れてしまいましたが何か問題があったように思います (make check だったかな ?)。
--with-python で Python サポートもしようとしたのですが、 やはり libpython が static ライブラリしかないのでだめでした。
私は /usr/local のライブラリを、 /usr/local 以下にさらにディレクトリを掘って分散して置いていて そのために LDFLAGS に "-L/usr/local/hoge/lib -R/usr/local/hoge/lib" みたいなものを複数入れることが多いのですが、 コンパイル後にできたバイナリを ldd で調べてみたら、 いくつかの shared ライブラリが引けていないことに気がつきました。
それらは LDFLAGS にはちゃんと入れてあるのでなぜかと思ったのですが、 "configure --disable-rpath" としないと、 src/Makefile.global で LDFLAGS に "-Wl,R'$prefix/lib'" のようなものを追加してつけてくれるようで、 それで $prefix/lib 以外にある 一部のライブラリが引けなくなっているようでした。
ということで、それは "configure --disable-rpath" として そのリンカオプションの追加をやめ、 LDFLAGS に "-L$prefix/lib -R$prefix/lib" も追加することで対処しました。
コンパイル後に make check すると、 initdb でセマフォのリソースが足らん、といったようなメッセージが出ました。 以下 (PostgreSQL 8.1.4文書: 第 16 章オペレーティングシステムの環境) の 16.3.1 節の最後のものとほぼ同じです:
そこに示されている通り、/etc/system に設定を追加しました:
set semsys:seminfo_semmni=100ただし、示されている推奨値よりも多少控え目な数値にしてあります。 OS を reboot すると、/usr/sbin/sysdef の結果は、 最初はうまく更新されませんでしたが、 しばらくして (後で make check した後だったか) やってみたらうまく更新されていました。
set semsys:seminfo_semmns=100
set semsys:seminfo_semmsl=32
set semsys:seminfo_semopm=20
ただ Solaris 10 では、System V IPC 関連のパラメータは、 /etc/system に設定して reboot するという方式ではなくなった、 という情報があります:
$prefix/lib/postgresql/ のファイル (shared ライブラリモジュール) を 調べて気がついたのですが、こちらのライブラリを作成するときは LDFLAGS の設定が効かず -R... がつかないので、 やはりいくつかのライブラリが引けなくなっていました。
このライブラリの作成時は、LDFLAGS_SL なるものを参照するようなので、 LDFLAGS_SL に LDFLAGS と同じものを設定して configure, make をやり直しました。
これで make check は通るようになったのですが、 ドキュメントにある通りインストール後に initdb を実行してテストしてみるとうまく行かず、 以下のようなエラーが出ます:
creating conversions ... FATAL: could not access file "$libdir/ascii_and_mic": No such file or directory色々と調べてみたところ (initdb や postgres のソースなども)、 結局、これは $prefix/share/postgresql/ にある以下の 3 つのファイルに そのように書かれているためだとわかりました:
conversion_create.sql, snowball_create.sql, postgres.bki本来は、これらを作成するところを修正するとか、 別な設定で修正するのが筋なのかもしれませんが、 とりあえずこれらのファイルに書かれている "$libdir" という文字列を、実際に ascii_nad_mic.so がある "/usr/local/hoge/lib/postgresql" のような文字列に sed を使って変換することで回避しました。
まだ問題が含まれている可能性は十分にありますが、 とりあえず以上のような対応で、なんとか make check, およびインストール後の簡単なテストが通るものができました (ここまでに何度 configure ; make ; make intall を繰り返したことか...)。
最近 Solaris (9) のマシンに libsvg (0.1.4), libsvg-cairo (0.1.6) svg2png (0.1.3), svg2pdf (0.1.3), xsvg (0.2.1) をインストールしたのですが、 少し問題がありましたので、ここにまとめておきます。 なおこれらは、以下にあります:
まず libsvg-0.1.4 ですが、stdint.h がないと言われます。 configure では stdint.h や inttypes.h のチェックはしているのですが、 実際にはそれが有効に使われていないようで、 以下のようなパッチを当てる必要があります:
次に libsvg-cairo はすんなりコンパイルできたのですが、 svg2png, svg2pdf, xsvg は Solaris にはない getopt_long() を使っているので、 GNU gentetopt (2.21) をインストールしてそれをカバーしました。 ただ、gengetopt の make check でこけるので、それを修正する必要があります:
gengetopt を使うには、例えば svg2png ディレクトリで 以下のようにすればいいです。
cd src
ln -s /usr/local/share/gengetopt/gnugengetopt.h getopt.h
gcc -I. -c -o getopt.o /usr/local/share/gengetopt/getopt.c
gcc -I. -c -o getopt1.o /usr/local/share/gengetopt/getopt1.c
cd ..
make 'AM_LDFLAGS=getopt.o getopt1.o'
なお xsvg のコンパイルでは、 -lXrender, -lX11 のライブラリフラグもつかなかったので、
make 'AM_LDFLAGS=getopt.o getopt1.o -lXrender -lX11'とする必要がありました。
これで SVG ファイルを見てみたのですが、 なぜか緑色 (green) が出ません。 調べてみると、どうやら libsvg のバグのようです。 src/svg_color.c に色の表があるのですが、 それに対して色文字列から色データを引くときに bsearch() を使っていて、 bsearch() は元々の表がソートされていないといけませんが、 実際には 2 箇所程ソート順になっていないものがあって、 そのせいで green, greenyellow, mediumnightblue の 3 色が出なくなっています (黒になります)。 これは以下のパッチで修正できます:
色名にも多少ミスプリントがあるようですが、それは直していません。
Solaris のマシン (Solaris 9, Ultra 1, gcc-3.4.3) 上で guile-1.8.2 のインストールをやったのですが、 多少てこずりましたので、ここにまとめておきます。
まず、普通に configure & make でコンパイルしたのですが、
しかし、これには configure.in の修正も含まれていたので、 autoconf, automake も新しくし (autoconf-2.61, automake-1.10)、 そして autoreconf して configure & make したのですが、 今度は
しかし今度は make check がうまくいきません。 よく見ると、autoreconf した後で configure したものが どうもうまく行っていませんでした。調べてみると、 サブディレクトリ guile-readline/ の中の configure に失敗しています。 見ると、この中にある configure.in で生成される configure に . だけの行とか、" だけの行のようなゴミのようなものがあります。
オリジナルの configure スクリプトと比較してわかったのですが、 例えば「"1.8.2"」のような部分 (バージョン表記) が、 なぜか「"-n 1.8.2」と、 そこで改行された次の行の「"」単独行に分けられてしまっていました。 configure.in の対応する部分を見ると 「echo -n ${GUILE_VERSION}」のようになっていて、 つまり echo の -n オプション (改行文字を最後に出力しない) が認識されていないために起こっている問題のように見えます。 実際、Solaris の /bin/echo は -n を認識しません。
path を変更してみたりしてもどうにもうまく行かなかったのですが、 guile の top ディレクトリの configure.in に 以下のようなヒントが書かれてありました:
dnl `patsubst' here deletes the newline which "echo" prints.ということで、これに従って (そしてその configure.in での実際の patsubst() の使用法に従って) guile-readline/configure.in を修正してなんとかなりました。
dnl We can't use "echo -n" since -n is not portable (see autoconf
dnl manual "Limitations of Builtins"), in particular on solaris
dnl it results in a literal "-n" in the output.
どうも、top ディレクトリの configure.in では、 そういう (Solaris への) 配慮が取られているものの、 下のディレクトリ guile-readline/ でそれが抜けているような感じです。
make check では一箇所 FAIL を出すのですが、 とりあえず以上のような対処で一通りコンパイルが通るものができました。 以上の対処をパッチにしたものを以下に置きます。
「Unix に関するメモ等 (12/21 2007)」 に書いた sh-mode の .emacs の設定の件ですが、 emacs-20.7 の場合、そこに書いた設定だと、 sh-mode で任意のファイルを開いたときに先頭行が書き換えられてしまいます。
emacs-19.34 の場合の sh-mode のデフォルトのように、 新規のファイルを開いたときにだけそれを有効にするには、 以下のようにする必要があります。
(add-hook 'sh-mode-hook
(lambda ()
(and (zerop (buffer-size))
(not buffer-read-only)
(sh-set-shell "/bin/csh" t t)))) ; OK
; (sh-set-shell sh-shell-file t t)))) ; OK
; (sh-set-shell (or (getenv "SHELL") "/bin/csh") t t)))) ; OK
emacs-19.34 では、デフォルトでそう設定されていますので、
そうする必要はありません。
私は普段複数のマシンで emacs-19.34 (mule) と emacs-20.7 (emcws) を使い分けているのですが、 hoge.csh のような名前のファイルを呼び出すと sh-mode (Shell-script mode) になりますが、 emacs-19.34 では、そのファイルがまだない場合 (つまり新規に作成されるときには)、その先頭に
#! /bin/tcsh -f
のような行が自動的に挿入されていましたが、
emacs-20.7 ではそうはなっていませんでした。
sh-mode の emacs-lisp ファイル sh-script.el を調べてみると、 これは sh-set-shell という関数が行っているようで、 emacs-19.34 では sh-mode 内でデフォルトで "(sh-set-shell sh-shell-file)" が評価されているようなのですが、 emacs-20.7 ではそうなっていないために、 自動的な挿入が行われていないようです。
色々試したところ、.emacs に以下のように書けば、emacs-20.7 でも 自動的に上のような先頭行が挿入されるようになるようです。
(add-hook 'sh-mode-hook
(lambda ()
(sh-set-shell "/bin/csh" t t))) ; OK
; (sh-set-shell sh-shell-file t t))) ; OK
; (sh-set-shell (or (getenv "SHELL") "/bin/csh") t t))) ; OK
3 行目の行は、その下の 2 行のいずれかに変えてもいいようです。
逆に、emacs-19.34 では自動的に (sh-set-shell sh-shell-file) が実行されてしまっているのですが、この sh-shell-file は
(or (getenv "SHELL") "/bin/sh")
のように定義されていますので、
(設定されていれば) 環境変数 SHELL の値が使われてしまいます。
これを、別のものに変えようと、
上のように add-hook を使って切り替えてみると、
実際には直接変わってはくれず、
一度 SHELL の値による先頭行が設定され、それを変更しますか、
という問い合わせが入ってしまうようです。
そこで y と入力すれば、一応設定した値による行に書き換えられます。
なお、emacs-19.34 の場合は、sh-set-shell の最後の
2 つの "t t" は不要なようです。
Canon のデジタルカメラ IXY Digital 10 を買ったのですが、 Solaris 10 だと /usr/sfw/bin に gphoto2 が入っていて USB からでもデジタルカメラのデータの吸い出しができるようなのですが、 Solaris 9 だと libusb もなく (Solaris 9 に付属する USB 用の別のライブラリはある)、 USB 経由の gphoto2 が使えないみたいです。
Unix 用の USB 経由のカメラデータ (Canon) の吸い出し (PTP) ソフトとしては、 gphoto2, s10sh, ptpcanon などがあるようですが、 いずれも USB に関しては libusb に依存していて 残念ながら Solaris 9 ではだめみたいです。
このカメラを Blade 150 の USB ポートにつないだときの 認識具合は以下のような感じです:
# cfgadm
Ap_Id Type Receptacle Occupant Condition
...
usb0/2 usb-device connected configured ok
...
# cfgadm -vl
Ap_Id Receptacle Occupant Condition Information When Type
Busy Phys_Id
...
usb0/2 connected configured ok Mfg: Canon Inc.
Product: Canon Digital Camera NConfigs: 1 Config: 0
<no cfg str descr>
...
# cfgadm -c configure usb0/2
cfgadm: Configuration operation invalid: device already configured
for ap_id: /devices/pci@1f,0/usb@c,3:2
cfgadm -vl の方は、Information 以降の表示が桁と対応が
うまく取れていませんのでやや見にくいです。
prtconf で見ると、
# prtconf -v
device (driver not attached)
Hardware properties:
name='usb-product-name' type=string items=1
value='Canon Digital Camera'
name='usb-vendor-name' type=string items=1
value='Canon Inc.'
....
のように表示され、product-ID, vendor-ID なども表示されるのですが、
/var/adm/messages には
usba: [ID 812112 kern.warning]
WARNING: usba: no driver found for device Canon Inc. Canon
Digital Camera DDBFD73AC....
のように出ていて、確かにちゃんとは使え「なさそうな」雰囲気はあります。
FreeBSD ならば、gphoto2 でちゃんと使えるようです (FreeBSD-4.11, 5.4)。 s10sh, ptpcanon はうまくいきませんでした ( FreeBSD のカーネルに関するメモ (11/19 2007) 参照)。
うちの Solaris 9 で使っている GNU 系のツールについて 2 点程書きます。
gcc-4.2.1 のコンパイルをやりはじめたのですが、 libstdc++-v3/include/ext/pb_ds/detail/ の下の、 以下のファイルが見つからない、というエラーが出て止まってしまいました:
resize_policy/hash_load_check_resize_trigger_imp.hppdirectory をよく見てみると、これらのファイルは、 ファイル名が以下のようになってインストールされていました。
bin_search_tree_/constructors_destructor_fn_imps.hpp
resize_policy/hash_load_check_resize_trigger_imp.hpつまり、最後の 1 文字が切れています。
bin_search_tree_/constructors_destructor_fn_imps.hp
他にも同様のファイルがいくつかあり、調べてみると、 元々の tar ファイルの中で、「100 文字長のパスのファイルが 99 文字のパスにカットされてしまっている」ことがわかりました。
これは古い GNU tar (1.12 位) のバグのようで、 gcc のインストールガイドにも GNU tar 1.14 以上が必要、 と書かれています。 /usr/bin/tar でも使っていれば問題なかったのかもしれませんが、 普段 GNU ツールの方を優先パスにしていて、 tar あたりは大丈夫だろうと しばらくバージョンアップしてなかったのが失敗でした。
GNU tar の make check では、 2GB を越えるようなかなり大きいファイルを作成します。 そのようなファイルは、 GNU fileutils (3.13) の ls や rm では処理できませんでした。
これも /usr/bin/ls や /usr/bin/rm ならばちゃんと処理できるようです。 詳しくは man largefile に書いてあります。
いずれも、/usr/bin 等よりも、 GNU 系のツールを優先した PATH 設定にしているための問題でした (別に Solaris のツールを信用してないわけではないのですが...)。
「Unix に関するメモ等 (10/10 2006)」, 「Unix に関するメモ等 (10/12 2006)」 で Solaris 9 上での gtk+-2.8, wxGTK のインストールについて紹介しましたが、 CVS 版の gnuplot で cairopdf (cf. 「gnuplot に関する情報やメモ (07/30 2007), (07/23 2007)」) がサポートされましたので、cairo-pdf が使える cairo (cairo-1.2 以降) にバージョンアップしてみました。 ただし、gtk-demo がちゃんと動くようにするには、 多少パッチを当てる必要がありましたので、報告します。
まず、パッチを当てずにそのままインストールすると、 実行時に以下のようなメッセージが出ることがあります:
Error: Cairo does not yet support the requested image format:
Depth: 8
Alpha mask: 0x00000000
Red mask: 0x00000000
Blue mask: 0x00000000
Green mask: 0x00000000
Please file an enhancement request (quoting the above) at:
http://bugs.freedesktop.org/enter_bug.cgi?product=cairo
assert に失敗しました: NOT_REACHED , (cairo-image-surface.c ファイルの 199 行目)
これは、以下でも報告されていて、そのパッチを当てれば解消されます。
既に、cairo-1.4.X 用のパッチも置いてあるようですが、 私は以下を利用しました。
ただ、それだけではうちは少し足りなくて、 以下のパッチも必要でした。
これは cairo-1.2.4-pseudocolor.diff を当てた後で当てます。
cd src
patch -p0 < ../../cairo-1.2.4-pseudocolor.diff
patch -p2 < ../../cairo124-add.diff
cd ..
これで、一応 gtk-demo もちゃんと動くようになり、
gnuplot の cairopdf terminal も一応動作するようにはなりました。
中越沖地震で、うちの研究室もそれなりに被害はでましたが、 幸いサーバは無事で、データも無事なようでした。 本日ようやく復旧しました
ところで、うちの 富士通 S-7/300U (Sun Ultra 1) ですが、3 年半くらい前に画面がおかしくなって、 グラフィックカードを中古のカード (X3651A: 501-4127) に交換してあったのですが、 また画面がおかしくなりました。
ふと、試しにボードの抜き差し (と軽く中身の掃除) だけやってみたのですが、 なんと復帰してくれました。 けど、もうあまり寿命は長くないのかもしれませんね。 ただ、多分国内ではもうこんなカードは入手が困難なんでは、と思います。
うちの Solaris 9 (sparc) に netpbm-10.34 (http://netpbm.sourceforge.net/) をインストールしましたが、 ちょっと手間取りましたのでここにまとめておきます。
必要だった修正は以下の通りです:
上記のパッチを以下におきます。 基本的には上に書いたものを削除しているだけです。
また、現在の netpbm は、対話型の configure になっていますが、 そこでヘッダーファイルの所在などを指定した場合、 そこにインストールされる以前の netpbm 用 (例えば netpbm-10.31) のヘッダーファイルがインクルードされて、 名前が変更されているマクロが効かないためのエラーも出ました。
なお、実際にはうちでは上の他に、jasper のインストールディレクトリを Makefile.config.in に設定し直してコンパイルしています。
うちの Solaris 9 (sparc) に Anthy (8700b) と scim (1.4.5), scim-anthy (1.2.2) をインストールしましたが、 scim のコンパイルで少し手間どりましたので、 ここにまとめておきます。
大半は、以下に上げられている情報の通りですが、 多少バージョンが違うようで、現象が少し異なります。 なお、うちは Solaris 9 + gcc-3.4.3 でコンパイルを行いました。
コンパイル時に起こる不具合は、以下の通りです。
scim_chartraits.cpp:45: error: no member function `assign' declared in `std::char_traits<scim::ucs4_t>'等が出る。
scim_chartraits.cpp:45: error: invalid function declaration
....
scim_socket.cpp: In function `in_addr scim::__gethostname(const char*)':
scim_socket.cpp:77: error: cannot convert `hostent**' to `int*' for argument `5'
to `hostent* gethostbyname_r(const char*, hostent*, char*, int, int*)'
scim_socket.cpp: In function `in_addr scim::__gethostname(const char*)':
scim_socket.cpp:77: error: invalid conversion from `hostent*' to `int'
なお、これらは一度に表われたのではなく、 一つずつ直しながら順番に表われたものです (最後の scim_socket.cpp のエラーも 2 つに分かれて出たものを まとめて書いています)。
これらは、それぞれ上記の WWW ページに従って、 以下のようにすることで解消しました。
#ifndef SUN_LEN
#define SUN_LEN(su) \
(sizeof(*(su)) - sizeof((su)->sun_path) + strlen((su)->sun_path))
#endif
while ((res = gethostbyname_r (host, &hostbuf, tmphstbuf, hstbuflen, &hp, &herr)) == ERANGE)を、
while ((res = (int) gethostbyname_r (host, &hostbuf, tmphstbuf, hstbuflen, (int *) &hp)) == ERANGE)に修正
とすることで解消できました。 src/scim_chartraits.cpp, src/scim_socket.cpp へのパッチ (上の 1,2,4 番目のもの) を以下に置きます。
なお、上記はコンパイルエラーの解消しか確認してはおらず、 これで正常に動作するかどうかは確認していません。
うちの Solaris 9 に Recommended patch を当てたのですが、 そうしたら一部のマシンのキーマップがおかしくなりました。 Type 5c, Type 7 の日本語キーボードは問題ないのですが、 Type 6 の日本語キーボードのキーマップがおかしいようです。 コンソールログインでは問題なさそうで、 X のキーマップだけ変でした。 原因は 112785-58 あたりかと思います。
調べてみると、113764 というパッチで修正ができそうだったので (Recommended patch には含まれていない)、 113764-05 をダウンロードして patchadd で当てたところ、 今度はちゃんとうまくいきました。 113764-05 に関する情報は以下にあります。
groff-1.18 + 日本語化パッチのコンパイルを Solaris 9 + gcc-3.4.3 (+ bison-1.875) でやってみたときにいくつか問題がありましたので、 ここにまとめておきます。
コンパイルに使用したファイルは、FreeBSD の ports (japanese/groff) を参考にして、以下のものを取得しました。
FreeBSD の ports パッチも多少 Solaris 用に修正して当てて (src/roff/nroff/nroff.sh, tmac/troffrc, src/libs/libgroff/encoding.cc, src/xditview/Imakefile.in; cf. groff1181-sol9.diff (3662 Byte)) コンパイルしたのですが、src/preproc/eqn/eqn.cc のコンパイルで 以下のようなエラーが起きます:
y.tab.c: In function `int yyparse()':この eqn.cc は、bison によって eqn.y から作られるのですが、 実際にはオリジナルの配布物にも含まれています。 それが日本語化パッチを当てることによって、eqn.y が更新されるために bison で eqn.y から eqn.cc を作り直しているのですが、 元々の eqn.cc は問題なくコンパイルできて、 新しく作った eqn.cc の方は上の問題が起きていました。
y.tab.c:XXXX: error: error: expected primary-expression before "__attribute__"
y.tab.c:XXXX: error: expected `;' before "__attribute__"
色々調べてみたところ、bison-1.875 では問題が起こるが、 bison-2.X なら大丈夫、という情報があったので、 bison を 2.3 にバージョンアップしたところ、 ちゃんとコンパイルできるようになりました。 その他に、以下の点に注意する必要があります。
groff (+ 日本語化パッチ) のインストールは、 日本語のオンラインマニュアル形式のファイル (.man) を HTML に変換したかったためなのですが、これで、
groff -man-old -Thtml hoge.man > hoge.htmlで、FreeBSD の場合の "groff -man -Thtml" と同様の出力が 得られるようになりました。
先日、表計算ソフトの出力をそのまま PDF にしたようなファイルから、 データを取り出す作業をやりましたので、その話をまとめておきます。
PDF からテキストデータを取り出すソフトはいくつかあるようですが、 ここでは xpdf-3.01pl2 をインストールして、 それに付属する pdftotext を利用しました。
インストールはあまり苦労なくできました。 pdftotext は、-enc 指定 (例えば -enc EUC-JP) で日本語の情報も取り出すことができます。 今回は表計算形式のデータから情報を取り出しましたが、 その場合は、例えば -raw オプション (データ順を保存して出力)、あるいは -layout (データの物理レイアウトをできるだけ保存して出力) オプションでそれなりにうまく抜き出せるのですが、 以下のような問題がありました。
よって、-raw オプションの出力を参考にしながら、 -layout オプションの出力の分離してしまった行を結合させ、 上下位置の補正も必要に応じて行う、といった作業が必要になりました。 できるだけ手動の処理をしないように (多少はしましたが) awk, sed, grep, csh script などを使って、 なんとか .CSV 形式のファイルに復帰することができました。
なお、pdftotext は -nopgbrk オプションで改ページ (\f) を出力しないようにできるのですが、 今回のファイルの場合、スペースだけの列があると、 そのせいでページ毎に -layout の出力のレイアウトが変ってしまうので、 あえて -nopgbrk を使わずに \f を見て改ページを判断しながら 処理をする必要もありました。
Solaris 9 (SPARC; Ultra1) 上に chasen-2.3.3 (と Text::ChaSen) をインストールしたのですが、多少苦労しましたので、 ここに記録しておきます。 インストールしたソフト、環境は以下の通りです。
gcc, libiconv, perl は既に入れてあるものを使いましたので、 今回は darts-0.2, chasen-2.3.3, ipadic-2.7.0 をインストールしました。
darts-0.2 のインストールは、configure 前に libstdc++.so があるところを
setenv LDFAGS "-L$hoge/lib -R$hoge/lib"のように指定した程度で、簡単にインストールできました。
次は chasen-2.3.3 ですが、まずコンパイルでこけましたが、 これは有名な問題らしくあちこちに情報がありますが、 例えば以下のページに書いてあるような対処 (lib/dartsdic.cpp の修正) をすればコンパイルは通るようになります。 なお、darts-0.2 を使う場合は、後者の setArray() の修正は不要です。
しかし、Solaris (Sparc) の場合はコンパイルは通るのですが、 その後 make check すると segmentation fault が起こります (makeda が落ちる)。 これは残念ながら致命的らしく、 このままだとその後の ipadic のインストールも失敗します。 これは以下に情報がありますが、lib/dartsdic.cpp の std::cerr の文 をコメントアウト (3 つありますが、その 1 つ目と 3 つ目でいいようです) してコンパイルすると make check も通るようになります。
ipadic のインストールは、 上の修正が行われた chasen がインストールされていれば無事に終わります。 なお、ipadic のインストールをした後でないと chasen は利用できません。
その後、chasen-2.3.3 の perl/ ディレクトリに移動して、 README に従って Makefile.PL を修正した後 (libchasen.so のある場所への -L, -R を追加)、 perl Makefile.PL, make, make install したのですが、 perl で Text::ChaSen を使うサンプルを書いてみたらうまく動作せず、 libchasen.so の undefined symbol のようなエラーが出ました。
色々調べたのですが、どうやら Makefile.PL の LIBS の -lchasen の後ろに -lstdc++ を追加 (必要なら libstdc++.so のある場所への -L, -R も追加) して もう一度インストールしたら、ちゃんと使えるようになりました。
なお、上記の「質問箱」の Wiki ページの先頭にも 同様の質問が上がっているのですが、 回答がうまく登録できなかったので (permission denied) そのままにしておきました。
「Unix に関するメモ等 (12/11 2006; no.2)」 に書いた Debian GNU/Linux 上の mgp に関連して、 TeX (LaTeX) で作成した数式 (をコンパイルして dvips を経由して作った EPS 画像) の色を変えることはできないか、と質問されました。 これについて私が考えた答えは、次の 3 つです。
pstopnm -stdout -xsize 400 -portrait file.eps | ppmtoxpm \
| sed -e 's/black/#ff0000/' -e 's/white/gray/' \
| xpmtoppm | ppmtogif > file.gif
pstopnm -stdout -xsize 400 -portrait file.eps \
| ppmchange black '#ff0000' whilte gray file.ppm \
| ppmtogif > file.gif
以上の例で、文字 (数式) が赤で、背景が灰色の画像ができることになります。
Debian GNU/Linux を使っている人から、 mgp (Magicpoint) で EPS 画像がでない、 と聞かれました。 探してみると、debian-users ML に以下のような情報がありました。
以前、emacs で画面幅より長い行がある場合、その画面上でカーソルを 上下移動するにはどうしたらいいか、と聞かれました。 emacs のカーソルの上下移動は、画面の表示とは関係なく、 次の論理的な行の同じ位置への移動なので、 確かに画面幅より長い行がある場合の上下移動が画面とは異なってしまいます。
例えば極端な話、画面幅が 80 桁で、一行に 780 文字含まれる論理行があった場合、 その行だけで画面の 10 行を取ってしまうわけですが、 その画面 10 行の最初の行の先頭から 5 番目の位置にカーソルがいる場合、 カーソルを下に動かすと、それは画面のその下の位置、 すなわち同じ論理行の 85 番目の位置に移動するのではなく、 次の論理行の先頭から 5 番目の位置、 すなわち画面上の 10 行下にジャンプすることになります。
emacs の空白部分も含めて画面の上下移動を自由に行なうモードとして picture モードがありますが (M-x picture-mode)、 これだと、画面行よりも長い行は画面から消えてしまうようです (画面の右端に '$' がついて、右に継続していることが示される)。
しかし、ふと何かで見つけましたが、 小松さん作の physical-line-mode を使うと、 画面上での物理的なカーソルの移動が可能なようです (私はまだ試していません)。詳しくは以下をご覧ください。
w3m を使っているときに、その中の文字列を copy & paste したいんだけど、 と聞かれましたが、 これは最近の w3m ではマウス機能を持っていて、 それが有効になっていて、マウスアクションを特別視しているためです。
'm' によってマウス機能は有効と無効を切り替えられますから (トグルスイッチ)、 それで無効にすれば通常の X でのマウス操作、 例えば copy & paste などが可能になります。
Solaris 9 に gtk+-2.8 を入れたので (cf. 「Unix に関するメモ等 (10/10 2006)」, 「Unix に関するメモ等 (10/12 2006)」)、 ついでに以前一度インストールしようとしてうまくいかなかった inkscape をインストールしてみることにしました。
inkscape は SVG 形式の画像が出力できる画像エディタです。 詳しくは以下をご覧ください。
Inkscape のコンパイルには、gtk+-2.X の他、 glibmm, gtkmm, libxml2, libxslt, libsigc++, Boehm-GC などが必要です。 inkscape-0.41 はあまりうまくいきませんでしたので、 今回は最新版の inkscape-0.44.1 を使用しました。
inkscape は C++ で書かれているのですが、 新しい C99 に沿って書かれているようで、 Solaris 9 には標準的には用意されていない関数がいくつかあるために 何箇所かコンパイルに失敗します。 そのためか、以下のようなコンパイルに関する Wiki ページがあることに気がつきました (インストールが終わってから (;_;))。
このページにも書かれていますが (もっと早くこのページに気づいていれば ...)、 Solaris 9 ではコンパイル時に以下のような問題が起こります。
よって、それぞれほぼ上のページに書かれているような対処を取って コンパイルを通しました。
まだちゃんとテストはしていませんが、 とりあえずはコンパイルできて、立ち上がるようにはなっています。
FreeBSD 4.X でも同様に C99 の問題で inkscape のコンパイルに失敗するようですが、 FreeBSD 5.X 以降だとそれらの対処がとられていて ちゃんとうまくいくようです。
「Unix に関するメモ等 (10/10 2006)」 に書いた、Solaris 9 への gtk+-2.8.20 のインストールですが、 そこではシステムにインストールされる /usr/sfw/lib や /usr/lib にある freetype や fontconfig などを使わないようなインストールを紹介しましたが、 それらを使うようにしても一応うまくいくようです (wxGTK までは確認しておらず、gtk-demo の動作を確認しています)。 この場合、新たにインストールするのは以下のものだけで済みます。
この場合の注意を以下に書きます。
setenv CPPFLAGS "-I$prefix/include -I/usr/sfw/include -I/usr/openwin/include"のようにしました (正確には LDFLAGS は、libiconv.so, libgcc_s.so などがあるディレクトリへも設定しています)。
setenv LDFLAGS "-L$prefix/lib -L/usr/sfw/lib -L/usr/openwin/lib -R$prefix/lib:/usr/sfw/lib:/usr/openwin/lib"
setenv PKG_CONFIG_PATH "$prefix/lib/pkgconfig:/usr/lib/pkgconfig:/usr/sfw/lib/pkgconfig"
make "DEFS=-DHAVE_CONFIG_H -I$prefix/include"
のようにする必要があります。
これだと、fontconfig などは元々システムにあるものが使われますし、 インストールしなければいけないものも少なくて済みますので、 こちらの方がいいかもしれません。
(cf. 「Unix に関するメモ等 (10/22 2006)」, 「Unix に関するメモ等 (07/30 2006)」)
Solaris 9 のマシンで、最新開発版の gnuplot (4.2rc1) の wxt terminal を動かすために wxWidget をインストールしたのですが、 そのために gtk+-2.X もインストールする必要があり、 それらがちゃんと動くまでかなり苦労しましたので、 ここに書きとめておきます。
まず、gnuplot-4.2rc1 が必要とするのは、 cairo-0.9.0, pango-1.10.2, wxWidget-2.5.3 あたりのようですが、Solaris 9 についている gtk+ は 1.2.10 位のようなので、 gtk+-2.8 辺りをインストールすることにしました。 しかし、最初は /usr/sfw/lib や /usr/lib にあるライブラリ (freetype, Xrender, fontconfig 等) を使ってインストールをしてみたのですが、 うまくいかなかったので、 その辺りも別なディレクトリにインストールして、 それらを使うようにしてみました。 インストールしたのは以下のものです (ほぼインストール順ですが、あまりに大量でうんざりですね (^^))。
なおうちは、
setenv CPPFLAGS "-I$hoge1/include -I$hoge2/include"のように設定する必要がある。
setenv LDFLAGS "-L$hoge1/lib -L$hoge2/lib -R$hoge1/lib:$hoge2/lib"
(うちは tcsh なんで setenv)
setenv PKG_CONFIG_PATH $hoge1/lib/pkgconfig:$hoge2/lib/pkgconfigのように設定する必要がある。
set path = ( $hoge1/bin $path )のようにする必要がある。
よって各々の configure は、 それらの設定をしてから configure するようなシェルスクリプトを作って それを使いました。 個々のインストールでも色々注意が必要でしたので、 それらを順に上げていきます。
make install する前に make check しようとしたら、 ヘッダが見つからなかったので
make 'CXXFLAGS=-I./lib' check
のようにする必要がありました。
最初は新しい fontconfig-2.4.1 をインストールして、 Solaris の元々の fontconfig の設定ファイル /etc/fonts/fonts.conf を参考に設定をしたのですが、 fc-cache がいつになっても終わりませんでした (何日もかけたのですが)。 しかも、日本語フォントに対する fc-list の出力が化けていたので、 結局 fontconfig-2.2.3 に cjk パッチを合ててコンパイルしました。 cjk パッチのパッチ合ては 2 つほど失敗しますが、 いずれも 2.2.3 では意味がないものなので無視してやりました。
ところで、その前に freetype-2.2.1 をインストールしていたのですが、 freetype-2.2.1 では freetype/internal/ のヘッダファイルを インストールしなくなったようで (2.1.9 はインストールしてくれます)、 fontconfig のコンパイル時に freetype-2.2.1 のソースも展開しておいて
make "DEFS=-DHAVE_CONFIG_H -DFT2_BUILD_LIBRARY
-I`pwd`/../freetype-2.2.1/include"
のようにしてコンパイルする必要がありました。
この版の fontconfig なら、/etc/fonts/ の設定ファイルを そのまま $hoge1/etc/fonts/ にコピーして使用しても問題ないようでしたし、 fc-cache もちゃんとすぐに終わってくれました。
cairo-1.0.4 は、まず configure スクリプトと src/cairo-xlib-xrender.h の
#include <X11/extensions/Xrender.h>の前に
#include <X11/Xlib.h>がないと configure, compile がうまくできません (cairo-1.2.4 では configure の方のみ改善されています)。
また、gtk のインストールまでやった後で gtk-demo がうまく動かず、 調べてみるとどうも cairo で落ちてしまうようで、 新しい cairo-1.2.4 に変えてみたのですがそれでも改善しませんでした。 これに関しては以下で情報を見つけました。
タイトル通り、depth の浅いマシン (PseudoColor) では問題があるようで、 そこにあるパッチを当てれば解消される、とあったのですが、 上に紹介した patch-src_cairo-xlib-surface_c では少し足りなくて、 以下のパッチも必要でした。
cd src
patch -p0 < ../../patch-src_cairo-xlib-surface_c
patch -p2 < ../../cairo104-add.diff
cd ..
上記のサイトには cairo-1.2.4 用のパッチもありますが、
それもそれだけでは足りず、多分同様の対処が必要だろうと思います。
なお、これらのパッチを当てる前の make check では "9 of 61 tests failed" で、パッチを当てた後はむしろ "16 of 61 tests failed" と一見悪くなってしまったのですが、 とりあえず gtk-demo はちゃんと動くようになりました。 最初の configure 等へのパッチも入れると、cairo-1.0.4 では都合 3 つのパッチが必要になります。
うちは GNU iconv がインストールされているので、 configure 時に --with-libiconv=gnu が必要で、 これがないと make がストップしてしまいます。
これらは
set path = ( $hoge1/bin $path )してないと、/usr/bin/glib-genmarshal が呼び出されてしまって configure, make (make の方だったかな ?) に失敗します。
($hoge1 は glib-2.8.6 のインストール先)
ドキュメント通り、build_gtk というディレクトリをソースツリー内に作って そこで configure ; make しました。configure オプションは "--prefix=$hoge1 --enabe-unicode --with-gtk=2" としました。
以上で gtk-demo がちゃんと動くものが得られました。 多国語表示 (Text Widget ->Multiple Views) もちゃんとできます。 fontconfig を使用していない FreeBSD から remote login した kterm 上でも、ちゃんと表示できました。 この環境の元で gnuplot-4.2rc1 をコンパイルしたら、 見事に wxt terminal が動作しました。 日本語もデフォルトで (フォント等を特に何も設定せずに) 表示されます。
(cf. 「Unix に関するメモ等 (10/12 2006)」, 「Unix に関するメモ等 (10/22 2006)」, 「Unix に関するメモ等 (07/30 2006)」)奥村@三重大 さんの TeX Q & A からの情報ですが、44679 番の記事で xargs の挙動が OS によって違う、 とありましたので少し調べてみました。すると確かに、
cat /dev/null | xargs echo 'a'のように、標準入力がない場合の挙動が違っているようで、
FreeBSD の xargs に挙動を合わせるには、Solaris の xargs では -l や -L 1 を付ければいいようですが (この場合標準入力があれば 1 行ずつ実行することになるので、 正確には同じ挙動とは言えませんが、 少なくとも標準入力がなければ実行しなくなるようです)、 GNU の xargs ではこれはうまくいかず、 逆に GNU の xargs には入力がない場合に実行しない専用のオプション -r があるのですが、これは Solaris や FreeBSD の xargs にはありません。
よって、色んな OS 上で動作することを考えて、 標準入力がない場合も想定して挙動を合わせようと思うと、
xargs に直接データを流す前に (ファイルに落すなりして) そのデータが 0 行であるかどうかをチェックして、 0 行以外ならば xargs に流すということをしないといけないようです。 xargs は、find と組み合わせてその出力を pipe 経由で xargs に渡す、 というのがよく使われるやり方だと思いますが、 ポータビリティを考えた場合はなかなかそうもいかないようです。
emacs で普通に既存のファイル (例えば file) を編集するときは、 バックアップファイルである file~ というものが作られますが、これは、
cp -p file file~のようにして (と実質的に同等な方法で) 作られるのかと思ったら どうもそうではなく、デフォルトでは
mv file file~のようにして (と実質同等な方法で) 作られるようで、 元のファイルと inode が代わってしまいます。 よって、ハードリンクされたファイルを emacs で編集すると、 他のハードリンクファイルは変更されないまま、という状況になってしまいます。
cp file~ file
これを回避するには、~/.emacs に
(setq backup-by-copying t) ;; ==> mv ではなく常に cp するのいずれかを入れるといいようです (とマニュアルに書いてありました)。
(setq backup-by-copying-when-linked t) ;; ==> hard link があるときだけ cp
私は HTML ファイルを見るときは w3m を使うこともあるのですが、 w3m は拡張子が .html ではない HTML ファイルを読んだときや、 リダイレクションなど標準入力から HTML ファイルを読んだときなどは HTML だと思った表示はせずに、 単なるページャとしてその HTML ソースを表示してしまいます。
そのような場合は、w3m に
w3m -T text/html < hoge.htmlのように -T オプションを使って HTML であることを教えてやればいいのですが、 "text/html" の部分を覚えにくくて面倒だなと思っていました (よく、"html/text" とか "plain/html" などと間違えます)。
それが、先日ふと気がついたのですが、今の w3m (少なくとも w3m 0.5.1) では ページャとして立ち上がって HTML のソースを表示している状態で 'v' を打てば HTML と解釈した表示 (WWW ブラウザとしての表示) を してくれるようです。 'v' は、元々は WWW ブラウザとしての表示から ソースの表示に切りかえるトグルスイッチなのですが (多分)、 逆にこのようなこともできるようになっているんですね。 こちらの方が -T オプションよりもずっと楽です。
ちなみに、HTML ファイルでないファイルを w3m でページャとして見ているときに 'v' とした場合も、 それを無理矢理 HTML だと解釈して表示しようとするので 妙な表示になってしまうようです。
LaTeX の dvi ファイルを PDF に変換する dvipdfmx というソフトは、 hyperref パッケージ (\usepackage[dvipdm]{hyperref}) を使って section 部分をしおりに出きるようなのですが、 その場合 LaTeX ファイルのプリアンブルに、
\AtBeginDvi{\special{pdf:tounicode EUC-UCS2}} % (EUC 環境の場合)のような行を入れる必要があります。 dvipdfmx-20050201 版ではこれでできましたが、 Acrobat Reader の 4.X や 5.X ではしおり部分の日本語は表示されず、 Acrobat Reader 7.0.8 でやっと確認できました (Acrobat Reader 7.X は Java ベースで動作がやや重いので、 普段は Acrobat Reader 4.X などを今だに使っています)。
\AtBeginDvi{\special{pdf:tounicode 90ms-RKSJ-UCS2}} % (Shift_JIS 環境の場合)
Acrobat Reader の 7.0.8 の Solaris (8) 用の日本語版が出たので 先日うちの Solaris 9 にインストールしました。 コマンド名は acroread で、これ自体はスクリプトのようなのですが、 日本語環境を自動判別して、 日本語メニュー等のエンコーディングを決めているようです。 うちは Solaris 9 なので、普段は LANG=ja (=ja_JP.eucJP) を使っているのですが、 しかしその自動判別がうまくいかず、 UTF-8 モードで立ち上がろうとしているのか メニュー等が文字化けしてしまいました。
そこで (うちは tcsh)、
setenv LANG C ; acroreadとしてみるとうまく文字化けせずに立ち上がるので、 そういうラッパースクリプトを作ろうかと思ったのですが、 acroread は WWW ブラウザのプラグインとしても使われていて、 acroread スクリプトにさらにラッパースクリプトをかませると 今度はプラグインの方がうまく動作しないようでした。 ということで、あまりやりたくなかったのですが、 acroread スクリプト自体を編集して、
LANG=C; export LANGなる行を "MYLANG=..." の前に追加して対処しました。
ふと、日本語の文書を縦書きで表示するエディタやターミナルはないかなと 探して、mlterm と vtp22 を見つけました。
mlterm は、kterm 同様日本語が表示できるターミナル (正確には、 Multi Lingual Terminal) ですが、
mlterm -G cjkのようにして起動すると、縦書き表示になります。 この場合の「縦書き」とは、フォントの方法は通常の横書きと同じ向きで、 縦方向に文字を書いていき、次の行は左に並ぶ、ということを意味しています (下図参照)。
ただし、表示はそんなに安定しておらず、 特に半角文字と全角文字が同じ高さで表示されるので、 そのためにやや表示が崩れることがあります。
また、付属のドキュメント README.tate に書かれている 縦用のフォントの置き場所は、現在はアクセスできなくなっています。 sourceforge の方にもそのようなフォントは置いてありません。
一方、vtp は日本語文書を縦表示するだけのページャですが、 こちらは表示はかなり安定しています。
なお、かっこや句読点などが縦書き用になっていないので ちゃんとは表示されていませんが、 vtp には X のフォントを縦書き用のフォントに変換する awk スクリプトが付属されていて、 それを使って vtp 用の X のフォントを使うようにした kterm 上で vtp を使えば それは改善するそうです (まだやってません)。
ただし、文書サイズが大きいとき (?) なのか、 うまく全部を表示してくれないときがあるようです (上のサンプルでも全部で 3 ページしか表示されませんでした) し、 かなり古いソフトなので、 環境によってはコンパイルも少し手直しが必要な場合があるようです。 Solaris 9 (+gcc-3.4.3) の場合、 vtp_sjis.c の "exit()" をすべて "exit(1)" に直して、 さらに gcc のオプションに "-DBSD_COMP" (for sys/ioctl.h) を追加することでコンパイルできました。
バイナリインストールした Solaris 9 上の Firefox-1.5.0.4 ですが (cf. 「Unix に関するメモ等 (07/16 2006; no.2)」)、 日本語の WWW ページを印刷しようとすると、 日本語が表示されず豆腐 (□) になってしまうことがわかりました。 うちの Ghostscript 7.07 (CJK 化されています) で表示させてもそうなりますし、 PS プリンタに出力しても同じです。
色々対処法を探してみて、作成される PostScript ファイルをいじってみたところ、 その Unicode 出力されている PostScript ファイルの フォント指定等があまりよくないようで、 とりあえず以下のようにすることで、 印刷できる PostScript ファイルに変換できることがわかりました。
UniJIS-UCS2-H は、unicode エンコードだと思いますが、 その CMAP ファイルがインストールされている必要があります。 ps2ps によるラスタライズは、gs (gv) では書き変えだけで見れたのに、 PS プリンタでは印刷できなかったために行っています。
実際には、上の作業を行うシェルスクリプトを書いてそれを使うことにしました。 以下に置いておきます。必要ならば適当に書きかえて、 自己責任で使用してください。
本当は何らかの設定で対処できるのかもしれませんが、 とりあえず今のところそのような設定の仕方は見つかっていません。
ftwalk なる awk の拡張があるようです。
おもしろそうなのでインストールしようと思ったのですが、 C++ で書かれていて、しかも少し古い (2000 年位で開発が止まっています) ためか gcc-3.4.3 ではうまくコンパイルできませんでした。 ftwalk の仕様に関する文書もあまりないようだったので、 あきらめることにしました。
奥村@三重大 さんの TeX Q & A からの情報 (2 年半位前の情報) ですが、 DVI ファイルの連結には dvimerge, dvicat, dviconcat なるソフトがあり、 PostScript (PS) ファイルの連結には psmerge, pscat, psconcat なるものが あるそうです (24355 番の記事)。 他に psjoin なる perl スクリプトも見つけました (cf. 「Unix に関するメモ等 (04/18 2006)」)。
ただ、特に PS の連結は上記のものではあまりうまくいかないこともあるようですが、 gs を使った解法もあるようで (24358 番の記事)、 これを今回思いだしたので、csh スクリプト化してインストールしました。
Firefox-1.5.0.4 を Solaris 2.9 (sparc) にインストールしました。 コンパイルしたのではなく、
なお、その後上記のページに従って (各ユーザ毎に) 日本語化も行ったのですが、 "Locale Switcher Extension" (switch-locale-1.5.1.xpi) の方は うまくダウンロード & インストールできたのですが、 もう一つの ja.xpi の方は Firefox 上でうまくダウンロードできませんでした。 よって、上記のページのリンク先
Blade 150 上ではそれなりの速度で動きますし、それなりに快適そうです。
(cf. 「Unix に関するメモ等 (07/28 2006)」)Python-2.4.3 を Solaris 2.9 (sparc) にインストールしました。 ただ、Solairs の curses ライブラリに問題があるらしく、 なにやら
symbol mvwgetnstr: referenced symbol not foundのようなエラーがでるのですが、これは、
最近の GNU awk (3.X) は、LANG でその挙動が変わります。 ただ、内部でどのような処理をしているのかわかりませんが、 それが不具合を招く場合があるようです。 Solaris 9 上の GNU awk 3.1.5 で、setenv LANG ja の場合、
echo "/* M0+* を */" | awk '{print match($0,/\*\//)}'
を実行すると (kterm 上; 日本語環境は EUC-JP)、
: (FILENAME=- FNR=1) fatal error: internal error
となります。setenv LANG C だと問題ありません。
httpd はうちでは apache (httpd-2.X) を使っていますが、 今まではその更新作業は、
これまではこれで特に問題はなかったのですが、 最新版の httpd-2.2.2 ではこれで問題が起きました。 問題が起きたのは、最後のインストールの時で、 make install しようとすると $prefix/include/ のヘッダファイルがない、 というエラーがでます。 どうも、configure で $prefix/include があるとそれを見ていて、 make のときにそれらがないとうまくいかないようです。 つまり、上のような手順だと、
最近、手書きの文書をいくつかスキャナで画像化して PDF 化していくつかの WWW ページに載せました。 画像化は、sane の scanimage コマンドで行えますが (pnm, or tiff)、 そこから PDF 化するには、例えば次のような 2 通りが考えられます。
tiff 形式にするのは、scanimage のオプションで tiff にする、 あるいは Netpbm の pnmtotiff でできます。
複数の画像を一つずつ 1 ページとして、それをまとめて PDF 化する、 という場合は、以下のような方法が使えます。
しかし、できた PDF ファイルを見ると、 いずれも ps 経由の方は tiff 経由のものに比べて少し汚なく見えます。 以下にサンプルを上げます。
なお、これらはそれぞれ以下のようにして生成しています (原画像は 120dpi で A4 の紙を scan した PGM 画像)。
pnmtotiff test1.pgm > test1.tiff
tiff2pdf -x120 -y120 -z -pA4 test1.tiff > test1-tiff.pdf
pnmtops test1.pgm > test1.ps
ps2pdf test1.ps
mv test1.pdf test1-ps.pdf
ps レベルではさほど汚なくは見えないようなので、 ps2pdf (Ghostscript) の処理に問題があるような気がします。 よって、現在は tiff 経由で変換を行っています。
なお、私が使用している Ghostscript は 7.07 ですから、 現在の 8.X ではその辺りは改善されているのかもしれません。
(cf. 「Unix に関するメモ等 (07/16 2006; no.3)」)「Unix に関するメモ等 (04/01 2006; no.3)」 に書いた、emacs-20.7 (と emcws-20.7) の gcc 3.4.X でのコンパイルの問題ですが、 emacs-21.4 (21.4a) の emcws 版をコンパイルしたときも同じ問題がでました。
インターネット上のブログには、21.4 の場合は問題なかった、 といった情報もあったようなのでだいじょうぶかと思ったのですが、 やはり gcc-2.95.3 でコンパイルしないとだめでした。
Solaris だけに依存しない話かもしれませんが、 最近 Solaris 9 上で emacs-20.7 (と emcws-20.7) を再インストールしたときのことですが (「Unix に関するメモ等 (04/01 2006; no.2)」 に書いた Canna のバージョンアップに伴う再コンパイル)、 以前コンパイルしたときは問題なかったのですが、 今回コンパイルしたら、 終了時に core dump するバイナリができてしまいました。
今は皆さん emacs-21.X なのかあまり情報がありませんでしたが、 どうやら gcc-3.4.X でコンパイルするとそのようになるらしいです。
まだかろうじて残してあった gcc-2.95.3 でコンパイルしたら、 そのような問題の起こらないバイナリがコンパイルできました。
最近 Solaris 9 上で Canna をバージョンアップ (35b2 ==> 37p3) したときのことですが、 libcanna, libcann16 がうまくコンパイルできませんでした。 環境は以下の通りです。
エラーのログを見ると、 gcc が吐いているアセンブラコードに問題があるようでしたが、 Canna37p3 の canna/ccompat.h に書かれているアセンブラコードを吐く部分 (79 行目辺りから始まる部分) を使わないようにするといけるようです。 Solaris 上の gcc では __sun__ が定義されていますので、 79 行目の
#ifdef __GNUC__を
#if defined(__GNUC__) && !defined(__sun__)と変えることでうまくいきました。差分を以下に置きます。
多分 GNU as (GNU アセンブラ) を仮定して書いているのだと思いますが、 Solaris 上の GCC では通常 GNU as ではなく、 /usr/ccs/bin/as を使うので、 Solaris でコンパイルするときは必要な対処かもしれません。
なお、上記のパッチにはもうひとつ Solaris でコンパイルするときには ほぼ必須のような "-R" オプションの追加 (Canna.conf) も 書いてあります。
ここに、Unix に関するメモなどを書いていくことにしました。 以前、学内限定でフリーソフトのインストールメモを書いていたのですが、 更新が面倒なことと、 色々あちこちのサイトから情報を得て助けられていましたので、 こちらからもそういった情報を提供できれば思い、 このような形にしました。 「Unix に関する QandA」 のページも以前は学内限定だったのですが、現在は外部にも公開しています。
私は普段は MS-Windows や Mac などはほとんど使用しておらず (それぞれ 1 台ずつあることはあるのですが)、 Unix マシンを常に使用していて、 そのための情報をコンピュータ上にメモとして残しています。 コンピュータ上にテキストファイルとして残せば、 grep などで簡単に検索できますし、 メールやチャット (okphone を使っています) 等で 学生に情報を渡すときも容易にコピー & ペーストで行えて、 便利なのでそうしています。
そうやって残しているようなデータもかなりたまっていますので、 そういった話のうち、公開できるものを ここに書き残して公開していこうかと思っています。
うちの研究室には Unix OS は、 FreeBSD, Solaris, HP-UX, EWS-UX (NEC), IRIX などがありますが、 普段使用しているのはほぼ Solaris と FreeBSD で、 FreeBSD 特有の情報は FreeBSD のページ に書いていきますので、このページには、
うちには Sun のマシンが何台かあるので、 そのうちの一つのマシンをプリントサーバにして、 その他のマシンからはプリントサーバに lp の要求をとばしています。 しかし、Solaris 2.6 から Solaris 9 にバージョンアップしたら、 クライアントでプリント要求を cancel したときに プリントサーバから送られていたメールが来なくなりました。
lpstat の出力を見ると、 0.0.0.0 というマシンからのプリント要求であるようになっていて、 プリントサーバは user@0.0.0.0 にメールを送ろうとして 失敗していることがわかりました。 色々と設定を試したところ、 プリントサーバの inetd.conf の socket_type を tcp6 (デフォルト) から tcp に書き変えてしまうとそうなってしまうようです。 tcp6 に戻すと要求元のホストが正しく認識されました。
しかし、うちは inetd は tcp_wrappers をかませてあって (inetd に元々リンクされてあるものではないもの)、 それでアクセス制限を行っているのですが、 inetd.conf の socket_type を tcp6 にするとそれが効かなくなります。 tcp_wrappers を IPv6 に対応させるパッチも 2 種類位見つけましたが、 いずれもうまく動作してくれませんでした (設定の仕方が悪いだけかもしれませんが、 一つの方はコアダンプします)。
よって、0.0.0.0 の方は、 プリントサーバからのメールは送られないものの、 それ以外の実害は今のところはないので、 現在はアクセス制限が有効に働く tcp の設定で運用しています。
OpenSolaris の in.lpd 回りの設定を見れば何か分かるかと思ったのですが、 今一つ分かりませんでした。
以前は、Microsoft が Solaris 用の Windows Media Player も 出していたようでしたが、 最近はないようです。 代わりに wmf を再生するフリーのツールとしては、 MPlayer や xine, VLC などがあるようです。 ただ、まだインストールはしていません。
PDFLib (PDFlib-Lite-6.0.3) を Solaris 9 にインストールしたのですが (gcc-3.4.3)、make test で __moddi3 とかいうものの relocation error が出ました。-lgcc を明示的に付ける必要があるようですが、 libgcc は、$prefix/lib ($prefix は configure 時に指定する prefix) ではなくて、$prefix/lib/gcc/sparc-sun-solaris2.9/3.4.3/ 以下にあります。
よって、LDFLAGS に
-L$prefix/lib/gcc/sparc-sun-solaris2.9/3.4.3 -lgcc
を追加してから configure して make、make test したらうまくいきました。
現在の Solaris 9 では、truss というコマンドで、 コマンドの使用するシステムコールを追跡できるようです。 Solaris 8 くらいの頃からのツールでしょうか。
Sun の Blade150 のキーボードやマウスは USB 接続なのですが、 普通の PC 用の USB キーボードは使えず、 つないでも OPB が認識してくれないので OS が立ち上がりません。
実は購入した中古の Blade150 についていたのが英語キーボードだったので、 この機会に、それに慣れてもらおうかとも思ったのですが、 結局ぷらっとホームから Blade 用の日本語配列のキーボードを購入しました。 Happy Hacking Keyboard も、 Blade150 につながる USB キーボードはないようですね。
奥村@三重大 さんの TeX Q & A の 41326 番の記事にも書きましたが、Perl/Tk は、 perl-5.8.X + Tk 804.X の版ならば日本語もちゃんと扱え、表示もできます。 ただし、"use encoding" を使う場合は、 Tk.pm で Encode モジュールを使っていて "use encoding" とするとぶつかってしまうのかうまくいきませんので、 "use PerlIO::encoding" としないといけないようです。 これで、通常の「binmode FILE, ":encoding(euc-jp)";」などが 使えるようになるようです。
ふと見つけたのですが /bin/ta って何かよくわかりません。 man ta もないし、 string で見てもヘルプメッセージのようなものはありません。
調べると、man troff に何か書いてあるのですが、 man troff にも「最近はほとんど使用されない /usr/bin/ta コマンドを使うと」などと書かれていますので、 少なくとも roff に関連した古いコマンドなんでしょうかね。
私は普段 PDF ファイルは Solaris 上で acroread で PostScript ファイルにして 印刷することが多いのですが (acroread -toPostScript のようにコマンドラインツールとしても使います)、 Solaris 用の acroroad 7 (Adobe Reader 7.0.1) だと なぜか 2 ページ目以降が字が抜けることがあります。
これは acroread 5 で、かつ PostScript level 1 で出して、 Koji Nakamaru さん作の acrolpr にかけるとうまくいくようです。 しかし、acroread 7 は、既に PostScript level 1 の出力をサポートしていない (少なくとも Solaris 用のものは) ようなので、 acroread 7 ではうまく対処できていません。
Blade 150 の電源を強制的に落とすには、 電源スイッチを 4 秒位押したままにするようです。 1 台 boot しないマシンがあって、OS が立ち上がっていなくて、 ok prompt にも落ちないのでどうしようかと思ったのですが、 付属していた文書を探したら書いてありました。
FreeBSD だと /etc/hosts.lpd でプリント要求を出してくるホストを lpd 側でアクセス制限できるのですが、 Solaris の場合はそうもいかないみたいです。 取りあえず今は Solaris では tcp_wrappers でアクセス制限をかけています。
/etc/lp/logs/requests のログの意味は、少し古い本ですが、
xscreensaver を Blade 150 や SS5 (S-4/5H) で使っていると 途中で画面が消えてしまいました。
xset s off はしてあったのですが、 最近はそれだけではだめで、 xset -dpms しておく必要があるようです。
ユーザを追加するために admintool を立ち上げたのですが、 obsolete だと言われました (Solaris 9)。 よって、useradd を使って追加するスクリプトを書いてやりました。
Ultra 1 (S-7/300U) 購入時に小型カメラ (Sun camera) が付属していたのですが、 これは Solaris 2.5.1, 2.6 では SunVideo (SUNWrtvc, SUNWrtvcu) で使えていて、 多少の静止画、動画 (mpeg; SUNWits の rtvc_capture_movie を使用) を取ることができました。
しかし Solaris 9 ではこのインターフェースは obsolete になっているようで、 SunVideo はなくなっていました。 ただ、rtvc_capture_movie はソースが入っているので、 とりあえずコンパイルできました (/usr/ccs/bin/make 'CC=gcc' 'OPENWINHOME=/usr/openwin')。 SunVideo のような GUI のインターフェースはなくなりましたが、 これでとりあえずは Sun camera が使えています。
tcsh-6.14.00 をインストールしたのですが、 kterm 上で日本語を kinput2 で入力しようとすると
% \U+21DD\U+266E
などと表示されるようになってしまいました。
環境変数などを色々変えても直らず、
Solaris 9 の /bin/tcsh (tcsh-6.11) では問題ありません。
これは、tcsh-6.14.00 のソースを見てわかりましたが、 結局 config_f.h の WIDE_STRINGS を undef すると (それによって DSPMBYTE を生かしてやると) うまくいくようです。 普通に configure すると SIZEOF_WCHAR_T が 4 になって WIDE_STRINGS が定義されてしまって、 それで DSPMBYTE が定義されなくなってしまうようです。
逆に /bin/tcsh では、コマンドラインが複数行になると 編集画面が崩れることがありました。 tcsh-6.14 では問題ないようです。
Acrobat Reader は今までは 5.0 を使っていたのですが、 セキュリティホールの情報もあったので 7.0 を入れてみました。 英語版 (AdbeRdr70_solaris_enu.tar.gz) しかなかったのですが、 とりあえずこれをインストールした後、 5.0 用の jpnfont (jpnfont-20020810.tar.gz) を インストールしようかなと思っていたのですが、 バージョンが違うとか言われてインストールできませんでした。
そこで、5.0 の Resource ディレクトリにある日本語フォント等を そのまま 7.0 のディレクトリに適当にコピーしてみたところ、 とりあえずは日本語が出るようになりました。
下 (04/07 2003) の tcs 半角カナ + Variants パッチに、 いくつか tcs で変換できない Unicode 記号を 全角記号等で置き換えるようにしたものを追加しました。
tcs-hk+vari+symbol.patch.gz (29166 Byte; 展開後 131196 Byte)ただし、以下に注意してください。
下 (01/09 2003)の tcs の半角カナパッチに、 いくつか tcs で変換できない Unicode 漢字を 別の Unicode で置き換えるようにしたものを追加しました。
tcs-hk+UniVariants.patch.gz (28590 Byte; 展開後 129172 Byte)ただし、以下に注意してください。
なお、これは下 (01/09 2003)と同じで 検索文字列の復号用なのですが、 Unicode U+4E49 (variant は「義」) と Unicode U+8BA1 (variant は「計」) が 検索文字列に含まれていたために作ったものです。
研究室の WWW サーバのログに残る検索エンジンの検索文字列を 復号して収集するスクリプトを使っているのですが、 内部で漢字コードの変換用に nkf と tcs (UTF-8 用) を使っていて、 最近 UTF-8 の半角カナ検索文字列があるのに気がつきました。 tcs は半角カナには対応していないので、 それに半分対応させるようなパッチを作りましたのでここに置きます。
tcs-halfkana.patch (1283 Byte)ただし、以下に注意してください。