Feb 18 2012

Creare una macchina KVM

daniele

Per creare una nuova macchina virtuale con KVM il consiglio è quello di utilizzare l’infrastruttura libvirtd e l’utilissimo virt-install.

Con Fedora è sufficiente il comando yum per installare entrambi:

yum install libvirt python-virtinst

Un esempio per installare Scientific Linux 6 (clone di RHEL 6) direttamente da un mirror (in questo caso il GARR):

virt-install -n sl6 -r 1024  --disk /var/lib/libvirt/images/sl6.qcow2,size=20,format=qcow2 --vcpus=1 --os-type linux --os-variant=rhel6 --network bridge=br0 --vnc --location='http://rm.mirror.garr.it/mirrors/scientific/6/x86_64/os/'  --vnclisten=192.168.1.254

E’ possibile anche effettuare l’installazione testuale senza utilizzare VNC grazie al comando console di virsh

virt-install -n sl6 -r 1024  --disk /var/lib/libvirt/images/sl6.qcow2,size=20,format=qcow2 --vcpus=1 --os-type linux --os-variant=rhel6 --network bridge=br0 --location='http://rm.mirror.garr.it/mirrors/scientific/6/x86_64/os/' --extra-args 'console=ttyS0,115200'
virsh console sl6

Aggiornamento: per installare Fedora 16 e successive in modalità console seriale è necessario specificare alcuni parametri extra da passare a –extra-args. Essi sono serial text.

virt-install -n f16-server -r 1024  --disk /var/lib/libvirt/images/f16_server.qcow2,size=40,format=qcow2 --vcpus=2 --os-type linux --os-variant=fedora16 --network bridge=br0 --location='http://mirror1.mirror.garr.it/mirrors/fedora/linux/releases/16/Fedora/x86_64/os/' --extra-args 'console=ttyS0,115200 serial text'
virsh console f16-server

Jan 21 2012

Creare un volume LVM

daniele

Supponendo di voler creare un volume LVM nel disco sdd per prima cosa inizializziamo lo spazio

pvcreate /dev/sdd
pvcreate initializes PhysicalVolume for later use by the  Logi‐
cal  Volume  Manager  (LVM).  Each PhysicalVolume can be a disk
partition, whole disk, meta device, or loopback file.

Successivamente creiamo il gruppo di volumi. Come estenzione fisica del volume (non quella virtuale che poi sarà quella realemente disponibile) è suggerito un valore di 32MB

vgcreate -s 32M backup /dev/sdd
vgcreate creates a  new  volume  group  called  VolumeGroupName
using the block special device PhysicalDevicePath.

Infine creiamo il volume logico vero e proprio assegnadogli una dimensione e un nome. Tale dimensione potrà venire estesa successivamente con lvextend.

lvcreate -L200G -nhomebk backup
lvcreate creates a new logical volume in a volume group  (  see
vgcreate(8),  vgchange(8)  ) by allocating logical extents from
the free physical extent pool of that volume group.

A questo punto il nuovo volume sarà disponibile come device attraverso il path /dev/gruppo/nomevolume pronto per poter essere formattato.

Ricordo che LVM può essere creato anche all’interno di una partizione o di un’immagine disco.

Riferimenti

  • man pvcreate
  • man vgcreate
  • man lvcreate

Jan 21 2012

Montare immagini raw partizionate

daniele

Per montare un immagine RAW oppure una partizione e/o LV contenente una VM o un insieme di partizioni è sufficiente avere installato kpartx

yum -y install kpart

A questo punto è possibile sfruttare /dev/mapper per mappare le partizioni del volume

kpartx -av /path/to/file_or_lv

le partizioni compariranno sotto forma di devices

ls /dev/mapper/
file_or_lv1
file_or_lv2
file_or_lvN

a questo punto è possibile montare ogni singola partizione come consueto

mount /dev/mapper/file_or_lv1 /mn/ext

per rimuovere la mappatura è sufficiente eseguire

