NetBSD/amd64 on CloudCore VPS

【追記 2013-03-19】以下は書いた当時の情報であり、2013年3月現在、ここに書いたような方法(x86_errata()の無効化)を用いてもCloudCore VPSでNetBSDは動作しません。

KDDI Web Communications の CloudCore VPS、最安とまではいかないがそこそこ安いのと(トップにある945円/月は1年契約のときの値段ですが)、「提供予定」に普段使っているNetBSDが入っていたので様子を見ていたところ、

CentOS 5.8/CentOS 6.2/Fedora 16/Scientific Linux 6.2/Ubuntu 12.04 提供開始のお知らせ

なお、かねてよりOSインストール機能の一環にて提供予定としておりました、
「NetBSD」につきましてご報告させていただきます。

お客様からのご要望も高く、ご期待に添えるべく技術検証を重ねてまいりましたが、
サービスとして提供できるレベルに至らず、提供を見合わせることとなりました。
ご期待を寄せていただいていたお客様方へは深くお詫び申し上げます。
誠に申し訳ございませんでした。

とまあ、残念なお知らせが載っていたので、雲野コアさんに愛を伝えるべくどういう問題かを把握すべく試用してみました。

Back Street Net(神戸さんのサイト)のさくらVPSの例(とてもわかりやすくて助かります)を参考に if_wm.c にパッチをあてて、イメージを作成。
(VNCコンソールなのでinstallbootのオプション,console=com0,speed=115200は削りました。)

イメージの書き込みは、他のサポートされているOSのインストーラを途中で止めて、ネットワークの設定をしてイメージを転送してddでディスクに書き込むだけなので、特にトリッキーなテクニックを使う必要もなく比較的簡単です。私はFreeBSDのインストーラを使いました。(今後ISOイメージからの起動ができるようになるそうなので、もっと簡単になりそうです。)

すると、…起動に失敗します。

理由は、多分以下のスレッドのものと同じですが、
Current-Users archive: Boot fail as kvm guest
要は、sys/arch/x86/x86/errata.cのx86_errata()でCPUがAMDと判定されるとMSRへのアクセスがありますが、KVM上では通らないという事のようです。今のところ、AMDのCPU以外では何もしないようになっているので、さくらVPS(IntelのCPUに見える)等では問題ないということでしょう。

「KVM上の場合は何もしない」というコードをどう書くのが正しいかわからないので、x86_errata()が何もしないようにソースを直接書き換えて、再度コンパイルしてイメージを作り、さらにACPIとSMPをdisable(起動メニューの4番)したところ起動しました

一応、インストールした後負荷をかけてみたりしましたが、動いているようです。ただ、「サービスとして提供できるレベルに至らず」という文面が気になるところです。

契約して使うかどうかは迷っています。

何処をどう直すのがスジかという話ですが、KVMとかハイパバイザの類の上でどうせCPU依存の特殊なことはできないのであれば、それらがCPUの種類を隠蔽してくれるのがいい気がしますが、どうでしょうか。

コミックマーケット82

当選しました。2日目の8月11日(土)です。
土曜日 西地区 “う” ブロック 12a

コミックマーケット公式サイト:http://www.comiket.co.jp/

頒布予定の物は、以下の通りです。

  • タイトル未定(新譜,詳細は後日掲載)
  • 「じゆうなうた」(2012年4月)
  • 「ヒカリの戦士」(2011年12月)
  • 「軽食喫茶 菜穂里たん」(2011年5月)
  • 「スーパーハカーのうた」(2010年5月)

M3-2012春頒布物

(やっと)M3情報です。

新譜「じゆうなうた」

再掲:
2012年4月30日(月)
東京流通センター(TRC)
第一展示場 L 14b
サークル名 Estuary

ひやかし等、お待ちしております。

M3-2012春

M3当選しました。

2012年4月30日(月)
東京流通センター(TRC)
第一展示場 L 14b

イベントの詳細はこちらをご覧ください。 http://www.m3net.jp/

頒布物については、後日(3月末~4月上旬頃できるだけ早めに)お知らせします。

binutilsが正しく作れないことがある件

NetBSDでmingw-w64を作っていて、クロスのgccもbinutilsも出来上がったのに、それでコンパイルしたバイナリをWindowsに持っていって実行しようとすると“not a valid WIN32 application”(日本語版だと「有効なWIN32アプリケーションではありません」)などと言われる。

結論から書くと、binutilsのldのldscriptsが正しく作れていなかった。

configureでSHELLとして何故か/bin/shではなく/bin/kshが選ばれるが、このシェルだとgenscripts.sh(から呼ばれているscripttempl/pep.scなど)がエラーになる。

エラーなので止まってくれれば良いのだが、実際にはそのまま進んで、make installすると途中で打ち切られた(実質中身のない)ldscriptsがインストールされてしまう。

出来上がったgcc+binutilsを使ってコンパイルしたときに、一見すると正しいPE32(+) executableに見えるモノが出来てしまうので、なかなか原因がわからなかった。しかし、以前にも、違うパターンとはいえ同じ部分でハマったことがあったのだった。http://est.ceres.ne.jp/2008/07/02/post_241/…すぐに気がつくべきだった。

回避方法としては、binutilsのconfigureを実行する際、CONFIG_SHELL=/bin/sh …/configure …とでもすれば良い。多分。

configure: error: libmpfr not found or uses a different ABI.

クロスコンパイラを用意していた時の話。

いまどきの gcc は、gmp, mpfr, mpc といったライブラリが必要で、一緒に作る場合は gcc のソースディレクトリの中に展開して、バージョン番号のない形にリネームしておく、とかいう話はどこにでも書いてあるけれど、mpc のコンパイル前の configure でコケる。

configure: error: libmpfr not found or uses a different ABI.

gccのconfigureの際、gcc のソースがあるのが ${SRCDIR}、コンパイルするのが ${BUILDDIR}、とすると、

$ cd ${BUILDDIR}
$ ${SRCDIR}/configure --prefixとかtargetとか指定したいオプション… 
   --with-mpfr-include=${SRCDIR}/mpfr/src 
   --with-mpfr-lib=${BUILDDIR}/mpfr/src/.libs

…とすれば回避はできる。(gcc-4.6.2で確認)

こんな指定をさせる仕様ではないと思うのだが。

ブログ移行

これまで MovableType を使ってきましたが、諸般の事情で WordPress に移行しました。

テーマがデフォルトのままだったり、改行がなくなっている・リンクが切れている等の不具合がありますが、御了承下さい。

サーバ復旧

地震(3/11ではなく4/8の余震の方)の影響でサーバ壊れたため,ブログ等止まったままでしたが,本日一部を除き復旧しました。

とりあえず報告まで。