« ^ »

QEMUでGNU/Linuxを動かす

所要時間: 約 5分

QEMUはプロセッサエミュレータであり、コンピュータの動作をまるごと仮想化する。そのため、様々なOSをハードディスクやSSDにインストールすることなく、また今使用しているシステム(ホスト側のOS)を再起動する事なく、起動させたり動作させたりできる。またハイパーバイザーとしても動作させる事ができる。

今回は、QEMUを用いてGNU/Linuxを色々と起動させてみようと思う。

事前準備

QEMUをインストールする

QEMU自体を動作させる側のOSをホストOS、QEMUを使いその上で動作させるOSをゲストOSと呼ぶ。まずはmacOSにQEMUをインストールする。今回ホストOSはmacOSを使用し、パッケージマネージャにHomebrewを使う事にする。 brew install qemu をターミナルで実行すると、QEMUのインストールが始まる。

brew install qemu
QEMUをインストールする

HDDの代わりとなるファイルを作成する

GNU/Linuxのインストールには色々な方法があるが、最も一般的なものはHDDにインストールする方法だろう。QEMUで起動させるOSを物理HDDにインストールすることもできるとは思う。しかし、それでは物理HDDを購入する等して準備する必要がある。物理HDDを使用する場合、パーティションの操作する時のオペレーションミスによるホスト側へ影響などがあるかもしれないし、複数バージョンのゲストOSを準備するのも難しくなる。QEMUではホスト側のファイルをHDDといったブロックデバイスとして認識し起動させる事ができる。つまりホスト側(今回の場合、macOS)からは、ただのファイルとして扱う事ができる。ファイルで扱えると、パーティション操作ミスのリスクも低減できるし、新しく作ったり削除したりといった管理もしやすくなる。ここではその、HDDの代わりとなるファイルを作成する。ファイルの作成には dd コマンドを使う。ファイルサイズは格納したいデータの量があれば良い。これにはゲストOS自体のデータサイズが含まれる。今回は小さいOSを使う予定である為、50MiBのファイルを作成する事にした。

dd if=/dev/zero of=disk.img bs=1M count=50

Tiny Core Linuxをインストールする

GNU/Linuxには様々なディストリビューションがある。ディストリビューションには、それぞれ特徴があり、それを探求するのも楽しい。今回はQEMUでGNU/Linuxを動作させられることを確認する事が目的であるので、大々的なものは必要ない。だからサイズのとても小さいTiny Core Linuxを使うことにする。

起動イメージをダウンロードする

まずはTiny Core Linuxのインストール用イメージをダウンロードする。今回使うホスト側のコンピュータはInterMacなので、Tiny Core LinuxのCoreのx86_64用のISOファイルをダウンロードする。

curl http://www.tinycorelinux.net/13.x/x86_64/release/CorePure64-13.1.iso -o CorePure64-13.1.iso
ISOファイルをダウンロードする。

OSのような大きなファイルはファイルの破損や改竄に気付けるようにするために、ハッシュ値を計算したファイルも配布されている。それもダウンロードする。

curl http://www.tinycorelinux.net/13.x/x86_64/release/CorePure64-13.1.iso.md5.txt -o CorePure64-13.1.iso.md5.txt
ハッシュ値のファイルをダウンロードする

ダウンロードしたファイルはハッシュ値が同じかを確認する。

bash-5.1$ md5 -r CorePure64-13.1.iso
0f40642eb2a1add7e5f14899f3dfcba1 CorePure64-13.1.iso
bash-5.1$ cat CorePure64-13.1.iso.md5.txt
0f40642eb2a1add7e5f14899f3dfcba1  CorePure64-13.1.iso
ハッシュ値の確認

ハッシュ値が同じ事を確認した。

インストール用イメージを起動する

ホスト側のコンピュータは、x86_64アーキテクチャのチップを使用しているため、ゲスト側もそれと同じものを使うことにする。これは起動時の引数などで変更可能であり、別のアーキテクチャで実行を試すこともできる。その際にはそのアーキテクチャに合う起動イメージが必要になる。

qemu-system-x86_64 -hda ./disk.img -m 1G -cdrom ./CorePure64-13.1.iso
起動

起動するとQEMUのフレームが開く。

インストール

QEMUの画面でプロンプトの入力待ちになったら、インストール作業をする。まずはtce-loadコマンドを使用し、tc-installというインストールスクリプトや必要なコンポーネントをダウンロードする。

tce-load -wil tc-install

ダウンロードが完了したら、インストールスクリプトを実行する。インストールスクリプトでは、何から、何を、どこへインストールするかといったことが質問される。これらにCLIで答えながら進めていく。disk.imgファイルはゲストOSでは恐らく /dev/sda として認識されているだろう。

sudo tc-isntall.sh

インストールが完了したら、QEMUを停止する。

Tiny Core Linuxを起動する

先ほどと同様にQEMUを起動するが、既にdisk.imgにはTiny Core Linuxがインストールされている。そのため -cdrom は指定しない。

qemu-system-x86_64 -hda ./disk.img -m 1G
起動

正しく起動すると tc ユーザーとしてログインした状態となる。

https://res.cloudinary.com/symdon/image/upload/v1676723665/blog.symdon.info/1673356800/tiny-core-linux-core-pure-13.1.gif
カッコ良い起動の様子

良い感じだ。

/homeと/optにdisk.imgをマウントする

インストールが完了し、起動ができることは確認した。ただし、この状態では/homeはメモリ上にマウントされているため、再起動するとデータは消えてしまう。これでは使い勝手が良くない為、/homeと/optにdisk.imgをマウントするように設定を変更する。

https://res.cloudinary.com/symdon/image/upload/v1679811439/blog.symdon.info/1673356800/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2023-03-26_15.10.47_gkydrm.png
修正前
https://res.cloudinary.com/symdon/image/upload/v1679811439/blog.symdon.info/1673356800/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2023-03-26_15.14.48_emaoop.png
修正後

違いは APPENDhome=sda1opt=sda1 を追加した事だ。再起動すると、/homeと/optに保存したデータは、 disk.img に書き込まれる。

まとめ

QEMUを使って、ファイルにTiny Core Linuxをインストールし起動できる事を確認した。準備はちょっと手間だが、危険ではないし、失敗してもやり直ししやすくとても良かった。パッケージのインストール等は今回は行わなかった。時間があればそういった事もやってみたいと思った。