Script Autostart VirtualBox Machine di Ubuntu

Ini adalah lanjutan dari proyek membuat pc-remote, yang didalemnya terdapat virtul box untuk menjalankan windows xp. Dan ternyata tulisan saya tentang autostart virtual box virtual machine (VM), tidak seperti yang saya harapkan, karena startupĀ  application hanya akan dijalankan kalo kita login ke host nya terlebih dahulu. Sedangkan yang saya inginkan dari pc remote ini, yaitu hostnya (ubuntu) dan guestnya (windows) bisa langsung bisa diremote tanpa saya harus login ke guinya host. Jadi tulisan ini tentang bagaimana guest VM nya ikutan start dan stop jika Hostnya reboot, shutdown atau start. Solusinya adalah dengan membuat init.d script , sehingga guest VM nya akan dikontrol sebagai sistem service. Instal VirtualBox VM Service Script Script ini saya modifikasi dari script nya Kevin Swanson yang ditampilkan disini.
 
Buat config file untuk vboxcontrol init.d script
# mkdir /etc/virtualbox 
# touch /etc/virtualbox/machines_enabled
file machines_enabled ini berisi daftar nama dari Guest VM yang akan dijalankan secara otomatis. Daftarnya bisa kita dapatkan dari perintah :
$ VBoxManage list vms 
"Mikrotik3.10" {1e8dfce2-2068-4922-9ce1-86925e31b5cf} 
"Ubuntu 8.04" {c4050afb-7077-4c60-83e5-898d4ff8508e} 
"HS-Win" {75d80d99-d9c5-41cf-9e88-1d1c3ef5dd4c}
Sehingga isi file machines_enabled adalah
# nano /etc/virtualbox/machines_enabled 
"Mikrotik3.10" 
"Ubuntu 8.04" 
"HS-Win"
Buat VirtualBox VM init.d script Buat script init.d baru dan beri permition untuk di eksekusi
# touch /etc/init.d/vboxcontrol 
# chmod 755 /etc/init.d/vboxcontrol
Kopi script berikut ke /etc/init.d/vboxcontrol
#   Startup script for VirtualBox Virtual Machines 
# 
# update-rc.d defaults 98 02 
# chkconfig: 345 98 02 
# description: Manages VirtualBox VMs 
# processname: vboxcontrol 
# 
# pidfile: /var/run/vboxcontrol/vboxcontrol.pid 
# 
### BEGIN INIT INFO 
# Provides:       vboxcontrol 
# Required-Start: $remote_fs $network 
# Required-Stop:  $remote_fs 
# Default-Start:  3 4 5 6 
# Default-Stop:   0 1 6 
# Short-Description: VirtualBox Linux kernel module 
### END INIT INFO 
# 
# Version 20171126 by Aldo Expert  base on; 
# Version 20120302 by ahmad basuki  base on: 
# Version 20090301 by Kevin Swanson  based on: 
# Version 2008051100 by Jochem Kossen 
# http://farfewertoes.com 
# 
# Released in the public domain 
# 
# This file came with a README file containing the instructions on how 
# to use this script. 
# 
 
################################################################################ 
# INITIAL CONFIGURATION 
VBOXDIR="/etc/virtualbox" 
VM_USER="vmadmin" 
USE_NAT="no" 
 
if [ `whoami` != "root" ]; then 
 echo "Please root user or use sudo"; 
 echo ""; 
 exit; 
fi 
 
export PATH="${PATH:+$PATH:}/bin:/usr/bin:/usr/sbin:/sbin" 
 
if [ -f $VBOXDIR/config ]; then 
. $VBOXDIR/config 
fi 
 
SU="su $VM_USER -c" 
VBOXMANAGE="VBoxManage" 
 
################################################################################ 
# FUNCTIONS 
 
# Determine if USE_NAT is set to "yes" 
use_nat() { 
 if [ "$USE_NAT" = "yes" ]; then 
 return `true` 
 else 
 return `false` 
 fi 
} 
 
log_failure_msg() { 
 echo $1 
} 
 
log_action_msg() { 
 echo $1 
} 
 
# Check for running machines every few seconds; return when all machines are 
# 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 
} 
 
################################################################################ 
# RUN 
case "$1" in 
 start) 
  if [ -f /etc/virtualbox/machines_enabled ]; then 
   cat /etc/virtualbox/machines_enabled | while read VM; do 
   log_action_msg "Starting VM: $VM ..." 
   $SU "$VBOXMANAGE startvm "$VM" --type headless" 
   RETVAL=$? 
   done 
   touch /var/lock/vboxcontrol 
  fi 
  ;; 
 stop) 
  # NOTE: this stops all running VM's. Not just the ones listed in the 
  # config 
  $SU "$VBOXMANAGE list runningvms" |awk '{ print $1 }' | while read VM; do 
   log_action_msg "Shutting down VM: $VM ..." 
   $SU "$VBOXMANAGE controlvm "$VM" savestate" 
   #$SU "$VBOXMANAGE controlvm "$VM" acpipowerbutton" 
  done 
  rm -f /var/lock/vboxcontrol 
  #wait_for_closing_machines 
  ;; 
 poweroff) 
  # NOTE: this stops all running VM's. Not just the ones listed in the 
  # config 
  $SU "$VBOXMANAGE list runningvms" |awk '{ print $1 }' | while read VM; do 
   log_action_msg "Shutting down VM: $VM ..." 
   $SU "$VBOXMANAGE controlvm "$VM" poweroff" 
  done 
  rm -f /var/lock/vboxcontrol 
  #wait_for_closing_machines 
  ;; 
 start-vm) 
  log_action_msg "Starting VM: $2 ..." 
  $SU "$VBOXMANAGE startvm "$2" --type headless" 
  ;; 
 stop-vm) 
  log_action_msg "Stopping VM: $2 ..." 
  $SU "$VBOXMANAGE controlvm "$2" savestate" 
  ;; 
 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 
  ;; 
 stat) 
  $SU "$VBOXMANAGE list runningvms" | while read VM; do 
  echo -n "$VM" 
  done 
  ;; 
 *) 
  echo "Usage: $0 {start|stop|status|poweroff|start-vm|stop-vm|poweroff-vm|stat}" 
  exit 3 
esac 
 
exit 0
Harap diperhatikan pada baris 28 yang bertulis VM_USER="vmadmin" supaya diganti dengan user anda yang memiliki list vm Kemudian tambahkan vboxcontrol ke daftar startup service
# update-rc.d vboxcontrol defaults 98 02
Jika akan menghapus dari startup service
# update-rc.d -f vboxcontrol remove
Cara penggunaan: Menjalankan semua virtual machine yang terdaftar dalam file machines_enabled
# /etc/init.d/vboxcontrol start
Mematikan semua virtual machine yang sedang running
# /etc/init.d/vboxcontrol stop
Melihat status virtual maschine yang running
# /etc/init.d/vboxcontrol status
Menyalakan virtual machine tertentu
# /etc/init.d/vboxcontrol start-vm
Mematikan virtual machine tertentu
# /etc/init.d/vboxcontrol stop-vm
Mematikan power virtual machine tertentu
# /etc/init.d/vboxcontrol poweroff-vm
Pada script asli option stop akan mengirimkan sinyal acpipowerbutton, sedangkan pada host saya option tersebut tidak jalan, sehingga saya menggantinya dengan option savestate.

The power of documents

Kami sajikan dengan bahasa yang mudah dengan disertai command line yang bisa di copy-paste sehingga memudahkan untuk melakukan modifikasi command line