読者です 読者をやめる 読者になる 読者になる

脳みそスワップアウト

揮発性なもので。おもにPHPのこととか。

Vagrant+VirtualBox で CentOS-6.5 のBoxを作るメモ

Vagrant+VirtualBoxCentOS-6.5 のBoxを作るメモ

CentOS-6.5のboxを作ることになったが、6.4のときのメモを参考にした。 6.6の時にもまた参考にするだろうから残しておく。 2014/05/30。

ホスト

ゲスト

CentOSインストール

vm作成

適当でいいが、作成するホストOSのリソースに余裕がないので控えめにした。

  • Linux / RedHat(64bit)
  • 512MB RAM, CPU1個, 8MB VRAM, 40GB HDD(vmdk,可変)
  • Audio無効
  • eth0=NAT, eth1=host-only

CentOSインストール

CentOS-6.4-x86_64-minimal.iso を仮想CDドライブにセット。 すぐにF12を押してCDROMから起動。

インストーラでTAB押して、kick startの指定。101キーなので注意。

vmlinuz initrd=initrd.img ksdevice=eth0 ks=http://X.X.X.X/ks.cfg

インストールが終わるまで放っておく。 CDチェックをするかどうか問われるようなら、ksの指定に失敗している。

インストールが終わったらOSのISOを外して再起動する。

確認

コンソールからrootでログイン。パスワードはvagrant。 eth1を上げて確認できたら、以降はターミナルから操作する。

VirtualBox側でDHCPを有効にしておくこと。

ifup eth1
ifconfig eth1

sshで接続確認。vagrant/vagrant。IPはeth1。

ssh vagrant@192.168.33.101

non-passでsudoが可能なことを確認

sudo id

yum-fastestmirrorの設定

日本の早いサーバならどこでもいい

sudo sh -c "echo 'prefer=ftp.jaist.ac.jp' >> /etc/yum/pluginconf.d/fastestmirror.conf"

ゲストOSに VirtualBox Guest Additions を入れる

host-guest間の、時刻・ディレクトリ・クリップボードの共有をするためのツール

インストールに必要なパッケージを追加する 作業はrootでやってしまう。

[vagrant@localhost ~]$ sudo su -
[root@localhost ~]# yum install -y kernel-devel make gcc perl

VirtualBoxGUI上で、デバイス>GuestAdditionsのCDイメージを挿入。 仮想cdromが設定されるのでマウントしてインストール。

[root@localhost cdrom]# mkdir -p /mnt/cdrom
[root@localhost cdrom]# mount -r /dev/cdrom /mnt/cdrom && cd /mnt/cdrom

[root@localhost cdrom]# ./VBoxLinuxAdditions.run
Verifying archive integrity... All good.
Uncompressing VirtualBox 4.3.12 Guest Additions for Linux............
VirtualBox Guest Additions installer
Copying additional installer modules ...
Installing additional modules ...
Removing existing VirtualBox non-DKMS kernel modules       [  OK  ]
Building the VirtualBox Guest Additions kernel modules
Building the main Guest Additions module                   [  OK  ]
Building the shared folder support module                  [  OK  ]
Building the OpenGL support module                         [  OK  ]
Doing non-kernel setup of the Guest Additions              [  OK  ]
Starting the VirtualBox Guest Additions                    [  OK  ]
Installing the Window System drivers
Could not find the X.Org or XFree86 Window System, skipping.

確認。古いVirtualBoxだと、Xが入っていなくて最後の項目が FAILED になる場合があるが無視してOK。

[root@localhost cdrom]# VBoxControl --version
4.3.12r93733

[root@localhost cdrom]# VBoxService -V
4.3.12r93733

このインストールのために導入したパッケージを削除する。minimalな状態は極力ディスクを空けておきたいため。

[root@localhost ~]# yum -y remove kernel-devel gcc glibc-devel glibc-headers kernel-headers ppl cloog-ppl cpp mpfr libgomp perl-*

[root@localhost ~]# exit

RSA鍵を作っておく

ホストの ~/.vagrant.d/insecure_private_key から公開鍵を作り、ペアで置いておく。

