Làm thế nào để khởi động máy hộp ảo tự động khi khởi động?


53

Tôi có nhiều máy hộp ảo trong Ubuntu12.04, mỗi lần tắt máy hoặc khởi động lại, tôi phải khởi động từng cái một.

Tôi muốn được trợ giúp trong việc viết tập lệnh để tự động khởi động máy VBox khi khởi động.



@SergiyKolodyazhnyy Câu hỏi này không phải là một bản sao của điều đó, bằng mọi cách.
Muhammad bin Yusrat

Câu trả lời:


51

Bạn có thể sử dụng dịch vụ Tự động khởi động VirtualBox. Một hướng dẫn tốt mô tả cách thực hiện việc này được đăng trên blog "Life of a Geek Admin" .

Các bước sau đây được điều chỉnh từ bài đăng trên blog được liên kết:

  1. Đầu tiên bạn cần tạo tập tin /etc/default/virtualboxvà thêm một vài biến.

    VBOXAUTOSTART_DB chứa đường dẫn tuyệt đối đến thư mục cơ sở dữ liệu tự động khởi động và
    VBOXAUTOSTART_CONFIG chứa vị trí của cài đặt cấu hình tự khởi động. Các tập tin sẽ trông giống như thế này:

    # virtualbox defaults file
    VBOXAUTOSTART_DB=/etc/vbox
    VBOXAUTOSTART_CONFIG=/etc/vbox/vbox.cfg
  2. Bây giờ chúng ta cần tạo /etc/vbox/vbox.cfgtập tin và thêm

    # 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
    }

    Lưu ý: Nếu tên tệp vbox.cfgkhông hoạt động ở trên, hãy thử đặt tên cho nó autostart.cfg.

    Nếu bạn là người dùng duy nhất, bạn chỉ có thể thêm dòng default_policy = allowvào vbox.cfgtệp.

  3. Đặt quyền trên thư mục cho nhóm vboxuser và đảm bảo người dùng có thể ghi vào thư mục cũng như bit dính.

    sudo chgrp vboxusers /etc/vbox
    sudo chmod 1775 /etc/vbox
  4. Thêm từng người dùng vào vboxusersnhóm.

    sudo usermod -a -G vboxusers USERNAME

    (thay thế USERNAMEbằng tên người dùng)

LƯU Ý : Nếu bạn đã thay đổi quyền nhóm cho người dùng hiện tại, hãy đăng xuất và đăng nhập lại để làm mới quyền. (tín dụng @ kR105)

  1. Mỗi người dùng muốn kích hoạt tự động khởi động cho các máy riêng lẻ phải đặt đường dẫn đến thư mục cơ sở dữ liệu tự khởi động với

    VBoxManage setproperty autostartdbpath /etc/vbox

    và kích hoạt tự động khởi động cho một VM riêng lẻ với

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

    Điều này sẽ tạo ra một myuserid.start tập tin trong /etc/vboxthư mục

  2. Bây giờ khởi động lại dịch vụ vboxautostart để đọc các thay đổi.

    sudo service vboxautostart-service restart
  3. Khởi động lại hệ thống của bạn và VM của bạn sẽ bắt đầu


Cách khởi động một máy ảo cụ thể bằng cách sử dụng tập lệnh khởi động
Người mới bắt đầu

1
14.04 của tôi tuyên bố rằng không có dịch vụ nào như 'vboxautostart-service', bạn đã thử nghiệm điều này chưa?
Arronical

@Arronical OP và các hướng dẫn mà câu trả lời có nguồn gốc đều dành cho Ubuntu 12.04. YMMV với các phiên bản sau đó.
kdm bồ

Hóa ra hộp ảo 4.3.10 không tải xuống các tập lệnh init vào ngày 14.04, nhưng câu trả lời của ndasus dưới đây đã giúp tôi khắc phục điều đó. + 1s tất cả các vòng!
Arronical

Tôi đã cố gắng làm cho giải pháp này hoạt động trên Ubuntu 15.10 nhưng không thành công .. Tôi đã kết thúc bằng cách sử dụng bài đăng này freesoftwareservers.com/index.php/2015/10/24/ trên .. có thể không phải là cách tiếp cận chính xác, nhưng nó hoạt động
mozart_ar

15

Tôi đã có những sự cố không vui tương tự khi thử thao tác này trên LTS vanilla.

~$ cat /etc/os-release 
NAME="Ubuntu" 
VERSION="14.04.1 LTS, Trusty Tahr" 

Trên phiên bản này, tệp chính /etc/init.d/vboxautostart-service chưa được cài đặt.

Theo như tôi biết tất cả VitualBox và các yêu cầu được đưa vào bởi apt-get, vì vậy tôi không thể nói tại sao tệp 'vboxautostart-service' không được cung cấp. Nhưng để vượt qua điều này, đây là bản cập nhật của tôi cho bài viết của kdm bồ.

