読者です 読者をやめる 読者になる 読者になる

Saneyan Notes

軌跡を残す

Arch Linux で Cordova を試してみた

最近全く技術的なことを output してないので、今回は Android エミュレータを Arch Linux で立てる記事を書いて肥やしにしました。

なぜ立てることになったのか?

スマホアプリは絶対に書かないぞと思い続けてきたのだが、諸事情によりモバイル向けプロダクトのプロトタイプに通知機能を実装しなくてはいけなくなってしまった。この際、Cordova でアプリを書くとどうなるのかを知りたかったのでまずは Android でデモアプリを動かせるところまでやってみた。ちなみに、地雷を踏みまくる覚悟は...すでにできていたようだ。

準備

まずは community と AUR から Android SDK や OpenJDK など、Cordova のビルドや Androidエミュレータを立てるのに必要なパッケージをインストール。

yaourt -S --noconfirm android-platform android-sdk android-sdk-build-tools android-sdk-platform apache-ant jre7-openjdk jdk7-openjdk nodejs

次に NPM で cordova をインストール。

npm install -g cordova

Androidツール群が利用できるように PATH に以下のパスを追加。これは Bash 使ってたら ~/.bash_profile に定義するか ZSH 使ってたら ~/.zshrc とかに定義すると後が楽。

export PATH=$PATH:/opt/android-sdk/tools:/opt/android-sdk/platform-tools

cordova コマンドでプロジェクトの作成、Android プラットフォームの追加、アプリケーションのビルドまでやってみる。

$ cordova create hello; cd hello
$ cordova platform add android
$ cordova build

ここまであっさりできてしまうと、万が一 Cordova か各プラットフォームの SDK のバグを踏んでしまったときの対処が非常に大変そう。細い命綱でこの状態が保たれている感じがしてちょっと怖い。

次はエミュレータのシステムイメージがないので、android sdkAndroid SDK Manager を開いて、Android 6.0 (API 23) の "Intel x86 Atom System Image" をインストールする。lib64OpenglRender が用意できれば x86_64 のイメージも利用可能。それから必要に応じて API のバージョンは変えてもよい。

できたら次は android avd で AVD (Android Virtual Device) コンソールを開き、AVD を作成する。デバイスイメージは前述のイメージを指定する。ホスト側の GPU を利用するように "Use host GPU" にチェック。ちなみに、この AVD の名前は "android-6.0.0-x86" とした。

AVD が作成できたのでようやくエミュレータを始動できる。起動するにあたり補足事項として、エミュレータ処理の高速化のために Intel HAXM (アクセラレータ) を KVM で有効にしておく。Android SDK Manager で選択できる "Intel x86 Emulator Accelerator (HAXM)" パッケージは Linux と互換性がなくインストールできないため代替手段として KVM に頼る。

emulator-x86 -avd android-6.0.0-x86 -qemu -m 1536 -enable-kvm

上のコマンドを実行するとエミュレータが正常に起動し、ホーム画面が表示されるはずである。

先ほどビルドしたものを走らせてみよう。

cordova run --emulator android

...あれ? 一瞬起動したかのように見えたが、起動途中にエラーで落ちて "Unfortunately, hello has stopped" とアラートが...。そのエラーの内容は ADB で探った限りだと

1908: F/chromium( 1029): [FATAL:gl_surface_android.cc(58)] Check failed: kGLImplementationNone != GetGLImplementation() (0 vs. 0)

とある。要は emulator-x86-gpu on オプションを渡していなかったから、androidcordova run するときに OpenGLES が使えずエラーを吐いて落ちたわけだ。つまり、これで動くことになる。

emulator-x86 -gpu on -avd android-6.0.0-x86 -qemu -m 1536 -enable-kvm

しかし、実は僕の環境ではこのオプションを指定しても僕の環境では改善されなかった。原因が X11 の設定で intel ドライバを指定していなかったためである。結果として、エミュレータもアプリケーションも正常に起動した。

うまい話には罠がある。この先、Web View 側のデバッグをしていくということも考えていくといろいろと辛さを感じてしまいそうだ。

参考になった Web サイトです。ありがとうございました。

rue16: ANONYMOUS:: Virtual Network For The Virtual You.

Linux上でAndroidの爆速エミュレータ環境を構築してみた。 - Develop with pleasure!

Issue 2544 - android-developer-preview - Web browser/webview in Android M Emulator crashes without host gpu - A public project for reporting issues with Android Developer Preview releases - Google Project Hosting

Android Platform Guide - Apache Cordova

android - Cannot get crosswalk HelloWorld example to work - Stack Overflow

Erlang Cowboy のサーバシグネチャーを変更する

Elixir Cowboy

Erlang で書かれた HTTP サーバ「Cowboy」のサーバシグネチャーを変更する方法について。

現在僕が携わっているプロジェクトでは HTTP サーバに Cowboy を利用していて、Elixir でバックエンドを書いてる。Cowboy をベースとした独自のサーバを実装しているため、サーバシグネチャーを変えておくことにした。

99s の Cowboy ドキュメントでは見当たらないので Stackoverflow で探してたらこういうのを見つけた。

stackoverflow.com

あとは Elixir でアレンジしてやれば良い。ざっとこんな感じかな。

defmodule HttpServer do
  @behaviour Application
  
  def start(_type, _args) do
    {:ok, _} = :cowboy.start_http(:http, 100,
      [ port: 3000 ],
      [ env: [ dispatch: dispatch ], onresponse: &modify/4 ])
  end

defp dispatch do
:cowboy_router.compile([ {:_, [ {"/", Handler, []} ]} ])
end defp modify(code, headers, body, req) do after_headers = List.keyreplace(headers, "server", 0, {"server", "your_server_sig"}) :cowboy_req.reply(code, after_headers, body, req) end end

このモジュールでは onresponse hook に HttpServer.modify/4 を参照するようにして、レスポンスを送信する前にサーバシグネチャーを任意の文字列に置換している。

この HTTP サーバを立ち上げて、http://<host>:3000 にアクセスしてレスポンスヘッダを見ると "server: your_server_sig" となっている。

 

cowboy 2.0.0-pre1 + Elixir 1.0.4 環境下で使うことを想定しています。

 

参考:

rest - Erlang Cowboy change server signature in HTTP headers - Stack Overflow

Nine Nines Support: Cowboy User Guide

平成25年度アドミッションセンター入試を受験して【面接編】

入試

 この記事では、AC入試の面接試験の開始前から開始後の過程を記している。なお、この記事は試験の翌日に下書きして保存しておいたものである。


 時は2012年10月10日の水曜日、午前10時半頃。私は筑波大学の3B棟の玄関付近で同大学の先輩とAC入試について話していた。内容としては、去年はどのような形態で面接が実施されたのか、試験官からどのような質問を受けたのかなどである。彼曰く、当時は5人の面接官が居たらしく、意地悪な質問を投げかけられたり、15分程で面接を終了させられるなど絶望を味わっていたらしい。だが、こういった話は以前から直接聞いていたので、既に覚悟はできていた。だから、あのとき「ショータイムだ」とか「存分に話してやるよ」とかが言えるほど、私は余裕を持っていたのかもしれない。

 

 先輩と別れた頃、時は既に10時55分を過ぎていた。大学側から「試験開始30分前には試験会場に来ること」と指示されていたので、会場に行くのには妥当な時間であった。そして私は「AC入試試験会場 国際科学オリンピック特別入試試験場」と記された縦長の看板の横を通り過ぎるように試験場へと向かっていったのである。

 

  3B棟の入り口に入ってからすぐ右にAC入試の受付があった。ここで、ブレザーの内ポケットに入れてあった受験票を5, 60代の男性の受付係に提示した。受付係は白い机の上にあった確認用紙の「田所 真幸」に黒いペンで丸く囲み、確認の完了を伝えるとともに、私を控え室(*1)へと案内した。

 

 控え室には2人の受験生が待機していた。当時は情報科学類の他に生物学類も試験を実施していたので、おそらくどちらかを受験するのだろうと思っていた。後に、1人は情報科学類(私の1つ前)、もう1人は生物学類(おそらく国際科学オリンピック特別入試)の受験生であることがわかった。(*2)

 

 控え室の黒板の中央には試験時間(*3)および注意事項が表記された紙が2枚貼られていた。左側の紙はAC入試、右側の紙は国際科学オリンピック特別入試にそれぞれ関連している。左側の紙に目を移すとそこで驚きの事実を突き付けられることになる。

 

 情報科学類の受験者数が「8名(*4)

 

 これは意外な事実であった。過去の入試結果を見るとほとんどの年度では10人以上が第一次選考を通過している。だが今年度は違っていた。また募集人数と同値であることに疑問を持たざるを得なくなった。「難易度を上げたのか?」「偶然の結果なのか?」「書類選考ですべてを決めてしまうつもりなのか?」などと様々な憶測が飛び交ったが、後にAC入試の特質からして偶然の結果であると結論付けることに至った。

 

 1人、また1人と受付係に呼び出されて控え室から退出していく。彼らとは目を合わせて、会釈しかしていないが、私は内心では「頑張ってこい!そして来年、入学式で会おう!」と応援していた。そして、控え室には私一人だけが残ることになったのだ。

 

 こうして一歩一歩、面接試験に近づいていくわけだ。壁に掛かっている時計が時を刻むごとに、心の余裕が失われていくほど不安で怖いものはない。だが、緊張を無理矢理でも抑えつつ、極力余裕を持とうとしていた。緊張してアピールできなければ、面接という貴重な場面を失うことを意味していたからである。

 

  時は11時25分頃、1人しかいない控え室の扉が開いた。そう、呼び出されるときが来たのである。

 

受付係「受験番号******の田所真幸さんですか?」

「はい。」

受付係「受験時刻の5分前になりましたので、荷物をすべて持ってください。控え室には戻れませんので。」

「ありがとうございます。」

 

 一言一言を確実に覚えているわけではないが、私の記憶では上のような会話が交わされていた。AC入試はAO入試の一種であるから、あらゆる面において総合的に評価されると思っていた。だからこそ、一つ一つの行動に対して丁寧に応対するように心がけていたのである。

 

 控え室を出て、受付係の後に従って試験室(*5)の前まで歩いた。試験室に近づくとともに、部屋から微かに声が漏れて聞こえる。面接の様子が気になっていたので受付係が言っていた言葉は詳しく覚えていない。だが「今、中で受験している人が試験室から退出しても、試験官から『どうぞ』と言われるまでは入室しないでください。」という諸注意をいただいたのは覚えている。

 

 では、まずは入室する際はどのような様子であったかを再現してみる。

 

(試験室の扉が開いた)

1つ前の受験生「ありがとうございました!失礼します!」

(この受験生は、私と目を合わせて会釈しつつ、出口に向けて歩いて行った)

面接官①「次の方どうぞ、お入りください。」

(荷物を持ち、扉付近で挨拶する)

「失礼します。」

面接官①「荷物をそこ(机)において、どうぞおかけください。」

(椅子に座る前に、さらに挨拶をする)

「お願いします。」

 

 ここで、試験室の内部と面接官について説明する。まず、部屋内のレイアウトは下図のようになっており、典型的な面接の形態であると言える。私と面接官との距離は予想以上に遠かった。だが、全員の面接官を見渡せるほどの視野を保つことはできた。

 

f:id:Saneyan:20121016021250p:plain

 

 面接官は3人であった。向かって左側の面接官はアドミッションセンターの方で、中央の面接官と右側の面接官は筑波大学の准教授であった。この記事では、左側の面接官を 面接官① 、中央の面接官を 面接官② 、右側の面接官を 面接官③ と呼ぶことにする。

 

 最初は、私の緊張をほぐすかのような感じで面接が始まった。面接の内容をすべて覚えているわけがないので、あやふやな会話しか思い出すことができない。

 

面接官①「この面接はあなたがアピールする場です。肩の力を抜いて、落ち着いて話してください。」

(私のカバンを見て言った)

面接官①「荷物が多いようですが、大阪から来たのですね。」

「はい、そうです。」

面接官①「昨日はホテルで何をしていましたか?」

「・・・。たたずんでいました。」

(ここで笑いが起こった)

面接官①「では、あなたが今までやってきたこと、例えば、OSなどの最もアピールしたいところを、えっと、5分くらいで話してください。」

「え、自分が作ったOSのことですか?」

面接官①「はい。それでもかまいません。」

 

 インターネットでAC入試の面接試験について調べたことがあるが、経験者によると5分間要約があったようだ。今回の面接でも、その5分間要約を要求されたのだ。あらかじめ予測していたことだったので、焦る気持ちはなかった。私は、OSに近いプログラムを作成した他にも、Web開発や学生団体で活動したりした。だが、この5分間要約では、自分が最も話したいOSに近いプログラムについて話すことにした。もちろん、このようにしたのも正当な理由があり、それは大学ではOSに関連する研究や開発を行いたいからである。この記事では、5分間要約の内容は省略させていただくことにする。

 

  私がこの話をしている間、面接官②はうなずきながらじっと聞いていた。話すことに対して理解はしてくれていたようであった。私はその面接官の顔を見ながら様子をうかがいつつ、話を進めた。面接官②は、話を聞きながら何やらメモを取っていた。時々、「ほぉー」という表情があったりなどマイナスイメージを連想させるような状況は起きなかった。5分間要約を終えると、面接官③が質問を投げかけてきた。

 

面接官③「フォントを自作した、ということなんですが、これは、ビットマップフォントですか?」

「はい、ビットマップフォントです。1カ月ほどかけて自作しました。」

面接官②「このプログラムは、すべて独自で作ったのですか?その、ライブラリとかを使わずに?」

「そうです。すべて独自でやりました。」

 

 こういった感じで面接は順調に進んでいくはずだった。しかし、面接官②が私に対して一言疑問の声をかけた。

 

面接官②「これは、OSじゃないよね。」

「OSではなくて、DOSに近いプログラムですね。」

面接官②「いや、DOSでもファイルシステムとか・・・あるよね。」

「はい。本来はそういった機能なども付け加えていく予定だったのですが、どうしても解決しきれない点がありまして、それで、開発を中止せざるを得なくなったんです。」

 

 この間に、私の焦り度は急上昇した。しかし、相手が納得できるように説明を続けた。大まかに言えば「本来はこうするつもりでしたが、こういう理由で、こうなりました。」というニュアンスで答えたわけだ。そして「大学ではOSに関することを学んで、開発を再開させたいです。」と過去から未来へと橋を繋ぐようにしてストーリを展開させた。マイナスをプラスに持っていくという、高校の担任が言っていた方法をここで使わせてもらった。

 

 5分間要約に関する質問等が終わると、大学で取り組みたいことについて聞かれた。

 

面接官②「大学に入って、何かやりたいこととかある?」

「はい。まず第一にですが、僕は独学ですべてやってきたので、抜け目が多いんですね。なので、この抜け目をなくしていきたいです。あと、それから、大学ではWebとOSとの関係が密接になるような研究・開発をしたいと考えています。」

面接官②「それって、Chrome OSとか・・・あるよね?」

「はい。それはUbuntuをベースにしてますよね。そうではなくてこんな感じで、すべてをウェブアプリケーションにしてしまえばいいと思うんですよ。」

面接官②「え、全部ウェブアプリケーションにするの?」

「はい。(あとはいろいろと説明して)」

(面接官①が面接官②に顔を合わせて)

面接官①「確かに、そうかもしれませんね。」

面接官②「なるほどね。」

 

 このように、何とか納得してもらえるように努力した。この後は、面接官③からTwitterの日付検索サービスやLiasという学生団体SNSに関することなどを聞かれたが、難なく答えることができた。

 

  面接官①の「あと5分ありますね。」という言葉を聞いたときは「え?もうそんなに経ったの?」と思った。体感的には10分くらいだったものの、既に25分が経過していたのだ。あとの5分は面接官①のハードウェアレベルでのデバッグに関するお話を聞いたり、私からの質問に対する回答を聞いた。

 

 面接試験が終わった直後は「楽しかった」という感想しか残ってなかった。私の今までの取り組みを理解してくれたり、それについていろいろと指摘してもらったりしたことに、面接する楽しさというものを味わっていた。あと、面接という場は、自分を存分にアピールすることのできる場であるということも実感できた。それから言いたいことは一通り言った。だから悔いはない。人生初の面接であったが、この貴重な経験は、以後大切にしていきたい。


*1. 控え室の部屋番号は覚えていない。扉は青色で、真ん中にはガラスがあり、部屋の中を見ることができた。また、部屋の中は白く、前には黒板があり、2人用の机が6個とそれぞれの机に椅子が2個ずつ配置されていた。扉の反対側には大き目の窓があるが、横型ブラインドがかかっており、外から様子をうかがうことはできない状態になっていた。窓の上部が開いていたため、部屋が涼しく、時々外から人の声が聞こえていた。

*2. 受験生が出入りする試験室から察した。

*3. 私の試験時間は11:30~12:00の30分間であった。黒板に貼られていた紙から察すると、午前の部は私で最後だった。つまり午前は5人、午後は3人受験することになっていたわけだ。

*4. 先輩から聞いた情報によると、8人の受験者のうち1人はSFCのAO入試を受験するということで、今回の面接試験は辞退しているとのこと。

*5. 試験室の部屋番号は覚えていない。扉は控え室と同様の青色で真ん中にガラスがあった。しかし、白色の紙で内側から覆われていて、内部を見ることはできなかった。

Openfiler で Virtio を有効にする

Openfiler Virtio

 Openfiler で Virtio を有効にする方法を見つけたので、この記事にその方法を書き留めておく。

 

initrd の作成


 まずは既存の initrd のファイル名を確認する。

[root@localhost ~]# dir /boot | grep initrd

 

 virtio_blk, virtio_pci, virtio_net の3つのモジュールを含む initrd を作成する。このときのファイル名は先程確認した initrd のファイル名と同一にしておく。

[root@localhost ~]# mkinitrd -f /boot/initrd-2.6.32-71.18.1.el6-0.20.smp.gcc4.1.x86_64.img --with=virtio_blk --with=virtio_pci --with=virtio_net $(uname -r)

 

list-disks の設定


 /opt/openfiler/sbin/list-disks.pl を編集する。Perl の構文を知っていれば難なく出来るはず (とは言っても最後に触れたのは4年くらい前だが)。170と338行目のところに以下のコードを追加する。追加位置を把握しやすくするために前後のコードも載せておく。

[root@localhost ~]# vim /opt/openfiler/sbin/list-disks.pl
...

elsif (/\d+\s+\d+\s+\d+\s+xvd(\S)\s/) {
    # Xen Virtual Disk
    local $d = $1;
    push(@devs, "/dev/xvd$d");
}

### ADD THE FOLLOWING LINES (at line 170) ###
elsif (/\d+\s+\d+\s+\d+\s+vd(\S)\s/ || /\d+\s+\d+\s+\d+\s+vd(\S\D)\s/) {
    # virtio raid device
    local $d = $1;
	push(@devs, "/dev/vd$d");
}
### END ###

elsif (/\d+\s+\d+\s+\d+\s+vd(rc\/c(\d+)d\d+)\s/) {
    # Mylex raid device
    push(@devs, "/dev/$1");
}

...

elsif ($disk->{'device'} =~ /\/xvd(\S)$/) {
    # Xen disk
    $disk->{'desc'} = &text('select_device', 'IDE', uc($1)); 
	$disk->{'type'} = 'ide';
}

### ADD THE FOLLOWING LINES (at line 338) ###
elsif ($disk->{'device'} =~ /\/vd(\S)$/) {
    # VIRTIO disk
	$disk->{'desc'} = &text('select_device', 'IDE', uc($1)); 
	$disk->{'type'} = 'ide';
}
### END ###

elsif ($disk->{'device'} =~ /\/(scsi\/host(\d+)\/bus(\d+)\/target(\d+)\/lun(\d+)\/disc)/) {
...

 

その後


 仮想マシンを停止させ、ディスクバスと NIC のデバイスモデルを Virtio に変更する。そして起動させる。うまく起動できれば Virtio が有効になっている。

 

参考サイト

https://project.openfiler.com/tracker/ticket/900

ML110 G7 でサーバ構築 I

 

はじめに

 この記事には先日購入した ML110 G7 でサーバを構築する過程を記している。細かい設定が幾つかあるので備忘も兼ねて作成した。サーバを構築するにあたり、自分が挑戦してみたいことを以下にリストアップしてみる。

  • mdadm で RAID 1 を構築
  • LVM2 で論理ボリュームの容量を可変にする
  • LUKS によるパーティションの暗号化でセキュリティを高める
  • KVM仮想マシンを作成する
  • 仮想マシンにゲスト OS として FreeBSD をインストールする
  • 仮想マシンをサーバとして構築し外部に公開できるようにする
  • 物理・仮想 NIC をブリッジ接続させ、iptables によるパケットフィルタリングを行う
  • ホスト OS には GNOME をインストールする

 ML110 G7 には Smart Array B110i と呼ばれる RAID コントローラが付いているが、適用できる HDD の最大数が2台という大きな制約がある。これに対して RAID ボードを用意できればいいのだが、資金を調達できないため断念するしかない。結果的に、ソフトウェア RAID に頼らざるを得ないわけだ。そこで mdadm を利用する。RAID レベルは 1 で、2台を1ペアとして構築するという具合である。LVM を利用する理由は、近いうちにさらに1ペアを追加して容量増大を図るためであり、必要に応じてボリューム容量を変更できるからである。

 ひと通りのインストール作業を終えた後は仮想 NIC の作成など、仮想マシンをサーバとして機能させるのに必要な設定を行なっていく。

 

環境

  • サーバ機: HP Proliant ML110 G7
  • HDD: 2台 (250GB, 320GB)
  • IP 1: 192.168.24.71 (eth0)
  • IP 2: 192.168.24.72 (br0, MAC: 00:00:00:00:00:01)
  • IP 3: 192.168.24.73 (tap0, MAC: 00:00:00:00:00:02)
  • gentoo-sources: 3.6.11

 ※ IP は CTU 側で固定 IP を割り振るように設定してある。

 

ブートドライブの設定

  POST 画面が表示されている間に F11 キーを押すとブートメニューが表示される。

f:id:Saneyan:20130113234614p:plain

 

 今回は USB ドライブから Live CD を起動させるので「3」を選択する。

f:id:Saneyan:20130113234811p:plain

 

Gentoo Linux のインストール

ブート


 Live CD からのブート時に、途中でキーボードタイプの設定ができるので使っているキーボードのタイプに合わせること。一定時間が経つと自動的にデフォルトの US が適用される。

f:id:Saneyan:20130114000340p:plain

 

SSH でリモート操作


  Live CD を起動させた後、SSH でリモート操作できるように準備する。まずはネットワークの設定。

livecd ~ # net-setup eth0

 

 インターフェースの詳細を確認したら「< Yes >」を押す。

f:id:Saneyan:20130114001553p:plain

 

 有線接続か無線接続かを選択する。インターネットには有線で接続しているので「2 My network is wired」を選択する。

f:id:Saneyan:20130114002201p:plain

 

 DHCP か静的 IP かを選択する。CTU 側で固定 IP を振るように設定してあるが DHCP にしても IP は取得できるので「1 Use DHCP to auto-detect my network settings」を選択する。

f:id:Saneyan:20130114002940p:plain

 セットアップが完了したら ifconfig コマンドで NIC が認識されていることを確認する。

 

 次にパスワードを設定する。

livecd ~ # passwd

 そして SSH デーモンを起動。

livecd ~ # /etc/init.d/sshd start

 あとはクライアントからホストに SSH 接続して操作する。

livecd ~ # ssh root@192.168.24.71

 

 カーネルモジュールのロード


 LVM と RAID 1 が扱えるように「raid1」と「dm-mod」の2つのカーネルモジュールをロードしておく。

livecd ~ # modprobe raid1
livecd ~ # modprobe dm-mod

 

パーティションの作成


  /dev/sda, /dev/sdb の両方に同じパーティションを設定する。ミラーリングさせたい領域にはパーティション ID を fd (Linux raid autodetect) に設定する。/dev/sda1 と /dev/sdb1 にはブート可能フラグをセットしておくこと。/dev/sda2 と /dev/sda2 は LVM 領域として扱う。

Partition/dev/sd[ab]SizeType
/dev/sd[ab]1 /boot 1024MB fd (Linux raid autodetect)
/dev/sd[ab]2 - remainder fd (Linux raid autodetect)

 

 fdisk でパーティションを作成する。m コマンドでヘルプを表示でき、q コマンドで終了できる。

livecd ~ # fdisk /dev/sda
Welcome to fdisk (util-linux 2.21.2).
...
Command (m for help): 

 

 まずはブートパーティションを作成する。n コマンドで新規パーティションが作成できる。

Command (m for help): n

 

 次に基本パーティションか拡張パーティションかを決める。ここでは「p」の基本パーティションを選択する。

Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p

 

 適用するパーティション番号を選択する。現在、1つしかパーティションがないので「1」を選択する。

Partition number (1-4, default 1): 1

 

 ここから指定のサイズに分割していくが、AFT を採用した HDD を使っている可能性があるので各パーティションの開始セクタは 8 の倍数にしたほうがよい。ブートパーティションの開始セクタはデフォルトの LBA 2048 に設定する。

First sector (2048-488397167, default 2048): (Enter)
Using default value 2048

 

 パーティションサイズを設定する。ここでは終了セクタ、任意のセクタ数、任意のサイズ (単位は G, M, K) のいずれかを入力する。

Last sector, +sectors or +size{K,M,G} (2048-488397167, default 488397167): +1024M
Partition 1 of type Linux and of size 1 GiB is set

 

 t コマンドでパーティション ID を設定する。現在、1つしかパーティションがないので自動で1番が選択される。

Command (m for help): t
Selected partition 1

 

 ID を入力する。ID は L コマンドで一覧できる。

Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)

 

 a コマンドでブートパーティションにブート可能フラグを付ける。

Command (m for help): a
Partition number (1-4): 1

 

 残りのパーティションと /dev/sdb に対しても同じ流れで設定していけばよい。最終的には以下のようになる。

livecd ~ # fdisk -l

Disk /dev/sda: 250.1 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders, total 488397168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xce8cf09e

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   fd  Linux raid autodetect
/dev/sda2         2099200   488397167   243148984   fd  Linux raid autodetect

Disk /dev/sdb: 319.9 GB, 319936615424 bytes
255 heads, 63 sectors/track, 38896 cylinders, total 624876202 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x46936882

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *        2048     2099199     1048576   fd  Linux raid autodetect
/dev/sdb2         2099200   624876201   311388501   fd  Linux raid autodetect


RAID アレイの構築


 下表に従って RAID アレイを構築していく。/dev/md1 はブート用、/dev/md2 はLVM 用のデバイス。

ArrayPartitionDirectoryLevelHomehostNameMetadata
/dev/md1 /dev/sd[ab]1 /boot 1 - - 0.90
/dev/md2 /dev/sd[ab]2 / 1 host lvm 1.2 (Default)

 

 まずはデバイスファイルを作成する。

livecd ~ # mknod /dev/md1 b 9 1
livecd ~ # mknod /dev/md2 b 9 2

 

 次に mdadm (v3.1.4) で RAID アレイを構築する。/dev/md1 のメタデータのバージョンは 0.90 にする必要がある。そうしないと GRUB のセットアップができなくなる。

livecd ~ # mdadm --create /dev/md1 \
> --verbose \
> --assume-clean \
> --level=1 \
> --raid-devices=2 \
> --metadata=0.90 \
> /dev/sd[ab]1
...
Continue creating array? yes <- 'yes' or 'no'
...
mdadm: array /dev/md1 started.

 

 /dev/md2 のメタデータはデフォルトの v1.2 にする。--homehost と --name に任意の文字列をアサインしてデバイス名を命名しておくと、mdadm が自動アセンブルするときに /dev/md/[homehost]:[name] というリンクを作ってくれる。これで /dev/md2 が /dev/md127 にリネームされても問題ない。

livecd ~ # mdadm --create /dev/md2 \
> --verbose \
> --assume-clean \
> --level=1 \
> --raid-devices=2 \
> --homehost=host \
> --name=lvm \
> /dev/sd[ab]2
...
mdadm: array /dev/md2 started.

 

 構築が完了したら次のコマンドを実行して mdadm.conf を更新する。

mdadm --detail --scan >> /etc/mdadm.conf

 

 RAID アレイの状態は /proc/mdstat で見ることができる。 

livecd ~ # cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] [linear] [multipath]
md2 : active raid1 sdb2[1] sda2[0]
      243147824 blocks super 1.2 [2/2] [UU]

md1 : active raid1 sdb1[1] sda1[0]
      1048512 blocks [2/2] [UU]

unused devices: <none>

 

 また、ディスクアレイの詳細は mdadm --detail /dev/mdx で見ることができる。

livecd ~ # mdadm --detail /dev/md1
/dev/md1:
        Version : 0.90
  Creation Time : Mon Jan 14 03:16:03 2013
     Raid Level : raid1
     Array Size : 1048512 (1024.11 MiB 1073.68 MB)
  Used Dev Size : 1048512 (1024.11 MiB 1073.68 MB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 1
    Persistence : Superblock is persistent

    Update Time : Mon Jan 14 04:21:34 2013
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           UUID : 6532958d:e5e4affc:2840be58:c7aa88bb
         Events : 0.1

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       8       17        1      active sync   /dev/sdb1

 

暗号化


  /dev/md2 を暗号化する。暗号化アルゴリズムは AES、ハッシュアルゴリズムは SHA-256、鍵長は 256bit に設定しておく。

livecd ~ # cryptsetup luksFormat --cipher aes-cbc-essiv:sha256 --key-size 256 /dev/md2

 

 暗号化されるとデータが上書きされる。この作業は取り消しできないので注意すること。大文字で「YES」と入力し、パスワードの設定をする。

WARNING!
========
This will overwrite data on /dev/md2 irrevocably.

Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase: (Password)
Verify passphrase: (Password)

 

 この後、LVM の論理ボリュームを作っていくのでロックされたデバイスをアンロックし、/dev/mapper/encrypted からアクセスできるようにする。

livecd ~ # cryptsetup luksOpen /dev/md2 encrypted
Enter passphrase for /dev/md2: (Password) 

 ※ 誤って /dev/md2 にアクセスしないように。データが破壊される恐れがある。

 

論理ボリュームの作成


/dev/VG/LVSizeFile system
/dev/vg/root 10GB ext4
/dev/vg/swap 3GB swap
/dev/vg/home 10GB ext4
/dev/vg/usr 20GB ext4
/dev/vg/opt 5GB ext4
/dev/vg/var 20GB ext4
/dev/vg/tmp 10GB ext4

 

  まずは pvcreate コマンドで物理ボリュームを作成する。

livecd ~ # pvcreate /dev/mapper/encrypted
  Writing physical volume data to disk "/dev/mapper/encrypted"
  Physical volume "/dev/mapper/encrypted" successfully created

 

 次に vgcreate コマンドでボリュームグループを作成する。VG 名は「vg」

livecd ~ # vgcreate vg /dev/mapper/encrypted
  Volume group "vg" successfully created

 

 上表に従って lvcreate コマンドで論理ボリュームを作成する。

livecd ~ # lvcreate -L10G -nroot vg
  Logical volume "root" created
livecd ~ # lvcreate -L3G -nswap vg
  Logical volume "swap" created
livecd ~ # lvcreate -L10G -nhome vg
  Logical volume "home" created
livecd ~ # lvcreate -L20G -nusr vg
  Logical volume "usr" created
livecd ~ # lvcreate -L5G -nopt vg
  Logical volume "opt" created
livecd ~ # lvcreate -L20G -nvar vg
  Logical volume "var" created
livecd ~ # lvcreate -L10G -ntmp vg
  Logical volume "tmp" created

 

 物理ボリューム、ボリュームグループ、論理ボリュームの状態はそれぞれ pvs, vgs, lvs で確認できる。 

livecd ~ # pvs
  PV                    VG   Fmt  Attr PSize   PFree
  /dev/mapper/encrypted vg   lvm2 a--  231.88g 153.88g

 

livecd ~ # vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  vg     1   7   0 wz--n- 231.88g 153.88g

 

livecd ~ # lvs
  LV   VG   Attr   LSize  Origin Snap%  Move Log Copy%  Convert
  home vg   -wi-ao 10.00g
  opt  vg   -wi-ao  5.00g
  root vg   -wi-ao 10.00g
  swap vg   -wi-a-  3.00g
  tmp  vg   -wi-ao 10.00g
  usr  vg   -wi-ao 20.00g
  var  vg   -wi-ao 20.00g

 

フォーマットとスワップ領域の操作


 ブートパーティションを ext2 でフォーマットする。ext3 か ext4 でフォーマットすると、これもまた GRUB のセットアップができなくなる。

livecd ~ # mkfs.ext2 /dev/md1

 

 それぞれの論理ボリュームをフォーマットする。ファイルシステムext4

livecd ~ # mkfs.ext4 /dev/vg/root
livecd ~ # mkfs.ext4 /dev/vg/home
livecd ~ # mkfs.ext4 /dev/vg/usr
livecd ~ # mkfs.ext4 /dev/vg/opt
livecd ~ # mkfs.ext4 /dev/vg/var
livecd ~ # mkfs.ext4 /dev/vg/tmp

 

 スワップ領域を作成し、有効にする。

livecd ~ # mkswap /dev/vg/swap
livecd ~ # swapon /dev/vg/swap

 

マウント


 ブートパーティションと論理ボリュームをマウントする。まずは /mnt/gentoo がルートになるように /dev/vg/root をマウントする。

livecd ~ # mount /dev/vg/root /mnt/gentoo

 

 カレントディレクトリを /mnt/gentoo に変更し、各論理ボリュームとブートパーティションに対応するマウントポイントを作成する。

livecd ~ # cd /mnt/gentoo
livecd gentoo # mkdir boot home usr opt var tmp

 

 そしてマウントしていく。

livecd gentoo # mount /dev/md1 /mnt/gentoo/boot
livecd gentoo # mount /dev/vg/home /mnt/gentoo/home
livecd gentoo # mount /dev/vg/usr /mnt/gentoo/usr
livecd gentoo # mount /dev/vg/tmp /mnt/gentoo/tmp
livecd gentoo # mount /dev/vg/var /mnt/gentoo/var
livecd gentoo # mount /dev/vg/opt /mnt/gentoo/opt

 

インストールファイルのダウンロードと展開


 stage3 ファイルと最新の Portage をダウンロードする。まずは links コマンドでミラーサイトに行く。

livecd gentoo # links http://www.gentoo.org/main/en/mirrors.xml

 

 ミラーサイトに行くと下のスクリーンショットのように表示される。矢印キー (↑・↓) でカーソル移動ができる。また z で前のページに戻り、x で先のページに進むことができる。左サイドバーにある「Mirrors」にカーソルを移し、 Enter でそのページにリンクする。

f:id:Saneyan:20130115013731p:plain

 

 Mirrors ページの下部にある ChannelX.biz (http) にカーソルを移し、リンクする。

f:id:Saneyan:20130115013722p:plain

 

 releases → amd64 → current-stage3 と移動して stage3-amd64-20121210.tar.bz2 を保存する。

f:id:Saneyan:20130115015129p:plain

 

 releases → snapshots → current と移動して portage-latest.tar.bz2 を保存する。必要なインストールファイルを一通り保存したので q で links を閉じる。

f:id:Saneyan:20130115015541p:plain

 

 stage3-amd64-20121210.tar.bz2 を展開する。

livecd gentoo # time tar xvjpf stage3-amd64-20121210.tar.bz2
...
real    0m41.069s
user    0m32.310s
sys     0m2.760s

 

 カレントディレクトリを一時的に /mnt/gentoo/usr に変更し、portage-latest.tar.bz2 を展開する。

livecd gentoo # time tar xvjf /mnt/gentoo/portage-latest.tar.bz2 -C /mnt/gentoo/usr
...
real    0m37.110s
user    0m20.980s
sys     0m5.020s

 

 圧縮ファイルは不要なので削除しておく。 

livecd gentoo # rm -f portage-latest.tar.bz2
livecd gentoo # rm -f stage3-amd64-20121210.tar.bz2

 

ミラーサイトの選択


 mirrorselect コマンドでミラーサイトを選択し、make.conf を更新する。

livecd gentoo # mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf

 

 伝達遅延を考慮して日本のミラーサイトにする。

f:id:Saneyan:20130115022445p:plain

 

 Portage の更新で使うミラーサイトも付け足しておく。

livecd gentoo # mirrorselect -i -r -o >> /mnt/gentoo/etc/portage/make.conf

 

 make.conf を開き、GENTOO_MIRRORS="..." と SYNC="..." が追加されているかどうかを確認すること。 

 

make.conf の編集


 自分が使っている環境に合わせて make.conf を編集する。私は下のように編集した。

# These settings were set by the catalyst build script that automatically
# built this stage.
# Please consult /usr/share/portage/config/make.conf.example for a more
# detailed example.
CFLAGS="-O3 -pipe -march=core2 -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -mmmx -fomit-frame-pointer"
CXXFLAGS="${CFLAGS}"
# WARNING: Changing your CHOST is not something that should be done lightly.
# Please consult http://www.gentoo.org/doc/en/change-chost.xml before changing.
CHOST="x86_64-pc-linux-gnu"
# These are the USE flags that were used in addition to what is provided by the
# profile used for building.
USE="bindist mmx sse sse2 ssse3"

MAKEOPTS="-j3"

GENTOO_MIRRORS="http://gentoo.channelx.biz/ ftp://ftp.iij.ad.jp/pub/linux/gentoo/ rsync://ftp.jaist.ac.jp/pub/Linux

SYNC="rsync://rsync5.jp.gentoo.org/gentoo-portage"

 

 Note: MAKEOPTS="-jx" の 'x' は CPU の数 + 1 が望ましいらしい。

 

resolv.conf の作成


 resolv.conf を /mnt/gentoo/etc に作成する。

livecd gentoo # vi /mnt/gentoo/etc/resolv.conf

 

 DNS サーバは GoogleDNS サーバ (Google Public DNS) にしておく。

nameserver 8.8.8.8
nameserver 8.8.4.4

 

 Note: わざわざ作らなくても /etc/resolv.conf からコピーしてもよい。

livecd gentoo # cp -L /etc/resolv.conf /mnt/gentoo/etc

 

mdadm.conf のコピー


 mdadm の設定が記述されている mdadm.conf を /mnt/gentoo/etc にコピーしておく。

livecd gentoo # cp -L /etc/mdadm.conf /mnt/gentoo/etc

 

chroot 環境


 chroot 環境への移行に際し、必要なファイルシステムをマウントする。

livecd gentoo # mount -t proc none /mnt/gentoo/proc
livecd gentoo # mount --rbind /sys /mnt/gentoo/sys
livecd gentoo # mount --rbind /dev /mnt/gentoo/dev

 

 ルートディレクトリを変更し、環境変数を更新する。

livecd gentoo # chroot /mnt/gentoo /bin/bash
livecd / # env-update && source /etc/profile

 

Portage ツリーの更新


 --sync オプション付きで emerge コマンドを実行し、Portage ツリーの更新を開始する。

livecd / # emerge --sync

 

タイムゾーンの設定


livecd / # cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
livecd / # echo "Asia/Tokyo" > /etc/timezone

 

プロファイルの変更


 利用可能なプロファイルを表示する。適用されているプロファイルにはアスタリスクが付いている。

livecd / # eselect profile list
Available profile symlink targets:
  [1]   default/linux/amd64/10.0 *
  [2]   default/linux/amd64/10.0/selinux
  [3]   default/linux/amd64/10.0/desktop
  [4]   default/linux/amd64/10.0/desktop/gnome
  [5]   default/linux/amd64/10.0/desktop/kde
  [6]   default/linux/amd64/10.0/developer
  [7]   default/linux/amd64/10.0/no-multilib
  [8]   default/linux/amd64/10.0/server
  [9]   default/linux/amd64/10.0/x32
  [10]  hardened/linux/amd64
  [11]  hardened/linux/amd64/selinux
  [12]  hardened/linux/amd64/no-multilib
  [13]  hardened/linux/amd64/no-multilib/selinux
  [14]  hardened/linux/uclibc/amd64

 

 Gentoo をサーバ用途に使うので、ここでは8番の「default/linux/amd64/10.0/server」に変更する。

livecd / # eselect profile set 8

 

カーネルのインストール


 まずはカーネルソースをインストールする。

livecd / # time emerge -v gentoo-sources
...
real    4m23.535s
user    1m1.620s
sys     0m15.930s

 

  iptables でブリッジのパケットフィルタリングをしたいので、physdev モジュールを利用できるようにする。

livecd linux # echo CONFIG_NETFILTER_ADVANCED=y >> /usr/src/linux/.config
livecd linux # echo CONFIG_NETFILTER_XT_MATCH_PHYSDEV=y >> /usr/src/linux/.config

 

 カレントディレクトリを /usr/src/linux に変更し、カーネルの設定を行う。

livecd / # cd /usr/src/linux
livecd linux # make menuconfig

 

 ext4 ファイルシステムを扱えるようにする。

File Systems  --->
  <*> The Extended 4 (ext4) filesystem
    [*]   Use ext4 for ext2/ext3 file systems (NEW)
    [*]   Ext4 extended attributes (NEW)
    [*]     Ext4 POSIX Access Control Lists
    [*]     Ext4 Security Labels

 

 LUKS が使う暗号化アルゴリズム (AES) とハッシュアルゴリズム (SHA-256) をサポートする。

-*- Cryptographic API  --->
        *** Digest ***
  <*>   SHA224 and SHA256 digest algorithm
        *** Ciphers ***
  <*>   AES cipher algorithms (x86_64)

 

 RAID 1 と LVM を扱えるようにする。また、仮想マシンをネットワークに接続させたいので TUN/TAP を有効にする。

Device Drivers  --->
  [*] Multiple devices driver support (RAID and LVM)  --->
    <*>   RAID support
    <*>     RAID-1 (mirroring) mode
    <*>   Device mapper support
    <*>     Crypt target support
    [*] Network device support  --->
      <M>     Universal TUN/TAP device driver support

 

 ブリッジ接続できるようにする。

[*] Networking support  --->
  Networking options  --->
    <*> 802.1d Ethernet Bridging
    <*> 802.1Q VLAN Support

 

 KVM による仮想化を有効にする。AMD のプロセッサを使用している場合は「KVM for AMD processors support (NEW)」を選択する。

[*] Virtualization (NEW)  --->
  <*>   Kernel-based Virtual Machine (KVM) support
  <*>     KVM for Intel processors support
  < >     KVM for AMD processors support (NEW)

 

 KSM を有効にする。

Processor type and features  --->
  [*] Enable KSM for page merging

 

 カーネルをコンパイルする。

livecd linux # time make && make modules_install
...
real    11m22.920s
user    9m54.290s
sys     0m30.590s

 

 カーネルをインストールする。

livecd linux # cp /usr/src/linux/arch/x86_64/boot/bzImage /boot/kernel

 

initramfs の生成


 まずは genkernel, vim, mdadm, lvm2, cryptsetup を emerge する。

livecd linux # emerge -av genkernel vim mdadm lvm2 cryptsetup

 

 genkernel コマンドで initramfs を生成する。rootfs のマウントには mdadm による自動アセンブル、LUKS によるデバイスのアンロック、LVM 2 による論理ボリュームのアクティブ化が必要になるので --mdadm, --luks, --lvm オプションを付け足しておく。

livecd linux # genkernel --install --no-ramdisk-modules --mdadm --luks --lvm initramfs

 

 initramfs のファイル名が少し長いので「initramfs」にリネームする。

livecd linux # mv /boot/initramfs-genkernel-x86_64-3.6.11-gentoo /boot/initramfs

 

fstab の編集 


 fstab を編集し、ファイルシステムがブート時に自動マウントされるようにする。(ここから vim コマンドでファイル編集ができるのは Vimmer として嬉しい)

livecd linux # vim /etc/fstab

 

 mdadm は自動アセンブルするときに、RAID デバイスの名前を md127, md126, md125... としていくようだ。この機構を利用して1行目のファイルシステムを「/dev/md126」とした。LVM の物理ボリューム にあたる /dev/md127 は initramfs 内で自動アセンブルされる。私は次のように編集した。

/dev/md126             /boot           ext2            noauto,noatime  1 2
/dev/vg/root            /               ext4            noatime         0 1
/dev/vg/swap            none            swap            sw              0 0
/dev/vg/home            /home           ext4            noatime         1 2
/dev/vg/usr             /usr            ext4            noatime         1 2
/dev/vg/opt             /opt            ext4            noatime         1 2
/dev/vg/var             /var            ext4            noatime         1 2
/dev/vg/tmp             /tmp            ext4            noatime         1 2
/dev/cdrom              /mnt/cdrom      auto            noauto,ro       0 0

 

ホスト名の設定 


 /etc/conf.d/hostname を編集し、ホスト名を設定する。

livecd linux # vim /etc/conf.d/hostname

 

 私は次のように編集した。

# Set to the hostname of this machine
hostname="host"

 

net の編集


 /etc/conf.d/net を編集し、DHCP の設定をする。

livecd linux # vim /etc/conf.d/net

 

 ブリッジと TAP の設定は再起動後に行うことにする。私は次のように編集した。

config_eth0="dhcp"

 

ロケールの設定


 /etc/locale.gen を編集し、ロケールの設定をする。#en_US.UTF-8 UTF-8 の # を外す。

livecd linux # vim /etc/locale.gen

 

 /etc/env.d に 02locale ファイルを作成する。

livecd linux # vim /etc/env.d/02locale

 

 私は次のように環境変数を設定した。

LANG="en_US.UTF-8"
LC_COLLATE="C"

 

 環境変数を更新しておく。

livecd linux # env-update && source /etc/profile 

 

 システムツールのインストール


 Syslog-ng, dhcpcd, fcron, iptables, sudo を emerge する。

livecd linux # emerge -av dhcpcd syslog-ng fcron iptables sudo

 

 Syslog-ng, dhcpcd, fcron が自動的に起動するように設定。

livecd linux # rc-update add syslog-ng default
 * service syslog-ng added to runlevel default
livecd linux # rc-update add fcron default
 * service fcron added to runlevel default
livecd linux # rc-update add dhcpcd default
 * service dhcpcd added to runlevel default

 

 LVM 2 と mdadm がブート時に自動的に起動するように設定。 

livecd linux # rc-update add mdadm boot
 * service mdadm added to runlevel boot
livecd linux # rc-update add lvm boot
 * service lvm added to runlevel boot

 

ネットワークインターフェースの設定


 eth0 ネットワークインターフェースを作成する。

livecd linux # ln -s /etc/init.d/net.lo /etc/init.d/net.eth0

 

 eth0 を自動的に有効にする。

livecd linux # rc-update add net.eth0 default
 * service net.eth0 added to runlevel default

 

ユーザの設定


 root ユーザのパスワードを設定する。

livecd linux # passwd
New password: (Password)
Retype new password: (Password)
passwd: password updated successfully

 

 一般ユーザを追加する。

livecd linux # useradd user

 

 一般ユーザのパスワードを設定する。

livecd linux # passwd user
New password: (Password)
Retype new password: (Password)
passwd: password updated successfully

 

 このユーザを sudoer に追加。

root ALL=(ALL) ALL
user ALL=(ALL) ALL

 

GRUB の設定


 まずは GRUB を emerge する。

livecd linux # emerge -av grub

 

 /boot/grub/grub.conf を編集する。

livecd linux # vim /boot/grub/grub.conf

default 0
timeout 10
splashimage=(hd0,0)/boot/grub/splash.xpm.gz

title Gentoo Linux
root (hd0,0)
kernel /boot/kernel crypt_root=/dev/md/host:lvm real_root=/dev/vg/root dolvm doluks domdadm
initrd /boot/initramfs

 

 grub コマンドで2台の HDD に GRUB をインストールする。

livecd linux # grub

 

 /boot/grub/stage1 を含むパーティションを検出する。

grub> find /boot/grub/stage1
 (hd0,0)
 (hd1,0)

 

 ルートを指定し、特定のパーティションをセットアップする。

grub> root (hd0,0)
 Filesystem type is ext2fs, partition type 0xfd

grub> setup (hd0)
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Checking if "/boot/grub/e2fs_stage1_5" exists... yes
 Running "embed /boot/grub/e2fs_stage1_5 (hd0)"...  17 sectors are embedded.
succeeded
 Running "install /boot/grub/stage1 (hd0) (hd0)1+17 p (hd0,0)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded
Done.

 

 (hd1,0) も同じ流れで設定する。

 

 quit コマンドで GRUB の設定を終了する。

grub> quit

 

再起動


 chroot 環境から元に戻り、ファイルシステムをアンマウントする。

livecd linux # exit
exit
livecd ~ # umount -l /mnt/gentoo{/usr,/home,/opt,/tmp,/var,/boot,/}

 

 最後に reboot コマンドで再起動する。

livecd ~ # reboot

 

その後 

 ブート中にアンロックのためのパスワードが要求されるので、cryptsetup で設定したパスワードを入力する。

 

 f:id:Saneyan:20130116074226p:plain

 そして下のスクリーンショットのようにログイン画面が表示されたらインストール成功!

f:id:Saneyan:20130116074233p:plain

 

 次は iptablesKVM などの設定をしていく。 

 

参考になったサイト

  1. KVM - Gentoo Linux Wiki: http://en.gentoo-wiki.com/wiki/KVM
  2. Gentooインストール記 システムの構築: http://bd.tank.jp/gentoo/install4.html
  3. dm-crypt による暗号化ファイルシステムの作成 - WebOS Goodies: http://webos-goodies.jp/archives/50567953.html
  4. Gentoo Linux Documentation - Gentoo Linux Genkernel Guide: http://www.gentoo.org/doc/en/genkernel.xml
  5. Gentoo Linux Documentation - Gentoo Linux x86 with Software Raid and LVM2 Quick Install Guide: http://www.gentoo.org/doc/en/gentoo-x86+raid+lvm2-quickinstall.xml
  6. Gentoo Linux Documentation - Gentoo Linux AMD64 Handbook: http://www.gentoo.org/doc/en/handbook/handbook-amd64.xml
  7. Ubuntu 10.04 LTS で暗号化 LVM を利用し、さらにパーティションを細かく分割する。 - D.: http://d.hatena.ne.jp/Naruhodius/20100718/1279443762
  8. [KVM】勉強メモ:gentoo上にkvmでFreeBSD9を立ち上げる - j-haradaの日記: http://d.hatena.ne.jp/j-harada/20110810/1312935410
  9. Gentoo LinuxVirtualBoxにインストールしてみた - chulip.org: http://chulip.org/entry/20110522/1306085652
  10. Mdadm - HelloKitty68: http://hellokitty68.main.jp/wiki/Mdadm

HP ProLiant ML110 G7を買った

サーバ

 お正月にお年玉をもらったので、以前から欲しかったサーバ機を購入することにした。年始早々からお金を使い切るのは流石にまずいので予算は2万円以内とした。大抵のサーバは2万円を遥かに超えるものが多く、新品でかつ最新のサーバを2万円以内で販売してるところなんてないと思っていたが、幸いにも NTT-X Store で割引適用済みで 1万円を切る HP ProLiant ML110 G7 があった。というわけで、あっさりとポチった。本当は仮想化に使おうとしていたので価格よりも性能を重視したかったのだが、予算の縛りがあるということで断念。今後、増強できる機会があればそのときにでも性能を上げようと思う。

 

 3日に注文し、5日に ML110 G7 が届いた。NTT-X Store の販売サイトでは「箱破損」などと表記していたが、そんな痕跡はどこにも見当たらない。わずか1ミリの傷を箱破損とでも言うのだろうか?箱はかなり大きかったが、本体はその2分の1足らず。キーボードやマウス、予備用のSATAケーブルなどが同封されており、正直これが1万円を切るとは思えない。これは在庫処分と解釈していいのだろうか?

 

 開封後の ML110 G7 はこんな感じ。筐体はご覧の通りタワー型である。前面には4つのUSB2.0端子、アクセスランプ、電源ボタンなどがある。また鍵を開錠することで前面パネルと左側の板を取り外すことができる。

f:id:Saneyan:20130106232051p:plain

 

 次の写真は背面にある端子。流石サーバ。サウンドなどの余計な端子がない。嬉しいことにLANが2つあり、ルータとしても活用できそうだ。ちなみにイーサネットコントローラは Intel 82574L である。

f:id:Saneyan:20070603161123j:plain

 

 ケース左側の板を外すと、裏にはサーバの内部構成についての説明がある。

f:id:Saneyan:20070603161231j:plain

 

 内部はこんな感じ。黒い半透明の仕切り板を設けることで、エアフローを良くしているらしい。

f:id:Saneyan:20070603163011j:plain

 

 ODDベイにはL型六角レンチが付属している。これでこのサーバ内で用いられているネジの開け閉めができる。

f:id:Saneyan:20070603161538j:plain

 

 起動ストレージとしてSDカードかUSBメモリを扱えるようにマザーボード上にSDカードスロットとUSB端子が設置されているが、ケース前面のUSB端子を使うつもりなのでいずれも使うことがないだろう。

f:id:Saneyan:20070603161737j:plain

f:id:Saneyan:20070603161817j:plain

 

 Intel C204 チップセット。上下付近にはヒートシンクを固定するための穴がある。ML110 G7 の発売当初はヒートシンクが付いていたらしいが、仕様変更によりなくなった。温度上昇による熱暴走は起きないとHPは言っているが、個人的には付けておいて欲しかった。

f:id:Saneyan:20130107003540p:plain

 

 前面パネルを外すと4つのHDDトレイにアクセスできる。1番目のトレイには標準で HDD (ST3250318AS) が搭載されている。このタイプのHDDトレイに触れるのはこれが初めて。ネジを締めて SATA と電源ケーブルを接続する手間が省けて楽である。

f:id:Saneyan:20070603163513j:plain

 

 このサーバの運用を開始してから現時点で2日経っているが、初期不良は見られない。今は Gentoo LinuxKVM 入れて実験運用している。

年末に際して

生活

 ようやくクリスマスが終わり、2012年も残り6日で終わろうとしている。年末に際し、年賀状を書いたり、来年の新たなスタートに向けて下準備をしたりしている。この下準備とは具体的には自宅サーバの再構築、それから恒例の大掃除である。今年中にやるべきことが全て終えた後は、年越しそばを食べ、紅白歌合戦を少しだけ観て、PCの前で何かしらの作業に励んでいることだろう。そして除夜の鐘を聴きながら、新年を迎える短い時間をゆっくりと過ごすのである。

 

 今年は実に多くの出来事が自分の中で起きていた。そのうち大きな出来事が3つあり、それは4月のオフ会、7月の Lias の発表、9月から10月にかけて受験したAC入試である。いずれも共通する点は「初の経験」である。

 オフ会は勿論のことながら、当時としては初めての会合であった。オフ会とは、ネット上で知り合った人達と実際に顔を合わせ、会合することである。オフ会自体は1日もなかったとはいえ、かなり思い出深いものがある。それほど、自分にとっては印象的な出来事であったのであろう。

 Lias の発表はぶっつけ本番のプレゼンであった。また、人生初の実践的なプレゼンでもあったので緊張気味な場面は幾たびも見られたであろう。実際にどれほど聴衆に話が伝わったのかはわからないが、ある程度の理解はしていただけたようだ。

 AC入試は正に人生がかかったビッグイベントである。AC入試は筑波大学が実施する大学入試の1種である。私は自分が持っていた構想を実現させるためのプロセスを具体化させ、大学側にその内容を提出した。幸いにも合格に至ることができた。

 

 大きな出来事が自分にはあったが、世間ではどうであったか。一番挙げられやすい出来事といえば、年中騒がれていたマヤ歴に関することだろうか。世間は「マヤ歴の終わりが世界の終りと告げる」とか言うくだらない噂で騒いでいたが、結局のところ天変地異が起きずに済んだわけだ。だが、この出来事で一体何人が苦しみからの解放に切望したのであろうか。実際に天変地異が起きたら、切望していない人も含め、大半の人間が神に助けを求めていただろう。私は神を信じないが、仮にこの境遇に立たされたとき、助けてもらえるものに対しては必死にすがったに違いない。

 

 年末について触れ、今年を振り返ってみた。ここに書かれている記事は「2012年」というタイトルのアルバムのほんの一部に過ぎないが、主要な内容は大体載せているつもりだ。数年後、数十年後にこの記事を見返したとき、果たして何を思い、何を感じるのか。1つ1つの時を大切に過ごしていきたい。