3

VagrantでオリジナルBoxを作成する

結構いろいろな所でBoxの配布をしてますが、 稼働中のサーバのイメージをBox化したり自分で自作してみたりと 知識として知っておいたほうがいいかなと思い自作してみました。

今回はCentOS6.6を使って進めていきます。

1. OSイメージのダウンロード

公式サイトからiso形式のデータをダウンロード

CentOSダウンロードページ

2. 仮想マシンの新規作成

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

下記の構成で作成する
仮想マシン名: centos66
Type: Linux
バージョン: Red Hat (64bit)
メモリ: 512MB
ファイルタイプ: VDIで可変サイズを選択し、容量は8GB
ネットワークアダプタ: アダプター1のみ。NATが割り当てられていること

OSインストール

仮想マシンの設定が済んだら、ストレージのCD/DVDの項目にダウンロードしたISOを指定し、仮想マシンを起動してOSをインストール

インストール時にいろいろ聞かれますが、自分の環境に合わせて設定してください。 恐らくハードディスクでWarningが表示されるので、ここではRe-initializeを選択 rootのパスワードは「vagrant」にします。 Partitioning TypeでUse entire driveを選択してパーティションを作成してください。 インストール完了後、再起動を促されるので再起動すると完了します。

3. OS設定

eth0の有効化

OS起動時にネットワークカードが認識されるように設定を変更する。

vi /etc/sysconfig/network-scripts/ifcfg-eth0

ONBOOT=no
↓
ONBOOT=yes

OS再起動

一度OSを再起動して認識されるか確認

shutdown -r now

以下のコマンドを実行して確認

ifconfig

eth0の項目があればおk

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

Macのターミナルからsshでログインできるようにする。

VirtualBoxの仮想マシンの設定変更

  1. 仮想マシンの設定を開く
  2. ネットワークのアダプター1(NAT)を選択し、「高度」の内容を展開
  3. 「ポートフォワーディング」を押してメニューを表示
  4. 新規追加でホストポートに2222、ゲストポートに22を入力
  5. 設定画面のOKボタンを押す

Macのターミナルを開いてsshでログインする。

ssh localhost -p 2222 -l root

yumリポジトリの登録

Repoforgeを登録

curl -L -O http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
yum install rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm

EPELを登録

yum install epel-release

Remiを登録

rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

Vagrantユーザの作成と設定

ユーザ作成

useradd -m vagrant
passwd vagrant

パスワードは「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 upコマンド内でsudoコマンドを使用するので、 TTYなしでsudoコマンドを実行できるようにして、vagrantユーザがsudoコマンドをパスワードなしで使用できるようにする。

visudo

Defaults    requiretty
↓
#Defaults    requiretty

#新規追加
vagrant ALL=(ALL)       NOPASSWD: ALL

vagrantユーザになって確認

su - vagrant
sudo ls -l /root

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

yum update

VirtualBox Guest Additionsに必要なパッケージをインストール

yum install kernel kernel-devel perl gcc

selinuxの無効化

vi /etc/sysconfig/selinux

SELINUX=enforcing
↓
SELINUX=disabled

iptablesの無効化

service iptables stop
service ip6tables stop

さらにOS起動時に自動起動しないようにする

chkconfig iptables off
chkconfig ip6tables off

VirtualBox Guest Additionsのインストール

まず、仮想マシン(VirtualBox VM)のメニューのデバイスからInsert Guest Additions CD imageを選択 それをマウントしてCD内のコマンドを実行する。

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

udevのルールの削除

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

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

Box作成のための最適化

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

yum clean all

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

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

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

OSシャットダウン

shutdown -h now

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

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

VirtualBoxの仮想マシンの設定変更

  1. 仮想マシンの設定を開く
  2. ネットワークのアダプター1(NAT)を選択し、「高度」の内容を展開
  3. 「ポートフォワーディング」を押してメニューを表示
  4. 先ほど作成した項目を選択して削除
  5. 設定画面のOKボタンを押す

4. Boxの作成

MacのターミナルからVagrantコマンドを使用してBoxを作成する。

vagrant package --base centos66

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

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

vagrant box add --name CentOS-6.6-x86_64-minimal-ja-20150510 package.box
vagrant box list

Vagrantfileを作成して起動

vagrant init CentOS66
vagrant up
vagrant ssh

1

Homebrewの基本操作

前回インストール方法を紹介しましたが、今回は基本操作について紹介していきます。
操作方法というよりはチートシート的な感じかな。
Homebrewのインストール方法はこちらから

リポジトリを最新に更新

$ brew update

インストールしたパッケージの検索

$ brew search パッケージ名

インストールオプションの表示

$ brew options パッケージ名

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

$ brew install パッケージ名

パッケージの削除

$ brew remove パッケージ名

パッケージの無効化

$ brew unlink パッケージ名

パッケージの有効化

$ brew link パッケージ名

インストールされたパッケージの一覧を表示

$ brew list

1

node.jsでHello World

1.Hello Worldを表示させる

下記のソースを任意のディレクトリで保存します。
ここではexample.jsという名前で作成しました。

var sys = require('sys');
var http = require('http');
var server = http.createServer(
    function (request, response) {
        response.writeHead(200, {'Content-Type': 'text/plain'});
        response.write('Hello World!!');
        response.end();
    }
).listen(3000);
sys.log('Server running at http://localhost:3000/');

2.example.jsを実行

$ node example.js
7 Aug 09:50:00 - Server running at http://localhost:3000/

3.ブラウザからアクセス

ブラウザから以下へアクセス

http://localhost:3000

Hello Worldと表示されれば成功です。