イヌツムリのメモ

学習したことのメモである。しかし、他の人が読んでもわかるように書こう。

virtualboxをCUIで操作する

2020/11/10 章: バックアップを取りたいが何回もexport何回もするのがめんどいスクリプトがめちゃめちゃだったので正しく動くように更新
2020/11/10 章: 複数起動したいとき のコマンドがテキトーすぎて間違っていたので正しく動くように更新
2021/06/28 ケーブル接続設定を変更するを追記

概要

virtualboxをコマンドで操作したい。 vboxmanageコマンドで操作することができる。 しかし、vboxmanageコマンドのヘルプを見ても情報が足りなくてよくわらないため、コマンドの使い方のメモを残す。 たびたび追記したい。

コマンド

vboxmanage サブコマンド パラメータ のように記述する

仮想マシンの名称とUUIDの一覧を出力する

入力

$ vboxmanage list vms

出力

"foo bar" {f661256d-f63a-4548-a252-12e7bdda1b80}
"burabura" {ab31256d-f63a-4548-a252-12e7bdda1b80}
...

説明

めんどくなったのでコマンドだけメモ 後で使ったらどう動くか、使い方など整理する

仮想マシンIPアドレスを取得する

$ VBoxManage guestproperty enumerate vmname | grep IP  

起動している仮想マシンのリストを出力する

$ vboxmange list runningvms  

virtualboxで管理している仮想マシンのリストを出力する

$ vboxmanage list vms  
"foo bar" {f661256d-f63a-4548-a252-12e7bdda1b80}  
"vm name" {uuid}の形式で出力される  

仮想マシンを起動する

$ vboxmanage startvm uuid|vmname --type headless  

仮想マシンをシャットダウンする

注: 公式が電源からブチッと抜くのと同じだよって言っているので
できたらshellからshutdownコマンド使ってあげてください。

$ vboxmanage controlvm uuid|vmname poweroff  

仮想マシンのコピーを作成する

$ vboxmanage clonevm <uuid|vmname> --mode machine --options keepallmacs --name <name> --register  

仮想マシンのネットワークの設定を確認する

$ vboxmanage showvminfo uuid|vmname  

したの方のNICのところに、ネットワーク種別や物理ネットワークIFの設定が記述されている

仮想マシンのネットワーク種別の設定を変更する

$ vboxmanage modifyvm <uuid|vmname> -nic<1-N> none|null|nat|bridged|intnet|hostonly|generic  

仮想マシンの物理IFの割当を変更する

$ vboxmanage modifyvm <uuid|vmname> -bridgeadapter<1-N> none|<devicename>  

仮想マシンをexportする

$ vboxmanage export  <name> -o <name>.ova  

仮想マシンをimportする

$ vboxmanage import  --options keepallmacs <filepath>  

importするときに設定を変える。
まず、確認のため実際にインポートはせずに、インポートした場合の設定を確認する。

$ vboxmanage import --dry-run <filepath>

出力結果が下記のようにでる 1

 0: Suggested OS type: "WindowsXP"
    (change with "--vsys 0 --ostype <type>"; use "list ostypes" to list all)
 1: Suggested VM name "Windows XP Professional_1"
    (change with "--vsys 0 --vmname <name>")
 2: Suggested VM group "/"
    (change with "--vsys 0 --group <group>")
 3: Suggested VM settings file name "/home/klaus/VirtualBox VMs/dummy2 2/dummy2 2.vbox"
    (change with "--vsys 0 --settingsfile <filename>")
 4: Suggested VM base folder "/home/klaus/VirtualBox VMs"
    (change with "--vsys 0 --basefolder <path>")
 5: End-user license agreement
    (display with "--vsys 0 --eula show";
    accept with "--vsys 0 --eula accept")
 6: Number of CPUs: 1
    (change with "--vsys 0 --cpus <n>")
 7: Guest memory: 956 MB (change with "--vsys 0 --memory <MB>")
 8: Sound card (appliance expects "ensoniq1371", can change on import)
    (disable with "--vsys 0 --unit 5 --ignore")
 9: USB controller
    (disable with "--vsys 0 --unit 6 --ignore")
10: Network adapter: orig bridged, config 2, extra type=bridged
11: Floppy
    (disable with "--vsys 0 --unit 8 --ignore")
12: SCSI controller, type BusLogic
    (change with "--vsys 0 --unit 9 --scsitype {BusLogic|LsiLogic}";
    disable with "--vsys 0 --unit 9 --ignore")
