はじめに
このさかきけいのメモでは以前に Fedora 7 を Virtual PC 2007 へインストールする方法について書いたことがありますが、今回は最近リリースされた Fedora 9 を Virtual PC 等にインストールする方法について書いてみたいと思います。
今回対象にするのは Virtual PC 2007 のみではなく、同 SP1 や過去の多少古いバージョンの Virtual PC 2004 あたりや Virtual Server 2005、同 SP1 なども考慮した設定としています。
何もしないと発生する問題について
特に何もせずに Fedora 9 をインストールしようとすると「回復できないプロセッサ エラーが発生しました。バーチャル マシンはリセットされます。」というダイアログが表示されてインストーラを起動することができません。
この症状はカーネル・パタメータとして noreplace-paravirt
を与えることで解決することができます。しかしこの状態でインストールを開始すると途中でインストールが停止することがあるため、さらに nosmp noapic nolapic clocksource=pit
パラメータを加えます(このパラメータを追加することで不要な機能を抑制し、割り込み回数を減らし、カーネルにかかる負荷を抑えることで安定性が向上することを期待しています)。
インストール中にマウスのホイール機能を使用する場合は psmouse.proto=imps
を加えます。使用する仮想マシンソフトウェアが VirtualPC 2004 であったり Virtual Server 2005(無印) であったりする場合には i8042.noloop
を加えなければマウスを使用できないことがありますので、これも加えます。
これらを全て指定すると、インストーラの起動時に追加するカーネル・パタメータは noreplace-paravirt nosmp noapic nolapic clocksource=pit psmouse.proto=imps i8042.noloop
となります。
カーネル・パタメータはインストール DVD/CD を起動した後に表示される「Welcome to Fedora 9!」の画面の「Install or upgrade an existing system」で Tab キーを押して入力します。なお、この時点でのキーボード配列は日本語キーボードではなく、英語キーボードの配列となっています。 = は Shift キー を押しながら – キーではなく ^ キーで入力しなければならない点に注意が必要です。
入力したら Enter キーを押すとインストーラが起動します。
インストール中にタイムゾーンを選択する場面があります。ここでは「システムクロックで UTC を使用(S)」のチェックを外した状態にします。
インストール時には「仮想化」にチェックを入れないようにしてパッケージを選択する必要があります。
あとは普通にインストールを行うことができます。
インストール後の設定
今度はインストールした Linux を起動することになりますが、このカーネルもインストーラと同様にプロセッサエラーを引き起こします。そこで前述のカーネル・パタメータを指定します。
まず起動するとカウントダウンが行われる画面が表示されますので、カウントダウンが終わる前に何かキーを押します。
GNU GRUB の画面が表示されるので A キーを押します。すると既存のカーネル・パラメータが表示され、追加のパラメータを入力できるようになるので前述のカーネル・パタメータを入力します。入力の仕方も先ほどと同様です。入力が終わったら Enter キーを押すとインストールした Fedora 9 が起動します。初回起動時には最終的な設定の表示が行われますので、表示される指示に従って入力や環境報告を行います。
毎回このカーネルパラメータを入力するのは入力するのは厄介なので、自動的にこれらの設定を行うようにします。このためには /etc/grub.conf
を root 権限で編集します。
ここでは「アプリケーション」→「システムツール」→「端末」と選択してコンソールを開いて編集する例を示します(もちろん、他のエディタで編集してもかまいません)。
コンソールを開いたら su -
と入力して Enter キーを押します。パスワードの入力を求められるのでインストール時に指定した root のパスワードを入力して Enter キーを押します。
続いて vi /etc/grub.conf
と入力して Enter キーを押してエディタを起動します。
カーソルキーでカーソルを kernel
とある行の最後に移動し A キーを押します。すると INSERT モードになるので、空白を1つ入力してから先ほどのカーネル・パタメータを入力します。最後に Enter キーは押さないように注意してください。
Enter キーの代わりに Esc キーを押して INSERT モードを抜けます。続いて :
(コロン)を入力してコマンドモードにし wq
と入力して Enter キーを押します。これで変更点を保存してエディタを終了します。
以上で設定は完了です。次回からはカーネル・パタメータが自動的に適用されます。
まとめ
このように少し調整することで Fedora 9 を VirtualPC / Virtual Server 環境で実行できるようになります。今回は無調整で VGA 以上の解像度で使用できるので Fedora 7 よりは導入しやすいのではないかと思います。
付録 – 仮想マシン内の時間の問題
今回説明した内容で Fedora 9 が VirtualPC / Virtual Server で起動するようになりますが1つ問題が残っています(以前説明した方法でも同様の問題が起こります)。それはホストマシンと仮想マシンの間で時間の流れに差があり、これが累積して、いずれ大きな相違になるというものです。これを防ぐためには VirtualPC / Virtual Server 用にカーネルに手を入れる(2008年6月17日追記:カーネルに手をいれるメモを別途作成しました→Virtual Machine Additions for Linux を Fedora 9 で使う)か ntpdate
コマンドを用いてどこかのコンピュータと時刻の同期を頻繁に行うしかありません(決して外部の NTP サーバーに頻繁に同期要求をかけてはいけません!)。お勧めなのはホストマシンの NTP サーバーを有効にして、それに対して同期をかける方法です。Windows の NTP サーバー(タイムサーバー)を有効にする方法はバージョンによって異なります。Microsoft による解説のページを2つ紹介します。
これでタイムサーバーを有効にしたら、ホストマシンの IP アドレスに対して ntpdate
で同期を行います。例えばホストマシンの IP アドレスが 192.168.100.10
なら ntpdate 192.168.100.10
とします。これで時刻の同期ができます。ある程度の間隔で時間を合わせたい場合には root の cron
設定に記述を追加するとよいでしょう(例えば、仮想マシン時間で1分ごとに同期をする場合には 0-59 * * * * /usr/sbin/ntpdate 192.168.1.10 > /dev/null 2>&1
)。
時間がさほど重要ではない環境(テスト環境や学習用など)ではカーネル・パタメータで「それなり」になるように調整する方法で済ますのもいいでしょう。
そのために使用するカーネル・パタメータは clocksource
です(以前の Linux カーネルでは clock
というパラメータ名でしたが、現在のバージョンでは clocksource
に変更されており clock
は非推奨のパラメータ名になっています)。
Microsoft の説明では clocksource=pit
を指定することを薦めているようです(Fedora 9に対して薦めているわけではないので表現をこのようにしています)。これはカーネルが一定時間ごとに受け取っているタイマー割り込みを元に時間を割り出すようにするという指定です。通常、この指定では徐々に実際の時間から遅れて行きます。なお、CPU の使用率は非常に少なくなります(このため、前述のインストール時のカーネル・パラメータではこれを指定しています)。
ほかには CPU がクロックに応じてカウントアップする TSC
レジスタを元にする clocksource=tsc
という指定があります。これは CPU のクロックに依存するため、CPU のクロックが動的に変更されるような最近の環境では使用すべきではありません(余計に不正確になります)。クロックが固定された環境(CPU : Pentium 4 2.60C GHz / Northwood)で試したところ pit
と比較して時間のずれはかなり少なくなっていました。ずれる方向は逆で、この指定では徐々に実際の時間から進んで行くことが確認できました(環境によっては逆の結果になるかもしれません)。
さらに ACPI を用いて、その時間情報を元にする clocksource=acpi_pm
という指定も使用できます。このカーネル・パタメータを指定した状態では pit
を指定した場合と同様に徐々に実際の時間から遅れて行くことが確認できました。ただし、この遅れは pit
の場合よりも緩和されていました。ただし、CPU の使用率はかなり上昇します。
ほかにもいくつか指定できるパラメータがありますが、VirtualPC / Virtual Server において実用的なのは以上の3つのパラメータです。この3つのパラメータのうちどれがベターなのかは用途と環境によるのでなんともいえませんが、一般に時々(ときどき)時間の調整をする場合には遅れてしまう系の設定と組み合わせた方が安定します。プログラムは時間軸が常にプラスの方向に行くことを前提とするものが多いためです。この前提が崩れると色々と面倒なことが起こりえます。
このようなことから pit
が一番扱いやすいのではないかと思います。
付録 – 登場したカーネル・パタメータの意味
カーネル・パタメータ | 意味 |
---|---|
noreplace-paravirt |
カーネルによる仮想化機能のパッチを抑制する。 |
psmouse.proto=imps |
ホイールのあるマウスを使用することを明示する。 |
i8042.noloop |
一部のコマンドを送らないように指示を出す。 |
nosmp |
カーネルの SMP 機能を抑制する。 |
noapic |
カーネルが APIC 機能を使うことを抑制する。 |
nolapic |
カーネルがローカル APIC 機能を使うことを抑制する。 |
clocksource=pit |
(本文の説明を参照) |
clocksource=tsc |
(本文の説明を参照) |
clocksource=acpi_pm |
(本文の説明を参照) |
参考にしたページ
今回のこのメモを書くにあたり以下のページを参考にしました。
- Kernel Parameters[TXT][英語]
- The system time runs too fast on a Linux-based virtual machine that is hosted in Virtual Server 2005 R2[英語]
- Kernel Boot Command-Line Parameter Reference[PDF][英語]
- The Sean Blog Installing Fedora 9 (Sulphur) in Virtual PC 2007[英語]
- Tick/Time Sources on x86/x86_64 architectures[英語]
- VMware で Linux を動かした際の時刻のずれを解消する(続き)[日本語]
さらに上記で上げたページ以外にも、検索してヒットしたカーネル・パタメータに関して説明したページの数々と Linux ソースコードを参考にしました。