DigitalOceanのサーバーが死んでた話

久しぶりに自分のブログにアクセスしてみたところ、500エラーだった。
このブログのサーバーに使ってるDigialOceanのサーバーが知らないうちに死んでた。
普段から書かないものだからいつからこうなってたのGoogleAnalytics見てみると1月末日からだった。。。

まぁもうないとおもうけど備忘録ついでに久しぶりに書いておこうかと。

Apacheが死んでるんだろうと思ってsshでサーバーに入ってみた。
とりあえずApacheを再起動させようと再起動のコマンドの入力途中で補完しようとTabキーを押したら

cannot create temp file for here-document: Read-only file system

あれ?
ファイルシステムがリードオンリーだと?!
そんな馬鹿な。。。放置してただけでリードオンリーになるファイルシステムってなんじゃいな。
ディスクが壊れたのか?

うーん、サーバーのディスク修復なんてしたことないけどいろいろググってみた。

fsckコマンド使えばいけるらしい

fsck /dev/vda1

コマンド叩いて見るも、意味不明にUUIDが解決できないって怒られる。

そしてディスク修復できないままさらにググる。

どうやらディスクのUUIDが変わってしまったのか、マウントするディスクのUUIDが変わったのかのどちらかの模様。
ディスクのUUIDを調べる方法をさらにググる

tune2fs -l /dev/vda1 | grep UUID
Filesystem UUID: 18254707-08e8-494e-b456-************

自動マウントするディスクのUUID

cat /etc/fstab
UUID=815063a9-c956-44a6-ab11-************ / ext4 errors=remount-ro 0 1

UUID違う。。。
/etc/fstabが書き換えられれば復旧できるのだがそもそもReadOnlyである。

がんばってこの状態で書き換えられる方法をググる
再マウントして書き込み権限をつけてマウントすればいいらしいのでやってみる

mount / -o remount,rw
mount: can’t find UUID=815063a9-c956-44a6-ab11-************

見つからない。
ですよね。
今マウントされてるのはUUIDが18254707…のディスクなんだし出来るわけがない。

もうどうしようもないと諦めモードで最後の望みをかけてDigitalOceanのサポートに連絡。
英語なんてできないので、今までやってきたコマンドとその結果だけを貼り付けて送信。
返事を待ってみること1日で返事が来た。
返事の内容は

ファイルシステムに異常があるみたいだね。ごめんね。
次の方法でファイルシステムを修復してみてくれ

1.サーバーを落として管理画面のkernelからDO-recovery-static-fsckに変更
2.再起動して管理画面のコンソール経由でサーバーにアクセス
3.次のコマンドを実行 fsck /dev/vda1
4.いくつかエラーを修復するか聞いてくるから「はい」と答える
5.サーバーを落とす

追加でサポートが必要ならまた連絡してくれ

じゃあね

うーむ、根本的にディスクが壊れてるわけではないはずなんだが、やっぱりコマンドとその結果だけでは伝わらなかったか。。。
しかし、リカバリー用のイメージに変更することが出来るならなんとかなるかもしれないと思い、リカバリーモードにしてみる。
とりあえず問題のディスクを探してみる。
/dev/vda1はあったがどうやらリカバリーイメージ上にはマウントされていない模様。
適当なディレクトリにマウントしてみる。
etc/fstabがあったので編集するかとviしたらviなかった。。。
え?これどうしたらいいの?
どうやらリカバリーモードで使えるコマンドにはかなりの制限があった。
今あるコマンドだけでやりくりしないといけないということか

viがないだけでファイルは読み書きできるしsedで置換してファイルに書き込めばいけるはず。
ファイルを書き換え完了して、kernel戻してサーバーを再起動。

ブログにアクセスする前にターミナルからsshログイン。
適当なコマンドの途中でTabキー押してみる。
エラーが出なくなった!
これでブログにもアクセス出来るはずとブログにもアクセス。

