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
コンパイル
展開されたディレクトリで 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共有をマウントする
ご注意
本モジュールは十分にテストされていません。万一の場合システムがパニックしたり、最悪の場合既存のファイルを破壊したりする可能性もあります。くれぐれも重要なシステムに導入しないようにしてください。
本モジュールによるいかなる責任も負いかねます。ご使用は自己責任でお願いいたします。
でもフィードバックは大歓迎です。