Sử dụng vagrant để chạy các máy ảo với môi trường máy tính để bàn


148

Môi trường phát triển của công ty tôi dựa trên các máy ảo, chạy trên VirtualBox. Chúng tôi muốn tiến thêm một bước nữa và sử dụng các khả năng của Vagrant để mô tả máy trong tệp văn bản và sau đó có thể "nâng" máy đó dựa trên tệp văn bản đó. Kết hợp với con rối, điều này sẽ giải quyết cho chúng tôi vấn đề là mọi người đều có các phiên bản phần mềm khác nhau được cài đặt trong VM.

Tuy nhiên, Vagrant dường như rất tập trung để phát triển trên máy chủ, để máy ở chế độ nền. Chúng ta sẽ cần có môi trường phát triển bên trong máy, vì vậy chúng ta sẽ cần một GUI hoàn chỉnh, vì vậy khi gõ "vagrant up", một máy có môi trường máy tính để bàn hoàn chỉnh (XFCE, KDE ...) sẽ xuất hiện.

Cho đến nay, tôi đã quản lý để tạo một hộp "cơ sở" từ bản phân phối Xubfox. Nhưng khi tôi gõ "vagrant up", mặc dù máy tính để bàn xuất hiện và tôi có thể đăng nhập đúng cách, Vagrant sẽ đóng băng thông báo "Chờ máy khởi động. Việc này có thể mất vài phút ...". Sau một thời gian Vagrant gặp sự cố do thời gian chờ. Vì vậy, các thư mục chia sẻ không được tạo, cũng như trình cung cấp gói -puppet- được thực thi.

Làm thế nào để tạo một máy ảo với GUI hoàn chỉnh bằng cách sử dụng vagrant?


1
Tôi chưa bao giờ gặp vấn đề khi sử dụng các hộp này . Có thể có điều gì đó không ổn khi bạn đóng gói hộp cơ sở của bạn.
bfitzpatrick

1
từ góc độ ngây thơ, nếu bạn có thể phát triển trên máy chủ chứ không phải trên VM, tại sao bạn lại bận tâm cài đặt các khả năng GUI trên máy ảo Vagrant? Tại sao không phát triển trên máy chủ?
Alexander Mills

Phát triển trên VM có thể dẫn đến ít vấn đề hơn khi các thông số kỹ thuật VM / Vagrant được duy trì bởi nhóm phát triển để đồng bộ với môi trường mục tiêu của ứng dụng của họ. Bạn sẽ nhận được ít phụ thuộc leo hơn và các hành vi duy nhất cho nhà phát triển của bạn. môi trường trong khi không có mặt (hoặc không giống hệt nhau) trong môi trường đích / cài đặt.
Jim Dennis

Thật ra kết luận của bạn không hoàn toàn đúng. Vagrant không phải là về môi trường dev bên ngoài hộp. Nhiều người trên linux phát triển trong một thiết bị đầu cuối. Và bạn có thể làm điều đó tốt với các hộp chỉ có ssh.
erikbwork

Câu trả lời:


150

Tôi chỉ cần làm việc này với ba bước cơ bản. Lời khuyên từ tôi askubuntu.comkhông hiệu quả lắm, vì vậy hãy thử phiên bản đơn giản hóa này:

  1. Nhận một hình ảnh Ubuntu cơ bản làm việc. Bạn sẽ có thể khởi động nó và vagrant ssh.
  2. Tiếp theo, bật màn hình VirtualBox, tắt theo mặc định. Ngừng VM và bỏ ghi chú những dòng này vào Vagrantfile:
    config.vm.provider: hộp ảo làm | vb |
      vb.gui = đúng
    kết thúc
  3. Khởi động VM và quan sát cửa sổ hiển thị mới. Bây giờ bạn chỉ cần cài đặt và bắt đầu xfce4. Sử dụng vagrant sshvà:
    sudo apt-get cài đặt xfce4
    sudo startxfce4 &
    

Nếu đây là lần đầu tiên bạn chạy môi trường Ubuntu này, bạn sẽ cần chạy lệnh sau trước khi cài đặt xfce4:

sudo apt-get cập nhật

Thế là xong, bạn nên hạ cánh trong một xfce4phiên.

