環境
- macOS 10.12.6
- MacBook pro 2016
- VirtualBox 5.2.18
- CentOS 7.6-1810
- Vagrant 2.1.2
前提
VirtualBoxとVagrantインストール済み
VirtualBoxで仮装マシン(以下VM)の環境を構築済み
VirtualBoxのインストールとVMの環境構築は以下記事で↓
MacでVirtualBoxを使ってCentOS 7をインストールしてみた
今回の手順
1.BOX化したいVM上にvagrantグループとユーザーを作成
2.vagrantユーザー用の公開鍵を配置
3.VBoxGuestAdditionsをインストール ←ここで詰まった
4.VagrantBox を作成&使用
はじめに
手順に入る前に、今回の記事の簡単な説明をします。
Vagrantとは
VMを作成・管理・配布できる便利ツールです。
VagrantはあくまでもVM周りの便利ツールなので、VirtualBoxなどの仮想化マシンがなければ、何にもできません。
Vagrantがあることによって、簡単にVMの作成や設定周りの管理ができたり、自分のVMと同じ環境を共有することができます。
なぜVagrantBoxを作成するか
上記で伝えた通り、VagrantではVMの配布ができます。まったく同じVMの環境をコピーして、別のVMとして使うことができます。
最近、複数の環境(自宅PCや社用PC、レンタルサーバ)で、開発運用することが多く、その度にアプリケーションを動かすためのミドルウェアを入れて開発環境を整えるのが非常に面倒だと思ったからです。
さらに、それぞれバージョンを合わせたりなど、手間がかかることが多いです。
そこで、頑張って作った開発環境をいろいろなところで使い回せないかと思い、Vagrantを使うことにしました。
このVagrantでVMを配布するには、VagrantBoxというものを生成する必要があります。
そのVagrantBoxを様々な環境で使い回すのです。
vagrantグループとユーザーの作成
グループとユーザーの作成
まずは、自分のVM上に、vagrant
グループとvagrant
ユーザーを作成します。
のちにVagrant側からVMにアクセスしてごにょごにょやるためです。
コマンド叩いてグループとユーザーをささっと作成。
# groupadd vagrant
# useradd vagrant -g vagrant -G wheel
# sudo passwd vagrant //パスワードを初期値から変更
ここで出てくるwheel
は、Linuxに標準で用意されているグループ名です。
このグループに所属させて入れば、全てのコマンドの実行が許可されます。
ちなみに、-g
はメインとなるグループを指定していて、-G
はサブグループです。
sudo周りの設定
先ほど作成した、vagrant
ユーザーをsudoersファイルに記入して、sudo権限を付与します。
さらに、tty無しでのsudo実行を許可させます。
ttyについては、調べるとこちらでこんなこと言ってたのでなんとなくわかりました。
要するに、SSHとかで端末から扱う場合はTTYあり(TTY経由?)での操作ということ解釈でいいのではないかと。
sshを使って、外部の端末がsudoを扱おうとすると、tty経由での実行になってしまうみたいで、そうなるとはじかれてしまうみたいです。
なので、tty無しでもsudoを使えるようにしちゃいます。
# sudo visudo //sudoersファイル(/etc/sudoers)の編集を行うことができるコマンド
〜省略〜
root ALL=(ALL) ALL
vagrant ALL=(ALL) NOPASSWD: ALL //追記
〜省略〜
Defaults requiretty //追記
Defaults:vagrant !requiretty //追記
追記と書かれた行だけ、記入して保存。
Defaults requiretty
に関しては、デフォルトコメントアウトしてあるみたいなのですが、見当たらなかったので、自分は追記しました。
その下の1行のDefaults:vagrant !requiretty
は、vagrantユーザーだけ、tty無しsudoを許可しています。こうしなければ、すべてのユーザーでtty無しsudoを許可することになるので、セキュリティ的にナンセンスです。
vagrantユーザー用の公開鍵を配置
Vagrantが外部からsshできるように、vagrantの公開鍵を設定してあげる必要があります。
普通のsshの設定のように、homeディレクトリに~/.ssh/authorized_keys
を作成してその中に公開鍵を置いてあげます。
# su - vagrant //vagrantユーザーに切り替え
# mkdir ~/.ssh
# chmod 0700 ~/.ssh //パーミッション変更
# curl -k -L -o ~/.ssh/authorized_keys https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub //authorized_keysフォルダを作成して、公開鍵を持ってきてぶち込む
# chmod 0600 ~/.ssh/authorized_keys
VBoxGuestAdditionsをインストール
インストール
まずは、wget
をyumでインストール。
wgetを使ってVBoxGuestAdditionsをインストール
そのあとに、一時的にマウントする場所を作って、そこにインストールしたVBoxGuestAdditionsをマウントする。
# yum install -y wget
# wget http://download.virtualbox.org/virtualbox/5.2.18/VBoxGuestAdditions_5.2.18.iso
# mkdir /media/mountVBoxGuestAdditions
wgetするurlは、こちらから自分の使っているVirtualBoxのバージョンに合わせて選んでください。
マウント
お次にインストールしたVBoxGuestAdditionsをマウントように作ったディレクトリにマウントします。
# mount -o loop,ro VBoxGuestAdditions_5.2.18.iso /media/mountVBoxGuestAdditions
ちなみに中身はこんな感じ
# ls
32Bit AUTORUN.INF TRANS.TBL VBoxSolarisAdditions.pkg VBoxWindowsAdditions-x86.exe autorun.sh runasroot.sh
64Bit OS2 VBoxLinuxAdditions.run VBoxWindowsAdditions-amd64.exe VBoxWindowsAdditions.exe cert
実行とエラー記録
あとは、この中のVBoxLinuxAdditions.run
を実行します。
# sh VBoxLinuxAdditions.run
ここで、自分は詰まりました。
何度かエラー出たのでご紹介。
まず一つ目のエラー
# sh VBoxLinuxAdditions.run
Verifying archive integrity... All good.
Uncompressing VirtualBox 5.2.18 Guest Additions for Linux........
bzip2 not found. Please install: bzip2 tar; and try again.
調べるとどうもbzip2
コマンドがなきゃダメっぽい。処理の中で解凍するっぽいですね。
そのほかにも、必要なコマンドがあるみたいなので、それらを一括インストール。
# yum install -y bzip2 gcc make perl kernel-devel
インストール完了したので、再びVBoxLinuxAdditions.run
を実行しました。
そしたら本日2つ目のエラー
# sh VBoxLinuxAdditions.run
Verifying archive integrity... All good.
Uncompressing VirtualBox 5.2.18 Guest Additions for Linux........
VirtualBox Guest Additions installer
Removing installed version 5.2.18 of VirtualBox Guest Additions...
Copying additional installer modules ...
Installing additional modules ...
VirtualBox Guest Additions: Building the VirtualBox Guest Additions kernel modules. This may take a while.
This system is currently not set up to build kernel modules.
Please install the Linux kernel "header" files matching the current kernel
for adding new hardware support to the system.
The distribution packages containing the headers are probably:
kernel-devel kernel-devel-3.10.0-957.el7.x86_64
VirtualBox Guest Additions: Starting.
VirtualBox Guest Additions: Building the VirtualBox Guest Additions kernel modules. This may take a while.
This system is currently not set up to build kernel modules.
Please install the Linux kernel "header" files matching the current kernel
for adding new hardware support to the system.
The distribution packages containing the headers are probably:
kernel-devel kernel-devel-3.10.0-957.el7.x86_64
なるほど、カーネルの何かのバージョンがダメっぽいですね。
カーネルのアップデート状況を確認。
# yum check-update|grep kernel
kernel.x86_64 3.10.0-957.10.1.el7 updates
kernel-headers.x86_64 3.10.0-957.10.1.el7 updates
kernel-tools.x86_64 3.10.0-957.10.1.el7 updates
kernel-tools-libs.x86_64 3.10.0-957.10.1.el7 updates
上記の1行目と2行目を最新にアップデートしたらおさまりました。
# yum install -y kernel.x86_64 kernel-headers.x86_64
# reboot //再起動を挟む(再起動後は、もう一度マウントしなおしてください)
# sh VBoxLinuxAdditions.run
Verifying archive integrity... All good.
Uncompressing VirtualBox 5.2.18 Guest Additions for Linux........
VirtualBox Guest Additions installer
Removing installed version 5.2.18 of VirtualBox Guest Additions...
Copying additional installer modules ...
Installing additional modules ...
VirtualBox Guest Additions: Building the VirtualBox Guest Additions kernel modules. This may take a while.
VirtualBox Guest Additions: Look at /var/log/vboxadd-setup.log to find out what went wrong
VirtualBox Guest Additions: Running kernel modules will not be replaced until the system is restarted
VirtualBox Guest Additions: Starting.
これでインストール成功。。。
ちょっと詰んで疲れました。
マウント解除
最後に入らなくなったディスクイメージや、マウント用のフォルダを消していきます。
# rm VBoxGuestAdditions_5.2.18.iso
# umount /media/mountVBoxGuestAdditions
# rmdir /media/mountVBoxGuestAdditions/
VagrantBox を作成&使用
あとは、準備が整ったのでVagrantBoxを作成します。
VagrantBox作成はホストOS側(自分の場合MacPC)で操作を行います。
$ cd ~/VirtualBox\ VMs/testVM/ //testVMは、今回BoxにしたいVM名です。
$ vagrant package --base testVM --output testVM.box //Box名は自由に
これでtestVM.box
というVagrantBoxが完成したので、あとは適当なディレクトリでadd使ってみる。
$ cd ~/
$ mkdir testVBox
$ cd testVBox
$ vagrant box add [新しいVM名] ~/VirtualBox\ VMs/testVM/testVM.box
こんな感じで、Boxを使い回せます!