Menggunakan gelandangan untuk menjalankan mesin virtual dengan lingkungan desktop

148

Lingkungan pengembangan perusahaan saya didasarkan pada mesin virtual, berjalan di VirtualBox. Kami ingin melangkah lebih jauh, dan menggunakan kemampuan Vagrant untuk memiliki deskripsi mesin dalam file teks dan kemudian dapat "meningkatkan" mesin berdasarkan file teks itu. Digabungkan menjadi boneka, ini akan menyelesaikan masalah bagi kita bahwa setiap orang memiliki versi perangkat lunak yang berbeda yang diinstal di VM.

Namun, Vagrant tampaknya sangat fokus untuk berkembang pada tuan rumah, membiarkan mesin di latar belakang. Kita perlu memiliki lingkungan pengembangan kita di dalam mesin, jadi kita akan membutuhkan GUI yang lengkap, jadi ketika mengetik "gelaran" mesin dengan lingkungan desktop yang lengkap (XFCE, KDE ...) akan muncul.

Sejauh ini, saya sudah berhasil membuat kotak "basis" dari distribusi Xubuntu. Tetapi ketika saya mengetik "vagrant up", meskipun desktop muncul, dan saya dapat login dengan benar, Vagrant membeku pada pesan "Menunggu mesin untuk boot. Ini mungkin memerlukan beberapa menit ...". Setelah beberapa saat, Vagrant crash karena batas waktu. Jadi folder bersama tidak dibuat, atau penyedia paket -puppet- dieksekusi.

Bagaimana cara membuat mesin virtual dengan GUI lengkap menggunakan gelandangan?

Sebelumnya
sumber
1
Saya tidak pernah punya masalah menggunakan kotak - kotak ini . Mungkin ada yang salah saat Anda mengemas kotak dasar Anda.
bfitzpatrick
1
dari perspektif naif, jika Anda dapat mengembangkan pada host dan bukan pada VM mengapa Anda repot-repot menginstal kemampuan GUI pada VM Vagrant? mengapa tidak berkembang di host?
Alexander Mills
Pengembangan pada VM dapat menghasilkan lebih sedikit masalah ketika spesifikasi VM / Vagrant dipertahankan oleh tim pengembangan untuk disinkronkan dengan lingkungan target aplikasi mereka. Anda akan mendapatkan lebih sedikit ketergantungan dan perilaku merayap yang unik bagi pengembang Anda. lingkungan sementara tidak ada (atau tidak identik) di lingkungan / instalasi target.
Jim Dennis
Sebenarnya kesimpulan Anda tidak sepenuhnya benar. Vagrant bukan tentang memiliki lingkungan dev di luar kotak. Banyak orang di linux berkembang di terminal. Dan Anda dapat melakukannya dengan baik-baik saja dengan kotak gelandangan ssh-only.
erikbwork

Jawaban:

150

Saya baru saja mengerjakan ini dengan tiga langkah dasarnya. Saran dari askubuntu.comtidak cukup untuk saya, jadi cobalah versi sederhana ini:

  1. Dapatkan gambar dasar Ubuntu berfungsi. Anda harus dapat mem-bootnya dan vagrant ssh.
  2. Selanjutnya, aktifkan tampilan VirtualBox, yang mati secara default. Hentikan VM dan batalkan komentar pada baris ini di Vagrantfile:
    config.vm.provider: virtualbox do | vb |
      vb.gui = benar
    akhir
  3. Boot VM dan amati jendela tampilan baru. Sekarang Anda hanya perlu menginstal dan memulai xfce4. Gunakan vagrant sshdan:
    sudo apt-get install xfce4
    sudo startxfce4 &
    

Jika ini adalah pertama kalinya Anda menjalankan lingkungan Ubuntu ini, Anda harus menjalankan perintah berikut sebelum menginstal xfce4:

sudo apt-get pembaruan

Itu saja, Anda harus mendarat di xfce4sesi.