1) / etc / default / virtualbox file tồn tại đối với tôi. Vì vậy, phải thêm vars:

VBOXAUTOSTART_DB=/etc/vbox
VBOXAUTOSTART_CONFIG=/etc/vbox/autostart.cfg

2) Phải tạo /etc/vbox/autostart.cfg như được chỉ định bởi OP.

6b) Cần lấy tập lệnh dịch vụ vboxautostart và làm cho nó có thể thực thi được.

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) Thông báo cho bộ điều khiển RC.d, nhưng tôi đã sử dụng 24 làm thời gian bắt đầu. Chỉ mới 20 và nó đã không khởi động. Có lẽ nó đã chạy ngay cả trước khi virtualbox hoạt động.

sudo update-rc.d vboxautostart-service defaults 24 24

Sau đó khởi động lại đã khởi chạy VM chính xác.


1
Trong phiên bản 5.2, bạn phải chỉnh sửa vboxautostart-service và thay thế vboxdrvtrong # Required Start/ # Required Stoplines bằng virtualbox. Có vẻ như họ đã đổi tên dịch vụ, vì vậy HĐH không thể phát hiện chính xác các ưu tiên bắt đầu / dừng. Tôi nghĩ bạn không cần bước 6c nếu bạn thay thế những dòng đó.
xương cá

Cảm ơn bạn rất nhiều @fishbone bình luận của bạn là mánh khóe với tôi
Jairo Andres Velasco Romero

6

Bạn có thể sử dụng vboxmanage startvm "my virtual machine" --type=headless|gui|sdl(một trong số đó). Sử dụng "không đầu" nếu chúng là các máy chủ mà bạn kết nối bằng các phương tiện khác ngoài sử dụng gui.

Để thực sự chạy các lệnh này vào đúng thời điểm trong khi khởi động, bạn sẽ muốn đọc lên Upstart.


6

Sau nhiều giờ không vui khi cố gắng làm cho các thủ tục từ kdm bồ ở trên hoạt động, nhưng không thành công, cuối cùng tôi đã tìm thấy một phương pháp hoạt động đơn giản.

Đầu tiên máy chủ Linux của tôi (Mint 17) được thiết lập khi khởi động để tự động đăng nhập vào tài khoản chính của tôi.

Thứ hai, tôi đã sử dụng các tiện ích trong GUI VirtualBox (v4.3.12) để tạo lối tắt cho mỗi Máy ảo trên máy tính để bàn. {nhấp chuột phải vào VM ở cột bên trái và chọn "Tạo lối tắt trên màn hình"}

Tiếp theo: Tôi đã thấy rằng việc mở Menu-> Trung tâm điều khiển -> Ứng dụng khởi động -> Thêm và thêm các phím tắt trên màn hình đã cho các tệp không hoạt động, tôi phát hiện từ câu trả lời khác trên trang này rằng vị trí của phần khởi động là / home /USERNAME/.config/autostart vì vậy tôi đã nhấp chuột phải vào từng phím tắt VM trên máy tính để bàn và sau đó dán chúng vào thư mục đó, ghi đè lên các tệp crap trước đó. Bây giờ họ đã phát triển các biểu tượng VirtualBox 'khá'.

Và chắc chắn khi khởi động lại máy chủ, 3 VM bắt đầu tự động.

:-)

Bill Williams

PS: than ôi tôi vẫn còn thiếu thứ gì đó, vì thường Máy ảo sẽ không khởi động khi khởi động, thay vào đó chúng tạo ra hộp thoại báo lỗi cho biết chúng bị khóa, ngay cả khi tôi đã bảo chúng tắt máy trước khi máy chủ khởi động lại.


1
FYI không có "câu trả lời 5". Con số bạn nhìn thấy ở bên trái của mỗi câu trả lời là tổng số phiếu. Phải nói rằng, của bạn là một phương pháp GUI thay thế tốt. Cảm ơn sự đóng góp.
hmayag

5

Ngoài các mô tả hay về dịch vụ vboxautostart ở trên, bạn có thể làm

VBoxManage modifyvm server --autostop-type savestate

để tự động dừng khách lúc tắt máy. Đối với Ubuntu 14.04, tôi đã phải thêm một giấc ngủ 30 vào phần dừng dịch vụ vboxautostart, để nó chờ cho đến khi khách được lưu hoàn toàn.


2

Tôi đã tìm thấy một cách đơn giản hơn trong Ubuntu 16.04 chạy VBox 5.1.34.

Khi ở trong VBox, nhấp chuột phải vào VM đang chạy hoặc không hoạt động trong danh sách, chọn 'Tạo lối tắt trên màn hình ". Khi bạn thấy biểu tượng trên màn hình của mình, hãy mở bằng bất kỳ công cụ nào cho phép bạn thấy lệnh bên dưới mà VBox đã tạo (trên của tôi hệ thống, tôi nhấp chuột phải và chọn 'thuộc tính') Sao chép này vào bảng tạm.

