スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

VMWare上の仮想マシンとホストでファイル共有

プログラムのコーディングなどはLinux上で行っているのですが、その間だらだらとWindowsも立ち上げておきたい用事があり、Linux上にVMWare Playerをインストールして、ゲストOSとしてWindows XP SP3を入れて、そちらにホストの方でデュアルブートで使っていたWin XPから必要なフォルダをコピーすることにしました。

フォルダも合計4GB以上あるので、DVDに焼くのも面倒なためできればネットワークで、ということでホスト側にsambaを入れて、Windowsのパーティションをマウントしてから共有としてネットワーク上に公開し、ゲスト側からこれを読み取ることにしました。

ホスト側設定
samba関連のパッケージ
samba-common-3.5.6-71.fc14.x86_64
samba-client-3.5.6-71.fc14.x86_64
system-config-samba-1.2.90-1.fc14.noarch
samba-3.5.6-71.fc14.x86_64
samba-winbind-clients-3.5.6-71.fc14.x86_64

samba4というのがyum searchで引っかかったので、もうsambaもバージョン4が出たのかと思いきや、これはまだα版で、正式版は3.5.6のようなので、今回はバージョン4は見送り。

ファイアウォール設定
システム→管理→ファイアーウォールでGUIツール(system-config-firewall)を起動して、信頼したサービスの項で、SambaとSambaクライアントにチェックをつけておきます。また、信頼したインターフェースの方で、「追加」ボタンをクリックして、"vmnet+"を加えて、チェック状態にしておきます。

/etc/samba/smb.confの設定
system-config-sambaはGUI設定ツールながら、設定できる項目が半端なので、入れなくても良かったかも。結局/etc/samba/smb.confを手動編集。

変更点
workgroup を自宅内ネットワークで運用しているワークグループ名に。
interfacesに、VMWareがホストとゲスト間の通信で利用する仮想インターフェースを追加。そのネットワークアドレスもifconfigで見てhosts allowの方に追加。(172.16.128と172.16.97がそれ)

interfaces = lo eth0 vmnet1 vmnet8 192.168.10.0/24
hosts allow = 127. 192.168.10. 172.16.128. 172.16.97.

あと、平均的に一番長く起動しているのがこのホストマシンのLinuxなので、これにブラウズリストの統合やらWINSサーバやら、Windowsネットワークの親玉をやらせることにして、

domain master = yes
local master = yes
preferred master = yes
wins support = yes

ユーザ認証のために、
encrypt password = yes

そしてWindowsパーティションをLinuxホスト上で/media/windows/以下にマウントする想定で、Windows上のC:\Exportフォルダであれば、

[Export]
path = /media/windows/Export
guest ok = no

以上。

さて、WindowsパーティションをLinux上でマウントするところでも実はちょっとはまりそうになりました。Windowsの方はいつもハイバネーション状態で止めてあるのですが、この状態だとLinux側からは即座にはマウントできません。メッセージによると、

mount -t ntfs-3g -o ro /dev/sda1 /media/windows (リードオンリでマウント)

か、

mount -t ntfs-3g -o remove_hiberfile /dev/sda1 /media/windows (ハイバーネーション情報を破棄してマウント)

のようにする必要があります。。ここでは読み取りできればよいので、roの方で。

さらに、FedoraではデフォルトでSELinuxが動作しているので、これに引っかからないようにする必要があります。smb.confの冒頭にいくつかtipsが書いてある(GUIだけでやっていたらこれを見落としてえらい時間がかかったかもしれません)ので、これに従って

setsebool -P sambsa_domain_controller on (今はドメイン運用していないので必要ではない気がしますが、まあついでに)

Linux側のユーザのホームディレクトリにゲストのWindowsからアクセスできるように、
setsebool -P samba_enable_home_dirs on

で、あと、ホームディレクトリ以外のところで共有として公開したいところは、既存のシステムディレクトリであれば

setsebool -P samba_export_all_ro on もしくは
setsebool -P samba_export_all_rw on

自分で作成したディレクトリであれば、そのディレクトリに対して

chcon -t samba_share_t ディレクトリのパス名

としておけばいいのですが、さてここで困った。今共有したいフォルダはそもそもNTFSをLinuxからマウントしたものなので、当然ファイルシステムにSELinuxのラベルなどという属性は付与できません。つまりchconしようがありません。試しにこの時点で、

smbadd -a ユーザ名
として、/etc/samba/smbpasswdにユーザを登録した上で(ここでは簡単のために、このユーザは同じユーザ名、同一パスワードでLinux、samba、ゲストのWindowsにユーザとして登録するものとします。そしてゲストのindows側ではこのユーザでログオンして共有にアクセスするものとします。)、

サービスを起動します。

chkconfig --level 35 smb on
chkconfig --level 35 nmb on
service smb start
service nmb start

この状態で、Windowsの側で、「ワークグループのコンピュータを表示する」を選択すると、ホスト側でのホームディレクトリにあたる共有と、/media/windows/Exportにあたる共有がちゃんと見えます。つまりブラウズリストはきちんと動作しています。しかし、共有Exportの方を開こうとすると、リソースにアクセスする権限がないと言われて開けません。

ホスト側で、一旦NTFSのパーティションからLinuxのパーティションに必要なフォルダをコピーしてきてからこれを共有するようにすればいいわけですが、とりあえず一回ゲスト側にこのフォルダをコピーできればよかったので、

setenforce permissive

で一時的にSELinuxを止めると、Export共有フォルダにアクセスできるようになりました。この状態でコピーを行い、permissiveにしっ放しはセキュリティ的にまずいので、コピーが終わったら即座に

setenforce enforcing

でSELinuxを機能させます。とりあえずはこれで最低限の目的は達成。
スポンサーサイト

コメントの投稿

非公開コメント

セルフコメント

ホストとゲスト間のファイル共有だけなら、当然VMWareの共有フォルダ設定でできるわけですが、sambaの設定をしようとする度にけっこう細かいところを忘れていて、ちゃんと動かすまでに数時間を要したりしがちなので、そのための備忘録としての意味も込めてsambaでの共有を書いておきました。
プロフィール

Author:GM3D
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
FC2カウンター
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。