<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;AkYDQXY6eSp7ImA9WhRaEE0.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062</id><updated>2012-02-11T20:26:10.811-04:30</updated><category term="Redes" /><category term="matplotlib" /><category term="canaima" /><category term="Mac Book" /><category term="DNS" /><category term="pyQwt" /><category term="Flisol" /><category term="Mercurial" /><category term="gnome" /><category term="Empaquetado" /><category term="General" /><category term="Asus" /><category term="git" /><category term="python" /><category term="PIPA" /><category term="control de versiones" /><category term="pendrive" /><category term="Android" /><category term="libpam" /><category term="google maps" /><category term="Camara" /><category term="Debian" /><category term="OpenDocument" /><category term="Nokia N810" /><category term="Asterisk" /><category term="gtk" /><category term="ssh" /><category term="FreeBSD" /><category term="Acelerometro" /><category term="Venezuela" /><category term="SOAP" /><category term="maemo" /><category term="Magnetometro" /><category term="glade" /><category term="pyqt" /><category term="numpy" /><category term="Sistemas embebidos" /><category term="gconf" /><category term="Linux" /><category term="ACTA" /><category term="GPS" /><category term="snmp" /><category term="Seguridad" /><category term="accesibilidad" /><category term="pygame" /><category term="Ubuntu" /><category term="tiflotecnologia" /><category term="Protesta" /><category term="SOPA" /><category term="código QR" /><title>La libertad de desarrollar no tiene  precio...</title><subtitle type="html">Blog dedicado al Software Libre en especial Linux Debian, Android y FreeBSD, a la programación en python con gtk, qt y en Android.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://ernesto-ecrespo.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Ernesto Crespo</name><uri>https://profiles.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAABTg/KepLh0e_Jso/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>140</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/LaLibertadDeDesarrollarNoTienePrecio" /><feedburner:info uri="lalibertaddedesarrollarnotieneprecio" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>LaLibertadDeDesarrollarNoTienePrecio</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;C0EESXg-fSp7ImA9WhRbFk0.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-4795742600240632242</id><published>2012-02-07T03:30:00.000-04:30</published><updated>2012-02-07T03:30:08.655-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-07T03:30:08.655-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="canaima" /><category scheme="http://www.blogger.com/atom/ns#" term="Redes" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><title>Obtener información de las interfaces de red con python(netifaces)</title><content type="html">Existe un módulo en python que permite obtener la información de las interfaces de red. &lt;br /&gt;
&lt;br /&gt;
Dicho módulo se llama netifaces, con él se puede obtener la lista de interfaces de su equipo, obtener la información de Enlace de Red de cada interfaz, su dirección IPv4 y su Dirección IPv6.&lt;br /&gt;
&lt;br /&gt;
Para instalar el módulo se ejecuta apt-get para el caso de Debian/Canaima/Ubuntu.&lt;br /&gt;
#apt-get install python-netifaces&lt;br /&gt;
&lt;br /&gt;
La idea es crear un script que capture la lista de interfaces del equipo y muestre la información de cada una de dichas interfaces.&lt;br /&gt;
&lt;br /&gt;
El código del programa se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: blue;"&gt;&lt;em&gt;#!/usr/bin/env python&lt;br /&gt;&lt;br /&gt;#Se importa el modulo netifaces&lt;br /&gt;import netifaces&lt;br /&gt;&lt;br /&gt;#Se captura la lista de interfaces en el equipo&lt;br /&gt;interfaces = netifaces.interfaces()&lt;br /&gt;#Se muestra las interfaces&lt;br /&gt;print "interfaces: ", interfaces&lt;br /&gt;&lt;br /&gt;#Se recorre la lista de interfaces&lt;br /&gt;for interface in interfaces:&lt;br /&gt;    #Se captura la informacion de cada interfaz&lt;br /&gt;    datos = netifaces.ifaddresses(interface) &lt;br /&gt;    print "--------------------------"&lt;br /&gt;    #Se muestra el nombre de la interface&lt;br /&gt;    print "Interface: %s" %interface&lt;br /&gt;    #Se captura la lista de parametros que tiene la interface&lt;br /&gt;    variables = datos.keys()&lt;br /&gt;    #Se muestra la direccion de la capa de enlace de red de la interface&lt;br /&gt;    print "Capa de enlace de red: ", datos[netifaces.AF_LINK][0]['addr']&lt;br /&gt;    #Si esta presente la informacion de IPV4 se muestra&lt;br /&gt;    if netifaces.AF_INET in variables:&lt;br /&gt;        print "IPv4: IP: %s, Mascara: %s" %(datos[netifaces.AF_INET][0]['addr'], datos[netifaces.AF_INET][0]['netmask'])&lt;br /&gt;    #Si esta presente la informacion de IPv6 se muestra&lt;br /&gt;    if netifaces.AF_INET in variables:&lt;br /&gt;        print "IPv6: IP: %s, Mascara: %s " %(datos[netifaces.AF_INET6][0]['addr'], datos[netifaces.AF_INET6][0]['netmask'])&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
El resultado del programa se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: red;"&gt;&lt;strong&gt;interfaces:  ['lo', 'eth0', 'wlan0']&lt;br /&gt;--------------------------&lt;br /&gt;Interface: lo&lt;br /&gt;Capa de enlace de red:  00:00:00:00:00:00&lt;br /&gt;IPv4: IP: 127.0.0.1, Mascara: 255.0.0.0&lt;br /&gt;IPv6: IP: ::1, Mascara: ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff &lt;br /&gt;--------------------------&lt;br /&gt;Interface: eth0&lt;br /&gt;Capa de enlace de red:  71:6a:b7:77:46:5f&lt;br /&gt;--------------------------&lt;br /&gt;Interface: wlan0&lt;br /&gt;Capa de enlace de red:  00:26:85:74:fe:89&lt;br /&gt;IPv4: IP: 192.168.10.108, Mascara: 255.255.255.0&lt;br /&gt;IPv6: IP: fe80::236:92ff:fa54:fe89%wlan0, Mascara: ffff:ffff:ffff:ffff::&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Para más información sobre el módulo pueden visitar la información en la página de &lt;a href="http://pypi.python.org/pypi/netifaces" target="_blank"&gt;Python&lt;/a&gt; o el sitio de la &lt;a href="http://alastairs-place.net/projects/netifaces/" target="_blank"&gt;aplicación&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/882744969176160062-4795742600240632242?l=ernesto-ecrespo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/YnZJaWjn-a4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/4795742600240632242/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=4795742600240632242" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/4795742600240632242?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/4795742600240632242?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/YnZJaWjn-a4/obtener-informacion-de-las-interfaces.html" title="Obtener información de las interfaces de red con python(netifaces)" /><author><name>Ernesto Crespo</name><uri>https://profiles.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAABTg/KepLh0e_Jso/s512-c/photo.jpg" /></author><thr:total>0</thr:total><georss:featurename>Av Alberto Carnevali, Mérida, Venezuela</georss:featurename><georss:point>8.623793225814111 -71.1448860168457</georss:point><georss:box>8.608093725814111 -71.1646270168457 8.639492725814112 -71.1251450168457</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2012/02/obtener-informacion-de-las-interfaces.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEMRHwyeyp7ImA9WhRbFU4.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-1790641205920006885</id><published>2012-02-06T09:28:00.000-04:30</published><updated>2012-02-06T09:28:05.293-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-06T09:28:05.293-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SOAP" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><title>WebService con Soappy</title><content type="html">Hace ya mucho tiempo escribí un ejemplo de como usar &lt;a href="http://ernesto-ecrespo.blogspot.com/2008/03/ejemplo-xml-rpc-en-python.html" target="_blank"&gt;xml-rpc&lt;/a&gt; desde python como webservice.&lt;br /&gt;
En este caso se explicará el uso de otro protocolo que deriva de xml-rpc que se llama SOAP (Simple Object Access Protocol).&lt;br /&gt;
&lt;br /&gt;
SOAP es un protocolo estándar que define cómo dos objetos en diferentes procesos pueden comunicarse por medio del intercambio de datos XML. Pueden conseguir más información en la página de &lt;a href="http://es.wikipedia.org/wiki/SOAP" target="_blank"&gt;wikipedia&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;En python existe un módulo para trabajar con SOAP que se llama &lt;a href="http://pypi.python.org/pypi/SOAPpy/" target="_blank"&gt;soappy&lt;/a&gt;. Lo primero que se hará es instalarlo.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: red;"&gt;
&lt;b&gt;#apt-get install python-soappy&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
La idea es crear 4 funciones, de suma, resta, multiplicación y división, registrarlas en el servicio SOAP, levantar el servidor y realizar las llamadas desde el cliente.&lt;br /&gt;
&lt;br /&gt;
El programa servidor de SOAP es el siguiente:&lt;br /&gt;
 &lt;br /&gt;
&lt;div style="color: blue;"&gt;
&lt;i&gt;&lt;br /&gt;#!/usr/bin/env python&lt;br /&gt;&lt;br /&gt;import SOAPpy&lt;br /&gt;&lt;br /&gt;#Funciones que devuelven la suma, resta, multiplicacion y division de 2 numeros&lt;br /&gt;&lt;br /&gt;def suma(a,b):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return a+b&lt;br /&gt;&lt;br /&gt;def resta(a,b):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return a-b&lt;br /&gt;&lt;br /&gt;def multiplicacion(a,b):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return a*b&lt;br /&gt;&lt;br /&gt;def division(a,b):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return a/b&lt;br /&gt;&lt;br /&gt;#Se crea la instancia del servicio SOAP en el equipo por el puerto 8080.&lt;br /&gt;server = SOAPpy.SOAPServer(("localhost", 8080))&lt;br /&gt;&lt;br /&gt;#Registro de las funciones suma,resta, multiplicacion y division &lt;br /&gt;#en el servicio SOAP.&lt;br /&gt;server.registerFunction(suma)&lt;br /&gt;server.registerFunction(resta)&lt;br /&gt;server.registerFunction(multiplicacion)&lt;br /&gt;server.registerFunction(division)&lt;br /&gt;&lt;br /&gt;#Levantar el servicio SOAP.&lt;br /&gt;server.serve_forever()&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
El programa cliente de SOAP es el siguiente:&lt;br /&gt;
&lt;div style="color: blue;"&gt;
&lt;i&gt; #!/usr/bin/env python&lt;br /&gt;&lt;br /&gt;#Se importa el modulo SOAPpy&lt;br /&gt;import SOAPpy&lt;br /&gt;&lt;br /&gt;#Se crea la instancia del proxy SOAP &lt;br /&gt;#a el servidor SOAP &lt;br /&gt;server = SOAPpy.SOAPProxy("http://localhost:8080/")&lt;br /&gt;&lt;br /&gt;#Se llama las funciones registradas en el servidor SOAP&lt;br /&gt;print "El resultado de la suma es: ", server.suma(5,10)&lt;br /&gt;print "El resultado de la resta es: ",server.resta(20,5)&lt;br /&gt;print "El resultado de la multiplicacion es: ", server.multiplicacion(10,5)&lt;br /&gt;print "El resultado de la division es: ", server.division(10,3)&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
Se le da permisos de ejecución a ambos archivos, se ejecuta primero el servidor y luego el cliente que devuelve el siguiente resultado:&lt;br /&gt;
&lt;br /&gt;
Se ejecuta cada programa en una consola distinta.&lt;br /&gt;
&lt;b style="color: red;"&gt;ecrespo@jewel:~/bin$ ./soapservidor.py&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: red;"&gt;
&lt;b&gt;ecrespo@jewel:~/bin$ ./soapcliente.py &lt;br /&gt;El resultado de la suma es:&amp;nbsp; 15&lt;br /&gt;El resultado de la resta es:&amp;nbsp; 15&lt;br /&gt;El resultado de la multiplicacion es:&amp;nbsp; 50&lt;br /&gt;El resultado de la division es:&amp;nbsp; 3&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/882744969176160062-1790641205920006885?l=ernesto-ecrespo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/wGyNSfPlxnI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/1790641205920006885/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=1790641205920006885" title="3 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/1790641205920006885?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/1790641205920006885?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/wGyNSfPlxnI/webservice-con-soappy.html" title="WebService con Soappy" /><author><name>Ernesto Crespo</name><uri>https://profiles.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAABTg/KepLh0e_Jso/s512-c/photo.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2012/02/webservice-con-soappy.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8EQ3o7cSp7ImA9WhRUE0Q.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-6483757411555827028</id><published>2012-01-24T04:00:00.000-04:30</published><updated>2012-01-24T04:00:02.409-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-24T04:00:02.409-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="canaima" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="control de versiones" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><category scheme="http://www.blogger.com/atom/ns#" term="Mercurial" /><title>API de Mercurial para Python</title><content type="html">Mercurial como ya se ha explicado es un sistema de control de versiones distribuído desarrollado en python, otros sistemas de control de versiones tienen API o módulos para python, pero para el caso de mercurial no había visto una API para usarlo desde python.&lt;br /&gt;
&lt;br /&gt;
Revisando los artículos que publican en los sparks de python&amp;nbsp; en Google+ me encuentro con que existe un API que se llama &lt;a href="https://bitbucket.org/haard/hgapi" target="_blank"&gt;hgapi&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
El API soporta lo siguiente:&lt;br /&gt;
&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span class="Apple-style-span" style="color: #393939; font-family: Helvetica, Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre class="literal-block" style="background-attachment: initial; background-clip: initial; background-color: #f7f7f7; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(221, 221, 221); border-bottom-left-radius: 3px 3px; border-bottom-right-radius: 3px 3px; border-bottom-style: solid; border-bottom-width: 1px; border-color: initial; border-left-color: rgb(221, 221, 221); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(221, 221, 221); border-right-style: solid; border-right-width: 1px; border-style: initial; border-top-color: rgb(221, 221, 221); border-top-left-radius: 3px 3px; border-top-right-radius: 3px 3px; border-top-style: solid; border-top-width: 1px; font-family: 'Bitstream Vera Sans Mono', 'DejaVu Sans Mono', Monaco, monospace; font-size: 12px; font-style: inherit; font-weight: inherit; line-height: 16px; margin-bottom: 9px; margin-left: 0px; margin-right: 0px; margin-top: 9px; padding-bottom: 9px; padding-left: 12px; padding-right: 12px; padding-top: 9px; vertical-align: baseline; white-space: pre-wrap;"&gt;hg init
hg id
hg add &amp;lt;file&amp;gt;
hg commit [files] [-u name] [--close-branch]
hg update &amp;lt;rev&amp;gt;
hg heads
hg log
hg remove
hg status
hg merge (fails on conflict)
hg revert&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
El procedimiento para instalarlo es el siguiente:&lt;br /&gt;
&amp;nbsp;&lt;i&gt;&lt;span style="color: red;"&gt;# pip install hgapi&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;div style="color: red;"&gt;
&lt;i&gt;&amp;nbsp;Downloading/unpacking hgapi&lt;br /&gt;&amp;nbsp; Downloading hgapi-1.1.0.tar.gz&lt;br /&gt;&amp;nbsp; Running setup.py egg_info for package hgapi&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;Installing collected packages: hgapi&lt;br /&gt;&amp;nbsp; Running setup.py install for hgapi&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;Successfully installed hgapi&lt;br /&gt;Cleaning up...&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
Se crea el directorio pruebas:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: red;"&gt;
&lt;i&gt;$mkdir pruebas&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
Dentro del directorio pruebas se crea el archivo hora.txt:&lt;br /&gt;
&lt;div style="color: red;"&gt;
&lt;i&gt;cd pruebas&lt;/i&gt;&lt;/div&gt;
&lt;div style="color: red;"&gt;
&lt;i&gt; touch hora.txt&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
Ya está todo listo para probar el API.&lt;br /&gt;
&lt;br /&gt;
1. Se importa el módulo hgapi:&lt;br /&gt;
&lt;div style="color: #660000;"&gt;
&lt;b&gt;import hgapi&lt;/b&gt;&lt;/div&gt;
2. Fuera del directorio pruebas se crea la instancia del repositorio:&lt;br /&gt;
&lt;div style="color: #660000;"&gt;
&lt;b&gt;repo = hgapi.Repo("pruebas")&lt;/b&gt;&lt;/div&gt;
3. Se inicializa el repositorio:&lt;br /&gt;
&lt;div style="color: #660000;"&gt;
&lt;b&gt;repo.hg_init()&lt;/b&gt;&lt;/div&gt;
4. Se agrega el archivo hora.txt:&lt;br /&gt;
&lt;div style="color: #660000;"&gt;
&lt;b&gt;repo.hg_add("hora.txt")&lt;/b&gt;&lt;/div&gt;
5. Se realiza el commit colocando la descripción y el usuario quien realiza el commit:&lt;br /&gt;
&lt;div style="color: #660000;"&gt;
&lt;b&gt;repo.hg_commit("Agregando archivo hora.txt",user="ernesto")&lt;/b&gt;&lt;/div&gt;
6. Se captura la descripción:&lt;br /&gt;
&lt;div style="color: #660000;"&gt;
&lt;b&gt;str(repo['tip'].desc)&lt;/b&gt;&lt;/div&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;'Agregando archivo hora.txt'&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Esto es lo básico que explica el sitio de hgapi. Lo interesante es que ya se puede automatizar procesos de mercurial desde python.&lt;br /&gt;
&lt;br /&gt;
La documentación de hgapi la pueden revisar &lt;a href="http://packages.python.org/hgapi/" target="_blank"&gt;aquí&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/882744969176160062-6483757411555827028?l=ernesto-ecrespo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/Xn4CPhqtLZU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/6483757411555827028/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=6483757411555827028" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/6483757411555827028?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/6483757411555827028?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/Xn4CPhqtLZU/api-de-mercurial-para-python.html" title="API de Mercurial para Python" /><author><name>Ernesto Crespo</name><uri>https://profiles.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAABTg/KepLh0e_Jso/s512-c/photo.jpg" /></author><thr:total>0</thr:total><georss:featurename>Av Alberto Carnevali, Mérida 5101, Venezuela</georss:featurename><georss:point>8.624047806639513 -71.14548683166504</georss:point><georss:box>8.616198306639513 -71.15535733166504 8.631897306639514 -71.13561633166503</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2012/01/api-de-mercurial-para-python.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIMQ3wyeyp7ImA9WhRUE0k.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-755327633500745650</id><published>2012-01-23T14:53:00.000-04:30</published><updated>2012-01-23T14:53:02.293-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-23T14:53:02.293-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="canaima" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="Empaquetado" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><category scheme="http://www.blogger.com/atom/ns#" term="gnome" /><title>Crear metapaquete con equivs (incorporando archivos postinst y prerm)</title><content type="html">Para continuar con los artículos de metaempaquetado para Debian/Canaima, el último artículo sobre la herramienta equivs.&lt;br /&gt;
&lt;br /&gt;
Lo que faltaba por hacer era crear un metapaquete de configuración que copie archivos de configuración del escritorio cuando se instala y que se guarde dichas configuraciones en el directorio /etc/skel para cuando se cree un nuevo usuario en el sistema.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
En el tutorial de Ubuntu Forums explican como crear el &lt;a href="http://ubuntuforums.org/showthread.php?t=726317" target="_blank"&gt;metapaquete con archivos postinst y prerm&lt;/a&gt;, el problema es que los archivos de ejemplo no se encuentran en los enlaces que hacen referencia.&lt;br /&gt;
&lt;br /&gt;
La idea es agregar el applet del programa radiotray en el escritorio de gnome para todos los usuarios. Como normalmente ya se tiene usuarios en el equipo se tendrá que copiar los archivos de configuración de radiotray al directorio home de cada usuario; para los usuarios que se creen luego de la instalación del metapaquete el sistema copiará los archivos de configuración que se encuentran en el directorio /etc/skel/ .&lt;br /&gt;
&lt;br /&gt;
Lo primero que se necesita hacer es crear el archivo control para metaempaquetado de equivs con el comando equivs-control:&lt;br /&gt;
&lt;br /&gt;
$equivs-control canaima-radiotray-conf&lt;br /&gt;
&lt;br /&gt;
Esté archivo contendrá:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: blue;"&gt;
&lt;i&gt;Section: misc&lt;br /&gt;Priority: optional&lt;br /&gt;Homepage: http://canaima.softwarelibre.gob.ve&lt;br /&gt;Standards-Version: 3.9.1&lt;br /&gt;&lt;br /&gt;Package: canaima-radiotray-conf&lt;br /&gt;Version: 0.1&lt;br /&gt;Maintainer: Ernesto Nadir Crespo Avila &amp;lt;ecrespo@cenditel.gob.ve&amp;gt;&lt;br /&gt;Pre-Depends: radiotray&lt;br /&gt;Depends: ${misc:Depends}&lt;br /&gt;Architecture: all&lt;br /&gt;Copyright: copyright&lt;br /&gt;Changelog: changelog&lt;br /&gt;Files: ./radiotray/radiotray.desktop /etc/skel/.config/autostart/radiotray.desktop&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ./radiotray/bookmarks.xml&amp;nbsp;&amp;nbsp; /etc/skel/.local/share/radiotray/bookmarks.xml&lt;br /&gt;File: postinst&lt;br /&gt;&amp;nbsp;#!/bin/sh -e&lt;br /&gt;&amp;nbsp;# preinst for main-package-config. Divert some configuration file of main-package.&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;set -e&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;PKG=canaima-radiotray-conf&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if [ "$1" = configure ] ; then&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for usuario in&amp;nbsp; /home/*? ; do &lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usuario_min=$(basename $usuario)&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case $(grep "${usuario_min}:.*:.*:.*:.*:.*:::" /etc/shadow ) in&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; '')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #no se hace nada&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;;&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usuario=${usuario_min}&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if [ -f&amp;nbsp; /home/${usuario}/.config/autostart/radiotray.desktop ];&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; then&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cp -r /etc/skel/.config/autostart/radiotray.desktop /home/${usuario}/.config/autostart/radiotray.desktop&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chown ${usuario}.${usuario} /home/${usuario}/.config/autostart/radiotray.desktop&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mkdir -p&amp;nbsp; /home/${usuario}/.config; chown -R ${usuario}.${usuario} /home/${usuario}/.config&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mkdir -p /home/${usuario}/.config/autostart; chown -R ${usuario}.${usuario} /home/${usuario}/.config/autostart&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cp -r /etc/skel/.config/autostart/radiotray.desktop /home/${usuario}/.config/autostart/radiotray.desktop&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chown ${usuario}.${usuario} /home/${usuario}/.config/autostart/radiotray.desktop&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fi&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if [ -f /home/${usuario}/.local/share/radiotray/bookmarks.xml ];&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; then&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cp -r /etc/skel/.local/share/radiotray/bookmarks.xml /home/${usuario}/.local/share/radiotray/bookmarks.xml&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chown ${usuario}.${usuario} /home/${usuario}/.local/share/radiotray/bookmarks.xml&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mkdir -p /home/${usuario}/.local; chown -R ${usuario}.${usuario} /home/${usuario}/.local&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mkdir -p /home/${usuario}/.local/share; chown -R ${usuario}.${usuario} /home/${usuario}/.local/share&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mkdir -p /home/${usuario}/.local/share/radiotray; chown -R ${usuario}.${usuario} /home/${usuario}/.local/share/radiotray&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cp -r /etc/skel/.local/share/radiotray/bookmarks.xml /home/${usuario}/.local/share/radiotray/bookmarks.xml&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chown ${usuario}.${usuario} /home/${usuario}/.local/share/radiotray/bookmarks.xml&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fi&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; esac&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; done&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fi&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; exit 0&lt;br /&gt;File: prerm&lt;br /&gt;&amp;nbsp;#!/bin/sh -e&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;set -e&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;PKG=canaima-radiotray-conf&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if [ "$1" = configure ] ; then&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for usuario in&amp;nbsp; /home/*? ; do&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; usuario_min=$(basename $usuario)&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; case $(grep "${usuario_min}:.*:.*:.*:.*:.*:::" /etc/shadow ) in&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; '')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #no se hace nada&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ;;&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; *)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; usuario=${usuario_min}&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if [ -f&amp;nbsp; /home/${usuario}/.config/autostart/radiotray.desktop ];&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; then&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; rm -f /home/${usuario}/.config/autostart/radiotray.desktop&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fi&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if [ -f /home/${usuario}/.local/share/radiotray/bookmarks.xml ];&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; then&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; rm -f /home/${usuario}/.local/share/radiotray/bookmarks.xml&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fi&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; esac&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; done&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fi&lt;br /&gt;&amp;nbsp;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exit 0&lt;br /&gt;Description: Radiotray bookmarks to Venezuelan radio streaming&lt;br /&gt;&amp;nbsp;Radiotray config to autostart in gnome and radio stream bookmark&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Se define la sección y prioridad del programa, se define el sitio del programa, la versión del policy a utilizar; el nombre del programa, su versión, el mantenedor del programa, la predependencia en este caso es el programa radiotray.&lt;br /&gt;
&lt;br /&gt;
La dependencia es ${misc:Depends}, está variable se define ya que se está usando debhelper para empaquetar. La arquitectura es all, se definen los archivos copyright y changelog.&lt;br /&gt;
&lt;br /&gt;
Luego con la opción Files se define los archivos que se van a copiar en el directorio /etc/skel/ .&lt;br /&gt;
&lt;br /&gt;
Con la opción File se define cada script que se desea agregar al paquete, en este caso los archivos postinst y prerm.&lt;br /&gt;
&lt;br /&gt;
Lo que hace postinst es averiguar las cuentas de los usuarios del equipo y copiar los archivos de configuración en los directorios que usa gnome para manejar las configuraciones. En el caso de prerm lo que hace es borrar dichos archivos de cada usuario del equipo.&lt;br /&gt;
&lt;br /&gt;
Por último se da una descripción corta y luego larga del programa.&lt;br /&gt;
&lt;br /&gt;
El archivo changelog tendrá los cambios realizados en el metapaquete:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: blue;"&gt;
&lt;i&gt;canaima-radiotray-conf (1:0.1) unstable; urgency=low&lt;br /&gt;&lt;br /&gt;&amp;nbsp; * First release.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;-- Ernesto Nadir Crespo Avila &amp;lt;ecrespo@cenditel.gob.ve&amp;gt;&amp;nbsp; Fri, 23 Dec 2011 10:57:05 -0430&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
El archivo copyright contendrá lo siguiente:&lt;br /&gt;
&lt;div style="color: blue;"&gt;
 &lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style="color: blue;"&gt;
