始めに
ちょっとしたコネで高校でプログラミングを教えることになったボク。
しかし、生徒用に使えるのはWindowsで、しかも管理者権限は使えないとの事。
仕方がないのでいろいろ考えて、最終的にUSBで持ち歩けてWindowsマシンがあればどこでも同じように使える開発環境を作っちゃいました。
この記事はその備忘録になります。
手法
WindowsのゲストアカウントでC系の言語でプログラミングしたいと思いました!
インストールが許されるのであれば、MicrosoftのVisual Studioの無料の奴とか、cygwinを入れろとか、msys2の方がとか、MinGWを忘れるなとか色々あると思います。
しかし、インストールすら出来ないとなると見事に全滅します1。
解決方法は至って単純。管理者権限不要な仮想化ウェアを使う。終わり。
ではちょっと味気ないので具体的な導入手順を追ってみます。
仮想化ウェアとは何か、各種仮想化ウェア(VMWare, VirtualBox, Virtual PC, QEMU, bochs等)の詳細等については適宜ググって下さい。
この記事では、各種ツールが揃ってて便利で、USBで持ち運べて、動かすのに管理者権限が要らないQEMUを使っていきます。
QEMUの入手・展開
QEMUは
http://www.qemu-project.org/
のダウンロードページから入手できます。
インストール自体には管理者権限を要求されますが、インストール後にインストール先のディレクトリをまるごとコピーしてしまえばアンインストール後も正常に動きます。
なので、ディレクトリ毎コピーして何処かに保存しておけば、それがどこでも使える仮想化環境になります。
サイズの目安は、MIPSやPowerPC等の全てのアーキテクチャ用のエミュレータを含めて約370MB、今回必要となるqemu-system-x86_64.exe以外のqemu-system-なんとか.exeを削除した場合に約110MBとなります。
2017年3月25日追記:Windows向けのQEMUは2種類ありますが、32-bit版のダウンロードをおすすめします。32-bit版は32 bitのWindowsマシンでも64 bitのWindowsマシンでも動きますが、64-bit版は32 bitのWindowsマシンでは動かないので。
仮想ディスクファイルの作成
まず、作業用ディレクトリとしてD:\programming-on-qemu
を用意し、その中にqemu
というディレクトリを作り、中にQEMUのファイル群を置いた状態にします。
此処から先は管理者権限要りません。
Windowsのディレクトリを表示するアレ(正式名:エクスプローラー)で、何も選択せずに何もない所でShiftキーを押しながら右クリックすると、メニューに「コマンド ウィンドウをここで開く(W)」というのが出るのでそれを選びます。
すると黒地に白文字のこんな画面が開きます。
dir
と打つことでそのディレクトリの内容物が一覧になって出てきます。
次に、仮想ディスクファイルを作ります。QEMUから見たディスクのサイズが256GBになるようにQCOW2形式で作るには、次のように打ちます。
qemu\qemu-img create -f qcow2 hdd1.qcow2 256G
仮想的なサイズは256GBとここでは指定していますが、実際のファイルは200KB弱となり、仮想ディスクに実際に書き込みを行ったタイミングでどんどん伸びていく感じになります。
インストールするべきOSの入手
入れるOSはなんでも良いのですが、Unixライクで無料な物ならプログラミングに適していると思います。
この記事ではLinuxディストリビューションの一つ、Debianを入れていきます。
https://www.debian.org/
今回はプログラミングを行うにあたって必要十分な程度の構成で組んでいくので、ネットワークインストール用の、「Debianを入手する」→「インストールイメージのダウンロード」→「小さなCDまたはUSBメモリ」節の「amd64」を選ぶ事によって、debian-8.7.1-amd64-netinst.iso
をダウンロードします2。
ダウンロードが終わったら作業ディレクトリにdebian-netinst.iso
というファイル名でコピーします。
この時点で、dir
コマンドを打つとこんな感じになると思われます。
仮想環境へのインストール
それでは起動して仮想環境にインストールしていきましょう。
仮想マシンのメモリサイズを512MBとした場合、次のようなコマンドになります3。
qemu\qemu-system-x86_64 -m 512 -hda hdd1.qcow2 -cdrom debian-netinst.iso
タイムゾーンの設定はother
→Asia
→Japan
を選んでおきましょう。
ロケールはデフォルトのen_US.UTF-8
で問題ありません。
キーマップは日本語配列([
と]
が上下に並んでてリターンキーが大きくてスペースバーが狭い、日本では一般的な奴)であればJapanese
を選ぶべきです。US配列の場合は多分American English
が良いと思いますが未検証です。
少し待つと、ホスト名を選ぶ画面になります。これが他のマシンと被ると技術的な意味でちょっと面倒な事が起こる事がありえます、が、普通は問題ない上にあとで変えられるのでデフォルトのdebian
で良いと思います。
ドメイン名はポータブルな環境に割り当てる類の物では無いので、今回は空欄のまま次へ。
rootのパスワードを設定します。rootは最大の権限を持つので普通は強力なパスワードを使うべきですが、今回は適当に設定します。但し空欄にだけはしないで下さい。あと絶対忘れないで下さい。死にます。
パスワードをもう一度入力するアレです。
普段使いのアカウントのユーザ名を、長くなってもいいので入れます。ログイン時に使う短いユーザ名は後で入れます。
ログイン時に使う短いユーザ名を入れます。
普段使いのアカウント用のパスワードを入れます。この後でこのアカウントの権限をsudoerに昇格する予定なので、これも強力なパスワードを使うべきです。
はいもう一度打って下さい。
暫く待つと、次はディスクの割り当て方を決めます。今回は一番上のGuided - use entire disk
を使いましょう。
使えるディスクの一覧が出てくるので、そのままリターンキーでsda
を選びます。
パーティションの割り当て方は一番上で良いと思います。
こんな風に作るよ!っていう表示が出るので、Finish partitioning and write changes to disk
で確定します。
最終確認的なアレ。Yesを選びます。選ぶとhdd1.qcow2ファイルが膨らみ始めます。
暫く待つと核となるシステムがインストールされて、追加パッケージをインストールする段階になります。追加パッケージをどこからダウンロードするかを選択する画面になるので、日本在住であればJapanを選びましょう。
日本のどのサーバからダウンロードするか、の選択肢ですが、どれでも大きな違いは無いはずなので今回は一番上を選んでみます。
プロキシを刺す必要がある人はここで適切な値を入力します。私は必要ないので空欄でリターンキーを押します。
時間帯等のアレで繋がらない場合は、時間を空けるか、何度かリトライして下さい。
暫く待つと、どのパッケージをインストールしたかに関する統計情報を定期的に送信するか(意訳)という選択肢が出てくるので、嫌な人はNo
を選んでおきます。
少し待つと、大雑把にどの種類のパッケージをインストールするかを選択する画面になります。どちらにせよ後で追加できるので、今回は図のように一番下のstandard system utilities
以外は空欄にして進めます。選択と非選択の切り替えにはスペースキーを使います。
暫く待つと、次はGRUBをインストールする段階になります。詳しい事は省きますが、これが入ってないと起動しないのでYesを選択してインストールします。
インストール先は/dev/sda
にします。
お疲れ様でした!仮想環境へのDebianのインストールが完了しました!Continueを選んで、仮想環境の再起動をしましょう。
仮想環境の初期設定
再起動後暫く待つと、ログイン画面になります。色々とやることがあるので、まずはrootとしてログインします。この時、パスワードを打つ時に画面上の反応はありませんが、正常です。
まずはapt
でsudo
を入れます。
コマンドはapt install sudo
です。
また、この後sudoersを編集するので好みのテキストエディタがあればそれを入れます。例えばemacsユーザであれば、apt install emacs-nox
で入ります。何も入れない場合、vim.tiny
とnano
がこの時点で使えるようでした。
次にsudoersを編集するのに使うエディタを選択します。
コマンドはupdate-alternatives --config editor
です。
最後に、visudo
コマンドでsudoersファイルに下図のような感じの行を追加します。
今回私は普段使いのユーザアカウント名をuser
として作ったので、21行目の反転させている部分の最初の単語はuser
となります。
最後に保存してエディタを終了させた後、Ctrl+D
を押すか、またはlogout
コマンドによってログアウトします。
仮想環境の追加設定
まずは通常ユーザとしてログインし、プログラミング環境を整えます。今回はC言語の環境を整えたいので、build-essential
をapt
で入れておきましょう。
コマンドはsudo apt install build-essential
となります。
apt
コマンドの実行に権限が必要なので、sudo
コマンドで一時的に昇格します。最初に昇格する時に「よく考えて使ってね」とも言われますが、スルーして現在ログイン中のアカウントのパスワードを入力します。
build-essential
に関連付けられた多くのプログラムとライブラリがインストールの予定の一覧に上がります。「続けますか?」の質問に対しY
または無記名でリターンキーを押して応える事によって(多肢選択式の場合で、一つだけ大文字になっていれば、普通はそれがデフォルトで選ばれます)、インストールが始まります。
やる事が一通り終わったら、一旦終了しましょう。
Debianを終了するにはsudo poweroff
で行けます。
仮想ディスクファイルの小型化
QCOW2形式の仮想ディスクファイルは、使っているうちにどんどん大きくなります。
但し、次のような内容のコマンドを(Windows側で)実行する事によって、圧縮できる場合があります5。
move hdd1.qcow2 hdd1.qcow2.backup
qemu\qemu-img convert -O qcow2 hdd1.qcow2.backup hdd1.qcow2
起動の簡略化
最後に、メモ帳か何かにqemu\qemu-system-x86_64 -m 512 -hda hdd1.qcow2
と書いて、virtual-machine-startup.bat
というファイル名で作業ディレクトリに保存すると、そこから起動できるようになるので非常に便利です。
結果
WindowsのゲストアカウントでC系の言語でプログラミングできるようになった!
今時のUSBメモリになら余裕で全部入る大きさとなりました(debian-netinst.isoを含まず、仮想ディスクファイルは圧縮済み)。
最後に
ひとまずここで備忘録を終わりにします。
最後まで読んでくださった方、ありがとうございました。
-
例外として、MinGWはPATHの設定が出来ない事を除けば持ち運んで使う事も出来なくはない。すごく不便だけど。 ↩
-
この記事を書いている2017年3月24日現在の辿り方とファイル名なのでもしかしたら変わるかも知れません。 ↩
-
実際に使われるメモリのサイズにはQEMU自体が使う分も含まれるので、300MBくらいの追加の余裕がホスト側(QEMU自体を動かす側)に必要となります。
無事立ち上がったので、リターンキーを押してInstallを選びます。
言語は英語推奨です。インストール後、起動した時に文字化けすることが多いので4。 ↩ -
厳密にはインストール時の言語の設定の問題ではなくロケールの設定の問題なのでインストール後に弄れば直る。 ↩
-
厳密には圧縮ではなく、既に使われなくなった領域を詰めてるだけ。 ↩