<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ldlabs.org - Blog &#187; utility</title>
	<atom:link href="http://www.ldlabs.org/blog/tag/utility/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ldlabs.org/blog</link>
	<description>Linux Tips &#38; c.</description>
	<lastBuildDate>Tue, 24 Jan 2012 08:09:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Creazione di una rete di controllo per macchine virtuali,che permetta di raggiungerle dall&#8217;host con il loro hostname</title>
		<link>http://www.ldlabs.org/blog/2012/01/19/creazione-di-una-rete-di-controllo-per-macchine-virtuali/</link>
		<comments>http://www.ldlabs.org/blog/2012/01/19/creazione-di-una-rete-di-controllo-per-macchine-virtuali/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 23:52:46 +0000</pubDate>
		<dc:creator>Francesco Apollonio</dc:creator>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[Howto]]></category>
		<category><![CDATA[KVM]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[VDE]]></category>
		<category><![CDATA[Virtualbricks]]></category>
		<category><![CDATA[Virtualizzazione]]></category>
		<category><![CDATA[code tips]]></category>
		<category><![CDATA[config]]></category>
		<category><![CDATA[guida virtualbricks]]></category>
		<category><![CDATA[kvm]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[program]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[utility]]></category>
		<category><![CDATA[varie]]></category>
		<category><![CDATA[vde]]></category>
		<category><![CDATA[virtual]]></category>
		<category><![CDATA[virtualbricks]]></category>

		<guid isPermaLink="false">http://www.ldlabs.org/blog/?p=894</guid>
		<description><![CDATA[<style type="text/css">
#leftcontainerBox {
float:left;
position: fixed;
top:40%;
left:60px;
z-index:1;
#F0F4F9 
}

#leftcontainerBox .buttons {
float:left;
clear:both;
margin:4px 4px 4px 4px;
width:110px;
height:60px;
padding-bottom:2px;
}


#bottomcontainerBox {
float:left;
height:30px;
width:100%;
#F0F4F9}

#bottomcontainerBox .buttons {
float:left;
height:30px;
width:110px;
margin:4px 4px 4px 4px;
}

</style>
Dovendo gestire più di un testbed formato da macchine virtuali di numero, tipologia e topologie diverse, mi sono imbattuto in alcuni problemi. I sistemi che utilizzo sono macchine virtuali KVM e VDE per gestire la rete. Per gestirli ovviamente utilizzo Virtualbricks poiché mi semplifica, e non di poco, la vita. Il problema Il problema che [...]]]></description>
			<content:encoded><![CDATA[<style type="text/css">
#leftcontainerBox {
float:left;
position: fixed;
top:40%;
left:60px;
z-index:1;
#F0F4F9 
}

#leftcontainerBox .buttons {
float:left;
clear:both;
margin:4px 4px 4px 4px;
width:110px;
height:60px;
padding-bottom:2px;
}


#bottomcontainerBox {
float:left;
height:30px;
width:100%;
#F0F4F9}

#bottomcontainerBox .buttons {
float:left;
height:30px;
width:110px;
margin:4px 4px 4px 4px;
}

</style>
<p>Dovendo gestire più di un testbed formato da macchine virtuali di numero, tipologia e topologie diverse, mi sono imbattuto in alcuni problemi. I sistemi che utilizzo sono macchine virtuali KVM e VDE per gestire la rete. Per gestirli ovviamente utilizzo Virtualbricks poiché mi semplifica, e non di poco, la vita.</p>
<p><strong>Il problema</strong></p>
<p>Il problema che voglio affrontare in questo articolo è un problema di semplificazione all&#8217;accesso da remoto alle varie macchine virtuali, ovvero: come fare ad accedere, utilizzando SSH, alle varie macchine virtuali utilizzando come nome degli host i nomi delle macchine virtuali che ho impostato su Virtualbricks? E soprattutto questo meccanismo può essere automatizzato, in modo che ogni macchina virtuale, appena viene lanciata, istruisca la macchina host su quale è la combinazione hostname &#8211; IP corretta per comunicare con essa?</p>
<p><strong><span id="more-894"></span>Il primo passo: l&#8217;assegnamento degli indirizzi IP</strong></p>
<p>Data la dinamicità della topologia, impostare indirizzi IP statici è di poca utilità, occorre quindi utilizzare un server DHCP per assegnare gli indirizzi, il che vuol dire che i SO delle macchine virtuali devono essere configurati per prendere l&#8217;IP automaticamente via DHCP al boot, e questo è il primo passo.</p>
<p><strong>Secondo passo: il server DHCP</strong></p>
<p>Il secondo passo è l&#8217;installazione del server DHCP sulla macchina host. La scelta è caduta su dnsmasq che, tra le altre cose, permette anche di associare uno script che viene lanciato subito dopo la ricezione di una richiesta DHCP al server, il che ci sarà molto utile più avanti. Per quanto riguarda il file di configurazione, esso sarà molto semplice:</p>
<p>interface=tap0<br />
dhcp-range=10.0.0.100,10.0.0.200,255.255.255.0,12h<br />
dhcp-script=/bin/add_hosts.sh</p>
<p>La prima riga specifica su che interfaccia si vuole restare in ascolto, il perché essa sia &#8220;tap0&#8243; verrà spiegato più avanti. La seconda è il range di indirizzi IP e la netmask che si vuole utilizzare. Infine viene specificato lo script che deve essere lanciato.</p>
<p><strong>Terzo passo: la topologia</strong></p>
<p style="text-align: center;">&nbsp;</p>
<div class="mceTemp mceIEcenter" style="text-align: left;">
<dl id="attachment_898" class="wp-caption aligncenter" style="width: 608px;">
<dt class="wp-caption-dt"><a href="http://www.ldlabs.org/blog/wp-content/uploads/2012/01/topologia.png"><img class="size-full wp-image-898  colorbox-894" title="topologia" src="http://www.ldlabs.org/blog/wp-content/uploads/2012/01/topologia.png" alt="Topologia da realizzare" width="598" height="298" /></a></dt>
<dd class="wp-caption-dd">Topologia da Realizzare</dd>
</dl>
</div>
<p style="text-align: left;">Come indicato dalla figura, la topologia è composta da 5 componenti: tre VM, un VDE Switch e una interfaccia di tap. Quest&#8217;ultima in particolare è una interfaccia di rete simulata che funziona come punto di interconnessione tra la rete virtuale e la macchina host. Utilzzandola e assegnandole un indirizzo IP (come se fosse una normale scheda di rete) la macchina host diverrà parte integrante della rete e sarà connessa direttamente alle macchine virtuali. L&#8217;interfaccia di tap (e di conseguenza la macchina host nella rete) in questo esempio ha indirizzo 10.0.0.1.</p>
<p style="text-align: left;"><strong>Quarto passo: dove salvare le informazioni su come raggiungere le macchine virtuali?</strong></p>
<p style="text-align: left;">Le informazioni che devo salvare sono due: hostname e indirizzo IP. Qual&#8217;è il posto migliore per salvare questo tipo di informazioni, in modo che siano prioritarie rispetto ai DNS? Ovviamente la risposta è il file <em>/etc/hosts</em>.</p>
<p style="text-align: left;"><strong>Quinto passo: che parametri vengono passati allo script dal server DHCP?</strong></p>
<p style="text-align: left;">I parametri che il server DHCP invia allo script che è stato configurato per essere eseguito all&#8217;arrivo di una richiesta sono 4: il comando (add se è arrivata una richiesta di assegnazione, old se la richiesta per il dato mac address è già stata servita una volta, del per il release), il mac address, l&#8217;indirizzo IP assegnato ed l&#8217;hostname. Quest&#8217;ultimo purtroppo non è sempre inviato da tutti i client DHCP, per questo ho trovato un modo alternativo per recuperare l&#8217;hostname nei casi in cui non sia fornito.</p>
<p style="text-align: left;"><strong>Sesto passo: script per il salvataggio delle informazioni</strong></p>
<p style="text-align: left;">E questa è la parte un po&#8217; più complicata. Ecco a voi lo script che aggiunge automaticamente al file hosts le coppie hostname &#8211; indirizzo IP delle varie VM:<strong><br />
</strong></p>

<div class="wp_codebox"><table><tr id="p8942"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
</pre></td><td class="code" id="p894code2"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/python</span>
<span style="color: #808080; font-style: italic;"># script created by Francesco Apollonio and released under GNU General Public License version 2</span>
<span style="color: #808080; font-style: italic;"># http://www.ldlabs.org/</span>
<span style="color: #808080; font-style: italic;"># script that add a VM who requests an IP address using the dhcpd to local hosts file</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">subprocess</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">string</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">time</span>
&nbsp;
debug_file=<span style="color: #483d8b;">&quot;/var/log/add_hosts.log&quot;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> debug<span style="color: black;">&#40;</span>message<span style="color: black;">&#41;</span>:
   message = <span style="color: #dc143c;">time</span>.<span style="color: black;">strftime</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;%d %b %Y %H:%M:%S&quot;</span><span style="color: black;">&#41;</span> + <span style="color: #483d8b;">&quot; &quot;</span> + message
   <span style="color: #ff7700;font-weight:bold;">print</span> message
   fd = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span>debug_file, <span style="color: #483d8b;">&quot;a&quot;</span><span style="color: black;">&#41;</span>
   fd.<span style="color: black;">write</span><span style="color: black;">&#40;</span>message + <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: black;">&#41;</span>
   fd.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
text=<span style="color: #483d8b;">&quot;&quot;</span>
<span style="color: #ff7700;font-weight:bold;">for</span> arg <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span>:
   text = text +<span style="color: #483d8b;">&quot; &quot;</span>+arg