&lt;i&gt;Authors:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Copyright (C) 2011 Ernesto Nadir Crespo Avila &amp;lt;ecrespo@cenditel.gob.ve&amp;gt;&lt;br /&gt;&lt;br /&gt;License:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; This package is free software; you can redistribute it and/or modify&lt;br /&gt;&amp;nbsp;&amp;nbsp; it under the terms of the GNU General Public License as published by&lt;br /&gt;&amp;nbsp;&amp;nbsp; the Free Software Foundation; version 2 dated June, 1991.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; This package is distributed in the hope that it will be useful,&lt;br /&gt;&amp;nbsp;&amp;nbsp; but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;&amp;nbsp;&amp;nbsp; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&amp;nbsp; See the&lt;br /&gt;&amp;nbsp;&amp;nbsp; GNU General Public License for more details.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; You should have received a copy of the GNU General Public License&lt;br /&gt;&amp;nbsp;&amp;nbsp; along with this program; if not, write to the Free Software&lt;br /&gt;&amp;nbsp;&amp;nbsp; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA&amp;nbsp; 02110-1301 USA&lt;br /&gt;&lt;br /&gt;On Debian GNU/Linux systems, the complete text of the GNU General&lt;br /&gt;Public License can be found in `/usr/share/common-licenses/GPL-2'.&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
Se crea el directorio radiotray que contendrá los archivos de configuración:&lt;br /&gt;
&lt;div style="color: red;"&gt;
&lt;b&gt;$mkdir radiotray&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
Se crean los archivos bookmarks.xml y radiotray.desktop. El primero define las radios por Internet que se quieren tener en los favoritos y el segundo archivo define que el programa radiotray se coloque como un applet en el escritorio Gnome.&lt;br /&gt;
&lt;br /&gt;
Archivo bookmarks.xml. El contenido de este archivo se muestra en la siguiente figura:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-Ab39qle0xxU/Tx2v4UJBfHI/AAAAAAAABTE/UAq2XR-jgNw/s1600/bokmarks.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="89" src="http://3.bp.blogspot.com/-Ab39qle0xxU/Tx2v4UJBfHI/AAAAAAAABTE/UAq2XR-jgNw/s320/bokmarks.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Archivo radiotray.desktop:&lt;br /&gt;
&lt;div style="color: blue;"&gt;
&lt;i&gt;[Desktop Entry]&lt;br /&gt;Type=Application&lt;br /&gt;Exec=radiotray&lt;br /&gt;Hidden=false&lt;br /&gt;X-GNOME-Autostart-enabled=true&lt;br /&gt;Name[es_VE]=radiotray&lt;br /&gt;Name=radiotray&lt;br /&gt;Comment[es_VE]=Cliente de radio por internet&lt;br /&gt;Comment=Cliente de radio por internet&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Equivs toma la definición de archivos (File) y crea los archivos para el proceso de instalación. En la siguiente figura se muestra la estructura de archivos del directorio DEBIAN dentro del paquete deb:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-37Pcmp2cdgg/Tx2zBzeQC_I/AAAAAAAABTU/hnUgZBzjPOk/s1600/radiotraydeb.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="120" src="http://4.bp.blogspot.com/-37Pcmp2cdgg/Tx2zBzeQC_I/AAAAAAAABTU/hnUgZBzjPOk/s320/radiotraydeb.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Al subir el metapaquete a un repositorio e instalar se puede ver en la siguiente figura las radios que aparecen en favoritos de radiotray:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-C5oSEf11ieo/Tx2xCnKKwOI/AAAAAAAABTM/4f4pySbSKs4/s1600/Pantallazo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-C5oSEf11ieo/Tx2xCnKKwOI/AAAAAAAABTM/4f4pySbSKs4/s320/Pantallazo.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/882744969176160062-755327633500745650?l=ernesto-ecrespo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/IKu7eLy1Mbc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/755327633500745650/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=755327633500745650" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/755327633500745650?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/755327633500745650?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/IKu7eLy1Mbc/crear-metapaquete-con-equivs.html" title="Crear metapaquete con equivs (incorporando archivos postinst y prerm)" /><author><name>Ernesto Crespo</name><uri>https://profiles.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAABTg/KepLh0e_Jso/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-Ab39qle0xxU/Tx2v4UJBfHI/AAAAAAAABTE/UAq2XR-jgNw/s72-c/bokmarks.png" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Av Alberto Carnevali, Mérida 5101, Venezuela</georss:featurename><georss:point>8.624641827898273 -71.1463451385498</georss:point><georss:box>8.608942327898273 -71.1660861385498 8.640341327898273 -71.12660413854981</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2012/01/crear-metapaquete-con-equivs.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4NQX87fSp7ImA9WhRVGE4.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-1996973681745239082</id><published>2012-01-17T16:46:00.000-04:30</published><updated>2012-01-17T16:46:30.105-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-17T16:46:30.105-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SOPA" /><category scheme="http://www.blogger.com/atom/ns#" term="PIPA" /><category scheme="http://www.blogger.com/atom/ns#" term="canaima" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="ACTA" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><category scheme="http://www.blogger.com/atom/ns#" term="Protesta" /><title>No a SOPA y PIPA</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-Z4EmTCNspxo/TxXapyluSGI/AAAAAAAABPU/Kp78OlIRUgc/s1600/safe_image.php.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-Z4EmTCNspxo/TxXapyluSGI/AAAAAAAABPU/Kp78OlIRUgc/s1600/safe_image.php.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-J1j2SfW4Obw/TxXYas5hQaI/AAAAAAAABPM/kwAgeGDvQ4M/s1600/stop-sopa1-300x300.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-J1j2SfW4Obw/TxXYas5hQaI/AAAAAAAABPM/kwAgeGDvQ4M/s1600/stop-sopa1-300x300.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Gracias e1th0r por las imagen en contra de SOPA.&lt;br /&gt;
&lt;br /&gt;
El día de hoy fue publicado un artículo que escribí en el diario &lt;a href="http://www.ciudadccs.info/?p=250335" target="_blank"&gt;Ciudad Caracas&lt;/a&gt;. Ahí hago un resumen de lo que es SOPA y PIPA y &amp;nbsp;como nos afectaría a todos si son aprobadas.&lt;br /&gt;
&lt;br /&gt;
Presentaré tres vídeos donde se explica con más detalle lo que es SOPA y PIPA, como nos afectará si son aprobadas dichas propuestas de Ley.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vídeo sobre ACTA:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://3.gvt0.com/vi/5fvwoHKj6cs/0.jpg"&gt;&lt;param name="movie" value="http://www.youtube.com/v/5fvwoHKj6cs&amp;fs=1&amp;source=uds" /&gt;
&lt;param name="bgcolor" value="#FFFFFF" /&gt;
&lt;embed width="320" height="266"  src="http://www.youtube.com/v/5fvwoHKj6cs&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Vídeo sobre SOPA:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://0.gvt0.com/vi/VKOwpIOX1rA/0.jpg"&gt;&lt;param name="movie" value="http://www.youtube.com/v/VKOwpIOX1rA&amp;fs=1&amp;source=uds" /&gt;
&lt;param name="bgcolor" value="#FFFFFF" /&gt;
&lt;embed width="320" height="266"  src="http://www.youtube.com/v/VKOwpIOX1rA&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vídeo sobre PIPA:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://0.gvt0.com/vi/D9FnaygIXZA/0.jpg"&gt;&lt;param name="movie" value="http://www.youtube.com/v/D9FnaygIXZA&amp;fs=1&amp;source=uds" /&gt;
&lt;param name="bgcolor" value="#FFFFFF" /&gt;
&lt;embed width="320" height="266"  src="http://www.youtube.com/v/D9FnaygIXZA&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Otro vídeo que trata sobre los derechos de autor:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://3.gvt0.com/vi/euVfKj9HgWc/0.jpg"&gt;&lt;param name="movie" value="http://www.youtube.com/v/euVfKj9HgWc&amp;fs=1&amp;source=uds" /&gt;
&lt;param name="bgcolor" value="#FFFFFF" /&gt;
&lt;embed width="320" height="266"  src="http://www.youtube.com/v/euVfKj9HgWc&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Por esa razón el sitio de Debian Venezuela tendrá una página como protesta como lo muestra la figura:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-I9C6mTE9Ptk/TxXfiSsxNYI/AAAAAAAABPc/fF7GEg-HnVc/s1600/Pantallazo-STOP+SOPA%2521+-+Chromium.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="188" src="http://4.bp.blogspot.com/-I9C6mTE9Ptk/TxXfiSsxNYI/AAAAAAAABPc/fF7GEg-HnVc/s320/Pantallazo-STOP+SOPA%2521+-+Chromium.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Este blog estará en protesta el día de mañana desde las 8am hasta las 8am del día siguiente como lo muestra la figura:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-wbenzd6iqqA/TxXf3mQHCxI/AAAAAAAABPk/xY1Cw_FRRvs/s1600/Pantallazo-La+libertad+de+desarrollar+no+tiene+precio...+-+Chromium.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="188" src="http://1.bp.blogspot.com/-wbenzd6iqqA/TxXf3mQHCxI/AAAAAAAABPk/xY1Cw_FRRvs/s320/Pantallazo-La+libertad+de+desarrollar+no+tiene+precio...+-+Chromium.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Y esto por que? pues para evitar que muchos sitios tengan un mensaje de que está censurado:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-bU2Ri6-vCT8/TxXgZ3NZc4I/AAAAAAAABPs/OUSb7e7CDDE/s1600/mafalda-sopa-banner.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="221" src="http://4.bp.blogspot.com/-bU2Ri6-vCT8/TxXgZ3NZc4I/AAAAAAAABPs/OUSb7e7CDDE/s320/mafalda-sopa-banner.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Hasta ahora los sitios que estarán protestando son:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Wikipedia&lt;/li&gt;
&lt;li&gt;Identi.ca&lt;/li&gt;
&lt;li&gt;Mozilla&lt;/li&gt;
&lt;li&gt;FreeSoftware Fundation&lt;/li&gt;
&lt;li&gt;Reddit&lt;/li&gt;
&lt;li&gt;Tucows&lt;/li&gt;
&lt;li&gt;XDA Developers&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Cuevana&lt;/li&gt;
&lt;li&gt;Anonymous&lt;/li&gt;
&lt;li&gt;Diaspora&lt;/li&gt;
&lt;li&gt;Twicpic&lt;/li&gt;
&lt;li&gt;Wordpress&lt;/li&gt;
&lt;/ul&gt;
Y sigue sumando, si quiere conocer la lista completa la pueden ver &lt;a href="http://nlb-creations.com/2012/01/13/websites-confirmed-for-the-jan-18-blackout-protesting-sopa/" target="_blank"&gt;aquí&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
De latinoamerica se suma Hipatia, Solar, Solve Colibris, Debian-ve, etc.&lt;br /&gt;
&lt;br /&gt;
Los que quieran apoyar la protesta colocando banners o quieren tener una infografía lo pueden ver en los siguientes enlaces:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Infografía: La pueden encontrar en la página de &lt;a href="http://www.derechoaleer.org/" target="_blank"&gt;Derecho a Leer&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Plantilla de protesta para sus sitios lo pueden encontrar en artículo de &lt;a href="http://bitelia.com/2012/01/sopa-plantilla-para-sumar-tu-sitio-web-a-la-protesta-del-18j" target="_blank"&gt;alt1040&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Si sus sitios o blogs usan Drupal, Wordpress o Blogger, tienen una guía de como protestar en el sitio de &lt;a href="http://ciberlatino.wordpress.com/2012/01/16/sopa-pipa-como-poner-tu-sitio-web-en-modo-blackout/" target="_blank"&gt;Cibernauta Latino&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/882744969176160062-1996973681745239082?l=ernesto-ecrespo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/G8tO0MgHqYY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/1996973681745239082/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=1996973681745239082" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/1996973681745239082?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/1996973681745239082?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/G8tO0MgHqYY/no-sopa-y-pipa.html" title="No a SOPA y PIPA" /><author><name>Ernesto Crespo</name><uri>https://profiles.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAABTg/KepLh0e_Jso/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-Z4EmTCNspxo/TxXapyluSGI/AAAAAAAABPU/Kp78OlIRUgc/s72-c/safe_image.php.jpg" height="72" width="72" /><thr:total>1</thr:total><georss:featurename>Av Alberto Carnevali, Mérida, Venezuela</georss:featurename><georss:point>8.620398798417689 -71.14574432373047</georss:point><georss:box>8.58899929841769 -71.18522632373048 8.651798298417688 -71.10626232373046</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2012/01/no-sopa-y-pipa.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cAQns6eSp7ImA9WhRVEkg.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-6309771421617333732</id><published>2012-01-10T22:34:00.000-04:30</published><updated>2012-01-10T22:34:03.511-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-10T22:34:03.511-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="canaima" /><category scheme="http://www.blogger.com/atom/ns#" term="DNS" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><title>Servidor Proxy DNS con pdnsd</title><content type="html">Ya hace un tiempo había explicado como se instala un servidor proxy DNS con dnsmasq, ahora explicaré la configuración de PDNSD utilizando como servidor de DNS los servidores raíz de &lt;a href="http://es.wikipedia.org/wiki/OpenNIC" target="_blank"&gt;OpenNIC&lt;/a&gt; debido a los posibles problemas que nos genere la aprobación de la Ley SOPA y la Censura en Internet.&lt;br /&gt;
&lt;br /&gt;
Si quiere utilizar los servidores de DNS de OpenNIC&amp;nbsp; más cercanos puede visitar el siguiente &lt;a href="http://wiki.opennicproject.org/ClosestT2Servers" target="_blank"&gt;enlace&lt;/a&gt;. Si desea más información sobre OpenNIC puede revisar el siguiente &lt;a href="http://www.linuxerz.org/2011/02/opennic-dns-alternativas-libres-de-la-icann-y-con-dominios-gratuitos/" target="_blank"&gt;artículo&lt;/a&gt; y la página del &lt;a href="http://www.opennicproject.org/" target="_blank"&gt;proyecto&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
En mi caso luego de consultar los servidores de OpenNIC más cercanos usaré el siguiente servidor de DNS 192.121.86.100.&lt;span class="Apple-style-span" style="border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'DejaVu Sans', Verdana, sans-serif; font-size: 13px; line-height: 20px;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Instalación de pdnsd.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;En Debian simplemente se ejecuta un apt-get install.&lt;br /&gt;
&lt;div style="color: blue;"&gt;
&lt;i&gt;#apt-get install pdnsd&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
La aplicación muestra una ventana de dialogo donde menciona 3 métodos de configuración (resolvconf, servidores de DNS raíz o manual). &lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://picasaweb.google.com/103048801515183985093/20120110#5696191756219914050" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" src="http://2.bp.blogspot.com/-lcyn35r97ms/TwzwOPn_F0I/AAAAAAAABMc/2klwLqgcfx8/s320/Captura+de+pantalla+-+100112+-+21%253A38%253A25.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
En este caso se usará el método manual y se selecciona en la ventana de dialogo.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://picasaweb.google.com/103048801515183985093/2012011002#5696192091137485682" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" src="http://1.bp.blogspot.com/-TBQj9L5Dwfk/TwzwhvSjq3I/AAAAAAAABMo/2lv1red_uZY/s320/Captura+de+pantalla+-+100112+-+21%253A39%253A12.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se edita el archivo /etc/pdnsd.conf .&lt;br /&gt;
Se agrega la siguiente información: &lt;br /&gt;
&lt;div style="color: red;"&gt;
&lt;b&gt;server {&lt;/b&gt;&lt;/div&gt;
&lt;div style="color: red;"&gt;
&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; label = "OpenNIC";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ip = 192.121.86.100; //IP del servidor DNS&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uptest = query;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Lrealiza consultas&amp;nbsp; DNS de una solicitud DNS.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; interface=wlan0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //La interface conectada a la red.&lt;br /&gt;}&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
Se modifica a yes el parámetro START_DAEMON&amp;nbsp; del archivo /etc/default/pdnsd para iniciar automáticamente el servicio pdnsd.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="color: red;"&gt;START_DAEMON=yes&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Al editar el archivo /etc/resolv.conf y agregar el servidor de DNS 127.0.0.1.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: red;"&gt;
&lt;b&gt;nameserver 127.0.0.1&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
Se reinicia el servicio pdnsd:&lt;br /&gt;
&lt;i style="color: blue;"&gt;# invoke-rc.d pdnsd restart&lt;br /&gt;Stopping pdnsd.&lt;br /&gt;Starting pdnsd.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Se hace una consulta con dig:&lt;br /&gt;
&lt;div style="color: blue;"&gt;
&lt;i&gt;dig www.barrapunto.com|grep "Query time"&lt;br /&gt;;; Query time: 316 msec&lt;br /&gt;&amp;nbsp;&lt;/i&gt;&lt;/div&gt;
&lt;i&gt;&lt;span style="color: blue;"&gt;dig www.barrapunto.com|grep "Query time"&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;;; Query time: 2 msec&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Para verificar el funcionamiento del servidor se ejecuta el siguiente comando:&lt;br /&gt;
&lt;div style="color: blue;"&gt;
&lt;i&gt;# pdnsd-ctl status&lt;br /&gt;Opening socket /var/cache/pdnsd/pdnsd.status&lt;br /&gt;pdnsd-1.2.8-par running on jewel.&lt;br /&gt;&lt;br /&gt;Cache status:&lt;br /&gt;=============&lt;br /&gt;2048 kB maximum disk cache size.&lt;br /&gt;56894 of 2107392 bytes (2.7%) memory cache used in 216 entries.&lt;br /&gt;&lt;br /&gt;Thread status:&lt;br /&gt;==============&lt;br /&gt;server status thread is running.&lt;br /&gt;pdnsd control thread is running.&lt;br /&gt;tcp server thread is running.&lt;br /&gt;udp server thread is running.&lt;br /&gt;19 query threads spawned in total (0 queries dropped).&lt;br /&gt;10 running query threads (10 active, 0 queued).&lt;br /&gt;&lt;br /&gt;Configuration:&lt;br /&gt;==============&lt;br /&gt;Global:&lt;br /&gt;-------&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cache size: 2048 kB&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Server directory: /var/cache/pdnsd&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Scheme file (for Linux pcmcia support): /var/lib/pcmcia/scheme&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Server port: 53&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Server ip (0.0.0.0=any available one): 127.0.0.1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ignore cache when link is down: off&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Maximum ttl: 604800&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Minimum ttl: 900&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Negative ttl: 900&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Negative RRS policy: default&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Negative domain policy: auth&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Run as: pdnsd&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Strict run as: on&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Use NSS: on&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Paranoid mode (cache pollution prevention): on&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ignore CD ('checking disabled') flag in queries: on&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Control socket permissions (mode): 600&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Maximum parallel queries served: 40&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Maximum queries queued for serving: 60&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Global timeout setting: 10&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Parallel queries increment: 2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Randomize records in answer: on&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Query method: udp_only&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Query port start: 1024&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Query port end: 65535&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCP server thread: on&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCP query timeout: 30&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Delegation-only zones: (none)&lt;br /&gt;Server 0:&lt;br /&gt;------&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; label: OpenNIC&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ip: 192.121.86.100&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; server assumed available: yes&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; port: 53&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uptest: query&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; timeout: 120&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uptest interval: 900&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ping timeout: 600&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ping ip: (using server ip)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; interface: wlan0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; device (for special Linux ppp device support): &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uptest command: &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uptest user: (process owner)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; force cache purging: off&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; server is cached: on&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lean query: on&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Use only proxy?: off&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Assumed root server: no&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Randomize server query order: no&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Default policy: included&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Policies: (none)&lt;br /&gt;Succeeded&lt;/i&gt;&lt;/div&gt;
&lt;div style="color: blue;"&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
Se pueden agregar tantas IPS como se quiera.&lt;br /&gt;
&lt;br /&gt;
Si desea más información para configurar pdnsd revise los siguientes enlaces:&lt;br /&gt;
 &lt;a href="https://wiki.archlinux.org/index.php/Pdnsd_%28Espa%C3%B1ol%29" target="_blank"&gt;https://wiki.archlinux.org/index.php/Pdnsd_(Espa%C3%B1ol)&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://manualinux.heliohost.org/pdnsd.html" target="_blank"&gt;http://manualinux.heliohost.org/pdnsd.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/882744969176160062-6309771421617333732?l=ernesto-ecrespo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/O1a0EDwnJ4c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/6309771421617333732/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=6309771421617333732" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/6309771421617333732?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/6309771421617333732?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/O1a0EDwnJ4c/servidor-proxy-dns-con-pdnsd.html" title="Servidor Proxy DNS con pdnsd" /><author><name>Ernesto Crespo</name><uri>https://profiles.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAABTg/KepLh0e_Jso/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-lcyn35r97ms/TwzwOPn_F0I/AAAAAAAABMc/2klwLqgcfx8/s72-c/Captura+de+pantalla+-+100112+-+21%253A38%253A25.png" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Troncal 7, Mérida, Venezuela</georss:featurename><georss:point>8.659772278875522 -71.10969543457031</georss:point><georss:box>8.596985778875522 -71.18865943457031 8.722558778875522 -71.03073143457031</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2012/01/servidor-proxy-dns-con-pdnsd.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08DQ3Y8fyp7ImA9WhRVEUg.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-3501606232988669769</id><published>2012-01-09T21:14:00.000-04:30</published><updated>2012-01-09T21:14:32.877-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-09T21:14:32.877-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="canaima" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><title>Feliz año 2012</title><content type="html">Les deseo a todos un Feliz año 2012 y que todas sus metas se cumplan. Este correo debí enviarlo los primeros días del año pero por motivos de viaje fue hasta ahorita que pude sentarme a escribir.&lt;br /&gt;
&lt;br /&gt;
Entre las metas de este blog fue el escribir para el año 2011 por lo menos más de 36 artículos que fue logrado el año 2009, en el 2011&amp;nbsp; se publicaron 49 artículos que da un promedio por mes de 4 artículos.&lt;br /&gt;
&lt;br /&gt;
Adicional a esto en el mes de Diciembre se logro superar la cantidad de visitas mensuales del blog de 3800 que fue el máximo a 4160 para ese mes según lo muestra la siguiente figura.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-LTZwxZ8oM-E/TwuTvAFMlHI/AAAAAAAABMQ/mZ3YE3kgIks/s1600/visitas31122011.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="94" src="http://4.bp.blogspot.com/-LTZwxZ8oM-E/TwuTvAFMlHI/AAAAAAAABMQ/mZ3YE3kgIks/s320/visitas31122011.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
La distribución por países de las visitas al blog en toda su vida es la siguiente:&lt;br /&gt;
&lt;table class="GMUUXGEDFN" style="width: 100%;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;div class="GMUUXGEDIN"&gt;
&lt;div&gt;
España&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 11.440&lt;/div&gt;
&lt;div class="GMUUXGEDIN"&gt;
Venezuela &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6.697&lt;/div&gt;
&lt;div class="GMUUXGEDIN"&gt;
México &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5.927 &lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;table class="GMUUXGEDFN" style="width: 100%;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Argentina&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4.261&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;table class="GMUUXGEDFN" style="width: 100%;"&gt;&lt;colgroup&gt;&lt;col&gt;&lt;/col&gt;&lt;col&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Estados Unidos 3.230&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
Chile &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 2.799&lt;br /&gt;
 Colombia&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2.042&lt;br /&gt;
Perú&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 757&lt;br /&gt;
Alemania&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 674&lt;br /&gt;
Países Bajos&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 509&lt;br /&gt;
&lt;br /&gt;
Muchas gracias a todos por leer el blog.&lt;br /&gt;
&lt;br /&gt;
Para este año espero terminar con los artículos sobre PyQt, PyGTK, gráficos con python, android con python y seguir con artículos sobre empaquetado para Python y Debian, de administración de servidores, mercurial, monitoreo entre otros temas. Posiblemente empezar a escribir sobre programación de Python con wxwidget.&lt;br /&gt;
&lt;br /&gt;
Es más, siguiendo el ejemplo de Blogeros como el sitio Orsai, dejo abierta la posibilidad de quienes leen este blog propongan temas, claro sobre software Libre y Linux.&lt;br /&gt;
&lt;br /&gt;
Por lo pronto aspiro que este año pueda escribir más de 50 artículos. Espero tener el tiempo y los temas preparados para lograrlo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/882744969176160062-3501606232988669769?l=ernesto-ecrespo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/5UveSOr48xE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/3501606232988669769/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=3501606232988669769" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/3501606232988669769?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/3501606232988669769?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/5UveSOr48xE/feliz-ano-2012.html" title="Feliz año 2012" /><author><name>Ernesto Crespo</name><uri>https://profiles.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAABTg/KepLh0e_Jso/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-LTZwxZ8oM-E/TwuTvAFMlHI/AAAAAAAABMQ/mZ3YE3kgIks/s72-c/visitas31122011.png" height="72" width="72" /><thr:total>1</thr:total><georss:featurename>Troncal 7, Mérida, Venezuela</georss:featurename><georss:point>8.667239198813222 -71.11930847167969</georss:point><georss:box>8.604451698813222 -71.19827247167969 8.730026698813223 -71.04034447167969</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2012/01/feliz-ano-2012.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MFR34-eCp7ImA9WhRXEU4.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-6973255471602376280</id><published>2011-12-11T19:06:00.001-04:30</published><updated>2011-12-17T10:53:36.050-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-17T10:53:36.050-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="canaima" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="numpy" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><category scheme="http://www.blogger.com/atom/ns#" term="pyQwt" /><category scheme="http://www.blogger.com/atom/ns#" term="gnome" /><title>Generar una gráfica en python con PyQwt. Parte 1</title><content type="html">Continuando con las librerías para generar gráficos en Python ahora explicaré como usar la librerías PyQwt de Qt para crear gráficas.&lt;br /&gt;
&lt;br /&gt;
Este ejemplo se baja en la introducción que tiene la página oficial de &lt;a href="http://pyqwt.sourceforge.net/doc5/introduction.html" target="_blank"&gt;PyQwt&lt;/a&gt;. En este caso se cambio el rango del arreglo y las funciones a graficar.&lt;br /&gt;
&lt;br /&gt;
En el ejemplo se crea el rango de valores con numpy, luego se crea la instancia de la Clase QApplication para crear las 2 curvas y luego salvarla en un archivo con formato png.&lt;br /&gt;
&lt;br /&gt;
El código se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;i&gt;#!/usr/bin/env python&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;i&gt;#Importar numpy&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;i&gt;import numpy as np&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;i&gt;#Importar las librerias Qt&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;i&gt;from PyQt4.Qt import *&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;i&gt;#Importar las librerias Qwt5&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;i&gt;from PyQt4.Qwt5 import *&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;i&gt;#De Qwt5 importar qplt&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;i&gt;from PyQt4.Qwt5.qplt import *&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;i&gt;#Importar sleep&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;i&gt;from time import sleep&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;i&gt;#Instanciar la clase QApplication&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;i&gt;application = QApplication([])&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;i&gt;# Crea un arreglo desde -4PI a 4Pi en incrementos de 0.01&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;i&gt;x = np.arange(-4*np.pi, 4*np.pi, 0.01)&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;i&gt;#Crea 2 curvas con el eje vertical en escala logaritmica.&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;i&gt;p = Plot(Curve(x, np.cos(x), Pen(Blue, 2), "cos(x)"),&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Curve(x, np.exp(x)+4+4*np.sin(x), Pen(Magenta,2), "exp(x)+4*sin(x)+4",Y2),&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Axis(Y2, Log),"PyQwt usando Qwt-%s " % QWT_VERSION_STR)&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;i&gt;#Hace una captura de pantalla de la imagen y lo guarda en un archivo con formato PNG&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;i&gt;QPixmap.grabWidget(p).save('cli-plot-1.png', 'PNG')&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
La gráfica generada se muestra en la siguiente figura:&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-qbKUuU8XWgw/Tuyy-m15JqI/AAAAAAAABI8/eLGSVkU0g14/s1600/grafica1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="214" src="http://1.bp.blogspot.com/-qbKUuU8XWgw/Tuyy-m15JqI/AAAAAAAABI8/eLGSVkU0g14/s320/grafica1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/882744969176160062-6973255471602376280?l=ernesto-ecrespo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/cLRs12dQxXs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/6973255471602376280/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=6973255471602376280" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/6973255471602376280?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/6973255471602376280?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/cLRs12dQxXs/generar-una-grafica-en-python-con-pyqwt.html" title="Generar una gráfica en python con PyQwt. Parte 1" /><author><name>Ernesto Crespo</name><uri>https://profiles.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAABTg/KepLh0e_Jso/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-qbKUuU8XWgw/Tuyy-m15JqI/AAAAAAAABI8/eLGSVkU0g14/s72-c/grafica1.png" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Carretera Via Araguita, Guacara, Venezuela</georss:featurename><georss:point>10.198703620830878 -67.87971496582031</georss:point><georss:box>10.136192620830878 -67.95867896582031 10.261214620830879 -67.80075096582031</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2011/12/generar-una-grafica-en-python-con-pyqwt.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YDRH89fCp7ImA9WhRQE0o.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-5904177613058248079</id><published>2011-12-08T11:49:00.001-04:30</published><updated>2011-12-08T14:36:15.164-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-08T14:36:15.164-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="canaima" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="control de versiones" /><category scheme="http://www.blogger.com/atom/ns#" term="ssh" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><category scheme="http://www.blogger.com/atom/ns#" term="Mercurial" /><title>Compartir repositorios Mercurial por ssh</title><content type="html">&lt;br /&gt;
&lt;a href="http://ernesto-ecrespo.blogspot.com/2011/08/compartir-repositorios-de-mercurial-con.html" target="_blank"&gt;En artículo anterior&lt;/a&gt; se explica como compartir un repositorio mercurial con mercurial-server, ahora se explicará como hacerlo usando ssh &amp;nbsp;con claves públicas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lo que primero se va a hacer es crear la clave pública para ssh y distribuirlo al equipo o los equipos, luego se verifica el funcionamiento del ssh con la clave pública. &lt;br /&gt;
&lt;br /&gt;
La idea es mantener respaldado la configuración de un equipo que está con control de versiones con mercurial usando &lt;a href="http://ernesto-ecrespo.blogspot.com/2011/07/gestionar-los-archivos-de-configuracion.html" target="_blank"&gt;etckeeper&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
En el servidor es necesario instalar etckeeper, mercurial y ssh.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;apt-get install etckeeper mercurial openssh-server&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Configurar etckeeper y mercurial.&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;vim /etc/etckeeper/etckeeper.conf&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Se descomenta y agrega lo siguiente en el archivo:&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;# The VCS to use.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;VCS="hg"&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;#VCS="git"&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;#VCS="bzr"&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;#VCS="darcs"&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;# Options passed to git commit when run by etckeeper.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;#GIT_COMMIT_OPTIONS=""&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;# Options passed to hg commit when run by etckeeper.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;HG_COMMIT_OPTIONS="-u ecrespo@gmail.com"&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;# Options passed to bzr commit when run by etckeeper.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;#BZR_COMMIT_OPTIONS=""&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;# Options passed to darcs record when run by etckeeper.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;#DARCS_COMMIT_OPTIONS="-a"&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;# Uncomment to avoid etckeeper committing existing changes&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;# to /etc automatically once per day.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;AVOID_DAILY_AUTOCOMMITS=1&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;# Uncomment to avoid etckeeper committing existing changes to&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;# /etc before installation. It will cancel the installation,&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;# so you can commit the changes by hand.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;#AVOID_COMMIT_BEFORE_INSTALL=1&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;# The high-level package manager that's being used.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;# (apt, pacman-g2, yum etc)&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;HIGHLEVEL_PACKAGE_MANAGER=apt&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;# The low-level package manager that's being used.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;# (dpkg, rpm, pacman-g2, etc)&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;LOWLEVEL_PACKAGE_MANAGER=dpkg&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;vim /etc/mercurial/hgrc&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;[ui]&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;username = "Ernesto Nadir Crespo Avila &amp;lt;ecrespo@gmail.com&amp;gt;"&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;editor = vim&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;# pedir indicación de archivos cambiados:&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;verbose=True&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Inicializar etckeeper.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;etckeeper init&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;...&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding ssl/certs/f950ccc2.0&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding ssl/certs/facacbc6.0&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding ssl/certs/ff783690.0&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding ssl/certs/signet_ca1_pem.pem&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding ssl/certs/signet_ca2_pem.pem&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding ssl/certs/signet_ca3_pem.pem&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding ssl/certs/signet_ocspklasa2_pem.pem&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding ssl/certs/signet_ocspklasa3_pem.pem&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding ssl/certs/signet_pca2_pem.pem&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding ssl/certs/signet_pca3_pem.pem&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding ssl/certs/signet_rootca_pem.pem&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding ssl/certs/signet_tsa1_pem.pem&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding ssl/certs/spi-ca-2003.pem&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding ssl/certs/spi-cacert-2008.pem&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding ssl/certs/ssl-cert-snakeoil.pem&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding ssl/certs/thawte_Primary_Root_CA.pem&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding ssl/openssl.cnf&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding ssl/private/ssl-cert-snakeoil.key&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding subversion/config&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding subversion/servers&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding sudoers&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding sudoers.d/README&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding sysctl.conf&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding sysctl.d/README.sysctl&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding sysctl.d/bindv6only.conf&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding terminfo/README&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding timezone&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding ts.conf&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding ucf.conf&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding ufw/applications.d/bind9&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding ufw/applications.d/openssh-server&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding ufw/applications.d/postfix&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding vga/dvorak-us.keymap&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding vga/libvga.config&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding vga/libvga.et4000&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding vga/null.keymap&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding vim/vimrc&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding vim/vimrc.tiny&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding w3m/config&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding w3m/mailcap&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding wgetrc&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding xml/catalog&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding xml/xml-core.xml&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Este comando agregará todos los archivos de configuración dentro del directorio /etc a un control de versiones, en este caso mercurial.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Al ejecutar el comando de mercurial para ver el estatus muestra los archivos que fueron agregados:&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;hg status /etc/&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;...&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;A sudoers&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;A sudoers.d/README&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;A sysctl.conf&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;A sysctl.d/README.sysctl&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;A sysctl.d/bindv6only.conf&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;A terminfo/README&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;A timezone&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;A ts.conf&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;A ucf.conf&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;A ufw/applications.d/bind9&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;A ufw/applications.d/openssh-server&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;A ufw/applications.d/postfix&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;A vga/dvorak-us.keymap&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;A vga/libvga.config&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;A vga/libvga.et4000&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;A vga/null.keymap&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;A vim/vimrc&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;A vim/vimrc.tiny&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;A w3m/config&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;A w3m/mailcap&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;A wgetrc&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;A xml/catalog&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;A xml/xml-core.xml&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ahora se hace el primer commit.&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;etckeeper commit "Inicializacion del control de versiones"&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;...&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;sysctl.conf&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;sysctl.d/README.sysctl&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;sysctl.d/bindv6only.conf&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;terminfo/README&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;timezone&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;ts.conf&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;ucf.conf&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;ufw/applications.d/bind9&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;ufw/applications.d/openssh-server&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;ufw/applications.d/postfix&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;vga/dvorak-us.keymap&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;vga/libvga.config&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;vga/libvga.et4000&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;vga/null.keymap&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;vim/vimrc&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;vim/vimrc.tiny&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;w3m/config&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;w3m/mailcap&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;wgetrc&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;xml/catalog&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;xml/xml-core.xml&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;committed changeset 0:10c12e9f2889&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ahora se creará la clave ssh y se copiará en el servidor.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;ssh-keygen -t rsa -C "ecrespo@gmail.com" -f hgernesto-identity&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;Generating public/private rsa key pair.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;Enter passphrase (empty for no passphrase):&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;Enter same passphrase again:&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;Your identification has been saved in hgernesto-identity.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;Your public key has been saved in hgernesto-identity.pub.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;The key fingerprint is:&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;ca:7a:09:57:77:85:9c:05:d8:73:ca:d0:b1:41:5c:11 ecrespo@gmail.com&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;The key's randomart image is:&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;+--[ RSA 2048]----+&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; B=BEo |&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;o Ooo &amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; o.= &amp;nbsp; |&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;. . + &amp;nbsp; &amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;| &amp;nbsp; &amp;nbsp; &amp;nbsp; .S. . &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;| &amp;nbsp; &amp;nbsp;.... &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;| &amp;nbsp; &amp;nbsp; oo. &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;| &amp;nbsp; &amp;nbsp; .o &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;| &amp;nbsp; &amp;nbsp;.. &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;+-----------------+&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se copia la clave pública al servidor.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;scp hgernesto-identity.pub ernesto@www.crespo.org.ve:.ssh/&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;ernesto@www.crespo.org.ve's password:&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;hgernesto-identity.pub &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 100% &amp;nbsp;399 &amp;nbsp; &amp;nbsp; 0.4KB/s &amp;nbsp; 00:00 &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Se accede al servidor:&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;ssh ernesto@www.crespo.org.ve&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;ernesto@www.crespo.org.ve's password:&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;Linux crespo.org.ve 2.6.26-2-vserver-amd64 #1 SMP Fri Aug 14 09:21:21 UTC 2009 x86_64&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;The programs included with the Debian GNU/Linux system are free software;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;the exact distribution terms for each program are described in the&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;individual files in /usr/share/doc/*/copyright.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;permitted by applicable law.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;Last login: Thu Dec &amp;nbsp;8 18:58:20 2011 from 190.75.37.237&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;ernesto@crespo:~$&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Se agrega la llave publica al archivo authorized_keys.&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;cd .ssh&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;cat hgernesto-identity.pub &amp;amp;gt;&amp;amp;gt; &amp;nbsp;authorized_keys&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Se regresa al equipo que se conectará al servidor.&lt;br /&gt;
&lt;br /&gt;
Se crea el archivo ~/.ssh/config Se agrega el host, el usuario y la clave privada que se va a usar para la conexión ssh.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Host www.crespo.org.ve&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp; &amp;nbsp; user ernesto&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp; &amp;nbsp; IdentityFile ~/.ssh/hgernesto-identity&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se verifica que se conecte al servidor usando la llave pública.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;ssh www.crespo.org.ve -i ~/.ssh/hgernesto-identity -l ernesto&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;Linux crespo.org.ve 2.6.26-2-vserver-amd64 #1 SMP Fri Aug 14 09:21:21 UTC 2009 x86_64&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;The programs included with the Debian GNU/Linux system are free software;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;the exact distribution terms for each program are described in the&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;individual files in /usr/share/doc/*/copyright.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;permitted by applicable law.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;Last login: Thu Dec &amp;nbsp;8 19:20:08 2011 from 190.75.37.237&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;ernesto@crespo:~$&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Esta vez el servidor no pidió clave para el usuario.&lt;br /&gt;
&lt;br /&gt;
Ahora se va a clonar el directorio etc para tener la configuración en el home del usuario.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;sudo hg clone /etc conf-www.respo.org.ve&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;...&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;getting subversion/servers&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;getting sudoers&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;getting sudoers.d/README&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;getting sysctl.conf&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;getting sysctl.d/README.sysctl&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;getting sysctl.d/bindv6only.conf&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;getting terminfo/README&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;getting timezone&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;getting ts.conf&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;getting ucf.conf&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;getting ufw/applications.d/bind9&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;getting ufw/applications.d/openssh-server&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;getting ufw/applications.d/postfix&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;getting vga/dvorak-us.keymap&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;getting vga/libvga.config&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;getting vga/libvga.et4000&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;getting vga/null.keymap&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;getting vim/vimrc&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;getting vim/vimrc.tiny&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;getting w3m/config&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;getting w3m/mailcap&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;getting wgetrc&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;getting xml/catalog&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;getting xml/xml-core.xml&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;1775 files updated, 0 files merged, 0 files removed, 0 files unresolved&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Se cambia el dueño y el grupo del repositorio ya que pertenece a root y no se va &amp;nbsp;a poder clonar con ese dueño.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;sudo chown -R ernesto.ecrespo conf-www.respo.org.ve/&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ahora se prueba realizar la clonación del repositorio del servidor en la máquina local.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;ernesto@zeath:~$ hg clone ssh://ernesto@www.crespo.org.ve/repo/conf-www.respo.org.ve&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;destination directory: conf-www.respo.org.ve&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;requesting all changes&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding changesets&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding manifests&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;adding file changes&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;added 1 changesets with 1775 changes to 1775 files&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;updating to branch default&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;1775 files updated, 0 files merged, 0 files removed, 0 files unresolved&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;remote: 1 changesets found&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Se verifica el repositorio local.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;ernesto@zeath:~$ hg log conf-www.respo.org.ve/&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;changeset: &amp;nbsp; 0:10c12e9f2889&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;tag: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; tip&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;user: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ecrespo@gmail.com&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;date: &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Thu Dec 08 19:11:24 2011 +0000&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;summary: &amp;nbsp; &amp;nbsp; Inicializacion del control de versiones&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Ya se tiene respaldada la configuración del servidor por medio de control de versiones, si se desea tener automatizado el proceso se puede crear scripts que se coloquen en el cron de manera que diariamente se tenga actualizado el respaldo de la configuración del servidor por medio de control de versiones distribuido (mercurial).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es recomendable sacar del control de versiones los archivos shadow, passwd y group.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/882744969176160062-5904177613058248079?l=ernesto-ecrespo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/pIUyNDy4I0c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/5904177613058248079/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=5904177613058248079" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/5904177613058248079?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/5904177613058248079?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/pIUyNDy4I0c/compartir-repositorios-mercurial-por.html" title="Compartir repositorios Mercurial por ssh" /><author><name>Ernesto Crespo</name><uri>https://profiles.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAABTg/KepLh0e_Jso/s512-c/photo.jpg" /></author><thr:total>0</thr:total><georss:featurename>Av Alberto Carnevali, Mérida, Venezuela</georss:featurename><georss:point>8.613270401664213 -71.14643096923828</georss:point><georss:box>8.581870401664213 -71.18591296923829 8.644670401664213 -71.10694896923827</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2011/12/compartir-repositorios-mercurial-por.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0AMRHc6eyp7ImA9WhRSE08.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-2003134590006646859</id><published>2011-11-14T21:30:00.001-04:30</published><updated>2011-11-14T22:26:25.913-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-14T22:26:25.913-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="canaima" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="Empaquetado" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><title>Creación de paquete Debian que contiene un archivo cron con config-package-dev</title><content type="html">El paquete config-package-dev facilita la creación de un paquete Debian que contenga un archivo de configuración de cron.&lt;br /&gt;
&lt;br /&gt;
Para este caso se creará un archivo cron para el programa logcheck. Este programa estará como Pre-Depends para que este instalado y configurado antes de instalar el paquete con la configuración de logcheck en el cron.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Instalar logcheck:&lt;br /&gt;
&lt;div style="color: blue;"&gt;
apt-get install logcheck&lt;/div&gt;
&lt;br /&gt;
El archivo cron para logcheck contendrá lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: red;"&gt;
&lt;i&gt;# /etc/cron.d/logcheck: crontab entries for the logcheck package&lt;br /&gt;&lt;br /&gt;PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin&lt;br /&gt;MAILTO=root&lt;br /&gt;&lt;br /&gt;@reboot&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logcheck&amp;nbsp;&amp;nbsp;&amp;nbsp; if [ -x /usr/sbin/logcheck ]; then nice -n10 /usr/sbin/logcheck -R; fi&lt;br /&gt;* * * * *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logcheck&amp;nbsp;&amp;nbsp;&amp;nbsp; if [ -x /usr/sbin/logcheck ]; then nice -n10 /usr/sbin/logcheck; fi&lt;br /&gt;&lt;br /&gt;# EOF&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
Procedimiento para la creación del paquete:&lt;br /&gt;
&lt;br /&gt;
1. Creación del directorio de trabajo y del directorio Debian:&lt;br /&gt;
&lt;div style="color: blue;"&gt;
mkdir -p canaima-cron-logcheck-0.1&lt;/div&gt;
&lt;div style="color: blue;"&gt;
mkdir -p canaima-cron-logcheck-0.1/debian&lt;/div&gt;
&lt;br /&gt;
2. Se crea el archivo debian/changelog&lt;br /&gt;
&lt;div style="color: red;"&gt;
&lt;i&gt;canaima-cron-logcheck (0.1) unstable; urgency=low&lt;br /&gt;&lt;br /&gt;&amp;nbsp; * Initial release.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;-- Ernesto Nadir Crespo Avila &amp;lt;ecrespo@gmail.com&amp;gt;&amp;nbsp; Mon, 14 Nov 2011 21:48:20 -0430&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
3. Se crea el archivo compat con el valor de 7.&lt;br /&gt;
&lt;br /&gt;
4. Se crea el archivo control y control.in con lo siguiente:&lt;br /&gt;
Se coloca logcheck como predependencia, se define el standar version con valor 3.9.2.&lt;br /&gt;
&lt;div style="color: red;"&gt;
&lt;i&gt;Source: canaima-cron-logcheck&lt;br /&gt;Section: config&lt;br /&gt;Priority: extra&lt;br /&gt;Maintainer: Ernesto Nadir Crespo Avila &amp;lt;ecrespo@gmail.com&amp;gt;&lt;br /&gt;Build-Depends: cdbs (&amp;gt;= 0.4.23-1.1), debhelper (&amp;gt;= 4.2.0), config-package-dev (&amp;gt;= 4.5~)&lt;br /&gt;Standards-Version: 3.9.2&lt;br /&gt;&lt;br /&gt;Package: canaima-cron-logcheck&lt;br /&gt;Architecture: all&lt;br /&gt;Depends: cdbs, ${misc:Depends}&lt;br /&gt;Pre-Depends: logcheck&lt;br /&gt;Provides: ${diverted-files}&lt;br /&gt;Conflicts: ${diverted-files}&lt;br /&gt;Description: Configuracion de cron para logcheck&lt;br /&gt;&amp;nbsp;Configuracion de cron para logcheck.&lt;/i&gt;&lt;/div&gt;
&lt;div style="color: red;"&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
5. Se crea el archivo debian/copyright:&lt;br /&gt;
Se mantiene el autor del paquete ya que se está usando tal cual el ejemplo de cron para logcheck de config-package-dev.&lt;br /&gt;
&lt;div style="color: red;"&gt;
&lt;i&gt;canaima-cron-logcheck.&lt;br /&gt;Example config-package-dev package.&lt;br /&gt;&lt;br /&gt;Author: Tim Abbott &amp;lt;tabbott@mit.edu&amp;gt;&lt;br /&gt;&lt;br /&gt;Copyright © 2008 Tim Abbott &amp;lt;tabbott@mit.edu&amp;gt;&lt;br /&gt;&lt;br /&gt;Permission is hereby granted, free of charge, to any person obtaining&lt;br /&gt;a copy of this software and associated documentation files (the&lt;br /&gt;"Software"), to deal in the Software without restriction, including&lt;br /&gt;without limitation the rights to use, copy, modify, merge, publish,&lt;br /&gt;distribute, sublicense, and/or sell copies of the Software, and to&lt;br /&gt;permit persons to whom the Software is furnished to do so, subject to&lt;br /&gt;the following conditions:&lt;br /&gt;&lt;br /&gt;The above copyright notice and this permission notice shall be&lt;br /&gt;included in all copies or substantial portions of the Software.&lt;br /&gt;&lt;br /&gt;THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,&lt;br /&gt;EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF&lt;br /&gt;MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND&lt;br /&gt;NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE&lt;br /&gt;LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION&lt;br /&gt;OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION&lt;/i&gt;&lt;/div&gt;
&lt;div style="color: red;"&gt;
&lt;i&gt;WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
6. Se crea el archivo debian/canaima-cron-logcheck.cron.d con el contenido del cron para logcheck:&lt;br /&gt;
&lt;div style="color: red;"&gt;
&lt;i&gt;# /etc/cron.d/logcheck: crontab entries for the logcheck package&lt;br /&gt;&lt;br /&gt;PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin&lt;br /&gt;MAILTO=root&lt;br /&gt;&lt;br /&gt;@reboot&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logcheck&amp;nbsp;&amp;nbsp;&amp;nbsp; if [ -x /usr/sbin/logcheck ]; then nice -n10 /usr/sbin/logcheck -R; fi&lt;br /&gt;* * * * *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logcheck&amp;nbsp;&amp;nbsp;&amp;nbsp; if [ -x /usr/sbin/logcheck ]; then nice -n10 /usr/sbin/logcheck; fi&lt;br /&gt;&lt;br /&gt;# EOF&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
7. Se crea el archivo debian/rules con el siguiente contenido:&lt;br /&gt;
&lt;div style="color: red;"&gt;
&lt;i&gt;#!/usr/bin/make -f&lt;br /&gt;&lt;br /&gt;DEB_DIVERT_EXTENSION = .canaima&lt;br /&gt;&lt;br /&gt;# This will remove /etc/cron.d/logcheck&lt;br /&gt;DEB_REMOVE_FILES_canaima-cron-logcheck += \&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /etc/cron.d/logcheck&lt;br /&gt;&lt;br /&gt;# We will install (using dh_installcron, by placing the new cron job&lt;br /&gt;# at debian/canaima-cron-logcheck.cron.d) a new version that runs&lt;br /&gt;# every minute, rather than every 30 minutes.&amp;nbsp; This will generate a&lt;br /&gt;# lot of mail.&amp;nbsp; Note that we cannot install a new file to the path&lt;br /&gt;# /etc/cron.d/logcheck from which a file was removed using&lt;br /&gt;# DEB_REMOVE_FILES.&lt;br /&gt;&lt;br /&gt;include /usr/share/cdbs/1/rules/debhelper.mk&lt;br /&gt;include /usr/share/cdbs/1/rules/config-package.mk&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
8. Se le agrega permiso de ejecución al archivo debian/rules:&lt;br /&gt;
&lt;div style="color: blue;"&gt;
chmod a+x debian/rules&lt;/div&gt;
&lt;br /&gt;
9. Al final se tienen los siguientes archivos:&lt;br /&gt;
&lt;div style="color: blue;"&gt;
ecrespo@jewel:~/canaima/canaima-cron-logcheck-0.1$ ls -l debian/&lt;br /&gt;total 28&lt;br /&gt;-rw-r--r-- 1 ecrespo ecrespo&amp;nbsp; 347 nov 14 22:02 canaima-cron-logcheck.cron.d&lt;br /&gt;-rw-r--r-- 1 ecrespo ecrespo&amp;nbsp; 157 nov 14 21:50 changelog&lt;br /&gt;-rw-r--r-- 1 ecrespo ecrespo&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 nov 14 21:50 compat&lt;br /&gt;-rw-r--r-- 1 ecrespo ecrespo&amp;nbsp; 481 nov 14 21:55 control&lt;br /&gt;-rw-r--r-- 1 ecrespo ecrespo&amp;nbsp; 481 nov 14 21:55 control.in&lt;br /&gt;-rw-r--r-- 1 ecrespo ecrespo 1169 nov 14 22:01 copyright&lt;br /&gt;-rwxr-xr-x 1 ecrespo ecrespo&amp;nbsp; 612 nov 14 22:06 rules&lt;/div&gt;
&lt;br /&gt;
10. Se crea y se firma el paquete canaima-cron-logcheck-0.1:&lt;br /&gt;
&lt;div style="color: blue;"&gt;
dpkg-buildpackage -rfakeroot -kC97E7015&lt;/div&gt;
&lt;br /&gt;
11. Al final se creán los siguientes archivos:&lt;br /&gt;
&lt;div style="color: blue;"&gt;
ls -l canaima-cron-logcheck*&lt;br /&gt;-rw-r--r-- 1 ecrespo ecrespo 2902 nov 14 22:08 canaima-cron-logcheck_0.1_all.deb&lt;br /&gt;-rw-r--r-- 1 ecrespo ecrespo&amp;nbsp; 876 nov 14 22:08 canaima-cron-logcheck_0.1.dsc&lt;br /&gt;-rw-r--r-- 1 ecrespo ecrespo 1551 nov 14 22:09 canaima-cron-logcheck_0.1_i386.changes&lt;br /&gt;-rw-r--r-- 1 ecrespo ecrespo 1807 nov 14 22:08 canaima-cron-logcheck_0.1.tar.gz&lt;/div&gt;
&lt;div style="color: blue;"&gt;
&lt;br /&gt;&lt;/div&gt;
12. Se verifica si el paquete cumple con las políticas de Debian con lintian:&lt;br /&gt;
&lt;div style="color: blue;"&gt;
lintian -i canaima-cron-logcheck_0.1.dsc&lt;/div&gt;
&lt;br /&gt;
13. Se instala el paquete:&lt;br /&gt;
&lt;div style="color: blue;"&gt;
dpkg -i canaima-cron-logcheck_0.1_all.deb&lt;/div&gt;
&lt;br /&gt;
14. El archivo del cron se encuentra ya instalado:&lt;br /&gt;
&lt;div style="color: blue;"&gt;
ls -l /etc/cron.d&lt;br /&gt;total 12&lt;br /&gt;-rw-r--r-- 1 root root 244 nov&amp;nbsp; 1&amp;nbsp; 2009 anacron&lt;br /&gt;-rw-r--r-- 1 root root 347 nov 14 22:08 canaima-cron-logcheck&lt;br /&gt;-rw-r--r-- 1 root root 544 sep 13 05:59 php5&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/882744969176160062-2003134590006646859?l=ernesto-ecrespo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/FEVy7RPm9Ew" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/2003134590006646859/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=2003134590006646859" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/2003134590006646859?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/2003134590006646859?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/FEVy7RPm9Ew/creacion-de-paquete-debian-que-contiene.html" title="Creación de paquete Debian que contiene un archivo cron con config-package-dev" /><author><name>Ernesto Crespo</name><uri>https://profiles.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAABTg/KepLh0e_Jso/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2011/11/creacion-de-paquete-debian-que-contiene.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMCQXY_eSp7ImA9WhRSEkw.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-7882799812669786551</id><published>2011-11-13T13:40:00.001-04:30</published><updated>2011-11-13T16:37:40.841-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-13T16:37:40.841-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="canaima" /><category scheme="http://www.blogger.com/atom/ns#" term="ssh" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="Empaquetado" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><title>Como crear un metapaquete de configuración con config-package-dev</title><content type="html">Anteriormente se explico como crear un metapaquete con equivs, se tiene también el paquete config-package-dev el cual permite crear paquetes de configuración donde se puede cambiar la configuración de otros archivos dentro del directorio /etc/ .&lt;br /&gt;
&lt;br /&gt;
Este artículo se basa en el &lt;a href="http://debathena.mit.edu/config-package-dev/" target="_blank"&gt;tutorial del MIT sobre creación de paquetes de configuración para Debian&lt;/a&gt; y una guía en el &lt;a href="http://wiki.debian.org/ConfigPackages" target="_blank"&gt;wiki de Debian&lt;/a&gt;. El proceso de como adoptar un paquete y empaquetar se explica en una guía que se encuentra en el &lt;a href="http://wiki.debian.org/AdoptarUnPaquete" target="_blank"&gt;wiki de Debian&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como ejemplo se usará el paquete openssh-server que crea un archivo con el nombre&amp;nbsp; /etc/ssh/sshd_config . Este archivo contiene la configuración necesaria para arrancar un servidor ssh.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Instalando openssh-server:&lt;br /&gt;
&lt;span style="color: blue;"&gt;apt-get install openssh-server config-package-dev&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
El contenido del archivo es el siguiente:&lt;br /&gt;
&lt;div style="color: red;"&gt;
&lt;i&gt;Port 22&lt;/i&gt;&lt;/div&gt;
&lt;div style="color: red;"&gt;
&lt;i&gt;Protocol 2&lt;br /&gt;HostKey /etc/ssh/ssh_host_rsa_key&lt;br /&gt;HostKey /etc/ssh/ssh_host_dsa_key&lt;br /&gt;HostKey /etc/ssh/ssh_host_ecdsa_key&lt;/i&gt;&lt;/div&gt;
&lt;div style="color: red;"&gt;
&lt;i&gt;UsePrivilegeSeparation yes&lt;/i&gt;&lt;/div&gt;
&lt;div style="color: red;"&gt;
&lt;i&gt;KeyRegenerationInterval 3600&lt;br /&gt;ServerKeyBits 768&lt;/i&gt;&lt;/div&gt;
&lt;div style="color: red;"&gt;
&lt;i&gt;SyslogFacility AUTH&lt;br /&gt;LogLevel INFO&lt;br /&gt;LoginGraceTime 120&lt;br /&gt;&lt;b&gt;PermitRootLogin yes&lt;/b&gt;&lt;br /&gt;StrictModes yes&lt;br /&gt;RSAAuthentication yes&lt;br /&gt;PubkeyAuthentication yes&lt;/i&gt;&lt;/div&gt;
&lt;div style="color: red;"&gt;
&lt;i&gt;IgnoreRhosts yes&lt;br /&gt;RhostsRSAAuthentication no&lt;br /&gt;HostbasedAuthentication no&lt;br /&gt;PermitEmptyPasswords no&lt;/i&gt;&lt;/div&gt;
&lt;div style="color: red;"&gt;
&lt;i&gt;ChallengeResponseAuthentication no&lt;/i&gt;&lt;/div&gt;
&lt;div style="color: red;"&gt;
&lt;i&gt;&lt;b&gt;X11Forwarding yes&lt;/b&gt;&lt;br /&gt;X11DisplayOffset 10&lt;br /&gt;PrintMotd no&lt;br /&gt;PrintLastLog yes&lt;br /&gt;TCPKeepAlive yes&lt;/i&gt;&lt;/div&gt;
&lt;div style="color: red;"&gt;
&lt;i&gt;AcceptEnv LANG LC_*&lt;br /&gt;Subsystem sftp /usr/lib/openssh/sftp-server&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
Este archivo tiene el siguiente hash md5.&lt;br /&gt;
&lt;div style="color: blue;"&gt;
8caefdd9e251b7cc1baa37874149a870&amp;nbsp; /etc/ssh/sshd_config&lt;/div&gt;
&lt;br /&gt;
La idea es modificar este archivo para que no permita que el usuario root se conecte por ssh y no permitir reenvio de aplicaciones gráficas.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;Procedimiento para crear paquete de configuración sshd-config:&lt;br /&gt;
1.Crear el directorio de trabajo &lt;br /&gt;
&lt;div style="color: blue;"&gt;
mkdir canaima-sshd-config-0.1&lt;/div&gt;
2. Cambiarse a dicho directorio&lt;br /&gt;
 &lt;span style="color: blue;"&gt;cd canaima-sshd-config-0.1&lt;/span&gt;&lt;br /&gt;
3. Crear los directorios debian y files&lt;br /&gt;
mkdir -p debian files&lt;br /&gt;
4. En files crear el directorio etc, luego dentro de el, el directorio ssh y copiar el archivo sshd_config de /etc/ssh/ al directorio creado.&lt;br /&gt;
mkdir -p files/etc&lt;br /&gt;
mkdir -p files/etc/ssh&lt;br /&gt;
cp /etc/ssh/sshd_config ./files/etc/ssh/sshd_config.canaima&lt;br /&gt;
&lt;br /&gt;
5. Modificar el archivo para que el usuario root no pueda acceder al servidor ssh y que no se pueda reenviar paquetes de X11. Las líneas son:&lt;br /&gt;
&lt;div style="color: red;"&gt;
&lt;i&gt;PermitRootLogin no&lt;/i&gt;&lt;/div&gt;
&lt;div style="color: red;"&gt;
&lt;i&gt;X11Forwarding no&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
6. Dentro del directorio debian se creo el archivo changelog con el siguiente contenido:&lt;br /&gt;
&lt;i&gt;&lt;span style="color: red;"&gt;canaima-sshd-config (0.1) unstable; urgency=low&lt;/span&gt;&lt;br style="color: red;" /&gt;&lt;br style="color: red;" /&gt;&lt;span style="color: red;"&gt;&amp;nbsp; * Initial release.&lt;/span&gt;&lt;br style="color: red;" /&gt;&lt;br style="color: red;" /&gt;&lt;span style="color: red;"&gt;&amp;nbsp;-- Ernesto Nadir Crespo Avila &amp;lt;ecrespo@gmail.com&amp;gt;&amp;nbsp; Sun, 13 Nov 2011 10:22:48 -0430&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
7. Se crea el archivo debian/compat&amp;nbsp; con el valor 7.&lt;br /&gt;
8. Se crea el archivo debian/control y debian/control.in con la siguiente información:&lt;br /&gt;
&lt;div style="color: red;"&gt;
&lt;i&gt;Source: canaima-sshd-config&lt;br /&gt;Section: config&lt;br /&gt;Priority: extra&lt;br /&gt;Maintainer: Ernesto Nadir Crespo Avila &amp;lt;ecrespo@gmail.com&amp;gt;&lt;br /&gt;Build-Depends: cdbs (&amp;gt;= 0.4.23-1.1), debhelper (&amp;gt;= 4.2.0), config-package-dev (&amp;gt;= 4.5~)&lt;br /&gt;Standards-Version: 3.9.2&lt;/i&gt;&lt;/div&gt;
&lt;div style="color: red;"&gt;
&lt;i&gt;&lt;br /&gt;Package: canaima-sshd-config&lt;br /&gt;Architecture: all&lt;br /&gt;Pre-Depends: openssh-server&lt;br /&gt;Depends: cdbs, ${misc:Depends}&lt;br /&gt;Provides: ${diverted-files}&lt;br /&gt;Conflicts: ${diverted-files}&lt;br /&gt;Description: Archivo de configuracion de ssh&lt;br /&gt;&amp;nbsp;Archivo de configuracion del servidor ssh.&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
En este caso se coloca el párametro Pre-Depends ya que se necesita tener el servidor openssh instalado y bien configurado para poder agregarle cambios al archivo /etc/ssh/sshd_config .&lt;br /&gt;
&lt;br /&gt;
9. Se crea el archivo debian/copyright, en este caso se está usando el mismo copyright de los archivos de ejemplo de config-package-dev:&lt;br /&gt;
&lt;div style="color: red;"&gt;
&lt;i&gt;canaima-ssh-config package.&lt;br /&gt;&lt;br /&gt;Author: Ernesto Nadir Crespo Avila &amp;lt;ecrespo@gmail.com&amp;gt;&lt;br /&gt;&lt;br /&gt;Copyright © 2011 Ernesto Nadir Crespo Avila &amp;lt;ecrespo@gmail.com&amp;gt;&lt;br /&gt;&lt;br /&gt;Permission is hereby granted, free of charge, to any person obtaining&lt;br /&gt;a copy of this software and associated documentation files (the&lt;br /&gt;"Software"), to deal in the Software without restriction, including&lt;br /&gt;without limitation the rights to use, copy, modify, merge, publish,&lt;br /&gt;distribute, sublicense, and/or sell copies of the Software, and to&lt;br /&gt;permit persons to whom the Software is furnished to do so, subject to&lt;br /&gt;the following conditions:&lt;br /&gt;&lt;br /&gt;The above copyright notice and this permission notice shall be&lt;br /&gt;included in all copies or substantial portions of the Software.&lt;/i&gt;&lt;/div&gt;
&lt;div style="color: red;"&gt;
&lt;i&gt;THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,&lt;br /&gt;EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF&lt;br /&gt;MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND&lt;br /&gt;NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE&lt;br /&gt;LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION&lt;br /&gt;OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION&lt;br /&gt;WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
10. Se crea el archivo debian/canaima-sshd-config.install . Este archivo define donde se va a tomar los archivos de configuración y a donde se van a copiar.&lt;br /&gt;
&lt;div style="color: red;"&gt;
&lt;i&gt;files/* /&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
11. Se crea el archivo debian/rules. En este archivo se define la extensión .canaima, la cual permite diferenciar de los paquetes base de Debian de la meta distribución canaima, además se define el archivo a modificar y luego los include de los cdbs:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: red;"&gt;
&lt;i&gt;#!/usr/bin/make -f&lt;br /&gt;&lt;br /&gt;DEB_DIVERT_EXTENSION = .canaima&lt;br /&gt;# Replace some base files with simple replacements.&lt;br /&gt;DEB_DIVERT_FILES_canaima-sshd-config += \&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /etc/ssh/sshd_config.canaima&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;# These files are installed via dh_install from the files/ directory&lt;br /&gt;# (see debian/canaima-sshd-config.install)&lt;br /&gt;&lt;br /&gt;include /usr/share/cdbs/1/rules/debhelper.mk&lt;br /&gt;include /usr/share/cdbs/1/rules/config-package.mk&lt;/i&gt;&lt;/div&gt;
&lt;div style="color: red;"&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
12. Crear el paquete debian y firmarlo con la llave gpg:&lt;br /&gt;
&lt;div style="color: blue;"&gt;
dpkg-buildpackage -rfakeroot -kC97E7015&lt;/div&gt;
&lt;br /&gt;
Al ejectuar un ls&amp;nbsp; se puede ver los archivos creados:&lt;br /&gt;
&lt;div style="color: blue;"&gt;
ls -l canaima-sshd*&lt;br /&gt;-rw-r--r-- 1 ecrespo ecrespo 3948 nov 13 16:09 canaima-sshd-config_0.1_all.deb&lt;br /&gt;-rw-r--r-- 1 ecrespo ecrespo&amp;nbsp; 864 nov 13 16:09 canaima-sshd-config_0.1.dsc&lt;br /&gt;-rw-r--r-- 1 ecrespo ecrespo 1521 nov 13 16:09 canaima-sshd-config_0.1_i386.changes&lt;br /&gt;-rw-r--r-- 1 ecrespo ecrespo 2745 nov 13 16:09 canaima-sshd-config_0.1.tar.gz&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
13. Se verifica que el paquete Debian cumple con el policy de Debian:&lt;br /&gt;
&lt;div style="color: blue;"&gt;
lintian -i canaima-sshd-config_0.1.dsc&lt;/div&gt;
&lt;br /&gt;
14. Verificar la instalación del paquete Debian.&lt;br /&gt;
&lt;div style="color: blue;"&gt;
sudo dpkg -i canaima-sshd-config_0.1_all.deb &lt;br /&gt;[sudo] password for ecrespo: &lt;br /&gt;Selecting previously unselected package canaima-sshd-config.&lt;br /&gt;(Leyendo la base de datos ... 418546 ficheros o directorios instalados actualmente.)&lt;br /&gt;Desempaquetando canaima-sshd-config (de canaima-sshd-config_0.1_all.deb) ...&lt;br /&gt;Configurando canaima-sshd-config (0.1) ...&lt;br /&gt;Añadiendo `desviación de /etc/ssh/sshd_config a /etc/ssh/sshd_config.canaima-orig por canaima-sshd-config'&lt;/div&gt;
&lt;br /&gt;
15. Al ejecutar un ls -l en el directorio /etc/ssh/sshd_config* se verá que se crea un enlace al archivo original y se muestra los archivos agregados de la extensión canaima:&lt;br /&gt;
&lt;div style="color: blue;"&gt;
root@jewel:/etc/ssh# ls -l sshd_config*&lt;br /&gt;lrwxrwxrwx 1 root root&amp;nbsp;&amp;nbsp; 19 nov 13 16:16 sshd_config -&amp;gt; sshd_config.canaima&lt;br /&gt;-rw-r--r-- 1 root root 2487 nov 13 10:15 sshd_config.canaima&lt;br /&gt;-rw-r--r-- 1 root root 2489 nov 13 13:20 sshd_config.canaima-orig&lt;/div&gt;
&lt;br /&gt;
16. Al revisar el archivo se nota que el campo para permitir a root conectarse al servidor ssh se encuentra en no, igual caso para el párametro de reenvio de X11. Se revisa el hash md5 del archivo y se nota que del archivo original al actual son diferenteste:&lt;br /&gt;
a358d423fa6b8bf640a7fd1e06731ea3&amp;nbsp; sshd_config&lt;br /&gt;
&lt;br /&gt;
Al crear paquetes de configuración de esta forma (una forma limpia de modificar archivos de configuración) y al eliminar el paquete de configuración los archivos originales se vuelven a usar:&lt;br /&gt;
&amp;nbsp;&lt;span style="color: blue;"&gt;apt-get remove -f canaima-sshd-config&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: blue;"&gt;root@jewel:/etc/ssh# md5sum sshd_config&lt;/span&gt;&lt;br style="color: blue;" /&gt;&lt;span style="color: blue;"&gt;8caefdd9e251b7cc1baa37874149a870&amp;nbsp; sshd_config&lt;/span&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se tienen varios ejemplos para usar config-package-dev como por ejemplo paquetes binarios, configuración de cron, etc.&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/882744969176160062-7882799812669786551?l=ernesto-ecrespo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/sZZ8BlpZM5M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/7882799812669786551/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=7882799812669786551" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/7882799812669786551?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/7882799812669786551?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/sZZ8BlpZM5M/como-crear-un-metapaquete-de.html" title="Como crear un metapaquete de configuración con config-package-dev" /><author><name>Ernesto Crespo</name><uri>https://profiles.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAABTg/KepLh0e_Jso/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2011/11/como-crear-un-metapaquete-de.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4DRnczfSp7ImA9WhdVF0U.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-5220783666318994128</id><published>2011-09-23T08:49:00.000-04:30</published><updated>2011-09-23T08:49:37.985-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-23T08:49:37.985-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="tiflotecnologia" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="accesibilidad" /><category scheme="http://www.blogger.com/atom/ns#" term="Empaquetado" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><title>Como crear un metapaquete (metapaquete con archivos de  configuración)</title><content type="html">Continuando con los artículos de empaquetados, ahora se explicará como agregar archivos de configuración al metapaquete.&lt;br /&gt;
&lt;br /&gt;
La idea es agregar los archivos de configuración de orca que se guardan en .orca en el home de los usuarios. Para ello se va a copiar el directorio .orca con los archivos que contenga el directorio a /etc/skell/ .&lt;br /&gt;
&lt;br /&gt;
Se ejecuta el comando equivs-control:&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;equivs-control canaima-accesibilidad-escritorio&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
El archivo va a contener lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Section: misc&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Priority: optional&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Homepage: http://canaima.softwarelibre.gob.ve&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Standards-Version: 3.9.1&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Package: canaima-accesibilidad-visual-escritorio&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Version: 1:0.1&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Maintainer: Ernesto Nadir Crespo Avila &amp;lt;ecrespo@centitel.gob.ve&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Depends: at-spi, brltty, brltty-flite, brltty-speechd, brltty-x11, listen, espeak, festival, festvox-sflpc16k, festvox-palpc16k, gnome-orca, gnome-accessibility-themes, gnome-accessibility, libcolorblind0, gnome-mag, libgail-common, mousetweaks, dots, ${misc:Depends}&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Architecture: any&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Copyright: copyright&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Changelog: changelog&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Files: ./conf/.orca/user-settings.py /etc/skell/.orca/user-settings.py&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;./conf/.orca/app-settings/__init__.py /etc/skell/.orca/app-settings/__init__.py&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;./conf/.orca/orca-scripts/__init__.py /etc/skell/.orca/orca-scripts/__init__.py&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;./conf/.orca/user-settings.pyc /etc/skell/.orca/user-settings.pyc&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;./conf/.orca/app-settings/__init__.pyc /etc/skell/.orca/app-settings/__init__.pyc&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;./conf/.orca/orca-scripts/__init__.pyc /etc/skell/.orca/orca-scripts/__init__.pyc&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Description: Programas de Accesibilidad para Canaima GNU/Linux&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;Este metapaquete provee los programas de accesibilidad y configuraciones para que las personas con discapacidad puedan utilizar canaima GNU/Linux.&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
Ahora se tiene el párametro Files donde el primer archivo es el origen donde se encuentra el archivo y el segundo es la ruta donde se va a copiar. Cada ruta se separa por la siguiente línea.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El archivo changelog contiene lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;canaima-accesibilidad-visual-escritorio (1.0:0.1) unstable; urgency=low&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp; * First release.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;-- Ernesto Nadir Crespo Avila &amp;nbsp;&amp;lt;ecrespo@cenditel.gob.ve&amp;gt; &amp;nbsp;Thu, 22 Sep 2011 22:33:15 -0430&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El archivo copyright contiene:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Authors:&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp; &amp;nbsp; Copyright (C) 2011 Ernesto Nadir Crespo Avila &amp;lt;ecrespo@cenditel.gob.ve&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;License:&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp; &amp;nbsp;This package is free software; you can redistribute it and/or modify&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp; &amp;nbsp;it under the terms of the GNU General Public License as published by&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp; &amp;nbsp;the Free Software Foundation; version 2 dated June, 1991.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp; &amp;nbsp;This package is distributed in the hope that it will be useful,&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp; &amp;nbsp;but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp; &amp;nbsp;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp; &amp;nbsp;GNU General Public License for more details.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp; &amp;nbsp;You should have received a copy of the GNU General Public License&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp; &amp;nbsp;along with this program; if not, write to the Free Software&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp; &amp;nbsp;Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA &amp;nbsp;02110-1301 USA&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;On Debian GNU/Linux systems, the complete text of the GNU General&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Public License can be found in `/usr/share/common-licenses/GPL-2&lt;/span&gt;'&lt;br /&gt;
&lt;br /&gt;
Ahora sólo queda &amp;nbsp;ejecutar el comando equivs-build:&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;equivs-build -f canaima-accesibilidad-visual-escritorio&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Al ejecutar ls -l se tiene los archivos creados y el .deb:&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;total 40&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;-rw-r--r-- 1 ernesto ernesto 1275 sep 23 08:40 canaima-accesibilidad-visual-escritorio&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;-rw-r--r-- 1 ernesto ernesto 1824 sep 23 08:41 canaima-accesibilidad-visual-escritorio_0.1_amd64.changes&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;-rw-r--r-- 1 ernesto ernesto 6836 sep 23 08:41 canaima-accesibilidad-visual-escritorio_0.1_amd64.deb&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;-rw-r--r-- 1 ernesto ernesto &amp;nbsp;909 sep 23 08:41 canaima-accesibilidad-visual-escritorio_0.1.dsc&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;-rw-r--r-- 1 ernesto ernesto 6378 sep 23 08:41 canaima-accesibilidad-visual-escritorio_0.1.tar.gz&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;-rw-r--r-- 1 ernesto ernesto &amp;nbsp;184 sep 23 08:41 changelog&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;drwxr-xr-x 3 ernesto ernesto 4096 sep 23 08:15 conf&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;-rw-r--r-- 1 ernesto ernesto &amp;nbsp;896 sep 23 08:41 copyright&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Al ejecutar dpkg -c del archivo .deb se tiene lo que se va a instalar con el metapaquete:&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dpkg -c canaima-accesibilidad-visual-escritorio_0.1_amd64.deb&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;drwxr-xr-x root/root &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0 2011-09-23 08:41 ./&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;drwxr-xr-x root/root &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0 2011-09-23 08:41 ./usr/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;drwxr-xr-x root/root &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0 2011-09-23 08:41 ./usr/share/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;drwxr-xr-x root/root &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0 2011-09-23 08:41 ./usr/share/doc/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;drwxr-xr-x root/root &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0 2011-09-23 08:41 ./usr/share/doc/canaima-accesibilidad-visual-escritorio/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;-rw-r--r-- root/root &amp;nbsp; &amp;nbsp; &amp;nbsp;1044 2011-09-23 08:41 ./usr/share/doc/canaima-accesibilidad-visual-escritorio/README.Debian&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;-rw-r--r-- root/root &amp;nbsp; &amp;nbsp; &amp;nbsp; 171 2011-09-23 08:41 ./usr/share/doc/canaima-accesibilidad-visual-escritorio/changelog.gz&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;-rw-r--r-- root/root &amp;nbsp; &amp;nbsp; &amp;nbsp; 896 2011-09-23 08:41 ./usr/share/doc/canaima-accesibilidad-visual-escritorio/copyright&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;drwxr-xr-x root/root &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0 2011-09-23 08:41 ./etc/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;drwxr-xr-x root/root &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0 2011-09-23 08:41 ./etc/skell/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;drwxr-xr-x root/root &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0 2011-09-23 08:41 ./etc/skell/.orca/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;drwxr-xr-x root/root &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0 2011-09-23 08:41 ./etc/skell/.orca/app-settings/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;-rwxr-xr-x root/root &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0 2011-09-23 08:41 ./etc/skell/.orca/app-settings/__init__.py&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;-rw-r--r-- root/root &amp;nbsp; &amp;nbsp; &amp;nbsp; 111 2011-09-23 08:41 ./etc/skell/.orca/app-settings/__init__.pyc&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;-rw-r--r-- root/root &amp;nbsp; &amp;nbsp; &amp;nbsp;7291 2011-09-23 08:41 ./etc/skell/.orca/user-settings.py&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;-rw-r--r-- root/root &amp;nbsp; &amp;nbsp; &amp;nbsp;6193 2011-09-23 08:41 ./etc/skell/.orca/user-settings.pyc&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;drwxr-xr-x root/root &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0 2011-09-23 08:41 ./etc/skell/.orca/orca-scripts/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;-rwxr-xr-x root/root &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0 2011-09-23 08:41 ./etc/skell/.orca/orca-scripts/__init__.py&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;-rw-r--r-- root/root &amp;nbsp; &amp;nbsp; &amp;nbsp; 111 2011-09-23 08:41 ./etc/skell/.orca/orca-scripts/__init__.pyc&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Se nota que se crea el directorio .orca dentro de /etc/skell.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Se ejcuta lintian para verificar que el metapaquete no tenga errores o alertas:&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;lintian -i canaima-accesibilidad-visual-escritorio_0.1.dsc&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/882744969176160062-5220783666318994128?l=ernesto-ecrespo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/ZfYKhKvN4l4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/5220783666318994128/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=5220783666318994128" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/5220783666318994128?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/5220783666318994128?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/ZfYKhKvN4l4/como-crear-un-metapaquete-metapaquete.html" title="Como crear un metapaquete (metapaquete con archivos de  configuración)" /><author><name>Ernesto Crespo</name><uri>https://profiles.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAABTg/KepLh0e_Jso/s512-c/photo.jpg" /></author><thr:total>0</thr:total><georss:featurename>Carretera Via Araguita, Guacara, Venezuela</georss:featurename><georss:point>10.206813072484595 -67.87559509277344</georss:point><georss:box>10.144300072484596 -67.95455909277344 10.269326072484594 -67.79663109277344</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2011/09/como-crear-un-metapaquete-metapaquete.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQHRno4fip7ImA9WhdVFkQ.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-8124095591293177692</id><published>2011-09-22T08:45:00.000-04:30</published><updated>2011-09-22T08:45:37.436-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-22T08:45:37.436-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="canaima" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="Empaquetado" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><title>Corrigiendo los reportes generados por lintian de un metapaquete</title><content type="html">Este artículo explicará como corregir los mensajes generados por lintian, estos mensajes son debido a que el programa empaquetado o metapaquete no cumple con el&lt;a href="http://www.debian.org/doc/debian-policy/"&gt; policy de Debian&lt;/a&gt; y para subir dicho programa es necesario que esté sin errores ni warning.&lt;br /&gt;
&lt;br /&gt;
El archivo que se va a verificar es el&lt;a href="https://gitorious.org/sierra-nevada/canaima-caribay-radio/blobs/master/canaima-caribay-radio_1.0.dsc"&gt; .dsc del metapaquete creado al empaquetar canaima-caribay-radio&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Al ejecutar lintian con el archivo dsc devuelve el siguiente mensaje:&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;lintian -i canaima-caribay-radio_1.0.dsc&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;W: canaima-caribay-radio source: debhelper-but-no-misc-depends canaima-caribay-radio&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N:&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;The source package uses debhelper, but it does not include&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;${misc:Depends} in the given binary package's debian/control entry. Any&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;debhelper command may add dependencies to ${misc:Depends} that are&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;required for the work that it does, so recommended best practice is to&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;always add ${misc:Depends} to the dependencies of each binary package if&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;debhelper is in use.&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;Refer to the debhelper(7) manual page for details.&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;Severity: normal, Certainty: possible&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N:&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;W: canaima-caribay-radio source: package-uses-deprecated-&lt;wbr&gt;&lt;/wbr&gt;debhelper-compat-version 4&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N:&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;The debhelper compatibility version used by this package is marked as&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;deprecated by the debhelper developer. You should really consider using&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;a newer compatibility version.&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;The compatibility version can be set in (preferred) debian/compat or by&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;setting and exporting DH_COMPAT in debian/rules. If it is not set in&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;either place, debhelper defaults to the deprecated compatibility version&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;1.&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;Refer to the debhelper(7) manual page for details.&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;Severity: normal, Certainty: certain&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N:&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;W: canaima-caribay-radio source: binary-arch-rules-but-pkg-is-&lt;wbr&gt;&lt;/wbr&gt;arch-indep&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N:&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;It looks like you try to run code in the binary-arch target of&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;debian/rules, even though your package is architecture- independent.&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;Severity: normal, Certainty: certain&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N:&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
El primer warning es que hace falta agregar ${misc:Depends] en las dependencias. &amp;nbsp;Adicionalmente se tiene que cambiar el parámetro Standards-Version a la versión 3.9.1.&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red; font-family: arial; font-size: x-small;"&gt;Section: misc&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red; font-family: arial; font-size: x-small;"&gt;Priority: optional&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red; font-family: arial; font-size: x-small;"&gt;Homepage: http://canaima.softwarelibre.gob.ve&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red; font-family: arial; font-size: x-small;"&gt;Standards-Version: 3.9.1&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red; font-family: arial; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red; font-family: arial; font-size: x-small;"&gt;Package: canaima-caribay-radio&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red; font-family: arial; font-size: x-small;"&gt;Version: 1.0&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red; font-family: arial; font-size: x-small;"&gt;Maintainer: Ernesto Nadir Crespo Avila &amp;lt;ecrespo@cenditel.gob.ve&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red; font-family: arial; font-size: x-small;"&gt;Depends: ${misc:Depends},jackd2, libjack-jackd2-0, libjack-jackd2-dev, pulseaudio-module-jack, qjackctl, libjack-jackd2-0, libjack-jackd2-dev, vorbis-tools, libvorbis-dev, libogg-dev, libmad0-dev, libsamplerate0-dev, libflac-dev, libsndfile1-dev, libavcodec-dev, libavformat-dev, libspeex-dev, python-gtk2-dev, python-mutagen, libdbus-1-dev, ffmpeg, libshout3-dev, libtwolame-dev, twolame, idjc, audacity, audacity-data, audacity-dbg, icecast2, easytag&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red; font-family: arial; font-size: x-small;"&gt;Architecture: all&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red; font-family: arial; font-size: x-small;"&gt;Copyright: copyright&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red; font-family: arial; font-size: x-small;"&gt;Changelog: changelog&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red; font-family: arial; font-size: x-small;"&gt;Description: Metapaquete para la instalacion de radio streaming&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red; font-family: arial; font-size: x-small;"&gt;&amp;nbsp;Metapaquete para la instalacion de radio streaming con icecast2 e idjc.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
El segundo warning menciona que el archivo debian/compat tiene dentro el número 4 y es necesario que se actualice a la versión de debhelper que se está usando para empaquetar, en este caso debe cambiar a 8. Esto se tiene que cambiar en la plantilla de equivs.&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;vim&amp;nbsp;/usr/share/equivs/template/&lt;wbr&gt;&lt;/wbr&gt;debian/compat&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
Cambiar 4 por 8.&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
El siguiente warning menciona un problema en la definición de la arquitectura, que es necesario quitar binary-arch y nuestro paquete es independiente de la plataforma. Esto se resuelve modificando canaima-caribay-radio cambian el parámetro&amp;nbsp;Architecture: all por any.&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
Luego de realizar esos cambios se vuelve a crear el metapaquete y &amp;nbsp;a ejecutar lintian:&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue; font-family: arial; font-size: x-small;"&gt;&amp;nbsp;lintian -i canaima-caribay-radio_1.0.dsc&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue; font-family: arial; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;W: canaima-caribay-radio source: dh-clean-k-is-deprecated&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N:&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;This package calls dh_clean -k in its debian/rules file and declares a&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;debhelper compatibility version of at least 7.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;debhelper 7 deprecated dh_clean -k in favour of dh_prep.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;Refer to the dh_clean(1) manual page for details.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;Severity: normal, Certainty: certain&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N:&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;W: canaima-caribay-radio source: package-lacks-versioned-build-&lt;wbr&gt;&lt;/wbr&gt;depends-on-debhelper 8&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N:&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;The package either doesn't declare a versioned build dependency on&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;debhelper or does not declare a versioned build dependency on a new&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;enough version of debhelper to satisfy the declared compatibility level.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;Recommended practice is to always declare an explicit versioned&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;dependency on debhelper equal to or greater than the compatibility level&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;used by the package, even if the versioned dependency isn't strictly&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;necessary. Having a versioned dependency also helps with backports to&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;older releases and correct builds on partially updated systems.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;Refer to the debhelper(7) manual page for details.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N: &amp;nbsp; &amp;nbsp;Severity: minor, Certainty: certain&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;N:&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Luego de cambiar el archivo compat y la versión del standards-version aparece un warning sobre el comando dh_clean -k que se tiene que sustituir por dh_prep en el archivo debian/rules de la plantilla:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;vim&amp;nbsp;/usr/share/equivs/template/debian/rules&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;install: build&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dh_testdir&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dh_testroot&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dh_prep&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
El otro warning menciona que debhelper tiene un número de versión viejo. Para cambiarlo se busca el archivo control.in en las plantillas y se modifica la dep&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;vim&amp;nbsp;/usr/share/equivs/template/debian/control.in&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Se modifica la siguiente línea:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red; font-family: arial; font-size: x-small;"&gt;Build-Depends: debhelper (&amp;gt;= 8)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;Se vuelve a empaquetar y a ejecutar lintian:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue; font-family: arial; font-size: x-small;"&gt;lintian -i canaima-caribay-radio_1.0.dsc&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;Listo, no más mensajes de error o warnings.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="font-family: arial; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="font-family: arial; font-size: small;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/882744969176160062-8124095591293177692?l=ernesto-ecrespo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/HWbNV1zBTNU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/8124095591293177692/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=8124095591293177692" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/8124095591293177692?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/8124095591293177692?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/HWbNV1zBTNU/corrigiendo-los-reportes-generados-por.html" title="Corrigiendo los reportes generados por lintian de un metapaquete" /><author><name>Ernesto Crespo</name><uri>https://profiles.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAABTg/KepLh0e_Jso/s512-c/photo.jpg" /></author><thr:total>1</thr:total><georss:featurename>La Hechicera, Mérida 5101, Venezuela</georss:featurename><georss:point>8.624472107633936 -71.15020751953125</georss:point><georss:box>8.561675607633937 -71.22917151953125 8.687268607633936 -71.07124351953125</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2011/09/corrigiendo-los-reportes-generados-por.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMBRnc9eSp7ImA9WhdVFkw.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-7086500985599830192</id><published>2011-09-21T09:10:00.000-04:30</published><updated>2011-09-21T09:10:57.961-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-21T09:10:57.961-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="canaima" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="Empaquetado" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><title>Como crear un metapaquete (versión 2)</title><content type="html">&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate;"&gt;&lt;/span&gt;&lt;br /&gt;
Este artículo es una actualización del artículo sobre como crear un metapaquete que lo pueden leer&amp;nbsp;&lt;a href="http://ernesto-ecrespo.blogspot.com/2009/03/como-crear-un-metapaquete.html"&gt;acá&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
En este artículo se agregará el archivo changelog y copyright para el metapaquete canaima-caribay-radio.&lt;br /&gt;
&lt;br /&gt;
Se crea un directorio de trabajo:&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;mkdir canaima-caribay-radio&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Ahora se crea el archivo control con el comando equivs-control:&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;equivs-control canaima-caribay-radio&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Ahora se modificará el archivo para que tenga las dependencias para jackd2, icecast2, audacity, easytag e idjc. Se agrega el mantenedor del paquete, el homepage del mismo y una descripción corta y larga del metapquete.&lt;br /&gt;
&lt;br /&gt;
El archivo modificado:&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Section: misc&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Priority: optional&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Homepage: http://canaima.softwarelibre.gob.ve&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Standards-Version: 3.6.2&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Package: canaima-caribay-radio&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Version: 1.0&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Maintainer: Ernesto Nadir Crespo Avila &amp;lt;ecrespo@cenditel.gob.ve&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Depends: jackd2, libjack-jackd2-0, libjack-jackd2-dev, pulseaudio-module-jack, qjackctl, libjack-jackd2-0, libjack-jackd2-dev, vorbis-tools, libvorbis-dev, libogg-dev, libmad0-dev, libsamplerate0-dev, libflac-dev, libsndfile1-dev, libavcodec-dev, libavformat-dev, libspeex-dev, python-gtk2-dev, python-mutagen, libdbus-1-dev, ffmpeg, libshout3-dev, libtwolame-dev, twolame, idjc, audacity, audacity-data, audacity-dbg, icecast2, easytag&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Architecture: all&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Copyright: copyright&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Changelog: changelog&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Description: Metapaquete para la instalacion de radio streaming&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;Metapaquete para la instalacion de radio streaming con icecast2 e idjc.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Del artículo anterior se agrego el campo Copyright y Changelog.&lt;br /&gt;
&lt;br /&gt;
Estos archivos contienen lo siguiente:&lt;br /&gt;
&lt;br /&gt;
Copyright:&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Authors:&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Copyright (C) 2011 Ernesto Nadir Crespo Avila &amp;lt;ecrespo@cenditel.gob.ve&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Copyright (C) 2011 David Hernández &amp;lt;david.vzla@gmail.com&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;License:&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;&amp;nbsp; This package is free software; you can redistribute it and/or modify&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;&amp;nbsp; it under the terms of the GNU General Public License as published by&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;&amp;nbsp; the Free Software Foundation; version 2 dated June, 1991.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;&amp;nbsp; This package is distributed in the hope that it will be useful,&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;&amp;nbsp; but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;&amp;nbsp; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &amp;nbsp;See the&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;&amp;nbsp; GNU General Public License for more details.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;&amp;nbsp; You should have received a copy of the GNU General Public License&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;&amp;nbsp; along with this program; if not, write to the Free Software&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;&amp;nbsp; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA &amp;nbsp;02110-1301 USA&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;On Debian GNU/Linux systems, the complete text of the GNU General&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Public License can be found in `/usr/share/common-licenses/GPL-2'.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Changelog:&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;canaima-caribay-radio (1:1.0) unstable; urgency=low&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;&amp;nbsp;* First release.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;-- Ernesto Nadir Crespo Avila &amp;lt;ecrespo@cenditel.gob.ve&amp;gt; &amp;nbsp;Tue, 20 Sep 2011 16:12:45 -0430&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Ahora para crear y firmar el metapaquete se usa el comando equivs-build con la opción -f que permite ejecutar debuild completo y firmar el metapaquete.&lt;br /&gt;
&lt;br /&gt;
Es importante notar que en la llave gpg debe estar el nombre del mantenedor que aparece en el control y changelog para poder firmar el metapaquete.&lt;br /&gt;
&lt;br /&gt;
A continuación se muestra la llave gpg:&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;gpg --list-keys | less&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;--------------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;pub &amp;nbsp; 1024D/C97E7015 2005-08-15&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;uid &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Ernesto Nadir Crespo Avila (seraph1) &amp;lt;ecrespo@debian.org.ve&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;uid &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Ernesto Nadir Crespo Avila (seraph1) &amp;lt;ecrespo@debianvenezuela.org&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;uid &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Ernesto Nadir Crespo Avila (seraph1) &amp;lt;ecrespo@uc.edu.ve&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;uid &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Ernesto Nadir Crespo Avila (seraph1) &amp;lt;ecrespo@cantv.net&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;uid &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Ernesto Nadir Crespo Avila (seraph1) &amp;lt;ecrespo@gmail.com&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;uid &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Ernesto Crespo (seraph1) &amp;lt;ecrespoa@yahoo.es&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;uid &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Ernesto Nadir Crespo Avila (seraph) &amp;lt;ernesto@crespo.info.ve&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;uid &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;[jpeg image of size 11184]&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;uid &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Ernesto Nadir Crespo Avila &amp;lt;ecrespo@cenditel.gob.ve&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;uid &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Ernesto Nadir Crespo Avila &amp;lt;ernesto@crespo.org.ve&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Ahora se &amp;nbsp;creará el metapaquete: El procedimiento pedirá 2 veces escribirla frase de la llave gpg.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;equivs-build -f canaima-caribay-radio&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dpkg-buildpackage: exportar «CFLAGS» de dpkg-buildflags (origen: «vendor»): «-g -O2»&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dpkg-buildpackage: exportar «CPPFLAGS» de dpkg-buildflags (origen: «vendor»): «»&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dpkg-buildpackage: exportar «CXXFLAGS» de dpkg-buildflags (origen: «vendor»): «-g -O2»&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dpkg-buildpackage: exportar «FFLAGS» de dpkg-buildflags (origen: «vendor»): «-g -O2»&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dpkg-buildpackage: exportar «LDFLAGS» de dpkg-buildflags (origen: «vendor»): «»&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dpkg-buildpackage: paquete fuente canaima-caribay-radio&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dpkg-buildpackage: versión de las fuentes 1:1.0&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dpkg-buildpackage: fuentes modificadas por Ernesto Nadir Crespo Avila &amp;lt;ecrespo@cenditel.gob.ve&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dpkg-buildpackage: arquitectura del sistema amd64&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp;dpkg-source --before-build equivs.nAXaSZ&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp;fakeroot debian/rules clean&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dh_testdir&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dh_testroot&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dh_clean&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dh_clean: Compatibility levels before 5 are deprecated.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp;dpkg-source -b equivs.nAXaSZ&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dpkg-source: aviso: no se ha definido un formato de fuentes en «debian/source/format», consulte dpkg-source(1)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dpkg-source: información: usando el formato de fuente «1.0»&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dpkg-source: aviso: el directorio de fuentes «equivs.nAXaSZ» no es &amp;lt;paquete-fuente&amp;gt;-&amp;lt;versión-desarrollador-original&amp;gt; «canaima-caribay-radio-1.0»&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dpkg-source: información: construyendo canaima-caribay-radio en canaima-caribay-radio_1.0.tar.gz&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dpkg-source: información: construyendo canaima-caribay-radio en canaima-caribay-radio_1.0.dsc&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp;debian/rules build&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;make: No se hace nada para `build'.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp;fakeroot debian/rules binary&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dh_testdir&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dh_testroot&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dh_clean -k&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dh_clean: dh_clean -k is deprecated; use dh_prep instead&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dh_clean: Compatibility levels before 5 are deprecated.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dh_testdir&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dh_testroot&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dh_install&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dh_install: Compatibility levels before 5 are deprecated.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dh_installdocs&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dh_installdocs: Compatibility levels before 5 are deprecated.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dh_installchangelogs&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dh_installchangelogs: Compatibility levels before 5 are deprecated.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dh_compress&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dh_compress: Compatibility levels before 5 are deprecated.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dh_fixperms&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dh_fixperms: Compatibility levels before 5 are deprecated.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dh_installdeb&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dh_installdeb: Compatibility levels before 5 are deprecated.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dh_gencontrol&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dh_gencontrol: Compatibility levels before 5 are deprecated.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dh_md5sums&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dh_md5sums: Compatibility levels before 5 are deprecated.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dh_builddeb&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dh_builddeb: Compatibility levels before 5 are deprecated.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dpkg-deb: construyendo el paquete `canaima-caribay-radio' en `../canaima-caribay-radio_1.0_all.deb'.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp;signfile canaima-caribay-radio_1.0.dsc&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;Necesita una frase contraseña para desbloquear la clave secreta&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;del usuario: "Ernesto Nadir Crespo Avila (seraph1) &amp;lt;ecrespo@debian.org.ve&amp;gt;"&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;clave DSA de 1024 bits, ID C97E7015, creada el 2005-08-15&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp;dpkg-genchanges &amp;nbsp;&amp;gt;../canaima-caribay-radio_1.0_amd64.changes&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dpkg-genchanges: incluyendo el código fuente completo en la subida&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp;signfile canaima-caribay-radio_1.0_amd64.changes&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;Necesita una frase contraseña para desbloquear la clave secreta&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;del usuario: "Ernesto Nadir Crespo Avila (seraph1) &amp;lt;ecrespo@debian.org.ve&amp;gt;"&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;clave DSA de 1024 bits, ID C97E7015, creada el 2005-08-15&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;nbsp;dpkg-source --after-build equivs.nAXaSZ&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;dpkg-buildpackage: subida completa; paquete nativo de Debian (se incluye la fuente completa)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;The package has been created.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;Attention, the package has been created in the current directory,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;not in ".." as indicated by the message above!&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Ahora se ejecuta un ls -l y se tiene lo siguiente:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;ernesto@zeath:~/canaima/canaima-caribay-radio$ ls -l&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;total 28&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;-rw-r--r-- 1 ernesto ernesto &amp;nbsp;849 sep 20 17:03 canaima-caribay-radio&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;-rw-r--r-- 1 ernesto ernesto 2528 sep 21 08:48 canaima-caribay-radio_1.0_all.deb&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;-rw-r--r-- 1 ernesto ernesto 1583 sep 21 08:49 canaima-caribay-radio_1.0_amd64.changes&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;-rw-r--r-- 1 ernesto ernesto &amp;nbsp;819 sep 21 08:49 canaima-caribay-radio_1.0.dsc&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;-rw-r--r-- 1 ernesto ernesto 2170 sep 21 08:48 canaima-caribay-radio_1.0.tar.gz&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;-rw-r--r-- 1 ernesto ernesto &amp;nbsp;164 sep 20 17:03 changelog&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;-rw-r--r-- 1 ernesto ernesto &amp;nbsp;957 sep 20 17:03 copyright&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
El archivo&amp;nbsp;canaima-caribay-radio_1.0_amd64.changes &amp;nbsp;contiene lo siguiente:&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;-----BEGIN PGP SIGNED MESSAGE-----&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Hash: SHA1&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Format: 1.8&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Date: Tue, 20 Sep 2011 16:12:45 -0430&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Source: canaima-caribay-radio&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Binary: canaima-caribay-radio&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Architecture: source all&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Version: 1:1.0&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Distribution: unstable&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Urgency: low&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Maintainer: Ernesto Nadir Crespo Avila &amp;lt;ecrespo@cenditel.gob.ve&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Changed-By: Ernesto Nadir Crespo Avila &amp;lt;ecrespo@cenditel.gob.ve&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Description:&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;canaima-caribay-radio - Metapaquete para la instalacion de radio streaming&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Changes:&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;canaima-caribay-radio (1:1.0) unstable; urgency=low&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;&amp;nbsp; * First release.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Checksums-Sha1:&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;2234f6f5d8808e0ae425eb3164632b01bc94251a 819 canaima-caribay-radio_1.0.dsc&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;8851015c0174d5126127328776e35174e361cc21 2170 canaima-caribay-radio_1.0.tar.gz&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;104312d9eb56eb623ad1f901a2801e096f4021be 2528 canaima-caribay-radio_1.0_all.deb&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Checksums-Sha256:&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;3be03f102f6ef9dab2525ac384a265e9761ca2f5f4fb7d48fdbd0b38fee4e22f 819 canaima-caribay-radio_1.0.dsc&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;75cb5c5b95d14d995776a035925c2cfe5ee77873d091ef9e238b000fb4b1375b 2170 canaima-caribay-radio_1.0.tar.gz&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;74540c21659c774a12d5162886f59b974b155c47d5471fac40ff7fece11cd282 2528 canaima-caribay-radio_1.0_all.deb&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Files:&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;3f563e110433652011cf0d32fe96a0f6 819 misc optional canaima-caribay-radio_1.0.dsc&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;e53b6a60fd0961a6b161a61b5a107e77 2170 misc optional canaima-caribay-radio_1.0.tar.gz&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;4ac58a93d2e4160f378093909d687967 2528 misc optional canaima-caribay-radio_1.0_all.deb&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;-----BEGIN PGP SIGNATURE-----&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Version: GnuPG v1.4.10 (GNU/Linux)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;iEYEARECAAYFAk555EYACgkQh+iQYcl+cBW/kQCeOZzpeHCAYomqczO7kkR6+nvT&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;fWIAniK+uWLpndvqEJmz2IUA7JNe8Nng&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;=qVVe&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;-----END PGP SIGNATURE-----&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
El archivo&amp;nbsp;canaima-caribay-radio_1.0.dsc contiene lo siguiente:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;-----BEGIN PGP SIGNED MESSAGE-----&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Hash: SHA1&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Format: 1.0&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Source: canaima-caribay-radio&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Binary: canaima-caribay-radio&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Architecture: all&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Version: 1:1.0&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Maintainer: Ernesto Nadir Crespo Avila &amp;lt;ecrespo@cenditel.gob.ve&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Homepage: http://canaima.softwarelibre.gob.ve&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Standards-Version: 3.6.2&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Build-Depends: debhelper (&amp;gt;= 4)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Checksums-Sha1:&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;8851015c0174d5126127328776e35174e361cc21 2170 canaima-caribay-radio_1.0.tar.gz&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Checksums-Sha256:&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;75cb5c5b95d14d995776a035925c2cfe5ee77873d091ef9e238b000fb4b1375b 2170 canaima-caribay-radio_1.0.tar.gz&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Files:&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;e53b6a60fd0961a6b161a61b5a107e77 2170 canaima-caribay-radio_1.0.tar.gz&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;-----BEGIN PGP SIGNATURE-----&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;Version: GnuPG v1.4.10 (GNU/Linux)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;iEYEARECAAYFAk555EIACgkQh+iQYcl+cBVLqgCdGA+DXaVjyDrcGNfxcITL9sCP&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;oY0An1hC/e7UIQiiTZ4DQUysYHs8sTS9&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;=6NcI&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;-----END PGP SIGNATURE-----&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/882744969176160062-7086500985599830192?l=ernesto-ecrespo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/iXiSwxKXBXE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/7086500985599830192/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=7086500985599830192" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/7086500985599830192?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/7086500985599830192?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/iXiSwxKXBXE/como-crear-un-metapaquete-version-2.html" title="Como crear un metapaquete (versión 2)" /><author><name>Ernesto Crespo</name><uri>https://profiles.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAABTg/KepLh0e_Jso/s512-c/photo.jpg" /></author><thr:total>0</thr:total><georss:featurename>Troncal 7, Mérida, Venezuela</georss:featurename><georss:point>8.650268711890476 -71.1313247680664</georss:point><georss:box>8.618872211890476 -71.17080676806641 8.681665211890476 -71.0918427680664</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2011/09/como-crear-un-metapaquete-version-2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcHQ3c9fCp7ImA9WhdVFU4.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-2539533989563466138</id><published>2011-09-20T12:13:00.000-04:30</published><updated>2011-09-20T12:13:52.964-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-20T12:13:52.964-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="canaima" /><category scheme="http://www.blogger.com/atom/ns#" term="git" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="control de versiones" /><category scheme="http://www.blogger.com/atom/ns#" term="ssh" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="Mercurial" /><title>Crear llave ssh para la autenticación en Github, gitorius y bitbucket.</title><content type="html">Este artículo explicará como crear una llave pública RSA para usarla en los sitios github, gitorius y bitbucket y así poder subir código con git y mercurial a dichos repositorios.&lt;br /&gt;
&lt;br /&gt;
Lo primero que se tiene que hacer es generar la llave ssh. El comando para hacerlo es ssh-keygen:&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;ssh-keygen -t rsa -C "ecrespo@cenditel.gob.ve"&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;Generating public/private rsa key pair.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;Enter file in which to save the key (/home/ernesto/.ssh/id_rsa): &amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;lt;Ruta donde se va a guardar la llave RSA&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;Enter passphrase (empty for no passphrase):&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;lt;colocar la frase a usar con la llave&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;Enter same passphrase again: &amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;lt;colocar la frase a usar con la llave&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;Your identification has been saved in /home/ernesto/.ssh/id_rsa.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;Your public key has been saved in /home/ernesto/.ssh/id_rsa.pub.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;The key fingerprint is:&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;f2:09:cf:fe:53:1d:d3:d9:25:96:c9:11:68:5e:3e:bc ecrespo@cenditel.gob.ve&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;The key's randomart image is:&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;+--[ RSA 2048]----+&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .o. |&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;o..+ |&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;o &amp;nbsp;o +* .|&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; C &amp;nbsp;..+o+|&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;S + &amp;nbsp; o+o|&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; . &amp;nbsp; .Do |&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;. o . &amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; + &amp;nbsp; &amp;nbsp; |&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;. &amp;nbsp; &amp;nbsp;|&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;+-----------------+&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Agregar la llave a github:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
En github seleccione Account settings, luego seleccione ssh public keys y luego Add another public key.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Despliegue el contenido del archivo &amp;nbsp;id_rsa.pub:&lt;/div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;cat&amp;nbsp;less id_rsa.pub&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDPW48GvjuwVMHdlU6kRqniKDNwDrz12YPL1Sdi9AEn4uuRxs34+NH3UfarjweKFXMqkFRZaR9woV21GxvfF+eRnAfCWFI0Unzpxh1LaaLaDcBfNZx1PwkaR6zmaNKjwhAS2N4K3Rd+gCtPl57CoFQPNY7ZsZSJcn0iTn1jtQi3I3JpeQDTq0yf1nsjJFTSC/n23TROj2mvaHVsUB86ezAsiaJXJd8aZWJsyAEdBxn6dAxxxAtGRzQCq8oNqhWhqmbzf6C3zKARwCbbdo7UBM/StTkb3aYnBbTLhHGnY8vm5n/aP7/1GZNqTbWxfmH5hm/2mDfT8hPK2eCCklGsnF+qlxpPu7 ecrespo@cenditel.gob.ve&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
La siguiente imagen muestra la información desplegada en github:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-iSGLVKXipKw/Tni_WGHj9BI/AAAAAAAAA9E/c-d1aFd11iM/s1600/Captura+de+pantalla+-+200911+-+10%253A28%253A22.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="188" src="http://4.bp.blogspot.com/-iSGLVKXipKw/Tni_WGHj9BI/AAAAAAAAA9E/c-d1aFd11iM/s320/Captura+de+pantalla+-+200911+-+10%253A28%253A22.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Validar la comunicación con github.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Para validar la comunicación con la llave pública se ejecuta lo siguiente:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;ssh -T git@github.com&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Aparecerá la siguiente información:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;The authenticity of host 'github.com (207.97.227.239)' can't be established.&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;Are you sure you want to continue connecting (yes/no)? yes&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;Warning: Permanently added 'github.com,207.97.227.239' (RSA) to the list of known hosts.&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;Hi ecrespo! You've successfully authenticated, but GitHub does not provide shell access.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Configurar la información del usuario y correo en git:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;git config --global user.name "Ernesto Crespo"&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;git config --global user.email "ecrespo@cenditel.gob.ve"&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Configurar el token github.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Seleccione Account settings, luego Account Admin. Ahí aparecerá lo que se muestra en la siguiente figura:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-tqEj_M6YJkw/TniwxapIhfI/AAAAAAAAA88/hnltyVFXwlU/s1600/token.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="46" src="http://3.bp.blogspot.com/-tqEj_M6YJkw/TniwxapIhfI/AAAAAAAAA88/hnltyVFXwlU/s320/token.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Agregar al usuario github y el token:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;git config --global github.user ecrespo&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;git config --global github.token cf0fe21f4ff7fb51b686bb712347043e&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Ya se tiene github configurado con la llave RSA del equipo asociado al correo.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
Para el caso de gitorius se selecciona el dashboard, luego se le da clip a &amp;nbsp;Manage SSH keys:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-D9xo2z0XcjA/Tni82Rp4FHI/AAAAAAAAA9A/_dtLFtAgC30/s1600/Captura+de+pantalla+-+200911+-+11%253A37%253A24.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="188" src="http://1.bp.blogspot.com/-D9xo2z0XcjA/Tni82Rp4FHI/AAAAAAAAA9A/_dtLFtAgC30/s320/Captura+de+pantalla+-+200911+-+11%253A37%253A24.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Le dan clip a Add ssh keys:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-PHuUnEDw4Gk/Tni_i9-TnlI/AAAAAAAAA9I/p-aBiQKh9fc/s1600/Captura+de+pantalla+-+200911+-+11%253A52%253A44.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="188" src="http://3.bp.blogspot.com/-PHuUnEDw4Gk/Tni_i9-TnlI/AAAAAAAAA9I/p-aBiQKh9fc/s320/Captura+de+pantalla+-+200911+-+11%253A52%253A44.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Agregar la llave en bitbucket.&lt;/div&gt;
&lt;div&gt;
Le dan clip al Account al ingresar a su cuenta en bitbucket.org:&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
Se va al campo de ssh keys y se agrega la llave como lo muestra la figura:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-Ro_Mbm-5G9Q/TnjBHSxGSXI/AAAAAAAAA9M/t-r1EszBCtA/s1600/sshkeys.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="138" src="http://4.bp.blogspot.com/-Ro_Mbm-5G9Q/TnjBHSxGSXI/AAAAAAAAA9M/t-r1EszBCtA/s320/sshkeys.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
En el siguiente artículo se explicará como usar los comandos para clonar, hacer commit &amp;nbsp;y actualizar los controles de versiones distribuidos de github, gitorius y bitbucket.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/882744969176160062-2539533989563466138?l=ernesto-ecrespo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/PeYrOHidXRc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/2539533989563466138/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=2539533989563466138" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/2539533989563466138?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/2539533989563466138?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/PeYrOHidXRc/crear-llave-ssh-para-la-autenticacion.html" title="Crear llave ssh para la autenticación en Github, gitorius y bitbucket." /><author><name>Ernesto Crespo</name><uri>https://profiles.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAABTg/KepLh0e_Jso/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-iSGLVKXipKw/Tni_WGHj9BI/AAAAAAAAA9E/c-d1aFd11iM/s72-c/Captura+de+pantalla+-+200911+-+10%253A28%253A22.png" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Troncal 7, Mérida, Venezuela</georss:featurename><georss:point>8.648232202041024 -71.12960815429688</georss:point><georss:box>8.585439202041025 -71.20857215429687 8.711025202041023 -71.05064415429688</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2011/09/crear-llave-ssh-para-la-autenticacion.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQEQXo-eCp7ImA9WhdXFEk.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-2186533139799373109</id><published>2011-08-27T05:48:00.000-04:30</published><updated>2011-08-27T05:48:20.450-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-27T05:48:20.450-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="control de versiones" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="Empaquetado" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><title>Día Debian en Mérida.</title><content type="html">El día de hoy se celebrará en Fundacite Mérida el Día Debian por motivo del cumpleaños número 18.&lt;br /&gt;
&lt;br /&gt;
Lugas: Av. Alberto Carnevali vía La Hechicera, detrás del MINFRA, Edificio B de Fundacite Mérida. &lt;br /&gt;
&lt;br /&gt;
Adicionalmente como en esta semana se cumplio los 20 años de Linux lo celebraremos también.&lt;br /&gt;
Acá un vídeo en conmemoración de la fecha.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://2.gvt0.com/vi/MTBX0j86Ca4/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/MTBX0j86Ca4&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/MTBX0j86Ca4&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;
Las charlas pautadas son las siguientes:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Se presentará un video en conmemoración a los 20 años de Linux. &lt;/li&gt;
&lt;li&gt;Hacer un distro Debian a la medida. (Franklin G. Mendoza).&lt;/li&gt;
&lt;li&gt;Como colaborar en Debian (Ernesto Crespo). &lt;a href="http://www.slideshare.net/ecrespo/colaborar-en-debian"&gt;Presentación.&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Entornos gráficos en Debian (Marie Matos).&lt;/li&gt;
&lt;li&gt;Configurar Plone para Alta Disponibilidad en Servidores de producción Debian (Leonardo Caballero).&lt;/li&gt;
&lt;li&gt; OpenLDAP en Debian (Daniela Matos).&lt;/li&gt;
&lt;li&gt;Servidores web para necesidades específicas  (Hector Colina).&lt;/li&gt;
&lt;li&gt; Gestión de configuración en Debian (Ernesto Crespo). &lt;a href="http://www.slideshare.net/ecrespo/gestin-de-configuracin-con-mercurial-y-etckeeper"&gt;Presentación.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Ya mis presentaciones se encuentran en slideshare. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/882744969176160062-2186533139799373109?l=ernesto-ecrespo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/F9b6RXlrZTg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/2186533139799373109/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=2186533139799373109" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/2186533139799373109?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/2186533139799373109?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/F9b6RXlrZTg/dia-debian-en-merida.html" title="Día Debian en Mérida." /><author><name>Ernesto Crespo</name><uri>https://profiles.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAABTg/KepLh0e_Jso/s512-c/photo.jpg" /></author><thr:total>0</thr:total><georss:featurename>Libertador, Venezuela</georss:featurename><georss:point>8.657025409058809 -71.10674133300779</georss:point><georss:box>8.372517909058809 -71.29076233300779 8.94153290905881 -70.92272033300779</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2011/08/dia-debian-en-merida.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0EEQnc-eSp7ImA9WhdXEEQ.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-5014020718434995423</id><published>2011-08-23T06:03:00.000-04:30</published><updated>2011-08-23T06:03:23.951-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-23T06:03:23.951-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="canaima" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><category scheme="http://www.blogger.com/atom/ns#" term="Mercurial" /><title>Compartir repositorios  de Mercurial con mercurial-server</title><content type="html">Se tienen varios artículos sobre mercurial en este blog, un &lt;a href="http://ernesto-ecrespo.blogspot.com/2009/04/control-de-versiones-con-mercurial.html"&gt;tutorial de mercurial&lt;/a&gt; (viene una actualización), como &lt;a href="http://ernesto-ecrespo.blogspot.com/2009/04/manteniendo-un-paquete-debian-con.html"&gt;empaquetar para Debian con mercurial&lt;/a&gt; (viene una actualización) y el último &lt;a href="http://ernesto-ecrespo.blogspot.com/2011/07/gestionar-los-archivos-de-configuracion.html"&gt;como gestionar la configuración con mercurial&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Este artículo explicará como compartir repositorios de Mercurial con mercurial-server, este artículo se basa en el &lt;a href="http://dev.lshift.net/paul/mercurial-server/docbook.html"&gt;tutorial en inglés&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Mercurial-server no se autentica usando claves pero si llaves públicas con ssh. Todos los usuarios que quieran acceder al repositorio mercurial necesitan una llave pública. &lt;br /&gt;
En el siguiente enlace tienen una guía de como crear las &lt;a href="http://rafael.bonifaz.ec/blog/2011/01/ssh-con-claves-publicas-y-privadas/"&gt;llaves públicas&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Acceso inicial al mercurial-server.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Instalar mercurial-server:&lt;br /&gt;
&lt;div style="color: red;"&gt;&lt;i&gt; aptitude install mercurial-server&amp;nbsp;&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Conectarse al servidor grievous habilitando el forwarding.&lt;br /&gt;
&lt;div style="color: red;"&gt;&lt;i&gt;ernesto@jewel:~$ ssh -A grievous&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;
Agregar llave privada al agente de autenticación. &lt;br /&gt;
&lt;div style="color: red;"&gt;&lt;i&gt;ernesto@grievous:~$ ssh-add -L &amp;gt; my-key&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;
Crear el directorio para el usuario ernesto en el mercurial-server, copiar la llave y actualizar el repositorio de autenticación. &lt;br /&gt;
&lt;div style="color: red;"&gt;&lt;i&gt;ernesto@grievous:~$ sudo mkdir -p /etc/mercurial-server/keys/root/ernesto&lt;/i&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;i&gt;ernesto@grievous:~$ sudo cp my-key /etc/mercurial-server/keys/root/ernesto/jewel&lt;/i&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;i&gt;ernesto@grievous:~$ sudo -u hg /usr/share/mercurial-server/refresh-auth&lt;/i&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;i&gt;ernesto@grievous:~$ exit&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;
Crear un repositorio.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: red;"&gt;&lt;i&gt;&amp;nbsp;cd proyectos/pysms-send&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;
Clonar el proyecto en el servidor grievous: &lt;br /&gt;
&lt;div style="color: red;"&gt;&lt;i&gt;&amp;nbsp;ernesto@jewel:~/proyectos/pysms-send$ hg clone . ssh://hg@grievous/ernesto/pysms-send&lt;/i&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;i&gt;searching for changes&lt;/i&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;i&gt;27 changesets found&lt;/i&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;i&gt;remote: adding changesets&lt;/i&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;i&gt;remote: adding manifests&lt;/i&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;i&gt;remote: adding file changes&lt;/i&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;i&gt;remote: added 27 changesets with 52 changes to 24 files&lt;/i&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/div&gt;Revisar si hay cambios en el repositorio.&lt;br /&gt;
&lt;div style="color: red;"&gt;&lt;i&gt;ernesto@jewel:~/proyectos/pysms-send$ hg pull ssh://hg@grievous/ernesto/pysms-send&lt;/i&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;i&gt;pulling from ssh://hg@grievous/ernesto/pysms-send&lt;/i&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;i&gt;searching for changes&lt;/i&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;i&gt;no changes found&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Siguiente artículo se explicará como agregar usuarios al repositorio, controlar el acceso al repositorio &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/882744969176160062-5014020718434995423?l=ernesto-ecrespo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/RepA4QTy9QE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/5014020718434995423/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=5014020718434995423" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/5014020718434995423?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/5014020718434995423?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/RepA4QTy9QE/compartir-repositorios-de-mercurial-con.html" title="Compartir repositorios  de Mercurial con mercurial-server" /><author><name>Ernesto Crespo</name><uri>https://profiles.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAABTg/KepLh0e_Jso/s512-c/photo.jpg" /></author><thr:total>0</thr:total><georss:featurename>Libertador, Venezuela</georss:featurename><georss:point>8.667207610218265 -71.12184753417966</georss:point><georss:box>8.382700110218265 -71.30586853417967 8.951715110218265 -70.93782653417966</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2011/08/compartir-repositorios-de-mercurial-con.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcMQ30zeSp7ImA9WhdXEE8.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-6676400188907318029</id><published>2011-08-21T09:59:00.002-04:30</published><updated>2011-08-22T10:11:22.381-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-22T10:11:22.381-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="canaima" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="Seguridad" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><title>Como cifrar directorios/particiones con eCryptfs</title><content type="html">Este artículo se basa en el artículo de HowtoForge sobre el mismo &lt;a href="http://www.howtoforge.net/how-to-encrypt-directories-partitions-with-ecryptfs-on-debian-squeeze"&gt;tema&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
La idea es cifrar el directorio home del usuario,se monte el directorio cifrado automáticamente al arrancar el equipo.&lt;br /&gt;
&lt;br /&gt;
Es necesario tener un respaldo de la carpeta del usuario para evitar perdida de datos si olvida la clave.&lt;br /&gt;
&lt;br /&gt;
1.Instalar eCryptfs:&lt;br /&gt;
Se ejecuta:&lt;br /&gt;
&lt;div style="color: red;"&gt;&lt;b&gt;aptitude install&amp;nbsp;ecryptfs-utils&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
2. Cifrar un directorio.&lt;br /&gt;
Respaldar los archivos y directorios del home del usuario:&lt;br /&gt;
&lt;div style="color: red;"&gt;&lt;b&gt;cp -pfr /home/ecrespo /tmp/&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
Cifrar el directorio /home/ecrespo/ al montar el sistema de archivos ecryptfs:&lt;br /&gt;
&lt;br /&gt;
Se selecciona aes, 16, no se habilita frase plana, no se habilita cifrado del nombre del archivo, así que con estas opciones sólo hay que presionar enter a la información que solicite al montar la partición cifrada.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: red;"&gt;&lt;b&gt;mount -t ecryptfs /home/ecrespo /home/ecrespo&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;Passphrase:&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;Select cipher:&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;&amp;nbsp;1) aes: blocksize = 16; min keysize = 16; max keysize = 32 (not loaded)&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;&amp;nbsp;2) blowfish: blocksize = 16; min keysize = 16; max keysize = 56 (not loaded)&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;&amp;nbsp;3) des3_ede: blocksize = 8; min keysize = 24; max keysize = 24 (not loaded)&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;&amp;nbsp;4) twofish: blocksize = 16; min keysize = 16; max keysize = 32 (not loaded)&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;&amp;nbsp;5) cast6: blocksize = 16; min keysize = 16; max keysize = 32 (not loaded)&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;&amp;nbsp;6) cast5: blocksize = 8; min keysize = 5; max keysize = 16 (not loaded)&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;Selection [aes]:&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;Select key bytes:&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;&amp;nbsp;1) 16&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;&amp;nbsp;2) 32&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;&amp;nbsp;3) 24&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;Selection [16]:&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;Enable plaintext passthrough (y/n) [n]: &lt;/b&gt;&lt;i&gt;&lt;span style="color: purple;"&gt;Enter&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;Enable filename encryption (y/n) [n]: &lt;/b&gt;&lt;i&gt;&lt;span style="color: purple;"&gt;Enter&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;Attempting to mount with the following options:&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;ecryptfs_unlink_sigs&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;ecryptfs_key_bytes=16&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;ecryptfs_cipher=aes&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;ecryptfs_sig=162827f20fdadf4e&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;Mounted eCryptfs&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/div&gt;&lt;div&gt;3. Verificar que la partición se ha montado.&lt;/div&gt;&lt;div&gt;El comando mount sólo devuelve las particiones que se encuentran montadas en el Linux.&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;mount&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;/home/ecrespo on /home/ecrespo type ecryptfs (rw,ecryptfs_sig=162827f20fdadf4e,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_unlink_sigs)&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;4. Recuperar el respaldo y borrar el respaldo del directorio /tmp/&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;cp -pfr /tmp/ecrespo /home/&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;rm -fr /tmp/ecrespo&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;5. Verificar el funcionamiento del cifrado de archivos.&lt;/div&gt;&lt;div&gt;Para propósitos de prueba se copia un archivo de /etc/ al home del usuario.&lt;/div&gt;&lt;div&gt;&lt;div&gt;Mostrar la información que contiene el archivo hostname en /etc/&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;cat /etc/hostname&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;canaima-popular&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Copiar el archivo hostname al home del usuario:&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;cp /etc/hostname /home/ecrespo/&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Mientras la partición cifrada se encuentra montada se puede visualizar los archivos:&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;div&gt;&lt;b&gt;cat /home/ecrespo/hostname&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;canaima-popular&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Desmontar la partición.&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;umount /home/ecrespo/&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Verificar que el archivo está cifrado:&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;div&gt;&lt;b&gt;cat /home/ecrespo/hostname&lt;/b&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;4��ˉ�s||    �     "3DUfw`�6���D �̬�����{� _CONSOLE ('��N�pD���-� \ٛn�Ś/��TD��xҝD[:�$]   �wq�V��&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;�n /�k�a:�H.�{ USj�@u)�c ������T� �� �m�иや�  � Z�&amp;amp;��0�Q��B�� /��q�e��E��li�"dx�tDs���k����h�J��20��&amp;amp;T�?R�x� �W�$�&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  �$�@ �&amp;amp;&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ��� �G� /�.L���1d�� j����{cYRꄙZ`��t 8�4ԬZ~ ,)H&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;eb �� f ��?��&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;�_' ��K&amp;amp;�d)����{y�z����ֆ�2x��h�� &amp;amp;j���tuq��a�JeJ�� ���\"~&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  ��5`� V RCB`��������PU�&amp;amp;������X�&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;9Ԥ[�  4O.� �� ̔�;/ �����#j V`Sf^��&amp;lt;�uB8  �ЭIx�4PR�� dml��`&amp;amp;c �&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;! ҟ&amp;amp;`�~�U?u�� �����쵮 @�)�8�Q U��杞M�e��="�}�V# ��&amp;gt;������ �&amp;gt;�F�� R�#ZgI���^J�� ,��0ݼR�rO�f��AxS��3�\�M���o�D �u�Av)�qq%�(F�/���%tL��w�U�k6~c��` “=�4N��E�= #� � a7�����v�(V�p�HlR�Y5����#^���K �~ :h��Z�Q�J�{�FC�N;*� 0Bő*���=� &lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;�ՙ��R�mќet  ���7B�_�Dz.[�6&amp;gt;�ĸؓ�� �Nc��#��NR��@� 4 �/���M?Om �|;/�Oe9�6��&amp;amp;6D*U�A�e��� �V&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;�ZM�&amp;lt;ɝ��"�0��0�WŸL�H�,r &lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;�&amp;gt;��f��4�$�wA�rѫ� �0H�����CP�i��&amp;amp;���!b���-#&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;$ލ;�X!y�� ~� I5e��V|Y�\� �H^£�7�0�Z��{�}"!��͡�� 6�M�!LNȆXvF &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )� ��G�Nuɍ�  �  ӧ��s���t  ���t��o&amp;amp;� C������W�#��Cpk�&amp;gt;&amp;lt;„&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;6. Montar automáticamente&amp;nbsp; la partición o directorio.&lt;/div&gt;&lt;div&gt;Conecte un pendrive y ejecute el comando fdisk -l donde aparecerá la partición del pendrive:&lt;br /&gt;
&lt;div style="color: red;"&gt;&lt;b&gt;fdisk -l &lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;&amp;nbsp;Disk /dev/sdb: 16.0 GB, 16011542528 bytes&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;32 heads, 63 sectors/track, 15512 cylinders, 31272544 sectores en total&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;Units = sectores of 1 * 512 = 512 bytes&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;Sector size (logical/physical): 512 bytes / 512 bytes&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;I/O size (minimum/optimal): 512 bytes / 512 bytes&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;Identificador del disco: 0x59a4123d&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;Disposit. Inicio&amp;nbsp;&amp;nbsp;&amp;nbsp; Comienzo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Fin&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Bloques&amp;nbsp; Id&amp;nbsp; Sistema&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;/dev/sdb1&amp;nbsp;&amp;nbsp; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 63&amp;nbsp;&amp;nbsp;&amp;nbsp; 31272191&amp;nbsp;&amp;nbsp;&amp;nbsp; 15636064+&amp;nbsp;&amp;nbsp; b&amp;nbsp; W95 FAT32&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
Montar el pendrive:&lt;br /&gt;
&lt;div style="color: red;"&gt;&lt;b&gt;mkdir /mnt/usb&lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;mount /dev/sdb1 /mnt/usb&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Al ejecutar mount sólo mostrará las particiones montadas en el equipo:&lt;br /&gt;
&lt;div style="color: red;"&gt;&lt;b&gt;mount &lt;/b&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;b&gt;/dev/sdb1 on /mnt/usb type vfat (rw)&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
A diferencia del artículo original el pendrive y la partición cifrada no se monta automaticamente.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="system"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/882744969176160062-6676400188907318029?l=ernesto-ecrespo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/Ow7s-JkAP2w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/6676400188907318029/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=6676400188907318029" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/6676400188907318029?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/6676400188907318029?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/Ow7s-JkAP2w/como-cifrar-directoriosparticiones-con.html" title="Como cifrar directorios/particiones con eCryptfs" /><author><name>Ernesto Crespo</name><uri>https://profiles.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAABTg/KepLh0e_Jso/s512-c/photo.jpg" /></author><thr:total>0</thr:total><georss:featurename>Libertador, Venezuela</georss:featurename><georss:point>8.667207610218265 -71.1239074707031</georss:point><georss:box>8.382700110218265 -71.3079284707031 8.951715110218265 -70.9398864707031</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2011/08/como-cifrar-directoriosparticiones-con.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEARHs8eip7ImA9WhdQGEg.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-4247609053819258334</id><published>2011-08-20T11:07:00.002-04:30</published><updated>2011-08-20T11:07:25.572-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-20T11:07:25.572-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="canaima" /><category scheme="http://www.blogger.com/atom/ns#" term="Redes" /><category scheme="http://www.blogger.com/atom/ns#" term="DNS" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><title>Usar dnsmasq como servidor DNS cache y local</title><content type="html">En el &lt;a href="http://ernesto-ecrespo.blogspot.com/2011/02/mejorando-la-velocidad-de-consultas-de.html"&gt;artículo anterior&lt;/a&gt; explicaba como mejorar las consultas de DNS del equipo con dnsmaq.&lt;br /&gt;
&lt;br /&gt;
También se puede agregar equipos con su IP como de un servidor de DNS con Bind9 en funcionamiento.&lt;br /&gt;
&lt;br /&gt;
Se tiene una máquina virtual de nombre grievous e IP&amp;nbsp;192.168.10.53.&lt;br /&gt;
&lt;br /&gt;
Para instalr dnsmasq se ejecuta apt-get.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;apt-get install dnsmasq&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Configurar dnsmasq como DNS cache y local.&lt;br /&gt;
&lt;br /&gt;
Se define la ruta del archivo resolv.conf que hace consultas al servidor de DNS externo.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="color: lime;"&gt;resolv-file=/etc/resolv-orig.conf&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Definir respuestas de peticiones locales dadas por el archivo /etc/hosts.&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: lime;"&gt;&amp;nbsp;local=/localnet/&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Y eso es todo lo que hay que cambiarse en el archivo /etc/dnsmasq.conf para resolver nombres de equipos locales por medio de /etc/hosts.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Agregar los equipos en el archivo /etc/hosts.&lt;/div&gt;&lt;div&gt;En este caso se tiene el equipo grievous:&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: lime;"&gt;192.168.10.53 &amp;nbsp; grievous &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;grievous&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Si se necesita agregar más equipos al servidor de DNS simplemente se edita el archivo /etc/hosts agregando los equipos en dicho archivo.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Se crea el archivo /etc/resolv-orig.conf donde se encuentra las IPs de los servidores de DNS externos.&lt;/div&gt;&lt;div&gt;En este caso se está usando los servidores de DNS de Google, OpenDNS y de la red del trabajo.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: lime;"&gt;nameserver 8.8.8.8&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: lime;"&gt;nameserver 8.8.4.4&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: lime;"&gt;nameserver 208.67.222.222&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: lime;"&gt;nameserver 208.67.220.220&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: lime;"&gt;nameserver 192.168.32.254&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Ya se tiene configurado el servidor de DNS, sólo falta que el equipo realice las consultas por medio del archivo /etc/resolv.conf, el cual debe apuntar al servidor local de DNS (127.0.0.1).&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: lime;"&gt;nameserver 127.0.0.1&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
Ahora se puede probar la resolución de nombres en el equipo.&lt;br /&gt;
Probar que devuelve respuestas el servidor DNS al consultar el nombre del equipo grievous:&lt;br /&gt;
&amp;nbsp;&lt;i&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;host grievous&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;i&gt;grievous has address 192.168.10.53&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;dig grievous&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;; &amp;lt;&amp;lt;&amp;gt;&amp;gt; DiG 9.7.3 &amp;lt;&amp;lt;&amp;gt;&amp;gt; grievous&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;;; global options: +cmd&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;;; Got answer:&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;;; -&amp;gt;&amp;gt;HEADER&amp;lt;&amp;lt;- opcode: QUERY, status: NOERROR, id: 19819&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;;; QUESTION SECTION:&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;;grievous.&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;			&lt;/span&gt;IN&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;A&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;;; ANSWER SECTION:&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;grievous.&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;		&lt;/span&gt;0&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;IN&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;A&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;192.168.10.53&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;;; Query time: 6 msec&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;;; SERVER: 127.0.0.1#53(127.0.0.1)&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;;; WHEN: Sat Aug 20 10:06:45 2011&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;;; MSG SIZE &amp;nbsp;rcvd: 42&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Ahora se puede verificar los rendimientos de los servidores de DNS con NameBench. Para instalarlo se ejecuta apt-get.&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;apt-get install &amp;nbsp;namebench&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;En la siguiente figura se muestra la ejecución de namebench donde se le define el servidor de Nombres a utilizar.&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-YCt_b6Tlpko/Tk_El5qucLI/AAAAAAAAA5E/ptigtdf8Ihc/s1600/Captura%2Bde%2Bpantalla%2B-%2B200811%2B-%2B09%253A55%253A56.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="167" src="http://3.bp.blogspot.com/-YCt_b6Tlpko/Tk_El5qucLI/AAAAAAAAA5E/ptigtdf8Ihc/s320/Captura%2Bde%2Bpantalla%2B-%2B200811%2B-%2B09%253A55%253A56.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
A continuación se muestra las figuras del resultado de Namebench.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-D69JlMc_Srs/Tk_S0CCyzRI/AAAAAAAAA5M/qb64GvJa2fA/s1600/namebench1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="98" src="http://4.bp.blogspot.com/-D69JlMc_Srs/Tk_S0CCyzRI/AAAAAAAAA5M/qb64GvJa2fA/s320/namebench1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-RRo-JUemAaQ/Tk_S7mofHcI/AAAAAAAAA5U/tpOrBKgyIgE/s1600/namebench2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="89" src="http://3.bp.blogspot.com/-RRo-JUemAaQ/Tk_S7mofHcI/AAAAAAAAA5U/tpOrBKgyIgE/s320/namebench2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-UYhyQSsAoWY/Tk_TEJ6uloI/AAAAAAAAA5c/rsbFO8hCr9A/s1600/namebench3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="183" src="http://4.bp.blogspot.com/-UYhyQSsAoWY/Tk_TEJ6uloI/AAAAAAAAA5c/rsbFO8hCr9A/s320/namebench3.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-Gjx4mU5we2k/Tk_TNCcDXBI/AAAAAAAAA5k/nFgqdF0ymy8/s1600/namebench4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="187" src="http://1.bp.blogspot.com/-Gjx4mU5we2k/Tk_TNCcDXBI/AAAAAAAAA5k/nFgqdF0ymy8/s320/namebench4.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/882744969176160062-4247609053819258334?l=ernesto-ecrespo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/h1JjymyCBqQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/4247609053819258334/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=4247609053819258334" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/4247609053819258334?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/4247609053819258334?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/h1JjymyCBqQ/usar-dnsmasq-como-servidor-dns-cache-y.html" title="Usar dnsmasq como servidor DNS cache y local" /><author><name>Ernesto Crespo</name><uri>https://profiles.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAABTg/KepLh0e_Jso/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-YCt_b6Tlpko/Tk_El5qucLI/AAAAAAAAA5E/ptigtdf8Ihc/s72-c/Captura%2Bde%2Bpantalla%2B-%2B200811%2B-%2B09%253A55%253A56.png" height="72" width="72" /><thr:total>1</thr:total><georss:featurename>Libertador, Venezuela</georss:featurename><georss:point>8.664492383532476 -71.12528076171873</georss:point><georss:box>8.379984883532476 -71.30930176171873 8.948999883532476 -70.94125976171873</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2011/08/usar-dnsmasq-como-servidor-dns-cache-y.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMEQXo_cSp7ImA9WhdQE0Q.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-8170144835836035070</id><published>2011-08-15T03:50:00.008-04:30</published><updated>2011-08-15T03:50:00.449-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-15T03:50:00.449-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><title>Manejando contactos y realizando una llamada con python en Android</title><content type="html">Retornando a los artículos sobre Android.&lt;br /&gt;
&lt;br /&gt;
Este artículo toca el tema de como capturar la información del telefono y contacto del celular. Se crea una lista de contactos y telefonos, se despliega la información en un widget de selección simple, luego de seleccionar al contacto se captura la selección, se despliega la información del contacto y al final se realiza la llamada a dicho contacto.&lt;br /&gt;
&lt;br /&gt;
Las clases nuevas utilizadas en el programa son:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;queryContent:Realiza una busqueda dentro de un contenido. En este caso se busca los contactos.&lt;/li&gt;
&lt;li&gt;phoneCallNumber: Permite realizar una llamada pasando el número de telefono como un string.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
El código del programa se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;#Importar el modulo android&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;import android&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;#importar la funcion sleep del modulo time&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;from time import sleep&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;#Crea la instancia droid del objeto Android.&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;droid = android.Android()&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;#Se captura los contactos&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;contactos = droid.queryContent('content://com.android.contacts/data/phones',\&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;
&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ['display_name','data1'],None,None,None).result&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;
&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;
&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;#Se crean la lista nombres y telefonos&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;nombres = []&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;telefonos = []&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;
&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;#Se agrega la informacion de los contactos a las listas.&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;for i in range(len(contacts)):&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; nombres.append(contacts[i][u'display_name'])&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; telefonos.append(contacts[i][u'data1'])&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;
&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;#Se despliega la lista de contactos&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;droid.dialogCreateAlert("Contactos")&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;droid.dialogSetItems(nombres)&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;droid.dialogShow()&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;#Se captura el resultado de la seleccion simple&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;respuesta&amp;nbsp; = droid.dialogGetResponse().result&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;#Se muestra la informacion del contacto seleccionado&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;droid.makeToast('El contacto seleccionado es: %s, su numero es: %s'&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %(nombres[respuesta['item']],telefonos[respuesta['item']]))&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;sleep(5)&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;droid.makeToast("Realizando la llamada")&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;sleep(2)&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;#Se realiza la llamada al contacto seleccioando.&lt;/i&gt;&lt;/div&gt;&lt;div style="color: blue;"&gt;&lt;i&gt;droid.phoneCallNumber("%s" %telefonos[respuesta['item']])&lt;/i&gt;&lt;/div&gt;&lt;/pre&gt;&lt;br /&gt;
A continuación se muestra la figura de la lista de contactos:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-zm4CdnhacR0/Tkhkgo98blI/AAAAAAAAA4E/M9QldGaBkys/s1600/screenshot2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-zm4CdnhacR0/Tkhkgo98blI/AAAAAAAAA4E/M9QldGaBkys/s320/screenshot2.png" width="180" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
La siguiente figura muestra el contacto seleccionado:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-FZtNU2SgeOc/TkhkyP3J8nI/AAAAAAAAA4M/YNRnICEDKmw/s1600/screenshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-FZtNU2SgeOc/TkhkyP3J8nI/AAAAAAAAA4M/YNRnICEDKmw/s320/screenshot.png" width="180" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
La última figura muestra la realización de la llamada del contacto seleccionado:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-gwCYnLjDgLk/TkhlHd3r84I/AAAAAAAAA4U/rU-aRulEsrg/s1600/screenshot3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-gwCYnLjDgLk/TkhlHd3r84I/AAAAAAAAA4U/rU-aRulEsrg/s320/screenshot3.png" width="180" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
El código QR del programa se muestra en la siguiente figura:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ZnemRgUgaZg/TkhmTaJ8EoI/AAAAAAAAA4c/Gsqibp2Rc_8/s1600/contactos1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-ZnemRgUgaZg/TkhmTaJ8EoI/AAAAAAAAA4c/Gsqibp2Rc_8/s320/contactos1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/882744969176160062-8170144835836035070?l=ernesto-ecrespo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/uzUQMYj1h2U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/8170144835836035070/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=8170144835836035070" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/8170144835836035070?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/8170144835836035070?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/uzUQMYj1h2U/manejando-contactos-y-realizando-una.html" title="Manejando contactos y realizando una llamada con python en Android" /><author><name>Ernesto Crespo</name><uri>https://profiles.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAABTg/KepLh0e_Jso/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-zm4CdnhacR0/Tkhkgo98blI/AAAAAAAAA4E/M9QldGaBkys/s72-c/screenshot2.png" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Libertador, Venezuela</georss:featurename><georss:point>8.654310108872336 -71.12528076171873</georss:point><georss:box>8.369802608872336 -71.30930176171873 8.938817608872336 -70.94125976171873</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2011/08/manejando-contactos-y-realizando-una.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEAARng8eip7ImA9WhdQE0g.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-1477014987454701624</id><published>2011-08-14T15:42:00.000-04:30</published><updated>2011-08-14T15:42:27.672-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-14T15:42:27.672-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="canaima" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><category scheme="http://www.blogger.com/atom/ns#" term="pyqt" /><title>Tutorial de PyQt. Editor de archivos sencillo. Parte 10.</title><content type="html">En este artículo se explica como crear un editor de texto sencillo. &lt;br /&gt;
&lt;br /&gt;
Se tendrá una barra de menú con la opción Archivo, dentro de ella se despliega la opción abrir y cerrar aplicación; al abrir la aplicación en la ventana del editor aparecerá el nombre del archivo.&lt;br /&gt;
&lt;br /&gt;
Se utilizarán las siguientes clases:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;QTextEdit: Define el editor de textos.&lt;/li&gt;
&lt;li&gt;QAction: Permite definir acciones en el menú.&lt;/li&gt;
&lt;li&gt;menuBar: Se define la barra de menú.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
El código del programa es el siguiente:&lt;br /&gt;
&lt;pre&gt;&lt;i style="color: blue;"&gt;#!/usr/bin/env python