Cập nhật: Để có trải nghiệm tốt hơn, tôi khuyên bạn nên cải thiện:

  1. Đừng khởi động GUI như root. Bạn thực sự muốn ở lại vagrantngười dùng. Để làm điều này, bạn cần cho phép bất cứ ai khởi động GUI: sudo vim /etc/X11/Xwrapper.configvà chỉnh sửa nó thành allowed_users=anybody.
  2. Tiếp theo, cài đặt các công cụ khách VirtualBox trước khi khởi động GUI. Điều này sẽ cung cấp cho bạn một độ phân giải màn hình khỏe mạnh, chuột tích hợp, vv
    $ sudo apt-get install -y xfce4 virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11
    $ sudo VBoxClient-tất cả
  3. Chỉ bây giờ bạn nên khởi động GUI với tư cách là vagrantngười dùng $ startxfce4&.

Cập nhật 2: Đã thử điều này ngày hôm nay và VBoxClient-alltập lệnh không phải lúc nào cũng được cài đặt. Nếu nó bị thiếu, bạn có thể thay thế bằng tương đương:

sudo VBoxClient - bảng
sudo VBoxClient --draganddrop
sudo VBoxClient - hiển thị
sudo VBoxClient - kiểm tra chuyển đổi
sudo VBoxClient - liền mạch

2
Chỉ muốn ghé vào và nói rằng sau khoảng 5 giờ cố gắng để xfce hoạt động trong hộp vagora 19, giải pháp là cài đặt gói khách hộp ảo (yum cài đặt VirtualBox-guest.x86_64). Không có gói đó, xorg không thể truy cập vào màn hình máy chủ của tôi vì một số lý do. Vì vậy, ... Cảm ơn người đàn ông!
billmalarky

Tôi phát hiện ra khi thử điều này rằng mã bước 3 cần được chứa trong Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| ... donephương thức của Vagrantfile.
neontapir

1
Bạn có thể cung cấp Xwindows, v.v. từ Vagrant bằng cách bao gồm các phần sau trong Vagrantfile của bạn: #Provision X Windows, VirtualBox Guest, curl và các gói apt khác config.vm.provision: shell ,: inline => "sudo apt-get install -y curl xfce4 virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11 "config.vm.provision: shell ,: inline =>" sudo VBoxClient-all "</ code>
Farrukh Najmi

2
Chỉ cần lưu ý rằng Ubuntu 16.04 dường như không cho phép bắt đầu XFCE dưới dạng không root theo cách này: bug.launchpad.net/ub
Air

1
Có vẻ như startxfce4có thể được chạy dưới dạng không root trên Ubuntu 16.04 (xenial) sau khi cài đặtxserver-xorg-legacy
Laurence Billingham

74

Đây là câu trả lời tuyệt vời của Air Air dưới dạng một Vagrantfile

Vagrant.configure(2) do |config|
  # Ubuntu 15.10
  config.vm.box = "ubuntu/wily64"

  config.vm.provider "virtualbox" do |vb|
    # Display the VirtualBox GUI when booting the machine
    vb.gui = true
  end

  # Install xfce and virtualbox additions
  config.vm.provision "shell", inline: "sudo apt-get update"
  config.vm.provision "shell", inline: "sudo apt-get install -y xfce4 virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11"
  # Permit anyone to start the GUI
  config.vm.provision "shell", inline: "sudo sed -i 's/allowed_users=.*$/allowed_users=anybody/' /etc/X11/Xwrapper.config"
end

Để bắt đầu vm

vagrant up

Đăng nhập bằng tên người dùng : vagrant, mật khẩu: vagrantthông qua lời nhắc đăng nhập trên GUI hộp ảo.

Bắt đầu xfce

startx

Điều này làm việc cho tôi với hai điều chỉnh nhỏ. Đầu tiên tôi nhận được 404 khi tìm kiếm hộp "ubfox / sinh động64", vì vậy tôi đã đổi nó thành "larryli / sôi động64" mà tôi tìm thấy trên vagrantcloud. Thứ hai, tôi đã phải thêm cài đặt plugin vagrant-proxyconf để quản lý cài đặt proxy.
Daniel Watpy

2
Nó hét lên -> startx hiện chưa được cài đặt ??
nguyện

1
Thật tệ, Internet không được cấu hình trong hộp ảo để tải xuống xfce4. Nó hoạt động ngay bây giờ nhưng có cách nào để tôi có thể bỏ qua đăng nhập và bắt đầu xfce4theo mặc định không?
nguyện

@prayagupd hơi cũ, nhưng bạn có thể nói rõ hơn về "Internet không được cấu hình trong hộp ảo để tải xuống xfce4" không? Tôi cũng gặp lỗi tương tự khi chạy startx sauvagrant ssh
Joshua Zastrow

