この記事はTumblrで公開されていました
ふとした気の緩みで、大きく時間が取れるまで待っていたsyscall 53問題を踏んでしまった。syscall 53問題というのは、5月の中旬ごろに発生したnsec(2)がライブラリからシステムコールに変更されたことによって起こるエラーで、愚直にアップデートしただけでは
bad sys call number 53
というエラーでコマンド類が動かなくなる現象のことを言う。
カーネルのソースだけアップデートしようと計画していたのだけれど、
% replica/pull -s sys/src/9 /dist/replica/network
を実行してしまって、コマンド類も全部ベル研が配布するバイナリにアップデートされた。結果、新しいバイナリはnsecシステムコールを期待するけど、replica/pullした直後はまだカーネルが古く、カーネルリビルドするまではnsec()
がエラーになる。なのでそのままでは新しいカーネルのコンパイルさえできない。
解決方法としてはいくつか9fansに挙がっていたけど、replicaは古いバイナリを_からはじまる名前で残しているので、こっちを使って新しいカーネルをコンパイルするのが簡単だと思う。
% for(cmd in mk ar date ramfs) > bind /bin/_$cmd /bin/$cmd % ramfs % cd /sys/src/9/pc % mk 'CONF=pccpuf' (コンパイルが終わったら) % _dossrv % mount -c /srv/dos /n/9fat /dev/sdC0/9fat % mv 9pccpuf /n/9fat/
これについて、replicaでバイナリもアップデートされるのが問題だ、とか、アップデート時にカーネルも含めて依存関係を解決すべきだ、とか9fansで話があったような気がする。