Usando vagabundo para ejecutar máquinas virtuales con entorno de escritorio

148

El entorno de desarrollo de mi empresa se basa en máquinas virtuales que se ejecutan en VirtualBox. Nos gustaría avanzar un paso más y utilizar las capacidades de Vagrant para tener la descripción de la máquina en un archivo de texto y luego poder "elevar" esa máquina en función de ese archivo de texto. Combinado con Puppet, esto nos resolvería el problema de que todos tienen diferentes versiones de software instaladas en la VM.

Sin embargo, Vagrant parece estar muy concentrado en desarrollarse en el host, dejando la máquina en segundo plano. Necesitaríamos tener nuestro entorno de desarrollo dentro de la máquina, por lo que necesitaríamos una GUI completa, por lo que al escribir "vagabundo" debería aparecer una máquina con un entorno de escritorio completo (XFCE, KDE ...).

Hasta ahora, he logrado crear un cuadro "base" a partir de una distribución de Xubuntu. Pero cuando escribo "vagabundo", aunque aparece el escritorio, y puedo iniciar sesión correctamente, Vagrant se congela con el mensaje "Esperando a que la máquina arranque. Esto puede tardar unos minutos ...". Después de un tiempo, Vagrant se bloquea debido al tiempo de espera. Por lo tanto, no se crean carpetas compartidas ni se ejecuta el aprovisionador de paquetes -puppet-.

¿Cómo crear una máquina virtual con una GUI completa usando vagabundo?

PRiera
fuente
1
Nunca he tenido problemas al usar estas cajas . Tal vez algo salió mal cuando empacaste tu caja base.
bfitzpatrick
1
desde la perspectiva ingenua, si puede desarrollar en el host y no en la VM, ¿por qué se molesta en instalar capacidades GUI en la VM Vagrant? ¿Por qué no desarrollar en el host?
Alexander Mills
El desarrollo en la VM puede ocasionar menos problemas cuando el equipo de desarrollo mantiene las especificaciones de VM / Vagrant para que estén sincronizadas con el entorno de destino de su aplicación. Obtendrá menos dependencias y comportamientos progresivos que son exclusivos de su desarrollador. entorno sin estar presente (o no idéntico) en el entorno / instalación de destino.
Jim Dennis
En realidad, su conclusión no es completamente correcta. Vagabundo no se trata de tener el entorno de desarrollo fuera de la caja. Muchas personas en Linux se desarrollan en una terminal. Y puede hacerlo bien con cajas vagabundas solo ssh.
erikbwork

Respuestas:

150

Acabo de hacer esto trabajando básicamente con tres pasos. El consejo de askubuntu.comno me funcionó, así que prueba esta versión simplificada:

  1. Obtenga una imagen básica de Ubuntu funcionando. Deberías poder arrancarlo y vagrant ssh.
  2. A continuación, habilite la pantalla VirtualBox, que está desactivada de manera predeterminada. Detenga la VM y descomente estas líneas en Vagrantfile:
    config.vm.provider: virtualbox do | vb |
      vb.gui = verdadero
    final
  3. Inicie la VM y observe la nueva ventana de visualización. Ahora solo necesita instalar y comenzar xfce4. Uso vagrant sshy:
    sudo apt-get install xfce4
    sudo startxfce4 &
    

Si es la primera vez que ejecuta este entorno de Ubuntu, deberá ejecutar el siguiente comando antes de instalar xfce4:

sudo apt-get update

Eso es todo, deberías aterrizar en una xfce4sesión.

Actualización: para una mejor experiencia, recomiendo estas mejoras:

  1. No inicie la GUI como root. Realmente quieres seguir siendo el vagrantusuario. Para hacer esto, debe permitir que cualquiera inicie la GUI: sudo vim /etc/X11/Xwrapper.configy edítela en allowed_users=anybody.
  2. A continuación, instale las herramientas de invitado VirtualBox antes de iniciar la GUI. Esto le dará una resolución de pantalla saludable, mouse integrado, etc.
    $ sudo apt-get install -y xfce4 virtualbox-guest-dkms virtualbox-guest-utils virtualbox-guest-x11
    $ sudo VBoxClient-all
  3. Solo ahora debe iniciar la GUI como vagrantusuario, con $ startxfce4&.

Actualización 2: Intenté esto hoy y el VBoxClient-allscript no siempre está instalado. Si falta, puede reemplazar con el equivalente:

sudo VBoxClient --clipboard
sudo VBoxClient --draganddrop
sudo VBoxClient --display
sudo VBoxClient --checkhostversion
sudo VBoxClient --seamless
Aire
fuente
2
Solo quería pasar y decir que después de aproximadamente 5 horas de tratar de hacer que xfce funcione en una caja vagabunda fedora 19, la solución fue instalar el paquete de invitado virtualbox (yum install VirtualBox-guest.x86_64). Sin ese paquete, xorg no podría acceder al monitor de mi máquina host por alguna razón. Entonces ... ¡Gracias hombre!
billmalarky
Al intentar esto, descubrí que el código del paso 3 debe estar contenido dentro del Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| ... donemétodo del archivo Vagrantfile.
neontapir
1
Puede aprovisionar Xwindows, etc. desde Vagrant incluyendo lo siguiente en su archivo Vagrant: #Provision X Windows, VirtualBox Guest, curl y otros paquetes apt 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
Solo un aviso de que Ubuntu 16.04 no parece permitir iniciar XFCE como no root de esta manera: bugs.launchpad.net/ubuntu/+source/xinit/+bug/1562219
Air
1
Parece que startxfce4se puede ejecutar como no root en Ubuntu 16.04 (xenial) después de la instalaciónxserver-xorg-legacy
Laurence Billingham
74

