#概要
Qemuを使い、管理者権限不要でWindowsからポータブルにLinuxを使うためのリンクとメモ。
ちなみにPortable Virtualboxは管理者権限必須。
#欠点
WHPXとかHAXM等のハードウェアアクセラレーションは管理者権限が必須のため一切使えない。
そのためおおよそGUI環境は使い物にならない。CUI環境も動くとは言ってもかなりもっさり。特にブートは遅い。
ポータブルなWindows版Xサーバーを使えば多少はマシになるのか?(未確認)
WindowsでXサーバを立てる
MobaXterm(ポータブル版あり)
Portable X-Server(VcXsrvのポータブル版?)
管理者権限を持ってる自己所有PCもお金もないがどうしても本物のLinuxを使いたい場合くらいしか使い道が…
お金があるならVPSを検討したほうが圧倒的に快適、本物でなくてもいいならCygwinなんかも。
#QemuとLinuxのインストール
QemuのインストールからDebianのインストール、その後の使い方まで詳しく説明している、Ubuntuも(Xなしのサーバー構成・最小構成なら)問題なく動く。
Debian系だとUSBメモリ上で管理者権限なしでLinuxインストールしようとするとかなり時間がかかるので可能ならインストールだけでもローカルPC上で行い、インストール後にHDDイメージとQemuをUSBメモリにコピーするのが無難。
個人的にはAlpine Linuxがお勧め、ディスクサイズや使用リソースが少なくなるように作られているためか、USBメモリ上でもインストールはすぐに終わる。Dockerコンテナ軽量化のためのベースに使われている関係でWebに資料もそれなりに存在する(Docker使うなら知っておいて損はない)。QEmu上ではブートに時間がかかるが(自分の環境で1~2分くらい)Debian系よりは早い(感覚)。ただしglibcを使っていない関係でうまく動かないソフトがある。
Qemuは現在Windows版のバイナリはインストーラー形式しか提供していないが、インストーラーを使ったインストールには管理者権限が必要になる。(一度インストールさえしてしまえばあとはファイルコピーだけで済むのだが…)
一切管理者権限を使わずにQemuを取り出すには、Universal Extractor 2でQemuのインストーラーを解凍する。起動の度に警告メッセージが出るが、Qemu自体は動く。
#QemuでSSH接続
Qemuの画面上でもLinuxは使えるがコピペができないなどかなり不便なのでSSHで接続できるようにする。
これができるということはQemu上のLinuxがローカルサーバーとして使えることを意味する(公開サーバーは管理者権限を使って設定しないとファイアウォールで阻止されるので無理)
QEMU で NAT
How to SSH from host to guest using QEMU?
Qemu起動オプションに-net user,hostfwd=tcp::2222-:22 を追加すると、Qemuがホストの2222番ポートへの接続をゲストの22番ポートへの接続に中継してくれるらしい。
-redirオプションを使う解説もあるが、このオプションは最近のバージョンでは完全に削除されていて使えない。
qemu-system-x86_64 -m 1024 -net nic -net user,hostfwd=tcp::2222-:22 -hda hdd1.qcow2
例えば上記のようにしてqemuを起動して、Linux側でSSHサーバーを22番ポート(デフォルト)で起動していれば
ssh -p 2222 ユーザー名@localhost
でQemu上のLinuxにSSH接続できる。(このコマンドをそのまま使うとローカルディスクに勝手にファイルやフォルダが作られるので注意、回避方法は後述)
SSH以外のサーバーも使いたい場合などほかの複数のポートを使えるようにするには
-net user,hostfwd=tcp::3389-:3389,hostfwd=tcp::443-:443,hostfwd=tcp::992-:992
といったように数珠繋ぎにすればいいようだ。
最近のWindows10はSSHクライアントが標準で入っているが、そのまま使うと環境変数を無視してローカルディスクのユーザーフォルダに.ssh\known_hostsファイルを書き込むのでポータブルではなくなってしまう、また設定ファイルの場所を指定しないと.sshフォルダを勝手に作るのでそれぞれ/dev/nullを指定して勝手にファイルやフォルダを作らないようにオプションを設定する必要がある。
ssh -F /dev/null -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 2222 ユーザー名@localhost
上記のようにすると勝手にユーザーフォルダにファイルやフォルダを作らないようだ。(またいちいちyes/noを聞かれることもない)
#dockerコンテナを持ち歩く
Qemu上のLinux(ubuntu)にdockerをインストールし、hello-worldコンテナを動かしてみたら動いたので、いろいろやってみたい。