あお日記

理系研究者のブログです。勉強したことや本の感想などを中心に残して行くつもりです。

VirtualBox+ホストオンリーアダプタ+Gitでソケットプログラミング環境構築

手元のMac上でソケットプログラムのテストをするための環境構築をしました。

ホストマシンのGitリポジトリVirtualBoxを使って構築したLAN内のゲストマシンにクローンして編集・テストします。

ゲストマシンでプログラムを編集・テストし、プログラムを外に持ち出す際にホストマシンにコピー、 外で更に編集しゲストにコピー、というのを繰り返しているウチにソースコードが分散し新旧などが不明になったため、 きちんとホストマシン上で管理しようとしたのがきっかけです。

つまづいたりした部分を含めて全体を書いていきます。

  1. VirtualBoxを使ったLAN構築(ホストオンリーアダプタ)

  2. ゲストマシンOSの設定

  3. Gitの設定(ホスト・ゲスト)

1. VirtualBoxを使ったLAN構築(ホストオンリーアダプタ)

ソケットプログラムをテストするためのゲストマシン(サーバ・クライアント等)と、 Gitリポジトリのあるゲストマシン間の通信が必要なので、 VirtualBoxのホストオンリーアダプタでゲスト・ホストをまとめたLANを構築します。

その際にVirtualBox→環境設定→ネットワーク、からホストオンリーネットワークの設定を行います。 ホストのアダプターに適当な固定IPアドレスを振り、DHCPサーバを動かしておきます。

以下を参考にさせて頂きました。

【VirtualBox】ホストオンリーアダプター + DHCP の設定 - pospomeのプログラミング日記

これでゲストマシンを起動すると上記で設定したサブネットでLANが構築されます。

2. ゲストマシンOSの設定

ただしこの時いくつか注意点があります。 ホストオンリーアダプタ以外にブリッジアダプターを設定していたりすると 起動時にホストオンリーアダプタ用のNICが見えていなかったりします。 (特にアダプター1をブリッジ、アダプター2をホストオンリー、などに設定した場合)

NICが見えていないだけなので毎回ifconfig等で立ち上げてIPアドレスを振っても良いのですが面倒なので設定ファイルを編集します。

Ubuntu12.04の場合だと、/etc/network/interfacesが

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp/etc/network/interfaces

等になっているはずなのでここにeth1の分を追記します。 eth0の記述をコピーしてeth1にすればOKです。

ただしここでもつまづく事があります。 NICの番号設定がおかしくなっていたりすると設定されないのでその際にはNICの番号を振り直します。 (上記だとブリッジがeth1, ホストオンリー用がeth2になってる場合など)

/etc/udev/rules.d/70-persistent-net.rulesを編集すればOKです。

以下を参考にさせて頂きました。

Technical Memorandum: LinuxでNIC番号が思った通りにならない

この時にVirtualBoxのネットワーク設定から各アダプタのMACアドレスを確認し、eth番号を書き直します。 間違えて同じMACアドレスで2種類の設定を書いたりすると上手く行きません。というか上手く行きませんでした。

以上でホストマシン(IPは固定)・ゲストマシン(IPはDHCPなので台数を増やしたりしてもOK)でLANが構築できました。

ちなみに文章中でifconfigと書きましたがifconfigは非推奨と言う事でipコマンドを使用した方が良いみたいです。 今までありがとう「ifconfig」 | ツチノコブログ

3. Gitの設定

あとはホストでGitリポジトリを立てゲストにクローンし、ソースコードの編集・テスト・バージョン管理をします。

ホストではプログラムを置いたディレクトリで

$ git init
$ git add *
$ git commit -m "initial import"
$ git config --bool core.bare true #リモートリポジトリをbareに設定

等とし、ゲストで

$ git clone ssh://user@hostname/path/to/repos

とすればOKです。userはssh接続を許可したホストOSのユーザ名、hostnameは1. で設定したホストの固定IP、/path以下はホストマシン上のGitリポジトリまでの絶対パスです。

以下を参考にさせて頂きました。

GitHub - いまさら聞けないgitの使い方 - Qiita

リモートリポジトリへの git push に失敗した場合 (remote rejected) - まじめにゆいがどくそん

以上、誰かのお役に立てば幸いです。