« 今年の夏、フィンランド合宿に行く人へ | メイン | 英語版サービスをリリースする前に »

2008年04月24日

本当はデスクトップで開発したいけどノートパソコン持ち歩いて開発もしたい、という人のための環境構築 あとで読む

開発合宿や、ちょっとカフェで開発、みたいなことをすると、どうしても「ノートパソコン」に開発環境をいれないといけません。

でも、やっぱり「デスクトップ環境」で広い画面をたっぷり使いながら開発したいんですよね・・・


で、この2日間くらい、何故かすごく悩みながらいろいろやってみました。結果はこの通り。

desktop-note.gif

結論は単純なんですが、意外に苦労したのでメモとして残しておきます。

絵を描いて説明・・・、とか思ったんですが、もう疲れ果てたのでテキストオンリーで。
砂を噛むように味気ない文章なんですが、よろしければ参考までにどうぞ。


■やりたいこと

外ではノートで、会社では デスクトップPC で「シームレス」に開発したい!


■基本ルール

それ Mac 使えばできるよ・・・というのは無し。Let's Note 最強。


■ベースとなる開発環境

ノートパソコンに vmware player + CentOS をいれて、ノートパソコン単体では開発できるようにしてある。
つまり、ノートパソコンが開発用サーバー。


■会社にあるPC

Mac mini も含めて、4台全部使って開発したい。検証も楽々。


■とにかく

・どこのネットワークにつないでもすぐ開発できる。
・ネットワーク上のどの PC のブラウザからでも開発中の画面が確認できる。
・ネットワーク上のどの PC からでも開発中のコードを参照・編集できる。
・公衆無線LANなどではセキュリティにも配慮したい


■ということで、要は

A. 開発環境の Web サーバーに外部からアクセスできるようにする
B. 開発環境のファイルシステムを外部から参照・編集できるようにする

ということだけなんですよね。


■VMWare の NAT 環境で実現してみよう!

安全だし手軽ですからね。ゲストOSをNAT環境で運営する方法。で、これは嵌りまくって断念。
特に B. の「ファイルシステム」ですね。

開発環境の CentOS には Samba を入れてあるのですが、これを生かす場合は NAT の「ポート転送」を設定しないといけない。
137~139番ポートの転送は簡単なのですが、445番ポートの転送が非常に厳しい。
Windows では DHCP クライアントを落としたくないので、別途 IP アドレスを確保して云々・・・
参考:仙石浩明の日記: Windows「ファイルとフォルダの共有」をリモートな Windows VISTA マシンからアクセスする方法 (1)

で、もう一つ思いついたのが、ゲストOSでNFSサーバーを動かして外部からmountする方法。
Windows からの mount は Windows Services for UNIX などを使うことで簡単に実現できます。
問題はまたしてもポート転送。Windows が 111 番の portmapper を握っているので、結局 NAT の中にいるゲストOSのNFSサーバーを外部から mount するのは難しい、と。

その他、ssh でトンネル掘ってファイルを共有、とか考えたのですが、そこまでする必要はないだろう、と。。

そんなわけで、残る選択肢は「ブリッジ接続」になります。


■ブリッジ接続で環境構築してみよう!

ブリッジ接続を使う場合、ゲストOS は DHCP で IPアドレスを取得するようにしたいので、ゲストOS の IPアドレスが何になるかわからない、という問題があります。

これを Samba と hosts ファイルと apache プロクシで解決します。
順を追って説明しますね。


■ブリッジ接続:ゲストOSのネットワークは DHCP にする

どんな環境でも動作するように、ホストOSはもちろん、ゲストOSもDHCPが基本になると思います。

これは /etc/sysconfig/network-scripts/ifcfg-eth0 に

DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes

のように記述すればいいだけですね。

この段階で、vmware 上のゲストOSはブリッジ接続でもNAT 環境でも動作するようになります。
セキュリティの設定に悩むより、公衆無線LAN環境などでは、さくっとNATに切り替えて運用するのがいいでしょう。
※vmware のメニューから NAT に変更し、ゲストOSで /etc/rc.d/init.d/network restart とすれば切り替え完了です。


■ブリッジ接続:ゲストOS のWebサーバーにアクセスできるドメイン名を割り当てる

