作業ノート

様々なまとめ、雑感など

CentOS 6.5 x86_64 minimalのVagrant boxを作ってみた

(2015/05/11追記)
下記の方法を元にCentOS 6.6のVagrant boxの作成方法を、別エントリーにまとめた。

CentOS 6.6 x86_64 minimalのVagrant boxを作る - 作業ノート


少し前に、 実践 Vagrantを読み終えた。書籍の感想は別のブログに書いたが、ここではVagrant boxの作成方法についてまとめる。

今回作成した理由は、自分用の開発環境のベースとなるboxを事前に用意しておきたかったから。CentOS 6.5を選んだのは、会社で管理しているLinux OSのほとんどがRedHat系だから。

boxの作成環境はOS X Mavericksで、VirtualBox、Vagrantはインストール済。

ISOのダウンロード

CentOS ProjectからCentOS-6.5-x86_64-minimal.isoをダウンロード。

仮想マシンの新規作成

VirtualBox上で仮想マシンを作成する。

  • 仮想マシン名はvg_centos65。この名前はvagrantコマンドでboxを作成する時に指定する名前になる。
  • TypeはLinux。バージョンはRed Hat (64bit)。
  • メモリは512MB。ファイルタイプはVDI、可変サイズにして、容量を8GBにした。
  • ネットワークアダプタは、アダプター1のみでNATが割り当てられていることを確認。誤った設定がされていると、vagrant sshコマンドでログインできなくなるため、念のために確認した。

OSインストール

作成した仮想マシンの設定で、ストレージのCD/DVDの項目の対象ドライブにダウンロードしたISOを指定し、仮想マシンを起動してOSをインストール。

  • 日本語環境を構築
  • 英語キーボードを使っているのでキーボードはusを選択
  • ハードディスクでドライブエラーのWarningが表示されるので、Re-initializeを選択
  • Time ZoneはAsia/Tokyo
  • ルートパスワードを設定
  • Partitioning TypeでUse entire driveを選択してパーティションを作成
  • Package Installationが完了するのを待つ

インストール完了後、再起動してルートユーザでログイン。

eth0の有効化

このままだと、OS起動時にネットワークカードが認識されないので、設定を変更する。

# vi /etc/sysconfig/network-scripts/ifcfg-eth0
…
# これをyesにする。
ONBOOT=yes

設定後、OSを一度再起動して、OS起動時に認識されるか確認する。

# shutdown -r now

再起動後

# ifconfig

eth0の項目があればOK。

ホスト側(Mac)からsshでログインする

VirtualBoxのコンソールでは以後の作業がしにくいので、一時的にMacのターミナルからsshでログインして作業ができるようにする。

以下は、VirtualBoxの仮想マシンの設定変更。

  • 仮想マシンの設定を開く。
  • ネットワークのアダプター1(NAT)を選択し、「高度」の内容を展開。
  • 下部に表示される「ポートフォワーディング」ボタンを押してメニューを表示。
  • 項目を新規追加。ホストポートに2222、ゲストポートに22を入力。他はそのままにしてOKボタンを押す。
  • 設定画面のOKボタンを押す。

設定が完了したら、Macのターミナルを開いてsshでログインする。

$ ssh localhost -p 2222 -l root

これでログインできればOK。

yum repositoryの登録

epel, Repoforge, remiを登録。該当rpmパッケージのインストールのみ。

# curl -L -O http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
# curl -L -O http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
# curl -L -O http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

# rpm -ivh epel-release-6-8.noarch.rpm rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm remi-release-6.rpm

Vagrantユーザの作成と設定

ユーザ作成

# useradd -m vagrant
# passwd vagrant

sshの設定

vagrant sshで必要な公開鍵を登録する。

# mkdir /home/vagrant/.ssh
# chmod 700 /home/vagrant/.ssh
# 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.vagrant /home/vagrant/.ssh

sudoの設定

vagrantユーザがパスワードなしでsudoを実行できるようにし、TTYなしで実行できるようにrequirettyを無効にする。

