CentOS7 Minimal の ISO イメージファイルから Vagrant Box をスクラッチで作成する手順の記録ですの!最後には vagrant box add、vagrant up、vagrant ssh、vagrant destroy、と確認しております。
環境は Mac で、Vagrant のプロバイダーは VirtualBox ですわ♪
なお、次の書籍の手順を基盤としております。
- P104 6.5 スクラッチからの新しいボックスの生成
O’Reilly Japan – 実践 Vagrant
1. VirtualBox の仮想マシンの作成
- Download CentOS から、CentOS-7-x86_64-Minimal-1511.iso をダウンロード
- 仮想マシンの名前: CentOS-7-64-Minimal
- 動的なサイズのドライブを使い、ディスクの領域には余裕を持たせて、40 から 100GB 程度で始めるのが よいでしょう。
→ デフォルトのままにした。可変サイズのストレージ、仮想的なサイズは 8 GB - デフォルトのメモリ割り当てを多め にしすぎないようにしましょう。
→ デフォルトのままにした。メモリは 768 MB - オーディオや USB、あるいはその他の不要な周辺機器のコントローラを 無効にしておきます。
→ 仮想マシンの設定(なお、オーディオ、USB の設定は、仮想マシン作成後に変更可能だった。)- システム > マザーボード > 起動順序: [フロッピー] のチェックを外す
- オーディオ > [オーディオを有効化] のチェックを外す
- USB > [USB コントローラーを有効化] のチェックを外す
2. 仮想マシンの基本的な設定
を参考にネットワーク設定を行い、進めました♪
# NAT ネットワーク設定 nmtui
起動後、次のように設定しました。
- [Edit a connection]
- enp0s3 (NAT に対応)
- [IPv4 CONFIGURATION]
- [IPv6 CONFIGURATION]
- [X] Automatically connect
- [X] Available to all users
- [IPv4 CONFIGURATION]
その後、変更内容を仮想マシンへと反映しました。
# ネットワーク設定反映 systemctl restart NetworkManager
基本的な設定の最後として、パッケージのアップデートをいたしました。
# アップデート yum update -y
3. 仮想マシンのオペレーティングシステムの設定
3-1. ポイント
- Vagrant という SSH のデフォルトのユーザーを作成
- SSH サーバーがインストールされて、システムの起動時に適切に立ち上がる
- Vagrant に含まれている insecure private key を使って SSH のユーザーが認証されるように設定
- SSH をユーザーは、パスワードなしで sudo を実行できる権限を持っていなければならない。sudoの設定をする際には、requirettyも必ず無効にする。
- SSH を微調整して UseDNS を no に
3-2.Vagrant という SSH のデフォルトのユーザーを作成
# Vagrant ユーザー作成 # パスワードも vagrant とすること useradd vagrant passwd vagrant
3-3.SSH サーバーがインストールされて、システムの起動時に適切に立ち上がる
確認するコマンドを見つけるのに、上記ページが参考になりました。
# SSH のインストール確認 systemctl status sshd.service # SSH の OS 起動時設定確認 systemctl list-unit-files -t service | grep sshd.service
3-4. Vagrant に含まれている insecure private key を使って SSH のユーザーが認証されるように設定
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 chown -R vagrant ~/.ssh
3-5. SSH をユーザーは、パスワードなしで sudo を実行できる権限を持っていなければならない。sudoの設定をする際には、requirettyも必ず無効にする。
# sudo 設定 visudo
# Defaults requiretty # この行をコメントアウト root ALL=(ALL) ALL vagrant ALL=(ALL) NOPASSWD:ALL # この行を追記
3-6. SSH を微調整して UseDNS を no に
UseDNS no # UseDNS yes の行を修正して明示的に no を指定
4. VirtualBox Guest Additions のインストール
4-1. ポイント
- VirtualBox に付属している VirtualBox Guest Additions を仮想マシンにインストールする。
- インストールするにはコンパイラを仮想マシンにインストールする必要がある。
- インストール時にエラーが発生するので、表示されるエラーメッセージにしたがって対処する。
- エラー対処のポイント、概要
yum updateを作業前に行っておき、uname -rのバージョンとyum install kernel-develでインストールしたカーネルのバージョンと合わせておく。yum installやyum updateしたら仮想マシンを先起動する。- エラーで、無い、と言われたファイルをコピー。
cp /usr/include/linux/version.h /lib/modules/3.10.0-327.13.1.el7.x86_64/build/include/linux/version.h
なお、この時の試行錯誤の詳細は、次のページでまとめております。
4-2. 実際の手順
まずは準備として、コンパイラを導入します。
# 準備。必要なパッケージを導入 yum update yum install bzip2 gcc kernel-devel reboot
再起動時にカーネルを選択するよう求められました。最新版(インストールした)を選択いたします。
- VirtualBox VM のメニューバーから、Devices > insert Guest Additions CD image…
で仮想マシンへ CD イメージを入れます。
そして、仮想マシンで root ユーザーで次の操作を行います。
# 実行。VirtualBox Guest Additions のインストール mount /dev/cdrom /mnt sh /mnt/VBoxLinuxAdditions.run
進捗を確認しますと、エラーとなっております><。
こちらのページの内容で解決できました。無いと言われたファイルをコピーし、再度コマンド実行で最後まで進むことができました♪
cp /usr/include/linux/version.h /lib/modules/3.10.0-327.13.1.el7.x86_64/build/include/linux/version.h
最後に、Guest Additions CD image をアンマウントし、仮想マシンから取り出します。
umount /mnt/
- 仮想マシンの設定 > ストレージ > 光学ドライブ > 仮想ドライブからディスクを除去
5. 仮想マシンの udev ルールの削除
永続的なネットワークデバイスの udev に関するルールがあるために Linux ベースのボックスがブートに失敗するそうです。
この問題を回避するに、すべての persistent-net ルールを削除いたします。
ところが事前に確認したところ、違う気がいたしましたので止めてしまいました。
# ll /etc/udev/rules.d/ total 4 -rw-r--r--. 1 root root 134 May 4 11:-6 60-vboxadd.rules
6. 最終的なボックスのサイズの最小化
下位のディスクにおけるフラグメンテーションの問題が解決され、後で行う圧縮の効率がよくなるそうなので、仮想ハードディスクをゼロで埋めて、ゼロで埋まったファイルを削除します。
# 不要となるログや一時ファイルを削除 yum clean all rm -rf /tmp/* rm -rf /var/log/* rm -rf /var/tmp/* rm -rf /usr/local/src/* # 仮想ハードディスクをゼロ゙埋めし、ゼロで埋まったファイルを削除 dd if=/dev/zero of=/EMPTY bs=1M rm -f /EMPTY # 最初化終了したのでシャットダウン shutdown -h now
7. パッケージ化。VirtualBox の仮想マシンを Vagrant のボックスファイルに変換
# Vagrant ボックスファイル生成(引数は、VirtualBox の GUI での仮想マシンの名前) vagrant package --base CentOS-7-64-Minimal
実際の様子
$ vagrant package --base CentOS-7-64-Minimal ==> CentOS-7-64-Minimal: Exporting VM... ==> CentOS-7-64-Minimal: Compressing package to: /Users/oki2a24/vagrant_create_box/package.box $ ls package.box
8. Vagrant Box の動作確認
# ボックスを追加 vagrant box add --name CentOS-7-64-Minimal package.box # ボックスの確認 vagrant box list # 別のディレクトリで Box を起動してみて確認 mkdir test cd test/ vagrant init CentOS-7-64-Minimal vagrant up vagrant ssh vagrant destroy
実際の様子
$ vagrant box add --name CentOS-7-64-Minimal package.box
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'CentOS-7-64-Minimal' (v0) for provider:
box: Unpacking necessary files from: file:///Users/oki2a24/vagrant_create_box/package.box
==> box: Successfully added box 'CentOS-7-64-Minimal' (v0) for 'virtualbox'!
$ vagrant box list
CentOS-7-64-Minimal (virtualbox, 0)
$
$ mkdir test
$ cd test/
$ vagrant init CentOS-7-64-Minimal
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
$ vim Vagrantfile
$
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'CentOS-7-64-Minimal'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: test_default_1462346779575_46392
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> 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...
default: Warning: Remote connection disconnect. Retrying...
default:
default: Vagrant insecure key detected. Vagrant will automatically replace
default: this with a newly generated keypair for better security.
default:
default: Inserting generated public key within guest...
default: Removing insecure key from the guest if it's present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
default: /vagrant => /Users/oki2a24/vagrant_create_box/test
$ vagrant ssh
[vagrant@localhost ~]$ ログアウト
Connection to 127.0.0.1 closed.
$ vagrant destroy
default: Are you sure you want to destroy the 'default' VM? [y/N] y
==> default: Forcing shutdown of VM...
==> default: Destroying VM and associated drives...
$
おわりに
これで、開発環境のベースとなる最小限の OS の Vagrant Box を作れるようになりました♪
今度は、これをベースに開発したい種類に合わせてさらに Vagrant Box を作れるようにいたします♪
最後に、参考文献やページを再度まとめておきます!
- P104 6.5 スクラッチからの新しいボックスの生成
O’Reilly Japan – 実践 Vagrant - Creating a Base Box – Vagrant by HashiCorp
- vagrant + CentOS7で開発環境を作る – Qiita
- CentOS7.0をvagrant用にbox化するメモ – hao’s work log
- CentOS7.1にてVagrant Base Boxを作成する – とあるエンジニアの技術メモ
以上です。
