ฉันมีตู้เสมือนหลายเครื่องใน Ubuntu12.04 ของฉันทุกครั้งที่ฉันปิดเครื่องหรือรีบูตฉันต้องเริ่มต้นทีละเครื่อง
ฉันต้องการความช่วยเหลือในการเขียนสคริปต์สำหรับเริ่มต้นเครื่อง VBox อัตโนมัติเมื่อบู๊ต
ฉันมีตู้เสมือนหลายเครื่องใน Ubuntu12.04 ของฉันทุกครั้งที่ฉันปิดเครื่องหรือรีบูตฉันต้องเริ่มต้นทีละเครื่อง
ฉันต้องการความช่วยเหลือในการเขียนสคริปต์สำหรับเริ่มต้นเครื่อง VBox อัตโนมัติเมื่อบู๊ต
คำตอบ:
คุณสามารถใช้บริการ VirtualBox เริ่มอัตโนมัติ กวดวิชาที่ดีอธิบายวิธีการทำเช่นนี้ถูกโพสต์ใน"ชีวิตของ Geek ผู้ดูแลระบบ" บล็อก
ขั้นตอนต่อไปนี้ดัดแปลงจากโพสต์บล็อกที่ลิงก์:
ก่อนอื่นคุณต้องสร้างไฟล์/etc/default/virtualbox
และเพิ่มตัวแปรเล็กน้อย
VBOXAUTOSTART_DBซึ่งมีเส้นทางที่แน่นอนไปยังไดเรกทอรีฐานข้อมูล autostart และ
VBOXAUTOSTART_CONFIGซึ่งมีตำแหน่งของการตั้งค่า autostart ไฟล์ควรมีลักษณะคล้ายกับสิ่งนี้:
# virtualbox defaults file
VBOXAUTOSTART_DB=/etc/vbox
VBOXAUTOSTART_CONFIG=/etc/vbox/vbox.cfg
ตอนนี้เราต้องสร้าง/etc/vbox/vbox.cfg
ไฟล์และเพิ่ม
# Default policy is to deny starting a VM, the other option is "allow".
default_policy = deny
# Create an entry for each user allowed to run autostart
myuserid = {
allow = true
}
หมายเหตุ:ถ้าชื่อไฟล์ไม่ทำงานข้างต้นลองตั้งชื่อมันvbox.cfg
autostart.cfg
หากคุณเป็นผู้ใช้คนเดียวคุณสามารถเพิ่มบรรทัดdefault_policy = allow
ลงในvbox.cfg
ไฟล์ได้
ตั้งค่าการอนุญาตในไดเรกทอรีไปยังกลุ่ม vboxuser และตรวจสอบให้แน่ใจว่าผู้ใช้สามารถเขียนไปยังไดเรกทอรีเช่นเดียวกับบิตเหนียว
sudo chgrp vboxusers /etc/vbox
sudo chmod 1775 /etc/vbox
เพิ่มผู้ใช้แต่ละรายในvboxusers
กลุ่ม
sudo usermod -a -G vboxusers USERNAME
(แทนที่USERNAME
ด้วยชื่อผู้ใช้)
หมายเหตุ : หากคุณเปลี่ยนสิทธิ์กลุ่มสำหรับผู้ใช้ปัจจุบันให้ออกจากระบบและกลับเข้ามาใหม่อีกครั้งเพื่อรีเฟรชสิทธิ์ (credit @ kR105)
ผู้ใช้ทุกคนที่ต้องการเปิดใช้งาน autostart สำหรับเครื่องแต่ละเครื่องต้องตั้งค่าพา ธ ไปยังไดเรกทอรีฐานข้อมูล autostart ด้วย
VBoxManage setproperty autostartdbpath /etc/vbox
และเปิดใช้งานการเริ่มอัตโนมัติสำหรับแต่ละ VM ด้วย
VBoxManage modifyvm <uuid|vmname> --autostart-enabled on
สิ่งนี้จะสร้างmyuserid.start
ไฟล์ใน/etc/vbox
ไดเรกทอรี
ตอนนี้รีสตาร์ท vboxautostart-service เพื่ออ่านในการเปลี่ยนแปลง
sudo service vboxautostart-service restart
รีบูตระบบของคุณและ VM ของคุณควรเริ่มต้น
ฉันมีเหตุการณ์ที่ไม่มีความสุขคล้ายกันที่พยายามดำเนินการนี้กับ Vanilla LTS
~$ cat /etc/os-release
NAME="Ubuntu"
VERSION="14.04.1 LTS, Trusty Tahr"
ในเวอร์ชันนี้ไฟล์คีย์/etc/init.d/vboxautostart-serviceไม่ได้รับการติดตั้ง
เท่าที่ฉันรู้ VitualBox ทั้งหมดและข้อกำหนดถูกใส่ใน apt-get ดังนั้นฉันจึงไม่สามารถพูดได้ว่าทำไมไฟล์ 'vboxautostart-service' ไม่ได้ถูกจัดเตรียมไว้ด้วย แต่ที่จะได้รับมากกว่านี้นี่คือการปรับปรุงของฉันโพสต์ของ kdmurray
1) ไฟล์/ etc / default / virtualbox มีอยู่สำหรับฉัน ดังนั้นจะต้องเพิ่ม vars:
VBOXAUTOSTART_DB=/etc/vbox
VBOXAUTOSTART_CONFIG=/etc/vbox/autostart.cfg
2) ต้องสร้าง/etc/vbox/autostart.cfgตามที่ระบุโดย OP
6b) ต้องการรับสคริปต์ vboxautostart-service และทำให้สามารถเรียกใช้งานได้
cd /etc/init.d/
sudo wget http://www.virtualbox.org/browser/vbox/trunk/src/VBox/Installer/linux/vboxautostart-service.sh?format=raw -O vboxautostart-service
sudo chmod +x vboxautostart-service
6c) แจ้งเตือนคอนโทรลเลอร์ rc.d แต่ฉันใช้ 24 เป็นเวลาเริ่มต้น วางเพียง 20 และมันก็ไม่ได้เริ่มขึ้น บางทีมันอาจจะวิ่งก่อนที่ VirtualBox จะใช้งานได้
sudo update-rc.d vboxautostart-service defaults 24 24
จากนั้นการรีบูตจะเริ่มต้น VM อย่างถูกต้อง
vboxdrv
ใน# Required Start
/ สายโดย# Required Stop
virtualbox
ดูเหมือนว่าพวกเขาเปลี่ยนชื่อบริการดังนั้นระบบปฏิบัติการไม่สามารถตรวจจับลำดับความสำคัญเริ่ม / หยุดได้อย่างถูกต้อง ฉันคิดว่าคุณไม่ต้องการขั้นตอนที่ 6c หากคุณแทนที่บรรทัดเหล่านั้น
คุณสามารถใช้vboxmanage startvm "my virtual machine" --type=headless|gui|sdl
(หนึ่งในนั้น) ใช้ "หัวขาด" หากเป็นเซิร์ฟเวอร์ที่คุณเชื่อมต่อด้วยวิธีอื่นนอกเหนือจากการใช้ gui
หากต้องการเรียกใช้คำสั่งเหล่านี้ในเวลาที่เหมาะสมระหว่างการบู๊ตคุณจะต้องอ่านข้อมูลใน Upstart
หลังจากหลายชั่วโมงที่ไม่มีความสุขที่พยายามจะทำขั้นตอนจาก kdmurrayข้างต้นให้ทำงานโดยไม่ประสบความสำเร็จในที่สุดฉันก็พบวิธีที่ใช้งานได้ง่าย
ครั้งแรกที่โฮสต์ Linux ของฉัน (มิ้นต์ 17) ถูกตั้งค่าในเวลาบูตเพื่อเข้าสู่ระบบโดยอัตโนมัติไปยังบัญชีหลักของฉัน
ที่สองฉันใช้สิ่งอำนวยความสะดวกใน VirtualBox GUI (v4.3.12) เพื่อสร้างทางลัดสำหรับ Virtual Machine แต่ละเครื่องบนเดสก์ท็อป {คลิกขวาที่ VM ในคอลัมน์ซ้าย & เลือก "สร้างทางลัดบนเดสก์ท็อป"}
ถัดไป: ฉันได้พบแล้วว่าการเปิดเมนู -> ศูนย์ควบคุม -> แอปพลิเคชั่นเริ่มต้น -> เพิ่มและเพิ่มทางลัดบนเดสก์ท็อปที่ให้ไฟล์ที่ไม่ทำงานฉันเห็นจากคำตอบอื่น ๆ ในหน้านี้ว่า /USERNAME/.config/autostart ดังนั้นฉันจึงคลิกขวาบนทางลัด VM เดสก์ท็อปแต่ละอันแล้ววางลงในโฟลเดอร์นั้นเขียนทับไฟล์อึก่อนหน้านี้ ตอนนี้พวกเขาพัฒนาไอคอน VirtualBox ที่“ น่ารัก”
และเพียงพอในการรีสตาร์ทเครื่องโฮสต์คอมพิวเตอร์ 3 VM เริ่มต้นโดยอัตโนมัติ
:-)
บิลวิลเลียมส์
PS: อนิจจาฉันยังมีบางสิ่งที่ขาดหายไปเพราะบ่อยครั้งที่เครื่องเสมือนจะไม่เริ่มทำงานในการบูต แต่พวกเขาสร้างกล่องโต้ตอบข้อผิดพลาดที่บอกว่าพวกเขาถูกล็อคแม้ว่าฉันจะบอกพวกเขาให้ปิดเครื่องก่อนที่โฮสต์จะถูกบูตอีกครั้ง
นอกเหนือจากคำอธิบายที่ดีของ vboxautostart-service ข้างต้นคุณสามารถทำได้
VBoxManage modifyvm server --autostop-type savestate
เพื่อหยุดแขกโดยอัตโนมัติเมื่อปิดเครื่อง สำหรับ Ubuntu 14.04 ฉันต้องเพิ่มสลีป30ไปยังส่วน vboxautost-service stop เพื่อรอจนกว่าแขกจะได้รับการบันทึกอย่างสมบูรณ์
ฉันพบวิธีที่ง่ายกว่าภายใต้ Ubuntu 16.04 ที่ใช้ VBox 5.1.34
ในขณะที่อยู่ใน VBox ให้คลิกขวาบน VM ที่กำลังรันหรือไม่ได้ใช้งานอยู่ในรายการเลือก 'สร้างทางลัดบนเดสก์ท็อป "เมื่อคุณเห็นไอคอนบนเดสก์ท็อปของคุณให้เปิดด้วยเครื่องมือใด ๆ ที่ช่วยให้คุณเห็นคำสั่ง ระบบฉันคลิกขวาและเลือก 'คุณสมบัติ') คัดลอกสิ่งนี้ไปยังคลิปบอร์ด
เปิดโปรแกรมเพื่ออัปเดต 'แอปพลิเคชันเริ่มต้น' และสร้างแอปพลิเคชันใหม่ที่เริ่มต้นในเวลาบูตวางในคำสั่งที่คุณคัดลอกจากลิงก์เดสก์ท็อปที่สร้างโดย VirtualBox
ในการเริ่มต้น VM ในการเข้าสู่เซสชันของเราเราอาจต้องการกำหนดไฟล์ .desktop:
เมื่อไฟล์นี้ถูกคัดลอกหรือย้ายไปยังไดเรกทอรี autostart ของเรามันจะถูกดำเนินการหลังจากที่เราเข้าสู่ระบบ:
การเรียกใช้ Virtual Box ในพื้นที่ของผู้ใช้อาจช่วยหลีกเลี่ยงผลข้างเคียงที่ไม่พึงประสงค์จากการเริ่มใช้งานในระหว่างการบูต (เช่น VM ทำงานในฐานะรูท, เวลาบูตเพิ่มขึ้นอย่างไม่น่าเชื่อ, ... )
ซึ่งสามารถทำได้โดยใช้อินเตอร์เฟสการจัดการบรรทัดคำสั่ง VirtualBox เพียงเรียกใช้สคริปต์ต่อไปนี้เมื่อเริ่มต้น
#!/bin/bash
VMUSER="vmuser"
VMNAME="RedHatVM" #also you can put UUID in this variable (VMNAME="4ec6acc1-a232-566d-a040-6bc4aadc19a6")
case "$1" in
start)
echo "===Starting VirtualBox VM==="
sudo -H -u $VMUSER VBoxManage startvm "$VMNAME" --type headless
;;
stop)
echo "===Saving state of Virtualbox VM==="
sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" savestate
sleep 20
;;
shutdown)
echo "===Shutting down Virtualbox VM==="
sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" acpipowerbutton
sleep 20
;;
reset)
echo "===Resetting VirtualBox VM==="
sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" reset
;;
status)
echo -n "VMNAME->";sudo -H -u $VMUSER VBoxManage showvminfo "$VMNAME" --machinereadable |grep "VMState="| cut -d "=" -f2
;;
echo "Usage: /etc/init.d/VMscript {start|stop|shutdown|reset|status}"
exit 1
;;
esac
exit 0
มีบทช่วยสอนที่ดีสำหรับข้อมูลเพิ่มเติม
เพิ่มไปยัง @kdmurray คำตอบ
หากคุณได้รับข้อผิดพลาด:
VBoxManage modifyvm <uuid|vmname> --autostart-enabled on
เพื่อแก้ปัญหานี้ฉันต้องสร้างไฟล์ "ชื่อผู้ใช้" .start และ "ชื่อผู้ใช้" ด้วยตนเองด้วย:
sudo touch "username".start
sudo touch "username".stop
และเปลี่ยนเจ้าของด้วย:
sudo chown "username" "username".start
sudo chown "username" "username".stop
วิ่ง:
VBoxManage modifyvm <uuid|vmname> --autostart-enabled on
จากนั้นเริ่มบริการ:
sudo service vboxautostart-service stop
sudo service vboxautostart-service start
ตรวจสอบคือทั้งหมดก็โอเคกับ:
top
และคุณควรเห็นกระบวนการ "VBox ... " ในรายการหากเครื่องเสมือนกำลังทำงาน
คุณสามารถรับผู้จัดการเซสชั่นคำพังเพยอธิบายไว้ที่นี่ Gnome Session Manager
มันอยู่ในซอฟท์แวร์กึ่งกลางหรือคุณสามารถไปที่เทอร์มินัลแล้วพิมพ์ก็ได้
sudo apt-get install gnome-session-common
ต่อไปคุณสามารถสร้างสคริปต์เล็กน้อยเพื่อเรียกใช้และใช้ตัวจัดการเซสชัน gnome เพื่อเริ่มต้น นี่คือตัวอย่างสคริปต์เล็กน้อยที่จะพาคุณไป ...
#!/bin/sh
#vboxmanage startvm "my virtual machine" --type=headless|gui|sdl (one of those)
# So if your username is user, and virtualbox put your VMs in the default location, and you want headless...
vboxmanage startvm '/home/user/VirtualBox VMs/myvmname' --type=gui
นี่คือวิธีที่ฉันเริ่ม Centos ของฉัน (ชื่อของเครื่องเสมือนของฉัน) เมื่อเครื่องโฮสต์ของฉันเริ่มต้นใหม่ ฉันใช้ crontab สำหรับงานนั้น นี่คือรายการ crontab ของฉัน:
@reboot VBoxHeadless --startvm "Centos" &
สำหรับเซิร์ฟเวอร์ Ubuntu 16.04.1 LTS ฉันแก้ไขได้โดยทำ:
sudo systemctl enable rc-local.service
/etc/rc.local
su virtual_box_user -c "VBoxHeadless -startvm 'virtual_machine_name' &"
โปรดทราบว่า virtual_box_user เป็นเครื่องที่สามารถเห็นเครื่องเสมือน (ที่คุณยินดีที่จะเริ่มต้น) ดำเนินการคำสั่ง:
VBoxManage list vms
ตัวอย่าง:
$ VBoxManage list vms
"virtualbox1" {2eb3ba3b-bcb3-4515-95d9-d33bce214c28}
"virtualbox2" {62365634-f2q4-40c0-b4ed-22f4ab84441a}
การแก้ไข/etc/rc.local
ควรมีลักษณะเช่นนี้
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
su bob -c "VBoxManage startvm 'virtualbox1' --type headless &"
su bob -c "VBoxManage startvm 'virtualbox2' --type headless &"
exit 0
หากคุณไม่ได้เลือกเจ้าของที่เหมาะสมของ virtualbox คุณควรเห็นข้อผิดพลาดในการพิมพ์คำสั่ง:
sudo systemctl status rc-local.service
ฉันหวังว่านี่จะช่วยได้
1 - สร้างไฟล์:
nano /etc/init.d/vm-start
วางสิ่งนี้:
#!/bin/bash
/bin/echo "* Starting VMS..."
/bin/sleep 1
/bin/su validuser -c "/usr/bin/vboxmanage startvm MACHINENAME--type headless"
/bin/sleep 1
/bin/su validuser -c "/usr/bin/vboxmanage startvm MACHINENAME2--type headless"
/bin/sleep 1
2 - ทำไฟล์ vm-start executable:
chmod +x /etc/init.d/vm-start
3 - แก้ไข rc.local
nano /etc/rc.local
เพิ่มสิ่งนี้:
#!/bin/bash
/etc/init.d/vm-start
exit 0
4 - รีบูต