Feb
18
2012
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
no comments | tags: kvm, libvirt, lighttpd, linux, server, software, virtualization | posted in MicroServer
Jan
21
2012
daniele
Supponendo di voler creare un volume LVM nel disco sdd per prima cosa inizializziamo lo spazio
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
no comments | tags: disk, libvirt, lvm, raid, software, virtualization, vm | posted in MicroServer
Jan
21
2012
daniele
Per montare un immagine RAW oppure una partizione e/o LV contenente una VM o un insieme di partizioni è sufficiente avere installato kpartx
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
no comments | tags: disk, kvm, libvirt, linux, software, virtualization, vm | posted in MicroServer
Aug
26
2011
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
E connettersi via console al container appena creato
(per fare il detach della console premere ctrl-q a)
– Fine prima parte –
Riferimenti
no comments | tags: libvirt, linux, lxc, virtualization | posted in MicroServer
Jul
21
2011
daniele
Attenzione! Il post non è più aggiornato poiché il bug è stato risolto nella release 3.4.10 di apcupsd.
3.14.10 -- 13 September 2011 (Maintenance Release)
BUG FIXES
* Fix missing status and spurrious incorrect status on newer BackUPS CS
models using USB interface.
[...]
APCUPSD è un comodissimo software per chi possiede un UPS della APC.
Esso permette di monitorare lo stato dell’UPS, inviare alert e email in caso di blackout, avviare lo spegnimento dei server collegati a seguito di un blackout prolungato, ecc…
Dall’ultima versione, la 3.14.8, è stato introdotto un bug che si viene a verificare nel caso di utilizzo del software in abbinamento ad un UPS APC BackUp CS collegato tramite USB: ogni qualvolta che il demone effettua il polling dell’unità viene generato un errore di controllo nel subsystem USB
[...]
USB disconnect, address 6
usb 3-2: ctrl urb status -62 received
[...]
causando tra l’altro la disconnessione e riconnessione della periferica HID (viene vista dal kernel come una HID). Continue reading
no comments | tags: apc, hardware, HP MicroServer, linux, monitoring, server, software | posted in MicroServer, Other stuff
May
30
2011
daniele
MicroServer, il mio home-server che eroga i servizi web, è connesso alla WAN attraverso una line ADSL. Questa tecnologia, assimetrica, comporta velocità di upload abbastanza limitate (384 Kbit/s nel caso in esame): negli ultimi tempi, con un uso intenso di css e js (che arrivano anche a 200KB) nelle applicazioni web, questa limitazione è diventata ancora più evidente.
Per ovviare è possibile utilizzare la compressione trasparente delle pagine (ma non solo) lato webserver; a patto che il browser supporti la decompressione “on-the-fly” (ormai qualsiasi browser degno di tal nome la supporta) è possibile ridurre notevolmente la banda necessaria. Lo scotto è la necessità di un po’ più di potenza di calcolo, ma d’altro canto mai nel passato abbiamo avuto a disposizione tanta potenza a buon mercato.
Per attivare la compressione dei contenuti statici attraverso lighttpd è sufficiente abilitare il supporto e definire quali MIME comprimere (principalmente quelli testuali):
creiamo il file compress.conf in /etc/lighttpd/conf.d
server.modules += ( "mod_compress" )
compress.allowed-encodings = ("bzip2", "gzip", "deflate")
compress.filetype = ("text/plain", "text/html", "text/javascript", "text/css", "text/xml")
Per attivare la compressione dei contenuti dinamici generati dall’interprete php è sufficiente attivare il supporto a zlib nel file php.ini
zlib.output_compression = On
Al termine riavviamo i servizi
bash$ service lighttpd restart
Riferimenti:
http://redmine.lighttpd.net/projects/lighttpd/wiki#Documentation
no comments | tags: lighttpd, server, software, web | posted in MicroServer
May
14
2011
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
- Per prima cosa verificare che il processore sia un AMD e che supporti la virtualizzazione
cat /proc/cpuinfo |grep svm
flags : [...] svm [...]
- Caricare il modulo kvm_amd con in supporto nested abilitato
modprobe kvm_amd nested=1
- Creare uno script wrapper per qemu-kvm in /usr/local/bin/qemu-kvm-nested
#!/bin/bash
/usr/bin/qemu-kvm -enable-nesting $*
- 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>
- 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
2 comments | tags: kvm, libvirt, server, virtualization | posted in MicroServer
Apr
26
2011
daniele
L’HP MicroServer offre un totale di 4 bay da 3.5″ per hardisk LFF e 1 bay per unità da 5.25″ (unità ottiche o a nastro). Normalmente solo un cassettino degli HDD è popolato, gli altri tre sono vuoti.
Qual’ora si volesse aggiungere ulteriori dischi HP fornisce tutti gli strumenti e i materiali necessari al montaggio. Dietro allo sportellino frontale infatti si trovano due set di viti (per 3.5″ e per 5.25″) e la brugola adatta all’utilizzo con le viti fornite (serve anche per poter smontare la mainboard ndr.).
Dal manuale:

