Páginas

terça-feira, 20 de novembro de 2012

Script para Instalação do KVM

Olá a todos!!!

Para facilitar a instalação e configuração do KVM, eu criei um script para Debian/Ubuntu que prepara o ambiente, instala e configura os arquivos da libvirt e instala uma interface web de administração. O script é melhor aproveitado em uma máquina com o SO recém instalado.

Detalhes do Script:

- Em meu ambiente eu utilizo VMs com rede em bridge, e isso foi passado para o script (a performance de rede fica muito mais rápida com essa configuração)

- O script cria a bridge utilizando a primeira placa de rede do sistema

- Todos os blocos de comandos foram feitos em forma de funções para que ficasse mais fácil a sua manipulação.

- O script instala a interface web webvirtmgr (www.webvirtmgr.net) que oferece funcionalidades básicas como criação de VMs, manipulação de storages, console em VNC, etc.

- Toda a instalação levou de 30 a 40 minutos (com uma conexão de 10 mbps)

- Curiosamente em algumas instalações eu tive que reiniciar o servidor após a instalação, mas em outras isso não aconteceu.

Abaixo o código:

#!/bin/bash
# Instalador do KVM e Webvirtmgr Para Debian Squeeze+ e Ubuntu
# Desenvolvido por Rodrigo Garcia 20/11/2012

clear

function sources_install()
{
    VERSION=`cat /etc/debian_version`
    if [ $VERSION = "wheezy/sid" ]
    then
        break;
    else
        # Incluir repositorios "Testing" no sources.list (apenas para Debian)
        echo "# Testing" >> /etc/apt/sources.list
        echo "deb http://ftp.debian.org/debian/ testing main contrib non-free" >> /etc/apt/sources.list
        echo "#Testing Security updates" >> /etc/apt/sources.list
        echo "deb http://security.debian.org/ testing/updates main contrib" >> /etc/apt/sources.list
        apt-get update
        # Instalar pacotes necessarios
        apt-get install kvm libvirt-bin git python3.2 python-django virtinst apache2 libapache2-mod-python libapache2-mod-wsgi -y
    fi
}
function bridge()
{
    # Criar bridge br0
    IFACE=`ifconfig | awk 'NR==1 {print $1}'`
    echo "allow-hotplug br0" >> /etc/network/interfaces
    echo "iface br0 inet dhcp" >> /etc/network/interfaces
    echo "   bridge_ports $IFACE" >> /etc/network/interfaces    # Faz uma bridge com a primeira interface de rede do sistema
    echo "   bridge_fd 9" >> /etc/network/interfaces
    echo "   bridge_hello 2" >> /etc/network/interfaces
    echo "   bridge_maxage 12" >> /etc/network/interfaces
    echo "   bridge_stp on" >> /etc/network/interfaces
    ifup br0
}
function configure_daemon()
{
    # Configurar /etc/default/libvirt-bin
    echo "start_libvirtd=\"yes\"" > /etc/default/libvirt-bin
    echo "libvirtd_opts=\"-l -d\"" >> /etc/default/libvirt-bin
    #configurar daemon do libvirt
    sed -i '22 s/#//g' /etc/libvirt/libvirtd.conf
    sed -i '33 s/#//g' /etc/libvirt/libvirtd.conf
    sed -i '98 s/"0770"/"0777"/g' /etc/libvirt/libvirtd.conf
    sed -i '146 s/#//g' /etc/libvirt/libvirtd.conf
    sed -i '146 s/"sasl"/"none"/g' /etc/libvirt/libvirtd.conf
}
function webvirt_install()
{
    # Baixar e instalar webvirtmgr
    mkdir /var/www/webvirtmgr
    git clone git://github.com/retspen/webvirtmgr.git /var/www/webvirtmgr
    # Configurar banco de dados e criar superusuario (este é o único ponto do script em que há interação com o usuário)
    /var/www/webvirtmgr/manage.py syncdb
    chown www-data:www-data /var/www/webvirtmgr -R
    chmod 755 /var/www/webvirtmgr/webvirtmgr.db
    # Configuracao do Apache
    echo "WSGIScriptAlias / /var/www/webvirtmgr/wsgi/django.wsgi" > /etc/apache2/conf.d/webvirtmgr.conf
    echo "Alias /static /var/www/webvirtmgr/static/" >> /etc/apache2/conf.d/webvirtmgr.conf
    echo "Alias /media /var/www/webvirtmgr/media/" >> /etc/apache2/conf.d/webvirtmgr.conf
    echo "<Directory /var/www/webvirtmgr/wsgi>" >> /etc/apache2/conf.d/webvirtmgr.conf
    echo "  Order allow,deny" >> /etc/apache2/conf.d/webvirtmgr.conf
    echo "  Allow from all" >> /etc/apache2/conf.d/webvirtmgr.conf
    echo "</Directory>" >> /etc/apache2/conf.d/webvirtmgr.conf
}
function modules()
{
    # Reiniciar os módulos
    rmmod kvm-intel
    rmmod kvm
    modprobe kvm
    modprobe kvm-intel
}
function services()
{
    # Reiniciar os serviços
    service libvirt-bin restart
    service apache2 restart
}
sources_install
bridge
configure_daemon
webvirt_install
modules
services
exit 0;

Espero que gostem,

Até a próxima!!!

2 comentários:

  1. Fiquei com duvida sobre a instalação do Banco de Dados, ele pergunta qual quero usar, porem não me recordo se instalei algum client

    ResponderExcluir
  2. Aliás parabéns pelo Script tá show de bola, mto prático...

    ResponderExcluir