kpartx -d /path/to/file_or_lv

Aug 26 2011

LXC containers 01

daniele

Cominciamo con questo breve articolo una serie dedicata a LXC.

LXC: http://lxc.sourceforge.net/

LXC is the userspace control package for Linux Containers, a lightweight virtual system mechanism sometimes described as “chroot on steroids”.
LXC builds up from chroot to implement complete virtual systems, adding resource management and isolation mechanisms to Linux’s existing process management infrastructure.

In pratica LXC sono un set di tools userspace per la creazione e la gestione di containers che permettono la creazione di un sistema di virtualizzazione leggero ed efficiente. Questo è reso possibile grazie ai “Control Groups” – cgroups implementati nella mainline del kernel dal 2.6.24. Ovviamente le VM non sono altro che dei processi isolati tra loro, ma che utilizzano fisicamente lo stesso kernel (che è pure lo stesso dell’host); è quindi ovvio che solo sistemi con kernel Linux potranno essere virtualizzati. Il vantaggio è nella mancata perdita di prestazioni rispetto ai sistemi di virtualizzazione completa (kvm, xen), poiché i processi sono eseguiti direttamente sulla sistema bare-metal.
Altri sistemi silimili sono le Jails di FreeBSD e OpenVZ. Il vantaggio di LXC rispetto a OpenVZ è il disporre di tutto il necessario già all’interno del kernel, quindi senza necessità di patch al kernel vanilla.

Va premesso che LXC è una tecnologia recente e quindi ancora in fase di pesante sviluppo. E’ tuttavia pienamente usabile.

In questo primo articolo creeremo un container con Debian Squeeze su di una Fedora 14 (64bit).

Per prima cosa occore installare i tool necessari all’operazione:

yum install -y lxc debootstrap

A questo punto occore, se già non sono presenti, montare i cgroup: in Fedora 14 essi sono gestiti dallo script /etc/init.d/cgconfig con una precisa struttura gerarchica. Allo stato attuale LXC non supporta tale struttura e quindi procederemo al montaggio di /cgroup in maniera classica. Dopo aver disattivato gli script di avvio (tramite ntsysv o chkconfig) si procede a montare /cgroup manualmente e ad inserirlo nell’fstab:

mount -t cgroup cgroup /cgroup
echo "cgroup /cgroup cgroup rw 0 0" >> /etc/fstab

Creiamo anche le impostazioni base per la rete dei container. Esistendo già il bridge di rete br0 per kvm basterà creare il file /etc/lxc/container.conf (il path è arbitrario):

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0
lxc.network.ipv4 = 0.0.0.0

Ora recuperiamo il template di installazione per Debian dal pacchetto sorgente di LXC poiché nella versione RPM di Fedora 14 essi non sono distribuiti. Per comodità è possibile scaricare i template pronti per Fedora 14 a 64bit (lxc-templates-0.7.4.tar.gz). Essi vanno scompattati in  /usr/lib64/lxc/templates/.

Passiamo alla creazione del container con il comando lxc-create -n [nome_container] -t  [template] -f  [config_base_rete]

lxc-create -n debian01 -t debian -f /etc/lxc/container.conf
debootstrap is /usr/sbin/debootstrap
Checking cache download in /var/cache/lxc/debian/rootfs-squeeze-amd64 ...
Downloading debian minimal ...
I: Retrieving Release
W: Cannot check Release signature; keyring file not available /usr/share/keyrings/debian-archive-keyring.gpg
I: Retrieving Packages
I: Validating Packages
I: Resolving dependencies of required packages...
I: Resolving dependencies of base packages...
I: Found additional required dependencies: insserv libbz2-1.0 libdb4.8 libslang2
I: Found additional base dependencies: adduser debian-archive-keyring gnupg gpgv isc-dhcp-client isc-dhcp-common libbsd0 libdb4.7 libedit2 libgdbm3 libgssapi-krb5-2 libk5crypto3 libkeyutils1 libkrb5-3 libkrb5support0 libncursesw5 libreadline6 libssl0.9.8 libusb-0.1-4 libwrap0 openssh-blacklist openssh-client perl perl-modules procps readline-common
I: Checking component main on http://cdn.debian.net/debian...
I: Retrieving libacl1
I: Validating libacl1
I: Retrieving adduser
I: Validating adduser
I: Retrieving apt
I: Validating apt
I: Retrieving libattr1
I: Validating libattr1
I: Retrieving base-files
I: Validating base-files
I: Retrieving base-passwd
I: Validating base-passwd
...

