Khởi động VBoxHeadless VM khi khởi động


16

Tôi dường như không thể chạy VM khi khởi động.

Tôi đã thử "ứng dụng khởi động" và update-rc.d mà không gặp may.

sudo update-rc.d startvms defaults 99 10

Điều này tạo ra tất cả các liên kết tượng trưng thích hợp cho các cấp độ chạy khác nhau nhưng VM vẫn không khởi động.

Đây là kịch bản startvms của tôi:

#!/bin/bash
### BEGIN INIT INFO
# Provides:          startvms
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start my VMs at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO
case "$1" in
  start)
        echo "Starting"
        nohup VBoxHeadless --startvm "UbuntuServer" &
        ;;
  stop)
        echo "Stopping $DESC"
        VBoxManage controlvm "UbuntuServer" poweroff
        ;;

  restart|force-reload)
        echo "Restarting $DESC"
        VBoxManage controlvm "UbuntuServer" poweroff
        nohup VBoxHeadless --startvm "UbuntuServer" &
        ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac

Tôi đang làm gì sai?


Bạn đã nâng cấp Virtual Box lên PUEL để bao gồm hỗ trợ VRDP (cần thiết cho chế độ không đầu)?
Takkat

@Takkat: vâng, tôi nên đề cập: chế độ không đầu hoạt động rất tốt đối với tôi ... tôi chỉ không thể làm cho nó chạy khi khởi động.
capdragon

1
Điều gì nếu bạn đã cố gắng VBoxManage startvm --type headless "UbuntuServer"thay vì VBoxHeadlesslệnh?
Takkat

Bạn cũng có thể cần phải root để chạy nó như thế nào su -c 'VBoxHeadless --startvm <MACHINE>'.
Takkat

@Takkat: không có xúc xắc. Nhưng một lần nữa, tôi có thể khiến VBoxHeadless hoạt động tốt với lệnh tôi đang sử dụng. Nó CHỈ không hoạt động khi tôi thực hiện nó trong một kịch bản khởi động.
capdragon

Câu trả lời:


27

NÀY những gì cuối cùng làm việc!

1) Tạo tập tin khởi động

trong /etc/init.d - sudo nano /etc/init.d/StartVM.

Sao chép Dán phần sau vào tệp và thay thế "Tên VM của tôi" cho tên vm của bạn:

#! /bin/sh
# /etc/init.d/StartVM
#

#Edit these variables!
VMUSER=spode
VMNAME="My VM Name"

case "$1" in
  start)
    echo "Starting VirtualBox VM..."
    sudo -H -b -u $VMUSER /usr/bin/VBoxVRDP -s "$VMNAME"
    ;;
  stop)
    echo "Saving state of Virtualbox VM..."
    sudo -H -u  $VMUSER /usr/bin/VBoxManage controlvm "$VMNAME" savestate
    ;;
  *)
    echo "Usage: /etc/init.d/StartVM {start|stop}"
    exit 1
    ;;
esac

exit 0

2) Cho phép tập lệnh thực thi

với sudo chmod +x /etc/init.d/StartVM.

3) Nói kịch bản để chạy khi khởi động.

nói kịch bản là người đầu tiên tắt máy và là người cuối cùng khởi động.

sudo update-rc.d StartVM defaults 99 01


2
không VRDP thêm chi phí phụ, VBoxManage startvm --type headlesssẽ không tốt hơn?
mojzis

3
Trong trường hợp cụ thể của tôi, tôi muốn VM tắt máy một cách duyên dáng thay vì lưu trạng thái. thay thế "savestate" bằng "acpipowerbutton" đã làm việc hoàn hảo cho việc này.
muzzamo

2

FYI, Điều này hoạt động trên Opensuse mà không có nohup.

VBoxHeadless -s "OpenSuSE 11.4 64bit" &

Vì vậy, tôi sử dụng cùng một kịch bản tôi có ngoại trừ bỏ ra khỏi nohup?
capdragon

Đã thoát khỏi hohup, vẫn không làm việc. Tôi phải làm điều gì đó sai. Bạn có chắc là chúng ta đang sử dụng cùng một kịch bản không? Vui lòng chỉnh sửa câu trả lời của bạn và bao gồm tập lệnh của bạn để tôi có thể thử nó.
capdragon

2

Điều này hoạt động tốt với máy chủ Ubuntu 12.04 và VirtualBox 4.2.20.

#! /bin/sh
# /etc/init.d/StartVM
#
#Edit these variables!
VMUSER=username
case "$1" in
  start)
    echo "Starting VirtualBox VM SMARTHOST ..."
    sudo -u $VMUSER VBoxManage startvm SMARTHOST --type headless
    echo "Starting VirtualBox VM wxp-acceso ..."
    sudo -u $VMUSER VBoxManage startvm wxp-acceso --type headless
    echo "Starting VirtualBox VM wmmaq_edi ..."
    sudo -u $VMUSER VBoxManage startvm vmmaq_edi --type headless
    ;;
  stop)
    echo "Saving state of Virtualbox VM SMARTHOST ..."
    sudo -u $VMUSER VBoxManage controlvm SMARTHOST savestate
    echo "Saving state of Virtualbox VM wxp-acceso ..."
    sudo -u $VMUSER VBoxManage controlvm wxp-acceso savestate
    echo "Saving state of Virtualbox VM vmmaq_edi ..."
    sudo -u $VMUSER VBoxManage controlvm vmmaq_edi savestate
    ;;
  *)
    echo "Usage: /etc/init.d/StartVM {start|stop}"
    exit 1
    ;;