import sys
from PyQt4 import QtGui
from PyQt4 import QtCore


class App(QtGui.QMainWindow):
&amp;nbsp;&amp;nbsp;&amp;nbsp; def __init__(self,parent=None):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; QtGui.QWidget.__init__(self, parent)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se define el tamano de la ventana
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.setGeometry(0, 50, 600, 400)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se le coloca un titulo a la ventana y se asocia un icono.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.setWindowTitle('Editor de Texto:')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.setWindowIcon(QtGui.QIcon('./openlogo-50.png'))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se define el widget de edicion de texto
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.textEdit = QtGui.QTextEdit()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se coloca en el centro
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.setCentralWidget(self.textEdit)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se define la barra de estatus y se le asigna foco
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.statusBar()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.setFocus()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se define la accion abrir archivo, con
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #evento de teclado y mensaje
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; openFile = QtGui.QAction('Abrir', self)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; openFile.setShortcut('Ctrl+a')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; openFile.setStatusTip('Abrir archivo nuevo')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se define la accion cerrar aplicacion
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #con evento de teclado y mensaje
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; closeApp = QtGui.QAction('Cerrar',self)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; closeApp.setShortcut('Ctrl+w')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; closeApp.setStatusTip('Cerrar aplicacion')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se define la barra de menu
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; menubar = self.menuBar()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Nombre archivo y se agrega abrir y cerrar aplicacion
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fileMenu = menubar.addMenu('&amp;amp;Archivo')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fileMenu.addAction(openFile)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fileMenu.addAction(closeApp)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #se asocia los eventos a la accion abrir archivo y cerrar aplicacion. 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.connect(closeApp, QtCore.SIGNAL('triggered()'),QtGui.qApp, QtCore.SLOT('quit()'))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.connect(openFile, QtCore.SIGNAL('triggered()'), self.showDialog)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 


