概要
Vagrantで、自分好みのカスタマイズをしたboxを作成する。
[関連記事]
Vagrantのインストール、設定手順
VagrantでSSH鍵の設定
必要要件
Windows上で、Git-bashを使います。その他のクライアントソフトでもOKです。
Git-bashダウンロード
下記コマンドで、[Git-bash]$
となっているものが、Git-bash上、付いていないものは、サーバーにsshでログインして実行するものとなります。
環境
- Vagrant 1.8.1
Vagrant起動
ベースとなるOSを選択して、init
& up
[Git-bash]$ vagrant init centos67
[Git-bash]$ vagrant up
パッケージに含めたいものを設定をする
パッケージに含めたい必要なミドルエアのインストールや、その他設定を行う。今回は、下記の2つを行う。
- 新規ユーザーの追加
- PHPのインストール
まずはVagrantにSSHでログイン
[Git-bash]$ vagrant ssh
1. ユーザの追加
(こちらを参照)
パスワードなしでsudoできるようにする。
2. PHPのインストール
# yum list installed | grep php
# yum install -y php
MACアドレスとのマッピングを無効にする
vagrantでパッケージをした場合などに、MACアドレスとのマッピングがうまくいかなくなり、Vagrantfileで指定しているipアドレスでアクセスができなくなることがあるので、下記コマンドでマッピングを無効にしておく。
ちなみにエラー時にはこんなものが出る。
The following SSH command responded with a non-zero exit status
参考:http://to-developer.com/blog/?p=1827
$ sudo ln -s -f /dev/null /etc/udev/rules.d/70-persistent-net.rules
Vagrant停止
$ exit
[Git-bash]$ vagrant halt
boxファイルの生成
[Git-bash]$ vagrant package
==> default: Clearing any previously set forwarded ports...
==> default: Exporting VM...
==> default: Compressing package to: c:/vagrant/package.box
package.boxが生成されたことを確認
[Git-bash]$ ls | grep box$
package.box
生成したboxファイルをVagrantに登録
[Git-bash]$ vagrant box add mycentos67 package.box
==> box: Box file was not detected as metadata.Adding it directly...
==> box: Adding boc 'mycentos67' (V0) for provider:
box: Unpacking necessary files from: file://c:vagrant/package.box
box: Progress: 100% (Rate: 485M/s, Estimated time remaining --:--:--)
==> box: Succesfully added box 'mycentos67' (v0) for 'virtualbox'!
- 新しいboxが追加されたことを確認
[Git-bash]$ vagrant box list
centos67 (virtualbox, 0)
mycentos67 (virtualbox, 0)
新しいboxでVagrant起動
別のboxを設定することになるので、
現在のVagrantfileがあるディレクトリではなく、別の場所へ移動して、vagrant init
してください。
[Git-bash]$ vagrant init mycentos67
[Git-bash]$ vagrant up
[Git-bash]$ vagrant ssh
中身確認
- sampleuserのユーザーの確認
$ sudo su -
# sudo su - sampleuser
$ whoami
sampleuser
$ groups
sampleuser wheel
- PHPの確認
$ sudo yum list installed | grep php
ログインユーザーを変更
デフォルトのログインユーザーをsampleuser
に変更する。
1. vagrantユーザーの.sshディレクトリを、sampleuserのホームディレクトリ直下にコピー。
$ sudo su -
# cp -rp /home/vagrant/.ssh /home/sampleuser/
# chown sampleuser:sampleuser -R .ssh
既に下記と同様のパーミッションになっていると思いますが、念のため確認してください。
正しいパーミッションになっていないと、SSHでログインできません。
$ sudo chmod 700 /home/sampleuser/.ssh
$ sudo chmod 600 /home/sampleuser/.ssh/authorized_keys
2. OSからログアウトして、秘密鍵の場所を確認
[Git-bash]$ vagrant ssh-config
(**snip**)
IdentityFile xxxx/vagrant_private_key
(**snip**)
3. Vagrantfileに追記
[Git-bash]$ vi Vagrantfile
(**snip**)
# IPアドレスの設定
config.vm.network "private_network", ip: "192.168.33.10"
(**snip**)
# ログイン情報設定
config.ssh.guest_port = 22
config.ssh.username = "sampleuser"
config.ssh.host = "127.0.0.1"
config.ssh.private_key_path = "xxxx/vagrant_private_key"
4. Reload
[Git-bash]$ vagrant reload
vagrantユーザー削除
[Git-bash]$ vagrant ssh
$ sudo userdel vagrant
IPアドレス指定でSSHログインできることを確認
Teratermなどで確認。
$ ssh sampleuser@192.168.33.10
以上
SSH周りがうまく行かないときは、こちらも参考にしてみて下さい。
VagrantでSSH鍵の設定 - [Authentication failure. Retrying…]の対処策
[参考]
Vagrant で作った仮想マシンから Box ファイルを作りなおす
Package化したboxを使うときによく出るエラー
Vagrant で作った VM にやってはいけない2つのこと
vagrantでログインする際のユーザーを変更する