User Tools

Site Tools


virtualbox

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
virtualbox [2010/01/13 11:20] 172.26.0.166virtualbox [2010/02/18 12:48] 172.26.0.166
Line 1: Line 1:
-===== VirtualBox tips/tricks ===== +===== VirtualBox ===== 
-==== Commonly-used commands ==== +VirtualBox is free/opensource Hypervisor from Sun Microsystems.  It has performance on par with VMware and is very mature.  We have two virtualization servers, [[biovbox]] and biovboxtesting.
-To change between "not attached", NAT,Bridged,internal network and host olny adapter:  +
-<code>VBoxManage modifyvm <uuid|name> [--nic<1-N> none|null|nat|bridged|intnet|hostonly]</code> +
-Set the boot order: +
-<code>VBoxManage modifyvm <uuid|name> [--boot<1-4> none|floppy|dvd|disk|net>]</code> +
-Add shared folder: +
-<code>VBoxManage sharedfolder add <vmname>|<uuid> --name <name> --hostpath <hostpath> [--transient] [--readonly] </code> +
-Acpi Vm: +
-<code>VBoxManage controlvm  <uuid>|<name>pause|resume|reset|poweroff|savestate|acpipowerbutton|acpisleepbutton| </code> +
-Change rdp address: +
-<code>VBoxManage modifyvm <uuid|name> [--vrdpaddress <host>]</code> +
-Change the Authentication type:  +
-<code>VBoxManage modifyvm <uuid|name> [--vrdpauthtype null|external|guest]</code> +
-**Note**: option "external" will limit access to individual users, The user will be required to use rdesktop-vrdp with username and password: +
-<code>rdesktop-vrdp -u <username> -p - <host ip address>:<vrdp port></code> +
-Change rdp port: +
-<code>VBoxManage modifyvm <uuid|name> [--vrdpport <port>]</code> +
-List all VMs in the server: +
-<code>VBoxManage list vms</code> +
-List all running VMs: +
-<code>VBoxManage list runningvms </code> +
-List guest properties: +
-<code> VBoxManage list -l  vms </code> +
-Note: All the guest parameters(configuration) are in <guestname>.xml+
  
 +  * [[http://www.virtualbox.org|VirtualBox homepage]]
 ===== Create a VM ===== ===== Create a VM =====
 Copy an ISO to your home directory: Copy an ISO to your home directory:
-<code>$scp <dist>.iso <username>@172.26.0.205:~/</code> +<code>$scp ubuntu-9.04-desktop-i386.iso alan@172.26.0.200:~/</code> 
-  * SSH to VM server: 172.26.0.205 +  * SSH to VM server: 172.26.0.200 
-<code>$ ssh <username>@172.26.0.205</code>+<code>$ ssh alan@172.26.0.200</code>
   * start the virtualbox application   * start the virtualbox application
 <code>$ VirtualBox</code> <code>$ VirtualBox</code>
-  * Follow the wizzard to create a VM with the following properties:+  * Follow the wizard to create a VM with the following properties:
       - Base Memory: less than 512 MB       - Base Memory: less than 512 MB
       - Network : NAT       - Network : NAT
-      - Harddisk size: less than 30Gb+      - Hard disk size: less than 30Gb 
 + 
 +===== Networking ===== 
 +==== Bridged Networking ==== 
 +If your guest is using bridged networking you MUST use this command to allow other users to use the host's physical network card.  Make sure your virtual machine is shut down and then run this command: 
 +<code>VBoxManage setextradata MyMachine VBoxInternal/Devices/pcnet/0/LUN#0/Config/RestrictAccess 0</code> 
 +Each and every VM using bridged networking must use this command.  If you are seeing errors like ''VERR_PERMISSION_DENIED'' regarding the network interface, this is the cause! 
 + 
 +As of VirtualBox 3.1.2 this is still a [[http://www.virtualbox.org/ticket/2852|known issue]]. 
 ==== Port Forwarding ==== ==== Port Forwarding ====
  
-If your guest OS is using NAT for networking you will need to enable port forwarding.  There is no GUI for this in VirtualBox, but you can use ''VBoxManage setextradata'' to make the required changes.  If you want to SSH to your VM, for example:+If your guest OS is using NAT for networking and you want to access services like Apache or SSH, you will need to enable port forwarding.  There is no GUI for this in VirtualBox, but you can use ''VBoxManage setextradata'' to make the required changes.  If you want to SSH to your VM, for example:
 <code>$ VBoxManage setextradata Ubuntu "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/HostPort" 2223 <code>$ VBoxManage setextradata Ubuntu "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/HostPort" 2223
 $ VBoxManage setextradata Ubuntu "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/GuestPort" 22 $ VBoxManage setextradata Ubuntu "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/GuestPort" 22
-$ VBoxManage setextradata Ubuntu "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/Protocol" TCP+$ VBoxManage setextradata Ubuntu "VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/Protocol" TCP</code>
 Then you can log in to the VM from your own computer using the port you've forwarded above: Then you can log in to the VM from your own computer using the port you've forwarded above:
-<code>$ ssh -p 2223 username@172.26.0.205</code> +<code>$ ssh -p 2223 username@172.26.0.200</code> 
- +===== Updating VirtualBox ===== 
-=== Upgrading VirtualBox === +To update VirtualBox to a new version you must shutdown all the running VMs.  You can do this by first looking to see which VMs are running (''ps auxw | grep VBox'') and then shutting down or saving the state of each one.
 <file>[jmagochi@biovbox ~]$ VBoxManage controlvm CentOS savestate <file>[jmagochi@biovbox ~]$ VBoxManage controlvm CentOS savestate
 VirtualBox Command Line Management Interface Version 3.0.8 VirtualBox Command Line Management Interface Version 3.0.8
Line 55: Line 41:
 [jmagochi@biovbox ~]$ sudo /etc/init.d/vboxdrv stop [jmagochi@biovbox ~]$ sudo /etc/init.d/vboxdrv stop
  
-wget http://download.virtualbox.org/virtualbox/3.0.12/VirtualBox-3.0.12-54655-Linux_amd64.run +yum install virtualbox-3.1
-$ ./VirtualBox-3.0.12-54655-Linux_amd64.run +
-$ /etc/init.d/vboxdrv setup+
 </file> </file>
 +===== Commonly-used commands =====
 +==== List your VMs ====
 +<code>$ VBoxManage list vms</code>
 +==== List your running VMs ====
 +<code>$ VBoxManage list runningvms </code>
 +==== Autostart VMs at host boot ====
 +----
 +
 +How do I get my VirtualBox Guest VM’s to start and stop when the host system reboots, shutdown, or starts.
 +
 +Solution / Answer:
 +
 +Create an init.d script so that VirtualBox Guest VM are controlled as a system service.
 +VBoxTool http://vboxtool.sourceforge.net
 +
 +http://www.kernelhardware.org/virtualbox-auto-start-vm-centos-fedora-redhat
 +
 +----
 +Create Config File for vboxcontrol service script
 +
 +<code># mkdir /etc/virtualbox</code
 +<code># touch /etc/virtualbox/machines_enabled</code>
 +The file “machines_enabled” located in “/etc/virtualbox” is where we list the names of the Guest VM’s that we want vboxcontrol to control.
 +
 +To get a list of your current Guest VM names execute the following command and notice the name is in ” “:
 +<file>
 +$ VBoxManage list vms
 +"Centos_HDLES_x86_1" {5087b02a-5816-4c76-b302-c13175623023}
 +"Centos_HDLES_x86_3" {bcae660a-f627-46d6-8c95-9da97363eeea}
 +"Centos_HDLES_LAMP" {3907173c-cc15-4820-a930-f0bb3c13cb7e}</file>
 +Add Guest VM’s to “machines_enabled” include one VM name per line
 +<file>
 +# vi /etc/virtualbox/machines_enabled
 +Centos_HDLES_x86_1
 +Centos_HDLES_x86_3
 +Centos_HDLES_LAMP</file>
 +Add VirtualBox VM Service script
  
-===== Expanding a Virtual Disk ===== +Create new init.d service script file and give execute permissions
-There is no way to expand a VDI What you have to do is create a new VDI, boot the virtual machine to a live cd, and copy over the filesystem (either via ''dd'', rsync, etc).+
  
-Create new VDI+<code># touch /etc/init.d/vboxcontrol</code> 
 +<code># chmod 755 /etc/init.d/vboxcontrol</code> 
 +Copy the following code into file “/etc/init.d/vboxcontrol”
  
-Attach to virtual machine and boot with System Rescue CD+<code bash> 
 +#! /bin/sh 
 +# vboxcontrol   Startup script for VirtualBox Virtual Machines 
 +
 +# chkconfig: 345 98 02 
 +# description: Manages VirtualBox VMs 
 +# processname: vboxcontrol 
 +
 +# pidfile: /var/run/vboxcontrol/vboxcontrol.pid 
 +
 +### BEGIN INIT INFO 
 +
 +### END INIT INFO 
 +
 +# Version 20090301 by Kevin Swanson <kswan.info> based on: 
 +# Version 2008051100 by Jochem Kossen <jochem.kossen@gmail.com> 
 +# http://farfewertoes.com 
 +
 +# Released in the public domain 
 +
 +# This file came with a README file containing the instructions on how 
 +# to use this script. 
 +#
  
-Create two partitions with fdisk/cfdisk/parted, whatever: +# Source function library. 
-  1: 100 MB, boot, type "Linux" (83) +if [ -f /etc/init.d/functions ] ; then 
-  * 2: 30 GB, type "Linux LVM" (8E)+. /etc/init.d/functions 
 +elif [ -f /etc/rc.d/init.d/functions ] ; then 
 +. /etc/rc.d/init.d/functions 
 +else 
 +exit 
 +fi
  
-Format the boot partition as ext3+################################################################################ 
 +# INITIAL CONFIGURATION 
 +VBOXDIR="/etc/virtualbox" 
 +VM_USER="vmadmin" 
 +USE_NAT="no"
  
-==== LVM setup ====+export PATH="${PATH:+$PATH:}/bin:/usr/bin:/usr/sbin:/sbin"
  
-Create Physical Volume from device: +if [ -f $VBOXDIR/config ]; then 
-<code>pvcreate /dev/sdb2</code>+. $VBOXDIR/config 
 +fi
  
-Create Volume Group from PV: +SU="su $VM_USER -c" 
-<code>vgcreate VolGroup01 /dev/sdb2</code>+VBOXMANAGE="VBoxManage -nologo"
  
-Create Logical Volumes in VG: +################################################################################ 
-<code>lvcreate -L29G -nLogVol00 VolGroup01 +# FUNCTIONS
-lvcreate -L512M -nLogVol01 VolGroup01</code>+
  
-Format the new partitions: +# Determine if USE_NAT is set to "yes" 
-<code>mkfs.ext3 /dev/VolGroup01/LogVol00 +use_nat() { 
-<code>mkswap /dev/VolGroup01/LogVol01</code>+if [ "$USE_NAT" = "yes" ]; then 
 +return `true` 
 +else 
 +return `false` 
 +fi 
 +}
  
-<note important>Set the disk label on the boot partition to "/boot" using gparted (fstab loads the boot partition based on its label!)</note>+log_failure_msg() 
 +echo $1 
 +}
  
-Mount both root partitions: +log_action_msg() { 
-<code>mount /dev/VolGroup01/LogVol00 /mnt/newroot +echo $1 
-mount /dev/VolGroup00/LogVol00 /mnt/oldroot</code>+}
  
-Copy everything over: +# Check for running machines every few seconds; return when all machines are 
-<code>rsync -xrlptgoEv --delete /mnt/oldroot/ /mnt/newroot/</code>+# down 
 +wait_for_closing_machines() { 
 +RUNNING_MACHINES=`$SU "$VBOXMANAGE list runningvms" | wc -l` 
 +if [ $RUNNING_MACHINES != 0 ]; then 
 +sleep 5 
 +wait_for_closing_machines 
 +fi 
 +}
  
-Mount both boot partitions: +################################################################################ 
-<code>mount /dev/sdb1 /mnt/newboot +# RUN 
-mount /dev/sda1 /mnt/oldboot</code>+case "$1" in 
 +start) 
 +if [ -f /etc/virtualbox/machines_enabled ]; then
  
-Copy everything over+cat /etc/virtualbox/machines_enabled | while read VM; do 
-<code>rsync -xrlptgoEv --delete /mnt/oldboot/ /mnt/newboot/</code>+log_action_msg "Starting VM$VM ..." 
 +$SU "$VBOXMANAGE startvm "$VM" -type vrdp" 
 +RETVAL=$? 
 +done 
 +touch /var/lock/subsys/vboxcontrol 
 +fi 
 +;; 
 +stop) 
 +# NOTE: this stops all running VM's. Not just the ones listed in the 
 +# config 
 +$SU "$VBOXMANAGE list runningvms" | while read VM; do 
 +log_action_msg "Shutting down VM: $VM ..." 
 +$SU "$VBOXMANAGE controlvm "$VM" acpipowerbutton" 
 +done 
 +rm -f /var/lock/subsys/vboxcontrol 
 +wait_for_closing_machines
  
-Force SElinux to relabel all files on boot (or else SElinux will deny you to log in+;; 
-<code>touch /mnt/newroot/.autorelabel</code>+start-vm
 +log_action_msg "Starting VM: $2 ..." 
 +$SU "$VBOXMANAGE startvm "$2" -type vrdp" 
 +;; 
 +stop-vm) 
 +log_action_msg "Stopping VM: $2 ..." 
 +$SU "$VBOXMANAGE controlvm "$2" acpipowerbutton" 
 +;; 
 +poweroff-vm) 
 +log_action_msg "Powering off VM: $2 ..." 
 +$SU "$VBOXMANAGE controlvm "$2" poweroff" 
 +;; 
 +status) 
 +echo "The following virtual machines are currently running:" 
 +$SU "$VBOXMANAGE list runningvms" | while read VM; do 
 +echo -n "$VM (" 
 +echo -n `$SU "VBoxManage showvminfo ${VM%% *}|grep Name:|sed -e 's/^Name:s*//g'"
 +echo ')' 
 +done 
 +;; 
 +*) 
 +echo "Usage: $0 {start|stop|status|start-vm <VM 
 +name>|stop-vm <VM name>|poweroff-vm <VM name>}" 
 +exit 3 
 +esac
  
-Unmount all mounted logical volumes+exit 0 
 +</code> 
 +Add vboxcontrol service to chkconfig registry
  
-Install GRUB on the new VDI +<code># chkconfig --add vboxcontrol</code> 
-<code>grub +Tell chkconfig to create symlinks for runlevels and activate service vboxcontrol
-> root (hd0,0) +
-> setup (hd0)</code>+
  
-==== Renaming the new volume group====+<code># chkconfig vboxcontrol on</code>
  
-Deativate all logical volumes 
-<code>lvchange -an /dev/mapper/VolGroup*</code> 
-Rename old volume group 
-<code>vgrename VolGroup00 VolGroupOld</code> 
-Rename new volume group 
-<code>vgrename VolGroup01 VolGroup00</code> 
  
-Now shutdown the machine and remove the old VDI.