13: IDE controller, type PIIX4
    (disable with "--vsys 0 --unit 10 --ignore")
14: Hard disk image: source image=WindowsXp.vmdk,
      target path=/home/user/disks/WindowsXp.vmdk, controller=9;channel=0
    (change controller with "--vsys 0 --unit 11 --controller <id>";
    disable with "--vsys 0 --unit 11 --ignore")

次に変更した場合、どうなるかdry runする 例えば今は名前が 1: Suggested VM name のところに、"Windows XP Professional_1"と書いてある 下のchange withに従ってオプションを付ける

$ vboxmanage import --dry-run  -vsys 0 --vmname "dogsnailvm" <filepath>

出力

 0: Suggested OS type: "WindowsXP"
    (change with "--vsys 0 --ostype <type>"; use "list ostypes" to list all)
 1: Suggested VM name "dogsnailvm"
    (change with "--vsys 0 --vmname <name>")
 2: Suggested VM group "/"
    (change with "--vsys 0 --group <group>")
 3: Suggested VM settings file name "/home/klaus/VirtualBox VMs/dummy2 2/dummy2 2.vbox"
    (change with "--vsys 0 --settingsfile <filename>")
 4: Suggested VM base folder "/home/klaus/VirtualBox VMs"
    (change with "--vsys 0 --basefolder <path>")
 5: End-user license agreement
    (display with "--vsys 0 --eula show";
    accept with "--vsys 0 --eula accept")
 6: Number of CPUs: 1
    (change with "--vsys 0 --cpus <n>")
 7: Guest memory: 956 MB (change with "--vsys 0 --memory <MB>")
 8: Sound card (appliance expects "ensoniq1371", can change on import)
    (disable with "--vsys 0 --unit 5 --ignore")
 9: USB controller
    (disable with "--vsys 0 --unit 6 --ignore")
10: Network adapter: orig bridged, config 2, extra type=bridged
11: Floppy
    (disable with "--vsys 0 --unit 8 --ignore")
12: SCSI controller, type BusLogic
    (change with "--vsys 0 --unit 9 --scsitype {BusLogic|LsiLogic}";
    disable with "--vsys 0 --unit 9 --ignore")
13: IDE controller, type PIIX4
    (disable with "--vsys 0 --unit 10 --ignore")
14: Hard disk image: source image=WindowsXp.vmdk,
      target path=/home/user/disks/WindowsXp.vmdk, controller=9;channel=0
    (change controller with "--vsys 0 --unit 11 --controller <id>";
    disable with "--vsys 0 --unit 11 --ignore")

おkなら、実際に設定を変更してインポートする

$ vboxmanage import  -vsys 0 --vmname "dogsnailvm" <filepath>

仮想マシンを削除する

$ vboxmanage unregister <uuid|name>  

ケーブル接続設定を変更する(2021/06/28追記)

pingが通らないなどのトラブルの原因の1つとして、ケーブル接続設定がある。 この設定は仮想マシンイーサネットポートにケーブルが接続されているか、抜いているかをエミュレートしている。
チェック有りがケールブルを接続している、チェックなしがケーブルを抜いている状態を示す(onが接続、offが抜く)。

vboxmanage modifyvm <uuid | name> --cableconnected<1-N> <on | off>
vboxmanage modifyvm dogsnailvm --cableconnected1 on

よく使う

インポートの際に、macアドレスを維持したいことが多々ある。 macが変わってしまうと、/dev ~のファイルやらなんやら設定し直すことになってめんどい。 のでインポートする際に下記オプションをつける

$ vboxmanage import dogsnailvm.ova --options keepallmacs

バックアップを取りたいが何回もexport何回もするのがめんどい

バックアップを取りたいが何回もexport何回もするのがめんどいので下記スクリプトを使う。 起動している仮想マシンのリストを取得して、それらを停止した後にexportする。

#! /bin/sh

list=(`vboxmanage list  runningvms |  sed -e "s/^.*\"\(.*\)\".*$/\1/"`)

for vm in ${list[@]} ; do
  vboxmanage controlvm ${vm} poweroff;
  vboxmanage export ${vm} -o  ${vm}.ova;
done

複数起動したいとき

xargsでいっこずつ渡せばいけたはず

dogsnailという名前を含む仮想マシンをすべて起動するには下記のようなコマンドで実現できる。
grep以前を調整すれば応用可能

vboxmanage list vms | grep dogsnail  | cut -d" " -f1 | xargs -I{}  vboxmanage startvm {} --type headless

参考