Vagrant で利用する box ですが、基本的に box は以下のサイトで提供されています。
提供されている box は手軽に利用できますが、今回は自分用のまっさらな box 環境が欲しかったので、その作成備忘録です。
作成する box の OS は CentOS 6.7 になります。
環境情報
今回の作業環境は以下の通りです。
- Windows 7 (64bit / Pro)
- VirtualBox 5.0.14
- Vagrant 1.8.1
ISO ファイル準備
Download CentOS Linux ISO images から CentOS-6.7-x86_64-minimal.iso をダウンロードします。1
仮想マシンの作成
仮想マシンの新規作成
VirtualBox上に新規に仮想マシンを作成します。
名前とオペレーティングシステム
- 名前:適当に(今回は CentOS-6.7-x86_64 にしました)。
- タイプ:Linux
- バージョン:Red Hat (64-bit)
メモリーサイズ
- 適当に(今回は 512MB にしました)。
ハードディスク
- 「仮想ハードディスクを作成する」にします。
「作成」ボタンをクリックすると、「仮想ハードディスクの作成」ダイアログが表示されます。
ファイルの場所
- 適当に。
ファイルサイズ
- 適当に(今回は 8GB にしました)。
ハードディスクのファイルタイプ
- VDI (VirtualBox Disk Image)
物理ハードディスクにあるストレージ
- 可変サイズ
仮想マシンの設定変更
作成した仮想マシンに追加で以下を設定します。
ストレージ
- 「 コントローラー:IDE」⇒「空」を選択し、「属性」⇒「光学ドライブ」の右側のアイコンをクリックします。「仮想光学ディスクファイルを選択」をクリックし、ダウンロードした ISO ファイルを選択します。
オーディオ
- 「オーディオを有効化」のチェックを外します。
ネットワーク
- 「アダプター 1」の「割り当て」に「NAT」が設定されていることを確認します。
- 「高度」を展開し、「ポートフォワーディング」をクリックします。
右端のアイコンから以下のルールを追加します。
- ホストポート:2222
- ゲストポート:22
- 他はデフォルトで。
※一時的なSSH用接続ポートの設定です。
USB
- 「USB コントローラーを有効化」のチェックを外します。
OS インストール
仮想マシンが作成できたので、OS をインストールします。
対象の仮想マシンを選択し、起動します。
起動画面
- 「Install or upgrade an existing system」を選択します。
- 「Disc Found」ダイアログが表示されるので、「Skip」を選択します。
※起動時のメモリサイズが小さいと CUI のインストーラーが起動します(今回はCUIモードでのインストールです。)。
CentOS
- 「OK」を選択します。
Language Selection
- 「English」が選択されていることを確認します。
Keyboard Selection
- 上下ボタンで「jp106」を選択し、左右ボタンで「OK」を選択します。
[Warning] Error proccessing drive
- ハードディスクのエラーが表示されますが、初期化するため「Re-initialize」を選択します。
Time Zone Selection
- 「System clock uses UTC」にチェック(*)が入っていることを確認します。
- 「Asia/Tokyo」を選択します。
Root Password
- root のパスワードは「vagrant」を設定します。
- 「Weak Password」でパスワードが弱いことを指摘されますが、「Use Anyway」を選択し続行します。
Partitioning Type
- 「Use entire drive」を選択します。
- sda (インストール先ドライブ)が選択されていることを確認します。
- 「Writing storage configuration to disk」が表示されるので、「Write changes to disk」を選択して設定内容をハードディスクに書き込みます。
Package Installation
- インストールが開始されるので完了を待ちます。
- minimal 版の為、パッケージの選択はありません。
- パッケージインストール完了後、「Reboot」を選択し再起動します。
- 再起動後、root ユーザでログインします。
OS 設定変更
OS のインストールが完了したので、box 作成用に設定を行います。
ネットワークの有効化
OS 起動時にネットワークカードが有効化されないので、自動起動するように設定します。
※以降、コマンドのプロンプトは「$」ですが、作業ユーザは root となります。
# 設定ファイルを開きます。
$ vi /etc/sysconfig/network-scripts/ifcfg-eth0
# 以下の項目を変更します。
ONBOOT=yes
# Network デーモンを再起動します。
$ service network restart
# eth0 の項目があることを確認します。
$ ifconfig
ssh でのログイン
ここからは普段使用している ssh クライアント(Teraterm、PuTTY等)を使用して作業します。
「仮想マシンの設定変更」で設定したポートフォワーディングの設定に従い、ssh接続を行います。
- 接続先ホスト名(IPアドレス): localhost (127.0.0.1)
- 接続先ポート:2222
- 接続タイプ:SSH
ユーザの作成
vagrant 用のユーザを作成します。
# ユーザの作成 (wheel グループに参加します)
$ useradd -g wheel vagrant
# ユーザの作成の確認
$ id vagrant
uid=500(vagrant) gid=10(wheel) 所属グループ=10(wheel)
# パスワードの設定 (vagrant ユーザのパスワードを vagrant に設定します)
$ passwd vagrant
ssh の設定
vagrant ユーザのSSH鍵設定を行います。
# SSH ディレクトリの作成と設定
$ mkdir /home/vagrant/.ssh
$ chmod 700 /home/vagrant/.ssh
# vagrant で公開されている Insecure Keypair(安全でないキーペア) のダウンロード
# 今回は開発用のため、こちらのキーペアを利用します。
# -k:SSL証明書の警告を無視、-L:リダイレクト先に再接続、-o:ファイル名を指定して保存
$ cd /home/vagrant/.ssh
$ curl -k -L -o authorized_keys 'https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub'
# ダウンロードした公開鍵の権限設定
$ chmod 600 /home/vagrant/.ssh/authorized_keys
$ chown -R vagrant:wheel /home/vagrant/.ssh
※Insecure Keypairについて 2
sshd の設定も行います。
# 設定ファイルを編集します。
$ vi /etc/ssh/sshd_config
# 以下の項目を変更します。
# SSH接続速度向上のため。
UseDNS no
# sshdデーモン再起動
$ service sshd restart
SSHクライアントを別で起動し、接続確認をしておきましょう。
sudo の設定
sudo
コマンドの設定です。
※box 起動時(vagrant up
)に利用されます。
# 設定ファイルを編集します。
$ visudo
# tty 無しでの実行を許可します。以下の項目のようにコメントアウトします。
# Defaults requiretty
# wheel グループ参加のユーザが sudo コマンドをパスワード無しで実行できるように設定します。
# 以下の項目のようにアンコメントします。
%wheel ALL=(ALL) NOPASSWD: ALL
vagrant ユーザになってsudo
の実行を確認します。
# vagrant ユーザに変更します。
$ su - vagrant
# sudo コマンドを利用して /root ディレクトリを表示します。
$ sudo ls /root
selinux の無効化
開発環境のため、selinux は無効化します。
# 設定ファイルを編集します。
$ vi /etc/sysconfig/selinux
# 以下の項目を変更します。
SELINUX=disabled
# 再起動をして設定を反映します。
$ shutdown -r now
# 再起動後、以下のコマンドを実行して確認します。
$ getenforce
Disabled
iptables の無効化
開発環境のため、iptables(ファイアウォール)も無効化します。
# 各 iptables デーモンの停止・停止確認
$ service iptables stop
$ service iptables status
iptables: Firewall is not running.
$ service ip6tables stop
$ service ip6tables status
ip6tables: Firewall is not running.
# 自動起動を無効化・確認
$ chkconfig iptables off
$ chkconfig --list iptables
iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
$ chkconfig ip6tables off
$ chkconfig --list ip6tables
ip6tables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
yum リポジトリの登録
必要に応じて追加のレポジトリを登録します。
今回は epel、ius、remi を登録します。3
# epel レポジトリをインストールします。
$ yum install epel-release
# ius レポジトリをインストールします。
$ curl -s https://setup.ius.io/ | sh
# remi の GPG Key をインポートします。
$ rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
# remi レポジトリをインストールします。
$ yum install http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
インストール済みパッケージのアップデート
インストール済みのパッケージをアップデートします。
# yum でインストール済みパッケージのアップデートをします。
$ yum update
# kernel がアップデートされるので再起動します。
$ shutdown -r now
開発環境用パッケージインストール
開発環境用のパッケージをインストールします。
※こちらは任意です。
# 開発環境用のパッケージをグループで一括インストールします。
$ yum groupinstall "Development tools"
# マニュアル表示用に man コマンドをインストールします。
$ yum install man man-pages man-pages-overrides man-pages-ja
# ファイルダウンロード用に wget をインストールします。
$ yum install wget
VirtualBox Guest Additions のインストール
VirtualBox のゲスト OS 用追加パッケージをインストールします。
仮想マシンのメニューから、「デバイス」⇒「Guest Additions CD イメージの挿入」を選択します。
# CD イメージをマウントするディレクトリを作成します。
$ mkdir /media/cdrom
# CD イメージをマウントします(-r:読み取り専用)。
$ mount -r /dev/cdrom /media/cdrom
# マウントしたイメージファイルを確認します。
$ ls -l /media/cdrom
# VirtualBox Guest Additions をインストールします。
# OpenGL、X.Org はインストールしていない為、失敗またはスキップされます。
$ sh /media/cdrom/VBoxLinuxAdditions.run
# CD イメージをアンマウントします。
$ umount /media/cdrom
# アンマウントを確認します(ファイルが表示されないことを確認します)。
$ ls -l /media/cdrom
インストール完了後、仮想マシンのメニューから、「デバイス」⇒「光学ドライブ」⇒「仮想ドライブからディスクを除去」を選択します。
git のインストール
こちらは任意です。
yum でインストールされる git はバージョンが古いので、ソースから最新版をインストールします。
# 古いバージョンの git をアンインストールします。
$ yum remove git
# git に必要なライブラリのインストールをします。
$ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker
# git のソースファイルを取得します。
$ cd /usr/local/src
$ wget https://www.kernel.org/pub/software/scm/git/git-2.7.0.tar.gz
# ダウンロードしたパッケージを解凍します。
$ tar zxvf git-2.7.0.tar.gz
$ cd git-2.7.0
# git のインストールをします。
# echo で実行結果を確認しています(0:正常終了)。
$ ./configure --prefix=/usr/local
$ echo $?
$ make
$ echo $?
$ make install
$ echo $?
# インストールの確認をします(バージョン情報を表示します)。
$ git --version
git version 2.7.0
udev ルールの削除
box 起動時のネットワーク設定の為、udev ルールのファイルを /dev/null にリンクします。
$ ln -fs /dev/null /etc/udev/rules.d/70-persistent-net.rules
ネットワーク個別設定の削除
個別で指定されている MAC アドレスと UUID を削除します。
# ネットワーク設定ファイルを編集します。
/etc/sysconfig/network-scripts/ifcfg-eth0
# 以下の行を削除します。
HWADDR=****
UUID=****
box 作成の最適化
box のサイズを小さくする為の作業となります。
まずは、yum で利用したファイルのキャッシュを削除します。
$ yum clean all
次に、フラグメンテーションを解消します。
box 作成時の圧縮率を上げるため、ゼロ埋めしたファイルを作成し、削除します。
$ dd if=/dev/zero of=/EMPTY bs=1M
$ rm -f /EMPTY
ここまでで OS の設定は完了です。
シャットダウンします。
$ shutdown -h now
ssh ネットワーク設定変更
作業用のポートフォワーディングの設定を削除します。
- 仮想マシンの設定から、「ネットワーク」を選択します。
- 「高度」を展開し、「ポートフォワーディング」をクリックします。
- 作成したルールを選択し、右側のアイコンの削除ボタンをクリックします。
- 「OK」ボタンをクリックし、設定を反映させてください。
box 作成
box 作成用のゲスト OS の設定ができたので、box を作成します。
box の作成
コマンドプロンプトを起動します。
# box 作成用のフォルダ(任意)に移動します。
> cd xxxx(box 作成用のフォルダ)
# box を作成します。
# --base:作成対象の仮想マシン名、--output:出力 box ファイル名
> vagrant package --base CentOS-6.7-x86_64 --output CentOS-6.7-x86_64.box
==> CentOS-6.7-x86_64: Exporting VM...
==> CentOS-6.7-x86_64: Compressing package to: C:/appli/vagrant/centos/CentOS-6.7-x86_64.box
# 作成した box ファイルを確認します。
> dir
...
YYYY/MM/DD hh:mm 689,442,753 CentOS-6.7-x86_64.box
...
約700MBのファイルとなりました。
作成した box の動作確認
作成した box を早速登録して、起動してみましょう。
# 作成した box を vagrant に登録します。
# --name:vagrant への登録名、xxxx.box:作成した box ファイル名(パス)
> vagrant box add --name CentOS-6.7-x86_64 CentOS-6.7-x86_64.box
# 登録した box を確認します。
> vagrant box list
CentOS-6.7-x86_64 (virtualbox, 0)
# Vagrantfile を作成します。
> vagrant init CentOS-6.7-x86_64
# box を起動します。
> vagrant up
# 起動した box に ssh で接続します。
> vagrant ssh
お疲れ様でした、以上となります。
オリジナルの ISO を元にして box を作成する際に参考にして頂ければ幸いです。
■参考URL
-
URLから「Base Distribution」にある表の対象バージョン(6.7 ⇒ x86_64)をクリックします。ミラーサイトの一覧が表示されるので、適当なサイトをクリックします。ISO イメージ一覧のページが表示されるので、対象のファイルをダウンロードします。 ↩
-
「vagrant ssh」コマンドのデフォルトで利用されるキーペアの公開鍵です。box を外部公開用に起動する場合は各ユーザのキーペアを変更してください。参考URL:https://github.com/mitchellh/vagrant/tree/master/keys/ ↩