วิธีการเริ่มต้นเครื่องเสมือนโดยอัตโนมัติเมื่อบูต?


53

ฉันมีตู้เสมือนหลายเครื่องใน Ubuntu12.04 ของฉันทุกครั้งที่ฉันปิดเครื่องหรือรีบูตฉันต้องเริ่มต้นทีละเครื่อง

ฉันต้องการความช่วยเหลือในการเขียนสคริปต์สำหรับเริ่มต้นเครื่อง VBox อัตโนมัติเมื่อบู๊ต



@SergiyKolodyazhnyy คำถามนี้ไม่ซ้ำกับที่ใด ๆ
Muhammad bin Yusrat

คำตอบ:


51

คุณสามารถใช้บริการ VirtualBox เริ่มอัตโนมัติ กวดวิชาที่ดีอธิบายวิธีการทำเช่นนี้ถูกโพสต์ใน"ชีวิตของ Geek ผู้ดูแลระบบ" บล็อก

ขั้นตอนต่อไปนี้ดัดแปลงจากโพสต์บล็อกที่ลิงก์:

  1. ก่อนอื่นคุณต้องสร้างไฟล์/etc/default/virtualboxและเพิ่มตัวแปรเล็กน้อย

    VBOXAUTOSTART_DBซึ่งมีเส้นทางที่แน่นอนไปยังไดเรกทอรีฐานข้อมูล autostart และ
    VBOXAUTOSTART_CONFIGซึ่งมีตำแหน่งของการตั้งค่า autostart ไฟล์ควรมีลักษณะคล้ายกับสิ่งนี้:

    # virtualbox defaults file
    VBOXAUTOSTART_DB=/etc/vbox
    VBOXAUTOSTART_CONFIG=/etc/vbox/vbox.cfg
    
  2. ตอนนี้เราต้องสร้าง/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.cfgautostart.cfg

    หากคุณเป็นผู้ใช้คนเดียวคุณสามารถเพิ่มบรรทัดdefault_policy = allowลงในvbox.cfgไฟล์ได้

  3. ตั้งค่าการอนุญาตในไดเรกทอรีไปยังกลุ่ม vboxuser และตรวจสอบให้แน่ใจว่าผู้ใช้สามารถเขียนไปยังไดเรกทอรีเช่นเดียวกับบิตเหนียว

    sudo chgrp vboxusers /etc/vbox
    sudo chmod 1775 /etc/vbox
    
  4. เพิ่มผู้ใช้แต่ละรายในvboxusersกลุ่ม

    sudo usermod -a -G vboxusers USERNAME

    (แทนที่USERNAMEด้วยชื่อผู้ใช้)

หมายเหตุ : หากคุณเปลี่ยนสิทธิ์กลุ่มสำหรับผู้ใช้ปัจจุบันให้ออกจากระบบและกลับเข้ามาใหม่อีกครั้งเพื่อรีเฟรชสิทธิ์ (credit @ kR105)

  1. ผู้ใช้ทุกคนที่ต้องการเปิดใช้งาน autostart สำหรับเครื่องแต่ละเครื่องต้องตั้งค่าพา ธ ไปยังไดเรกทอรีฐานข้อมูล autostart ด้วย

    VBoxManage setproperty autostartdbpath /etc/vbox

    และเปิดใช้งานการเริ่มอัตโนมัติสำหรับแต่ละ VM ด้วย

    VBoxManage modifyvm <uuid|vmname> --autostart-enabled on

    สิ่งนี้จะสร้างmyuserid.start ไฟล์ใน/etc/vboxไดเรกทอรี

  2. ตอนนี้รีสตาร์ท vboxautostart-service เพื่ออ่านในการเปลี่ยนแปลง

    sudo service vboxautostart-service restart
  3. รีบูตระบบของคุณและ VM ของคุณควรเริ่มต้น


วิธีเริ่มต้นเครื่องเสมือนโดยใช้สคริปต์เริ่มต้น
Beginner

1
14.04 ของฉันอ้างว่าไม่มีบริการเช่น 'vboxautostart-service' คุณได้ทำการทดสอบนี้หรือไม่?
58

@Arronical OP และคำแนะนำในการหาคำตอบนั้นมาจาก Ubuntu 12.04 YMMV กับรุ่นหลังจากนั้น
kdmurray

