VBoxManage
Установить VirtualBox на сервер не сложно
Переходим https://www.virtualbox.org/wiki/Linux_Downloads
И действуем по инструкции
Полезная статья https://eax.me/vboxmanage/
Из этой статьи взял https://github.com/afiskon/py-vm - упрощает рядовые операции
Еще больше упрощает жизнь bash-autocompletion - https://github.com/gryf/vboxmanage-bash-completion
Я себе заделал алиас alias vbm='vboxmanage'
Чтобы autocompletion работал и с этим алиасом нужно добавить
root@s1 ~ # tail -n 3 /usr/share/bash-completion/vboxmanage
complete -o default -F _VBoxManage VBoxManage
complete -o default -F _VBoxManage vboxmanage
complete -o default -F _VBoxManage vbm # <- нужно добавить такое
Так же для работы vboxmanage требуется установить linux-headers-5.10.0-9-amd64 gcc make perl
и выполнить /sbin/vboxconfig
Для облегчения жизни сделал еще вот такое
root@s1 ~ # type vmips
vmips is a function
vmips ()
{
for vm in `vbm list vms | cut -d'"' -f2`;
do
VMMACAddr="`vbm showvminfo $vm | grep -oP "MAC: .*?," | cut -d' ' -f2 | cut -d',' -f1`";
vboxmanage dhcpserver findlease --mac-address $VMMACAddr --network NatNetwork | grep 'IP' | sed "s/IP Address:/${vm}:\t/g";
done
}
Позволяет вывести список машин и их айпишники
root@s1 ~ # vmips
template: 10.0.5.10
pgsql-edu: 10.0.5.8
list vms
покажет тачки
Опция --long
даст значительно более подробный вывод
root@s1 ~ # vbm list vms | wc -l
1
root@s1 ~ # vbm list vms --long | wc -l
116
Создаем машину
# vbm createvm --name test-debian-11 --ostype Debian_64 --register
Создаем для нее жесткий диск
# vbm createmedium disk --filename /root/virtualboxvms/test-debian-11/test-debian-11.vdi --size 20000
Добавляем на машину sata контроллер и прикручиваем через него созданный жесткий диск
# vbm storagectl test-debian-11 --name sata-controller --add sata --controller IntelAHCI
# vbm storageattach test-debian-11 --storagectl sata-controller --port 0 --device 0 --type hdd --medium /root/virtualboxvms/test-debian-11/test-debian-11.vdi
Аналогично поступаем с dvd контроллером и образом установочного диска
# vbm storagectl test-debian-11 --name ide-controller --add ide --controller PIIX4
# vbm storageattach test-debian-11 --storagectl ide-controller --port 1 --device 0 --type dvddrive --medium /root/virtualboxvms/debian-11.2.0-amd64-netinst.iso
Включаем rdp
# vbm modifyvm test-debian-11 --vrde on
Находим extpack под нашу версию (версию можно узнать так vbm --version
)
https://www.virtualbox.org/wiki/Download_Old_Builds
# wget https://download.virtualbox.org/virtualbox/6.1.28/Oracle_VM_VirtualBox_Extension_Pack-6.1.28.vbox-extpack
# vbm extpack install Oracle_VM_VirtualBox_Extension_Pack-6.1.28.vbox-extpack
# vbm list extpacks
Extension Packs: 1
Pack no. 0: Oracle VM VirtualBox Extension Pack
Version: 6.1.28
Revision: 147628
Edition:
Description: Oracle Cloud Infrastructure integration, USB 2.0 and USB 3.0 Host Controller, Host Webcam, VirtualBox RDP, PXE ROM, Disk Encryption, NVMe.
VRDE Module: VBoxVRDP
Usable: true
Why unusable:
Запускаем машину (headless тк запускаем без графики)
# vbm startvm test-debian-11 --type headless
Waiting for VM "test-debian-11" to power on...
VM "test-debian-11" has been successfully started.
Дальше можно подключиться через какой-нибудь rdp клиент
Останавливаем машину, даем ей больше ресурсов и запускаем
# vbm controlvm test-debian-11 poweroff
# vbm modifyvm test-debian-11 --cpus 4 --memory 4000
# vbm startvm test-debian-11 --type headless # не забываем про headless, иначе не запустится
И радуемся тому что больше нет kernel panic
Можно скачать готовый образ с https://www.osboxes.org и делать из него машины
Создаем машины
# vbm createvm --name pgsql-1 --ostype Debian_64 --register
Virtual machine 'pgsql-1' is created and registered.
UUID: ea1335c4-4afc-48da-8152-cd77289bec70
Settings file: '/root/virtualboxvms/pgsql-1/pgsql-1.vbox'
# vbm modifyvm pgsql-1 --cpus 4 --memory 4000
# vbm createvm --name pgsql-2 --ostype Debian_64 --register
# vbm createvm --name pgsql-3 --ostype Debian_64 --register
# vbm modifyvm pgsql-2 --cpus 4 --memory 4000
# vbm modifyvm pgsql-3 --cpus 4 --memory 4000
root@s1 ~/virtualboxvms # tree
.
├── debian-11.2.0-amd64-netinst.iso
├── debian-11-server.vdi
├── Oracle_VM_VirtualBox_Extension_Pack-6.1.28.vbox-extpack
├── pgsql-1
│ ├── pgsql-1.vbox
│ └── pgsql-1.vbox-prev
├── pgsql-2
│ ├── pgsql-2.vbox
│ └── pgsql-2.vbox-prev
└── pgsql-3
├── pgsql-3.vbox
└── pgsql-3.vbox-prev
Добавляем sata
# vbm storagectl pgsql-1 --name sata-controller --add sata --controller IntelAHCI
# vbm storagectl pgsql-2 --name sata-controller --add sata --controller IntelAHCI
# vbm storagectl pgsql-3 --name sata-controller --add sata --controller IntelAHCI
Копируем VDI из скачанного с osboxes в диск для созданных машин
# cp debian-11-server.vdi pgsql-1/pgsql-1.vdi
# cp debian-11-server.vdi pgsql-2/pgsql-2.vdi
# cp debian-11-server.vdi pgsql-3/pgsql-3.vdi
Аттачим эти vdi к машинам
# vbm storageattach pgsql-1 --storagectl sata-controller --port 0 --device 0 --type hdd --medium /root/virtualboxvms/pgsql-1/pgsql-1.vdi
# vbm storageattach pgsql-2 --storagectl sata-controller --port 0 --device 0 --type hdd --medium /root/virtualboxvms/pgsql-2/pgsql-2.vdi
VBoxManage: error: Cannot register the hard disk '/root/virtualboxvms/pgsql-2/pgsql-2.vdi' {4e1934ce-f42f-489c-be67-12317fb24b80} because a hard disk '/root/virtualboxvms/pgsql-1/pgsql-1.vdi' with UUID {4e1934ce-f42f-489c-be67-12317fb24b80} already exists
VBoxManage: error: Details: code NS_ERROR_INVALID_ARG (0x80070057), component VirtualBoxWrap, interface IVirtualBox, callee nsISupports
VBoxManage: error: Context: "OpenMedium(Bstr(pszFilenameOrUuid).raw(), enmDevType, enmAccessMode, fForceNewUuidOnOpen, pMedium.asOutParam())" at line 187 of file VBoxManageDisk.cpp
VBoxManage: error: Invalid UUID or filename "/root/virtualboxvms/pgsql-2/pgsql-2.vdi"
И на второй машине получаем ошибку
Данная ошибка появляется в результате того, что мы скопировали файл образа диска виртуальной машины, а UUID остался прежним
Делаем вот так
# vbm internalcommands sethduuid pgsql-2/pgsql-2.vdi
UUID changed to: 088d52d2-323f-41e8-981e-9c2d1964943a
# vbm internalcommands sethduuid pgsql-3/pgsql-3.vdi
UUID changed to: 2c24c4a1-2c15-47b7-aae6-f3bea7f96457
И теперь аттачинг отрабатывает без ошибки
# vbm storageattach pgsql-2 --storagectl sata-controller --port 0 --device 0 --type hdd --medium /root/virtualboxvms/pgsql-2/pgsql-2.vdi
# vbm storageattach pgsql-3 --storagectl sata-controller --port 0 --device 0 --type hdd --medium /root/virtualboxvms/pgsql-3/pgsql-3.vdi
Аттачим машины к netnat
# vboxmanage natnetwork add --netname debian-network --network 10.0.5.0/24 --enable --dhcp on --ipv6 off
# vm stop pgsql-1
# vbm modifyvm pgsql-1 --nic2 natnetwork --nat-network2 debian-network
# vm stop pgsql-2
# vbm modifyvm pgsql-2 --nic2 natnetwork --nat-network2 debian-network
# vm stop pgsql-3
# vbm modifyvm pgsql-3 --nic2 natnetwork --nat-network2 debian-network
# vm start pgsql-1
# vm start pgsql-2
# vm start pgsql-3
Портфорвардинг
# vm stop pgsql-3
# vm stop pgsql-2
# vm stop pgsql-1
# vbm modifyvm pgsql-1 --natpf1 "ssh-forwarding,tcp,,22001,,22"
# vbm modifyvm pgsql-2 --natpf1 "ssh-forwarding,tcp,,22002,,22"
# vbm modifyvm pgsql-3 --natpf1 "ssh-forwarding,tcp,,22003,,22"
# vm start pgsql-1
# vm start pgsql-2
# vm start pgsql-3
No Comments