&amp;nbsp;&amp;nbsp;&amp;nbsp; def showDialog(self):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se captura el nombre del archivo a abrir
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; filename = QtGui.QFileDialog.getOpenFileName(self, 'Abrir archivo',
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; '/home')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se define un neuvo titulo a la ventan de la aplicacion
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.setWindowTitle('Editor de Texto:%s' %filename)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se abre el archivo y se
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #desplega la informacion en el widget de
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #edicion de texto
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fname = open(filename)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = fname.read()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.textEdit.setText(data)
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
#Se ejecuta el programa principal
if __name__ == "__main__":&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; #Se instancia la clase QApplication&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; app = QtGui.QApplication(sys.argv)&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; #Se instancia el objeto QuitButton&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; qb = App()&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; #Se muestra la aplicacion&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; qb.show()&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; #Se sale de la aplicacion&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; sys.exit(app.exec_())&lt;/i&gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
La siguiente figura muestra la aplicación al inicio.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-oF1Rku2LR4E/Tkgqq6XljeI/AAAAAAAAA3k/3Rby0A0Fi3g/s1600/Captura%2Bde%2Bpantalla%2B-%2B140811%2B-%2B15%253A16%253A11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="226" src="http://3.bp.blogspot.com/-oF1Rku2LR4E/Tkgqq6XljeI/AAAAAAAAA3k/3Rby0A0Fi3g/s320/Captura%2Bde%2Bpantalla%2B-%2B140811%2B-%2B15%253A16%253A11.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
La siguiente figura muestra las opciones de la barra de menú:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-2P2i7Xraznk/TkgrAmQE_dI/AAAAAAAAA3s/yq-wtOiQFj8/s1600/Captura%2Bde%2Bpantalla%2B-%2B140811%2B-%2B15%253A16%253A37.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="226" src="http://1.bp.blogspot.com/-2P2i7Xraznk/TkgrAmQE_dI/AAAAAAAAA3s/yq-wtOiQFj8/s320/Captura%2Bde%2Bpantalla%2B-%2B140811%2B-%2B15%253A16%253A37.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
La siguiente figura muestra la ventana de dialogo de abrir archivo:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-KeZ06jCA1G8/TkgrLiXhgyI/AAAAAAAAA30/JLJwqx4LvCU/s1600/Captura%2Bde%2Bpantalla%2B-%2B140811%2B-%2B15%253A17%253A16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="222" src="http://2.bp.blogspot.com/-KeZ06jCA1G8/TkgrLiXhgyI/AAAAAAAAA30/JLJwqx4LvCU/s320/Captura%2Bde%2Bpantalla%2B-%2B140811%2B-%2B15%253A17%253A16.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
La última figura muestra ya la información del archivo en el editor de texto:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-tStCbUCAYjo/TkgrYHCLKwI/AAAAAAAAA38/z_foLIuQFno/s1600/Captura%2Bde%2Bpantalla%2B-%2B140811%2B-%2B15%253A17%253A34.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="226" src="http://2.bp.blogspot.com/-tStCbUCAYjo/TkgrYHCLKwI/AAAAAAAAA38/z_foLIuQFno/s320/Captura%2Bde%2Bpantalla%2B-%2B140811%2B-%2B15%253A17%253A34.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/882744969176160062-1477014987454701624?l=ernesto-ecrespo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/F0fhBCzi0DE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/1477014987454701624/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=1477014987454701624" title="2 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/1477014987454701624?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/1477014987454701624?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/F0fhBCzi0DE/tutorial-de-pyqt-editor-de-archivos.html" title="Tutorial de PyQt. Editor de archivos sencillo. Parte 10." /><author><name>Ernesto Crespo</name><uri>https://profiles.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAABTg/KepLh0e_Jso/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-oF1Rku2LR4E/Tkgqq6XljeI/AAAAAAAAA3k/3Rby0A0Fi3g/s72-c/Captura%2Bde%2Bpantalla%2B-%2B140811%2B-%2B15%253A16%253A11.png" height="72" width="72" /><thr:total>2</thr:total><georss:featurename>Mérida, Venezuela</georss:featurename><georss:point>8.6 -71.14999999999998</georss:point><georss:box>8.5591365 -71.19840849999997 8.6408635 -71.10159149999998</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2011/08/tutorial-de-pyqt-editor-de-archivos.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUARXc8eCp7ImA9WhdQEks.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-2461583121304532569</id><published>2011-08-13T16:14:00.000-04:30</published><updated>2011-08-13T16:14:04.970-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-13T16:14:04.970-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><category scheme="http://www.blogger.com/atom/ns#" term="pyqt" /><title>Tutorial de PyQt. Barra de progreso. Parte 9.</title><content type="html">Continuando con la serie de artículos sobre PyQt en este caso se tratará sobre el widget de la barra de progreso.&lt;br /&gt;
&lt;br /&gt;
Se utilizarán los siguientes widgets:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Qbutton: Botón de iniciar y detener la barra de progreso y el botón salir.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qprogressbar.html"&gt;QProgressBar&lt;/a&gt;: Es el widget de la barra de progreso.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qtimer.html"&gt;QTimer&lt;/a&gt;: Provee un timer que es quien maneja el progreso de la barra.&lt;/li&gt;
&lt;/ul&gt;Se tiene la barra de progreso que se inicia cuando se le da clip al botón, se incrementa la barra hasta llegar a 100, el botón que inicia la barra sirve también para detenerlo, volver a arrancar el progreso, cuando se llega a 100 el botón se coloca otra vez para iniciar la barra, colocando el contador en cero para poder iniciar de cero el incremento. Se tiene un botón para salir de la aplicación.&lt;br /&gt;
&lt;br /&gt;
El código del programa se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style="color: blue;"&gt;&lt;i&gt;#!/usr/bin/env python