1
Tôi đang gặp một số rắc rối, trong đó hộp ảo của tôi nói "startx: lệnh không tìm thấy". Ai đó có thể giúp tôi chẩn đoán điều này?
OOProg

11

2 xu của tôi

  • Đảm bảo bạn đang chạy vagrant mới nhất (1.3.3 ngay bây giờ) + VirtualBox (4.2.18) để tránh lỗi.

  • Bạn có thể sử dụng shell script hoặc lệnh nội tuyến để cài đặt môi trường máy tính để bàn hoặc trình quản lý cửa sổ trọng lượng nhẹ

    Ví dụ: cài đặt LXDE trên Ubuntu 12.04 Hộp cơ sở chính xác từ vagrantbox.es

Vagrant.configure("2") do |config|
  # ... other configuration

  config.vm.provision "shell" do |s|
    s.inline = "apt-get install lubuntu-desktop -y"
  end
end
  • Nếu bạn xây dựng các hộp cơ sở mơ hồ của riêng mình, hãy đảm bảo bạn làm theo các hướng dẫn đóng gói hộp cơ sở hoặc xem xét các công cụ như trình đóng gói (hoặc veewee) để tự động hóa bản dựng.

9

Dưới đây là Vagrantfile được điều chỉnh một chút cho Ubuntu 18.04 LTS / bionic - nhờ câu trả lời của AirNik , và bài đăng này giải thích cách tăng kích thước đĩa khi sử dụng VirtualBox (mặc định = 10 GB).

VM bao gồm màn hình đăng nhập LightDM.

Cập nhật: Tôi đã tạo một repo GitHub từ ví dụ này và đã thêm nhiều gói phần mềm để phát triển frontend + backend.

# Optional - enlarge disk:
#vagrant plugin install vagrant-disksize
vagrant up
vagrant reload
# After reboot, the VM screen should show the LightDM login screen.
# Log in as user "vagrant", password "vagrant".
Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/bionic64"
  # Optional - enlarge disk (will also convert the format from VMDK to VDI):
  #config.disksize.size = "50GB"

  config.vm.provider "virtualbox" do |vb|
    # Display the VirtualBox GUI when booting the machine
    vb.gui = true
  end

  # /ubuntu/1067929/on-18-04-package-virtualbox-guest-utils-does-not-exist
  config.vm.provision "shell", inline: "sudo apt-add-repository multiverse && sudo apt-get update"

  # Install xfce and virtualbox additions.
  # (Not sure if these packages could be helpful as well: virtualbox-guest-utils-hwe virtualbox-guest-x11-hwe)
  config.vm.provision "shell", inline: "sudo apt-get install -y xfce4 virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11"
  # Permit anyone to start the GUI
  config.vm.provision "shell", inline: "sudo sed -i 's/allowed_users=.*$/allowed_users=anybody/' /etc/X11/Xwrapper.config"

  # Optional: Use LightDM login screen (-> not required to run "startx")
  config.vm.provision "shell", inline: "sudo apt-get install -y lightdm lightdm-gtk-greeter"
  # Optional: Install a more feature-rich applications menu
  config.vm.provision "shell", inline: "sudo apt-get install -y xfce4-whiskermenu-plugin"
end

Trên Ubuntu 16.04, tôi đã phải cài đặt xserver-xorg-legacy để có được tệp XWrapper.config tồn tại / được sử dụng.
MZB

Thử nghiệm thêm cho thấy dòng sed có thể không cần thiết theo nhận xét trong repo github được liên kết.
MZB

@ mh8020 Cảm ơn bạn đã tạo repo github. Rất sạch sẽ và dễ làm theo, chỉ cần những gì tôi cần. Chỉ có một vấn đề: Tôi không thể làm cho âm thanh trên hệ thống Ubuntu khách hoạt động! Bất kỳ ý tưởng những gì có thể kích hoạt điều này trên thiết lập hiện tại của bạn?
timmwagener

7

Tôi đang sử dụng hình ảnh máy tính để bàn Ubuntu, nó hoạt động độc đáo với hai màn hình trên windows với nhà cung cấp hộp ảo.