Mở chương trình để cập nhật 'ứng dụng khởi động' và tạo một ứng dụng mới bắt đầu vào lúc khởi động, dán vào lệnh bạn đã sao chép từ liên kết máy tính để bàn được tạo bởi VirtualBox.


1

Để bắt đầu VM khi đăng nhập vào phiên của chúng tôi, chúng tôi có thể muốn xác định tệp .desktop:

Khi tệp này được sao chép hoặc di chuyển đến thư mục tự khởi động, nó sẽ được thực hiện sau khi chúng tôi đăng nhập:

Chạy Virtual Box trong không gian người dùng có thể giúp tránh các tác dụng phụ không mong muốn khi khởi động chúng trong khi khởi động (ví dụ: VM chạy dưới quyền root, thời gian khởi động tăng lên đáng kinh ngạc, ...).


1

Điều này có thể được thực hiện bằng Giao diện quản lý dòng lệnh VirtualBox. Chỉ cần chạy đoạn script sau khi khởi động.

#!/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

một hướng dẫn tốt đẹp để biết thêm.


Chào mừng .. Vui lòng Sao chép / dán thông tin quan trọng từ liên kết
bão

1

Thêm vào câu trả lời @kdm bồ.

Nếu bạn gặp lỗi trên:

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

Để giải quyết vấn đề này, tôi đã phải tự tạo các tệp "tên người dùng" .start và "username" .stop với:

sudo touch "username".start
sudo touch "username".stop

Và đổi chủ với:

sudo chown "username" "username".start
sudo chown "username" "username".stop

chạy lại:

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

sau đó khởi động lại dịch vụ:

sudo service vboxautostart-service stop
sudo service vboxautostart-service start

kiểm tra là tất cả là ok với:

top

và bạn sẽ thấy quy trình "VBox ..." trong danh sách, nếu máy ảo đang chạy


0

Bạn cũng có thể có được trình quản lý phiên gnome được mô tả ở đây. Trình quản lý phiên Gnome Nó nằm trong trung tâm phần mềm hoặc bạn chỉ cần đi đến một thiết bị đầu cuối và gõ sudo apt-get install gnome-session-common

Tiếp theo, bạn có thể tạo một tập lệnh nhỏ để chạy và sử dụng trình quản lý phiên gnome để khởi động nó. Đây là một kịch bản mẫu nhỏ để giúp bạn đi ...

#!/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

Đây là cách tôi khởi động Centos (tên của máy ảo) khi máy chủ của tôi khởi động lại. Tôi sử dụng crontab cho công việc đó. Đây là mục crontab của tôi:

@reboot VBoxHeadless --startvm "Centos" &

0

Đối với máy chủ Ubuntu 16.04.1 LTS tôi đã giải quyết điều này bằng cách thực hiện:

Đầu tiên kích hoạt RC-local.service

sudo systemctl enable rc-local.service

Thêm dòng sau vào /etc/rc.local

su virtual_box_user -c "VBoxHeadless -startvm 'virtual_machine_name' &"

Lưu ý rằng virtual_box_user là máy có thể thấy máy ảo (mà bạn sẵn sàng bắt đầu) thực hiện lệnh:

VBoxManage list vms

Thí dụ:

$ VBoxManage list vms
"virtualbox1" {2eb3ba3b-bcb3-4515-95d9-d33bce214c28} 
"virtualbox2" {62365634-f2q4-40c0-b4ed-22f4ab84441a}

Việc sửa đổi /etc/rc.localsẽ trông như thế này

#!/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 

Nếu bạn không chọn đúng chủ sở hữu của hộp ảo, bạn sẽ thấy lỗi khi gõ lệnh:

sudo systemctl status rc-local.service

Tôi hy vọng điều này có thể giúp


0

1 - Tạo một tệp:

nano /etc/init.d/vm-start

Dán cái này:

#!/bin/bash
/bin/echo "* Starting VMS..."
/bin/sleep 1
/bin/su validuser -c "/usr/bin/vboxmanage startvm MACHINENAME--type headless"
/bin/sleep 1
  • Thay thế "người xác thực" bằng tên người dùng của bạn
  • Thay thế "MachinenAME" bằng tên máy ảo của bạn
  • Nếu bạn cần khởi động nhiều hơn 1 máy, hãy lặp lại dòng trên với tên máy ảo của bạn:

/bin/su validuser -c "/usr/bin/vboxmanage startvm MACHINENAME2--type headless" /bin/sleep 1

2 - Tạo tập tin vm-start thực thi:

chmod +x /etc/init.d/vm-start

3 - Chỉnh sửa RC.local

nano /etc/rc.local

Thêm điều này:

#!/bin/bash
/etc/init.d/vm-start
exit 0

4 - Khởi động lại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.