Al termine della creazione sarà sufficiente avviare la VM

lxc-start -n debian01 -d

E connettersi via console al container appena creato

lxc-console -n debian01

(per fare il detach della console premere ctrl-q a)

– Fine prima parte –

Riferimenti


May 14 2011

KVM: nested virtualization

daniele

Se si possiede un processore AMD con supporto alla virtualizzazione è possibile attivare la nested virtualization di KVM che permette di esporre le istruzioni di virtualizzazione al guest. Questo permette ad esempio di usare KVM, Xen, Hyper-V [...] dentro una macchina virtualizzata con KVM, molto utile per i test.

Ecco come fare

  1. Per prima cosa verificare che il processore sia un AMD e che supporti la virtualizzazione
    cat /proc/cpuinfo |grep svm
    flags           : [...] svm [...]
  2. Caricare il modulo kvm_amd con in supporto nested abilitato
    modprobe kvm_amd nested=1
  3. Creare uno script wrapper per qemu-kvm in /usr/local/bin/qemu-kvm-nested
    #!/bin/bash
    /usr/bin/qemu-kvm -enable-nesting $*
  4. Modificare (o prima creare se è necessario) il file xml della macchina virtuale utilizzando virsh edit e sostituendo
    <emulator>/usr/bin/qemu-kvm</emulator>

    con

    <emulator>/usr/local/bin/qemu-kvm-nested</emulator>
  5. Lanciare la macchina virtuale
    [root@cloud ~]# cat /proc/cpuinfo
    processor       : 0
    vendor_id       : AuthenticAMD
    cpu family      : 6
    model           : 2
    model name      : QEMU Virtual CPU version 0.13.0
    stepping        : 3
    cpu MHz         : 1297.873
    cache size      : 512 KB
    fpu             : yes
    fpu_exception   : yes
    cpuid level     : 4
    wp              : yes
    flags           : fpu de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx lm up unfair_spinlock pni cx16 popcnt hypervisor lahf_lm svm abm sse4a
    bogomips        : 2595.74
    TLB size        : 1024 4K pages
    clflush size    : 64
    cache_alignment : 64
    address sizes   : 40 bits physical, 48 bits virtual
    power management:


Esempio di CloudStack (richiede supporto a KVM) installato su RHEL6 all’interno di una VM KVM ospitata dal MicroServer


Apr 26 2011

Fedora 15 RAM richiesta

daniele

Attenzione! Per Fedora 15 sono necessari almeno 1GB di RAM per poter effettuare l’installazione.

Provando ad installare un webserver “minimo” su KVM, per testare le novità dell’ultima release, mi sono scontrato con un kernel panic in fase di boot dell’installer: il problema è che, almeno per la versione x86_64 soggetto del test, 512MB di RAM non sono sufficienti per scompattare l’initrd.img dell’installer poiché ora comprende anche l’immagine dell’installer install.img.

E’ necessario quindi, almeno per la fase di installazione, riservare alla VM almeno 1GB di RAM. Al termine dell’installazione è possibile tornare alla configurazione precedente.

Un’altra soluzione è definire la VM nel seguente modo

<memory>1048576</memory>
<currentMemory>524288</currentMemory>

Definendo quindi 512MB di RAM che in caso di necessità, su richiesta del guest possono essere estesi a 1024MB.