最短でQEMUを使っていろんなアーキテクチャの環境を手に入れる
Hivemall/xgboostのテストで使おうとしたけど結局使わなくなったので供養. QEMU全然分からんのでもっと良い方法やオプションがあったら教えてほしいです.
特定のアーキテクチャをちょっと試したいときにOSのインストールとかを考えたりするのは面倒なので, セットアップ済みUbuntu Cloud Imageを使います(勿論他のディストロでも良いが, 対応するarchが多く取り回しが良さそうだった). というか使うだけなんですが.
準備
ホストはUbuntu想定です. まずQEMU等のツールをインストールします.
sudo apt install -y qemu-system qemu-kvm cloud-image-utils
次にベースにするUbuntu Cloud Imageを取得します. ここから必要なバージョン/アーキテクチャを選択してください. amd64(x64), arm64(aarch64), i386(x86), powerpc, ppc64el等々メジャー所(?)は網羅されています. 例として, 16.04/arm64(aarch64) を選択します.
wget https://cloud-images.ubuntu.com/releases/16.04/release/ubuntu-16.04-server-cloudimg-arm64-disk1.img -O ubuntu.img
最後にCloud imageを非クラウド環境で利用するためのイメージを作成します. まずYAML形式の設定ファイルを作成します.
- とりあえずパスワード認証できるようになればいい場合
#cloud-config password: password chpasswd: { expire: False } ssh_pwauth: True
- ユーザを追加したり公開鍵認証を使いたい場合
#cloud-config users: - name: foo ssh-authorized-keys: - ssh-rsa AAA... sudo: ['ALL=(ALL) NOPASSWD:ALL'] groups: sudo shell: /bin/bash
1行目の #cloud-config
というコメントは必須なようです. より細かな設定をしたい場合はcloud-initのドキュメントを参照してください.
設定からディスクイメージを作成します.
cloud-localds cloud.img cloud-config.yml
これで準備が整いました.
起動
デフォルトでも動くんですが遅すぎて禿げるのでKVMを有効 (-enable-kvm
) にして起動します. -smp
で仮想CPUコア数, -m
でメモリ, -redir
でSSH用のポートバインディングを設定しています.
sudo qemu-system-aarch64 -enable-kvm -smp 2 -m 2048 -nographic -hda ubuntu.img -hdb cloud.img -redir tcp:10022::22
ログインコンソールが表示されたら成功です. デフォルトのユーザ名は ubuntu
なので, cloud-configで設定した内容と合わせてログインしましょう. SSH serverも立ち上がっているはずなので, ssh -p 10022 ubuntu@localhost
みたいな感じで接続できるはずです.
おわり
跋文
最初はよく分からん状態で, 素のイメージをマウントして, kernelやinitrd取り出して, OSインストールして, いろいろ設定してとかやってて辛かったけど, Cloud imageが全てを解決してくれた.