debug<span style="color: black;">&#40;</span>text<span style="color: black;">&#41;</span>   
&nbsp;
action=<span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>
ip=<span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">3</span><span style="color: black;">&#93;</span>
mac=<span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span>
hosts=<span style="color: #483d8b;">&quot;/etc/hosts&quot;</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># if del action is called exit from this script</span>
<span style="color: #ff7700;font-weight:bold;">if</span> action == <span style="color: #483d8b;">&quot;del&quot;</span>:
   fd=<span style="color: #008000;">open</span><span style="color: black;">&#40;</span>hosts, <span style="color: #483d8b;">&quot;r&quot;</span><span style="color: black;">&#41;</span>
   hosts_lines=fd.<span style="color: black;">readlines</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
   fd.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
   fd=<span style="color: #008000;">open</span><span style="color: black;">&#40;</span>hosts, <span style="color: #483d8b;">&quot;w&quot;</span><span style="color: black;">&#41;</span>
   <span style="color: #ff7700;font-weight:bold;">for</span> line <span style="color: #ff7700;font-weight:bold;">in</span> hosts_lines:
      <span style="color: #ff7700;font-weight:bold;">if</span> ip <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #ff7700;font-weight:bold;">in</span> line:
         fd.<span style="color: black;">write</span><span style="color: black;">&#40;</span>line<span style="color: black;">&#41;</span>
&nbsp;
   debug<span style="color: black;">&#40;</span> <span style="color: #483d8b;">&quot;Ok, %s deleted from %s file&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>name, hosts<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
   <span style="color: #dc143c;">sys</span>.<span style="color: black;">exit</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>      
&nbsp;
<span style="color: #808080; font-style: italic;"># add address to local hosts file</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#41;</span> == <span style="color: #ff4500;">5</span>:
   name = <span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">4</span><span style="color: black;">&#93;</span>
   debug<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;host name from parameters: &quot;</span>+name<span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">else</span>:
   command = <span style="color: #483d8b;">&quot;ps ax | grep /usr/bin/kvm&quot;</span>
   process = <span style="color: #dc143c;">subprocess</span>.<span style="color: black;">Popen</span><span style="color: black;">&#40;</span>command, stdout=<span style="color: #dc143c;">subprocess</span>.<span style="color: black;">PIPE</span>, shell=<span style="color: #008000;">True</span><span style="color: black;">&#41;</span>
   found = <span style="color: #008000;">None</span>
   <span style="color: #ff7700;font-weight:bold;">for</span> line <span style="color: #ff7700;font-weight:bold;">in</span> process.<span style="color: black;">stdout</span>.<span style="color: black;">readlines</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
      pid=line.<span style="color: black;">split</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot; &quot;</span><span style="color: black;">&#41;</span>
      pid = pid<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>
      fd_c = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;/proc/&quot;</span>+pid+<span style="color: #483d8b;">&quot;/cmdline&quot;</span>, <span style="color: #483d8b;">&quot;r&quot;</span><span style="color: black;">&#41;</span>
      lines=fd_c.<span style="color: black;">readlines</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
      fd_c.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
      <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>lines<span style="color: black;">&#41;</span><span style="color: #66cc66;">&amp;</span>gt<span style="color: #66cc66;">;</span><span style="color: #ff4500;">0</span>:
         line=lines<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
         line=<span style="color: #dc143c;">string</span>.<span style="color: black;">replace</span><span style="color: black;">&#40;</span>line, <span style="color: #483d8b;">&quot;-&quot;</span>, <span style="color: #483d8b;">&quot; -&quot;</span><span style="color: black;">&#41;</span>
         line=<span style="color: #dc143c;">string</span>.<span style="color: black;">replace</span><span style="color: black;">&#40;</span>line, <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\x</span>00&quot;</span>, <span style="color: #483d8b;">&quot; &quot;</span><span style="color: black;">&#41;</span>
      <span style="color: #ff7700;font-weight:bold;">else</span>:
         <span style="color: #ff7700;font-weight:bold;">continue</span>
      <span style="color: #ff7700;font-weight:bold;">if</span> mac <span style="color: #ff7700;font-weight:bold;">in</span> line <span style="color: #ff7700;font-weight:bold;">and</span> <span style="color: #483d8b;">&quot;add_host&quot;</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #ff7700;font-weight:bold;">in</span> line:
         found = line
         <span style="color: #ff7700;font-weight:bold;">break</span>
   <span style="color: #ff7700;font-weight:bold;">if</span> found <span style="color: #ff7700;font-weight:bold;">is</span> <span style="color: #008000;">None</span>:
      debug<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Ops, no VM with %s found&quot;</span> <span style="color: #66cc66;">%</span> mac<span style="color: black;">&#41;</span>
      <span style="color: #dc143c;">sys</span>.<span style="color: black;">exit</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
   parms = found.<span style="color: black;">split</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot; -&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span>:<span style="color: black;">&#93;</span>
   name=<span style="color: #008000;">False</span>
&nbsp;
   <span style="color: #ff7700;font-weight:bold;">for</span> par <span style="color: #ff7700;font-weight:bold;">in</span> parms:
      <span style="color: #ff7700;font-weight:bold;">if</span> par.<span style="color: black;">strip</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">startswith</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;name&quot;</span><span style="color: black;">&#41;</span>:
         name = par.<span style="color: black;">strip</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">split</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot; &quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> name <span style="color: #ff7700;font-weight:bold;">is</span> <span style="color: #008000;">False</span>:
   debug<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Ops, VM name not found&quot;</span><span style="color: black;">&#41;</span>
   <span style="color: #dc143c;">sys</span>.<span style="color: black;">exit</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span>
&nbsp;
fd=<span style="color: #008000;">open</span><span style="color: black;">&#40;</span>hosts, <span style="color: #483d8b;">&quot;r&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
hosts_lines=fd.<span style="color: black;">readlines</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
fd.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
already=<span style="color: #008000;">False</span>
<span style="color: #ff7700;font-weight:bold;">for</span> line <span style="color: #ff7700;font-weight:bold;">in</span> hosts_lines:
   <span style="color: #ff7700;font-weight:bold;">if</span> name <span style="color: #ff7700;font-weight:bold;">in</span> line:
      already=line
      <span style="color: #ff7700;font-weight:bold;">break</span>
change=<span style="color: #008000;">False</span>
<span style="color: #ff7700;font-weight:bold;">if</span> already <span style="color: #ff7700;font-weight:bold;">is</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #008000;">False</span>:
   <span style="color: #ff7700;font-weight:bold;">if</span> ip <span style="color: #ff7700;font-weight:bold;">in</span> line:
      debug<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Ok, VM already in hosts file&quot;</span><span style="color: black;">&#41;</span>
      <span style="color: #dc143c;">sys</span>.<span style="color: black;">exit</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>
   <span style="color: #ff7700;font-weight:bold;">else</span>:
      change=<span style="color: #008000;">True</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> change <span style="color: #ff7700;font-weight:bold;">is</span> <span style="color: #008000;">False</span>:
   fd=<span style="color: #008000;">open</span><span style="color: black;">&#40;</span>hosts, <span style="color: #483d8b;">&quot;a&quot;</span><span style="color: black;">&#41;</span>
   fd.<span style="color: black;">write</span><span style="color: black;">&#40;</span>ip + <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\t</span><span style="color: #000099; font-weight: bold;">\t</span>&quot;</span> + name +<span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">else</span>:
   fd=<span style="color: #008000;">open</span><span style="color: black;">&#40;</span>hosts, <span style="color: #483d8b;">&quot;w&quot;</span><span style="color: black;">&#41;</span>
   <span style="color: #ff7700;font-weight:bold;">for</span> line <span style="color: #ff7700;font-weight:bold;">in</span> hosts_lines:
      <span style="color: #ff7700;font-weight:bold;">if</span> name <span style="color: #ff7700;font-weight:bold;">in</span> line:
         line = ip + <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\t</span><span style="color: #000099; font-weight: bold;">\t</span>&quot;</span> + name + <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
      fd.<span style="color: black;">write</span><span style="color: black;">&#40;</span>line<span style="color: black;">&#41;</span>