import sys
from PyQt4 import QtGui
from PyQt4 import QtCore


class App(QtGui.QWidget):
&amp;nbsp;&amp;nbsp;&amp;nbsp; def __init__(self,parent=None):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; QtGui.QWidget.__init__(self, parent)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se define el tamano de la ventana
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.setGeometry(400, 400, 250, 150)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se le coloca un titulo a la ventana y se asocia un icono.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.setWindowTitle('Barra de progreso')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.setWindowIcon(QtGui.QIcon('./openlogo-50.png'))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se definen los widgets a utilizar en la ventana.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se crea la instancia de la barra de progreso.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.pbar = QtGui.QProgressBar(self)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se crea el boton que inicia/detiene la barra de progreso
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.button = QtGui.QPushButton('Iniciar', self)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se define una politica al boton de no foco
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.button.setFocusPolicy(QtCore.Qt.NoFocus)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se define el boton salir.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.quit = QtGui.QPushButton('Salir', self)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se crea la instancia timer con el contador en cero
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.timer = QtCore.QBasicTimer()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.step = 0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #se asocia los eventos de los 2 botones. 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.connect(self.button, QtCore.SIGNAL('clicked()'),self.Accion)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.connect(self.quit, QtCore.SIGNAL('clicked()'),QtGui.qApp, QtCore.SLOT('quit()'))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se define como empaquetar los widgets.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #En este caso se usa grilla.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se crea la instancia
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid = QtGui.QGridLayout()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.setSpacing(10)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se agrupan los widgets pasando el
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #objeto luego el orden en vertical, el orden en
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #horizontal.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.addWidget(self.pbar, 1, 0)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.addWidget(self.button, 2, 0)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.addWidget(self.quit, 3, 1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se define el layout pasando la grilla
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.setLayout(grid)


&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; def timerEvent(self, event):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #funcion asociada al timer.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Si el contador llega a 100
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se detiene el timer, se cambia el titulo
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #del boton, se coloca el contador en cero
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #y se sale de la funcion.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Si no llega a 100, se incrementa en 1 el contador y
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #se le asigna un nuevo valor a la barra de progreso.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if self.step &amp;gt;= 100:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.timer.stop()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.button.setText('Iniciar')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.step = 0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.step = self.step + 1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.pbar.setValue(self.step)

&amp;nbsp;&amp;nbsp;&amp;nbsp; def Accion(self):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Si el timer esta activo se detiene y se
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #le cambia el titulo al boton con Iniciar.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if self.timer.isActive():
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.timer.stop()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.button.setText('Iniciar')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Si no esta activo el timer, se inicia con valor de 100
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #se coloca el titulo detener al boton.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.timer.start(100, self)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.button.setText('Detener')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
#Se ejecuta el programa principal
if __name__ == "__main__":&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; #Se instancia la clase QApplication&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; app = QtGui.QApplication(sys.argv)&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; #Se instancia el objeto QuitButton&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; qb = App()&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; #Se muestra la aplicacion&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; qb.show()&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; #Se sale de la aplicacion&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; sys.exit(app.exec_())&lt;/i&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Las 3 siguientes figuras muestran el funcionamiento del programa (al iniciarse el programa, iniciar la barra de progreso y al detenerse):&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.crespo.org.ve/imagenes/captura-progreso1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.crespo.org.ve/imagenes/captura-progreso1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.crespo.org.ve/imagenes/captura-progreso2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.crespo.org.ve/imagenes/captura-progreso2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.crespo.org.ve/imagenes/captura-progreso3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.crespo.org.ve/imagenes/captura-progreso3.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/882744969176160062-2461583121304532569?l=ernesto-ecrespo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/6gjP56U6aak" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/2461583121304532569/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=2461583121304532569" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/2461583121304532569?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/2461583121304532569?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/6gjP56U6aak/tutorial-de-pyqt-barra-de-progreso.html" title="Tutorial de PyQt. Barra de progreso. Parte 9." /><author><name>Ernesto Crespo</name><uri>https://profiles.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAABTg/KepLh0e_Jso/s512-c/photo.jpg" /></author><thr:total>0</thr:total><georss:featurename>Mérida, Venezuela</georss:featurename><georss:point>8.6 -71.14999999999998</georss:point><georss:box>8.5591365 -71.19840849999997 8.6408635 -71.10159149999998</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2011/08/tutorial-de-pyqt-barra-de-progreso.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUBRXo_cCp7ImA9WhdSGE8.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-2250128355111686018</id><published>2011-07-27T22:56:00.003-04:30</published><updated>2011-07-27T23:40:54.448-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-27T23:40:54.448-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="canaima" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="control de versiones" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><category scheme="http://www.blogger.com/atom/ns#" term="Mercurial" /><title>Gestionar los archivos de configuración en /etc con etckeeper y mercurial</title><content type="html">Continuando con los artículos de control de versiones distribuido con Mercurial ahora toca el respaldo y guardar las versiones de los archivos de configuración en /etc con etckeeper.&lt;br /&gt;
&lt;br /&gt;
La mayoria de los artículos que se consiguen sobre etckeeper es usando git o bazaar.&lt;br /&gt;
&lt;br /&gt;
Para esta guía es necesario tener conocimientos básicos de mercurial, pueden leer el artículo de &lt;a href="http://ernesto-ecrespo.blogspot.com/2009/04/control-de-versiones-con-mercurial.html"&gt;control de versiones con mercurial&lt;/a&gt; de este blog.&lt;br /&gt;
&lt;br /&gt;
Es necesario llevar un histórico de los archivos dentro del directorio /etc/, es esencial para un sistema saludable. Los beneficios rastrear cambios en los archivos dentro de /etc incluye:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Documentación: Los mensajes de log quedan atados a los cambios de configuración de los archivos que sirven como documentación.&lt;/li&gt;
&lt;li&gt;Resolución de problemas: Permite devolver cambios en las configuraciones que han dado problemas y así mantener la estabilidad del sistema.&lt;/li&gt;
&lt;/ul&gt;1.Instalación de etckeeper:&lt;br /&gt;
&amp;nbsp;Es necesario tener mercurial instalado.&lt;br /&gt;
&lt;div style="color: blue;"&gt;&lt;b&gt;aptitude install mercurial etckeeper&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
2.Configuración de etckeeper:&lt;br /&gt;
Se edita el archivo /etc/etckeeper/etckeeper.conf se comenta los distintos sistemas de control de versiones y se deja hg, adicionalmente se deja la opción de envío de correo a un usuario.&lt;br /&gt;
&lt;br /&gt;
&lt;i style="color: red;"&gt;VCS="hg"&lt;br /&gt;
# Options passed to hg commit when run by etckeeper.&lt;br /&gt;
HG_COMMIT_OPTIONS="-u ecrespo@gmail.com"&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Luego se edita el archivo /etc/mercurial/hgrc&lt;br /&gt;
Se agrega el correo del usuario:&lt;br /&gt;
&lt;div style="color: red;"&gt;&lt;i&gt;[ui]&lt;br /&gt;
username = ecrespo@gmail.com&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;
3. Se inicializa el control de versiones:&lt;br /&gt;
&lt;br /&gt;
&lt;b style="color: blue;"&gt;etckeeper init&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
A continuación se muestra como se ha agregado los archivos dentro de /etc en el control de versiones:&lt;br /&gt;
&lt;div style="color: lime;"&gt;adding xdg/xfce4/Xft.xrdb&lt;br /&gt;
adding xdg/xfce4/helpers.rc&lt;br /&gt;
adding xdg/xfce4/mount.rc&lt;br /&gt;
adding xdg/xfce4/panel/clock-14.rc&lt;br /&gt;
adding xdg/xfce4/panel/launcher-10.rc&lt;br /&gt;
adding xdg/xfce4/panel/launcher-7.rc&lt;br /&gt;
adding xdg/xfce4/panel/launcher-9.rc&lt;br /&gt;
adding xdg/xfce4/panel/panels.xml&lt;br /&gt;
adding xdg/xfce4/panel/systray-4.rc&lt;br /&gt;
adding xdg/xfce4/panel/xfce4-menu-5.rc&lt;br /&gt;
adding xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml&lt;br /&gt;
adding xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-session.xml&lt;br /&gt;
adding xdg/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml&lt;br /&gt;
adding xdg/xfce4/xinitrc&lt;br /&gt;
adding xml/catalog&lt;br /&gt;
adding xml/docbook-xml.xml&lt;br /&gt;
adding xml/docbook-xsl.xml&lt;br /&gt;
adding xml/rarian-compat.xml&lt;br /&gt;
adding xml/sgml-data.xml&lt;br /&gt;
adding xml/xml-core.xml&lt;/div&gt;&lt;br /&gt;
4. Se hace el primer commit:&lt;br /&gt;
&lt;div style="color: blue;"&gt;&lt;b&gt;etckeeper commit "Inicializacion del control de versiones"&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
5. Usando etckeeper.&lt;br /&gt;
Al realizar la instalación de un programa se ejecutará automáticamente el agregado de los archivos de configuración en el control de versiones.&lt;br /&gt;
Se instalará el paquete lighttpd para mostar el proceso de agregar los archivos al control de versiones:&lt;br /&gt;
&lt;b style="color: blue;"&gt;apt-get install lighttpd&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Al final aparece una serie de archivos agregados:&lt;br /&gt;
&lt;div style="color: purple;"&gt;&lt;span style="color: lime;"&gt;adding lighttpd/conf-available/15-fastcgi-php.conf&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: lime;"&gt;adding lighttpd/conf-available/90-debian-doc.conf&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: lime;"&gt;adding lighttpd/conf-available/README&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: lime;"&gt;adding lighttpd/lighttpd.conf&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: lime;"&gt;adding logrotate.d/lighttpd&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: lime;"&gt;adding rc0.d/K01lighttpd&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: lime;"&gt;adding rc1.d/K01lighttpd&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: lime;"&gt;adding rc2.d/S20lighttpd&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: lime;"&gt;adding rc3.d/S20lighttpd&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: lime;"&gt;adding rc4.d/S20lighttpd&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: lime;"&gt;adding rc5.d/S20lighttpd&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: lime;"&gt;adding rc6.d/K01lighttpd&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
Se revisa el estatus de mercurial en el directorio /etc:&lt;br /&gt;
&lt;b style="color: blue;"&gt;hg status /etc/&lt;/b&gt;&lt;br /&gt;
&lt;i style="color: red;"&gt;M ../etc/.etckeeper&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Al revisar el log de mercurial en el directorio /etc/ muestra los cambios realizados (commit):&lt;br /&gt;
&lt;b style="color: blue;"&gt;hg log /etc/&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="color: red;"&gt;&lt;i&gt;changeset:&amp;nbsp;&amp;nbsp; 1:ba22869a3179&lt;br /&gt;
tag:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tip&lt;br /&gt;
user:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ecrespo@gmail.com&lt;br /&gt;
date:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wed Jul 27 22:02:27 2011 -0430&lt;br /&gt;
summary:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; committing changes in /etc after apt run&lt;br /&gt;
&lt;br /&gt;
changeset:&amp;nbsp;&amp;nbsp; 0:f2a3f337ecc0&lt;br /&gt;
user:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ecrespo@gmail.com&lt;br /&gt;
date:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wed Jul 27 21:54:21 2011 -0430&lt;br /&gt;
summary:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Inicializacion del control de versiones&lt;/i&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/div&gt;Se tiene una descripción de los cambios en el changeset 0 se muestra la inicialización del control de versiones, en el changeset 1 se muestra el cambio luego de instalar lighttpd.&lt;br /&gt;
&lt;br /&gt;
Se modifica un archivo de configuración /etc/hosts :&lt;br /&gt;
&lt;div style="color: blue;"&gt;&lt;b&gt;etckeeper commit "Se elimina el dominio&amp;nbsp; del host jewel en /etc/hosts" /etc/hosts&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
Al volver a revisar el log de mercurial sobre el directorio /etc/ aparece el commit del cambio del archivo hosts:&lt;br /&gt;
&lt;br /&gt;
&lt;b style="color: blue;"&gt;hg log /etc/&lt;/b&gt;&lt;br /&gt;
&lt;i style="color: red;"&gt;changeset:&amp;nbsp;&amp;nbsp; 2:6efc1189bd8b&lt;br /&gt;
tag:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tip&lt;br /&gt;
user:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ecrespo@gmail.com&lt;br /&gt;
date:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wed Jul 27 22:08:25 2011 -0430&lt;br /&gt;
summary:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Se elimina el dominio del host jewel en /etc/hosts&lt;br /&gt;
&lt;br /&gt;
changeset:&amp;nbsp;&amp;nbsp; 1:ba22869a3179&lt;br /&gt;
user:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ecrespo@gmail.com&lt;br /&gt;
date:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wed Jul 27 22:02:27 2011 -0430&lt;br /&gt;
summary:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; committing changes in /etc after apt run&lt;br /&gt;
&lt;br /&gt;
changeset:&amp;nbsp;&amp;nbsp; 0:f2a3f337ecc0&lt;br /&gt;
user:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ecrespo@gmail.com&lt;br /&gt;
date:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wed Jul 27 21:54:21 2011 -0430&lt;br /&gt;
summary:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Inicializacion del control de versiones&lt;/i&gt;&lt;br /&gt;
&lt;div style="color: red;"&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/div&gt;Se puede ver las diferencias entre los cambios realizados en archivos dentro del directorio /etc:&lt;br /&gt;
&lt;b style="color: blue;"&gt;hg diff /etc/&lt;/b&gt;&lt;br /&gt;
&lt;i style="color: red;"&gt;diff -r 6efc1189bd8b hosts&lt;br /&gt;
--- a/hosts&amp;nbsp;&amp;nbsp;&amp;nbsp; Wed Jul 27 22:08:25 2011 -0430&lt;br /&gt;
+++ b/hosts&amp;nbsp;&amp;nbsp;&amp;nbsp; Wed Jul 27 22:13:41 2011 -0430&lt;br /&gt;
@@ -1,6 +1,6 @@&lt;br /&gt;
&amp;nbsp;127.0.0.1&amp;nbsp;&amp;nbsp;&amp;nbsp; localhost&lt;br /&gt;
&amp;nbsp;127.0.1.1&amp;nbsp;&amp;nbsp;&amp;nbsp; jewel&amp;nbsp;&amp;nbsp;&amp;nbsp; jewel&lt;br /&gt;
-&lt;br /&gt;
+127.0.0.1&amp;nbsp;&amp;nbsp;&amp;nbsp; sofia&amp;nbsp;&amp;nbsp; sofia&lt;br /&gt;
&amp;nbsp;# The following lines are desirable for IPv6 capable hosts&lt;br /&gt;
&amp;nbsp;::1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ip6-localhost ip6-loopback&lt;br /&gt;
&amp;nbsp;fe00::0 ip6-localnet&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Al realizar el commit y volver a hacer el diff está vez no muestra información por que ya los cambios se subieron al control de versiones:&lt;br /&gt;
&lt;div style="color: blue;"&gt;&lt;b&gt;etckeeper commit "Agregado el nombre sofia al host 127.0.0.1 en el archivo /etc/hosts" /etc/hosts&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
Al revisar los logs ahora aparece el cambio de agreado el nombre sofia al host 127.0.0.1:&lt;br /&gt;
&lt;b style="color: blue;"&gt;hg log /etc/&lt;/b&gt;&lt;br /&gt;
&lt;i style="color: red;"&gt;changeset:&amp;nbsp;&amp;nbsp; 3:452065708a7e&lt;br /&gt;
tag:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tip&lt;br /&gt;
user:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ecrespo@gmail.com&lt;br /&gt;
date:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wed Jul 27 22:16:13 2011 -0430&lt;br /&gt;
summary:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Agregado el nombre sofia al host 127.0.0.1 en el archivo /etc/hosts&lt;br /&gt;
&lt;br /&gt;
changeset:&amp;nbsp;&amp;nbsp; 2:6efc1189bd8b&lt;br /&gt;
user:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ecrespo@gmail.com&lt;br /&gt;
date:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wed Jul 27 22:08:25 2011 -0430&lt;br /&gt;
summary:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Se elimina pdvsa.com del host jewel en /etc/hosts&lt;br /&gt;
&lt;br /&gt;
changeset:&amp;nbsp;&amp;nbsp; 1:ba22869a3179&lt;br /&gt;
user:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ecrespo@gmail.com&lt;br /&gt;
date:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wed Jul 27 22:02:27 2011 -0430&lt;br /&gt;
summary:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; committing changes in /etc after apt run&lt;br /&gt;
&lt;br /&gt;
changeset:&amp;nbsp;&amp;nbsp; 0:f2a3f337ecc0&lt;br /&gt;
user:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ecrespo@gmail.com&lt;br /&gt;
date:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wed Jul 27 21:54:21 2011 -0430&lt;br /&gt;
summary:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Inicializacion del control de versiones&lt;/i&gt;&lt;br /&gt;
&lt;div style="color: red;"&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/div&gt;Para ver el tip de cada repo se ejecuta hg tip dentro del repositorio:&lt;br /&gt;
&lt;b style="color: blue;"&gt;root@jewel:/etc# hg tip&lt;/b&gt;&lt;br /&gt;
&lt;i style="color: red;"&gt;changeset:&amp;nbsp;&amp;nbsp; 3:452065708a7e&lt;br /&gt;
tag:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tip&lt;br /&gt;
user:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ecrespo@gmail.com&lt;br /&gt;
date:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wed Jul 27 22:16:13 2011 -0430&lt;br /&gt;
summary:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Agregado el nombre sofia al host 127.0.0.1 en el archivo /etc/hosts&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Ahora se mostrará todas las revisiones con los logs y luego se revertirá un cambio:&lt;br /&gt;
&lt;b style="color: blue;"&gt;hg log&lt;/b&gt; &lt;br /&gt;
&lt;i style="color: red;"&gt;changeset:&amp;nbsp;&amp;nbsp; 3:452065708a7e&lt;br /&gt;
tag:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tip&lt;br /&gt;
user:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ecrespo@gmail.com&lt;br /&gt;
date:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wed Jul 27 22:16:13 2011 -0430&lt;br /&gt;
summary:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Agregado el nombre sofia al host 127.0.0.1 en el archivo /etc/hosts&lt;br /&gt;
&lt;br /&gt;
changeset:&amp;nbsp;&amp;nbsp; 2:6efc1189bd8b&lt;br /&gt;
user:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ecrespo@gmail.com&lt;br /&gt;
date:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wed Jul 27 22:08:25 2011 -0430&lt;br /&gt;
summary:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Se elimina pdvsa.com del host jewel en /etc/hosts&lt;br /&gt;
&lt;br /&gt;
changeset:&amp;nbsp;&amp;nbsp; 1:ba22869a3179&lt;br /&gt;
user:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ecrespo@gmail.com&lt;br /&gt;
date:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wed Jul 27 22:02:27 2011 -0430&lt;br /&gt;
summary:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; committing changes in /etc after apt run&lt;br /&gt;
&lt;br /&gt;
changeset:&amp;nbsp;&amp;nbsp; 0:f2a3f337ecc0&lt;br /&gt;
user:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ecrespo@gmail.com&lt;br /&gt;
date:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Wed Jul 27 21:54:21 2011 -0430&lt;br /&gt;
summary:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Inicializacion del control de versiones&lt;/i&gt;&lt;br /&gt;
&lt;div style="color: red;"&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/div&gt;Se pueden ver los cambios con respecto a cada revisión, en el siguiente comando se revisa la revisión 1 con respecto a la 2 en /etc/hosts:&lt;br /&gt;
&lt;b style="color: blue;"&gt;hg diff -r 1 -r 2 /etc/hosts&lt;/b&gt;&lt;i style="color: red;"&gt;diff -r ba22869a3179 -r 6efc1189bd8b hosts&lt;br /&gt;
--- a/hosts&amp;nbsp;&amp;nbsp;&amp;nbsp; Wed Jul 27 22:02:27 2011 -0430&lt;br /&gt;
+++ b/hosts&amp;nbsp;&amp;nbsp;&amp;nbsp; Wed Jul 27 22:08:25 2011 -0430&lt;br /&gt;
@@ -1,5 +1,5 @@&lt;br /&gt;
&amp;nbsp;127.0.0.1&amp;nbsp;&amp;nbsp;&amp;nbsp; localhost&lt;br /&gt;
-127.0.1.1&amp;nbsp;&amp;nbsp;&amp;nbsp; jewel.dst.pdvsa.com&amp;nbsp;&amp;nbsp;&amp;nbsp; jewel&lt;br /&gt;
+127.0.1.1&amp;nbsp;&amp;nbsp;&amp;nbsp; jewel&amp;nbsp;&amp;nbsp;&amp;nbsp; jewel&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;# The following lines are desirable for IPv6 capable hosts&lt;br /&gt;
&amp;nbsp;::1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ip6-localhost ip6-loopback&lt;/i&gt;&lt;br /&gt;
&lt;div style="color: red;"&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;i&gt;Ahora se mostrará la 1 con respecto a la 3:&lt;/i&gt;&lt;/div&gt;&lt;div style="color: red;"&gt;&lt;i&gt; hg diff -r 1 -r 3 /etc/hosts&lt;br /&gt;
diff -r ba22869a3179 -r 452065708a7e hosts&lt;br /&gt;
--- a/hosts&amp;nbsp;&amp;nbsp;&amp;nbsp; Wed Jul 27 22:02:27 2011 -0430&lt;br /&gt;
+++ b/hosts&amp;nbsp;&amp;nbsp;&amp;nbsp; Wed Jul 27 22:16:13 2011 -0430&lt;br /&gt;
@@ -1,6 +1,6 @@&lt;br /&gt;
&amp;nbsp;127.0.0.1&amp;nbsp;&amp;nbsp;&amp;nbsp; localhost&lt;br /&gt;
-127.0.1.1&amp;nbsp;&amp;nbsp;&amp;nbsp; jewel.dst.pdvsa.com&amp;nbsp;&amp;nbsp;&amp;nbsp; jewel&lt;br /&gt;
-&lt;br /&gt;
+127.0.1.1&amp;nbsp;&amp;nbsp;&amp;nbsp; jewel&amp;nbsp;&amp;nbsp;&amp;nbsp; jewel&lt;br /&gt;
+127.0.0.1&amp;nbsp;&amp;nbsp;&amp;nbsp; sofia&amp;nbsp;&amp;nbsp; sofia&lt;br /&gt;
&amp;nbsp;# The following lines are desirable for IPv6 capable hosts&lt;br /&gt;
&amp;nbsp;::1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ip6-localhost ip6-loopback&lt;br /&gt;
&amp;nbsp;fe00::0 ip6-localnet&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;
Ahora se revierte el cambio de la revisión 3 a la 2 en el archivo /etc/hosts.&lt;br /&gt;
&lt;b style="color: blue;"&gt;hg revert -r 2 /etc/hosts&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Ahora el host sofia ya no aparece en el archivo /etc/hosts:&lt;br /&gt;
&lt;div style="color: purple;"&gt;127.0.0.1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; localhost&lt;br /&gt;
127.0.1.1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; jewel&amp;nbsp;&amp;nbsp; jewel&lt;br /&gt;
&lt;br /&gt;
# The following lines are desirable for IPv6 capable hosts&lt;br /&gt;
::1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ip6-localhost ip6-loopback&lt;br /&gt;
fe00::0 ip6-localnet&lt;br /&gt;
ff00::0 ip6-mcastprefix&lt;br /&gt;
ff02::1 ip6-allnodes&lt;br /&gt;
ff02::2 ip6-allrouters&lt;/div&gt;&lt;br /&gt;
Si se desea respaldar los archivos en un servidor se puede usar bitbucket como ejemplo, se crea el proyecto configuracion-jewel y se sube el contenido del directorio /etc/ con el comando hg push:&lt;br /&gt;
&lt;br /&gt;
&lt;b style="color: blue;"&gt;hg push https://bitbucket.org/ecrespo/configuracion-jewel&lt;/b&gt;&lt;br /&gt;
&lt;i style="color: red;"&gt;http authorization required&lt;br /&gt;
realm: Bitbucket.org HTTP&lt;br /&gt;
user: ecrespo&lt;br /&gt;
password: &lt;br /&gt;
pushing to https://bitbucket.org/ecrespo/configuracion-jewel&lt;br /&gt;
searching for changes&lt;br /&gt;
remote: adding changesets&lt;br /&gt;
remote: adding manifests&lt;br /&gt;
remote: adding file changes&lt;br /&gt;
remote: added 4 changesets with 5764 changes to 5759 files&lt;br /&gt;
remote: bb/acl: ecrespo is allowed. accepted payload.&lt;/i&gt;&lt;br /&gt;
&lt;div style="color: red;"&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/div&gt;En la siguiente figura se muestra una captura de pantalla de los cambios del proyecto en bitbucket.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-LZO5CrkxKYY/TjDg_LY3ZyI/AAAAAAAAA2s/SgAH_3hf7eI/s1600/Pantallazo-ecrespo+-+configuracion-jewel+-+overview+%25E2%2580%2593+Bitbucket+-+Iceweasel.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" src="http://4.bp.blogspot.com/-LZO5CrkxKYY/TjDg_LY3ZyI/AAAAAAAAA2s/SgAH_3hf7eI/s320/Pantallazo-ecrespo+-+configuracion-jewel+-+overview+%25E2%2580%2593+Bitbucket+-+Iceweasel.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-fO90853swmQ/TjDhBgJ-GkI/AAAAAAAAA2w/L_7JTTtq1F8/s1600/Pantallazo-ecrespo+-+configuracion-jewel+-+source+%25E2%2580%2593+Bitbucket+-+Iceweasel.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" src="http://3.bp.blogspot.com/-fO90853swmQ/TjDhBgJ-GkI/AAAAAAAAA2w/L_7JTTtq1F8/s320/Pantallazo-ecrespo+-+configuracion-jewel+-+source+%25E2%2580%2593+Bitbucket+-+Iceweasel.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Con esta guía ya se puede llevar un control de los cambios realizados en el directorio /etc/ con un control de versiones distribuido como mercurial.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/882744969176160062-2250128355111686018?l=ernesto-ecrespo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/vmU_iUUNXaI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/2250128355111686018/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=2250128355111686018" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/2250128355111686018?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/2250128355111686018?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/vmU_iUUNXaI/gestionar-los-archivos-de-configuracion.html" title="Gestionar los archivos de configuración en /etc con etckeeper y mercurial" /><author><name>Ernesto Crespo</name><uri>https://profiles.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAABTg/KepLh0e_Jso/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-LZO5CrkxKYY/TjDg_LY3ZyI/AAAAAAAAA2s/SgAH_3hf7eI/s72-c/Pantallazo-ecrespo+-+configuracion-jewel+-+overview+%25E2%2580%2593+Bitbucket+-+Iceweasel.png" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Mérida, Venezuela</georss:featurename><georss:point>8.6 -71.14999999999998</georss:point><georss:box>8.5591365 -71.19840849999997 8.6408635 -71.10159149999998</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2011/07/gestionar-los-archivos-de-configuracion.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4MQ30_fip7ImA9WhdSGEs.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-7336292324540000025</id><published>2011-07-26T14:22:00.002-04:30</published><updated>2011-07-28T10:26:22.346-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-28T10:26:22.346-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="canaima" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="libpam" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="pendrive" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><category scheme="http://www.blogger.com/atom/ns#" term="gnome" /><title>Iniciar sesión de usuario autenticando  vía pendrive</title><content type="html">Cuando no se pasa uno a modo paranoico se le ocurren ideas de como validar usuarios al ingresar en una sesión de escritorio vía GDM.&lt;br /&gt;
&lt;br /&gt;
En Debian/Ubuntu/Canaima existe los paquetes&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;libpam-usb y pamusb-tools, estos permiten crear una llave, dicha llave se guarda en el pendrive. Luego se configura pam para que se pida la llave al momento de ingresar usuario y clave en el GDM del equipo; si no se conecta el pendrive el GDM colocará un mensaje que clave invalida.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;Para instalar estos paquetes se ejecuta aptitude:&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;aptitude install libpam-usb pamusb-tools&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;Luego se conecta el pendrive en el equipo y se agrega el dispositivo en /etc/pamusb.conf con el comando pamusb-conf:&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;pamusb-conf --add-device /media/F060-785C/&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;Donde /media/F060-785C/ es la ruta del pendrive.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;Se agrega el usuario en /etc/pamusb.conf el cual iniciará sesión en el equipo:&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="background-color: white;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;pamusb-conf --add-user ecrespo&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;&lt;pre&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="background-color: white;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;&lt;pre&gt;Se verifica la configuración de pamusb con el usuario agregado:&lt;/pre&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Helvetica; white-space: normal;"&gt;&lt;pre&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;pamusb-check ecrespo&lt;/span&gt;&lt;/b&gt;&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;* Authentication request for user "ecrespo" (pamusb-check)
* Device "/media/F060-785C/" is connected (good).
* Performing one time pad verification...
* Regenerating new pads...
* Unable to update pads.
* Access granted.&lt;/span&gt;
&lt;/pre&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;
&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;Al devolver el programa acceso garantizado ya se tiene todo listo para usar el pendrive en el momento de inicio de sesión, sólo falta modificar pam para que permita la autenticación con el pendrive.&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;&lt;pre&gt;Se edita el archivo /etc/pam.d/common-aut y se agrega la siguiente línea:&lt;/pre&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="color: lime;"&gt;auth sufficient pam_usb.so&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;&lt;pre&gt;Con esta línea el GDM verifica el token de la llave, si se quiere que pida tanto la contraseña como el token se cambia sufficient a required.&lt;/pre&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Helvetica; white-space: normal;"&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="color: lime;"&gt;auth required pam_usb.so&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;&lt;pre&gt;A partir de ahora al iniciar sesión se necesita la contraseña y el token.&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;&lt;pre&gt;A continuación se muestra el mensaje que envía la consola al ejecutar sudo -s :&lt;/pre&gt;&lt;pre&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;[sudo] password for ecrespo: 
* pam_usb v0.4.2
* Authentication request for user "ecrespo" (sudo)
* Device "/media/F060-785C/" is connected (good).
* Performing one time pad verification...
* Regenerating new pads...
* Unable to update pads.
* Access granted.&lt;/span&gt;&lt;/b&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/882744969176160062-7336292324540000025?l=ernesto-ecrespo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/anKLmJRr7C8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/7336292324540000025/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=7336292324540000025" title="3 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/7336292324540000025?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/7336292324540000025?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/anKLmJRr7C8/iniciar-sesion-de-usuario-autenticando.html" title="Iniciar sesión de usuario autenticando  vía pendrive" /><author><name>Ernesto Crespo</name><uri>https://profiles.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAABTg/KepLh0e_Jso/s512-c/photo.jpg" /></author><thr:total>3</thr:total><georss:featurename>Mérida, Venezuela</georss:featurename><georss:point>8.6 -71.14999999999998</georss:point><georss:box>8.5591365 -71.19840849999997 8.6408635 -71.10159149999998</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2011/07/iniciar-sesion-de-usuario-autenticando.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAAQX86cSp7ImA9WhdSFE4.&quot;"><id>tag:blogger.com,1999:blog-882744969176160062.post-2145435121271548471</id><published>2011-07-23T11:29:00.000-04:30</published><updated>2011-07-23T11:29:00.119-04:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-23T11:29:00.119-04:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="código QR" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="General" /><category scheme="http://www.blogger.com/atom/ns#" term="Debian" /><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><category scheme="http://www.blogger.com/atom/ns#" term="pyqt" /><title>Tutorial de PyQt. checkbutton, pixmap, QFileDialog y Código QR. Parte 8.</title><content type="html">Este post trata de un formulario en PyQt que se ingresa los datos, una foto, los días que desea por ejemplo apoyar en un evento y genera un código QR con dicha información.&lt;br /&gt;
&lt;br /&gt;
Los widgets nuevos que se utilizarán son:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;QCheckButton: Permite crear botones check, se pueden seleccionar varios opciones.&lt;/li&gt;
&lt;li&gt;QPixmap: Permite agregar una imagen a una etiqueta.&lt;/li&gt;
&lt;li&gt;QFileDialog: Abre una ventana de dialogo para abrir o salvar&amp;nbsp; un archivo.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
El código del programa es el siguiente:&lt;br /&gt;
&lt;pre&gt;&lt;i style="color: blue;"&gt;#!/usr/bin/env python
# -*- coding: utf-8 -*-

