Use o cloud-init com o VirtualBox?

6

Cloudinit é usado por muitas imagens da nuvem, por exemplo no EC2 para obter sua configuração inicial, como endereço IP, chaves ssh e similares. Existe uma maneira de usá-lo com o VirtualBox de maneira semelhante?

Estou procurando uma maneira de colocar um arquivo ssh authorized_keys em uma instância do VirtualBox sem precisar codificá-lo na própria imagem.

Há uma seção sobre "Sem Nuvem" aqui , mas eu Não estou totalmente entendendo como isso se aplicaria ao VirtualBox. Posso gerar um / dev / sdb com os arquivos em questão, e fornecer isso para o VirtualBox como uma segunda unidade antes de inicializar a instância, e de alguma forma magicamente irá pegar as informações?

    
por Johannes Ernst 18.10.2014 / 00:14

2 respostas

6

Eu descobri e escrevi sobre isso aqui: link . A partir desse link (agora morto):

VirtualBox e cloud-init

Caso alguém queira saber:

  • Você pode usar o cloud-init para configurar máquinas virtuais do VirtualBox sem muita dificuldade.
  • Uma maneira de fazer isso é usar uma “unidade de configuração”, ou seja, montar outro disco rígido virtual que (somente) tenha os dados de configuração do cloud-init nele.
  • Aqui está uma maneira de criá-lo:

    # 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
    
  • Agora, coloque seus dados de configuração em /mnt/user-data e /mnt/meta-data ,

  • Exemplo: /mnt/user-data. Isso criará um usuário ubos-admin com uma chave ssh para que você possa fazer logon via ssh sem uma senha.

    #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 *"
    
  • Exemplo /mnt/meta-data :

    instance-id: my-instance-1
    
  • Em seguida, desmonte:

    sudo umount /mnt
    
  • e anexe como segundo disco rígido antes de inicializar. Se o cloud-init estiver instalado na imagem principal, ele deverá coletar as informações de configuração.

por 18.12.2014 / 01:30
2

Uma abordagem ligeiramente diferente que também funciona:

Usando o CentOS 7 Cloud Image encontrado aqui: link (escolha CentOS-7-x86_64-GenericCloud. qcow2)

dados do usuário

#!/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

meta-dados

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 o VMDK resultante como seu disco principal do VirtualBox e o ISO resultante como a unidade ótica.

Espero que isso ajude. M.

    
por 29.09.2017 / 16:22