&nbsp;
fd.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
debug<span style="color: black;">&#40;</span> <span style="color: #483d8b;">&quot;Ok, %s added to %s file&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>name, hosts<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p style="text-align: left;">Il funzionamento è abbastanza semplice. In caso di comando &#8220;add&#8221; o &#8220;old&#8221; ricevuto dal server DHCP, lo script prima controlla se l&#8217;hostname è stato fornito dalla richiesta DHCP,  e in questo caso procede direttamente al salvataggio. Se invece l&#8217;hostname non è stato fornito, lo script scansiona la lista dei processi KVM che sono in esecuzione. Poi si procura la command line completa con le quali le macchine virtuali sono state eseguite leggendola dall&#8217;apposito file nella cartella /proc (in una prima versione usavo direttamente l&#8217;output di <em>ps</em> per ottenere queste informazioni, ma, in determinate circostanze, la command line veniva tagliata, rendendo inutilizzabile lo script, per questo ho optato per recuperare le informazioni da /proc). Una volta ottenuta la command line il gioco è fatto: estraggo il nome della macchina virtuale impostato in Virtualbricks, apro il file hosts controllo che non ci sia già una voce per la macchina virtuale che ha richiesto l&#8217;indirizzo; se esiste allora semplicemente aggiorno l&#8217;indirizzo IP, se invece non esiste aggiungo una nuova voce.<br />
Per quanto riguarda &#8220;del&#8221;, invece, apro il file hosts e se vi è l&#8217;indirizzo ip specificato, elimino la linea che lo contiene.</p>
<p style="text-align: left;"><strong>Parte sette: conclusioni e sviluppi futuri<br />
</strong></p>
<p style="text-align: left;">Bene l&#8217;architettura funziona più che bene (la utilizzo quotidianamente). Questa è ovviamente solo una applicazione per poter creare una &#8220;rete di controllo&#8221; che permetta una più semplice gestione di un numero variabile di macchine virtuali. Per i prossimi sviluppi restate in ascolto <img src='http://www.ldlabs.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley colorbox-894' /> </p>
<div id="bottomcontainerBox">
			<div class="buttons">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.ldlabs.org%2Fblog%2F2012%2F01%2F19%2Fcreazione-di-una-rete-di-controllo-per-macchine-virtuali%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:21px;" allowTransparency="true"></iframe></div>
			<div class="buttons">
			<g:plusone size="medium" href="http://www.ldlabs.org/blog/2012/01/19/creazione-di-una-rete-di-controllo-per-macchine-virtuali/"></g:plusone>
			</div>
			<div class="buttons">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.ldlabs.org/blog/2012/01/19/creazione-di-una-rete-di-controllo-per-macchine-virtuali/"  data-text="Creazione di una rete di controllo per macchine virtuali,che permetta di raggiungerle dall&#8217;host con il loro hostname" data-count="horizontal">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://www.ldlabs.org/blog/2012/01/19/creazione-di-una-rete-di-controllo-per-macchine-virtuali/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Virtualbricks in debian sid!</title>
		<link>http://www.ldlabs.org/blog/2012/01/18/virtualbricks-in-debian-sid/</link>
		<comments>http://www.ldlabs.org/blog/2012/01/18/virtualbricks-in-debian-sid/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 12:19:38 +0000</pubDate>
		<dc:creator>Francesco Apollonio</dc:creator>
				<category><![CDATA[news]]></category>
		<category><![CDATA[Virtualbricks]]></category>
		<category><![CDATA[annunci]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[guida virtualbricks]]></category>
		<category><![CDATA[kvm]]></category>
		<category><![CDATA[qemu]]></category>
		<category><![CDATA[utility]]></category>
		<category><![CDATA[varie]]></category>
		<category><![CDATA[vde]]></category>
		<category><![CDATA[virtual]]></category>
		<category><![CDATA[virtualbricks]]></category>

		<guid isPermaLink="false">http://www.ldlabs.org/blog/?p=885</guid>
		<description><![CDATA[<style type="text/css">
#leftcontainerBox {
float:left;
position: fixed;
top:40%;
left:60px;
z-index:1;
#F0F4F9 
}

#leftcontainerBox .buttons {
float:left;
clear:both;
margin:4px 4px 4px 4px;
width:110px;
height:60px;
padding-bottom:2px;
}


#bottomcontainerBox {
float:left;
height:30px;
width:100%;
#F0F4F9}

#bottomcontainerBox .buttons {
float:left;
height:30px;
width:110px;
margin:4px 4px 4px 4px;
}

</style>
Ultimamente non scrivo molto per mancanza di tempo, ma questa notizia, visto che mi riguarda da vicino, andava pubblicizzata. Virtualbricks è ora disponibile nei repository ufficiali di debian sid! Per chi non lo sapesse Virtualbricks è un software per la gestione di macchine virtuali Qemu/KVM, che permette anche la crezione di topologie complesse composte da [...]]]></description>
			<content:encoded><![CDATA[<style type="text/css">
#leftcontainerBox {
float:left;
position: fixed;
top:40%;
left:60px;
z-index:1;
#F0F4F9 
}

#leftcontainerBox .buttons {
float:left;
clear:both;
margin:4px 4px 4px 4px;
width:110px;
height:60px;
padding-bottom:2px;
}


#bottomcontainerBox {
float:left;
height:30px;
width:100%;
#F0F4F9}

#bottomcontainerBox .buttons {
float:left;
height:30px;
width:110px;
margin:4px 4px 4px 4px;
}

</style>
<p>Ultimamente non scrivo molto per mancanza di tempo, ma questa notizia, visto che mi riguarda da vicino, andava pubblicizzata.</p>
<p><img class="aligncenter colorbox-885" title="Virtualbricks Logo" src="http://www.virtualbricks.eu/templates/qemulator/images/Logo140.png" alt="" width="130" height="140" /></p>
<h1 style="text-align: center;"><strong>Virtualbricks è ora disponibile nei repository ufficiali di debian sid!</strong></h1>
<p style="text-align: left;">Per chi non lo sapesse Virtualbricks è un software per la gestione di macchine virtuali Qemu/KVM, che permette anche la crezione di topologie complesse composte da più macchine virtuali interconnesse dai componenti VDE, creazione di reti ibride (macchine virtuali e reali nella stessa rete LAN) e distribuite (utilizzando cioè più di una macchina host).<strong> </strong></p>
<p style="text-align: left;">Il sito ufficiale è <a href="http://www.virtualbricks.eu/" target="_blank">http://www.virtualbricks.eu/</a>, nel wiki è disponibile un po&#8217; di documentazione (dobbiamo ancora continuare a lavorarci per ampliarla).<strong> </strong></p>
<p style="text-align: left;">Per scaricare l&#8217;ultima versione l&#8217;indirizzo è <a href="http://www.virtualbricks.eu/download.php?latest" target="_blank">http://www.virtualbricks.eu/download.php?latest</a> oppure dalla pagina Launchpad del progetto <a href="http://launchpad.net/virtualbrick" target="_blank">http://launchpad.net/virtualbrick</a>, a meno che non usiate Debian sid, li ovviamente il comando è:</p>
<p style="text-align: left;">apt-get install virtualbricks</p>
<p style="text-align: left;">A presto!</p>
<p>&nbsp;</p>
<div id="bottomcontainerBox">
			<div class="buttons">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.ldlabs.org%2Fblog%2F2012%2F01%2F18%2Fvirtualbricks-in-debian-sid%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:21px;" allowTransparency="true"></iframe></div>
			<div class="buttons">
			<g:plusone size="medium" href="http://www.ldlabs.org/blog/2012/01/18/virtualbricks-in-debian-sid/"></g:plusone>
			</div>
			<div class="buttons">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.ldlabs.org/blog/2012/01/18/virtualbricks-in-debian-sid/"  data-text="Virtualbricks in debian sid!" data-count="horizontal">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://www.ldlabs.org/blog/2012/01/18/virtualbricks-in-debian-sid/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>VNC &amp; HTML5: Visualizzare il desktop remoto tramite un web browser con Guacamole</title>
		<link>http://www.ldlabs.org/blog/2011/07/12/vnc-html5-visualizzare-il-desktop-remoto-tramite-un-web-browser-con-guacamole/</link>
		<comments>http://www.ldlabs.org/blog/2011/07/12/vnc-html5-visualizzare-il-desktop-remoto-tramite-un-web-browser-con-guacamole/#comments</comments>
		<pubDate>Tue, 12 Jul 2011 09:47:47 +0000</pubDate>
		<dc:creator>Francesco Apollonio</dc:creator>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[recensione]]></category>
		<category><![CDATA[annunci]]></category>
		<category><![CDATA[canvas]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[program]]></category>
		<category><![CDATA[tomcat]]></category>
		<category><![CDATA[utility]]></category>
		<category><![CDATA[varie]]></category>
		<category><![CDATA[vnc]]></category>

		<guid isPermaLink="false">http://www.ldlabs.org/blog/?p=872</guid>
		<description><![CDATA[<style type="text/css">
#leftcontainerBox {
float:left;
position: fixed;
top:40%;
left:60px;
z-index:1;
#F0F4F9 
}

#leftcontainerBox .buttons {
float:left;
clear:both;
margin:4px 4px 4px 4px;
width:110px;
height:60px;
padding-bottom:2px;
}


#bottomcontainerBox {
float:left;
height:30px;
width:100%;
#F0F4F9}

#bottomcontainerBox .buttons {
float:left;
height:30px;
width:110px;
margin:4px 4px 4px 4px;
}

</style>
Utilizzando macchine (virtuali e non) remote, mi capita spesso di dover utilizzare VNC per avere accesso al desktop, talvolta serve anche un ambiente grafico. Sono venuto a conoscenza qualche giorno fa di Guacamole, programma che permette di accedere al desktop VNC attraverso un normalissimo browser web che supporti però il tag canvas di HTML5. Il [...]]]></description>
			<content:encoded><![CDATA[<style type="text/css">
#leftcontainerBox {
float:left;
position: fixed;
top:40%;
left:60px;
z-index:1;
#F0F4F9 
}

#leftcontainerBox .buttons {
float:left;
clear:both;
margin:4px 4px 4px 4px;
width:110px;
height:60px;
padding-bottom:2px;
}


#bottomcontainerBox {
float:left;
height:30px;
width:100%;
#F0F4F9}

#bottomcontainerBox .buttons {
float:left;
height:30px;
width:110px;
margin:4px 4px 4px 4px;
}