Aquí está la excelente respuesta de Air en forma de 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

Para iniciar el vm

vagrant up

Inicie sesión con nombre de usuario: vagrantcontraseña: a vagranttravés de la solicitud de inicio de sesión en la GUI de virtualbox.

Iniciar xfce

startx
Nik
fuente
Esto funcionó para mí con dos pequeños ajustes. Primero obtuve un 404 cuando busqué el cuadro "ubuntu / vivid64", así que lo cambié a "larryli / vivid64" que encontré en vagrantcloud. En segundo lugar, tuve que agregar instalar el complemento vagrant-proxyconf para administrar la configuración del proxy.
Daniel Watrous
2
Grita -> ¿startx no está instalado actualmente?
prayagupd
1
Lo malo es que Internet no se configuró en virtualbox para descargar el xfce4. Funciona ahora, pero ¿hay alguna forma de omitir el inicio de sesión e iniciarlo xfce4de forma predeterminada?
prayagupd
@prayagupd es un poco viejo, pero ¿puedes dar más detalles sobre "Internet no se configuró en virtualbox para descargar el xfce4"? Recibo el mismo error cuando ejecuto startx despuésvagrant ssh
Joshua Zastrow
1
Tengo algunos problemas, donde mi caja virtual dice "startx: comando no encontrado". ¿Alguien podría ayudarme a diagnosticar esto?
OOProg
11

Mis 2 centavos

  • Asegúrese de estar ejecutando el último vagabundo (1.3.3 ahora) + VirtualBox (4.2.18) para evitar errores.

  • Puede usar el script de shell o el comando en línea para instalar un entorno de escritorio o un administrador de ventanas ligero

    Por ejemplo, instale LXDE sobre Ubuntu 12.04 Precise base box de 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
  • Si construye sus propias cajas base vagabundas, asegúrese de seguir las instrucciones de empaquetado de la caja base o considere herramientas como empaquetador (o veewee) para automatizar la construcción.
Terry Wang
fuente
9

Aquí hay un Vagrantfile ligeramente adaptado para Ubuntu 18.04 LTS / bionic, gracias a las respuestas de Air y Nik , y esta publicación explicando cómo aumentar el tamaño del disco cuando se usa VirtualBox (predeterminado = 10 GB).

La VM incluye una pantalla de inicio de sesión LightDM.

Actualización: he creado un repositorio de GitHub a partir de este ejemplo, y he agregado muchos paquetes de software para el desarrollo 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
fuente
En Ubuntu 16.04 tuve que instalar xserver-xorg-legacy para que el archivo XWrapper.config exista / se use.
MZB
Las pruebas adicionales sugieren que la línea de sed puede no ser necesaria según el comentario en el repositorio de github vinculado.
MZB
@ mh8020 Gracias por crear el repositorio de github. Muy limpio y fácil de seguir, justo lo que necesitaba. Solo un problema: ¡no puedo hacer que el sonido en el sistema Ubuntu invitado funcione! ¿Alguna idea de lo que podría habilitar esto en su configuración actual?
timmwagener
7

Estoy usando la imagen de escritorio de ubuntu, funciona muy bien con dos monitores en Windows con un proveedor de caja 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
fuente
3
vb.customize ["modifyvm", :id, '--audio', 'dsound', '--audiocontroller', 'ac97']obtener el sonido de la vm (si es necesario)
Igonato
box-cutter ya no proporciona las imágenes preconstruidas.
krock
5

También puede considerar usar Packer para crear imágenes de VirtualBox para que los desarrolladores las usen.

En lugar de compartir el Vagrantfile que cada desarrollador usa para construir y ejecutar su VM, tendría una plantilla de empaquetador (json) que se usa para crear una imagen de VM. Los desarrolladores descargan o copian la imagen y la ejecutan localmente, directamente en VB, sin tener que construirla ellos mismos.

Muchos de los cuadros base Vagrant compartidos públicamente se crean con Packer.

Encanto
fuente
2

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

Después de instalar el escritorio, también querrá instalar GDM que le permitirá iniciar directamente en un entorno gráfico. También querrás configurarlo.

Entonces, ¿quizás agregar esto?

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
fuente
1
... o el xdm más ligero
geekQ
1

He parcheado un poco la respuesta de Nik para evitar 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
fuente
0

Agregando al comentario de billmalarky anterior, en fedora 20 fue necesario lo siguiente antes de comenzar xfce:

  • Instale VirtualBox-guest.rpm (disponible en repositorios rpmfusion)
  • grupos de yum marcan instalar 'entorno_grafico'
  • yum groupinstall "Xfce"
  • yum instalar controladores xorg-x11

Aquí está el código:

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
fuente
0

Me gusta la xfce4solución de @Air. Una vez tuve éxito, pero hoy fallé con ubuntu16.04. Tengo este error:

xrdb can't open display 1

Pero por suerte, encontré que esto funciona:

startx
scil
fuente
0

Veo que algunas personas tienen problemas con "startx: comando no encontrado". También tuve esto y fue porque estaba intentando iniciar sesión y startx antes de que se completara el aprovisionamiento por primera vez. Sé paciente, ve a tomar un café. Verifique la ventana de la consola original para ver qué sucede, especialmente cuando finaliza el aprovisionamiento.

Adrian Yorke
fuente