ปรากฎว่ามัน virtualbox 4.3.10 ไม่ได้ดาวน์โหลดสคริปต์เริ่มต้นใน 14.04 แต่คำตอบ ndasuser ของด้านล่างช่วยฉันแก้ไขที่ +1 ทุกรอบ!
Arronical

ผมพยายามที่จะทำให้การทำงานการแก้ปัญหานี้บน Ubuntu 15.10 ไม่มีความสำเร็จ .. ฉันสิ้นสุดการใช้โพสต์นี้freesoftwareservers.com/index.php/2015/10/24/... .. อาจจะไม่ใช่วิธีที่ถูกต้อง แต่การทำงาน
mozart_ar

15

ฉันมีเหตุการณ์ที่ไม่มีความสุขคล้ายกันที่พยายามดำเนินการนี้กับ 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 อย่างถูกต้อง


1
ในรุ่น 5.2 คุณต้องแก้ไขบริการ vboxautostart และแทนที่vboxdrvใน# Required Start/ สายโดย# Required Stop virtualboxดูเหมือนว่าพวกเขาเปลี่ยนชื่อบริการดังนั้นระบบปฏิบัติการไม่สามารถตรวจจับลำดับความสำคัญเริ่ม / หยุดได้อย่างถูกต้อง ฉันคิดว่าคุณไม่ต้องการขั้นตอนที่ 6c หากคุณแทนที่บรรทัดเหล่านั้น
ก้างปลา

ขอบคุณ @fishbone มากความคิดเห็นของคุณเป็นกลอุบายที่ขาดให้ฉัน
Jairo Andres Velasco Romero

6

คุณสามารถใช้vboxmanage startvm "my virtual machine" --type=headless|gui|sdl(หนึ่งในนั้น) ใช้ "หัวขาด" หากเป็นเซิร์ฟเวอร์ที่คุณเชื่อมต่อด้วยวิธีอื่นนอกเหนือจากการใช้ gui

หากต้องการเรียกใช้คำสั่งเหล่านี้ในเวลาที่เหมาะสมระหว่างการบู๊ตคุณจะต้องอ่านข้อมูลใน Upstart


6

หลังจากหลายชั่วโมงที่ไม่มีความสุขที่พยายามจะทำขั้นตอนจาก kdmurrayข้างต้นให้ทำงานโดยไม่ประสบความสำเร็จในที่สุดฉันก็พบวิธีที่ใช้งานได้ง่าย

ครั้งแรกที่โฮสต์ Linux ของฉัน (มิ้นต์ 17) ถูกตั้งค่าในเวลาบูตเพื่อเข้าสู่ระบบโดยอัตโนมัติไปยังบัญชีหลักของฉัน

ที่สองฉันใช้สิ่งอำนวยความสะดวกใน VirtualBox GUI (v4.3.12) เพื่อสร้างทางลัดสำหรับ Virtual Machine แต่ละเครื่องบนเดสก์ท็อป {คลิกขวาที่ VM ในคอลัมน์ซ้าย & เลือก "สร้างทางลัดบนเดสก์ท็อป"}

ถัดไป: ฉันได้พบแล้วว่าการเปิดเมนู -> ศูนย์ควบคุม -> แอปพลิเคชั่นเริ่มต้น -> เพิ่มและเพิ่มทางลัดบนเดสก์ท็อปที่ให้ไฟล์ที่ไม่ทำงานฉันเห็นจากคำตอบอื่น ๆ ในหน้านี้ว่า /USERNAME/.config/autostart ดังนั้นฉันจึงคลิกขวาบนทางลัด VM เดสก์ท็อปแต่ละอันแล้ววางลงในโฟลเดอร์นั้นเขียนทับไฟล์อึก่อนหน้านี้ ตอนนี้พวกเขาพัฒนาไอคอน VirtualBox ที่“ น่ารัก”

และเพียงพอในการรีสตาร์ทเครื่องโฮสต์คอมพิวเตอร์ 3 VM เริ่มต้นโดยอัตโนมัติ

:-)

บิลวิลเลียมส์

PS: อนิจจาฉันยังมีบางสิ่งที่ขาดหายไปเพราะบ่อยครั้งที่เครื่องเสมือนจะไม่เริ่มทำงานในการบูต แต่พวกเขาสร้างกล่องโต้ตอบข้อผิดพลาดที่บอกว่าพวกเขาถูกล็อคแม้ว่าฉันจะบอกพวกเขาให้ปิดเครื่องก่อนที่โฮสต์จะถูกบูตอีกครั้ง