</style>
<p style="text-align: left;">Utilizzando macchine (virtuali e non) remote, mi capita spesso di dover utilizzare VNC per avere accesso al desktop, talvolta serve anche un ambiente grafico. Sono venuto a conoscenza qualche giorno fa di <a href="http://guacamole.sourceforge.net/" target="_blank">Guacamole</a>, programma che permette di accedere al desktop VNC attraverso un normalissimo browser web che supporti però il tag canvas di HTML5.</p>
<div id="attachment_874" class="wp-caption aligncenter" style="width: 533px"><a href="http://www.ldlabs.org/blog/wp-content/uploads/2011/07/screenshot2.jpeg"><img class="size-large wp-image-874  colorbox-872" title="Guacamole_browser" src="http://www.ldlabs.org/blog/wp-content/uploads/2011/07/screenshot2-1024x539.jpg" alt="" width="523" height="275" /></a><p class="wp-caption-text">Desktop remoto con Guacamole nel browser</p></div>
<p><span id="more-872"></span>Il programma funziona benissimo e velocemente, l&#8217;unica cosa un po&#8217; complicata è l&#8217;installazione. Per prima cosa occorre installare <strong>Tomcat6. </strong>Infatti il cuore che permette il tutto è un applicazione in Java che invia al browser le informazioni per poter visualizzare il desktop. Eseguiamo l&#8217;installazione:</p>
<pre># apt-get install tomcat6 libvncserver0</pre>
<p>Ora che il web server è installato, occorre scaricare il programma da <a href="http://sourceforge.net/projects/guacamole/files/guacamole-0.2.6.tar.gz/download?use_mirror=mesh" target="_blank">questo link</a>. Dopo aver scompattato l&#8217;archivio, quello che ci troviamo davanti sono alcuni file xml (file di configurazione) ed un war (archivio contenente l&#8217;applicazione vera e propria). Questa è la procedura d&#8217;installazione:</p>
<pre># cp guacamole-users.xml /etc/tomcat6/
# mkdir -p /var/lib/guacamole
# cp guacamole.war /var/lib/guacamole/
# cp guacamole.xml /etc/tomcat6/Catalina/localhost/</pre>
<p>I file sono ora installati nel webserver ma occorre configurarli. In particolare in <strong>/etc/tomcat6/guacamole-users.xml </strong>troviamo la coppia <em>user:password</em> che ci viene chiesta all&#8217;apertura dell&#8217;applicazione, non si tratta della password di VNC ma di una <span style="text-decoration: underline;">password propria dell&#8217;applicazione</span>. Nel file<strong> /etc/tomcat6/Catalina/localhost/guacamole.xml</strong> invece sono contenute l&#8217;informazioni del server VNC:</p>
<pre>&lt;Parameter name="host" value="localhost"/&gt;
&lt;Parameter name="port" value="5901"/&gt;
&lt;Parameter name="password" value="PASSWORD"/&gt;</pre>
<p>I parametri che ci interessano sono questi tre elencati sopra, e vanno riempiti con i dati del server VNC. In particolare per calcolare la porta, occorre ottenere il numero desktop virtuale avviato (:1 ad esempio) e sommarlo a 5900. In questo caso quindi il server a cui ci connettiamo è :1. Per avviare un nuovo server VNC ovviamente digitiamo il comando:</p>
<pre>$ vncserver
New 'X' desktop is home:1</pre>
<p>Se è la prima volta che avviamo un server VNC, ci verrà chiesta la password per l&#8217;accesso (non è obbligatorio inserirla), quella che deve essere inclusa nel file <em>guacamole.xml</em>. Ora riavviamo il server web:</p>
<p># service tomcat6 restart</p>
<p>e colleghiamoci all&#8217;applicazione tramite il nostro browser (occhio ad utilizzare uno compatibile con il tag CANVAS di HTML5, chromium/chrome o Firefox 5 vanno benissimo) utilizzando il link:</p>
<pre>http://localhost:8080/guacamole/</pre>
<p>ci verrà prima richiesto di effettuare l&#8217;autenticazione del programma. Se non avete cambiato <em>guacamole-users.xml</em> l&#8217;username è &#8216;<em>guacamole</em>&#8216; e la password &#8216;<em>changeme</em>&#8216;, ovviamente è fortemente consigliato cambiarla. Dopo aver inserito anche la password del server VNC (se ovviamente è stata impostata):</p>
<p style="text-align: center;">&nbsp;</p>
<div class="mceTemp mceIEcenter" style="text-align: left;">
<dl id="attachment_873" class="wp-caption aligncenter" style="width: 584px;">
<dt class="wp-caption-dt"><a href="http://www.ldlabs.org/blog/wp-content/uploads/2011/07/screenshot1.jpeg"><img class="size-large wp-image-873   colorbox-872" title="screenshot1" src="http://www.ldlabs.org/blog/wp-content/uploads/2011/07/screenshot1-1024x576.jpg" alt="Guacamole in azione" width="574" height="322" /></a></dt>
<dd class="wp-caption-dd">Guacamole in azione</dd>
</dl>
</div>
<p style="text-align: left;">Ecco fatto ora accedere al vostro server VNC sarà molto più semplice, infatti impostando ad esempio come porta di Tomcat la 80, potrete accedere al desktop remoto in tranquillità anche in presenza di proxy non troppo permissivi!</p>
<p style="text-align: left;">Buon lavoro!</p>
<div id="bottomcontainerBox">
			<div class="buttons">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.ldlabs.org%2Fblog%2F2011%2F07%2F12%2Fvnc-html5-visualizzare-il-desktop-remoto-tramite-un-web-browser-con-guacamole%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:21px;" allowTransparency="true"></iframe></div>
			<div class="buttons">
			<g:plusone size="medium" href="http://www.ldlabs.org/blog/2011/07/12/vnc-html5-visualizzare-il-desktop-remoto-tramite-un-web-browser-con-guacamole/"></g:plusone>
			</div>
			<div class="buttons">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.ldlabs.org/blog/2011/07/12/vnc-html5-visualizzare-il-desktop-remoto-tramite-un-web-browser-con-guacamole/"  data-text="VNC &#038; HTML5: Visualizzare il desktop remoto tramite un web browser con Guacamole" data-count="horizontal">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://www.ldlabs.org/blog/2011/07/12/vnc-html5-visualizzare-il-desktop-remoto-tramite-un-web-browser-con-guacamole/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jquery AjaxForm Plugin: Upload di un file con AJAX</title>
		<link>http://www.ldlabs.org/blog/2011/07/05/jquery-ajaxform-plugin-upload-di-un-file-con-ajax/</link>
		<comments>http://www.ldlabs.org/blog/2011/07/05/jquery-ajaxform-plugin-upload-di-un-file-con-ajax/#comments</comments>
		<pubDate>Tue, 05 Jul 2011 10:45:23 +0000</pubDate>
		<dc:creator>Francesco Apollonio</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[recensione]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[code tips]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[Guide]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[utility]]></category>
		<category><![CDATA[varie]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.ldlabs.org/blog/?p=826</guid>
		<description><![CDATA[<style type="text/css">
#leftcontainerBox {
float:left;
position: fixed;
top:40%;
left:60px;
z-index:1;
#F0F4F9 
}

#leftcontainerBox .buttons {
float:left;
clear:both;
margin:4px 4px 4px 4px;
width:110px;
height:60px;
padding-bottom:2px;
}


#bottomcontainerBox {
float:left;
height:30px;
width:100%;
#F0F4F9}

#bottomcontainerBox .buttons {
float:left;
height:30px;
width:110px;
margin:4px 4px 4px 4px;
}

</style>
Sviluppano spesso siti web di vario genere, mi sono trovato a dover gestire un form html con Ajax. Il problema non è stato tanto per i dati testuali normali, quanto principalmente perchè dovevo trasferire un file via AJAX. Lo strumento che ho utilizzato è JQuery Form Plugin. Tre parole per descriverlo? Semplice, rapido e funzionante! [...]]]></description>
			<content:encoded><![CDATA[<style type="text/css">
#leftcontainerBox {
float:left;
position: fixed;
top:40%;
left:60px;
z-index:1;
#F0F4F9 
}

#leftcontainerBox .buttons {
float:left;
clear:both;
margin:4px 4px 4px 4px;
width:110px;
height:60px;
padding-bottom:2px;
}


#bottomcontainerBox {
float:left;
height:30px;
width:100%;
#F0F4F9}

#bottomcontainerBox .buttons {
float:left;
height:30px;
width:110px;
margin:4px 4px 4px 4px;
}

