2008年09月06日

Cygwin 上で sshfs を使うために,FUSE のソースを修正してコンパイルする

Web拍手:


Cygwin 上で sshfs を使うために,FUSE のソースを修正してコンパイルする.

でも,FUSE のコンパイルをできるようにした時点で,この先の作業量を考えたら,なんだか,面倒になってきてしまった(^^;).
Dokan ライブラリのほうがいいような気がしてきた(^^;).
Cygwin 上で sshfs を使うためのソースの修正は,やらないかもしれない.

--

SSH Filesystem(sshfs)
http://fuse.sourceforge.net/sshfs.html

SSH Filesystem を使うためには,Filesystem in Userspace(FUSE) が必要.
ます FUSE をインストールする.

Filesystem in Userspace(FUSE)
http://fuse.sourceforge.net/

FUSE のソースは,そのままでは Cygwin 上でコンパイルできないので,次の小細工を加えてごまかす.

lib/fuse_misc.h の 14 行目付近を変更
#define FUSE_SYMVER(x) __asm__(x)

#ifndef __CYGWIN__
#define FUSE_SYMVER(x) __asm__(x)
#else
#define FUSE_SYMVER(x)
#endif


lib/mount.c の 40 行目付近に追加
#ifdef __CYGWIN__
#include
#include
#endif



lib/mount.c の 40 行目付近に追加
#ifndef MS_RDONLY
#define MS_RDONLY 1
#endif

#ifndef MS_NOSUID
#define MS_NOSUID 2
#endif

#ifndef MS_NODEV
#define MS_NODEV 4
#endif

#ifndef MS_NOEXEC
#define MS_NOEXEC 8
#endif

#ifndef MS_SYNCHRONOUS
#define MS_SYNCHRONOUS 16
#endif

#ifndef MS_NOATIME
#define MS_NOATIME 1024
#endif


lib/mount.c の 328 行目付近を変更
res = umount2(mountpoint, 2);

#ifndef __CYGWIN__
res = umount2(mountpoint, 2);
#else
res = cygwin_umount(mountpoint, 2);
#endif



lib/mount.c の 542 行目付近を変更
umount2(mnt, 2); /* lazy umount */

#ifndef __CYGWIN__
umount2(mnt, 2); /* lazy umount */
#else
cygwin_umount(mnt, 2); /* lazy umount */
#endif



lib/mount.c の 483 行目付近を変更
res = mount(source, mnt, type, mo->flags, mo->kernel_opts);

#ifndef __CYGWIN__
res = mount(source, mnt, type, mo->flags, mo->kernel_opts);
#else
res = mount(source, mnt, mo->flags);
#endif


lib/mount.c の 498 行目付近を変更
res = mount(source, mnt, type, mo->flags, mo->kernel_opts);

#ifndef __CYGWIN__
res = mount(source, mnt, type, mo->flags, mo->kernel_opts);
#else
res = mount(source, mnt, mo->flags);
#endif


lib/mount_util.h: の 11 行目付近に追加
#ifndef _PATH_MOUNTED
#define _PATH_MOUNTED "/var/lib/misc/mtab"
#endif


lib/mount_util.c: の 97 行目付近を変更
res = umount2(mnt, lazy ? 2 : 0);

#ifndef __CYGWIN__
res = umount2(mnt, lazy ? 2 : 0);
#else
res = cygwin_umount(mnt, lazy ? 2 : 0);
#endif



lib/ulockmgr.c: の 23 行目付近に追加
#ifdef __CYGWIN__
#include
#endif


lib/ulockmgr.h: の 1 行目付近に追加
#ifndef MSG_WAITALL
#define MSG_WAITALL 0x8
#endif

#ifndef F_UNLCK
#define F_UNLCK 2
#endif

#ifndef F_GETLK
#define F_GETLK 5
#endif

#ifndef F_SETLK
#define F_SETLK 6
#endif

#ifndef F_SETLKW
#define F_SETLKW 7
#endif


example/fusexmp.c の 86 行目付近を変更
st.st_mode = de->d_type << 12;

#ifndef __CYGWIN__
st.st_mode = de->d_type << 12;
#endif



example/fusexmp_fh.c の 107 行目付近を変更
st.st_mode = de->d_type << 12;

#ifndef __CYGWIN__
st.st_mode = de->d_type << 12;
#endif


型変換の警告がわんさか出るけれど,だいじょーぶなのかしら?(^^;).
とりあえず,./configure; make; make install.
これで,FUSE がインストールできた.

次は,sshfs のコンパイルができるようにソースを修正するのだけど,最初に書いたとおりで,なんだか面倒になってきてしまったので,やらないかもしれない(^^;).
ちなみに,sshfs は,addrinfo 構造体まわりの使い方を Cygwin 向けに直せば動きそうなので,この続きを誰かやってくれると,ちょっと嬉しい.

==

Dokan sshfs
http://cancoffee2.at.webry.info/200809/article_37.html

--
【コンピュータの最新記事】
posted by NOIKE at 05:19 | Comment(0) | TrackBack(0) | コンピュータ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック