【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

インストールレポート

Debian GNU/Hurdの最新バージョンL1(2009年10月リリース)をインストールしてみました。aptでパッケージをどんどん追加できます。パッケージはDebian/Interix(id:n7shi:20091215参照)に比べてかなり充実しています。

気になったのは、Virtual PC 2007で起動できない、ファイルI/Oが遅い、[Ctrl]+[C]がすぐ反応しないことがある、という三点です。それ以外は割と普通に使えるので、しばらく使いながら様子を見ようと思います。

以下でインストール過程をレポートします。

情報源

Hurdの日本語情報はまったくないわけではなく、公式サイトやドキュメントの翻訳などもありますが、内容が古いため今のHurdには当てはまらない部分があります。たとえば1パーティション2GB制限や仮想コンソールがないという問題は、最近のHurdでは改善されています。

そのため英語情報の参照をお勧めします。インストールは以下の資料に基づいて行います。

翻訳までは手が回りませんが、インストール過程のレポートで代用とさせてください。

バージョン

今回使用したのは以下のバージョンです。比較的最近(2009年10月)リリースされています。

以下のISOイメージを使用しました。

最小システムのインストール後、必要に応じてaptでパッケージをネットワークインストールできるため、ネットワークが使えないなどの事情がない限り巨大なDVDイメージは必要ありません。

スペック

Linuxと同じglibcとELFを使用しているため、既存ソフトのコンパイルは比較的通りやすいです。そのためパッケージも割と充実しています。

仮想環境

Hurdは開発途上で何が起きるか分かりません。ドライバも揃っていないため、実機へのインストールはお勧めしません。仮想環境で試した結果は以下の通りです。

VMware Player 3.0.0

問題なく使用できます。お勧めです。

Hurd自体の問題ではありませんが、VMware Playerの仕様としてマウスをキャプチャさせないとキーボード入力もできないのがストレスです。そのためtelnet経由での使用をお勧めします。

QEMU 0.10.6 on Windows

問題なく使用できます。ただしVMware Playerに比べると速度は半分以下です。

VirtualBox 3.1.2

一応動きますが、問題があります。

Athlon 64 X2で使用していますが、AMD-Vが無効だと起動プロセスの最後でカーネルパニックになります。

AMD-Vを有効にするとカーネル起動プロセスのSCSI関連で待たされますが正常起動します。

Floppy drive(s): fd0 is 1.44M
FDC 0 is a S82078B

ここで30秒ほど待たされます。フロッピーが原因ではなく、SCSIバイスを検出しているようです。(動き出したときの表示から判断)

ppa: Version 1.42
ppa: Probing port 03bc
ppa: Probing port 0378
ppa: Probing port 0278

ここで5分ほど待たされます。これもppaが原因ではなく、SCSI機器を検出しているようです。(動き出したときの表示から判断)

起動後にシフトキーを押すたびに以下のようなメッセージが表示されます。

kd_setleds1: unexpected state (2)

起動後の体感速度では、ファイルI/OはVMware Playerよりも速いような気がしますが、ビルド速度はVMware Playerよりもかなり遅いです。

gccのビルドなど重い作業をしているとページングでエラーが発生して固まることがあります。

(default pager): dropping data_request because of previous paging errors

こうなるとVMをリセットするしかなくなります。VMware Playerではこのようなエラーはまだ発生していないため、VMware Playerのご利用をお勧めします。

Virtual PC 2007

起動できません。

CDブートしたインストーラにおいて、フォーマットと再起動で異常に時間が掛かります。10分以上掛かってフリーズしたかと思いました。インストーラLinuxのためHurdの問題ではないと思われますが、詳細は不明です。

インストール後もGRUBから起動できません。GRUBから制御が移ったあと何もメッセージを出さないまま応答がなくなります。1時間くらい放置しましたが起動しませんでした。

VMware PlayerでインストールしたHDDイメージを変換してみましたが結果は同じでした。そのためインストールに失敗しているのではなく、ブート段階で問題が発生していると思われます。

CDブートのインストーラ

ISOイメージから起動します。

Welcome to Debian GNU/Hurd L!
(中略)
Press <F1> for help, or <ENTER> to boot.

boot: 

ここで[Enter]を押すとLinuxが起動します。Release Notesが表示されるので[Enter]を押します。

インストールメニューが表示されます。

1. Initial Keyboard Configuration
2. Partition a Hard Disk
3. Initialize and Activate a Swap Partition
Alt: Activate a Previously-Initialized Swap Partition
4. Initialize a GNU/Hurd Partition
5. Initialize a GNU/Linux Partition
Alt: Mount a Previously-Initialized Partition
6. Intstall the Base System
7. Reboot the system
Info: View the Partition Table
Info: Execute a Shell
Unmount a Partition

1から順番にやっていきますが、必要ない項目は飛ばします。

パーティションは最低限ルートとスワップが必要です。パーティション作成で呼び出されるのはLinuxのcfdiskです。HurdLinuxと同じext2スワップ(FS Type: 82)を使用します。

スワップは3、ルートは4で初期化します。ルート以外のパーティションを作成したときは5で初期化します。3と5の下にあるAltは初期化せずにマウントするときに使いますが、パーティションを新規作成したときは不要です。初期化はそれぞれデフォルトの項目で[Enter]を押して先に進めば大丈夫です。

パーティションの準備が完了したら6でHurdカーネルをインストールします。インストール元など聞いてきますが、これもデフォルトのまま[Enter]で先に進めば問題ありません。

  • cdrom → Continue → list → /instmnt/install

展開が完了したら、7で再起動してください。

GRUB

Hurdの起動にはGRUBが必要です。GRUBの起動用フロッピーを用意します。初回起動時のnative-installでハードディスクにGRUBがインストールされるため、起動用フロッピーが必要になるのは初回起動時だけです。

Hurdをシングルユーザーモードで起動して、基本パッケージのインストールや初期設定を行います。シングルユーザーモードで起動するには-sを付けてkernelを読み込みます。GRUBは0.9系と1.9系でコマンドが変わっていますが、1.9系はフロッピーイメージが提供されていないため、0.9系の書式を示します。

root (hd0,0)
kernel /boot/gnumach.gz root=device:hd0s1 -s
module /hurd/ext2fs.static --multiboot-command-line=${kernel-command-line} \
--host-priv-port=${host-port} --device-master-port=${device-port} \
--exec-server-task=${exec-task} -T typed ${root} $(task-create) $(task-resume)
module /lib/ld.so.1 /hurd/exec $(exec-task=task-create)
boot

rootでパーティションを指定します。ここでは最初のパーティションを仮定していますが、それ以外のパーティションにインストールした場合はfindコマンドで探すことができます。

find /boot/gnumach.gz

あまりにもパラメータが多過ぎるため、コマンドを登録したフロッピーイメージを用意しました。

マルチユーザーモードとシングルユーザーモードが選択できるようになっています。

Hurd上でのインストール

シングルユーザーモードで起動すると以下のようになります。コンソールのエラーが表示されていますが、後のステップで解決するため無視してください。

start /hurd/ext2fs.static: Hurd server bootstrap: ext2fs.static[device:hd0s1] ex
ec init proc auth/libexec/console-run: /dev/console: No such file or directory
/libexec/console-run: Using temporary console /tmp/console
/libexec/runsystem: Running on fallback console /tmp/console
sh-4.0# 

※基本パッケージのインストール後にシングルユーザーモードで起動すると、プロンプトが表示されないバグが発生することがあります。詳細は後述します。

基本パッケージのインストールや初期設定を行うため、環境変数を設定して用意されているスクリプトを実行します。キーボードはUS配列のため、イコールは[^]キーで入力します。

export TERM=mach
./native-install

基本パッケージのインストール中にいくつか質問されます。

地域
Please select the geographic area in which you live. Subsequent configuration
questions will narrow this down by presenting a list of cities, representing the

time zones in which they are located.

  1. Africa      4. Australia  7. Atlantic  10. Pacific  13. Etc
  2. America     5. Arctic     8. Europe    11. SystemV
  3. Antarctica  6. Asia       9. Indian    12. US

Geographic area: 

6[Enter]と入力します。ずらっと都市の名前が表示されるので、73[Enter]としてTokyoを選択します。

シェル
The system shell is the default command interpreter for shell scripts.

Using dash as the system shell will improve the system's overall performance. It

does not alter the shell presented to interractive users.

Use dash as the default system shell (/bin/sh)? 

dashを/bin/shにするかどうかという確認ですが、Hurd配布物にはbashでないと動かないスクリプトがあるため、n[Enter]で拒否します。bash/bin/shとなります。

GRUB
+---------------------------Configuring grub-pc------------------------------+
| The following Linux command line was extracted from /etc/default/grub      |
| or the `kopt' parameter in GRUB Legacy's menu.lst.  Please verify that     |
| it is correct, and modify it if necessary.                                 |
|                                                                            |
| Linux command line:                                                        |
| +------------------------------------------------------------------------+ |
| |                                                                        | |
+-+------------------------------------------------------------------------+-+
|                                 <  OK  >                                   |
+----------------------------------------------------------------------------+

特に設定する必要はないため、何も入力せずに[Enter]を押します。

+---------------------------Configuring grub-pc------------------------------+
| The following string will be used as Linux parameters for the default      |
| menu entry but not for the recovery mode.                                  |
|                                                                            |
| Linux default command line:                                                |
| +------------------------------------------------------------------------+ |
| |quiet                                                                   | |
+-+------------------------------------------------------------------------+-+
|                                 <  OK  >                                   |
+----------------------------------------------------------------------------+

quietと入力されていますが、そのまま[Enter]を押します。

"The grub-pc package is being upgraded.(以下略)"と表示されるので[Enter]を押します。

+---Configuring grub-pc------+
| GRUB install devices:      |
| +------------------------+ |
| |     [ ] /dev/hd0       | |
| +------------------------+ |
+----------------------------+
|         <  OK  >           |
+----------------------------+

GRUBのインストール先の指定です。スペースキーを押して/dev/hd0を選択して[Enter]を押します。Hurd用のパラメータなどは自動生成されるため、これ以降は起動用フロッピーなしでハードディスクから起動できるようになります。ただしインストールに失敗することもあるようです。念のため起動用フロッピーは残しておく方が無難です。

しばらく他のパッケージのインストールが続いてから、"Upgrading from GRUB Legacy.(以下略)"というダイアログが表示されるので[Enter]を押します。

各種設定

GRUBのインストールは最後の方のため、その後すぐにnative-installは完了して以下のように表示されます。

I just make sure that /libexec/runsystem is properly updated.
Your root partition is /dev/hd0s1.
Your file system type is ext2.
If this information is not correct, you need to edit /etc/fstab.

If you have a swap partition, please add it to /etc/fstab.

Available editors are:
/bin/nano

You should reboot now, and enter multi-user mode. Note that
you will have to activate the Hurd console manually currently.
To do this, run
  console -d vga -d pc_kbd --repeat=kbd -d pc_mouse --repeat=mouse \
          -d generic_speaker -c /dev/vcs
as root after you have logged in.
sh-4.0# 

このメッセージは重要なため読み飛ばさないで確認する必要があります。要約すると以下の通りです。

  • ルートパーティションは/dev/hd0s1で、ファイルシステムext2です。問題があれば/etc/fstabを編集してください。
  • スワップパーティションを使用するには/etc/fstabを編集してください。
  • 編集に使用できるエディタは/bin/nanoです。
  • マルチユーザーモードで再起動してください。
  • Hurdコンソールは手動で起動させてください。
    • Hurdコンソールの使用はお勧めできません。telnet経由での接続をお勧めします。以下理由。
    • 起動すると仮想コンソールが有効になり、[Alt]+[F1]/[F2]などで切り替えられるようになります。たまに切り替えに失敗したまま固まることがあります。
    • カーネルからのメッセージが隠されます。固まったときにエラーの理由が分からずに不便です。

引き続き各種設定を行います。/etc/fstabを編集してから再起動します。

最初のうちは設定をインストーラではなく手動で行うのが面倒に感じましたが、手動設定の方法を知っていれば後でやり直しができるという面に気付きました。

/etc/fstab

ルート以外のパーティションをマウントしたり、スワップパーティションを使用するために/etc/fstabを編集します。基本パッケージのインストール直後はnanoというエディタしか使えません。他のエディタはネットワークとaptの設定後にインストールできるようになります。

nano /etc/fstab

スワップコメントアウトを外してデバイス名を書き換えてください。

# /etc/fstab: static file system information
#
# <file system> <mount point>   <type>  <options>              <dump>  <pass>
/dev/hd0s1      /               ext2    rw                     1       1
/dev/hd0s2      none            swap    sw                     0       0

nanoのコマンドは画面の下に書いてあります。^は[Ctrl]を意味します。

^G Get Help  ^O WriteOut  ^R Read File ^Y Prev Page ^K Cut Text  ^C Cur Pos
^X Exit      ^J Justify   ^W Where Is  ^V Next Page ^U UnCut Text^T To Spell

修正後[Ctrl]+[O]で保存します。ファイル名を確認されるので[Enter]を押して上書きします。[Ctrl]+[X]で終了します。

ルートパーティション以外はデバイスを手動で作成する必要があります。

cd /dev
./MAKEDEV hd0s2

変更を有効にするため再起動してください。

reboot

以降はマルチユーザーモードで作業します。

シングルユーザーモードのバグ

native-install後は基本的にシングルユーザーモードは使いません。もちろんシングルユーザーモードで起動することは可能ですが、プロンプトが表示されないバグが発生することがあります。以下のように一見起動中に止まっているかのような状態になります。

start /hurd/ext2fs.static: Hurd server bootstrap: ext2fs.static[device:hd0s1] ex
ec init proc auth

実はプロンプトが表示されていないだけで、シェルは起動しています。コマンドを入力すると反応します。

正常に表示されることもあります。その場合、最初のプロンプトは改行が入らないため以下のようにくっ付いて表示されます。

start /hurd/ext2fs.static: Hurd server bootstrap: ext2fs.static[device:hd0s1] ex
ec init proc authsh-4.0#

このバグの発生条件はよく分かりませんが、そういう現象が発生することがあると知っていれば、実用上は問題ないと思います。

ログイン

マルチユーザーモードで起動すると以下のように表示されます。

GNU 0.3 ((null)) (console)

GNU (null) 0.3 GNU-Mach 1.3.99/Hurd-0.3 i386-AT386

The programs included with the Debian GNU/Hurd system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Hurd comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Use `login USER' to login, or `help' for more information.
login> 

rootでログインします。

login> login root
(null):~# 

ネットワーク設定

DHCP

バイスを作成してIPアドレスを取得します。再起動すると設定は失われます。

settrans -fgap /servers/socket/2 /hurd/pfinet -i eth0
dhclient

バイスの作成は初回のみで、再起動後はdhclientだけでOKです。

なお、基本パッケージのインストールでdashをデフォルトシェルにするとdhclientでエラーが発生します。その場合、エラーの発生したスクリプトを編集してbashを呼び出すように修正してください。

手動設定

DHCPとは異なり、再起動しても設定は残ります。

settrans -fgap /servers/socket/2 /hurd/pfinet -i eth0 -a IPアドレス -g ゲートウェイ -m サブネットマスク

DNSは/etc/resolv.confを編集してください。aptでエディタをインストールするまではnanoを使用することになります。

aptの設定

以下の内容で/etc/apt/sources.listを作成してください。US配列のためコロンは[Shift]+[;]で入力します。

deb http://ftp.debian-ports.org/debian unreleased main
deb http://ftp.de.debian.org/debian unstable main

パッケージリストを取得します。

apt-get update

以下のようなエラーが発生しますが、正式リリースではなく署名がないことが原因なので、無視するしかないようです。

W: GPG error: http://ftp.debian-ports.org unreleased Release: The following sign
atures couldn't be verified because the public key is not available: NO_PUBKEY A
E4A31290917E535

パッケージを更新します。

apt-get upgrade

更新パッケージが提示されて同意を求められるので[Enter]を押します。

これでaptの準備が整いました。後は普通のDebianと同じです。たとえばnanoに不満があれば、真っ先にエディタをインストールしましょう。

apt-get install vim

telnet

aptでtelnetdをインストールすれば、すぐにtelnetで接続できるようになります。VMの画面で直接作業するよりも、telnetで作業した方が便利なのでお勧めです。

apt-get install telnetd

今回のレポートは以上です。