無事表示された。

いやー、マジ終わったと思った。

Vagrant1.8.7でbox addがエラーになる

結論としてはを削除。

vagrant box add するとなぜか以下のエラーがでてどうしようもない。

An error occurred while downloading the remote file. The error
message, if any, is reproduced below. Please fix this error and try
again.

boxファイルをローカルにダウンロードしてローカルパスでbox addしてもダメだった。

いろいろ調べるたけどの中身を全部消せば直るって記事ばかりだった。

なので直接vagrantのgithub身にいってissueを確認してみたらあった。
https://github.com/mitchellh/vagrant/issues/7969

どうやらvagrantパッケージの中にあるcurlがうまく動作していないらしい。
を削除すればcurlが別にインストールされているならばそっちが動くのでbox addすることができる。

PHPでSQL Serverに接続してみた。

故あってSQL Server(Windows Server)にLinuxOSから接続しなきゃいけなくなったので、とりあえずいろいろ試したメモ。

試した環境は
Windows8.1 SQL Server2014
CentOS7

どちらもMac上でParallels Desktopの仮想環境で立ち上げた。

以下のサイトを参考にSQL Serverを設定。
SQL Server 2014 Expressの外部接続を許可する手順
基本的にリモート接続の許可はデフォルトでチェックが入ってた。
TCP/IPは無効になってたので有効化して、SQL Serverの設定は完了。

ODBCデータソース アドミニストレータを使って確認してもいいし、sqlcmdでIP接続できてればOK。

CentOSのほうにFreeTDSとunixODBCをインストール。
同じことやってる人がちらほらいたけど、ほとんどがソースビルドしてた。
けど、EPELのリポジトリを登録すればFreeTDSもyumでインストールできた。

EPELのリポジトリ追加はこちら
CentOS6はこっち

以下のコマンドでunixODBCとFreeTDSをインストール


#sudo yum -y install unixODBC-devel freetds-devel

インストールが完了したら、以下を参考にしてドライバとデータソースの設定
unixODBCにODBC用のFreeTDSドライバーを登録

あとはPHPのODBC関数を使えばSQL Serverに接続することができた。

問題は、ODBC対応のPHPフレームワークが思い当たらないことか

追記
探してみたらCodeIgniterがODBCサポートしてた。
使うかどうかはまだ検討中だけども

Vagrant + Chef Soloでハマった

関西PHPカンファレンスで紹介されてたVagrant + Chef Soloの自習会ってのをやった。

とりあえずVagrantいれてVirtualBoxの仮想サーバーをVagrantから起動しようとしたらエラーがでた。

Bringing machine ‘default’ up with ‘virtualbox’ provider…
[default] Importing base box ‘base’…

There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: [“import”, “/Users/username/.vagrant.d/boxes/base/virtualbox/box.ovf”]

Stderr: 0%…10%…20%…30%…40%…50%…60%…70%…80%…90%…100%
Interpreting /Users/mediaash/.vagrant.d/boxes/base/virtualbox/box.ovf…
OK.
0%…
Progress object failure: NS_ERROR_CALL_FAILED

ちゃんと出来てる人曰く、こんなところで躓くなんてことはありえないとか
boxのダウンロードからやり直したりしてみたものの改善されず
エラーはVirtualBoxのものらしいということなのでVirtualBoxのバージョンを確認したところ
最新のバージョンをつかったのがまずかったらしい。
最新のバージョンは4.2.14でリリースが2013−06-21
そして自習会の日は2013-06-22

!!

昨日リリースされたばっかりの超最新版だった。
バージョンを落として4.2.8ぐらいで動かしてみたらちゃんと動いた。
4.2.12でも動いてる人はいたので4.2.14が鬼門だったらしい。

結局Vagrantで仮想サーバー起動まででほとんどの時間を費やした
Chef soloについてはまた後日ゆっくりとやろうと思う。