#まえがき
##CentOS7のvagrant boxはネットワークがおかしい
vagrant環境でローカルに開発環境を立ち上げることも珍しくない昨今。ホスティング各社のVPSにもCentOS7が出揃ってきているので開発環境もCentOS7にしようとvagrant boxを検索。
ググってトップに出てくるのはVagrantbox.es
。しかも上から2番めにCentOS7のboxが載っている(2015-06-30現在)。
CentOS6の時には何も気にせずboxから起動していて特に問題なかったのだが、CentOS7のboxを設定して起動すると、networkが起動失敗している。
さらにググってvagrantにパッチを当てなければいけないという記事が多いので、vStone/vagrant-centos7_fixのパッチを当ててみた。
##パッチだめじゃん
ググった時から、記事のvagrantのバージョンが古いことはわかっていた。
1.6.4では問題があり、1.6.5では解消されていることも、自分のMacにインストールされているvagrantが1.7.2であることも、実はわかっていたのです。もちろん自分の問題にしているネットワーク関連の問題も解消しないことも。
でも、なんか、淡い期待で入れたパッチも効果はなし。ま、「解消された」と書いてあるんだからそうでしょう。
##いっそCentOS7のvagrant boxを作ってみる
vagrantで立ち上げているCentOS7のネットワーク周りをそれなりにいじくってみたのだが、CentOS7に慣れていないのと、vagrantをそんなにしっかり勉強していないのが相まって全くわからない。
特にCentOS7は6からネットワーク周りが見た目けっこう変わっている。
VirtualBoxで普通にCentOS7立ち上げて作業すればいいじゃん、と思った。しかし、vagrantでの作業はみんなが勧めるんだから、きっとスゴいはずだ。スゴさが全くわかっていないけど、でも、きっとスゴいんだ。と自分を騙してvagrant boxを作成してみることにした。
#VirtualBoxにCemtOS7を構築する
まずは、VirtualBoxにCentOS7を構築する。Web開発環境なので、とりあえず最小構成で問題ない。CentOS-7-x86_64-Minimal-1503-01.isoをダウンロード。場所は本家のcentos.orgが良いと思う。
VirtualBox4.3.26では、いきなり新規作成。centos7とか、それらしい名前を付けると勝手にタイプとバージョンを選んでくれる。くれぐれも名前を先に入力する。あとは適当に進んで一気に仮想領域を作ってしまう。
すると、電源オフの仮想環境(まだ領域だけしかない)ができるので、左のペインで選択し設定を押す。立ち上がった設定のストレージでコントローラ:IDEにディスク追加。ディスクに**+マークが付いているのをクリック。ディスクを選択のボタンを押し、先ほどのCentOS-7-x86_64-Minimal-1503-01.isoを選択して起動!**
ま、vagrant扱う人であれば、CentOS7のインストールくらいできすはず、少なくともググればできるはず。ということで、インストール自体は割愛。
インストールはGUIなので非常に簡単。だと思う、個人的には。インストールに日本語も選べる。英語キーボードを使っている人は少し注意が必要だけど最悪、USBで日本語キーボードつなげばいいでしょう。
まず最初に確認すべきは、vagrant boxで立ち上げた際におかしかったnetwork。
# systemctl status network
ちゃんと起動していることを確認。
本当は
# systemctl status network.service
とか打たないといけないのかもしれない。
余談だが、CentOS7はサービスの確認、起動停止のコマンドが変わっているので要注意。とはいえ、serviceと打ってもコマンドを変換してくれる親切ぶり。きっと最初だけだと思うけど。その他、ifconfigがなかったりするが、これはまぁ、随分前から非推奨のコマンドだった気がする。
#vagrant boxを作るための準備。
yum update
# yum update
# yum install gcc kernel-devel perl bzip2
# reboot
そういえば、shutdown -r now
とかってまだあるのか確認したら、ちゃんと再起動しました。。
##ユーザ作成
hao's work log: CentOS7.0をvagrant用にbox化するメモあたりが参考になる。
vagrantでは起動時に、いろいろな設定を行うことができるのだがその際にゲストOSにログインするユーザが必要なので作成する。アカウントはvagrant
でパスワードもvagrant。いわゆるJoe Account。
パスワードなしでsudo
ができるようにvisudoでsudoers
を編集。
# visudo
...
vagrant ALL=(ALL) NOPASSWD:ALL
...
さらに、vagrantでVirtualBOX起動後に鍵認証できるように鍵を設定する。
# su - vagrant
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ curl -L -o ~/.ssh/authorized_keys https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub
$ chmod 600 ~/.ssh/authorized_keys
##grubの設定変更
yumでカーネルがアップデートされると、grubでどのカーネルから起動するか確認される。CentOS6の時には聞かれたっけ?記憶に無い。多分なかったような…。で、多少でも起動が遅くなってしまうので待ち時間を0に修正する。
なお、旧カーネルで起動しないよう注意する。
GRUB_DEFAULT=1
GRUB_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT=0
...
GRUB_DEFAULT
は、起動したいOSにが何番目にあるかの数字で、0から始まっている。
ほかに、起動したいOSのラベルを書いてもいいらしいがこちらは未検証。
変更した設定を反映。
$sudo grub-mkconfig -o /boot/grub/grub.cfg
起動時にメニューが表示されなくなればとりあえずOK。
##ネットワーク周りの設定を消しておく
とりあえず、VirtualBox上でパブリックネットワークとプライベートネットワークの構築を試してみて、networkが無事起動していることを確認。
そして、この確認の時に設定された動作済みのネットワーク設定があると、vagrant box化した時にnetworkがこけてしまう。vagrantは自力でネットワーク設定をする(らしい)ので、設定がコンフリクトする。
少なくともifcfg-enp0s3とかifcfg-enp0s8とかは削除する。退避でもいい。
さらに、udevルールも削除しておく。
# rm /etc/udev/rules.d/70-persistent-ipoib.rules
#VirtualBox Guest Additionsのインストール
hao's work log: CentOS7.0をvagrant用にbox化するメモ
やはりこちらの記事が参考になる。
作業はVirtualBOX
側での作業と仮想環境での作業が必要。
VuetualBOXで、メニューからDevices
をクリックし、Insert Guest Additions CD image
を選択。
あとは、仮想環境側でインストールを行うのだが、この時にyum updateした時にカーネルがアップデートされていてかつ、GRUB2の設定でデフォルトの起動OSバージョンがupdateされたものに書き換わっていない場合にはエラーが出る。エラーメッセージが親切に出るのでその他のエラーでもメッセージを確認しながら行えば問題ないはず。
#vagrant boxの作成
こんどはホスト側での作業で新規に作成した仮想環境をvagrant用に保存するようなイメージ。
$ vagrant package --base CentOS7.0 --output vagrant.box
==> CentOS7.0: Exporting VM...
==> CentOS7.0: Compressing package to: /Path/to/VirtualBox VMs/CentOS7.0/vagrant.box
--base
の後は仮想環境の名前によって異なります。
#vagrantで起動してみる
あとは、普通にネット上に公開されているboxを登録して起動するのとほぼ同じでvagrant init
後にvagrant up
でCentOS7が起動できるはず。
#あとがき
なんか、足りない気がするので後で追検証してみる。