मेरे Ubuntu12.04 में मेरे पास कई वर्चुअल बॉक्स मशीनें हैं, हर बार मुझे शटडाउन या रिबूट करना पड़ता है।
बूट करते समय VBox मशीनों को स्वचालित रूप से ऑटोस्टार्ट करने के लिए मैं स्क्रिप्ट लिखने में मदद करना चाहता हूं।
मेरे Ubuntu12.04 में मेरे पास कई वर्चुअल बॉक्स मशीनें हैं, हर बार मुझे शटडाउन या रिबूट करना पड़ता है।
बूट करते समय VBox मशीनों को स्वचालित रूप से ऑटोस्टार्ट करने के लिए मैं स्क्रिप्ट लिखने में मदद करना चाहता हूं।
जवाबों:
आप वर्चुअलबॉक्स ऑटो-स्टार्ट सेवा का उपयोग कर सकते हैं। यह कैसे करना है इसका वर्णन करने वाला एक अच्छा ट्यूटोरियल "लाइफ ऑफ ए गीक एडमिन" ब्लॉग पर पोस्ट किया गया है ।
निम्नलिखित चरण लिंक किए गए ब्लॉग पोस्ट से अनुकूलित किए गए हैं:
पहले आपको फ़ाइल बनाने /etc/default/virtualbox
और कुछ चर जोड़ने की आवश्यकता है ।
VBOXAUTOSTART_DB जिसमें ऑटोस्टार्ट डेटाबेस निर्देशिका और
VBOXAUTOSTART_CONFIG के लिए एक निरपेक्ष पथ शामिल है जिसमें ऑटोस्टार्ट विन्यास सेटिंग्स का स्थान समाहित है। फ़ाइल इस तरह दिखनी चाहिए:
# 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
उपयोगकर्ता नाम से बदलें )
नोट : यदि आपने वर्तमान उपयोगकर्ता के लिए समूह अनुमतियाँ बदल दी हैं, तो अनुमतियाँ ताज़ा करने के लिए फिर से लॉग आउट करें और वापस जाएँ। (क्रेडिट @ kR105)
प्रत्येक उपयोगकर्ता जो अलग-अलग मशीनों के लिए ऑटोस्टार्ट को सक्षम करना चाहता है, उसे ऑटोस्टार्ट डेटाबेस निर्देशिका के साथ पथ सेट करना होगा
VBoxManage setproperty autostartdbpath /etc/vbox
और एक व्यक्ति के साथ वीएम के लिए ऑटोस्टार्ट सक्षम करें
VBoxManage modifyvm <uuid|vmname> --autostart-enabled on
यह डायरेक्टरी myuserid.start
में एक फाइल बनाएगा/etc/vbox
अब परिवर्तनों में पढ़ने के लिए vboxautostart-service को पुनः आरंभ करें।
sudo service vboxautostart-service restart
अपने सिस्टम को रिबूट करें और आपका वीएम शुरू होना चाहिए
मेरे पास वैनिला एलटीएस पर इस ऑपरेशन की कोशिश करने वाली ऐसी ही दुखी घटनाएं थीं।
~$ cat /etc/os-release
NAME="Ubuntu"
VERSION="14.04.1 LTS, Trusty Tahr"
इस संस्करण पर, कुंजी फ़ाइल /etc/init.d/vboxautostart-service स्थापित नहीं की गई थी।
जहाँ तक मुझे पता है कि सभी VitualBox और आवश्यकताओं को उपयुक्त तरीके से रखा गया था, इसलिए मैं यह नहीं कह सकता कि 'vboxautostart-service' फ़ाइल भी क्यों नहीं प्रदान की गई। लेकिन यहाँ इस पर पाने के लिए kdmurray की पोस्ट पर मेरा अपडेट है।
1) / etc / डिफ़ॉल्ट / वर्चुअलबॉक्स फ़ाइल मेरे लिए मौजूद थी। तो var जोड़ना चाहिए:
VBOXAUTOSTART_DB=/etc/vbox
VBOXAUTOSTART_CONFIG=/etc/vbox/autostart.cfg
2) ओपी द्वारा बताए अनुसार /etc/vbox/autostart.cfg बनाना होगा ।
6b) एक vboxautostart- सेवा स्क्रिप्ट प्राप्त करने और इसे निष्पादन योग्य बनाने की आवश्यकता है।
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 डाल दिया और यह शुरू नहीं हुआ। वर्चुअलबॉक्स काम करने से पहले भी यह चलता था।
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 का उपयोग करते हैं।
बूट के दौरान इन कमांड को सही समय पर चलाने के लिए, आप अपस्टार्ट पर पढ़ना चाहेंगे।
कई दुखी घंटों के बाद kdmurray से काम करने के लिए प्रक्रियाओं को प्राप्त करने की कोशिश कर रहा है , सफलता के बिना मुझे अंततः एक विधि मिली जो बस काम करती थी।
पहले मेरे लिनक्स होस्ट (मिंट 17) को मेरे मुख्य खाते में स्वचालित रूप से लॉगिन करने के लिए बूट समय पर सेट किया गया था।
दूसरे मैंने डेस्कटॉप पर प्रत्येक वर्चुअल मशीन के लिए शॉर्टकट बनाने के लिए वर्चुअलबॉक्स GUI (v4.3.12) में सुविधाओं का उपयोग किया। {बाएं कॉलम में VM को राइट-क्लिक करें और "डेस्कटॉप पर शॉर्टकट बनाएं" का चयन करें}
अगला: मैंने पहले ही पाया था कि मेनू-> नियंत्रण केंद्र -> स्टार्टअप एप्लिकेशन -> लाने और जोड़ने के लिए डेस्कटॉप शॉर्टकट दिए गए फाइलों ने काम नहीं किया, मुझे इस पृष्ठ पर अन्य उत्तर से पता चला कि स्टार्टअप का स्थान / घर है /USERNAME/.config/autostart इसलिए मैंने डेस्कटॉप वीएम शॉर्टकट्स में से प्रत्येक पर राइट-क्लिक किया और फिर उन्हें उस फ़ोल्डर में पेस्ट किया, जो पहले की क्रैप फाइल्स को ओवरराइट कर रहा था। अब उन्होंने 'सुंदर' वर्चुअलबॉक्स आइकन विकसित किए।
और यकीन है कि मेजबान कंप्यूटर को पुनरारंभ करने पर, 3 वीएम स्वचालित रूप से शुरू हो गए।
:-)
बिल विलियम्स
पुनश्च: अफसोस, मुझे अभी भी कुछ याद आ रहा है, क्योंकि अक्सर वर्चुअल मशीनें बूट पर शुरू नहीं होती हैं, इसके बजाय वे एक त्रुटि संवाद बॉक्स उत्पन्न करते हैं जो कहता है कि वे बंद हैं, भले ही मैंने उन्हें मेजबान को फिर से बूट करने से पहले बंद करने के लिए कहा हो।
उपरोक्त vboxautostart- सेवा के अच्छे विवरण के अलावा, आप कर सकते हैं
VBoxManage modifyvm server --autostop-type savestate
स्वचालित रूप से अतिथि को शटडाउन पर रोकना। उबंटू 14.04 के लिए मुझे एक नींद 30 को vboxautostart- सर्विस स्टॉप सेक्शन में जोड़ना था , ताकि यह तब तक इंतजार करे जब तक कि मेहमान को पूरी तरह से बचा नहीं लिया गया हो।
मुझे Ubuntu 16.04 के तहत VBox 5.1.34 पर चलने का एक सरल तरीका मिला।
VBox में रहते हुए, सूची में चल रहे या निष्क्रिय VM पर राइट-क्लिक करें, 'डेस्कटॉप पर शॉर्टकट बनाएँ "का चयन करें। एक बार जब आप अपने डेस्कटॉप पर आइकन देखते हैं, तो किसी भी उपकरण के साथ खोलें जो आपको अंतर्निहित कमांड VBox को देखते हैं (मेरे पर) प्रणाली, मैं राइट क्लिक करता हूं और 'गुण' का चयन करता हूं) इसे क्लिपबोर्ड पर कॉपी करें।
'स्टार्टअप एप्लिकेशन' को अपडेट करने के लिए प्रोग्राम खोलें और एक नया एप्लिकेशन बनाएं जो बूटबॉक्स में शुरू होता है, जिसे आप कमांड से चिपकाकर वर्चुअलबॉक्स द्वारा बनाए गए डेस्कटॉप लिंक से कॉपी करते हैं।
हमारे सत्र में प्रवेश करने पर वीएम शुरू करने के लिए हम एक .desktop फ़ाइल को परिभाषित करना चाहते हैं:
जब यह फ़ाइल कॉपी की गई या हमारी ऑटोस्टार्ट निर्देशिका में स्थानांतरित की गई तो इसे लॉग इन करने के बाद फिर से निष्पादित किया जाएगा:
उपयोगकर्ता के स्थान में वर्चुअल बॉक्स चलाने से उन्हें बूट के दौरान शुरू करने के अवांछित दुष्प्रभावों से बचने में मदद मिल सकती है (जैसे 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
वहाँ अधिक जानकारी के लिए एक अच्छा ट्यूटोरियल है।
Addon से @kdmurray उत्तर दें।
यदि आपको त्रुटि मिलती है:
VBoxManage modifyvm <uuid|vmname> --autostart-enabled on
इसे हल करने के लिए, मुझे मैन्युअल रूप से "उपयोगकर्ता नाम" .start और "उपयोगकर्ता नाम" .stop साथ बनाना होगा:
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 ..." प्रक्रिया को देखना चाहिए
आप यहाँ वर्णित गनोम सत्र प्रबंधक भी प्राप्त कर सकते हैं। सूक्ति सत्र प्रबंधक
यह सोफ़वेयर केंद्र में है या आप बस एक टर्मिनल पर जा सकते हैं और टाइप कर सकते हैं
sudo apt-get install gnome-session-common
आगे आप इसे शुरू करने के लिए सूक्ति सत्र प्रबंधक को चलाने और उपयोग करने के लिए थोड़ी स्क्रिप्ट बना सकते हैं। यहाँ एक छोटा सा नमूना स्क्रिप्ट आपको पाने के लिए है ...
#!/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
जब मेरा होस्ट मशीन रिबूट होता है तो मैं अपने सेंटोस (अपनी वर्चुअल मशीन का नाम) को शुरू करता हूं। मैं उस जॉब के लिए क्रेस्टब का इस्तेमाल करता हूं। यहाँ मेरी 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
यदि आप वर्चुअलबॉक्स के सही मालिक का चयन नहीं करते हैं, तो आपको कमांड टाइप करने में त्रुटि देखनी चाहिए:
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 निष्पादन योग्य बनाएं:
chmod +x /etc/init.d/vm-start
3 - rc.local संपादित करें
nano /etc/rc.local
इसे जोड़ो:
#!/bin/bash
/etc/init.d/vm-start
exit 0
4 - रिबूट।