57
75

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Vagrantでboxファイル作成

Last updated at Posted at 2016-05-31

概要

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

57
75
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
57
75

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?