$hostOS$ ssh vagrant@192.168.33.101 "mkdir -m 700 ~/.ssh"
$hostOS$ scp ~/.vagrant.d/insecure_private_key vagrant@192.168.33.101:/home/vagrant/.ssh/id_rsa

gusetOS$ cd ~vagrant/.ssh
guestOS$ chmod 400 id_rsa
guestOS$ ssh-keygen -y -f id_rsa > id_rsa.pub
guestOS$ cat id_rsa.pub > authorized_keys
guestOS$ chmod 644 id_rsa.pub authorized_keys

おまけ

起動画面をtext、待ち時間を2秒にする

cd /boot/grub
sudo cp grub.conf grub.conf.org
sudo sed -i -e "s/^timeout=5$/timeout=2/" grub.conf
sudo sed -i -e "s/rhgb quiet$//" grub.conf

おそうじ

fastestmirror

sudo yum clean all

ネットワーク設定

sudo rm /etc/sysconfig/network-scripts/ifcfg-eth1
sudo rm /etc/udev/rules.d/70-persistent-net.rules

vmdkのおそうじ

ゲストOSでは空きをゼロ埋め。(時間かかる)

[root@localhost ~]# dd if=/dev/zero bs=100MB count=500 of=/0bits || rm -f /0bits

[root@localhost ~]# dd if=/dev/zero bs=100MB count=5 of=/boot/0bits || rm -f /boot/0bits

ゲストOSシャットダウン後、ホストOSからvmdkを deflag & shrink

$ vmware-vdiskmanager.exe -d cent65-64.vmdk
  Defragment: 100% done.
Defragmentation completed successfully.

$ vmware-vdiskmanager.exe -k cent65-64.vmdk
  Shrink: 100% done.
Shrink completed successfully.

1.78G→1.2Gに。けっこうかさばる。

$ ll *.vmdk
-rwxr-xr-x 1 pen None 1209794560 May 30 13:01 cent65-64.vmdk*

Vagrant boxing

$ mkdir XXX && cd XXX
$ vagrant package --base <VirtualBox上のVM名> --output centos6.5-x86_64_minimal.box
[centos6.4-x86_64_minimal] Clearing any previously set forwarded ports...
[centos6.4-x86_64_minimal] Creating temporary directory for export...
[centos6.4-x86_64_minimal] Exporting VM...
[centos6.4-x86_64_minimal] Compressing package to: C:/vm/vm1/package.box

400MBに。ちなみにshrinkをしないと570MB程だったので、shrinkはした方がよい。

$ ll centos6.5-x86_64_minimal.box
-rwxr-xr-x 1 pen None 402938214 May 30 13:03 centos6.5-x86_64_minimal.box

boxの登録

$ vagrant box add cent65 centos6.5-x86_64_minimal.box
Downloading box from URL: file:C:\cygwin\home\pen\project\box\centos6.5-x86_64_minimal.box
Extracting box...ate: 630M/s, Estimated time remaining: --:--:--)
Successfully added box 'cent65' with provider 'virtualbox'!
Shutdown completed cleanly

$ vagrant box list
cent65   (virtualbox)

付録

今回使ったks

キーボードとTZに日本のものを設定、パッケージはminimalで、vagrantユーザを追加してある。 rootのパスワードはvagrantにしてある。

install
cdrom
lang en_US.UTF-8
keyboard jp106
network --bootproto=dhcp
rootpw vagrant
firewall --enabled --service=ssh
authconfig --enableshadow --passalgo=sha512
#selinux --disabled
timezone --utc Asia/Tokyo
bootloader --location=mbr

#autostep --autoscreenshot

text
skipx
zerombr

clearpart --all --initlabel
autopart

firstboot --disabled
reboot

%packages --ignoremissing
@base
@core
%end

%post
# non pass sudo for vagrant user
/usr/bin/yum -y install sudo
/usr/sbin/groupadd -g 501 vagrant
/usr/sbin/useradd -g 501 -u 501 -G wheel vagrant
echo "vagrant" | passwd --stdin vagrant
echo "vagrant        ALL=(ALL)       NOPASSWD: ALL" >> /etc/sudoers.d/vagrant
echo "Defaults:vagrant !requiretty" >> /etc/sudoers.d/vagrant
chmod 0440 /etc/sudoers.d/vagrant