linuxでcodaクライアントを入れてみた
これまで何度か挑戦してきていた(そして敗れ去ってきていた)linuxへのcodaクライアントのインストールだが、ついにうまくいく方法がわかった(動作するかは別だが)。
- カーネル: CentOS-5.1(kernel-2.6.18-53.el5)
- Codaカーネルモジュール: linux-coda-6.8.tar.gz
- Codaクライアント/サーバ(ユーザランド): coda-6.9.3.tar.gz
- 依存ライブラリ: lwp-2.4.tar.gz, rpc2-2.7.tar.gz, rvm-1.15.tar.gz
依存ライブラリから順繰りに野良ビルドするだけで基本はOK。
coda kernelモジュールを展開してビルドすると、inode->i_blksizeがないと言って怒られる。
root@localhost linux-coda-6.8linux2.6]# make make CONFIG_CODA_FS=m CPPFLAGS="-D__KERNEL__ -I/root/codabuild/linux-coda-6.8linux2.6 -Iinclude -include linux/autoconf.h" INSTALL_MOD_DIR=kernel/fs/coda -C /lib/modules/2.6.18-53.el5/build M=/root/codabuild/linux-coda-6.8linux2.6 make[1]: ディレクトリ `/usr/src/kernels/2.6.18-53.el5-i686' に入ります CC [M] /root/codabuild/linux-coda-6.8linux2.6/coda_linux.o /root/codabuild/linux-coda-6.8linux2.6/coda_linux.c: In function ‘coda_vattr_to_iattr’: /root/codabuild/linux-coda-6.8linux2.6/coda_linux.c:114: error: ‘struct inode’ has no member named ‘i_blksize’ make[2]: *** [/root/codabuild/linux-coda-6.8linux2.6/coda_linux.o] エラー 1 make[1]: *** [_module_/root/codabuild/linux-coda-6.8linux2.6] エラー 2 make[1]: ディレクトリ `/usr/src/kernels/2.6.18-53.el5-i686' から出ます make: *** [all] エラー 2 [root@localhost linux-coda-6.8linux2.6]#
しょんぼりんこ。実は、2.6.18以降のどこかでinclude/linux/fs.hのstruct inodeのi_blksizeは亡くなったみたい。coda_linux.c:114あたりを見てみると衝撃の事実が。
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) /* 2.6.19-rc1 */ /* git commit ba52de123d454b57369f291348266d86f4b35070 remove i_blksize */ if (attr->va_blocksize != -1) inode->i_blksize = attr->va_blocksize; #endif
いや、だから2.6.18-53でも亡くなってるってば。ということで、ごにょごにょすると
[root@localhost linux-coda-6.8linux2.6]# diff -u coda_linux.c.orig coda_linux.c --- coda_linux.c.orig 2008-06-29 20:08:53.000000000 +0900 +++ coda_linux.c 2008-06-29 20:09:03.000000000 +0900 @@ -108,7 +108,7 @@ inode->i_nlink = attr->va_nlink; if (attr->va_size != -1) inode->i_size = attr->va_size; -#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) /* 2.6.19-rc1 */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 18) /* 2.6.19-rc1 */ /* git commit ba52de123d454b57369f291348266d86f4b35070 remove i_blksize */ if (attr->va_blocksize != -1) inode->i_blksize = attr->va_blocksize;
これだけであっさりbuild完了。わーい。
あとは、insmod coda.koしてvenus-setupしてしまえば、coda clientの完成。