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

Jul 21 2011

APCUPSD bug USB

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


May 30 2011

lighttpd: attiviamo la compressione

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


May 4 2011

Gnome 3: gli stumenti indispensabili

daniele

Il 6 aprile 2011 è (finalmente?) uscito Gnome 3: l’idea di desktop è stata in buona parte rivoluzionata; devo dire che tuttavia sul netbook non è così male la nuova impostazione.

La prima impressione che ho avuto con Gnome 3 è stata l’impossibilità di accedere a molte impostazioni per personalizzare almeno un poco il comportamento del desktop: infatti il pannello di controllo, almeno attualmente, molto limitante nella configurazione.

Tuttavia esistono due tool, a mio dire indispensabili, che permetto di aggirare parzialmente questo limite.
Essi sono:

gnome-tweak-tool


E’ una gui molto semplice per abilitare e/o modificare alcuni comportamenti e caratteristiche di base.

dconf-editor

Sostituisce il vecchio gconf-editor e permette una gestione più completa e raffinata delle impostazioni.

Per installarli, su Fedora 15 (beta), è sufficiente usare yum

yum install -y dconf-editor gnome-tweak-tool

Personalmente ho fatto le seguenti modifiche

  • Attivata la data a fianco dell’orologio
  • Attivato il pulsante di minimizzazione delle finestre
  • Attivato il pulsante “power-off” nel menu utente (tramite il pacchetto gnome-shell-extensions-alternative-status-menu)

 


Apr 24 2011

lighttpd front controller

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" )

Apr 10 2011

Firefox 4 su Fedora 14

daniele

Per installare Firefox 4 su Fedora 14 utilizzando i pacchetti RPM è sufficiente aggiungere il seguente repository:

[fedora-firefox4]
name=Firefox 4 Web Browser
baseurl=http://repos.fedorapeople.org/repos/spot/firefox4/fedora-$releasever/$basearch/
enabled=1
gpgcheck=0

salvandolo in un file .repo in /etc/yum.repos.d/ (es. fedora-firefox4.repo).

A questo punto sarà sufficiente un

yum install firefox4

L’installazione avverrà parallelamente a Firefox 3. Per rimuove Firefox 3.6 eseguire il comando

yum erase --remove-leaves firefox

Il flag –remove-leaves funziona solo se si ha installato il plugin per yum remove-with-leaves che consiglio:

yum install yum-plugin-remove-with-leaves

Yum plugin to remove dependencies which are no longer used because of a removal


Apr 7 2011

SSH SOCKS forwarding

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

yum install tsocks

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

tsocks applicazione

(è 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

export | grep tsocks

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

  • man ssh
  • man tsocks

Mar 24 2011

awstats on lighttpd

daniele

Ecco una semplice e veloce configurazione di lighttpd per l’esecuzione di awstats:

server.modules  += ( "mod_cgi", "mod_alias" )
 
$HTTP["host"] =~ "awstats.mydomain.tld" {
        alias.url += (
                "/awstats/"      => "/usr/share/awstats/wwwroot/cgi-bin/",
                "/awstatsicons/" => "/usr/share/awstats/wwwroot/icon/",
        )
 
        cgi.assign = (
                ".pl" => "/usr/bin/perl",
                ".cgi" => "/usr/bin/perl"
        )
        server.document-root = "/usr/share/awstats/wwwroot/"
}

La configurazione è consigliato salvarla in un file .conf (es. awstats.conf) in /etc/lighttpd/conf.d/ in modo da rendere la configurazione il più modulare possibile.