DHCP でブリッジ接続を行ったら、ファイルエクスプローラーなどで「\\(ゲストOSのホスト名)」で、ネットワーク上のどの*Windows*PCからでも共有ファイルが閲覧できる状態になっていると思います。

※閲覧できない場合は Samba の設定がまずい可能性が高いです。

さて、ここで、開発をしている人なら、例えば「trackfeed.local」など、テスト用のドメイン名を使ってゲストOSのWebサーバーにアクセスしたいと思うはず。。

すると、trackfeed.local という仮想ドメイン名を ゲストOS の(動的に割り当てられた) IPアドレスに変換する必要があります。

そこで、ホストOS のhosts ファイルを利用します。
ゲストOSのホスト名が guest だとすると、ノートパソコンの C:\Windows\system32drivers\etc\hosts に以下のように追加します。

guest trackfeed.local
guest feedmeter.local
...


ポイントは「IP アドレスで指定しない」点です。
※2008/5/12 訂正 : IPアドレスでないと駄目なようです。すいません、間違いでした。たまたまDNSサーバーに登録していたのでうまく動作していたようです。申し訳ありません。...
これにより、このホスト OS に聞けば、「trackfeed.local」というドメイン名の名前解決が行えるようになります。


■ブリッジ接続:テスト環境のURLにどのマシンからでもアクセスできるようにする

上記のhostsファイルへの追記をすべてのパソコンで実施・・・なんてやりたくないです。

ということで、ホストOS (Windows) に proxy サーバーを立てます。

apache サーバーを入れて ポート 8080 などで運用してみます。

httpd.conf をちょっと書き換えます。

Port 8080
LoadModule proxy_module modules/mod_proxy.so
AddModule mod_proxy.c
<IfModule mod_proxy.c>
 ProxyRequests On
 <Directory proxy:*>
  Order deny,allow
  allow from all
 </Directory>
 CacheSize 0
</IfModule>

こんな感じですかね。

そして、プロクシ設定用の .pac ファイルを用意します。

function FindProxyForURL(url, host) {
  if ( dnsDomainIs(host, ".local" ) )
    return "PROXY your-note-pc-name:8080";
  else
    return "DIRECT";
}

ドメイン名が「.local」の場合は、your-note-pc-name の 8080 番をプロクシとして使う、という設定ですね。
これを適当なファイル名で Web からアクセスできる場所に保存します。

そして、IE, Firefox, Safari などのプロクシ設定で、この .pac ファイルを使うように指定します。

すると、それらのブラウザから「trackfeed.local」などにアクセスできるようになります。

.pac ファイルを使うとその場で名前解決は行われず、pacファイルのルールに従ってノートパソコンのホストOSにアクセスし、そこでプロクシが動作し、そのプロクシは hosts ファイルによりゲストOSのIPアドレスを特定し、ゲストOSのWebサーバーにアクセスできるようになる、という仕組みですね。

IP が動的に変更されても、NAT・ブリッジ環境問わず大丈夫!

なお、上記 .pac ファイルの「your-note-pc-name」はノートパソコンのホストOSの名前ですので、mac の場合は IP アドレスを指定する必要があるかと思います。

あと、Windows ファイアウォールでホストOSのポート 8080 番を空けておくのをお忘れなく。


■あとは Synergy でもいれて

あとは Synergy でもいれておけば、マウスとキーボード一つですべてのパソコンから操作できます。

開発マシンから、ゲストOSのファイルシステムをファイル共有しておけば、さくさく開発できて、その場でブラウザから検証も可能になります。


ふとカフェに行きたくなったり、明日から開発合宿に、という場合でもノートパソコンだけ持ち歩けば「画面が小さくなった」くらいの制約しかありません。

再び会社に戻ってきたら、会社のネットワークにつないで、今度はデスクトップでそのまま開発続行、と。


ということで、まぁ、ブリッジ接続すばらしー、というだけの結論なのですが、最近主流のノートパソコン開発といえど、やっぱりデスクトップや大画面で開発したい人も多いはず、、で、参考までにメモとして。。。

#もはやここまでして Windows 使う必要があるのか・・・Mac でいいんじゃないかw

#途中から相当疲れてきたので、メモとしても雑な内容ですいません・・・


