Posted at

vagrant + CentOS7で開発環境を作る

More than 3 years have passed since last update.


まえがき


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


sudoers

...

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に修正する。

なお、旧カーネルで起動しないよう注意する。


/ets/default/grub

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が起動できるはず。


あとがき

なんか、足りない気がするので後で追検証してみる。