Vagrant と VirtualBox で CentOS 環境をサクッと作る
以前、Windows に VirtualBox をインストールして、Fedora 環境を作ったことがあった。
今回は VirtualBox を簡単に扱えるようにしてくれる Vagrant (ベイグラント) というツールを使って、より簡単に Windows 上に Linux 環境を構築してみようと思う (Vagrant は VirtualBox 専用ではないが、VirtualBox を組み合わせて使用するのがデフォルトになっている)。
環境は Windows10 64bit。導入する Linux ディストリビューションは、Red Hat Enterprise Linux のオープンソース版として広く使われている CentOS を導入してみようと思う。
目次
- VirtualBox のインストール
- Vagrant のインストール
- Vagrant Init で Vagrant を初期化する
Vagrantfile
を書き換える- Vagrant Up で Vagrant 仮想環境を立ち上げる
- CentOS 環境にログインしてみる
- Linux 環境構築
- その他コマンド
- 以上
VirtualBox のインストール
上のサイトから「VirtualBox binaries」の「Windows hosts」をダウンロードし、インストールする。執筆時のバージョンは VirtualBox 5.1.18。
オプションは特に変更せず次へ次へで進めていく。
Vagrant のインストール
上のサイトから「Windows Universal (32 and 64-bit)」をダウンロードし、インストールする。執筆時のバージョンは Vagrant 1.9.3。
こちらもオプションは特に変更せず次へ次へで進めていく。
Vagrant Init で Vagrant を初期化する
ここからは GitBash For Windows のコンソールで作業する。コマンドプロンプトでも良いと思うが、GitBash を使うと色々楽なので…。
まず適当な場所に Vagrant 用のディレクトリを作る。
$ mkdir MyCentOS
$ cd !$
!$
は直前に実行したコマンドの引数を使えるというもの。
そしたら、以下のコマンドで Vagrant の初期化を行う。
$ vagrant init bento/centos-7.2
vagrant init
の後ろの bento/centos-7.2
部分は、使用する Vagrant Box の名前。これは、Vagrant を提供する HashiCorp 社が同じく提供する、Atlas というサービスに登録されている Vagrant Box の名前を指定する。
ユーザ名/Vagrant Box 名
という規則になっており、bento
は Chef 社がメンテナンスするオーガナイゼーション (ユーザ名)。Chef 社は「Chef」という構成管理ツールを展開している、信頼できる配布元といえる。
そのユーザが提供している、centos-7.2
という Vagrant Box を指定して、コレを使いますよと宣言しているワケである。
先ほどのリンク先が、Atlas の Vagrant Box を検索できるサイト。Bento が配布する CentOS だけでなく、別のユーザがカスタマイズした CentOS だったり、Ubuntu など他のディストリビューションも選べる。ある程度の雛形が最初から出来上がっていて、それを選んで使えるというワケだ。
今回選択した bento/centos-7.2
は、以下の URL で詳細が確認できる。インストールコマンドがまさに上述のとおりであることが分かるだろう。
Vagrantfile
を書き換える
vagrant init
すると、MyCentOS
フォルダ内に Vagrantfile
というファイルができている。これが Vagrant の設定ファイルになるのだが、いくつか書き換えておく。
# Create a private network, which allows host-only access to the machine
# using a specific IP.
# config.vm.network "private_network", ip: "192.168.33.10"
上の行の「config.vm.network
」の行のコメントアウトを外しておく。
# Create a private network, which allows host-only access to the machine
# using a specific IP.
config.vm.network "private_network", ip: "192.168.33.10"
次に、以下を直しておくと、Vagrant 環境とホスト環境 (Windows 側) とでファイルを共有できるようになる。
# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
# config.vm.synced_folder "../data", "/vagrant_data"
この部分の最終行のコメントアウトを外し、以下のように直してやる。
# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
config.vm.synced_folder "./vagrant", "/vagrant"
そして、Vagrantfile
があるディレクトリに vagrant
フォルダを作っておく。
これで、vagrant
フォルダ内が、Vagrant 環境では /vagrant/
でアクセスできるようになる。手軽に Windows 側と CentOS 側とでファイルが共有できるようになるわけだ。この設定は任意でディレクトリごとに複数指定したりもできる。
Vagrant Up で Vagrant 仮想環境を立ち上げる
Vagrantfile
を書き換えたら、ターミナルで以下のコマンドを叩き、Vagrant Box を起動する。
$ vagrant up
最初に以下のようなエラーが出るかもしれないが、もう一度 vagrant up
すると解消した。
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'bento/centos-7.2' could not be found. Attempting to find and install...
default: Box Provider: virtualbox
default: Box Version: >= 0
==> default: Loading metadata for box 'bento/centos-7.2'
default: URL: https://atlas.hashicorp.com/bento/centos-7.2
==> default: Adding box 'bento/centos-7.2' (v2.3.1) for provider: virtualbox
default: Downloading: https://atlas.hashicorp.com/bento/boxes/centos-7.2/versions/2.3.1/providers/virtualbox.box
default: Progress: 100% (Rate: 4129k/s, Estimated time remaining: --:--:--)
==> default: Successfully added box 'bento/centos-7.2' (v2.3.1) for 'virtualbox'!
==> default: Importing base box 'bento/centos-7.2'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'bento/centos-7.2' is up to date...
==> default: Setting the name of the VM: MyCentOS_default_1492313509410_19491
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
default: Adapter 2: hostonly
==> default: Forwarding ports...
default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: private key
default: Warning: Remote connection disconnect. Retrying...
default: Warning: Remote connection disconnect. Retrying...
The guest machine entered an invalid state while waiting for it
to boot. Valid states are 'starting, running'. The machine is in the
'unknown' state. Please verify everything is configured
properly and try again.
If the provider you're using has a GUI that comes with it,
it is often helpful to open that and watch the machine, since the
GUI often has more helpful error messages than Vagrant can retrieve.
For example, if you're using VirtualBox, run `vagrant up` while the
VirtualBox GUI is open.
The primary issue for this error is that the provider you're using
is not properly configured. This is very rarely a Vagrant issue.
# もう一回叩くとうまく起動した
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'bento/centos-7.2' is up to date...
Vagrant の起動でコケるのは色々と理由があって、根本の問題としては BIOS の設定で「仮想環境支援機能」を有効にしていない場合がある。これは有効にしておかないといけないものなので、BIOS 設定を変更しておく。
- 参考 : 仮想化支援機構(VT-x/AMD-V)を有効化できません | Futurismo
- 参考 : Windows上でVirtualBox+Vagrant+CentOSによる仮想環境構築 - Qiita
その他、バージョンごとにバグがあったりなんだりするので、VirtualBox・Vagrant を再インストールしたり再起動したりして試行錯誤が必要かもしれない。
自分の場合は、「初回の vagrant up
はエラーが出る」だけで、以降の vagrant up
ではスムーズに起動している。
Vagrant Box が正しく起動しているか確認するには、vagrant status
を使う。
$ vagrant status
Current machine states:
default running (virtualbox)
The VM is running. To stop this VM, you can run `vagrant halt` to
shut it down forcefully, or you can run `vagrant suspend` to simply
suspend the virtual machine. In either case, to restart it again,
simply run `vagrant up`.
running
になっているので正常に起動している。
CentOS 環境にログインしてみる
vagrant up
が上手く行ったら、既に仮想環境は起動しているので、CentOS 環境にログイン (SSH 接続) してみる。
ターミナルで vagrant ssh
と打つと、サクッと CentOS 環境にログインできる。デフォルトのユーザは vagrant
で、パスワードも vagrant
。sudo
とかもそのままできる。
$ vagrant ssh
[vagrant@localhost ~]$
# コンソールが上のようになったら OK
これで Linux 環境が出来上がった。
Linux 環境構築
初めにパッケージを更新しておく
# アップデートできるパッケージの確認
$ sudo yum check-update
# システム全体のアップグレード
$ sudo yum upgrade
日本語環境を整える
# 日本語関連パッケージを入れる
$ sudo yum -y install ibus-kkc vlgothic-*
# システムの文字セットを変更する
$ localectl set-locale LANG=ja_JP.UTF-8
# パスワードを聞かれたら vagrant と入れる
$ source /etc/locale.conf
これで、システムが使う言語が日本語になる。
# 反映されていることを確認
[vagrant@localhost vagrant]$ echo $LANG
ja_JP.UTF-8
# 日本語で表示される
[vagrant@localhost vagrant]$ sl
-bash: sl: コマンドが見つかりません
タイムゾーンを直す
このままだとタイムゾーンがズレているので直す。
# タイムゾーンがズレている
[vagrant@localhost vagrant]$ date
2017年 4月 16日 日曜日 04:34:18 UTC
# 以下で直る
$ sudo cp /usr/share/zoneinfo/Japan /etc/localtime
# 直った
[vagrant@localhost vagrant]$ date
2017年 4月 16日 日曜日 13:35:17 JST
Man Pages を日本語化する
# man の日本語化。全部が日本語になるわけじゃなさそう
$ sudo yum install -y man-pages-ja
Vim を入れる
# 最初は Vim がないので入れる。Vimtutor もこれで入る
$ sudo yum install -y vim-enhanced
その他コマンド
vagrant ssh
で入った CentOS 環境から抜けるにはexit
で OK。vagrant up
で立ち上げた Vagrant Box はvagrant halt
で終了する。
以上
これでひとまずは遊んで使える CentOS 環境が作れただろう。