</style>
<p>Sviluppano spesso siti web di vario genere, mi sono trovato a dover gestire un form html con Ajax. Il problema non è stato tanto per i dati testuali normali, quanto principalmente perchè dovevo <strong>trasferire un file via AJAX</strong>.</p>
<p>Lo strumento che ho utilizzato è <a href="http://jquery.malsup.com/form/" target="_blank">JQuery Form Plugin</a>. Tre parole per descriverlo? Semplice, rapido e funzionante!<br />
<span id="more-826"></span><br />
Per prima cosa vediamo la pagina <strong>HTML</strong> (con l&#8217;annesso form per l&#8217;upload):</p>
<pre>&lt;html&gt;
	&lt;head&gt;

		&lt;meta http-equiv="content-type" content="text/html; charset=UTF-8"&gt;
		&lt;script type="text/javascript" src="jquery-1.5.1.min.js" &gt;&lt;/script&gt;
		&lt;script type="text/javascript" src="jquery.form.js" &gt;&lt;/script&gt;
		&lt;script type="text/javascript" src="scripts.js" &gt;&lt;/script&gt;
		&lt;/script&gt;
		&lt;title&gt;Pagina di prova&lt;/title&gt;

	&lt;/head&gt;
	&lt;body&gt;

		&lt;form action="file_upload.php" method="post"
			enctype="multipart/form-data" id="upload"&gt;

			&lt;label for="file"&gt;Filename:&lt;/label&gt;
			&lt;input type="file" name="file" id="file" /&gt;&lt;br /&gt;
			&lt;input type="submit" id="send_file" value="Aggiungi" /&gt;

		&lt;/form&gt;

	&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Ovviamente, come si può vedere analizzando l&#8217;html, occorrono altri due file. Il primo è il file javascript che ci permetterà di gestire l&#8217;invio lato client. Il secondo è il file in PHP che ci permette di gestire l&#8217;upload dal lato server. Analizziamo il file <strong>javascript</strong> (<em>script.js</em>):</p>

<div class="wp_codebox"><table><tr id="p8265"><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code" id="p826code5"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#upload&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ajaxForm</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>resp<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span>resp<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Come si può facilmente capire il funzionamento è semplice. Basta associare l&#8217;AjaxForm all&#8217;id del form html ed il gioco è fatto. Ovviamente nella funzione di risposta si può effettuare qualsiasi operazione, utilizzando la variabile <em>resp</em> che contiene l&#8217;output della pagina che si occupa dell&#8217;upload lato server. Ecco il codice <strong>PHP</strong> (<em>file_upload.php</em>):</p>

<div class="wp_codebox"><table><tr id="p8266"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code" id="p826code6"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">// CONTROLLO DEI PARAMETRI!</span>
<span style="color: #000088;">$path</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;PERCORSO_DOVE_SALVARE_IL_FILE/&quot;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$_FILES</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;file&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;error&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;ERROR&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><a href="http://www.php.net/file_exists"><span style="color: #990000;">file_exists</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$path</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$_FILES</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;file&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;name&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;File already exists.&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
		<a href="http://www.php.net/move_uploaded_file"><span style="color: #990000;">move_uploaded_file</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_FILES</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;file&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;tmp_name&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$path</span> <span style="color: #339933;">.</span>  <span style="color: #000088;">$_FILES</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;file&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;name&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;OK. File uploaded.&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>che semplicemente salva il file nella directory specificata e ritorna un messaggio che indica se l&#8217;operazione è andata a buon fine. Ricordatevi ovviamente, se utilizzate lo script in PHP per il vostro sito, di eseguire le operazioni di controllo dei parametri in ingresso via POST.</p>
<p>Come potete vedere è veramente una passeggiata, buon lavoro!</p>
<div id="bottomcontainerBox">
			<div class="buttons">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.ldlabs.org%2Fblog%2F2011%2F07%2F05%2Fjquery-ajaxform-plugin-upload-di-un-file-con-ajax%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:21px;" allowTransparency="true"></iframe></div>
			<div class="buttons">
			<g:plusone size="medium" href="http://www.ldlabs.org/blog/2011/07/05/jquery-ajaxform-plugin-upload-di-un-file-con-ajax/"></g:plusone>
			</div>
			<div class="buttons">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.ldlabs.org/blog/2011/07/05/jquery-ajaxform-plugin-upload-di-un-file-con-ajax/"  data-text="Jquery AjaxForm Plugin: Upload di un file con AJAX" data-count="horizontal">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://www.ldlabs.org/blog/2011/07/05/jquery-ajaxform-plugin-upload-di-un-file-con-ajax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>KVM: utilizzare usb dell&#8217;host su una macchina guest</title>
		<link>http://www.ldlabs.org/blog/2011/06/28/kvm-utilizzare-usb-dellhost-su-una-macchina-guest/</link>
		<comments>http://www.ldlabs.org/blog/2011/06/28/kvm-utilizzare-usb-dellhost-su-una-macchina-guest/#comments</comments>
		<pubDate>Tue, 28 Jun 2011 20:20:21 +0000</pubDate>
		<dc:creator>Francesco Apollonio</dc:creator>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[Howto]]></category>
		<category><![CDATA[KVM]]></category>
		<category><![CDATA[Virtualizzazione]]></category>
		<category><![CDATA[guida virtualbricks]]></category>
		<category><![CDATA[kvm]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[qemu]]></category>
		<category><![CDATA[utility]]></category>
		<category><![CDATA[varie]]></category>
		<category><![CDATA[virtual]]></category>
		<category><![CDATA[virtualbricks]]></category>

		<guid isPermaLink="false">http://www.ldlabs.org/blog/?p=798</guid>
		<description><![CDATA[<style type="text/css">
#leftcontainerBox {
float:left;
position: fixed;
top:40%;
left:60px;
z-index:1;
#F0F4F9 
}

#leftcontainerBox .buttons {
float:left;
clear:both;
margin:4px 4px 4px 4px;
width:110px;
height:60px;
padding-bottom:2px;
}


#bottomcontainerBox {
float:left;
height:30px;
width:100%;
#F0F4F9}

#bottomcontainerBox .buttons {
float:left;
height:30px;
width:110px;
margin:4px 4px 4px 4px;
}

</style>
Avevo la necessità di utilizzare il programma per il cellulare ufficiale Nokia, che ovviamente gira solo su Windows. Perchè non farlo tramite macchina virtuale e con il cellulare collegato all&#8217;host? L&#8217;operazione è molto semplice, dopo aver collegato il cellulare all&#8217;host digitare lsusb per capire idVendor e idProduct del dispositivo: $ lsusb Bus 004 Device 013: [...]]]></description>
			<content:encoded><![CDATA[<style type="text/css">
#leftcontainerBox {
float:left;
position: fixed;
top:40%;
left:60px;
z-index:1;
#F0F4F9 
}

#leftcontainerBox .buttons {
float:left;
clear:both;
margin:4px 4px 4px 4px;
width:110px;
height:60px;
padding-bottom:2px;
}


#bottomcontainerBox {
float:left;
height:30px;
width:100%;
#F0F4F9}

#bottomcontainerBox .buttons {
float:left;
height:30px;
width:110px;
margin:4px 4px 4px 4px;
}

</style>
<p>Avevo la necessità di utilizzare il programma per il cellulare ufficiale Nokia, che ovviamente gira solo su Windows. Perchè non farlo tramite macchina virtuale e con il cellulare collegato all&#8217;host?</p>
<p><span id="more-798"></span>L&#8217;operazione è molto semplice, dopo aver collegato il cellulare all&#8217;host digitare <em>lsusb</em> per capire <em>idVendor</em> e <em>idProduct</em> del dispositivo:</p>
<pre>$ lsusb
Bus 004 Device 013: ID 0421:02ba Nokia Mobile Phones</pre>
<p>Apriamo ora il file <em>/etc/udev/rules.d/55-udev-user.rules</em> ed aggiungiamo:</p>
<pre>SUBSYSTEM=="usb", ATTR{idVendor}=="0421", ATTR{idProduct}=="02ba", GROUP="kvm", MODE="0666"</pre>
<p>dovete anche posizionare dopo idVendor e idProduct i valori corretti del vostro dispositivo. In questo modo assegnerete i privilegi sul device agli utenti del gruppo kvm, <strong>al quale dovete far parte per poter lavorare tramite la macchina virtuale sul device usb</strong>.</p>
<p>Dopo aver riavviato o il computer o udev, colleghiamo il cellulare e successivamente digitiamo il comando seguente cercando la linea simile a quella qui visualizzata:</p>
<pre>$ dmesg | tail
[38743.556863] usb 4-1.4.3: new full speed USB device number 15 using ehci_hcd</pre>
<p>In particolare ci serve quel numero (15 nel mio caso) perchè successivamente:</p>
<pre>ls -la /dev/bus/usb/004/ | grep 15
crw-rw-r-- 1 root kvm  189, 398 27 giu 19.18 015</pre>
<p>ci serve per controllare che effettivamente il gruppo del device sia kvm. Ora avviate la macchina virtuale KVM e premete ctrl+alt+2 per passare alla console di Qemu (o da virtualbricks premete con il tasto destro sul brick attivo e selezionate console). Qui scrivete:</p>
<pre>usb_add host:0421:02ba</pre>
<p>e magicamente il cellulare verrà magicamente riconosciuto dalla vostra macchina virtuale!</p>
<p style="text-align: center;"><a href="http://www.ldlabs.org/blog/wp-content/uploads/2011/06/screenshot8.jpeg"><img class="size-large wp-image-800 aligncenter colorbox-798" title="screenshot8" src="http://www.ldlabs.org/blog/wp-content/uploads/2011/06/screenshot8-1024x594.jpg" alt="" width="573" height="333" /></a></p>
<p>Ecco fatto, semplice vero? <img src='http://www.ldlabs.org/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley colorbox-798' /> </p>
<div id="bottomcontainerBox">
			<div class="buttons">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.ldlabs.org%2Fblog%2F2011%2F06%2F28%2Fkvm-utilizzare-usb-dellhost-su-una-macchina-guest%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:21px;" allowTransparency="true"></iframe></div>
			<div class="buttons">
			<g:plusone size="medium" href="http://www.ldlabs.org/blog/2011/06/28/kvm-utilizzare-usb-dellhost-su-una-macchina-guest/"></g:plusone>
			</div>
			<div class="buttons">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.ldlabs.org/blog/2011/06/28/kvm-utilizzare-usb-dellhost-su-una-macchina-guest/"  data-text="KVM: utilizzare usb dell&#8217;host su una macchina guest" data-count="horizontal">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://www.ldlabs.org/blog/2011/06/28/kvm-utilizzare-usb-dellhost-su-una-macchina-guest/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Disabilitare il touchpad synaptics quando si digita sulla tastiera</title>
		<link>http://www.ldlabs.org/blog/2011/05/20/disabilitare-il-touchpad-synaptics-quando-si-digita-sulla-tastiera/</link>
		<comments>http://www.ldlabs.org/blog/2011/05/20/disabilitare-il-touchpad-synaptics-quando-si-digita-sulla-tastiera/#comments</comments>
		<pubDate>Fri, 20 May 2011 10:10:32 +0000</pubDate>
		<dc:creator>Francesco Apollonio</dc:creator>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[config]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[program]]></category>
		<category><![CDATA[synaptics]]></category>
		<category><![CDATA[touchpad]]></category>
		<category><![CDATA[utility]]></category>
		<category><![CDATA[varie]]></category>

		<guid isPermaLink="false">http://www.ldlabs.org/blog/?p=777</guid>
		<description><![CDATA[<style type="text/css">
#leftcontainerBox {
float:left;
position: fixed;
top:40%;
left:60px;
z-index:1;
#F0F4F9 
}

#leftcontainerBox .buttons {
float:left;
clear:both;
margin:4px 4px 4px 4px;
width:110px;
height:60px;
padding-bottom:2px;
}