esac

exit 0

sudo chmod +x /etc/init.d/StartVM

sudo update-rc.d StartVM defaults 99 01

như chỉ ra ở một câu trả lời trước.


Điều này làm việc tuyệt vời cho tôi! Ngoại trừ với Vbox 5.0 sudo -u $ VMUSER VBoxHeadless --startvm $ VMNAME và vì vậy startvm có 2 "-" và bạn chỉ kiện VBoxHeadless thay vì --type không đầu. Cũng đáng chú ý là trong khi tôi chắc chắn rằng chúng tôi đang ở trên một máy chủ, không có "&" ở cuối, máy chủ không khởi động để nhắc đăng nhập nhưng tất cả các dịch vụ đều hoạt động như SSH, RDP, v.v., chỉ là điều tôi nhận thấy. Nó làm cho máy chủ bị kẹt khi khởi động thông tin đăng nhập verbose!
FreeSoftwareServers

1

Vì bạn đề cập rằng VBoxHeadless hoạt động tốt nếu bạn nhập nó từ dòng lệnh của thiết bị đầu cuối nhưng không khởi động bất kỳ VM nào khi được khởi chạy từ tập lệnh init, tôi đoán rằng nó đang tìm kiếm một biến môi trường được xác định khi bạn chạy shell trong thiết bị đầu cuối của bạn nhưng không được xác định trong môi trường tập lệnh init (về cơ bản là trống, ngoại trừ các tham số được đưa ra trên dòng lệnh kernel).

Bạn có thể thử thay thế các yêu cầu VBoxHeadless trong tập lệnh bằng cái này không?

env USER=username HOME=/path/to/user/homedir VBoxHeadless ...same options as before...

Ở đây "tên người dùng" và đường dẫn thư mục chính nên được thay đổi để phù hợp với những người dùng bạn sử dụng để khởi động VM.

Nếu nó hoạt động, bạn có thể muốn sử dụng su -l để chạy VBoxHeadless thay vì hack env này .


+1 cho su -l- đó là một điểm tốt!
Takkat

Không ... vẫn không hoạt động. Tôi quyết định chỉ sử dụng một công việc định kỳ
capdragon

1

Trên các phiên bản gần đây của Virtualbox (4.2.0 trở đi), bạn không cần phải cuộn tập lệnh của riêng mình để tự khởi động máy ảo nhưng phải mất một số cấu hình. Xem phần 9.24 của Hướng dẫn sử dụng Virtualbox " Khởi động máy ảo trong khi khởi động hệ thống "

Thật không may, hướng dẫn chỉ đưa ra hướng dẫn phác thảo và chưa được cập nhật theo thời gian. Tôi tìm thấy bài đăng này trên các diễn đàn hộp ảo với một số chi tiết bổ sung.

Bạn chỉ có thể đặt một dòng trong RC.local để khởi động máy chủ của mình nhưng nếu bạn muốn làm theo cách "chính thức" thì hãy đọc tiếp ..

Thêm các dòng này vào / etc / default / virtualbox:

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

Chỉnh sửa /etc/vbox/vboxautostart.cfg (ví dụ này từ chối quyền tự động khởi động cho tất cả người dùng ngoại trừ người dùng "Bob":

# Default policy is to deny starting a VM, the other option is "allow".
default_policy = deny

# Bob is allowed to start virtual machines but starting them
# will be delayed for 10 seconds
bob = {
    allow = true
    startup_delay = 10
}

# Alice is not allowed to start virtual machines, useful to exclude certain users
# if the default policy is set to allow.
alice = {
    allow = false
}

Thêm nhóm vboxusers vào / etc / vbox và bit dính:

# chgrp vboxusers /etc/vbox
# chmod 1775 /etc/vbox

Thêm tất cả người dùng sẽ sử dụng hộp ảo vào nhóm "vboxusers", ví dụ:

# adduser Bob vboxusers

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ự động khởi động với:

$ VBoxManage setproperty autostartdbpath /etc/vbox

Sau đó, người dùng có thể đặt VM thành tự động khởi động và định cấu hình cách họ sẽ dừng (ví dụ: savestate, acpishutdown) với:

$ VBoxManage modifyvm <vmname> --autostart-enabled on
$ VBoxManage modifyvm <vmname> --autostop-type acpishutdown

Ở trên đã làm việc với tôi với Virtualbox 5, được cài đặt từ kho lưu trữ virtualbox.org.


Chết tiệt, vừa mới quằn quại điều này chỉ để tìm ra nó đã được trả lời ở đây , dựa trên bài đăng trên blog này
Jules

0

người ta cũng có thể muốn đặt trực tiếp cổng khi sử dụng vrdp .. bình luận cho câu trả lời trên cùng, điều này ngăn cách tốt để sử dụng các tập lệnh khác nhau cho các vms khác nhau

VBoxVRDP -startvm "myVM" -vrdpport 3391 &

0

Wow .. Tôi đang thấy tất cả các giải pháp này, có vẻ hơi phức tạp, nhưng đây là máy tính xách tay thứ ba của tôi mà cuối cùng tôi chỉ đơn giản là viết:

VBoxHeadless -s "Ubuntu Server"

trong tập tin RC.local của tôi trong thư mục / etc / và nó hoạt động khá tốt. Chạy máy ảo tự động khi 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.