Pembaruan: Untuk pengalaman yang lebih baik, saya merekomendasikan peningkatan ini:

  1. Jangan memulai GUI sebagai root. Anda benar-benar ingin tetap menjadi vagrantpengguna. Untuk melakukan ini, Anda harus mengizinkan siapa pun untuk memulai GUI: sudo vim /etc/X11/Xwrapper.configdan mengeditnya allowed_users=anybody.
  2. Selanjutnya, instal alat tamu VirtualBox sebelum memulai GUI. Ini akan memberi Anda resolusi layar yang sehat, mouse terintegrasi, dll.
    $ sudo apt-get install -y xfce4 virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11
    $ sudo VBoxClient-all
  3. Hanya sekarang Anda dapat memulai GUI sebagai vagrantpengguna, dengan $ startxfce4&.

Pembaruan 2: Mencoba ini hari ini dan VBoxClient-allskrip tidak selalu diinstal. Jika tidak ada, Anda dapat mengganti dengan yang setara:

sudo VBoxClient --clipboard
sudo VBoxClient --draganddrop
sudo VBoxClient --display
sudo VBoxClient --checkhostversion
sudo VBoxClient --seamless
Udara
sumber
2
Hanya ingin mampir dan mengatakan bahwa setelah sekitar 5 jam mencoba untuk membuat xfce bekerja di kotak gelandangan fedora 19, solusinya adalah menginstal paket tamu virtualbox (yum instal VirtualBox-guest.x86_64). Tanpa paket itu, xorg tidak dapat mengakses monitor mesin host saya karena alasan tertentu. Jadi ... Terima kasih kawan!
billmalarky
Saya menemukan ketika mencoba ini bahwa langkah 3 kode perlu terkandung dalam Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| ... donemetode Vagrantfile.
neontapir
1
Anda dapat menyediakan Xwindows dll dari Vagrant dengan memasukkan yang berikut di Vagrantfile Anda: #Provision X Windows, Guest VirtualBox, curl dan paket apt lainnya 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
Hanya perlu diketahui bahwa Ubuntu 16.04 tampaknya tidak mengizinkan memulai XFCE sebagai non-root dengan cara ini: bugs.launchpad.net/ubuntu/+source/xinit/+bug/1562219
Air
1
Sepertinya startxfce4dapat dijalankan sebagai non-root di Ubuntu 16.04 (xenial) setelah menginstalxserver-xorg-legacy
Laurence Billingham
74

Inilah jawaban luar biasa Air dalam bentuk a 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

Untuk memulai vm

vagrant up

Login dengan nama pengguna:, vagrantkata sandi: vagrantmelalui prompt login di GUI virtualbox.

Mulai xfce

startx
Nik
sumber
Ini bekerja untuk saya dengan dua penyesuaian kecil. Pertama saya mendapat 404 ketika mencari kotak "ubuntu / vivid64", jadi saya mengubahnya menjadi "larryli / vivid64" yang saya temukan di vagrantcloud. Kedua saya harus menambahkan menginstal plugin vagrant-proxyconf untuk mengelola pengaturan proxy.
Daniel Watrous
2
Itu menjerit -> startx saat ini tidak diinstal ??
prayagupd
1
Buruk saya, Internet tidak dikonfigurasi dalam virtualbox untuk mengunduh xfce4. Ini berfungsi sekarang tetapi apakah ada cara saya bisa melewati login dan memulai xfce4secara default?
prayagupd
@prayagupd agak lama, tetapi bisakah Anda menguraikan "Internet tidak dikonfigurasi dalam virtualbox untuk mengunduh xfce4"? Saya mendapatkan kesalahan yang sama ketika menjalankan startx setelahvagrant ssh
Joshua Zastrow
1
Saya mengalami beberapa masalah, di mana kotak virtual saya mengatakan "startx: command not found". Bisakah seseorang membantu saya mendiagnosis ini?
OOProg
11

2 sen saya

  • Pastikan Anda menjalankan vagrant terbaru (1.3.3 sekarang) + VirtualBox (4.2.18) untuk menghindari bug.

  • Anda dapat menggunakan skrip shell atau perintah inline untuk menginstal lingkungan desktop atau pengelola jendela yang ringan

    Misalnya, instal LXDE di atas Ubuntu 12.04 Box dasar yang tepat dari 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
  • Jika Anda membuat kotak basis gelandangan Anda sendiri, pastikan Anda mengikuti instruksi kemasan kotak dasar atau mempertimbangkan alat-alat seperti pengepak (atau veewee) untuk mengotomatiskan pembuatan.