#bottomcontainerBox {
float:left;
height:30px;
width:100%;
#F0F4F9}

#bottomcontainerBox .buttons {
float:left;
height:30px;
width:110px;
margin:4px 4px 4px 4px;
}

</style>
Quello di trovarsi a scrivere da un altra parte, perchè il mouse s&#8217;è spostato &#8220;da solo&#8221;, è un fastidiosissimo problema. Può essere semplicemente risolto avviando il demone synaptic tramite il comando: $ syndaemon -d -t -i 2 Dove -i2 è il tempo d&#8217;attesa dopo la pressione di un tasto per riabilitare il mouse (in questo [...]]]></description>
			<content:encoded><![CDATA[<style type="text/css">
#leftcontainerBox {
float:left;
position: fixed;
top:40%;
left:60px;
z-index:1;
#F0F4F9 
}

#leftcontainerBox .buttons {
float:left;
clear:both;
margin:4px 4px 4px 4px;
width:110px;
height:60px;
padding-bottom:2px;
}


#bottomcontainerBox {
float:left;
height:30px;
width:100%;
#F0F4F9}

#bottomcontainerBox .buttons {
float:left;
height:30px;
width:110px;
margin:4px 4px 4px 4px;
}

</style>
<p>Quello di trovarsi a scrivere da un altra parte, perchè il mouse s&#8217;è spostato &#8220;da solo&#8221;, è un fastidiosissimo problema.</p>
<p>Può essere semplicemente risolto avviando il demone synaptic tramite il comando:</p>
<p>$ syndaemon -d -t -i 2</p>
<p>Dove -i2 è il tempo d&#8217;attesa dopo la pressione di un tasto per riabilitare il mouse (in questo caso 2 secondi). Si può anche bloccare il movimento del mouse (e non solo il tapping e lo scrolling) togliendo il parametro -t. Si possono ignorare la pressione di tasti speciali o di combinazioni di essi tramite le opzioni -k e -K.</p>
<p>Bene, ora posso tornare a scrivere <img src='http://www.ldlabs.org/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley colorbox-777' /> </p>
<div id="bottomcontainerBox">
			<div class="buttons">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.ldlabs.org%2Fblog%2F2011%2F05%2F20%2Fdisabilitare-il-touchpad-synaptics-quando-si-digita-sulla-tastiera%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:21px;" allowTransparency="true"></iframe></div>
			<div class="buttons">
			<g:plusone size="medium" href="http://www.ldlabs.org/blog/2011/05/20/disabilitare-il-touchpad-synaptics-quando-si-digita-sulla-tastiera/"></g:plusone>
			</div>
			<div class="buttons">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.ldlabs.org/blog/2011/05/20/disabilitare-il-touchpad-synaptics-quando-si-digita-sulla-tastiera/"  data-text="Disabilitare il touchpad synaptics quando si digita sulla tastiera" data-count="horizontal">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://www.ldlabs.org/blog/2011/05/20/disabilitare-il-touchpad-synaptics-quando-si-digita-sulla-tastiera/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rilasciato Virtualbricks 0.4.276!</title>
		<link>http://www.ldlabs.org/blog/2011/05/10/rilasciato-virtualbricks-0-4-276/</link>
		<comments>http://www.ldlabs.org/blog/2011/05/10/rilasciato-virtualbricks-0-4-276/#comments</comments>
		<pubDate>Tue, 10 May 2011 14:19:07 +0000</pubDate>
		<dc:creator>Francesco Apollonio</dc:creator>
				<category><![CDATA[news]]></category>
		<category><![CDATA[Virtualbricks]]></category>
		<category><![CDATA[annunci]]></category>
		<category><![CDATA[kvm]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[program]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[qemu]]></category>
		<category><![CDATA[utility]]></category>
		<category><![CDATA[varie]]></category>
		<category><![CDATA[vde]]></category>
		<category><![CDATA[virtual]]></category>
		<category><![CDATA[virtualbricks]]></category>

		<guid isPermaLink="false">http://www.ldlabs.org/blog/?p=772</guid>
		<description><![CDATA[<style type="text/css">
#leftcontainerBox {
float:left;
position: fixed;
top:40%;
left:60px;
z-index:1;
#F0F4F9 
}

#leftcontainerBox .buttons {
float:left;
clear:both;
margin:4px 4px 4px 4px;
width:110px;
height:60px;
padding-bottom:2px;
}


#bottomcontainerBox {
float:left;
height:30px;
width:100%;
#F0F4F9}

#bottomcontainerBox .buttons {
float:left;
height:30px;
width:110px;
margin:4px 4px 4px 4px;
}

</style>
È stata appena rilasciata la nuova versione di Virtualbricks, la 0.4.276. È principalmente una release di bugfix. Molte novità possono essere invece trovate nel branch. Potete scaricarla da launchpad dove ovviamente potete anche lasciare i vostri feedback. Tweet]]></description>
			<content:encoded><![CDATA[<style type="text/css">
#leftcontainerBox {
float:left;
position: fixed;
top:40%;
left:60px;
z-index:1;
#F0F4F9 
}

#leftcontainerBox .buttons {
float:left;
clear:both;
margin:4px 4px 4px 4px;
width:110px;
height:60px;
padding-bottom:2px;
}


#bottomcontainerBox {
float:left;
height:30px;
width:100%;
#F0F4F9}

#bottomcontainerBox .buttons {
float:left;
height:30px;
width:110px;
margin:4px 4px 4px 4px;
}

</style>
<p>È stata appena rilasciata la nuova versione di <strong>Virtualbricks</strong>, la <em>0.4.276</em>.</p>
<p><img class="aligncenter colorbox-772" title="Virtualbricks Logo" src="http://virtualbricks.eu/templates/qemulator/images/Logo140.png" alt="" width="130" height="140" /></p>
<p>È principalmente una release di bugfix. Molte novità possono essere invece trovate nel branch.</p>
<p>Potete scaricarla da <a href="https://launchpad.net/virtualbrick" target="_blank">launchpad</a> dove ovviamente potete anche lasciare i vostri feedback.</p>
<div id="bottomcontainerBox">
			<div class="buttons">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.ldlabs.org%2Fblog%2F2011%2F05%2F10%2Frilasciato-virtualbricks-0-4-276%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:21px;" allowTransparency="true"></iframe></div>
			<div class="buttons">
			<g:plusone size="medium" href="http://www.ldlabs.org/blog/2011/05/10/rilasciato-virtualbricks-0-4-276/"></g:plusone>
			</div>
			<div class="buttons">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.ldlabs.org/blog/2011/05/10/rilasciato-virtualbricks-0-4-276/"  data-text="Rilasciato Virtualbricks 0.4.276!" data-count="horizontal">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://www.ldlabs.org/blog/2011/05/10/rilasciato-virtualbricks-0-4-276/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ancora sulla libreria keyring di python</title>
		<link>http://www.ldlabs.org/blog/2011/05/07/ancora-sulla-libreria-keyring-di-python/</link>
		<comments>http://www.ldlabs.org/blog/2011/05/07/ancora-sulla-libreria-keyring-di-python/#comments</comments>
		<pubDate>Sat, 07 May 2011 07:55:58 +0000</pubDate>
		<dc:creator>Francesco Apollonio</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[code tips]]></category>
		<category><![CDATA[kde]]></category>
		<category><![CDATA[keyring]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[patch]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[utility]]></category>
		<category><![CDATA[varie]]></category>

		<guid isPermaLink="false">http://www.ldlabs.org/blog/?p=766</guid>
		<description><![CDATA[<style type="text/css">
#leftcontainerBox {
float:left;
position: fixed;
top:40%;
left:60px;
z-index:1;
#F0F4F9 
}

#leftcontainerBox .buttons {
float:left;
clear:both;
margin:4px 4px 4px 4px;
width:110px;
height:60px;
padding-bottom:2px;
}


#bottomcontainerBox {
float:left;
height:30px;
width:100%;
#F0F4F9}

#bottomcontainerBox .buttons {
float:left;
height:30px;
width:110px;
margin:4px 4px 4px 4px;
}

</style>
Mi serviva utilizzare la libreria in oggetto tramite una connessione ssh, questo crea non pochi problemi dato che, per come è realizzata ora la libreria, cerca di avviare KDEWallet anche se, tramite il file di configurazione keyringrc.cfg, è stato impostato come default-keyring CryptedFileKeyring o qualcos&#8217;altro. Ora o ci si connette via ssh con -X ma [...]]]></description>
			<content:encoded><![CDATA[<style type="text/css">
#leftcontainerBox {
float:left;
position: fixed;
top:40%;
left:60px;
z-index:1;
#F0F4F9 
}

#leftcontainerBox .buttons {
float:left;
clear:both;
margin:4px 4px 4px 4px;
width:110px;
height:60px;
padding-bottom:2px;
}


#bottomcontainerBox {
float:left;
height:30px;
width:100%;
#F0F4F9}

#bottomcontainerBox .buttons {
float:left;
height:30px;
width:110px;
margin:4px 4px 4px 4px;
}