#modulo qrencode
from qrencode import encode

#Se importa el modulo sys
import sys 
#De PyQt4 importar QtGui y QtCore
from PyQt4 import QtGui, QtCore

#Import os
import os 



class App(QtGui.QWidget):
&amp;nbsp;&amp;nbsp;&amp;nbsp; def __init__(self, parent=None):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; QtGui.QWidget.__init__(self, parent)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se define el tamagno y posicion de la ventana
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.setGeometry(0, 50, 600, 400)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se le coloca un titulo a la ventana y se asocia un icono.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.setWindowTitle('Generacion de codigo QR')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.setWindowIcon(QtGui.QIcon('./openlogo-50.png'))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se crea la etiqueta para la foto
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foto = QtGui.QLabel("Foto: ")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.imagen = QtGui.QLabel("")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se crea el boton para cargar la foton
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cargar = QtGui.QPushButton("Cargar Foto",self)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Etiqueta nombre
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.nombre = QtGui.QLabel('Nombre: ')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Entrada de datos del nombre
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.nombreEdit = QtGui.QLineEdit()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se crea la etiqueta y etrada de datos de la cedula&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.etiquetaCedula = QtGui.QLabel("Cedula")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.cedula = QtGui.QLineEdit()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se crea la etiqueta y el widget para la fecha
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #de nacimiento&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fechaEtiqueta = QtGui.QLabel("Fecha de Nacimiento")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.fecha = QtGui.QDateEdit(self)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se define el formato dia/mes/agno
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.fecha.setDisplayFormat("dd/MM/yyyy")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se fija la fecha inicial a la fecha actual
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.fecha.setDate(QtCore.QDate.currentDate())
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se define la etiqueta que pregunta por el sexo
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; etiquetaSexo = QtGui.QLabel("Sexo:")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se definen los botones de radio para masculino y femenino
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.botonradio1 = QtGui.QRadioButton("&amp;amp;Masculino",self)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.botonradio2 = QtGui.QRadioButton("&amp;amp;Femenino",self)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Etiqueta ciudad.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.ciudadEtiqueta = QtGui.QLabel("Ciudad de Nacimiento:")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se define el comboBox con las ciudades
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.combo = QtGui.QComboBox(self)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ciudades = ["Maracaibo",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Valencia","Maracay","Barquisimeto","Merida","Caracas",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "San Cristobal","Barinas","El vigia","Ciudad Bolivar",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Puerto Ordaz","Coro","Puerto Cabello","Margarita"]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for ciudad in ciudades:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.combo.addItem(ciudad)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se crea la etiqueta de dia de la semana
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; diasemana = QtGui.QLabel("Dia semana")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se define los botones de check para los dias de la semana
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.lunes = QtGui.QCheckBox("Lunes",self)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.martes = QtGui.QCheckBox("Martes",self)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.miercoles = QtGui.QCheckBox("Miercoles",self)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.jueves = QtGui.QCheckBox("Jueves",self)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.viernes = QtGui.QCheckBox("Viernes",self)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se define el boton salir
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; quit = QtGui.QPushButton('Salir', self)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se define el boton procesar la informacion
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; okButton = QtGui.QPushButton("Procesar",self)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se crea la etiqueta que mostrara el codigo QR
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.label = QtGui.QLabel(self) 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se define un timer
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.timer = QtCore.QBasicTimer()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.step = 0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se empaquetan los widgets en la ventana.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid = QtGui.QGridLayout()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.setSpacing(10)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.addWidget(foto,1,0)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.addWidget(self.imagen,1,1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.addWidget(cargar,1,2)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.addWidget(self.nombre, 2, 0)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.addWidget(self.nombreEdit, 2, 1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.addWidget(etiquetaSexo,3,0)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.addWidget(self.botonradio1,3,1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.addWidget(self.botonradio2,3,2)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.addWidget(self.etiquetaCedula,4,0)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.addWidget(self.cedula,4,1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.addWidget(fechaEtiqueta,5,0)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.addWidget(self.fecha,5,1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.addWidget(self.ciudadEtiqueta,6,0)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.addWidget(self.combo,6,1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.addWidget(diasemana,7,0)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.addWidget(self.lunes,7,1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.addWidget(self.martes,7,2)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.addWidget(self.miercoles,7,3)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.addWidget(self.jueves,7,4)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.addWidget(self.viernes,7,5)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.addWidget(okButton, 8, 0)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.addWidget(self.label,9,1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.addWidget(quit, 10, 1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.setLayout(grid)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se definen las segnales de los widgets.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #boton salir, procesar y cargar foto
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.connect(quit, QtCore.SIGNAL('clicked()'),QtGui.qApp, QtCore.SLOT('quit()'))
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.connect(okButton,QtCore.SIGNAL('clicked()'),self.Procesar)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.connect(cargar, QtCore.SIGNAL('clicked()'), self.showDialog)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; def showDialog(self):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Muestra una ventana de dialogo para abrir un archivo
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #guarda la ruta del archivo.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.filename = QtGui.QFileDialog.getOpenFileName(self, 'Open file',
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; '/home')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se define la imagen en la etiqueta
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pixmap = QtGui.QPixmap("%s" %self.filename)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.imagen.setPixmap(pixmap)
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; def Procesar(self):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Captura la informacion y genera el codigo QR
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Define el resultado de los botones de radio
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if self.botonradio1.isChecked() == True:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sexo = "Masculino"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif self.botonradio2.isChecked() == True:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sexo = "Femenino"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se procesa la informacion de los botones de check
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lista = {}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dias = ("Lunes","Martes","Miercoles","Jueves","Viernes")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lista["Lunes"] = self.lunes.isChecked()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lista["Martes"] = self.martes.isChecked()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lista["Miercoles"] = self.miercoles.isChecked()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lista["Jueves"] = self.jueves.isChecked()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lista["Viernes"] = self.viernes.isChecked()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; resultado = ""
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; flag = 0
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for dia in lista.keys():
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for i in dias:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if dia == i:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if lista[dia] == True:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if flag == 0:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; resultado = dia
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; flag = 1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif flag == 1:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; resultado = resultado + ",%s" %dia
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se le da formato a la informacion recabada para generar el codigo QR
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; texto = """
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Nombre:%s\n
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cedula: %s\n
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Fecha Nacimiento: %s\n
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sexo: %s\n
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Foto: %s\n
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dia de participacion: %s\n
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; """ %(self.nombreEdit.text(),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.cedula.text(),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.fecha.textFromDateTime(self.fecha.dateTime()),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sexo,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.filename,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; resultado)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se verifica si el archivo del codigo qr no existe, si no se borra
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if os.path.isfile("./archivosalida.png"):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; remove("./archivosalida.png")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se crea la imagen del codigo qr
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; imagen = encode(texto)[2]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se salva la imagen en un archivo.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; imagen.save("./archivosalida.png")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Se muestra la imagen en la etiqueta
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pixmap = QtGui.QPixmap("./archivosalida.png")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.label.setPixmap(pixmap)

if __name__ == "__main__":&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; #Se instancia la clase QApplication&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; app = QtGui.QApplication(sys.argv)&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; #Se instancia el objeto QuitButton&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; qb = App()&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; #Se muestra la aplicacion&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; qb.show()&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; #Se sale de la aplicacion&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; sys.exit(app.exec_())&lt;/i&gt;
&lt;/pre&gt;La siguiente figura muestra la aplicación al iniciarse:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-DwsRGDIBf40/Tirh9YvXInI/AAAAAAAAA0Q/XxMIXC-8uE4/s1600/Pantallazo-Generacion+de+codigo+QR-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="207" src="http://4.bp.blogspot.com/-DwsRGDIBf40/Tirh9YvXInI/AAAAAAAAA0Q/XxMIXC-8uE4/s320/Pantallazo-Generacion+de+codigo+QR-1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La siguiente imagen muestra la ventana de dialogo para subir la foto:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-U_wfW_f2B58/TiriNWbB-fI/AAAAAAAAA0U/Afz4S9bC90Y/s1600/Pantallazo-Open+file.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="210" src="http://4.bp.blogspot.com/-U_wfW_f2B58/TiriNWbB-fI/AAAAAAAAA0U/Afz4S9bC90Y/s320/Pantallazo-Open+file.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
La siguiente imagen muestra el formulario con los datos sin generar el código QR:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-w5H9NUbEL0I/Tirji3BD4OI/AAAAAAAAA0Y/f7KoMjavJUo/s1600/Pantallazo-Generacion+de+codigo+QR-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="231" src="http://4.bp.blogspot.com/-w5H9NUbEL0I/Tirji3BD4OI/AAAAAAAAA0Y/f7KoMjavJUo/s320/Pantallazo-Generacion+de+codigo+QR-2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
La siguiente imagen muestra la ventana con la información ya procesada y con el código QR generado:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-fSSKlqJlV6g/Tirjw8DA-AI/AAAAAAAAA0c/uzV1Y-QFYV4/s1600/Pantallazo-Generacion+de+codigo+QR.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="256" src="http://1.bp.blogspot.com/-fSSKlqJlV6g/Tirjw8DA-AI/AAAAAAAAA0c/uzV1Y-QFYV4/s320/Pantallazo-Generacion+de+codigo+QR.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Por último se muestra la imagen de un celular con Android donde se proceso el código QR y muestra la información del mismo:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-f3v4gpW7vrU/Tirusz_YZiI/AAAAAAAAA0g/6nhSyDPXFZw/s1600/Pantallazo-0403725B09015010-6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-f3v4gpW7vrU/Tirusz_YZiI/AAAAAAAAA0g/6nhSyDPXFZw/s320/Pantallazo-0403725B09015010-6.png" width="189" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/882744969176160062-2145435121271548471?l=ernesto-ecrespo.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~4/BU2vXM99Jzs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ernesto-ecrespo.blogspot.com/feeds/2145435121271548471/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=882744969176160062&amp;postID=2145435121271548471" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/2145435121271548471?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/882744969176160062/posts/default/2145435121271548471?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/LaLibertadDeDesarrollarNoTienePrecio/~3/BU2vXM99Jzs/tutorial-de-pyqt-checkbutton-pixmap.html" title="Tutorial de PyQt. checkbutton, pixmap, QFileDialog y Código QR. Parte 8." /><author><name>Ernesto Crespo</name><uri>https://profiles.google.com/103048801515183985093</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-x3xttMuagSg/AAAAAAAAAAI/AAAAAAAABTg/KepLh0e_Jso/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-DwsRGDIBf40/Tirh9YvXInI/AAAAAAAAA0Q/XxMIXC-8uE4/s72-c/Pantallazo-Generacion+de+codigo+QR-1.png" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Mérida, Venezuela</georss:featurename><georss:point>8.6 -71.14999999999998</georss:point><georss:box>8.5591365 -71.19840849999997 8.6408635 -71.10159149999998</georss:box><feedburner:origLink>http://ernesto-ecrespo.blogspot.com/2011/07/tutorial-de-pyqt-checkbutton-pixmap.html</feedburner:origLink></entry></feed>

