¿Usar cloud-init con VirtualBox?

8

Cloudinit es utilizado por muchas imágenes de nube, por ejemplo, en EC2 para obtener su configuración inicial, como la dirección IP, las claves ssh y similares. ¿Hay alguna manera de usarlo con VirtualBox de manera similar?

Estoy buscando una manera de poner un archivo ssh Authorized_keys en una instancia de VirtualBox sin tener que codificarlo en la imagen.

Aquí hay una sección sobre "No Cloud" , pero no entiendo completamente cómo se aplicaría esto a VirtualBox. ¿Puedo generar un / dev / sdb con los archivos en cuestión y proporcionar esto a VirtualBox como una segunda unidad antes de iniciar la instancia, y mágicamente recogerá la información de alguna manera?

Johannes Ernst
fuente

Respuestas:

6

Lo descubrí y escribí en un blog al respecto aquí: http://indieboxproject.org/blog/2014/10/virtualbox-and-cloud-init/ . Desde ese enlace (ahora muerto):

VirtualBox y cloud-init

En caso de que alguien más quiera saber:

  • Puede usar cloud-init para configurar máquinas virtuales VirtualBox sin demasiados problemas.
  • Una forma de hacerlo es utilizar una "unidad de configuración", es decir, montar otro disco duro virtual que (solo) tenga los datos de configuración de inicio en la nube.
  • Aquí hay una forma de crearlo:

    # Create empty virtual hard drive file
    dd if=/dev/zero of=config.img bs=1 count=0 seek=2M
    # put correct filesystem and disk label on
    mkfs.vfat -n cidata config.img
    # mount it somewhere so you can put the config data on
    sudo mount config.img /mnt
    
  • Ahora ponga sus datos de configuración en /mnt/user-datay /mnt/meta-data,

  • Ejemplo: /mnt/user-data.Esto creará un usuario ubos-admincon una clave ssh para que pueda iniciar sesión a través de ssh sin una contraseña.

    #cloud-config
    users:
     - name: ubos-admin
       gecos: UBOS administrative user
       ssh-authorized-keys:
        - insert ssh key here
       sudo: "ALL=(ALL) NOPASSWD: /usr/bin/ubos-admin *, /usr/bin/bash *"
    
  • Ejemplo /mnt/meta-data:

    instance-id: my-instance-1
    
  • Luego, desmontar:

    sudo umount /mnt
    
  • y adjunte como segundo disco duro antes de arrancar. Si cloud-init está instalado en la imagen principal, debería recoger la información de configuración.

Johannes Ernst
fuente
1
¿Puedes copiar la información relevante aquí? Es una buena práctica en caso de que se elimine la URL original. Lo que sucedió
Jan
Esto es un poco engañoso: su ejemplo es para una fuente de datos "NoCloud" en lugar de una fuente de datos "Cloud Drive". La cidataetiqueta en config.img es uno de los determinantes.
Dan Dye
2

Un enfoque ligeramente diferente que también funciona:

Utilizando la imagen de la nube CentOS 7 que se encuentra aquí: https://cloud.centos.org/centos/7/images/ (elija CentOS-7-x86_64-GenericCloud.qcow2)

datos del usuario

#!/bin/bash
##
## dependencies required for:
##        VBoxGuestAdditions
##        Minimal Desktop
##
DEPS='wget unzip python-pip git gnome-classic-session gnome-terminal nautilus-open-terminal control-center liberation-mono-fonts bzip2 libguest libguestfs binutils gcc make kernel-headers kernel-devel'

update(){
    sudo yum -y -q update
}


install_epel(){
    sudo yum -y install epel-release
    sudo yum -y update
}

configure(){
    sudo yum -y -q install $DEPS
    yum -y groupinstall "X Window System"
    unlink /etc/systemd/system/default.target
    ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target

    reboot
}

set -x
update
install_epel
configure

metadatos

instance-id: dev
local-hostname: dev.example.com
public-keys:
    - ssh-rsa AAAAB3NzaC1y[...]2yX3 [email protected]

network-interfaces: |
    auto eth1
    iface eth1 inet dhcp

vbox-config-drive.sh

#!/bin/bash

##
## generate the config-drive iso
##
gen_iso(){
    echo "Generating ISO"
    genisoimage -output vbox-config.iso -volid cidata -joliet -r meta-data user-data
}

##
## resize as necessary
##
resize(){
    echo "Resizing Disk"
    qemu-img create -f qcow2 -o preallocation=metadata CentOS-7-x86_64-GenericCloud.qcow2.new 12G
    virt-resize --quiet --expand /dev/sda1 CentOS-7-x86_64-GenericCloud.qcow2 CentOS-7-x86_64-GenericCloud.qcow2.new
    mv CentOS-7-x86_64-GenericCloud.qcow2.new CentOS-7-x86_64-GenericCloud.qcow2
}
##
## convert the qcow to vmdk
##
make_vmdk(){
    echo "Converting QCOW to VMDK"
    qemu-img convert -f qcow2 CentOS-7-x86_64-GenericCloud.qcow2 -O vmdk CentOS-7-x86_64-GenericCloud.vmdk
}

gen_iso
##
## OPTIONAL
## resize
##
make_vmdk
echo "Done"

Use el VMDK resultante como su disco primario VirtualBox y el ISO resultante como la unidad óptica.

Espero que esto ayude. METRO.

Matt C.
fuente