</style>
<p>Mi serviva utilizzare la libreria in oggetto tramite una connessione ssh, questo crea non pochi problemi dato che, per come è realizzata ora la libreria, cerca di avviare KDEWallet anche se, tramite il file di configurazione <em>keyringrc.cfg</em>, è stato impostato come <em>default-keyring CryptedFileKeyring</em> o qualcos&#8217;altro.</p>
<p>Ora o ci si connette via ssh con -X ma ovviamente è tremendamente lento e soprattutto carica molti componenti kde, o si cerca di risolvere il problema in altro modo (ovviamente la seconda soluzione è la migliore).</p>
<p><span id="more-766"></span><a href="http://www.ldlabs.org/var/kdewallet_noautoload.patch" target="_blank">Questa</a> è l&#8217;altro modo (premere sul link per scaricare il file contenente le modifiche):</p>

<div class="wp_codebox"><table><tr id="p7668"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
</pre></td><td class="code" id="p766code8"><pre class="python" style="font-family:monospace;">diff -r 261dcb3cf624 keyring/backend.<span style="color: black;">py</span>
--- a/keyring/backend.<span style="color: black;">py</span>        Thu Apr <span style="color: #ff4500;">21</span> <span style="color: #ff4500;">14</span>:<span style="color: #ff4500;">14</span>:<span style="color: #ff4500;">55</span> <span style="color: #ff4500;">2011</span> +0200
+++ b/keyring/backend.<span style="color: black;">py</span>        Wed May 04 <span style="color: #ff4500;">16</span>:<span style="color: #ff4500;">45</span>:01 <span style="color: #ff4500;">2011</span> +0200
@@ -<span style="color: #ff4500;">190</span>,<span style="color: #ff4500;">14</span> +<span style="color: #ff4500;">190</span>,<span style="color: #ff4500;">19</span> @@
 <span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #008000;">ImportError</span>:
     kwallet = <span style="color: #008000;">None</span>
 <span style="color: #ff7700;font-weight:bold;">else</span>:
-    kwallet = open_kwallet<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
+    kwallet = <span style="color: #008000;">True</span>                                                                                                                                                                                                              
&nbsp;
 <span style="color: #ff7700;font-weight:bold;">class</span> KDEKWallet<span style="color: black;">&#40;</span>KeyringBackend<span style="color: black;">&#41;</span>:
     <span style="color: #483d8b;">&quot;&quot;&quot;KDE KWallet&quot;&quot;&quot;</span>                                                                                                                                                                                                           
&nbsp;
+    <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
+       <span style="color: #008000;">self</span>.<span style="color: black;">kwallet</span>=<span style="color: #008000;">None</span>
+       <span style="color: #ff7700;font-weight:bold;">if</span> kwallet:
+               <span style="color: #008000;">self</span>.<span style="color: black;">kwallet</span>=open_kwallet<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
+
     <span style="color: #ff7700;font-weight:bold;">def</span> supported<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
-        <span style="color: #ff7700;font-weight:bold;">if</span> kwallet <span style="color: #ff7700;font-weight:bold;">is</span> <span style="color: #008000;">None</span>:
+        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">self</span>.<span style="color: black;">kwallet</span> <span style="color: #ff7700;font-weight:bold;">is</span> <span style="color: #008000;">None</span>:
             <span style="color: #ff7700;font-weight:bold;">return</span> -<span style="color: #ff4500;">1</span>
         <span style="color: #ff7700;font-weight:bold;">else</span>:
             <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff4500;">1</span>
@@ -<span style="color: #ff4500;">207</span>,<span style="color: #ff4500;">7</span> +<span style="color: #ff4500;">212</span>,<span style="color: #ff4500;">7</span> @@
         <span style="color: #483d8b;">&quot;&quot;&quot;
         key = username + '@' + service
         network = KWallet.Wallet.NetworkWallet()
-        if kwallet.keyDoesNotExist(network, 'Python', key):
+        if self.kwallet.keyDoesNotExist(network, 'Python', key):
             return None                                                                                                                                                                                                         
&nbsp;
         result = kwallet.readPassword(key)[1]
@@ -218,7 +223,7 @@
     def set_password(self, service, username, password):
         &quot;&quot;&quot;</span>Set password <span style="color: #ff7700;font-weight:bold;">for</span> the username of the service
         <span style="color: #483d8b;">&quot;&quot;&quot;
-        kwallet.writePassword(username+'@'+service, password)
+        self.kwallet.writePassword(username+'@'+service, password)                                                                                                                                                              
&nbsp;
 class BasicFileKeyring(KeyringBackend):
     &quot;&quot;&quot;</span>BasicFileKeyring <span style="color: #ff7700;font-weight:bold;">is</span> a filebased implementation of keyring.
@@ -<span style="color: #ff4500;">481</span>,<span style="color: #ff4500;">7</span> +<span style="color: #ff4500;">486</span>,<span style="color: #ff4500;">7</span> @@
             <span style="color: #008000;">self</span>.<span style="color: black;">pywintypes</span> = pywintypes
         <span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #008000;">ImportError</span>:
             <span style="color: #008000;">self</span>.<span style="color: black;">win32cred</span> = <span style="color: #008000;">None</span>
-
+
     <span style="color: #ff7700;font-weight:bold;">def</span> supported<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
         <span style="color: #483d8b;">''</span><span style="color: #483d8b;">'Default Windows backend, when it is available
         '</span><span style="color: #483d8b;">''</span>
@@ -<span style="color: #ff4500;">492</span>,<span style="color: #ff4500;">19</span> +<span style="color: #ff4500;">497</span>,<span style="color: #ff4500;">19</span> @@
             <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff4500;">1</span>
         <span style="color: #ff7700;font-weight:bold;">else</span>:
             <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff4500;">0</span>
-
+
     <span style="color: #ff7700;font-weight:bold;">def</span> get_password<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, service, username<span style="color: black;">&#41;</span>:
         <span style="color: #ff7700;font-weight:bold;">try</span>:
-            blob = <span style="color: #008000;">self</span>.<span style="color: black;">win32cred</span>.<span style="color: black;">CredRead</span><span style="color: black;">&#40;</span>Type=<span style="color: #008000;">self</span>.<span style="color: black;">win32cred</span>.<span style="color: black;">CRED_TYPE_GENERIC</span>,
+            blob = <span style="color: #008000;">self</span>.<span style="color: black;">win32cred</span>.<span style="color: black;">CredRead</span><span style="color: black;">&#40;</span>Type=<span style="color: #008000;">self</span>.<span style="color: black;">win32cred</span>.<span style="color: black;">CRED_TYPE_GENERIC</span>,
                                            TargetName=service<span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'CredentialBlob'</span><span style="color: black;">&#93;</span>
         <span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #008000;">self</span>.<span style="color: black;">pywintypes</span>.<span style="color: black;">error</span>, e:
             <span style="color: #ff7700;font-weight:bold;">if</span> e<span style="color: black;">&#91;</span>:<span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span> == <span style="color: black;">&#40;</span><span style="color: #ff4500;">1168</span>, <span style="color: #483d8b;">'CredRead'</span><span style="color: black;">&#41;</span>:
                 <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">None</span>
             <span style="color: #ff7700;font-weight:bold;">raise</span>
         <span style="color: #ff7700;font-weight:bold;">return</span> blob.<span style="color: black;">decode</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;utf16&quot;</span><span style="color: black;">&#41;</span>
-
+
     <span style="color: #ff7700;font-weight:bold;">def</span> set_password<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, service, username, password<span style="color: black;">&#41;</span>:
-        credential = <span style="color: #008000;">dict</span><span style="color: black;">&#40;</span>Type=<span style="color: #008000;">self</span>.<span style="color: black;">win32cred</span>.<span style="color: black;">CRED_TYPE_GENERIC</span>,
+        credential = <span style="color: #008000;">dict</span><span style="color: black;">&#40;</span>Type=<span style="color: #008000;">self</span>.<span style="color: black;">win32cred</span>.<span style="color: black;">CRED_TYPE_GENERIC</span>,
                           TargetName=service,
                           UserName=username,
                           CredentialBlob=<span style="color: #008000;">unicode</span><span style="color: black;">&#40;</span>password<span style="color: black;">&#41;</span>,</pre></td></tr></table></div>

<p>Questa è la patch da applicare dopo aver scaricato tramite:</p>
<address id="clone-url-https">hg clone <a href="https://bitbucket.org/kang/python-keyring-lib">https://bitbucket.org/kang/python-keyring-lib</a></address>
<p>È stata inviata una segnalazione agli sviluppatori, attendiamo che venga inserita nei sorgenti ufficiali.</p>
<div id="bottomcontainerBox">
			<div class="buttons">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.ldlabs.org%2Fblog%2F2011%2F05%2F07%2Fancora-sulla-libreria-keyring-di-python%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:21px;" allowTransparency="true"></iframe></div>
			<div class="buttons">
			<g:plusone size="medium" href="http://www.ldlabs.org/blog/2011/05/07/ancora-sulla-libreria-keyring-di-python/"></g:plusone>
			</div>
			<div class="buttons">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.ldlabs.org/blog/2011/05/07/ancora-sulla-libreria-keyring-di-python/"  data-text="Ancora sulla libreria keyring di python" data-count="horizontal">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://www.ldlabs.org/blog/2011/05/07/ancora-sulla-libreria-keyring-di-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>python Keyring.backend.KDEWallet: accedere a KDEWallet da python</title>
		<link>http://www.ldlabs.org/blog/2011/05/04/python-keyring-backend-kdewallet-accedere-a-kdewallet-da-python/</link>
		<comments>http://www.ldlabs.org/blog/2011/05/04/python-keyring-backend-kdewallet-accedere-a-kdewallet-da-python/#comments</comments>
		<pubDate>Wed, 04 May 2011 09:04:03 +0000</pubDate>
		<dc:creator>Francesco Apollonio</dc:creator>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[recensione]]></category>
		<category><![CDATA[annunci]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[code tips]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[kde]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[program]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[repository]]></category>
		<category><![CDATA[utility]]></category>
		<category><![CDATA[varie]]></category>

		<guid isPermaLink="false">http://www.ldlabs.org/blog/?p=762</guid>
		<description><![CDATA[<style type="text/css">
#leftcontainerBox {
float:left;
position: fixed;
top:40%;
left:60px;
z-index:1;
#F0F4F9 
}

#leftcontainerBox .buttons {
float:left;
clear:both;
margin:4px 4px 4px 4px;
width:110px;
height:60px;
padding-bottom:2px;
}