Terry Wang
sumber
9

Berikut ini adalah Vagrantfile yang sedikit disesuaikan untuk Ubuntu 18,04 LTS / bionic - terima kasih atas jawaban Air dan Nik , dan posting ini menjelaskan cara meningkatkan ukuran disk saat menggunakan VirtualBox (default = 10 GB).

VM mencakup layar login LightDM.

Pembaruan: Saya telah membuat repo GitHub dari contoh ini, dan menambahkan banyak paket perangkat lunak untuk pengembangan 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
mh8020
sumber
Di Ubuntu 16.04 saya harus menginstal xserver-xorg-legacy untuk mendapatkan file XWrapper.config agar ada / digunakan.
MZB
Pengujian lebih lanjut menunjukkan garis sed mungkin tidak diperlukan sesuai komentar di repo github terkait.
MZB
@ mh8020 Terima kasih telah membuat repo github. Sangat bersih dan mudah diikuti, hanya apa yang saya butuhkan. Hanya satu masalah: Saya tidak bisa mengaktifkan sistem guest guest Ubuntu! Adakah yang tahu apa yang bisa mengaktifkan ini pada pengaturan Anda saat ini?
timmwagener
7

Saya menggunakan gambar desktop ubuntu, ini berfungsi dengan baik dengan dua monitor di windows dengan penyedia kotak virtual.

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
Andrzej Rehmann
sumber
3
vb.customize ["modifyvm", :id, '--audio', 'dsound', '--audiocontroller', 'ac97']untuk mendapatkan suara dari vm (jika perlu)
Igonato
pemotong kotak tidak lagi menyediakan gambar yang sudah dibuat.
Krock
5

Anda mungkin juga mempertimbangkan menggunakan Packer untuk membuat gambar VirtualBox untuk digunakan pengembang.

Daripada membagikan Vagrantfile yang digunakan masing-masing pengembang untuk membangun dan menjalankan VM mereka, Anda akan memiliki template packer (json) yang digunakan untuk membuat gambar VM. Pengembang mengunduh atau menyalin gambar dan menjalankannya secara lokal, langsung di VB, tanpa harus membuatnya sendiri.

Banyak kotak dasar Vagrant yang dibagikan secara publik dibuat dengan Packer.

Kemalasan
sumber
2

/ubuntu/300799/does-ubuntu-12-04-lts-32-bit-have-graphic-user-interface/300805#300805

Setelah menginstal desktop, Anda juga ingin menginstal GDM yang memungkinkan Anda mem-boot langsung ke lingkungan grafis. Anda juga ingin mengkonfigurasinya.

Jadi mungkin tambahkan ini?

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
Anthony Roberts
sumber
1
... atau xdm yang lebih ringan
geekQ
1

Saya telah menambal jawaban Nik sedikit untuk menghindari 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
Stepan Yakovenko
sumber
0

Menambah komentar billmalarky di atas, pada fedora 20 berikut ini diperlukan sebelum memulai xfce:

  • Instal VirtualBox-guest.rpm (tersedia dari repo rpmfusion)
  • tanda grup yum pasang 'graphical_environment'
  • yum groupinstall "Xfce"
  • yum instal xorg-x11-drivers

Ini kodenya:

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
Izak Marais
sumber
0

Suka xfce4solusinya oleh @Air. Pernah saya berhasil, tetapi hari ini saya gagal dengan ubuntu16.04. Saya mendapat kesalahan ini:

xrdb can't open display 1

Tapi untungnya, saya menemukan ini berfungsi:

startx
scil
sumber
0

Saya melihat beberapa orang mengalami masalah dengan "startx: command not found". Saya juga punya ini dan itu karena saya mencoba masuk dan mulai sebelum penyediaan pertama kali selesai. Bersabarlah, pergi mengambil kopi. Periksa jendela konsol asli untuk melihat apa yang terjadi terutama ketika penyediaan telah selesai.

Adrian Yorke
sumber