Macで仮想環境


サーバ周り(CentOS)を色々と弄ってみたかったのでローカルに仮想環境を構築することにした。
AWSで構築しようかとも思ったが敷居が高そうなので、先ずはローカルで頑張ってみることにする。

理由：負荷分散テストとか、セキュリティ関連の脆弱性テストを自分なりに試してみたいから。



###2016.9.10（追記）
ゴチャゴチャと色々とやってみたけど...素直に[Docker for Mac](https://docs.docker.com/docker-for-mac/)を入れてdocker-compose.yml記述するだけの方が楽だな・・・。


##Linux系サーバ関連の基礎知識

かつてUnix系OSと言えばSunのSolarisだったが、MicrosoftやLinux陣営に負けOracleに買収されるも今は殆ど息をしていない。

現在はRedHat社がUnixサーバ系の業界標準であり、同社はFedoraで最新カーネルやアプリを検証し、RedHatで商用サポート提供し、CentOSで裾野を広げる戦略をとっている。CentOSは商用RedHatの互換クローンとして有志ボランティアによる無償提供版だったが、2014年1月以降はRedHat社の支援を受け事実上の無償公認版になっているので、業務用サーバの勉強にはもってこいなOSだ。


##開発環境
OS X EI Capitan 10.11.6
Xcode Version 7.3.1 (7D1014)
Homebrew導入済み(0.9.9)
Command Line Tools導入済み


##brewでインストールしたもの
- vituialbox(5.1.2r108956)
- vagrant(1.8.5) [バグあり要注意](http://stknohg.hatenablog.jp/entry/2016/07/26/190330)


##事前準備
- [Xcodeインストール](http://www.cse.kyoto-su.ac.jp/~oomoto/lecture/program/tips/Xcode_install/)
- [Command Line Toolsインストール](http://www.cse.kyoto-su.ac.jp/~oomoto/lecture/program/tips/Xcode_install/)
- [Homebrewインストール](http://brew.sh/index_ja.html)
- なぜVituialboxだけでなくvagrantも入れるのかについては、[先人がまとめてくれている](http://qiita.com/hidekuro/items/fc12344d36d996198e96)ので感謝しつつ読む。


##VirtualboxVagrantのインストール
[参考サイト](http://qiita.com/ebisennet/items/60a15a225fabc150445d)

>$brew update

>$brew install Caskroom/cask/virtualbox Caskroom/cask/vagrant

>$vagrant -v

>$virtualbox


##[Vagrant 1.8.5のバグ対応](http://stknohg.hatenablog.jp/entry/2016/07/26/190330)
brewのvagrantは、2016/9/2時点ではバグverなので以下を直修正。
これをせずにvagrant upをするとSSH接続エラーでうまく起動せず。

その場合はvagrant destroyでVMイメージを削除するか、.vagrantフォルダと、~/VirtualBox VMsフォルダ内に作成されたイメージを一旦削除し、vagrant haltで停止させた上でバグ対応。

>$mdfind public_key.rb

>\#sudo vim /opt/vagrant/embedded/gems/gems/vagrant-1.8.5/plugins/guests/linux/cap/public_key.rb 

56行めに追記。　chmod 0600 ~/.ssh/authorized_keys

##Vagrant設定
[Vagrant images](http://www.vagrantbox.es)　もしくは[Chef社](https://atlas.hashicorp.com/bento/)で、CentOS7のイメージURLを探してコピー。

>$mkdir ~/保存先

>$cd ~/保存先

>$vagrant box add CentOS7 "コピーしたURL"

>$vagrant init

>$vagrant up

>$vagrant ssh

※vagrant sshを実行するとvagrantユーザでログインされる。
※vagrantユーザとrootのパスワードは"vagrant"

##インストール後のCentOS設定
>$su
\#yum -y update
\#yum -y groupinstall "Base" "Development tools"
\#yum -y install yum-cron
\#vi /etc/yum/yum-cron.conf

apply_updates = no
↓
apply_updates = yes

>\#systemctl start yum-cron
\#systemctl enable yum-cron
\#systemctl is-enabled yum-cron


##ホストOSとのファイル共有時のエラー対応
Macと仮想ゲストでフォルダ共有した際、SSHログインは可能だがフォルダ共有されず。
vagrant sshでログイン後にmountを試みるも怒られる。

原因はVirtualBoxのゲスト用プラグインのver違い(ホスト5.1.2 ゲスト4.3.14)であるっぽいのでGuest Additionsを入れ直す。

>\$vagrant plugin install vagrant-vbguest
VBゲスト管理用プラグインを0.10.0から0.13.0にアップグレード

>\$vagrant vbguest
Guest Additionsが5.1.2に入れ替わる。
途中ゲストOS側にX.org関連が無いぞと注意されるも使わんから無視。

>\$vagrant reload
vagrantを再起動

>\$vagrant ssh
ログイン後に共有フォルダがmountされていることを確認。
（Vagrantfileで記述したconfig.vm.synced_folderフォルダ）

###Vagrantfileでの複数vmイメージを管理する場合
>config.vm.define :web do | web |
&nbsp;&nbsp;  web.vm.hostname = "web"
&nbsp;&nbsp;  web.vm.network :private_network, ip: "192.168.33.10", virtualbox__intnet: "intnet"
end
config.vm.define :mysql do | db |
&nbsp;&nbsp;  db.vm.hostname = "mysql"
&nbsp;&nbsp;  db.vm.network :private_network, ip: "192.168.33.20", virtualbox__intnet: "intnet"
end


###Vagrant上のDockerで複数vmイメージを管理する場合
[(参考サイト)複数Dockerコンテナ自動起動](http://knowledge.sakura.ad.jp/knowledge/5736/)を参考にしつつ、docker-compose.ymlを記述。
>config.vm.provision "docker"
config.vm.provision "shell", inline: <<-SHELL
&nbsp;&nbsp;    curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
&nbsp;&nbsp;    chmod +x /usr/local/bin/docker-compose
  SHELL
config.vm.provision "shell",
&nbsp;&nbsp;    inline:  "docker-compose -d -f /tmp/app/docker-compose.yml up",
&nbsp;&nbsp;    run: "always"



###Dockerセキュリティ
[Dockerでホストを乗っ取られた？](http://qiita.com/titilat/items/f4f94a0cee9049125156)
[Dockerでハック](http://rimuru.lunanet.gr.jp/notes/post/how-to-root-from-inside-container/)