2012年4月7日土曜日

新さくらのVPSにOpenBSDをインストール

さくらのVPSに新しいプランが発表されました。価格が一番安い「さくらのVPS 1G」はHDDが100GBになり、現在契約しているプランの5倍の容量、メモリーは2倍の容量となりお得感が大きいですね。さらに、乗り換え優遇キャンペーン中で一ヶ月利用料が無料となるので飛びついてみた訳ですが…

新さくらのVPSはOpenBSDはインストールできない?

いえ、できます。

正確には、驟雨のカーネル探検隊さんの所で紹介されていた方法では出来ませんでした。前回インストールしたときは、Ubuntuを再インストールしてGRUB2からOpenBSDのインストーラを立ち上げる方法を取っていました。

今回も、その方法でインストールを試みました。しかしこの方法では、ブートはするのですがHDDを認識しなくなってしまいました。ブート時のメッセージを見ると、旧サービスではI/Oの仮想化にQEMUが使われている?ようですが、新サービスではに、virtioが使われるようになったらしく、OpenBSDがvirtioを認識できないのでHDDが見えていなかったようです。

FreeBSDからインストールしよう。

色々調べてみると、新さくらのVPSにFreeBSDをインストールするとQEMUが使われる事がわかりました。FreeBSDのブートメッセージを見ると下記の様に"QEMU HARDDISK"と出力されています。 FreeBSDのdmesg

ならば、FreeBSDからインストールすればいいんじゃね? と言う事で次のような手順でインストールしてみました。

  1. FreeBSDをインストール
  2. FreeBSD上にGRUB2をインストール
  3. GRUB2からOpenBSDのインストーラをキックする
  4. OpenBSDをインストール

インストールのベースがUbuntuがFreeBSDに変わっただけですね。

FreeBSDをインストール

カスタムOSインストールガイド FreeBSD編に従ってインストールします。インストールしたものはすぐ消えてしまうので適当で構いません。パーティションの設定はおまかせ・インストールもミニマムで問題無いです。

FreeBSD上にGRUB2をインストール

インストールが終了したらGRUB2のインストールを行います。最初に必要なパッケージをftpでダウンロードしてきます。

# ftp ftp://ftp2.jp.freebsd.org/pub/FreeBSD/ports/amd64/packages-8.1-release/devel/libiconv-1.13.1_1.tbz
# ftp ftp://ftp2.jp.freebsd.org/pub/FreeBSD/ports/amd64/packages-8.1-release/devel/gettext-0.18_1.tbz
# ftp ftp://ftp2.jp.freebsd.org/pub/FreeBSD/ports/amd64/packages-9.0-release/sysutils/grub2-1.98_1.tbz
#

ここで注意するのが、「”grub2はpackages-8.1-release”でなく”packages-9.0-release”のパッケージを使用する。」と言うことです。

自分の環境では、packages-8.1-releaseのパッケージを使用するとgrub-installコマンドがエラーになり、grubがインストール出来ませんでした。

# grub-install /dev/ad0
/usr/local/sbin/grub-probe: error: cannot find a device for /boot/grub (is /dev mounted?).
No path or device is specified.
Try `/usr/local/sbin/grub-probe --help' for more information.
Auto-detection of a filesystem module failed.
Please specify the module with the option `--modules' explicitly.
#

必要なファイルがダウンロード出来たならばインストールします。

# pkg_add libiconv-1.13.1_1.tbz  gettext-0.18_1.tbz grub2-1.98_1.tbz
pkg_add: warning: package 'grub2-1.98_1' requires 'gettext-0.18.1.1', but 'gettext-0.18_1' is installed

#############################################################
To install GRUB on the master boot record of your hard drive
use 'grub-install ' command.

A typical menu entry in /boot/grub/grub.cfg for FreeBSD:
menuentry "FreeBSD" {
	set root(hd0,1,a)
	kfreebsd /boot/loader
}
Or use grub-mkconfig to create the config file.
#############################################################
#

ワーニングが出ますが気にせず、grubをインストールします。

# grub-install /dev/ad0
Installation finished. No error reported.
# cd /boot/grub
# vi /boot/grub.cfg
# vi /boot/grub/grub.cfg
menuentry "FreeBSD" {
	set root(hd0,1,a)
	kfreebsd /boot/loader
}

grubのインストールが完了したら、bsd.rdを/boot以下にダウンロードし、リブートします。

# cd /boot
# sudo ftp ftp://ftp.jaist.ac.jp/pub/OpenBSD/5.0/amd64/bsd.rd
# sync;sync;sync;reboot
#

GRUB2からOpenBSDのインストーラをキックする

リブートとすると下記の様なgrubの画面が出てきますので、すかさず"c"キーを押下します。

FreeBSDのgrubメニュー

次にbsd.rdを読み込んでブートさせます。

bsd.rdのロード

hddが認識されています。

OpenBSDのdmesg

その後は、普通のOpenBSDインストール作業と変わらないので、粛々とインストール作業を進めればよいでしょう。

2012年4月4日水曜日

iterm2で処理が終了したとき、Growlに通知する方法

iTerm2のドキュメントにあるInteresting Linksに載っていた方法ですが、リンク先が無くなっていたので備忘録として書いておきます。

iTerm2でコンパイル等の時間が掛かる処理をしている場合、処理が終了したときにGrowl通知させたい、と言う事があると思います。このような場合、下記のコマンドを実行することによりiTerm2からGrowlに通知する事ができます。

$ echo $'\e]9;Growlへ通知するメッセージ\007'
$

メッセージは日本語もOKです。

$ sleep 10;echo $'\e]9;起きたよ〜\007'
$

上記のコマンドでは、10秒後にGrowlに対して「起きたよ〜」のメッセージを通知します。

growl通知

実行する度に、エスケープシーケンスを打ち込むのは面倒なので、.bashrcに関数を定義して登録しておくと便利です。

growl() { echo -e $'\e]9;'${1}'\007' ; return  ; }

試しに、mercurialをportからコンパイルしてみます。

$ sudo port install mercurial +bash_completion; growl "mercurial のインストールが終わったよ"

インストール終了後に、growlに通知されました。

インストール終了のgrowl通知