Help us understand the problem. What is going on with this article?

Vagrantでboxファイル作成

More than 1 year has passed since last update.

概要

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でログインする際のユーザーを変更する

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした