元々、使っていたマシンがかなり怪しく、ノートのくせにファンの音がすごくうるさい、いつ逝ってしまっても不思議ないマシンであったのです。

そしてだんだんと、VirtualBoxが立ち上がらなくなりました。突然ではないのです。段々とでした。ここが分からんところなのですが。。

で、ついに立ち上がらなくなりました。他のアプリも重かったので、もう寿命だろうと判断し、もう少しましかと思えるマシンに環境を移しました。ここからが死のロードの始まりです。

VirtualBox + Vagrantの強みはそれらを移せばあらよっと、同じ環境が作れることです。そのつもりでまったく気楽に考えていたのです。

まず、VirtuialBox自体が立ち上がりません。色々ネットを漁ってやってみたものの、立ち上がる気配がありません。なので、本書のサイトから落としたものでなく、最新版をインストールし直しました。VirtualBoxはあっけなく立ち上がるようになりました。

ここで、ではどうせなので、ということでVagrantも最新にしました。途端!

default: Warning: Authentication failure. Retrying

このRetryを繰り返してまともに環境が作れません。ググってみると、どうもVagrantの、SSHの仕様が少し変わったとのこと。対処はいくつか見つけましたが、どれをやってもスパッと行きません。決め手にならないのです。

結局、自分で見つけた一番簡単と思える対処方法は、

いったん、Retryがかかることを覚悟で、vagrant upします。

Retryを繰り返し始めたところで、ctrl + cを二回押下して、中断させます。この時点で、centOS自体は立ち上がっています。

Puttyなどで、centOSにログインします。ログインした先は/home/vagrantのはずです。

以下のコマンドで、パーミッションを本来あるべき姿にしておきます。

$ chmod 0700 /home/vagrant/.ssh
$ chmod 0600 /home/vagrant/.ssh/authorized_keys
$ chown -R vagrant /home/vagrant/.ssh

※ authorized_keysを変えるときはsudoいるっぽいです。

そして、Windows(別のOSの方はホストOS側ですね)、へ戻り、Vagrantfileniに一行加えます。

config.ssh.insert_key = false

これで vagrant reloadします。

参考にしたのは、このサイトなのですが、

http://qiita.com/shyse/items/9ec50b868b90f847c75f

こちらではもっと高度なことをやっていて、

wgetを使って、vagrantの作者のところからsshの公開キーを持ってくる、みたいなことをしています。

しかし、その必要はなく、最初のRetryを出し始めた段階で、公開キーは持っており、それはそのまま生きます。(少なくとも私の環境では)

vagrantの、あるversion以降で、内部的にsshの公開キーを入れ直す、みたいなことをやるようになった、とのことなのですが、説明と実際の動きからは私ではちゃんとは掴めず、予測ではあるのですが、Retryを繰り返す段階でvagrantを強制終了させ、その段階でVirtualBox内のcentOS自体は動いているので、今回は念押しでパーミッションをきちんとさせているのですが、おそらく、強制終了させた段階で、Vagrantfileに一行加え、reloadするだけで動くんじゃないかなぁ。。どうでしょう。

この状態から、

vagrant destroy

しちゃいます。

なくなっちゃいます。

Vagrantfileは

# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
  config.vm.box = 'bento/centos-6.7-i386'
  config.vm.box_url = 'https://atlas.hashicorp.com/bento/boxes/centos-6.7-i386/versions/2.2.2/providers/virtualbox.box'
  config.vm.network 'forwarded_port', guest: 80, host: 80, host_ip: '127.0.0.1'
  #config.ssh.insert_key = false
  config.vm.synced_folder '.', '/vagrant', disabled: true
  config.vm.synced_folder '..', '/mnt/fuelphp', mount_options: ['dmode=777', 'fmode=666']
  config.vm.synced_folder '../../cakephp','/mnt/cakephp',mount_options: ['dmode=777', 'fmode=666']
  config.vm.provision :shell, path: 'bootstrap.sh'
end

例の一行をコメントアウトしておき、

「.vagrant」隠しディレクトリを削除しちゃいます。

この状態から

この状態へ。

で、あらためて vagrant upします。

新たにVMを作り直して、Bootし、Retryし始めるはずです。

ほら、でこのRetryからは脱出できずにタイムアウトしますから、待つ必要もありません。

ctrl + c を2発で止まります。でもVirtualBoxは

このように新たなVMが実行中です。ただし、vagrant upは途中まででブチ切れているので、環境は正しくできていません。Linuxサーバが動いているだけ、って感じです。sshでログインすることもできます。この段階では普通に

User:vagrant

password:vagrant

です。

しかし、敢えてそこを確かめず、先ほどコメントアウトしたVagrantfileを元に戻します。

# -*- mode: ruby -*-
  
# vi: set ft=ruby :

Vagrant.configure(2) do |config|
  
  config.vm.box = 'bento/centos-6.7-i386'
  
  config.vm.box_url = 'https://atlas.hashicorp.com/bento/boxes/centos-6.7-i386/versions/2.2.2/providers/virtualbox.box'
  
  config.vm.network 'forwarded_port', guest: 80, host: 80, host_ip: '127.0.0.1'
  
  config.ssh.insert_key = false
  
  config.vm.synced_folder '.', '/vagrant', disabled: true
  
  config.vm.synced_folder '..', '/mnt/fuelphp', mount_options: ['dmode=777', 'fmode=666']
  
  config.vm.synced_folder '../../cakephp','/mnt/cakephp',mount_options: ['dmode=777', 'fmode=666']
  
  config.vm.provision :shell, path: 'bootstrap.sh'
  
end

これで、

vagrant reloadしてみましょう。どうでしょうか。

実行中のVMがいったん電源オフになり、またすぐに実行中になります。そして問題の、

あ!

Retryしてる!こうなったら蟻地獄ですので、強制終了させちゃいます。んーーー、はやりパーミッションをちゃんとしてみましょう。

sshでのログインはPuttyを使ってもいいし、vagrant sshでも構わないと思います。

ただし、Windowsユーザは、何等かsshがコマンドプロンプトで動くようにしておく必要があります。本書ではPuttyを用意してくれているのでそちらで行きましょう。

これでOpen

login as : はvagrant

password も vagrantです。

ログインした場所は/home/vagrantですよね。

ここで、パーミッションを整えます。

一度失敗してますが、ご愛敬。Puttyはここで終了させちゃいます。

exit一発で消えます。

この状態であらためて、vagrant reloadしてみます。

当然、一度電源オフになり、すぐに実行中になります。

で、問題の、private keyがどうしたこうした。。。

抜けた。各種設定が始まりました。

終点はこんな感じ。

てなわけで、sshにとってパーミッション設定が如何に大事か、を思い知らされた一日でした。

ちなみに、最初の

chmod 0700 /home/vagrant/.ssh

は省いても大丈夫なはず。一応書いてますが、事前にそうなってるのは確認したので。

しかし、何かおかしい。。

Webサーバは立ち上がっているのに、

URLを変えてみます。

でました。

http://localhost/donichi/index.php/calendar

のようにURLにindex.phpを含めないとならないのは、二つの原因が考えられます。

「.htaccess」ファイルがないか、httpd.confの設定がおかしいかのどちらかです。

「.htaccess」は本書のサイトから取ってきたものですでに提供されていますし、確か、FuelPHPってフレームワークをセットした段階でちゃんと用意されているように記憶しています。

なのでhttpd.confですね。これが「.htaccess」を有効にしない設定になっているはずです。

もう一度Puttyします。

sudoをつけてhttpd.confを開きます。

本書ではこの作業は必要ないようにちゃんとできています。私は本書で提供してくれているconfをひとつ恣意的に殺しているので、自分でバンバンしないとならないんです。

ここです。

AllowOverride None を

AllowOverride All

に変えて保存します。

この辺の操作はVIMの知識が必要になります。VIMは覚えておいて本当に損のないエディタです。絶対おススメ。

Puttyを終了させて再度、vagrant reloadします。

今度は環境がすでにできているので早いです。

完成です。

あ、もうひとつ。今回の件で、いろいろなサイトを調べまわって目にしたのですが、本書ではWebサーバのportを8000にしています。私は面倒なので80にしてしまっているのですが、ちゃんと理由があるみたいです。

確かにhttpdのデフォルトは80で、世界的にそうなので、URLも80は省略できるのですが、VirtualBoxで自機の中に仮にサーバを立てるわけなので、そのportを80にしていると、何かの時に問題になるケースがある、とのこと。

確かに自分もskypeをインストールした途端に使用portで衝突しましたし、まだ経験の浅い方が突然わけわからず接続できなくなったりしないためにはデフォルトから変えていたほうが安全かもしれませんね。私はskypeの方の設定を変えて頑固に80を守ってますが(^_^;;;

まぁこのssh問題でちと七転八倒してまして、ここまで復旧するのにえらく時間がかかりました。また頑張りま~す。