投稿者 aka : 2008年04月24日 15:57  / 2008年04月 / メモ

トラックバック

人気ブログランキング - a++ My RSS 管理人ブログ

このエントリーのトラックバックURL:
http://133.242.136.64/mt-tb-sf.cgi/682

コメント

ご無沙汰です!
ええと、
Macでいいんじゃない?
とか言ってみたり (^o^)

投稿者 koyama : 日時 2008年04月25日 22:14

いやー、Let's Note、1kg で 12時間もちますからねー。故障も少ないしサポートも手厚いし。。

Mac Air は非力だし、Mac Book Pro は重すぎて・・・

投稿者 aka : 日時 2008年04月29日 10:33

はじめまして。非常に参考になります。私もほぼ同じ構成で開発環境を作ろうとしていたので、、。
その中でひとつご質問が、、。
winXPの
C:\Windows\system32drivers\etc\hosts
に IPアドレスとエイリアス名という組み合わ
せではなく、ホスト名とエイリアス名という組み合わせで設定をされているわけですが、
私の環境では、この組み合わせではどうしてもうまくいってくれません、、。
sambaの設定を行ったうえで、ホストOSからゲストOSのホスト名を使って
C:\> ping guestOS
とすれば、pingは通り、http://guestOS/ でもアクセス
できます。なので開発用のローカルドメイン hoge.local でもアクセスしたいと思い、
C:\Windows\system32drivers\etc\hosts に
guestOS hoge.local
と記述してみたのですが、
C:\> ping hoge.local はpingが通らず、http://hoge.local/ もアクセスできません、、
何か気をつけなければならないことがあるのでしょうか。申し訳ございませんがご教示いただけ
ると幸いです。

投稿者 myj : 日時 2008年05月12日 00:35

コメントありがとうございます。

すいません。hosts の設定なのですが、やはり IP アドレスで書く必要があるようです。。。

たまたま DNS サーバーに登録していたので名前解決がうまくいったように思えただけでした・・・申し訳ありません。


本文も訂正させていただきました。

ちなみに、禁じ手ではありますが、 DynDNS.org にて ワイルドカードで *.hoge.homeip.net の名前解決を内部のIPアドレスにする、とう方法などが・・・あ、いや、独り言です。すいません&ご指摘ありがとうございました!

投稿者 aka : 日時 2008年05月12日 11:57

はじめまして
似たような環境で悩んだ経験があるので、参考になれば幸いです
ノート上のCentOSをホストOSや外部PCからアクセスしたいのが基本ですね
別案をとして会社のPCを限定されていてHosts書いていいのでしたら以下の方法もありだと思います
・CentOS のeth0 がメインLANだったらeth0:0 (エリアスです) を作成し、固定の専用IP(たとえば192.168.11.10とか)を振る
・アクセスしたい外部PCのLAN設定でIP(ホストも含む)を増やす(サーバーと同じノードでたとえば192.168.11.200)
・アクセスしたい外部PCのHostsに ”192.168.11.10 guestOS” を追加
こうしておけばCentOSはDHCPでメインLANの設定を自動設定でき、何処に参加してもまず邪魔になりません。
最近のOSではIPは複数設定できるのでネットワークポリシーが厳しくない環境でしたらまず大丈夫だと思います。
sambaはeth0:0をインターフェイスに設定すればIPの設定をしたものだけで管理でき安全でメリットも多いと思います
会社のPCがXP・2000辺りで、DHCPでないと嫌!というなら
Microsoft Loopback Adapter をインストールしてそれにIPを振るのでもOKです
VMwareのゲストOSを複数管理したい時に結構使える手段です
なにやら、長文になってしまいましたが、既存構成を変更せずにすむ便利な環境として有効と思います。
あ、ゲストOSはNATではなくブリッジに設定しないと繋がりませんのであしからず
この記事まとめて自分のサイトに書こうと思ってたの忘れてました(^^

投稿者 TATUO : 日時 2008年05月15日 03:49

コメントありがとうございます。

ネットワークI/F を複数(論理的に)作成しておく方法ですね。
サブネットがある程度固定されている場合には便利な方法だと思います。ありがとうございます!


投稿者 aka : 日時 2008年05月16日 18:08

コメントしてください

あわせて読みたい




保存しますか?