linuxでcodaクライアントを入れてみた

これまで何度か挑戦してきていた(そして敗れ去ってきていた)linuxへのcodaクライアントのインストールだが、ついにうまくいく方法がわかった(動作するかは別だが)。

依存ライブラリから順繰りに野良ビルドするだけで基本は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の完成。