#はじめに
Railsの開発環境を構築するために、CentOS 7用のVagrant BOXを入手しようと思ったが、どれを使えばよいかわからないので、自分で作ることにした。どうせなので、RubyとRailsのインストールまでした状態でBOX化することにする。
コマンドの実行はゲスト側で行い、ソースファイルの編集はホスト側でできるようにする。
VMイメージ作成
CentOS 7をダウンロードする
minimal isoを入手する
https://www.centos.org/download/
isoはミラーからダウンロードしてと言われるので、JAISTから
http://ftp.jaist.ac.jp/pub/Linux/CentOS/
http://ftp.jaist.ac.jp/pub/Linux/CentOS/7/isos/x86_64/CentOS-7-x86_64-Minimal-1511.iso
を選択した。600MByte強
インストール作業
VirtualBOXを起動する。
VM作成
- 新規を選択
- 名前を入力。今回はcentos7-railsにする
- タイプはLinux,バージョンはOther Linux(64bit)
- メモリーサイズは、とりあえず2GByte
- 仮想ハードディスクを作成する
- タイプはVDI
- 可変サイズ:とりあえず16GByte
インストール
- 作成したcentos7-railsを起動する
- 起動ディスクを求められるので、フォルダアイコンを選択して、ISOを選ぶ
- インストールメニューが表示されるので、Install CentOS 7を選ぶ
- 言語は日本語を選ぶ
- 「ネットワークとホスト名」から、イーサネットを「オン」にしておく
- その他、!マークがついているところを確認する
- 「インストールの開始」ボタンを押す
- インストール中にユーザーを作っておく
- ユーザー名とパスワードをvagrantに。
- 「管理者にする」のチェックボックスを有効に
- 「高度」ボタンを押して、wheelグループが設定されていることを確認する
- 完了を2回押す(パスワードが短いので)
- インストール完了を待つ
- 再起動ボタンが表示されたら押す
sshのセットアップ
- OSが起動したら、vagrantユーザーでログインする
- 適当にPingを打ってみて、ネットワークの疎通を確認する
- vagrantの公開鍵を登録する
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ sudo yum install wget
$ wget https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub -O ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
- パスワードなしでsudoできるようにするための設定(必須)
$ sudo visudo
# Defaults requiretty <- この行をコメントアウト
~
%whell ALL=(ALL) ALL
vagrant ALL=(ALL) NOPASSWD:ALL <- この行を追加
(:wq でセーブして終了)
まっさらな状態でBOX化したい場合は、ここからBOX作成の手順に移る。
今回はRailsまで入れた状態にしたいので、このまま作業を続ける
Rubyのインストール
Rubyのインストールは、rbenvから行う。
gemのインストール時にsudoでやりたくない場合は、ホーム以下にrbenvをインストールする。
bundle install のインストールフォルダを手動設定したくない場合も同様
$ sudo yum -y update
$ sudo yum -y install git gcc gcc-c++ openssl-devel readline-devel
# gitはrbenvを落としてくるのに使って、それ以外はRubyのビルドに必要
$ cd /usr/local
$ sudo git clone git://github.com/sstephenson/rbenv.git
$ sudo mkdir rbenv/plugins
$ cd rbenv/plugins
$ sudo git clone git://github.com/sstephenson/ruby-build.git
$ sudo visudo -f /etc/sudoers.d/rbenv <- 新規作成
Defaults !secure_path
Defaults env_keep += "PATH RBENV_ROOT"
(:wqで終了)
$ sudo vi /etc/profile.d/rbenv.sh <- 新規作成
export RBENV_ROOT="/usr/local/rbenv"
export PATH="${RBENV_ROOT}/bin:${PATH}"
eval "$(rbenv init -)"
$ source /etc/profile.d/rbenv.sh
$ cd
$ rbenv install -l | less <- インストール可能なバージョンが表示される
# 2.2.4あたりを入れることにする
$ sudo rbenv install 2.2.4
# 待つ
# 結構待たされるけど、あきらめずに待つ
$ sudo rbenv global 2.2.4
$ sudo rbenv rehash
$ ruby --version
# ruby 2.2.4p230 ~ と表示されたらOK
$ sudo chmod 755 /usr/local/rbenv
# このままだとパーミッションの警告が出るので、755にしておく
railsのインストール
$ sudo gem install rails --no-document
# ドキュメントが必要なら --no-document は外せばいいけど、時間かかりすぎる。--no-ri は deprecated なので使わない
プロジェクト作って、rails s -b 0.0.0.0
をやってみて、ホストからアクセスできれば成功
ホストからアクセスできない場合
- VirtualBOXの設定で、ネットワークアダプタ2を有効にして、ホストオンリーアダプターに設定。
- ポートフォワーディングで、ゲスト、ホストともにポートを3000に設定
- ブラウザで、http://localhost:3000 にアクセスして確認
BOX化
後始末
- BOX化する前に、rails確認用のディレクトリは削除しておく
-
$ sudo yum clean
でキャッシュをクリア - VMをシャットダウン
BOX化作業
- VBoxManageにパスが通っている必要があるので、PATHにVirtualBoxのインストールフォルダを追加しておく
- cmdプロンプトを開く
-
> vagrant package --base centos7-rails
を実行
BOXを使ってみる
> vagrant box add centos7-rails package.box
-
> vagrant box list
で、centos7-railsが追加されていればOK -
> vagrant init centos7-rails
これを実行したディレクトリにインストールされる. > vagrant up
今回は、SSH keyがセキュアじゃないので、置き換えるよと言われて置き換えられた。
-
> vagrant ssh
でアクセスしてみて成功したら完了 - sshが入っていなければ、rloginなどで、
vagrant ssh
したときに表示される以下の情報をもとにログインする
Host: 127.0.0.1
Port: 2222
Username: vagrant
Private key: C:/Users/xxxxxx/.vagrant/machines/default/virtualbox/private_key
さっき設定したホストオンリーアダプタの設定は忘れられているので注意
vagrant init
を実行したディレクトリに作られたVagrantfile
に
config.vm.network :forwarded_port, guest: 3000, host: 3000
を追加して、vagrant reload
を実行する
その他メモ
ホストとゲストでフォルダを共有するために、VirtualBox guest addon をインストールする
1. VirtualBOXランチャーで、該当するVMを「表示」させる
2. デバイス - Guest Additions CDイメージの挿入を選択する
$ sudo mkdir /mnt/cdrom
$ sudo mount -r /dev/cdrom /mnt/cdrom
$ cd /mnt/cdrom
$ sudo yum -y install gcc make kernel-devel
$ sudo ./VBoxLinuxAdditions.run
3. インストールが終わったらvagrant reload
を実施。
これで、Vagrantfile
が置いてあるフォルダが、ゲストの/Vagrant
と共有される
$ ln -s /home/vagrant/rails /Vagrant/rails
とでもしておき、作業フォルダを共有しておく
vagrant sshを実行するために
sshクライアントが必要なので、cygwin入れて、sshも入れておく
cygwin/bin
をPATHに追加しておく
/c/~ って何?とエラーを吐くはずなので、
ln -s /cygdrive/c/ /c
と、シンボリックリンクを張っておく
Rsync Synced Folder
Rsync synced folderを使おうとしたけど、vagrant rsync-auto
してもゲスト側で生成、編集したファイルは同期されず、ホスト側からの一方通行なので、今回やりたいこととはマッチしていなかった。