# visudo
…
# TTYなしで実行できるように
#Defaults    requiretty
…
# sudoコマンドをパスワードなしで実行できるように
vagrant ALL=(ALL)       NOPASSWD: ALL

vagrantユーザになって、確認する。

# su - vagrant
$ sudo ls /root

rpmパッケージのインストール

インストール済パッケージを更新。

# yum update

実際に試したときは、kernelのアップデートも含まれていたので、ここでOSを再起動した。

box作成のために必要なのは、VirtualBox Guest Additionsのインストールに必要なパッケージ。ただ、開発環境として利用することを想定しているので、併せて必要だと思うパッケージもインストール。

# yum groupinstall "Development Tools"
# yum install man man-pages-ja

gitは既存のバージョンが古いので、それらをアンインストールしてRepoforgeのgitをインストール。

# yum remove git-1.7.1-3.el6_4.1.x86_64 perl-Git-1.7.1-3.el6_4.1.noarch
# yum --enablerepo=rpmforge-extras install git

selinuxの無効化

開発環境なのでselinuxは無効化。

# vi /etc/sysconfig/selinux

# disabledに変更
SELINUX=disabled

iptablesの無効化

こちらも同様の理由で無効化。

# service iptables stop
# service ip6tables stop

# chkconfig iptables off
# chkconfig ip6tables off

VirtualBox Guest Additionsのインストール

まず、仮想マシン(VirtualBox VM)のメニューのDevicesからInsert Guest Additions CD image …を選択する。

そして、それをマウントしてCD内のコマンドを実行する。

# mkdir /media/cdrom
# mount -r /dev/cdrom /media/cdrom
# sh /media/cdrom/VBoxLinuxAdditions.run
# umount /media/cdrom

最後に、仮想マシン(VirtualBox VM)のメニューのDevicesからCD/DVD Devicesを選択し、Remove disk from virtual driveを選択してGuest Additions CD imageを取り出す。

udevのルールの削除

boxのOS起動時にネットワークデバイスのエラーが起きるのを避けるため、udevのルールを削除する。

# rm /etc/udev/rules.d/70-persistent-net.rules
# rm -rf /dev/.udev/
# rm /lib/udev/rules.d/75-persistent-net-generator.rules

box作成のための最適化

最終的なboxのサイズをできる限り小さくするために簡単な最適化を行う。

yum clean

# yum clean all

フラグメンテーションの解消

box作成時の圧縮効率を上げるため、ゼロ埋めしたファイルを作成し、削除する。

# dd if=/dev/zero of=/EMPTY bs=1M
# rm -f /EMPTY

OS シャットダウン

# shutdown -h now

NATのポートフォワーディング設定の削除

作業をしやすくするために行ったポートフォワーディングの設定を削除する。

  • 仮想マシンの設定を開く
  • ネットワークのアダプター1(NAT)を選択し、「高度」の内容を展開。
  • 下部に表示される「ポートフォワーディング」ボタンを押してメニューを表示。
  • 作成した項目を選択してDelキーを押して削除。その後下部のOKボタンを押す。
  • 設定画面のOKボタンを押す。

以上でboxの作成準備が完了。

boxの作成

OS Xのターミナルから、Vagrantコマンドでboxを作成する。

$ vagrant package --base vg_centos65

baseオプションは仮想マシン名を指定する。

これで作成されたboxのサイズは470MBほど。

作成したboxの確認

作成したboxをVagrantに登録する。

$ vagrant box add --name CentOS-6.5-x86_64-minimal-ja-20140511 package.box
$ vagrant box list
CentOS-6.5-x86_64-minimal-ja-20140511 (virtualbox, 0)

Vagrantfileを作成して起動。sshでログインできるか確認する。

$ vagrant init CentOS-6.5-x86_64-minimal-ja-20140511
$ vagrant up
$ vagrant ssh

以上でboxの作成は完了。このboxをベースにシステムの開発環境を構築して開発を行う。

参考