FreeBSD 7.1-PRERELEASE mfs/mount_mfs/mdmfs patch2008年11月19日 11時17分40秒

FreeBSD 7.0-RELEASE から 7.1-RELEASE にかけて、mdmfs 又の名を mount_mfs に変更が入った。mdmfs から旧来の mount_mfs への後方互換の実装のようだ。

これにより、互換動作を行うときに、マウントされた場所のアクセス権が変更される。GEOM uzip を用いて圧縮されたファイルデバイスを mount_mfs を用いて、マウントしているとこの変更のためにエラーが表示されるようになる。uzip は読み出し専用なので、ファイルシステムに変更を入れる事が出来ないからだ。それを修正するパッチが以下になる。


Index: sbin/mdmfs/mdmfs.c
===================================================================
RCS file: /home/ncvs/src/sbin/mdmfs/mdmfs.c,v
retrieving revision 1.33
diff -u -r1.33 mdmfs.c
--- sbin/mdmfs/mdmfs.c  14 May 2007 19:23:13 -0000      1.33
+++ sbin/mdmfs/mdmfs.c  28 Oct 2008 03:05:30 -0000
@@ -60,6 +60,7 @@
        bool             mi_have_gid;
        mode_t           mi_mode;
        bool             mi_have_mode;
+       bool             mi_is_readonly;
 };
 
 static bool debug;             /* Emit debugging information? */
@@ -195,6 +196,8 @@
                        break;
                case 'o':
                        argappend(&mount_arg, "-o %s", optarg);
+                       if(strcmp(optarg, "ro") == 0)
+                               mi.mi_is_readonly = true;
                        break;
                case 'P':
                        newfs = false;
@@ -440,7 +443,8 @@
 static void
 do_mtptsetup(const char *mtpoint, struct mtpt_info *mip)
 {
-
+       if (mip->mi_is_readonly)
+               return;
        if (mip->mi_have_mode) {
                debugprintf("changing mode of %s to %o.", mtpoint,
                    mip->mi_mode);

readonly が指定されたら、chmod を行わないだけの簡単な修正だ。

これで、fstab に以下のように記述してもエラーが出なくなる。


/dev/md.uzip    /usr/ports      mfs     ro,-P,-F/usr/uzip/ports-20081107.uzip