Vagrant.configure(2) do |config|
  config.vm.box = "box-cutter/ubuntu1404-desktop"

  config.ssh.forward_agent = true

  config.vm.network "forwarded_port", guest: 8080, host: 8080
  config.vm.network "forwarded_port", guest: 3000, host: 3000


  config.vm.synced_folder "../../git", "/home/vagrant/git"

  config.vm.provider "virtualbox" do |vb|
    vb.gui = true
    vb.customize ["modifyvm", :id, "--monitorcount", "2"]
    vb.memory = "2048"
  end
end

3
vb.customize ["modifyvm", :id, '--audio', 'dsound', '--audiocontroller', 'ac97']để có được âm thanh từ vm (nếu cần)
Igonato

hộp cắt không cung cấp hình ảnh được xây dựng trước nữa.
krock

5

Bạn cũng có thể cân nhắc sử dụng Packer để tạo hình ảnh VirtualBox cho nhà phát triển sử dụng.

Thay vì chia sẻ Vagrantfile mà các nhà phát triển từng sử dụng để xây dựng và chạy VM của họ, bạn sẽ có một mẫu trình đóng gói (json) được sử dụng để tạo hình ảnh VM. Các nhà phát triển tải xuống hoặc sao chép hình ảnh và chạy nó cục bộ, trực tiếp trong VB, mà không phải tự xây dựng nó.

Nhiều hộp cơ sở Vagrant được chia sẻ công khai được tạo bằng Packer.


2

https://askubfox.com/questions/300799/does-ubfox-12-04-lts-32-bit-have-gpson-user-interface/300805#300805

Sau khi cài đặt máy tính để bàn, bạn cũng sẽ muốn cài đặt GDM cho phép bạn khởi động trực tiếp vào môi trường đồ họa. Bạn cũng sẽ muốn cấu hình nó.

Vì vậy, có thể thêm điều này?

Vagrant::Config.run do |config|
    config.vm.provision :shell, :inline => "sudo apt-get install gdm"
    config.vm.provision :shell, :inline => "sudo dpkg-reconfigure gdm"
end

1
... hoặc xdm nhẹ hơn
geekQ

1

Tôi đã vá câu trả lời của Nik một chút để tránh HTTP 404:

Vagrant.configure(2) do |config|
  # Ubuntu 15.10
  config.vm.box = "bento/ubuntu-18.04"

  config.vm.provider "virtualbox" do |vb|
    # Display the VirtualBox GUI when booting the machine
    vb.gui = true
  end

  # Install xfce and virtualbox additions
  config.vm.provision "shell", inline: "sudo apt-get update"
  config.vm.provision "shell", inline: "sudo apt-get install -y xfce4 virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11"
  # Permit anyone to start the GUI
  config.vm.provision "shell", inline: "sudo sed -i 's/allowed_users=.*$/allowed_users=anybody/' /etc/X11/Xwrapper.config"
end

0

Thêm vào nhận xét của billmalarky ở trên, trên fedora 20 những điều sau đây là cần thiết trước khi bắt đầu xfce:

  • Cài đặt VirtualBox-guest.rpm (có sẵn từ repos của RPF)
  • các nhóm yum đánh dấu cài đặt 'Graphics_en môi trường'
  • yum cài đặt nhóm "Xfce"
  • yum cài đặt trình điều khiển xorg-x11

Đây là mã:

config.vm.provision "shell", inline: <<-SHELL        
    #Install Virtual Box guest additions from rpmfusion repos
    cd /vagrant
    yum install -y rpmfusion-free-release-20.noarch.rpm 
    yum install -y rpmfusion-nonfree-release-20.noarch.rpm
    yum update -y
    yum install -y VirtualBox-guest

    #Add XFCE desktop to fedora server
    yum groups mark install 'graphical_environment'
    yum groupinstall -y "Xfce"
    yum install -y xorg-x11-drivers   
SHELL

0

Giống như xfce4giải pháp của @Air. Một khi tôi đã thành công, nhưng hôm nay tôi đã thất bại với ubfox16.04. Tôi đã nhận được lỗi này:

xrdb can't open display 1

Nhưng may mắn thay, tôi đã tìm thấy tác phẩm này:

startx

0

Tôi thấy một vài người đang gặp vấn đề với "startx: lệnh không tìm thấy". Tôi cũng có cái này và đó là vì tôi đã thử đăng nhập và startx trước khi việc cung cấp lần đầu hoàn thành. Hãy kiên nhẫn, đi lấy cà phê. Kiểm tra cửa sổ bàn điều khiển gốc để xem những gì đang xảy ra, đặc biệt là khi việc cung cấp đã kết thúc.

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.