exec 可能な Solaris 向け smbfsファイルシステム

Windowsの共有フォルダをマウントできるsmbfsファイルシステムmmap(2), exec(2) 可能なように変更しました。
この変更によってWindows共有上の Solaris の実行可能ファイルが実行できるようになりました!!

smbfs which supports access to mapped-file (英語ページ)

何を言ってるんだと思われるかもしれませんが、実はバンドルの smbfs ファイルシステムではマウントされたディレクトリ上に date コマンドなどの実行可能ファイルをコピーしても実行することはできないのです。これはプログラムの実行に必要なファイルシステムのいくつかの機能が未実装であることが原因で、それらを実装してやることで mmap(2) や exec(2) が可能になったということです。

実装された VNODE 関数

  • VOP_MAP
  • VOP_GETPAGE
  • VOP_PUTPAGE
  • VOP_ADDMAP
  • VOP_DELMAP

これにより実行可能になったシステムコール

ダウンロード

以下のリンクからソースコードをダウンロードすることができます。

smbfs.tar.gz

また、コードは github においてありますのでそこから参照、check-out することも可能です。

https://github.com/kaizawa/smbfs

コンパイル

展開されたディレクトリで configure, make を実行することでコンパイルできます。

$ ./configure
$ make 

使い方

このバージョンの smbfs をインストールする前に、バンドルの smbfs モジュールをアンロードおよび削除しておく必要があります。
なお、万一にそなえてオリジナルのsmbfsモジュールをコピーしておくことをお薦めします。というか是非やってください。

オリジナルモジュールのバックアップ

# cd /usr/kernel/fs/amd64/        
# cp smbfs smbfs.org

オリジナルのモジュールのアンロード

smbfsのアンロードはroot権限で make uninstall コマンドを実行することで行えます。

# make uninstall
cd usr/src/uts/common/fs/smbclnt/smbfs ; make uninstall
modunload.sh
rm /usr/kernel/fs/amd64/smbfs

もしくは直接 modinfo(1M) と modunload(1M) コマンドを叩いてもアンロードできます

# modinfo |grep smbfs                                    
274 fffffffff816b000  14850  22   1  smbfs (SMBFS filesystem)
# modunload -i 274

インストール

インストールは make install コマンドで行えます。

# make install
cd usr/src/uts/common/fs/smbclnt/smbfs ; make install
/usr/bin/ginstall -c -m 0644 -o root -g sys smbfs /usr/kernel/fs/amd64 
modload -p fs/amd64/smbfs

マウント

通常の smbfs の場合と全く同様に mount できます。詳しくは man mount_smbfs(1M)をご参照ください。

# mount -F smbfs -o dirperms=777,fileperms=777,user=myname,uid=myname //smbserver/data /mnt

以下のエントリでもマウント方法のご紹介をしているので参考にしてください。
Solaris11でSMB共有をマウントする

ご注意

本モジュールは十分にテストされていません。万一の場合システムがパニックしたり、最悪の場合既存のファイルを破壊したりする可能性もあります。くれぐれも重要なシステムに導入しないようにしてください。
本モジュールによるいかなる責任も負いかねます。ご使用は自己責任でお願いいたします。

でもフィードバックは大歓迎です。