1
FYI ไม่มี "คำตอบ 5" หมายเลขที่คุณเห็นทางด้านซ้ายของแต่ละคำตอบคือจำนวนการลงคะแนนทั้งหมด ต้องบอกว่าคุณเป็นทางเลือก GUI ที่ดี ขอบคุณสำหรับการบริจาค
hmayag

5

นอกเหนือจากคำอธิบายที่ดีของ vboxautostart-service ข้างต้นคุณสามารถทำได้

VBoxManage modifyvm server --autostop-type savestate

เพื่อหยุดแขกโดยอัตโนมัติเมื่อปิดเครื่อง สำหรับ Ubuntu 14.04 ฉันต้องเพิ่มสลีป30ไปยังส่วน vboxautost-service stop เพื่อรอจนกว่าแขกจะได้รับการบันทึกอย่างสมบูรณ์


2

ฉันพบวิธีที่ง่ายกว่าภายใต้ Ubuntu 16.04 ที่ใช้ VBox 5.1.34

ในขณะที่อยู่ใน VBox ให้คลิกขวาบน VM ที่กำลังรันหรือไม่ได้ใช้งานอยู่ในรายการเลือก 'สร้างทางลัดบนเดสก์ท็อป "เมื่อคุณเห็นไอคอนบนเดสก์ท็อปของคุณให้เปิดด้วยเครื่องมือใด ๆ ที่ช่วยให้คุณเห็นคำสั่ง ระบบฉันคลิกขวาและเลือก 'คุณสมบัติ') คัดลอกสิ่งนี้ไปยังคลิปบอร์ด

เปิดโปรแกรมเพื่ออัปเดต 'แอปพลิเคชันเริ่มต้น' และสร้างแอปพลิเคชันใหม่ที่เริ่มต้นในเวลาบูตวางในคำสั่งที่คุณคัดลอกจากลิงก์เดสก์ท็อปที่สร้างโดย VirtualBox


1

ในการเริ่มต้น VM ในการเข้าสู่เซสชันของเราเราอาจต้องการกำหนดไฟล์ .desktop:

เมื่อไฟล์นี้ถูกคัดลอกหรือย้ายไปยังไดเรกทอรี autostart ของเรามันจะถูกดำเนินการหลังจากที่เราเข้าสู่ระบบ:

การเรียกใช้ Virtual Box ในพื้นที่ของผู้ใช้อาจช่วยหลีกเลี่ยงผลข้างเคียงที่ไม่พึงประสงค์จากการเริ่มใช้งานในระหว่างการบูต (เช่น VM ทำงานในฐานะรูท, เวลาบูตเพิ่มขึ้นอย่างไม่น่าเชื่อ, ... )


1

ซึ่งสามารถทำได้โดยใช้อินเตอร์เฟสการจัดการบรรทัดคำสั่ง 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

มีบทช่วยสอนที่ดีสำหรับข้อมูลเพิ่มเติม


ยินดีต้อนรับ .. กรุณาคัดลอก / วางข้อมูลสำคัญจากลิงค์
พายุ

1

เพิ่มไปยัง @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 ... " ในรายการหากเครื่องเสมือนกำลังทำงาน


0

คุณสามารถรับผู้จัดการเซสชั่นคำพังเพยอธิบายไว้ที่นี่ 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

0

นี่คือวิธีที่ฉันเริ่ม Centos ของฉัน (ชื่อของเครื่องเสมือนของฉัน) เมื่อเครื่องโฮสต์ของฉันเริ่มต้นใหม่ ฉันใช้ crontab สำหรับงานนั้น นี่คือรายการ crontab ของฉัน:

@reboot VBoxHeadless --startvm "Centos" &

0

สำหรับเซิร์ฟเวอร์ Ubuntu 16.04.1 LTS ฉันแก้ไขได้โดยทำ:

เปิดใช้งาน rc-local.service ก่อน

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

ฉันหวังว่านี่จะช่วยได้


0

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
  • แทนที่ "validuser" ด้วยชื่อผู้ใช้ของคุณ
  • แทนที่ "MACHINENAME" ด้วยชื่อเครื่องเสมือนของคุณ
  • หากคุณต้องการเริ่มต้นมากกว่า 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 - รีบูต

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.