pyrebox超入門2　～pyreboxの基本的使用法編～

#はじめに
* この記事ではpyreboxの基本的な使い方を紹介します。早くpyreboxでスクリプティングしたい気持ちもわかりますが、これを知らないと問題の切り分けが困難になるからです。
* 前回[（pyrebox超入門１）](https://qiita.com/najayama/items/8d9a97d70216999e4792)を読んだ人向けです。
* 少し前回と被りますが、まとめておいたほうが便利だろうと思ったのでここにまとめておきます。


#1. 仮想マシンの管理
あとでご自分で調べるときはpyrebox **ではなく**qemuで検索したほうがいいかもしれません。この章の内容のほとんどはqemuの話です。（pyreboxはqemuをベースなのでqemuの使い方も必要だからです。）

##仮想マシンの新規作成
vmwareなどと違って、qemuはGUIから仮想マシンを作れません。（GUI化プロジェクトがpyreboxに対応しているか怪しいから。）
###仮想ハードディスクの作成
以下のようなコマンドを実行

```bash
$ ./pyrebox/qemu/qemu-img create -f qcow2 -o compat=0.10 images/example.qcow2 8G 
```
qemuには`qemu-img`というコマンドがあり、これでハードディスクの管理を行うのですが、pyreboxから扱う仮想ハードディスクの作成には、`pyrebox/qemu`ディレクトリにあるバイナリを使用する必要があるようです。ハードディスク作成の具体的構文は以下の通り。
`pyrebox/qemu/qemu-img create [-f fmt]  [-o options] filename [size]`
* `-f`がフォーマットの指定(qcow2がおすすめ)
* `-b`でファイルを指定すると、指定されたファイルからの差分のみが記録されるようになります。
* `-o`でオプション設定。`compat=0.10`は、qcow2形式のバージョン指定らしいです。

##設定ファイル作成
ここはpyrebox独特の話です。pyreboxの設定ファイルは、`pyrebox`ディレクトリ直下に`pyrebox.conf`という名前で置かなくてはなりません。これはすべての仮想マシンで共通です。（プロファイルの使い分けについては次の節で述べます。）


##起動スクリプト作成
pyrebox超入門１を読んだ方ならご存知の通りpyreboxで仮想マシンを起動するのには非常に長いコマンドを打たなくてはなりません。複数の仮想マシンを使い分けるとなるとpyrebox.conf（前述）もいちいち入れ替えなくてはならず非効率的です。そこで起動スクリプトの出番です。各仮想マシンのための起動スクリプトは以下の手順で作成します。

###準備その１. 設定ファイルの移動
まずはその仮想マシンで使いたい`pyrebox.conf`を別のファイル名にコピーしてください。この例では`pyrebox.conf.centos_x86_64`としています。
`$ cp pyrebox.conf pyrebox.conf.centos_x86_64`

###準備その２.とりあえずひな形をコピーしてくる。
`pyrebox/start_x86_64.sh`というファイルに公式の用意したひな形があるのでそれをコピーしてきます。
`$ cp start_x86_64.sh start_centos_x86_64.sh`

このファイルは以下のような内容のファイルです。

```bash:pyrebox/start_x86_64.sh
#!/bin/bash

if [ -z "$2" ]
then
    snapshot=""
else
    snapshot="-loadvm $2"
fi

cp pyrebox.conf.example pyrebox.conf
./pyrebox-x86_64 -monitor stdio -m 512 -usb -drive file=$1,index=0,media=disk,format=qcow2,cache=unsafe -vnc 127.0.0.1:0 ${snapshot} 
```

このスクリプトの動作は、例えば `./start_x86_64.sh images/centos.qcow2 4` とすると、

* まずpyrebox.conf.example を　pyrebox.confにコピーします。（これによって複数のpyrebox.confを使い分けられます。）
* 次にpyrebox-x86_64で第一引数に指定された仮想ハードディスク（この場合`images/centos.qcow2`）のスナップショット（後述）４番に復元して起動します。

これが全く分からない場合シェルスクリプトを少しだけでも（if文だけでも）勉強してください。

###準備その３．各仮想マシン向けにコピーしたファイルを編集する。
１０行目の`pyrebox.conf.example` を`準備１で作ったファイル名` に書き換えます。さっき使った例では、
`cp pyrebox.conf.example pyrebox.conf` -> `cp pyrebox.conf.centos_x86_64 pyrebox.conf`
となります。
次に、１１行目 `./pyrebox-x86_64 -monitor stdio -m 5（以下略）` を必要に応じて書き換えます。具体的には、

* メモリを変更したい場合、`-m "メガバイト単位でのメモリ数"`　

等です。（この行の詳しい説明は前回[pyrebox超入門１](https://qiita.com/najayama/items/8d9a97d70216999e4792)）を参照してください。）

###起動方法
`./start_centos_x86_64 images/centos.qcow2 2" などとして起動します。
vncserverが127.0.0.1に立っているので、127.0.0.1にvncクライアントで接続すればOKです。

##ハードディスクの管理

###容量の拡大
`pyrebox/images/exampledisk.qcow2`を8GBにするなら以下のように打ちます。

```bash
$ cd pyrebox
$ ./qemu/qemu-img resize images/exapmledisk.qcow2 8G`
```
現時点で容量を小さくするのは結構骨らしいので注意してください。

###別の形式に変換
vmdkにするなら以下のようにします。

```
$ cd pyrebox
$ ./qemu/qemu-img convert -O vmdk [入力ファイル].qcow2 [出力先].vmdk`
```

#2. qemu monitor, pyrebox shell の使い方
###qemu monitor, pyrebox shellとは
qemu monitor とはqemuの提供する仮想マシンのコントロールパネルみたいなものです。VMwareやVboxをクリックしたときに初めに出てくる管理画面みたいなもんです。本家qemuは有志がGUIを提供しているようですが、pyreboxには対応していないのでCUIで操作することになります。pyrebox shell はqemu monitor上で動作するpyreboxのインターフェイスの一つです。
###qemu monitor の基本的コマンド
pyreboxに-monitor stdio オプションを付けるとvm起動後に(qemu)と書かれたプロンプトが出るはずです。これがqemu monitor です。（前述した起動スクリプトを使っているなら勝手に出るはず。）代表的なコマンドだけ紹介しときます。
各コマンドの詳しい使い方は[**こちらを見て下さい**](https://en.wikibooks.org/wiki/QEMU/Monitor)。

| コマンド | 効果 | 
|:--------------------|:---------------------------------------------------------------------------------------|
| savevm [名前]       |[名前]　で指定した名前のスナップショットを作る  |
| loadvm [名前] | [名前]で指定したスナップショットに復元する     |
| info [対象]  | 指定した対象の情報を表示。snapshot, vnc, version, usb等  |
|change [対象]| 指定した対象を変更|
|screendump [ファイル名]|スクリーンショットを保存|
|stop|仮想マシンの一時停止 |
|cont|仮想マシンの実行再開|
|sh| pyrebox shell（後述）を起動|
|import_module [モジュール名]|pyreboxモジュールをインポート|
|system_powerdown|シャットダウンします|
|q / quit|qemu monitor から抜けます。|

pyrebox超入門１から読んでくださっている方へ：ここで１回savevmでスナップショットをとっておいたほうがいいです。変なことになった後にリカバーするのものすごく面倒なので。

###pyrebox shell の基本的コマンド
qemu monitor で`sh`と打つことで起動できます。ipythonっぽいです。詳しい使い方は[**こちらを見てください**](https://media.readthedocs.org/pdf/pyrebox/latest/pyrebox.pdf)ここでは代表的なコマンドだけ紹介します。

| コマンド | 効果 | 
|:--------------------|:---------------------------------------------------------------------------------------|
|list_commands|コマンドの一覧を表示|
|list_vol_commands|volatility frameworkのコマンド一覧を表示|
|vol [コマンド]|volatility command を実行|
|q / quit|pyrebox shellを出ます|

今回はここまでです。次回はいよいよpyrebox scriptingについて書こうと思います。