Il post è dedicato a Michele
no comments | tags: disk, hardware, HP MicroServer, server | posted in MicroServer
Apr
24
2011
daniele
Oramai è prassi diffusa l’utilizzo di un front controller nelle applicazioni web. Per implementarlo correttamente è necessario che il web server effettui delle rewrite dell’URL.
Se si utilizza Apache non è un grosso problema poiché quasi tutti i software che richiedono l’esecuzione di una o più rewrite contengono il file .htaccess pronto all’uso.
Per nginx c’è l’utilissima funzione try_files
try_files $uri $uri/ /index.php?url=$uri;
Per lighttpd? E’ possibile implementare anche in lighttpd una funzione simile alla try_files di nginx tramite una rewrite
url.rewrite-once = ( "^/(.*)\.(.*)" => "$0", "^/([^.]+)$" => "/index.php?url=$1" )
Questa regola, alla pari di try_files, verifica che la risorsa richiesta esista: nel caso di esito positivo non avviene la rewrite, mentre se non esiste l’uri viene passata al front controller.
Per poterla utilizzare il modulo mod_rewrite deve essere caricato
server.modules += ( "mod_rewrite" )
no comments | tags: lighttpd, nginx, server, software | posted in MicroServer
Apr
7
2011
daniele
A volte può capitare la necessità di effettuare tunneling verso un altra rete, vuoi per la necessità di accedere alla rete stessa, vuoi per poter fare da ponte e utilizzare un altro gateway verso il web.
Il primo caso può essere utile ad esempio per accedere a un host in una rete locale non raggiungibile attraverso il NAT, che è quello che a me spesso capita.
Le soluzioni più eleganti e raffinate prevedono l’utilizzo di VPN, ma c’è una soluzione ancora più semplice. Avendo una macchina all’interno della rete a cui ci si vuole collegare ed avendo installato SSH raggiungibile dall’esterno è possibile utilizzare il tunneling (criptato) tramite il forwarding SOCKS5 con un semplice comando:
ssh -C2qTnN -D 8080 username@remotehost
Questo comando va eseguito sulla macchina locale (deve anche qui essere installato SSH). Per Windows è possibile utilizzare putty. Esso creerà una connessione SSH verso remotehost senza shell e rimarrà in ascolto sulla porta locale 8080. Si presume che la porta remota sia la 22, se così non fosse è possibile specificare con il flag -p la porta di SSH sull’host remoto.
E’ possibile attivare il farwarding e una shell remota contemporaneamente; per farlo vanno tolti i flag -T -n e -N.
Ora che il tunnel è creato è possibile attivare l’accesso ad esso: per i browser è sufficiente andare nella configurazione proxy ed attivare il proxy attraverso SOCKS5: i parametri saranno localhost come host e 8080 la porta (o quella definita dal parametro -D). Inserendo un indirizzo della rete locale a cui si è connessi in tunnel sarà possibile accedere ad esso.
Per le applicazioni che non supportano SOCKS, o per cui non esiste una gui apposita di configurazione, esiste in Linux un comodissimo wrapper: tsocks.
Per prima cosa bisogna provvedere ad installarlo: su Fedora è sufficiente un
per poi creare il file di configurazione /etc/tsocks.conf così impostato
server = localhost
server_port = 8080
server_type = 5
local = 127.0.0.0/255.0.0.0
infine per l’utilizzo sarà sufficiente dare da shell il comando
(è possibile anche creare una nuova shell con attivo di default il wrapper eseguendo il solo comando tsocks).
Per verificare se è attivo il wrapping delle connessioni il comando
deve restituire
declare -x LD_PRELOAD="libtsocks.so"
Per terminare il forwarding sarà sufficiente chiudere il processo ssh (con ctrl-c nel caso non sia stato allocato un tty).
Riferimenti
no comments | tags: linux, proxy, server, software, ssh | posted in MicroServer, Mini, Other stuff