#bottomcontainerBox {
float:left;
height:30px;
width:100%;
#F0F4F9}

#bottomcontainerBox .buttons {
float:left;
height:30px;
width:110px;
margin:4px 4px 4px 4px;
}

</style>
Avevo bisogno in una applicazione di salvare una password nel wallet di kde tramite python utilizzando il modulo keyring. Utilizzo debian sid ed ho installato il pacchetto python-keyring versione 0.5.1-1 (quello presente nei repository), dove è presente un bug. Infatti se apriamo la python shell: 1 2 3 4 import keyring.backend kdewallet = keyring.backend.KDEWallet&#40;&#41; kdewallet.supported&#40;&#41; [...]]]></description>
			<content:encoded><![CDATA[<style type="text/css">
#leftcontainerBox {
float:left;
position: fixed;
top:40%;
left:60px;
z-index:1;
#F0F4F9 
}

#leftcontainerBox .buttons {
float:left;
clear:both;
margin:4px 4px 4px 4px;
width:110px;
height:60px;
padding-bottom:2px;
}


#bottomcontainerBox {
float:left;
height:30px;
width:100%;
#F0F4F9}

#bottomcontainerBox .buttons {
float:left;
height:30px;
width:110px;
margin:4px 4px 4px 4px;
}

</style>
<p>Avevo bisogno in una applicazione di salvare una password nel wallet di kde tramite python utilizzando il modulo <a href="http://home.python-keyring.org/" target="_blank">keyring</a>.</p>
<p>Utilizzo debian sid ed ho installato il pacchetto python-keyring versione 0.5.1-1 (quello presente nei repository), dove è presente un bug.<br />
Infatti se apriamo la python shell:</p>

<div class="wp_codebox"><table><tr id="p76213"><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code" id="p762code13"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> keyring.<span style="color: black;">backend</span>
kdewallet = keyring.<span style="color: black;">backend</span>.<span style="color: black;">KDEWallet</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
kdewallet.<span style="color: black;">supported</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
-<span style="color: #ff4500;">1</span></pre></td></tr></table></div>

<p>anche la set_password da un eccezione.<br />
Dopo un po&#8217; di ricerche mi sono imbattuto in questa pagina: <a href="https://bitbucket.org/kang/python-keyring-lib/issue/41/kdewallet-not-working-anymore" target="_blank">https://bitbucket.org/kang/python-keyring-lib/issue/41/kdewallet-not-working-anymore</a> dove già dal titolo era chiaro che non ero l&#8217;unico ad avere questo problema!</p>
<p>Per far rifunzionare il modulo occorre scaricare la versione in sviluppo (occorre aver installato il pacchetto mercurial-git):</p>

<div class="wp_codebox"><table><tr id="p76214"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p762code14"><pre class="bash" style="font-family:monospace;">hg clone https:<span style="color: #000000; font-weight: bold;">//</span>bitbucket.org<span style="color: #000000; font-weight: bold;">/</span>kang<span style="color: #000000; font-weight: bold;">/</span>python-keyring-lib
<span style="color: #7a0874; font-weight: bold;">cd</span> python-keyring-lib
<span style="color: #c20cb9; font-weight: bold;">sudo</span> python setup.py <span style="color: #c20cb9; font-weight: bold;">install</span></pre></td></tr></table></div>

<p>Ora tutto ritorna a funzionare benissimo infatti possiamo settare la password con</p>

<div class="wp_codebox"><table><tr id="p76215"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p762code15"><pre class="python" style="font-family:monospace;">kdewallet.<span style="color: black;">set_password</span><span style="color: black;">&#40;</span>SERVIZIO, USER, PASSWORD<span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>ottenerla con</p>

<div class="wp_codebox"><table><tr id="p76216"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p762code16"><pre class="python" style="font-family:monospace;">kdewallet.<span style="color: black;">get_password</span><span style="color: black;">&#40;</span>SERVIZIO, USER<span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>Tutto risolto!</p>
<div id="bottomcontainerBox">
			<div class="buttons">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.ldlabs.org%2Fblog%2F2011%2F05%2F04%2Fpython-keyring-backend-kdewallet-accedere-a-kdewallet-da-python%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:21px;" allowTransparency="true"></iframe></div>
			<div class="buttons">
			<g:plusone size="medium" href="http://www.ldlabs.org/blog/2011/05/04/python-keyring-backend-kdewallet-accedere-a-kdewallet-da-python/"></g:plusone>
			</div>
			<div class="buttons">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.ldlabs.org/blog/2011/05/04/python-keyring-backend-kdewallet-accedere-a-kdewallet-da-python/"  data-text="python Keyring.backend.KDEWallet: accedere a KDEWallet da python" data-count="horizontal">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://www.ldlabs.org/blog/2011/05/04/python-keyring-backend-kdewallet-accedere-a-kdewallet-da-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Virtualbricks: Video Howto &#8211; Connettere due macchine virtuali KVM tramite un VDE Switch</title>
		<link>http://www.ldlabs.org/blog/2011/04/29/virtualbricks-video-howto-connettere-due-macchine-virtuali-kvm-tramite-un-vde-switch/</link>
		<comments>http://www.ldlabs.org/blog/2011/04/29/virtualbricks-video-howto-connettere-due-macchine-virtuali-kvm-tramite-un-vde-switch/#comments</comments>
		<pubDate>Fri, 29 Apr 2011 21:51:22 +0000</pubDate>
		<dc:creator>Francesco Apollonio</dc:creator>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[VDE]]></category>
		<category><![CDATA[Virtualbricks]]></category>
		<category><![CDATA[Virtualizzazione]]></category>
		<category><![CDATA[guida virtualbricks]]></category>
		<category><![CDATA[kvm]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[utility]]></category>
		<category><![CDATA[varie]]></category>
		<category><![CDATA[vde]]></category>
		<category><![CDATA[virtualbricks]]></category>

		<guid isPermaLink="false">http://www.ldlabs.org/blog/?p=757</guid>
		<description><![CDATA[<style type="text/css">
#leftcontainerBox {
float:left;
position: fixed;
top:40%;
left:60px;
z-index:1;
#F0F4F9 
}

#leftcontainerBox .buttons {
float:left;
clear:both;
margin:4px 4px 4px 4px;
width:110px;
height:60px;
padding-bottom:2px;
}


#bottomcontainerBox {
float:left;
height:30px;
width:100%;
#F0F4F9}

#bottomcontainerBox .buttons {
float:left;
height:30px;
width:110px;
margin:4px 4px 4px 4px;
}

</style>
Video tutorial che mostra come connettere due macchine virtuali tra di loro utilizzando un vde switch, il tutto tramite Virtualbricks! Tweet]]></description>
			<content:encoded><![CDATA[<style type="text/css">
#leftcontainerBox {
float:left;
position: fixed;
top:40%;
left:60px;
z-index:1;
#F0F4F9 
}

#leftcontainerBox .buttons {
float:left;
clear:both;
margin:4px 4px 4px 4px;
width:110px;
height:60px;
padding-bottom:2px;
}


#bottomcontainerBox {
float:left;
height:30px;
width:100%;
#F0F4F9}

#bottomcontainerBox .buttons {
float:left;
height:30px;
width:110px;
margin:4px 4px 4px 4px;
}

</style>
<iframe width="640" height="385" src="http://www.youtube.com/embed/q_knD6fYASg" frameborder="0" type="text/html"></iframe><div style="text-align:right;"><a style="color:#aaa;font-size:9px" href="http://www.clickonf5.org/" title="IFRAME Embed for Youtube Free WordPress Plugin" target="_blank">IFRAME Embed for Youtube</a></div>
<p>Video tutorial che mostra come connettere due macchine virtuali tra di loro utilizzando un vde switch, il tutto tramite <a href="http://www.ldlabs.org/blog/2011/03/16/virtualbricks-gui-per-la-configurazione-di-macchine-qemukvm-e-componenti-vde/">Virtualbricks</a>!</p>
<div id="bottomcontainerBox">
			<div class="buttons">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.ldlabs.org%2Fblog%2F2011%2F04%2F29%2Fvirtualbricks-video-howto-connettere-due-macchine-virtuali-kvm-tramite-un-vde-switch%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:21px;" allowTransparency="true"></iframe></div>
			<div class="buttons">
			<g:plusone size="medium" href="http://www.ldlabs.org/blog/2011/04/29/virtualbricks-video-howto-connettere-due-macchine-virtuali-kvm-tramite-un-vde-switch/"></g:plusone>
			</div>
			<div class="buttons">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.ldlabs.org/blog/2011/04/29/virtualbricks-video-howto-connettere-due-macchine-virtuali-kvm-tramite-un-vde-switch/"  data-text="Virtualbricks: Video Howto &#8211; Connettere due macchine virtuali KVM tramite un VDE Switch" data-count="horizontal">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://www.ldlabs.org/blog/2011/04/29/virtualbricks-video-howto-connettere-due-macchine-virtuali-kvm-tramite-un-vde-switch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

