2008-11-15

file.utilの日本語ファイル名の扱い

;; pathに不完全文字列になるエントリがあるとエラー
(directory-list path)

;; 低レベルならエラーになる処理は含まれない
(sys-readdir path)

Gaucheのfile.utilは0.8.14の現時点では、パスがASCII以外でエンコードされているケースを考慮してないので、CP932などでエンコードされたパスを処理する場合、エラーになることがある。具体的には、パスにGaucheの内部エンコードで許されないバイト表現が含まれる場合。パスは不完全文字列として処理されるけど、不完全文字列には許されない処理をfile.utilの各関数内部でしているため、エラーになる。

他の人が原因を見つけてそうだな、と思いながらも、コードを読んで原因を見つけたところで、やっぱり他の人が原因を見つけていたのを知った。Gauche-devel-jpメーリングリストの「パス名での不完全文字列の扱い」というメールに詳しい。徒労だ。

2008-08-16

GNU Binutils 2.18のインストール

SXCE b95へGNU Binutils 2.18をインストールした。特に躓くこともなく、configureスクリプトを実行してから、makeをすることで、素直にビルドできた。以下は操作手順。

% ./configure --prefix=/opt/binutils-2.18 --program-prefix=g
% gmake
# gmake install
# cd /opt/bin
# for i in ../binutils-2.18/bin/*
>do
>ln -s $i
>done

configureに--program-prefix=gを渡しているのは、Sunのasやldなどと区別するため。SXCEに付属のGNU Binutilsもそういう設定になっているので、合わせたというのもある。それと、makeにはGNU makeを使った。Sunのmakeでは、configureが作ったMakefileを上手く処理できないようだ。

2008-06-20

2008-06-15

SolarisでのGaucheのコンパイルで注意すべきこと

正確に言うとAutoconf 2.61の問題なんだけど、GCCを使っていても、CCの値が(/opt/pkgsrc/bin/gccのように)パスを含む場合、configureスクリプトが使っているコンパイラを誤判定する。これにより、リンカに間違ったオプションが渡され、libgauche.soのリンクに失敗してしまう。

このくらい良きに計らってくれよ、と目眩がする思いだが、現時点の最新版のAutoconf 2.62では直っているのだろうか。

もう一度詳しく調べたところ、Gauche 0.8.13のconfigure.acに問題があった。Autoconf関係者の方々、ごめんなさい。

2008-06-08

Solaris Secure Shellの設定

SXCEにはb90の現時点で、Solaris Secure Shellが含まれている。これは、SunがOpenSSHをベースに開発したSSHの実装のひとつ。SSHサーバのsshdがインストール直後から起動しているため、きちんと設定をすれば、すぐにSSHプロトコルで通信できるようになる。

今回設定するサーバにはLANの中の特定のPCからしか接続しないので、ホストに基づく認証を使って接続する。作業手順は以下の通り。

  • /etc/ssh/sshd_configの編集
  • /etc/ssh/shosts.equivの編集
  • /etc/ssh/ssh_known_hostsへ接続を許すホストの公開鍵を追加
  • ~/.shostsの編集
  • sshdの再起動

Solaris Secure Shellの設定ファイルは、/etc/sshディレクトリにまとまって入っている。まずは、その中の/etc/ssh/sshd_configを編集。最初に、

HostbasedAuthentication yes

という行を追加。ホストに基づく認証を行うという意味。標準ではホストに基づく認証は使えないようになっている。次に、

IgnoreRhosts yes

という部分を、

IgnoreRhosts no

と変更。ホストに基づく認証で~/.shostsを使うようになる。ホストに基づく認証をするだけなら不要だが、ユーザの名前が接続元と接続先で違う場合には必要。今回はまさにそのケース。

/etc/ssh/shosts.equivの設定。rshが使う/etc/hosts.equivと書式は同じ。一行ごとに、接続を許すホスト名を書く。

client-host

/etc/ssh/shosts.equivに接続を許すホストを列挙したら、今度は/etc/ssh/ssh_known_hostsに、接続を許すそれぞれのホストの公開鍵を追加する。ssh_host_dsa_key.pubが公開鍵だとすると、

# (echo -n "client-host "; cat ssh_host_dsa_key.pub) >> /etc/ssh/ssh_known_hosts

のように、ファイルの終わりに公開鍵を書き込む。

~/.shostsの設定。接続を許すユーザのホームディレクトリに.shostsというファイルを作り、

client-host client-user

のように、ホスト名に続けてユーザ名を書く。

設定がすべて終わったので、最後にsshdの再起動。

# svcadm restart ssh

Solaris Secure ShellもSMFで管理されているサービスなので、こういう操作は簡単。