<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://es.wiki.guifi.net/w/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>http://es.wiki.guifi.net/w/index.php?feed=atom&amp;namespace=0&amp;title=Especial%3AP%C3%A1ginasNuevas</id>
		<title>Guifi.net - Wiki Hispano - Páginas nuevas [es]</title>
		<link rel="self" type="application/atom+xml" href="http://es.wiki.guifi.net/w/index.php?feed=atom&amp;namespace=0&amp;title=Especial%3AP%C3%A1ginasNuevas"/>
		<link rel="alternate" type="text/html" href="http://es.wiki.guifi.net/wiki/Especial:P%C3%A1ginasNuevas"/>
		<updated>2026-07-30T03:45:46Z</updated>
		<subtitle>De Guifi.net - Wiki Hispano</subtitle>
		<generator>MediaWiki 1.22.0</generator>

	<entry>
		<id>http://es.wiki.guifi.net/wiki/Manifiesto_Tecnosoberano</id>
		<title>Manifiesto Tecnosoberano</title>
		<link rel="alternate" type="text/html" href="http://es.wiki.guifi.net/wiki/Manifiesto_Tecnosoberano"/>
				<updated>2022-01-15T10:45:18Z</updated>
		
		<summary type="html">&lt;p&gt;Al: Página creada con «El siguiente apartado es una propuesta a identificar las tecnologías que respetan lo que deberían ser todos los derechos de las usuarias y, por lo tanto fomentarla y, pre...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;El siguiente apartado es una propuesta a identificar las tecnologías que respetan lo que deberían ser todos los derechos de las usuarias y, por lo tanto fomentarla y, pretende ser, con la colaboración de las hacktivistas, una guía para las comunidades críticas con la tecnología en nuestros tiempos.&lt;br /&gt;
&lt;br /&gt;
== Características deseables para tecnologías empoderadoras ==&lt;br /&gt;
El concepto de lo que significa software libre sigue siendo el definido en el año 1984 con la primera licencia de software libre. Las dos actualizaciones en la licencia que se han escrito mantienen la esencia que es garantizar la libertad a las usuarias para usar, modificar, distribuir copias exactas o modificadas de los programas.&lt;br /&gt;
Lo que ha cambiado es el propio concepto de software. En un ejemplo paradigmático podemos ver que la Free Software Foundation en marzo de 2016 empezó a tener en cuenta que muchos códigos Javascript iban mucho más allá de simplemente ofrecer funciones estéticas y se podían considerar software en sí mismos. Al intentar comprobar si muchos de esos programas podían ser usados, modificados, distribuidos y distribuir sus modificaciones identificaron que muchos de ellos no son libres&amp;lt;ref&amp;gt;https://www.gnu.org/philosophy/javascript-trap.es.html&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Por otro lado, como hacktivistas lo que aspiramos es a que las tecnologías no solo sean basadas en software libre, sino que, además, sean empoderadoras. Es decir la libertad en el software es un requisito indispensable para que una tecnología facilite un empoderamiento y, por lo tanto, un cambio social ético, pero ese requisito no es el único. Por ejemplo, el software libre corriendo en un servicio/servidor que espía a sus usuarias sin que éstas tengan opción de impedirlo (y, muchas veces, ni siquiera de conocerlo) es práctica común hoy día. La forma práctica que tenemos de impedirlo&amp;lt;ref&amp;gt;La forma teórica es comprobar que los programas que están corriendo en máquinas que no controlamos llevan la  licencia GPL actualizada, la versión 3, con la clausula Affero, que puso a disposición la Free Software Foundation en 2007 cuando se identifió el problema y empezaba a a ser habitual encontrarlo.&amp;lt;/ref&amp;gt; es correr tú tu software, de forma autónoma y autogestionada en tu propio servidor y securizarlo –en el caso que sea una tecnología que funciona según el modelo cliente/servidor– o tu propio dispositivo personal como computadora, teléfono,... –en el caso que sea una tecnología que funciona según el modelo P2P–, utilizando tu propia red y/o sistemas de cifrado y, para permitirte la interconexión con otras personas u organizaciones en otros servicios/servidores, utilizar formatos y protocolos estandarizados sobre los cuales poder decidir cuáles contenidos distribuyes al mundo, cuáles a tus contactos y cuáles no distribuyes en absoluto.&lt;br /&gt;
Vamos a extraer de lo anteriormente dicho las características que son requisitos indispensables para considerarlas tecnologías recomendables para el cambio social ético, empoderadoras:&lt;br /&gt;
Software Libre, Autonomía, Seguridad, Privacidad, Estandarización, Control sobre los contenidos. Y una forma transversal de valorarlas es preguntarse cómo de próxima y apropiada es la tecnología que estamos utilizando.&lt;br /&gt;
&lt;br /&gt;
Pasemos brevemente a describir cada una de estas características.&lt;br /&gt;
&lt;br /&gt;
=== Software Libre ===&lt;br /&gt;
Para una descripción detallada de qué es software libre:&lt;br /&gt;
https://www.gnu.org/philosophy/free-sw.es.html &lt;br /&gt;
Lo que sí que debemos mirar es cada software que corre la tecnología en concreto, es decir, comprobar que es Software Libre tanto del lado del cliente como del lado del servidor,&lt;br /&gt;
Por ejemplo, Telegram es software libre del lado del cliente, pero no del lado del servidor, por lo tanto, ya solo por este motivo no es una tecnología recomendable para el empoderamiento.&lt;br /&gt;
Para valorar si un programa libre es próximo y apropiado, a parte de comprobar que mantenga las 4 libertades debemos comprobar si puede ser ejecutado en hardware popular y/o económico o, por el contrario, necesita ser ejecutado en hardware muy potente y/o específico. Debemos comprobar si tiene documentación y ésta es entendible al colectivo al cual está dirigido el programa o si por el contrario la documentación es escasa o nula o es demasiado complicada o no está escrita en los idiomas que entienden las usuarias a los cuales va dirigido. Además, si se trata de un programa de uso social y/o que puede crear dependencia debemos comprobar también si la organización que hay detrás tiene unos valores éticos en términos de inclusión, igualdad, etc...&amp;lt;ref&amp;gt;Según estudios, existe un marcado sesgo de género en la aceptación o no de contribuciones externas llevadas a cabo por mujeres en ciertos proyectos de software libre que pueden ser identificados. Terrell et al. 2017 https://web.eecs.umich.edu/~weimerw/2019-481F/readings/genderpull.pdf&amp;lt;/ref&amp;gt;  De todas formas todas estas comprobaciones y las valoraciones que se extraen son útiles en tanto en cuanto haya que tomar decisiones en cuanto a cuál utilizar entre dos o más programas libres, no así si solo existe un programa software libre y su alternativa es uno privativo. Recordemos que, aun si el programa no es próximo y apropiado, puede llegar a serlo, dado que, al ser libre, la comunidad puede suplir estas carencias por sí misma.&amp;lt;ref&amp;gt;Ejemplo paradigmático fue el de la comunidad de Wikipedia en español, la cual al comprobar la deriva que llevaba Wikipedia hacia potencialmente convertirse en una punto com financiada con publicidad inicialmente llevó a cabo un fork el cual presionó a convertirse en una fundación sin ánimo de lucro https://es.digitaltrends.com/tendencias/rebelion-espanola-wikipedia-facebook/ &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Autonomía ===&lt;br /&gt;
La autonomía en el campo de la tecnología social es la capacidad que tiene una persona o una organización voluntariamente constituida por sus miembros de tomar y ejecutar decisiones sin intervención ni influencia externa.&lt;br /&gt;
Esas decisiones incluyen cuestiones de infraestructura (qué hardware utilizar, dónde, qué redes,...), de funcionalidad (qué programas y de qué manera se utilizarán), de diseño, organizativas, etcétera...&lt;br /&gt;
Esas decisiones incluyen la capacidad de los miembros de una organización a abandonar la organización o la infraestructura y poder replicar la tecnología tal como la utilizaban en otra organización y/o infraestructura.&lt;br /&gt;
Por ejemplo, el conocido servicio de Signal está sustentado por software libre del lado del cliente. Y también publica como software libre una versión del servidor pero no es exactamente la que se utiliza en el servicio&amp;lt;ref&amp;gt;https://www.world-today-news.com/signal-messenger-is-no-longer-open-source/ &amp;lt;/ref&amp;gt;, pero sobretodo no provee autonomía a sus usuarias dado que le requiere la intervención externa de usar un número de teléfono, el cual depende de una tecnología no basada en software libre, ni que, a su vez provee autonomía, ni privacidad.&lt;br /&gt;
Por supuesto, podrían abandonar la infraestructura y tomar el software publicado y hacer su propio sistema tecnológico totalmente autónomo, pero al no poder contectarse con el otro el sentido de ellos quedría en entredicho al tratarse este de una tecnología ideada para la comunicación con el mayor número de personas posible.&lt;br /&gt;
Las tecnologías históricas de Internet (como la web o el correo electrónico) funcionan según el modelo cliente-servidor y han requerido históricamente ordenadores más potentes de los que podían disponer personas particulares en sus casas y por eso un mismo servidor ha mantenido a muchas usuarias (muchas páginas web de muchas usuarias o muchas cuentas de correo eléctronico). En ese contexto, la gestión de esos servidores por parte de movimientos sociales han propiciado, en algunos casos, la creación de asambleas para administrar esos servidores, en otros casos ha sido llevado a cabo por personas que se han ofrecido a centralizar la administración de esos servidores, lo cual ha supuesto que no fueran realmente autogestionados por los miembros, incluso que las personas erigidas en administrarlos usaran su poder de forma jerárquica en algún momento. En estos casos podemos identificar una relación inversa entre la proximidad y la verdadera autonomía de las que disponen las personas y organizaciones que utilizan estas tecnologías. Ciertamente Internet facilita poder utilizar tecnologías que se pueden encontrar a mucha distancia física y lógica de las personas y también, en poco tiempo, puede producir cientos de miles de usuarias. Podríamos decir que una característica transversal a todas es preguntarse cómo de próxima es una tecnología hacias las personas que las están utilizando.&lt;br /&gt;
Otra manera de valorar cuánto de autonomía provee una tecnología en concreto es preguntarse si puede ser utilizada íntegramente en una Red Libre&amp;lt;ref&amp;gt;Utilizamos aquí la forma más difundida en español para hacer referencia a las redes de telecomunicaciones digitales TCP-IP creadas y  pertenecientes a las usuarias (habitualmente a partir de las tecnologías WiFi). Otros nombres menos populares son “Red Ciudadana”, “Red Comunitaria”, “Red WiFi”, una combinación de estos adjetivos o la forma inglesa “Community Network”.&amp;lt;/ref&amp;gt;. Cualquier servidor software libre puede instalarse en una Red Libre y por lo tanto las capacidades comunicativas pueden ser utilizadas independientemente de si las cualidades de conexión a la red de redes internet son precarias, intermitentes o incluso inexistentes. No es así de cualquier paquete de Software como Servicio. Ya sea del estilo de Instagram o Google Maps o el mencionado Signal.&lt;br /&gt;
Otra forma de conseguir autonomía en tecnología de comunicaciones es en base a las tecnologías P2P (Peer to Peer, entre pares) en la que directamente el programa que provee la comunicación y los datos están gestionado por cada persona y no por una organización (cada persona que tenga un dispositivo que soporte el programa). Es la tecnología de comunicación entre pares (normalmente el protocolo) la que hace las funciones de “organización” de forma ya previamente definida como conjunto de “normas”. Este caso, pues, es mucho más deseable en términos de autonomía dado que impide la corrupción o la supeditación de miembros a una asamblea.&lt;br /&gt;
&lt;br /&gt;
=== Seguridad ===&lt;br /&gt;
La seguridad es el conjunto de tecnologías (o partes de tecnologías) que proporcionan protección para la información de las usuarias de manera que mantengan sus principios de disponibilidad, integridad y confidencialidad.&lt;br /&gt;
&lt;br /&gt;
=== Privacidad ===&lt;br /&gt;
La privacidad (o la intimidad) en tecnología social son las características y habilidades que tiene una tecnología para preservar a una persona u organización del resto y que permitan a éstas expresarse selectivamente, es decir, permitir mantener la confidencialidad.&lt;br /&gt;
La confidencialidad es la propiedad de la información por la que se garantiza que esté accesible únicamente a personal autorizado a acceder a dicha información.&lt;br /&gt;
La seguridad es un requisito para el éxito de la privacidad.&lt;br /&gt;
&lt;br /&gt;
=== Estandarización (por consenso) ===&lt;br /&gt;
En tecnología social la estandarización es el proceso por el cual se crea un modelo (por ejemplo un formato o un protocolo) en base a una necesidad y a partir del modelo se crean o se adaptan tecnologías que se adecuen a él.&lt;br /&gt;
Decimos que una tecnología está estandarizada cuando existe ese modelo. Hay varias formas de crear el modelo, definimos la estandarización por consenso en contraposición a la estandarización de facto. La estandarización es por consenso cuando se lleva a cabo a partir de una comunidad abierta a la participación de las personas y las organizaciones interesadas. La estandarización de facto es la que se produce cuando es un software en concreto el que acaba definiendo un modelo.&lt;br /&gt;
El resultado de un proceso de estandarización en tecnología social es la creación de estándares de protocolos o formatos sobre los cuales se pueden construir varias tecnologías (por ejemplo softwares) que van a permitir la interconexión entre ellas.&lt;br /&gt;
Es deseable que una tecnología tenga ya realizado un estándar por consenso (por ejemplo el correo electrónico) o esté en proceso de estandarización (si es muy nueva) porque nos garantiza por un lado que nuevas versiones de un mismo software serán compatibles con versiones anteriores y, por otro, que varios softwares se puedan comunicar entre ellos. Así las usuarias no son dependientes de un software en concreto o se pueden crear el suyo propio desde cero.&lt;br /&gt;
A su vez, permite y facilita procesos también deseables como la federación y, por todo ello repercute en el grado de autonomía y, por lo tanto, en el empoderamiento.&lt;br /&gt;
&lt;br /&gt;
=== Control sobre los contenidos ===&lt;br /&gt;
En el campo de las tecnologías de la información y la comunicación los contenidos son los datos estructurados como información semántica (blogs, redes sociales, mensajería,…). El control de esta información es una moneda de cambio actual entre las grandes corporaciones de internet. Muchos servicios “gratuitos” piden que la usuaria acepte como condición de uso del servicio que el control de los contenidos pasen a ser gestionados por dicho servicio. Otros servicios se mantienen por siempre bajo control de las usuarias. Por ejemplo decimos que la comunidad de editores de Wikipedia tiene control sobre los contenidos porque puede hacer uso, modificación, copia y distribución de copias modificadas de los contenidos libremente y sin perder la autoría.  El control sobre los contenidos bajo los cuales hay garantizada la privacidad permite decidir a la persona u organización creadora de un contenido (un artículo o un mensaje) cuándo y a quién hacer público ese mensaje. Por ejemplo con un servidor de archivos instalado por la propia usuaria en su espacio físico y con acceso por clave asimétrica es la usuaria la que decide a quién, cuándo y cuáles le da acceso a esos archivos.&lt;br /&gt;
&lt;br /&gt;
== Proximidad, género, raza, alteridad,... Acceso al Conocimiento ==&lt;br /&gt;
A pesar de que el software libre, en el contexto de la ética hacker, cuestiona las formas de hacer y los valores del capitalismo, y aunque sus fundamentos son colaborativos y no competitivos, algunas de sus comunidades viven tensiones al estar inmersas en complejas relaciones de poder. Así pues, se observan relaciones de poder y meritocracias puntuales que pueden convertirse en jerarquías de larga duración. De igual forma, es evidente el desarrollo más veloz en los proyectos de software libre que obtienen más financiamiento o que les son más beneficiosos a la industria capitalista en la que se inscriben&amp;lt;ref&amp;gt;Un ejemplo de ello es el programa de modelado y animación 3D, Blender, el cual es software libre y que tuvo un desarrollo muy veloz debido al financiamiento de la industria del entretenimiento estadounidense, particularmente cine y videojuegos.&amp;lt;/ref&amp;gt;. &lt;br /&gt;
El alejamiento de las mujeres del dominio de la técnica y por lo tanto, el despojo de cierto saber-hacer continúa hasta nuestros días, tanto fuera como dentro de la hegemonía tecnológica. Esto incluye el campo de la computación en general, las tecnologías de la comunicación. Pero incluso la participación de las mujeres en el movimiento de software libre es considerablemente menor que en el de software privativo, ya que “solo el 2% de las personas que trabajan en el desarrollo de tecnologías son mujeres, mientras que en la industria del software privativo, el porcentaje es de 28%” (Baroni, 2013:125). Si bien resulta paradójico que la participación de las mujeres que escriben código sea menor en un espacio aparentemente progresista, también es cierto que las reflexiones feministas han evidenciado que esto sucede en prácticamente todos los movimientos que pretenden la transformación social, aunque estos incorporen discursos de equidad de género. Asimismo, personas con identidades diversas, afrodescendientes, indígenas, transgénero, del área rural, etcétera, se encuentran ausentes o con poca participación.&lt;br /&gt;
En el contexto de este trabajo, las mujeres hacker son aquellas que desarrollan, diseñan y mantienen tecnología computacional dentro de las comunidades de software libre, mujeres en condición de excepcionalidad —y que gozan de ciertos privilegios, probablemente vinculados a su clase o raza— que a pesar del supuesto alejamiento tecnológico, marginalidad de saberes com plejos y desvalorización del saber-hacer del que hablé al principio, aunado a su poca participación en este...&lt;br /&gt;
&lt;br /&gt;
== Dos ejemplos sobre gobernanza ==&lt;br /&gt;
{{en desarrollo}}&lt;br /&gt;
redes distribuidas a partir de software de enrutamiento dinámico (libremesh) vs guifi.net&lt;br /&gt;
retroshare vs servidores autogestionados&lt;br /&gt;
&lt;br /&gt;
== Anotación sobre economía, gasto energético y hardware ==&lt;br /&gt;
{{en desarrollo}}&lt;br /&gt;
hablar de la blockchain&lt;br /&gt;
exceden el propósito de este manifiesto&lt;br /&gt;
&lt;br /&gt;
== Propuesta: la identidad tecnosoberana ==&lt;br /&gt;
Lo que empezó como una broma ha mutando en herramienta útil y seria al generarse el corpus teórico de este documento.&lt;br /&gt;
Declararse tecnosoberano o tecnosoberana es llevar a cabo no solo un compromiso personal con la crítica hacia la tecnología y ser consciente de las repercusiones sociales y políticas de las tecnologías que estás utilizando sino que, además, y dado que estamos inmersas en relaciones sociales, económicas y políticas mediadas por tecnologías, en esta mediación podemos verbalizar que vamos a procurar llevar a cabo en medida de lo posible el uso de tecnologías que reúnan las características de libertad, autonomía, seguridad, privacidad, estandarización y control sobre los contenidos que son éticas y empoderadoras.&lt;br /&gt;
Ser tecnosoberano o tecnosoberana no es ni una imposición ni siquiera una identidad inmutable, tampoco, más allá de los propósitos de seguir y alimentar la broma, un dogma. Pero sí que es ponerle nombre identitario a un conjunto de prácticas que ya hace tiempo&amp;lt;ref&amp;gt;Por ejemplo nos encontramos el “Pringao HowTo” del año 2000 aprox&amp;lt;/ref&amp;gt; que se están llevando a cabo en colectivos y personas y que muchas veces quedan injustamente invisibilizadas en las interaciones sociales, políticas y económicas bajo el aluvión de populares tecnologías privativas.&lt;br /&gt;
Ser tecnosoberano o tecnosoberana es utilizar, difundir y participar en el desarrollo únicamente de tecnologías digitales que tengan las seis características empoderadoras. Al mismo tiempo es visibilizar la importancia del uso crítico de la tecnología y participar de la creación de un ecosistema cómodo para la interacción de personas tecnosoberanas.&lt;br /&gt;
&lt;br /&gt;
== El porqué del nombre ==&lt;br /&gt;
Un movimiento identitario necesita un nombre que quede anclado a campos semánticos anteriores, con fuerza y que permita recordarse fácilmente. El movimiento del software libre ha sido y sigue siendo la piedra angular de muchos movimientos por la soberanía y el empoderamiento y progresivamente va incluyendo también defensas por la autonomía9, la seguridad10, la privacidad11, la estandarización12 y el control sobre los contenidos13. Por ello la palabra softwarelibrana, freesoftwarer y similares fueron valoradas en un borrador de este documento, pero fueron descartadas por dos motivos: por ser larga y dificilmente traducible y porque el movimiento por la soberanía tecnológica adquirió un recorrido añadir trayectoria histórica del movimiento por la soberanía tecnológica. El problema de la expresión tecnosoberana es que, para ser concreta debería llevar a cabo el &amp;quot;apellido&amp;quot; digital, ya que es concretamente de las tecnologías digitales de las que estamos hablando, ya que son las más asequibles para obtener soberanía14. En cuanto a la creación del adjetivo que acaba de la misma manera que otras identidades conocidas y relativamente respetadas como “vegano” evoca que se es tecnosoberano o tecnosoberana no solo porque se utilice únicamente software libre (como los veganos no los son solo  porque únicamente comen vegetales, si no porque eso entra dentro de una filosofía de vida que tiene que ver en evitar el sufrimiento animal). La identidad tecnosoberana no es descrita únicamente por utilizar solo software libre, sino es precisamente la suma de las 6 características. {{en desarrollo}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Notas ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Al</name></author>	</entry>

	<entry>
		<id>http://es.wiki.guifi.net/wiki/FAQ_Basico</id>
		<title>FAQ Basico</title>
		<link rel="alternate" type="text/html" href="http://es.wiki.guifi.net/wiki/FAQ_Basico"/>
				<updated>2017-02-23T18:26:20Z</updated>
		
		<summary type="html">&lt;p&gt;Jibadia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h3 id=&amp;quot;qué-hardware-necesito-como-mínimo-para-comenzar&amp;quot;&amp;gt;¿Qué hardware necesito como mínimo para comenzar?&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;h3 id=&amp;quot;necesito-una-antena-y-un-router&amp;quot;&amp;gt;¿Necesito una antena y un router?&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Depende de la proyección que quieras para tu punto de acceso:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;¿Unicamente quieres conectarte tú?&amp;lt;/strong&amp;gt; Necesitas ….&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;¿Quieres que se conecte toda tu comunidad de vecinos?&amp;lt;/strong&amp;gt; Necesitas ….&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;¿Quieres poder facilitar el acceso a la red guifi a toda tu zona?&amp;lt;/strong&amp;gt; Necesitas ….&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h3 id=&amp;quot;qué-equipomarca-es-ella-más-recomendable-para-comenzar&amp;quot;&amp;gt;¿Qué equipo/marca es el/la más recomendable para comenzar?&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;h3 id=&amp;quot;a-dónde-me-tengo-que-conectar&amp;quot;&amp;gt;¿A dónde me tengo que conectar?&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;h3 id=&amp;quot;que-es-un-nodo&amp;quot;&amp;gt;¿Que es un nodo?&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;h3 id=&amp;quot;que-es-un-supernodo&amp;quot;&amp;gt;¿Que es un supernodo?&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;h3 id=&amp;quot;que-es-un-ap&amp;quot;&amp;gt;¿Que es un Ap?&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;h3 id=&amp;quot;que-es-un-trasto&amp;quot;&amp;gt;¿Que es un Trasto?&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;h3 id=&amp;quot;qué-significan-los-puntos-y-estrellas-del-mapa-de-conexión&amp;quot;&amp;gt;¿Qué significan los puntos y estrellas del mapa de conexión?&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Los colores significan:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Azul:&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Amarillo:&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Naranja:&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Rojo:&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Los simbolos significan:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Puntos:&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Lineas:&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Estrellas:&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h3 id=&amp;quot;el-nodo-debe-estar-apuntando-hacia-mi-antena&amp;quot;&amp;gt;¿El nodo debe estar apuntando hacia mi antena?&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;h3 id=&amp;quot;cómo-averiguo-si-el-nodo-que-está-cerca-de-mí-encara-hacia-mi-antena-y-puede-darme-una-buena-señal&amp;quot;&amp;gt;¿Cómo averiguo si el nodo que está cerca de mí encara hacia mi antena y puede darme una buena señal?&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;h3 id=&amp;quot;qué-frecuencia-es-mejor-2.4-ghz-o-5-ghz&amp;quot;&amp;gt;Qué frecuencia es mejor ¿2.4 Ghz o 5 Ghz?&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;h3 id=&amp;quot;puedo-conectar-mi-antena-de-5-ghz-a-un-nodo-de-2.4-ghz-o-al-revés&amp;quot;&amp;gt;¿Puedo conectar mi antena de 5 Ghz a un nodo de 2.4 Ghz o al revés?&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;h3 id=&amp;quot;cómo-averiguo-el-tipo-de-antena-que-tiene-y-a-que-frequencia-trabaja-el-nodo-al-que-quiero-conectarme&amp;quot;&amp;gt;¿Cómo averiguo el tipo de antena que tiene y a que frequencia trabaja el nodo al que quiero conectarme?&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;h3 id=&amp;quot;que-puede-hacer-un-instalador-por-mi&amp;quot;&amp;gt;¿Que puede hacer un instalador por mí?&amp;lt;/h3&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jibadia</name></author>	</entry>

	<entry>
		<id>http://es.wiki.guifi.net/wiki/AUGM</id>
		<title>AUGM</title>
		<link rel="alternate" type="text/html" href="http://es.wiki.guifi.net/wiki/AUGM"/>
				<updated>2017-02-10T22:13:07Z</updated>
		
		<summary type="html">&lt;p&gt;Oket: /* AUGM - Asociación de Usuarios Guifi.net Maestrat */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== ''AUGM - Asociación de Usuarios Guifi.net Maestrat ==&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La Asociación guifinetMaestrat  es una Asociación sin ánimo de lucro, ubicada en la zona norte de la provincia de Castellón,&lt;br /&gt;
tenemos la sede en la localidad costera de Vinarós. &lt;br /&gt;
&lt;br /&gt;
Los objetivos de la Asociación son:&lt;br /&gt;
&lt;br /&gt;
La promoción, investigación, mejora e innovación tecnológica de las redes abiertas, implantando tecnologías ya existentes en Internet,&lt;br /&gt;
incluso adaptándolas para mejor ajuste a su arquitectura, siempre en un entorno colaborativo de profesionales de diversos sectores, &lt;br /&gt;
que no busquen lucro, sino más bien un trueque de conocimientos y servicios técnicos. Tenemos una serie de proyectos en mente que sólo&lt;br /&gt;
tienen sentido si hay una comunidad de gente interesada en que se lleven a cabo, y es por esta razón que nace esta Asociación, realizamos&lt;br /&gt;
las actividades desde el voluntariado.&lt;br /&gt;
&lt;br /&gt;
== Para conseguir estos fines la Asociación realiza las siguientes actividades: ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Reuniones explicativas sobre la filosofía de guifi•net.&lt;br /&gt;
&lt;br /&gt;
2. Talleres de formación técnica.&lt;br /&gt;
&lt;br /&gt;
3. Mantenimiento y actualizaciones  de la infraestructura de comunicaciones&lt;br /&gt;
&lt;br /&gt;
4. Establecer convenios de colaboración con entidades  públicas i privada.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 http://guifinetmaestrat.net&lt;br /&gt;
 https://es-es.facebook.com/GuifinetBaixMaestrat&lt;/div&gt;</summary>
		<author><name>Oket</name></author>	</entry>

	<entry>
		<id>http://es.wiki.guifi.net/wiki/Libre-mesh/Changelog</id>
		<title>Libre-mesh/Changelog</title>
		<link rel="alternate" type="text/html" href="http://es.wiki.guifi.net/wiki/Libre-mesh/Changelog"/>
				<updated>2016-08-08T00:28:47Z</updated>
		
		<summary type="html">&lt;p&gt;Al: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Changelog 17.06 ''Dayboot Rely'' ==&lt;br /&gt;
* based on LEDE 17.01.2&lt;br /&gt;
* build everything using LEDE SDK, via new lime-sdk cooker (instead of lime-build)&lt;br /&gt;
* use ieee80211s instead of adhoc&lt;br /&gt;
* reintroduced &amp;lt;code&amp;gt;firewall&amp;lt;/code&amp;gt; package (to keep closer to upstream)&lt;br /&gt;
* lime-system: fix ieee80211s proto, correctly construct ifnames&lt;br /&gt;
* lime-system: sanitize hostname (transform everything into alphanumeric and dash)&lt;br /&gt;
* lime-system: new proto static&lt;br /&gt;
* lime-system: new wifi mode client&lt;br /&gt;
* lime-system: set &amp;lt;code&amp;gt;dnsmasq force=1&amp;lt;/code&amp;gt; to ensure dnsmasq never bails out&lt;br /&gt;
* lime-system: explicitly populate &amp;lt;code&amp;gt;/etc/config/lime&amp;lt;/code&amp;gt; with calculated values&lt;br /&gt;
* lime-webui: enable i18n, finally webinterface is available in Spanish&lt;br /&gt;
* lime-webui: Major rework by NicoPace, thanks!&lt;br /&gt;
** bmx6 node graph now uses colors in a clever way&lt;br /&gt;
** simple way to add &amp;quot;system notes&amp;quot; that are shown along with /etc/banner and webui&lt;br /&gt;
** luci-app-lime-location: fix google maps api key&lt;br /&gt;
** new read-only view: switch ports status&lt;br /&gt;
** alert luci-mod-admin users that their changes might get overwritten by lime-config&lt;br /&gt;
** fix batman-adv status webui&lt;br /&gt;
* new package available to install &amp;lt;code&amp;gt;lighttpd&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;uhttpd&amp;lt;/code&amp;gt; (needed for an upcoming android app)&lt;br /&gt;
* added a &amp;lt;code&amp;gt;lime-sysupgrade&amp;lt;/code&amp;gt; command: does a sysupgrade but only preserving libremesh configuration file&lt;br /&gt;
* added a &amp;lt;code&amp;gt;lime-apply&amp;lt;/code&amp;gt; command: basically calls reload_config, but also applies hostname system-wide without rebooting&lt;br /&gt;
* lime-hwd-ground-routing: ground routing now supports untagged ports too&lt;br /&gt;
* lime-proto-anygw: unique mac based on ap_ssid (using &amp;lt;code&amp;gt;%N1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;%N2&amp;lt;/code&amp;gt;)&lt;br /&gt;
* lime-proto-anygw: integrate better into &amp;lt;code&amp;gt;/etc/config/dhcp&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;/etc/dnsmasq.d/&amp;lt;/code&amp;gt;&lt;br /&gt;
* lime-proto-wan: allow link-local traffic over wan (useful for local &amp;lt;code&amp;gt;ping6&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ssh&amp;lt;/code&amp;gt;, without global exposure)&lt;br /&gt;
** lime-proto-batadv: set &amp;lt;code&amp;gt;batadv gw_mode=client&amp;lt;/code&amp;gt; by default to counteract rogue DHCP servers&lt;br /&gt;
** lime-proto-bmx6: introduce &amp;lt;code&amp;gt;bmx6_pref_gw&amp;lt;/code&amp;gt; option, adds priority (x10) to a specific bmx6 gateway&lt;br /&gt;
** lime-proto-bmx6: don't tag bmx6 packets over ethernet and so use at least &amp;lt;code&amp;gt;mtu=1500&amp;lt;/code&amp;gt; everywhere&lt;br /&gt;
* lime-proto-bmx6: avoid autodetected wan interface use vlan for bmx6&lt;br /&gt;
* bmx6: doesn't flood log with some spurious warnings anymore (&amp;lt;code&amp;gt;syslog=0&amp;lt;/code&amp;gt;)&lt;br /&gt;
* bmx6: sms plugin now enabled by default&lt;br /&gt;
* bmx6: daemon is now supervised by procd, so it is restarted in case of crashes&lt;br /&gt;
* bmx6: doesn't &amp;lt;code&amp;gt;configSync&amp;lt;/code&amp;gt; by default anymore (no more &amp;quot;uci pending changes&amp;quot; because of auto-gw-mode)&lt;br /&gt;
* new bmx6hosts tool: maintain an &amp;lt;code&amp;gt;/etc/hosts&amp;lt;/code&amp;gt; that resolves fd66: &amp;lt;-&amp;gt; hostnames.mesh&lt;br /&gt;
* watchping: convert to procd and add reload triggers&lt;br /&gt;
* safe-reboot: fix, use &amp;lt;code&amp;gt;/overlay/upper&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;/overlay&amp;lt;/code&amp;gt;&lt;br /&gt;
* safe-reboot: add &amp;lt;/code&amp;gt;discard&amp;lt;code&amp;gt; action&lt;br /&gt;
* ath9k: debugged some hangs (interface is deaf) and workaround it, with new package &amp;lt;code&amp;gt;smonit&amp;lt;/code&amp;gt;&lt;br /&gt;
* set wifi default &amp;lt;code&amp;gt;distance&amp;lt;/code&amp;gt; parameter to 1000 metres and make it configurable through webui&lt;br /&gt;
* alfred: fix bat-hosts facter, check for errors and don't nuke &amp;lt;code&amp;gt;/etc/bat-hosts&amp;lt;/code&amp;gt; in case of failure&lt;br /&gt;
* introduce new lime-basic-noui metapackage&lt;br /&gt;
* new packages separated: lime-docs and lime-docs-minimal&lt;br /&gt;
* various Makefile dependency problems fixed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changelog 16.07 ''Community Chaos'' ==&lt;br /&gt;
* Based on OpenWrt Chaos Calmer 15.05.1&lt;br /&gt;
* Removed &amp;lt;code&amp;gt;firewall&amp;lt;/code&amp;gt; package (which is included by default in vanilla OpenWrt/LEDE), since it's not really being used in LibreMesh setup. It can always be installed on a case-by-case basis using &amp;lt;code&amp;gt;opkg&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Removed &amp;lt;code&amp;gt;odhcpd&amp;lt;/code&amp;gt; since we're not using it at the moment (we use &amp;lt;code&amp;gt;dnsmasq&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Removed &amp;lt;code&amp;gt;odhcp6c&amp;lt;/code&amp;gt; since we're not using it at the moment (we still haven't solved how to deal with native IPv6 coming over WAN, i.e. propagate a delegated prefix over the mesh in a reasonable way)&lt;br /&gt;
* New default packages: &amp;lt;code&amp;gt;lime-hwd-openwrt-wan&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;lime-proto-wan&amp;lt;/code&amp;gt;. This checks if there's a WAN port, and automatically configures as &amp;quot;wan&amp;quot; proto (&amp;lt;code&amp;gt;lime-proto-wan&amp;lt;/code&amp;gt;). The &amp;quot;wan&amp;quot; proto let's you assign in &amp;lt;code&amp;gt;/etc/config/lime&amp;lt;/code&amp;gt;, for example, 802.1ad VLANs over the WAN port.&lt;br /&gt;
* New default package: &amp;lt;code&amp;gt;lime-hwd-ground-routing&amp;lt;/code&amp;gt;. Allows you to configure 802.1q VLANs on embedded switches, so that you can separate specific ports and put&lt;br /&gt;
* New default package: &amp;lt;code&amp;gt;bmx6-auto-gw-mode&amp;lt;/code&amp;gt;, so that when a node detects (with watchping) it can ping 8.8.8.8 over WAN port, a bmx6 tunIn is created on-the-fly, and Internet is shared to the rest of the clouds.&lt;br /&gt;
* Workaround for an spurious log message caused by BATMAN-Adv (&amp;lt;code&amp;gt;br-lan&amp;lt;/code&amp;gt;: received packet on bat0 with own address as source address&amp;quot;): a &amp;lt;code&amp;gt;dummy0&amp;quot; interface is created and added to &amp;lt;code&amp;gt;bat0&amp;lt;/code&amp;gt;, with a slightly different MAC address&lt;br /&gt;
** https://lists.open-mesh.org/pipermail/b.a.t.m.a.n/2014-March/011839.html&lt;br /&gt;
* New available packages: &amp;lt;code&amp;gt;lime-proto-bgp&amp;lt;/code&amp;gt;, allows to do BGP with bird daemon; and &amp;lt;code&amp;gt;lime-proto-olsr&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;-olsr2&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;-olsr6&amp;lt;/code&amp;gt;, which add support for all versions of [[OLSR]].&lt;br /&gt;
* Some new settings possible in &amp;lt;code&amp;gt;/etc/config/lime-defaults&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;wireless.htmode&amp;lt;/code&amp;gt; lets you preset the htmode for any wireless radio (or &amp;lt;code&amp;gt;htmode_2ghz&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;htmode_5ghz&amp;lt;/code&amp;gt; for specific bands)&lt;br /&gt;
** &amp;lt;code&amp;gt;wireless.distance&amp;lt;/code&amp;gt; is the equivalent, for setting distance (and &amp;lt;code&amp;gt;distance_2ghz&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;_5ghz&amp;lt;/code&amp;gt;)&lt;/div&gt;</summary>
		<author><name>Al</name></author>	</entry>

	<entry>
		<id>http://es.wiki.guifi.net/wiki/Manual_de_Libre-mesh_para_guiferos</id>
		<title>Manual de Libre-mesh para guiferos</title>
		<link rel="alternate" type="text/html" href="http://es.wiki.guifi.net/wiki/Manual_de_Libre-mesh_para_guiferos"/>
				<updated>2016-08-08T00:05:44Z</updated>
		
		<summary type="html">&lt;p&gt;Al: /* ¿Por qué tengo tantas interfaces de red? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Este es un manual para entender cómo funciona [[Libre-mesh]] de forma práctica. Es de nivel técnico medio, está orientado a personas con conocimientos prácticos de redes inalámbricas, especialmente para personas que no están familiarizadas con el funcionamiento de los protocolos de enrutamiento dinámico [[BMX6]] y [[BATMAN-adv]], pero sí con [[BGP]] tal como se usa en Guifi.net.&lt;br /&gt;
 &lt;br /&gt;
=== Desarrollo de Libre-mesh ===&lt;br /&gt;
&lt;br /&gt;
==== ¿Cómo tenéis organizado el desarrollo? ====&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==== Entonces: ¿qué me recomendáis para montar una red con Libre-mesh en mi zona ahora? ====&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==== ¿Cuál es la relación entre qMp y Libre-mesh? ====&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=== Primer arranque ===&lt;br /&gt;
&lt;br /&gt;
==== ¿Qué hace el router en el primer arranque después de flashearlo? ====&lt;br /&gt;
El script [https://github.com/libre-mesh/lime-packages/blob/master/packages/lime-system/files/etc/uci-defaults/91_lime-config /etc/uci-defaults/91_lime-config] es llamado por OpenWrt en el primer arranque. Entonces [https://github.com/libre-mesh/lime-packages/blob/master/packages/lime-system/files/usr/bin/lime-config /usr/bin/lime-config] genera los archivos de configuración para: &lt;br /&gt;
 &lt;br /&gt;
system:&lt;br /&gt;
* Le pone un nombre de máquina (&amp;lt;code&amp;gt;hostname&amp;lt;/code&amp;gt;) en base a los tres últimos hexadecimales de la MAC&lt;br /&gt;
* Arranca el servidor web&lt;br /&gt;
 &lt;br /&gt;
wireless:&lt;br /&gt;
* Elimina la configuración de wireless que trae por defecto OpenWrt&lt;br /&gt;
* Detecta los dispositivos wireless ([[radio]]s) que tiene el router y si estos son capaces de funcionar a 5GHz y en modos ad-hoc y ap&lt;br /&gt;
* Crea el essid a partir de la los tres últimos hexadecimales de la MAC más .lime&lt;br /&gt;
* Configura los canales por cada una de las radios&lt;br /&gt;
 &lt;br /&gt;
network:&lt;br /&gt;
* Elimina la configuración de red que trae por defecto OpenWrt&lt;br /&gt;
* Detecta las interfaces de red que tiene el router&lt;br /&gt;
* Configura la primera IPv4&lt;br /&gt;
* Configura la primera IPv6&lt;br /&gt;
* Activa rp_filter (ignora paquetes que no son para su red) [http://tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.kernel.rpf.html más información]&lt;br /&gt;
* Configura los protocolos BATMAN-adv y BMX6&lt;br /&gt;
 &lt;br /&gt;
firewall:&lt;br /&gt;
* crea un cortafuegas donde todos los paquetes son aceptados &amp;lt;ref&amp;gt;Hasta la versión 16.07 se eliminaba el cortafuegos por defecto de OpenWrt y se creaba otro, a partir de la 16.07 incluida el cortafuegos ya no se pone dentro de los paquetes.&amp;lt;/ref&amp;gt;&lt;br /&gt;
* crea una regla que comprime el MSS al ancho del MTU que está definido en las interaces&lt;br /&gt;
 &lt;br /&gt;
Este script se borra él mismo después del primer arranque (aunque todavía puedes verlo en la ROM &amp;lt;code&amp;gt;/rom/etc/uci-defaults/91_lime-config&amp;lt;/code&amp;gt; )&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Comandos ===&lt;br /&gt;
&lt;br /&gt;
==== ¿Cómo puedo comprobar que los nodos están enlazados y los protocolos están funcionando bien? ====&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=== Contenido de los nodos ===&lt;br /&gt;
&lt;br /&gt;
==== ¿Por qué tengo tantas interfaces de red? ====&lt;br /&gt;
Desde la linea de comandos del router si hacemos &amp;lt;code&amp;gt;ip address show&amp;lt;/code&amp;gt; (que es la forma sustitutiva de hacer un &amp;lt;code&amp;gt;ifconfig&amp;lt;/code&amp;gt;) vemos un listado de 23 interfaces de red en la versión 15.07 y 26 en la versión 16.07.&lt;br /&gt;
 &lt;br /&gt;
Si nos da palo contarlas nos puede salir el resultado con este comando:&lt;br /&gt;
 echo $(($(ip link show|wc -l)/2))&lt;br /&gt;
 &lt;br /&gt;
Esas interfaces tienen funciones varias. Pasamos a explicar a continuación todas las existentes en la versión 26.07.&lt;br /&gt;
&lt;br /&gt;
===== Interfaces =====&lt;br /&gt;
Nota: el .11 en el nombre de la interfaz virutal corresponde a la vlan&lt;/div&gt;</summary>
		<author><name>Al</name></author>	</entry>

	<entry>
		<id>http://es.wiki.guifi.net/wiki/Cloudy_paquetes_repositorio</id>
		<title>Cloudy paquetes repositorio</title>
		<link rel="alternate" type="text/html" href="http://es.wiki.guifi.net/wiki/Cloudy_paquetes_repositorio"/>
				<updated>2015-09-15T16:44:28Z</updated>
		
		<summary type="html">&lt;p&gt;Conxuro: Página creada con «'''''Nota: este artículo puede estar desactualizado y debería ser revisado. Ten precaución si sigues esta guía, y mejor pregunta antes en las listas de correo.'''''    ...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''''Nota: este artículo puede estar desactualizado y debería ser revisado. Ten precaución si sigues esta guía, y mejor pregunta antes en las listas de correo.'''''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Subir paquetes al repositorio de software de Cloudy (proyecto Clommunity) ==&lt;br /&gt;
&lt;br /&gt;
Estamos preparados para subir paquetes al repositorio público de Cloudy http://repo.clommunity-project.eu.&lt;br /&gt;
&lt;br /&gt;
Aquí requeriremos claves públicas para firmar y subir paquetes. Por supuesto, puedes editar los scripts y cambiar las rutas ''(paths)'' de acuerdo a tus necesidades.&lt;br /&gt;
&lt;br /&gt;
El repositorio está auto-firmado con una clave llamada &amp;quot;gcodis Distro Development Team&amp;quot;, más información en el mismo repositorio: http://repo.clommunity-project.eu. El auto-firmado previene que el repositorio permanezca no firmado si alguien sube paquetes sin firmar. Una firma para el repositio, que es añadida en el lado del cliente para permitir la instalación de la distro, y otra firma que depende del mantenedor o desarrollador para firmar el paquete.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Claves públicas ===&lt;br /&gt;
&lt;br /&gt;
Para subir paquetes necesitamos conseguir '''tus claves''' públicas:&lt;br /&gt;
&lt;br /&gt;
* El '''ID de la clave pública GPG, subido a gpg.mit.edu'''. Con esta clave podrás firmar las subidas.&lt;br /&gt;
* La '''clave publica SSH''', para subir paquetes. Necesaria para acceder remotamente a la máquina del repositorio.&lt;br /&gt;
&lt;br /&gt;
Los paquetes son subidos por defecto a la rama ''unstable'' (usa el &amp;quot;log de cambios&amp;quot; ''(changelog)'' para ello). Nosotros utilizamos la herramienta de Debian &amp;lt;code&amp;gt;dput&amp;lt;/code&amp;gt; para subir los paquetes y firmarlos. El repositorio está auto-firmado con otra clave.&lt;br /&gt;
&lt;br /&gt;
Puedes '''enviar''' las claves públicas o IDs a la lista de correo del proyecto: ''clommunity-wp4''. De esta manera tendremos acceso a las claves públicas cuando sea necesario.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Archivos ===&lt;br /&gt;
&lt;br /&gt;
El archivo de configuración es:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;.dput.cf&amp;lt;/code&amp;gt; es un archivo de configuración que tiene que ser copiado en el directorio ''home'' como &amp;lt;code&amp;gt;~/.dput.cf&amp;lt;/code&amp;gt;. Utilizado para subir paquetes con la herramienta de Debian &amp;lt;code&amp;gt;dput&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [repo.clommunity-project.eu]&lt;br /&gt;
 fqdn = repo.clommunity-project.eu&lt;br /&gt;
 method = scp&lt;br /&gt;
 login = repo&lt;br /&gt;
 incoming = /var/www/debian/mini-dinstall/incoming&lt;br /&gt;
 post_upload_command = ssh repo@repo.clommunity-project.eu &amp;quot;mini-dinstall -b&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Creando paquetes ===&lt;br /&gt;
&lt;br /&gt;
Mira algunas maneras para crear paquetes en http://www.debian.org/doc/manuals/maint-guide/build.en.html.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Subiendo paquetes ===&lt;br /&gt;
&lt;br /&gt;
Puedes usar el comando &amp;lt;code&amp;gt;dput&amp;lt;/code&amp;gt; de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 $ dput repo.clommunity-project.eu cloudy-base_0.1.3.5_i386.changes&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Recuerda guardar las versiones previas del archivo &amp;lt;code&amp;gt;~/.dput.cf&amp;lt;/code&amp;gt; en tu directorio &amp;lt;code&amp;gt;$HOME&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Es importante escribir el nombre del repositorio ''(repo.clommunity-project.eu)''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Mejoras continuas ===&lt;br /&gt;
&lt;br /&gt;
El repositorio se mejora para funcionar mejor cuando es necesario dar un mejor servicio.&lt;br /&gt;
&lt;br /&gt;
Gracias por tus esfuerzos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoría:Cloudy]]&lt;/div&gt;</summary>
		<author><name>Conxuro</name></author>	</entry>

	<entry>
		<id>http://es.wiki.guifi.net/wiki/Cloudy_Alix</id>
		<title>Cloudy Alix</title>
		<link rel="alternate" type="text/html" href="http://es.wiki.guifi.net/wiki/Cloudy_Alix"/>
				<updated>2015-09-11T02:32:28Z</updated>
		
		<summary type="html">&lt;p&gt;Conxuro: Página creada con «Alix es una [https://es.wikipedia.org/wiki/Placa_computadora SBC] con un procesador AMD (x86) y varias interfaces de entrada-salida (serie, miniPCI, Ethernet, etc.). Es por...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Alix es una [https://es.wikipedia.org/wiki/Placa_computadora SBC] con un procesador AMD (x86) y varias interfaces de entrada-salida (serie, miniPCI, Ethernet, etc.). Es por ello que se tiene que utilizar un sistema operativo preparado con los controladores ''(drivers)'' corresponendientes para hacer funcionar estas interfaces.&lt;br /&gt;
&lt;br /&gt;
''Nota: esta guía se ha hecho con una Debian especialmente preparada para funcionar en Alix, pero es posible que con otra distribución basada en Debian funcione con pasos similares.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conseguir Debian para Alix ==&lt;br /&gt;
&lt;br /&gt;
Puedes [https://code.google.com/p/debian-for-alix/ descargar de esta página] una imagen especial de Debian lista para funcionar en placas Alix una vez grabada en una tarjeta CF.&lt;br /&gt;
&lt;br /&gt;
=== Características/servicios incluidos ===&lt;br /&gt;
&lt;br /&gt;
* Sistema de archivos de sólo lectura, protege contra fallos de corriente y aumenta sustancialmente la vida de la tarjeta.&lt;br /&gt;
&lt;br /&gt;
* Servicios comunes disponibles en el primer arranque:&lt;br /&gt;
** serial terminal ( 38400n8 )&lt;br /&gt;
** dnsmasq ( servidores DNS y DHCP  )&lt;br /&gt;
** iptables ( reglas firewall y compartición de Internet )&lt;br /&gt;
** samba ( compartición de archivos de Microsoft Windows )&lt;br /&gt;
** cups ( servidor de impresora )&lt;br /&gt;
** vsftpd ( servidor FTP )&lt;br /&gt;
** nginx with fastcgi ( servidor HTTP )&lt;br /&gt;
** minidlna ( servidor multimedia )&lt;br /&gt;
** openssh ( terminal y SFTP )&lt;br /&gt;
** stunnel ( motor SSL, soporte HTTPS pre-configurado para ''nginx'' y ''transmission'' )&lt;br /&gt;
** tinyproxy ( servidor proxy HTTP/HTTPS )&lt;br /&gt;
** pptpd ( servidor VPN, MS Windows tiene un cliente incorporado )&lt;br /&gt;
** snmpd ( servidor SNMP )&lt;br /&gt;
** openvpn ( servidor y cliente VPN )&lt;br /&gt;
** openconnect ( cliente VPN client, compatible con Cisco )&lt;br /&gt;
** external storage automount and sharing basic web admin panel performance monitor ( on web panel )&lt;br /&gt;
&lt;br /&gt;
* Servicios adicionales disponibles:&lt;br /&gt;
** transmission ( torrent p2p )&lt;br /&gt;
** hostapd ( wireless access point / necesita tarjeta miniPCI o usb wifi )&lt;br /&gt;
&lt;br /&gt;
* Sistema de mantenimiento a través de &amp;lt;code&amp;gt;apt-get&amp;lt;/code&amp;gt;, úsalo para actualizar, instalar o eliminar aplicaciones y parches.&lt;br /&gt;
&lt;br /&gt;
* Ten en cuenta que es una Debian i386, por lo que cualquier software disponible para esta arquitectura puede ser instalado, considerando las limitaciones de potencia.&lt;br /&gt;
&lt;br /&gt;
* Los archivos de imagen están disponibles para descargar en GoogleDrive:&lt;br /&gt;
** debian-for-alix-v1.img.bz2 (debian 6 based) version 1 wiki page&lt;br /&gt;
** debian-for-alix-v2.img.bz2 (debian 6 based) version 2 wiki page&lt;br /&gt;
** debian-for-alix-v3.img.bz2 (debian 7 based) Debian instalación básica, sólo servidor SSH y utilidades básicas, también el terminal serie está preparado, pero no tiene el sistema de ficheros en sólo lectura ni otras características.&lt;br /&gt;
&lt;br /&gt;
* La configuración por defecto es:&lt;br /&gt;
&amp;lt;code&amp;gt;eth0: DHCP&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;eth1: static 172.16.210.254&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;eth2: sin configuración&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;usuario: alix (root tiene el acceso bloqueado)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Instalar la imagen Debian en la CF ==&lt;br /&gt;
&lt;br /&gt;
=== Identificar la CF ===&lt;br /&gt;
&lt;br /&gt;
La tarjeta CF necesita ser formateada con ext2. Asegúrate de qué dispositivo es tu tarjeta, de lo contrario podrías borrar el S.O. de tu ordenador. En este ejemplo la CF está en &amp;lt;code&amp;gt;/dev/sdb&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Puedes probar mirando en &amp;lt;code&amp;gt;/proc/bus/usb/devices&amp;lt;/code&amp;gt;. Deberías ver una sección con una linea ''S:'' y el nombre de tu lector, y una linea ''I:'' con &amp;lt;code&amp;gt;Driver=usb-storage&amp;lt;/code&amp;gt;. Si lo ves, es que el kernel reconoce el dispositivo.&lt;br /&gt;
&lt;br /&gt;
Instalar el paquete &amp;lt;code&amp;gt;sg3-utils&amp;lt;/code&amp;gt; si lo tienes ya (en Debian: &amp;lt;code&amp;gt;apt-get install sg3-utils&amp;lt;/code&amp;gt;). Para comprobar tus dispositivos SCSI, ejecuta el comando:&lt;br /&gt;
 sg_scan -i&lt;br /&gt;
&lt;br /&gt;
Deberías ver algo como esto:&lt;br /&gt;
 /dev/sg0: scsi0 channel=0 id=0 lun=0 [em]  type=0&lt;br /&gt;
 eUSB      Compact Flash     5.09 [wide=0 sync=0 cmdq=0 sftre=0 pq=0x0]    &lt;br /&gt;
&lt;br /&gt;
Muestra que el dispositivo “raw” SCSI asociado con tu lector es &amp;lt;code&amp;gt;/dev/sg0&amp;lt;/code&amp;gt;. Puedes confirmar que el ''driver'' está funcionando mirando el archivo &amp;lt;code&amp;gt;/proc/scsi/scsi&amp;lt;/code&amp;gt;. Ahora, para determinar el dispositivo SCSI real asociado con tu lector ejecuta el comando:&lt;br /&gt;
 sg_map&lt;br /&gt;
&lt;br /&gt;
Verás una salida como esta:&lt;br /&gt;
 /dev/sg0  /dev/sdb&lt;br /&gt;
&lt;br /&gt;
Eso es todo, tu lector de tarjetas es &amp;lt;code&amp;gt;/dev/sdb&amp;lt;/code&amp;gt;. La primera (y probablemente la única) partición es &amp;lt;code&amp;gt;/dev/sdb1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Copiar la imagen en la CF ===&lt;br /&gt;
&lt;br /&gt;
Para instalar la imagen en la tarjeta CF puedes hacerlo con el siguiente comando:&lt;br /&gt;
 bzcat debian-for-alix-v3.img.bz2 | dd of=/dev/sdb bs=16k&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Instalar Cloudy ==&lt;br /&gt;
&lt;br /&gt;
Para instalar Cloudy puedes seguir las instrucciones para [[Cloudy_en_Debian|convertir una instalación básica de Debian en Cloudy]] añadiendo al sistema los archivos y herramientas específicas de la distribución.&lt;br /&gt;
&lt;br /&gt;
Lo llamamos &amp;quot;cloudynizar&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Recomendamos usar un script para automatizar el proceso. Puedes saber cómo en la [[cloudynizar|página de esta wiki que explica cómo &amp;quot;cloudynizar&amp;quot;]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoría:Cloudy]]&lt;/div&gt;</summary>
		<author><name>Conxuro</name></author>	</entry>

	<entry>
		<id>http://es.wiki.guifi.net/wiki/Cloudy_Beaglebone</id>
		<title>Cloudy Beaglebone</title>
		<link rel="alternate" type="text/html" href="http://es.wiki.guifi.net/wiki/Cloudy_Beaglebone"/>
				<updated>2015-09-10T20:19:52Z</updated>
		
		<summary type="html">&lt;p&gt;Conxuro: Página creada con «Beaglebone es una [https://es.wikipedia.org/wiki/Placa_computadora SBC] con un procesador ARM y varias interfaces de entrada-salida. Es por ello que se tiene que utilizar u...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Beaglebone es una [https://es.wikipedia.org/wiki/Placa_computadora SBC] con un procesador ARM y varias interfaces de entrada-salida. Es por ello que se tiene que utilizar un sistema operativo preparado para funcionar en esta arquitectura y con los controladores ''(drivers)'' corresponendientes para hacer funcionar estas interfaces.&lt;br /&gt;
&lt;br /&gt;
''Nota: esta guía se ha hecho con la distribución Ubuntu, pero es posible que con otra distribución basada en Debian funcione con los mismos pasos.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Instalar el sistema ==&lt;br /&gt;
&lt;br /&gt;
* Insertar la tarjeta microSD en el ordenador y observar que dispositivo se registra tecleado &amp;lt;code&amp;gt;ls /dev/sd&amp;lt;/code&amp;gt;. Si no estas seguro, elimina la tarjeta y la entrada desaparecerá. Una vez sepas que dispositivo corresponde a tu tarjeta sigue las siguientes instrucciones reemplazando &amp;lt;code&amp;gt;/dev/sdX&amp;lt;/code&amp;gt; por el de tu microSD en tu sistema.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Empezar particionando la tarjeta microSD escribiendo &amp;lt;code&amp;gt;fdisk /dev/sdX&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Inicializar una nueva tabla de particiones seleccionando &amp;lt;code&amp;gt;o&amp;lt;/code&amp;gt;, luego verifica que este vacía seleccionando &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; ''(print)''.&lt;br /&gt;
# Crear una partición de arranque ''(boot)'' seleccionando &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; ''(new)'', luego &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; para ''primary'', y &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; para especificar la primera partición. Pulsar ''enter'' para aceptar el primer sector por defecto y especifica &amp;lt;code&amp;gt;4095&amp;lt;/code&amp;gt; para el último sector.&lt;br /&gt;
# Cambiar el tipo de partición a FAT16 seleccionando &amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt; ''(type)'' y &amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt; para ''‘W95 FAT16 (LBA)’''.&lt;br /&gt;
# Marcar la partición como arrancable selecionando &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; y luego &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Crear la partición de datos para el sistema de ficheros seleccionado &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; ''(new)'', luego &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; ''(primary)'' y &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; para especificar la segunda partición. Aceptar los valores por defecto para el primer y último sector pulsando ''enter'' cada vez (x2).&lt;br /&gt;
# Pulsar &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; para ‘imprimir’ la tabla de particiones.&lt;br /&gt;
# Finalmente, guardar los cambios seleccionando &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt; para &amp;quot;escribir&amp;quot; ''(write)'' la tabla de particiones y salir de ''fdisk''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Formatear las particiones e instalar el sistema de arranque y el sistema raíz.&lt;br /&gt;
# Formatear la partición 1 como FAT escribiendo &amp;lt;code&amp;gt;mkfs.vfat /dev/sdX1&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Formatear la partición 2 como ext4 escribiendo &amp;lt;code&amp;gt;mkfs.ext4 /dev/sdX2&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Instalar ''u-boot'' en la tarjeta microSD.&lt;br /&gt;
 wget http://s3.armhf.com/dist/bone/bone-uboot.tar.xz&lt;br /&gt;
 mkdir boot&lt;br /&gt;
 mount /dev/sdX1 boot&lt;br /&gt;
 tar xJvf bone-uboot.tar.xz -C boot&lt;br /&gt;
 umount boot&lt;br /&gt;
# Instalar el sistema raiz de ficheros deseado en la tarjeta microSD (Ubuntu Trusty en este ejemplo).&lt;br /&gt;
 wget http://s3.armhf.com/dist/bone/ubuntu-trusty-14.04-rootfs-3.14.4.1-bone-armhf.com.tar.xz&lt;br /&gt;
 mkdir rootfs&lt;br /&gt;
 mount /dev/sdX2 rootfs&lt;br /&gt;
 tar xJvf ubuntu-trusty-14.04-rootfs-3.14.4.1-bone-armhf.com.tar.xz -C rootfs&lt;br /&gt;
 umount rootfs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La tarjeta microSD ya está lista para arrancar. Nótese que para esta instalación de Ubuntu, el userid de login es ''ubuntu'' y la contraseña es ''ubuntu''.&lt;br /&gt;
&lt;br /&gt;
''Nota: la caché de paquetes ha sido vaciada para reducir el tamaño de la imagen. Ejecuta &amp;lt;code&amp;gt;apt-get update&amp;lt;/code&amp;gt; después de iniciar para actualizar la caché de paquetes, luego ejecuta &amp;lt;code&amp;gt;apt-get upgrade&amp;lt;/code&amp;gt; para instalar las actualizaciones.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Instalar Cloudy ==&lt;br /&gt;
&lt;br /&gt;
Para instalar Cloudy puedes seguir las instrucciones para [[Cloudy_en_Debian|convertir una instalación básica de Debian en Cloudy]] añadiendo al sistema los archivos y herramientas específicas de la distribución.&lt;br /&gt;
&lt;br /&gt;
Lo llamamos &amp;quot;cloudynizar&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Recomendamos usar un script para automatizar el proceso. Puedes saber cómo en la [[cloudynizar|página de esta wiki que explica cómo &amp;quot;cloudynizar&amp;quot;]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoría:Cloudy]]&lt;/div&gt;</summary>
		<author><name>Conxuro</name></author>	</entry>

	<entry>
		<id>http://es.wiki.guifi.net/wiki/Cloudy_en_Debian</id>
		<title>Cloudy en Debian</title>
		<link rel="alternate" type="text/html" href="http://es.wiki.guifi.net/wiki/Cloudy_en_Debian"/>
				<updated>2015-09-10T17:41:33Z</updated>
		
		<summary type="html">&lt;p&gt;Conxuro: Página creada con «Puedes convertir una instalación básica de Debian en Cloudy siguiendo estos pasos:   1. Entrar vía SSH como usuario root (o una vez logeado) o ejecuta los próximos coma...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Puedes convertir una instalación básica de Debian en Cloudy siguiendo estos pasos:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Entrar vía SSH como usuario root (o una vez logeado) o ejecuta los próximos comandos con la herramienta ''sudo''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Actualizar la fecha del servidor instalando un cliente NTP ''(opcional)''.&lt;br /&gt;
&lt;br /&gt;
 apt-get install ntp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Añadir los backports de Debian, y los repositorios de Clommunity y Guifi.&lt;br /&gt;
* Backports Debian:&lt;br /&gt;
 echo &amp;quot;deb http://ftp.debian.org/debian wheezy-backports main contrib&amp;quot; &amp;gt; /etc/apt/sources.list.d/backports.list &lt;br /&gt;
* Repositorio Clommunity:&lt;br /&gt;
 echo &amp;quot;deb http://repo.clommunity-project.eu/debian unstable/&amp;quot; &amp;gt; /etc/apt/sources.list.d/cloudy.list &lt;br /&gt;
 gpg --keyserver pgpkeys.mit.edu --recv-key A59C5DC8 &amp;amp;&amp;amp; gpg --export --armor A59C5DC8 | apt-key add - &lt;br /&gt;
* Repositorio Guifi:&lt;br /&gt;
 echo &amp;quot;deb http://serveis.guifi.net/debian guifi/&amp;quot; &amp;gt; /etc/apt/sources.list.d/serveis.list &lt;br /&gt;
 gpg --keyserver pgpkeys.mit.edu --recv-key 2E484DAB &amp;amp;&amp;amp; gpg --export --armor 2E484DAB | apt-key add -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. Instalar algunos paquetes de Debian.&lt;br /&gt;
 apt-get update&lt;br /&gt;
 apt-get upgrade&lt;br /&gt;
 apt-get install -y openssh-server openssh-client getinconf-client curl unzip make avahi-utils tahoe-lafs mysql-server python2.7 g++ make checkinstall openjdk-6-jre locales php5 libssh2-php libapache2-mod-encoding &lt;br /&gt;
&lt;br /&gt;
'''''Nota''': si aparece este error: &amp;quot;Error W: GPG error: http://ftp.debian.org wheezy-backports InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY8B48AD6246925553&amp;quot; usa este comando:&lt;br /&gt;
 apt-get --allow-unauthenticated upgrade&lt;br /&gt;
''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. Instalar los paquetes ''&amp;quot;non-Debian&amp;quot;'' de Cloudy.&lt;br /&gt;
 curl &amp;quot;https://raw.githubusercontent.com/Clommunity/lbmake/master/hooks/getinconf-client.chroot&amp;quot; | sh -&lt;br /&gt;
 curl &amp;quot;https://raw.githubusercontent.com/Clommunity/lbmake/master/hooks/avahi-ps.chroot&amp;quot; | sh -&lt;br /&gt;
 curl &amp;quot;https://raw.githubusercontent.com/Clommunity/lbmake/master/hooks/cDistro.chroot&amp;quot; | sh -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
g. Reiniciar.&lt;br /&gt;
&lt;br /&gt;
Después de esto, podrás entrar a la interfaz web de usuario en http://IP_dispositivo:7000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoría:Cloudy]]&lt;/div&gt;</summary>
		<author><name>Conxuro</name></author>	</entry>

	<entry>
		<id>http://es.wiki.guifi.net/wiki/Modelos_de_gesti%C3%B3n_de_tramos_de_red_libre</id>
		<title>Modelos de gestión de tramos de red libre</title>
		<link rel="alternate" type="text/html" href="http://es.wiki.guifi.net/wiki/Modelos_de_gesti%C3%B3n_de_tramos_de_red_libre"/>
				<updated>2015-08-19T23:32:26Z</updated>
		
		<summary type="html">&lt;p&gt;Al: Página creada con «El concepto de red abierta, libre y neutral hace referencia a la libertad de poder conectarse, saber cómo funciona la red, poder ampliarla y poder hacer fluir contenidos l...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;El concepto de red abierta, libre y neutral hace referencia a la libertad de poder conectarse, saber cómo funciona la red, poder ampliarla y poder hacer fluir contenidos libremente todo ello manteniendo el buen funcionamiento de la red para todo el mundo. Ahora bien, dentro de este concepto hay varios modelos que las personas usuarias han desarrollado para gestionar sus tramos de red. Estos modelos conviven dentro de la red abierta, libre y neutral entramándose unos con otros y la implementación de un modelo u otro depende tan sólo de la voluntad de las usuarias en función de sus intereses, recursos, tradición cultural, etcétera,... Ningún modelo es mejor que otro siempre y cuando todos respeten la licencia de la red abierta, libre y neutral.&lt;br /&gt;
&lt;br /&gt;
== Modelo comunitario horizontal ==&lt;br /&gt;
Un grupo de personas normalmente de una misma ubicación geográfica determinada se organizan para diseñar, construir y mantener una red. Se autocapacitan entre ellas para tener los conocimientos para hacerlo, toman decisiones de forma asamblearia y compran-construyen los materiales y mantienen los gastos periódicos (conexión con otras redes, gastos eléctricos, reposición de supernodos,...) entre todas, ya sea a través de cuotas de las que ellas mismas deciden el precio o a través de gastos puntuales según necesidades puntuales. Pueden constituir o no una organización legal o no para llevarlo a cabo.&lt;br /&gt;
&lt;br /&gt;
=== Submodelo comunitario cooperativa de consumo de abajo a arriba ===&lt;br /&gt;
A veces el modelo comunitario horizontal ya sea en sus inicios o a partir de un momento dado que la red requiere mucho mantenimiento, puede decidir (o no) mutar su modelos a un modelo de cooperativa de consumo (similar al de las cooperativas o grupos de consumo de alimentos ecológicos locales) en el que esas personas ya sea por falta de tiempo o por cualquier otro motivo deciden mantener las decisiones asamblearias pero la gestión técnica en manos de una especialista técnico (o unas pocas especialistas técnicas) que actúa como un profesional liberado en beneficio de toda la red. En este caso las aportaciones siempre son periódicas en la que se suman los gastos periódicos, puntuales y el sueldo de la persona o personas técnicas destinadas y se divide entre todas las unidades familiares o comunidades de vecinos que participan de la red.&lt;br /&gt;
&lt;br /&gt;
== Modelo instalador altruista voluntario ==&lt;br /&gt;
A veces hay personas que por pasión, amor al proyecto, por aprender y mejorar, por hacer currículum o cualquier otro motivo dedica su conocimiento y parte de su tiempo a montar, reparar y/o mantener nodos de red libre a otras personas u organizaciones. A veces lo hace a partir del material pagado por esas personas u organizaciones o a veces incluso lo pone de su propio bolsillo. Estas personas, por supuesto, en cualquier momento pueden dejar de hacerlo (de hecho, es común que en algún momento suceda) y que esos tramos de red pasen a otro modelo de gestión o, desgraciadamente, queden sin uso o apagados o incluso algún espabilado los privatice, se los reapropie y las usuarias pierdan las libertades.&lt;br /&gt;
&lt;br /&gt;
== Modelo emprendedor de arriba a abajo ==&lt;br /&gt;
Una persona o un conjunto de personas con conocimientos técnicos para la construcción y mantenimiento de tramos de red libre se anuncian abiertamente para la construcción y mantenimiento con tarifas muchas veces puntuales (por ejemplo coste por hora por montar un nodo y realizar la primera conexión) y en ocasiones también periódicas (por proveer de servicios de internet, telefonía, web, servidores, etcétera,...) a personas u organizaciones que quieren formar parte de la red libre. Normalmente esta persona o personas trabaja/n bajo el nombre de una organización empresarial o como autónomos.&lt;br /&gt;
&lt;br /&gt;
== Modelo de libre conexión individualista ==&lt;br /&gt;
Como la red abierta libre y neutral mantiene por licencia toda la documentación de cada nodo de la red incluida su ubicación e IPs cualquier persona individual puede, leyendo la documentación on-line general de WiFi y/o fibra óptica y específica de la ubicación determinada, conectarse a un nodo de la red abierta, libre y neutral siguiendo los pasos y respetando la licencia. Podrá hacerlo sin necesidad de contactar con la/s persona/s si es directamente a un nodo en modo AP altruista abierto a la interconexión o un nodo en modo ad-hoc o tendrá la necesidad de contactar y ampliar físicamente el nodo de la otra ubicación llevando un nuevo trasto que le permita ampliar la red en su dirección.&lt;br /&gt;
&lt;br /&gt;
== Conclusiones ==&lt;br /&gt;
Estos no son los únicos modelos posibles. Son tan sólo unos ejemplos de implementaciones reales. Pueden crearse otros según necesidades específicas o también existen modelos que mixturan varios de estos modelos. Siéntete libre de utilizar cualquiera de ellos siempre y cuando respetes la licencia. La existencia de estos modelos de gestión en una red determinada no garantizan tampoco que esa red sea abierta, libre y neutral. Por ejemplo un tramo de red que tiene unos gestores que te obligan a seguir uno de estos modelos no es una red abierta, libre y neutral.&lt;br /&gt;
&lt;br /&gt;
[[Categoría:social]]&lt;/div&gt;</summary>
		<author><name>Al</name></author>	</entry>

	<entry>
		<id>http://es.wiki.guifi.net/wiki/Cloudy_Raspberry_Pi</id>
		<title>Cloudy Raspberry Pi</title>
		<link rel="alternate" type="text/html" href="http://es.wiki.guifi.net/wiki/Cloudy_Raspberry_Pi"/>
				<updated>2015-07-21T20:14:20Z</updated>
		
		<summary type="html">&lt;p&gt;Conxuro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La Raspberry Pi es un pequeño y económico ordenador del tamaño de una tarjeta de crédito, creado principalmente para ser utilizada con fines educativos y en pequeños proyectos.&lt;br /&gt;
&lt;br /&gt;
Esta placa tiene un procesador ARM y diversas interfaces de entrada-salida; vídeo, audio, Ethernet, USB, GPIO, etc. Es por ello que se tiene que utilizar un sistema operativo preparado para funcionar en esta arquitectura y con los controladores (''drivers'') corresponendientes para hacer funcionar estas interfaces.&lt;br /&gt;
&lt;br /&gt;
En nuestro caso, para instalar Cloudy se preparará la Raspberry Pi con una distribución ya adaptada basada en Debian como es Raspbian, y una vez hecho esto se &amp;quot;cloudynizará&amp;quot; para añadir todo el contenido propio de Cloudy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Nota:''' Esta guia, así como diversas pruebas de instalación de Cloudy, se ha hecho con el S.O. Raspbian; pero es posible que con otra distribución basada en Debian funcione con los mismos pasos.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Descargar Raspbian ==&lt;br /&gt;
&lt;br /&gt;
Vamos a la [https://www.raspberrypi.org/downloads/ página oficial] y descargamos la imagen ISO del sistema operativo que nos servirá de base.&lt;br /&gt;
&lt;br /&gt;
Alternativamente se puede utilizar una variante de Raspbian, la [http://sirlagz.net/2013/07/19/raspbian-server-edition-2-5/ Raspbian Server Edition], que está preparada sin paquetes innecessarios (sistema gráfico, audio, etc.) para el uso de la Raspberry Pi como servidor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Instalar y configurar Raspbian ==&lt;br /&gt;
&lt;br /&gt;
Grabamos la imagen en una tarjeta de memoria SD. Según el sistema operativo de tu ordenador puedes seguir una de estas guías (en inglés) para grabar imágenes ISO.&lt;br /&gt;
&lt;br /&gt;
* [http://www.raspberrypi.org/documentation/installation/installing-images/linux.md Linux]&lt;br /&gt;
* [http://www.raspberrypi.org/documentation/installation/installing-images/mac.md Mac OS]&lt;br /&gt;
* [http://www.raspberrypi.org/documentation/installation/installing-images/windows.md Windows]&lt;br /&gt;
&lt;br /&gt;
A continuación instertamos la tarjeta y encendemos la placa para comenzar el proceso de configuración con la herramienta &amp;lt;code&amp;gt;raspi-config&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Básicamente lo que se recomienda hacer es:&lt;br /&gt;
# Expandir el sistema de ficheros para utilizar todo el espacio de la SD.&lt;br /&gt;
# Cambiar la contrasseña del usuario '''pi''' (por defecto).&lt;br /&gt;
# Cambiar la localización si queremos otro idioma, el uso horario (''timezone'') y el mapa de teclado.&lt;br /&gt;
# En opciones avanzadas; activar el servidor SSH, cambiar el ''hostname'' y actualizar la &amp;lt;code&amp;gt;raspi-config&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Si quieres hacer más cambios, puedes encontrar más información en la [https://www.raspberrypi.org/documentation/configuration/raspi-config.md documentación de raspi-config].&lt;br /&gt;
&lt;br /&gt;
No nos extenderemos más en explicar como se instala y configura Raspbian ya que está ampliamente documentado en Internet.&lt;br /&gt;
&lt;br /&gt;
=== Opciones adicionales ===&lt;br /&gt;
&lt;br /&gt;
Como se ha comentaado más arriba, hay una versión personalizada para funcionar como servidor, que elimina paquetes innecesarios. Ésta tendría que funcionar igual que la Raspbian original, pero es más recomendable hacer esta adaptación después de manera manual o automatizándolo con el ''script'' que desinstala los paquetes para dejar el sistema como la Raspbian Server Edition.&lt;br /&gt;
&lt;br /&gt;
Podéis obtener más información y descargar este ''script'' en [http://sirlagz.net/2013/08/03/raspbian-server-edition-scripts/ la siguiente página].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Instalar Cloudy ==&lt;br /&gt;
&lt;br /&gt;
Para instalar Cloudy puedes seguir las instrucciones para [[Cloudy_en_Debian|convertir una instalación básica de Debian en Cloudy]] añadiendo al sistema los archivos y herramientas específicas de la distribución.&lt;br /&gt;
&lt;br /&gt;
Lo llamamos &amp;quot;cloudynizar&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Recomendamos usar un script para automatizar el proceso. Puedes saber cómo en la [[cloudynizar|página de esta wiki que explica cómo &amp;quot;cloudynizar&amp;quot;]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoría:Cloudy]]&lt;/div&gt;</summary>
		<author><name>Conxuro</name></author>	</entry>

	<entry>
		<id>http://es.wiki.guifi.net/wiki/Cloudy_en_nodo_cliente</id>
		<title>Cloudy en nodo cliente</title>
		<link rel="alternate" type="text/html" href="http://es.wiki.guifi.net/wiki/Cloudy_en_nodo_cliente"/>
				<updated>2015-07-17T15:35:06Z</updated>
		
		<summary type="html">&lt;p&gt;Conxuro: Página creada con «Cloudy utiliza un sistema de publicación y búsqueda de servicios para compartirlos con otros Cloudys. Para hacer esto, actualmente se emplea [https://www.serfdom.io/ Serf...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cloudy utiliza un sistema de publicación y búsqueda de servicios para compartirlos con otros Cloudys. Para hacer esto, actualmente se emplea [https://www.serfdom.io/ Serf].&lt;br /&gt;
&lt;br /&gt;
Este software abre un puerto TCP en el servidor (Cloudy) para escuchar peticiones y poder comunicarse con otros.&lt;br /&gt;
&lt;br /&gt;
Por tanto, para que un Cloudy instalado en un nodo cliente pueda interactuar con los otros Cloudys es necesario hacer algunos pasos adicionales:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Saber la dirección IP pública del nodo (10.x.x.x); no la IP asignada a Cloudy sino la IP asignada al nodo cliente.&lt;br /&gt;
* Puedes ir a la página de [http://guifi.net Guifi] de tu nodo para saber cuál es la IP de éste.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Modificar un par de ficheros y declarar la IP pública del nodo. Tienes que añadir la IP a los ficheros de configuración para que el software pueda anunciar correctamente la IP pública y no la privada.&lt;br /&gt;
* Para hacerlo, con el usuario '''''root''''', entra por linea de comandos lo siguiente:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@cloudy:~# echo &amp;quot;ADVERTISE_IP=10.x.x.x&amp;quot; &amp;gt;&amp;gt; /etc/avahi-ps-serf.conf&lt;br /&gt;
root@cloudy:~# echo &amp;quot;PUBLIC_IP=10.x.x.x&amp;quot; &amp;gt;&amp;gt; /etc/getinconf-client.conf&lt;br /&gt;
root@cloudy:~# /etc/init.d/serf restart&lt;br /&gt;
&lt;br /&gt;
(donde 10.x.x.x es la IP pública de tu nodo)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ejemplo:'''&lt;br /&gt;
En un nodo con dirección IP 10.1.2.3 los ficheros tendrían que ser como:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  /etc/avahi-ps-serf.conf&lt;br /&gt;
SERF_RPC_ADDR=127.0.0.1:7373&lt;br /&gt;
SERF_BIND=5000&lt;br /&gt;
SERF_JOIN=10.139.40.82:5000&lt;br /&gt;
ADVERTISE_IP=10.1.2.3&lt;br /&gt;
&lt;br /&gt;
  /etc/getinconf-client.conf &lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# Automatically generate file&lt;br /&gt;
GTC_SERVER_URL=http://10.139.40.84/index.php&lt;br /&gt;
NETWORK_NAME=demo&lt;br /&gt;
NETWORK_KEY=demo&lt;br /&gt;
INTERNAL_DEV=eth0&lt;br /&gt;
# PORT=665&lt;br /&gt;
# GETINCONF_IGNORE=1&lt;br /&gt;
GETINCONF_IGNORE=1&lt;br /&gt;
PUBLIC_IP=10.1.2.3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Hacer una redirección (''port forwarding'') del puerto 5000 (''Serf'') en el node.  Y si quieres tener más servicios tendrás que redireccionar el puerto de cada uno de éstos.&lt;br /&gt;
* La configuración para hacer esto dependerá del dispositivo que tengas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoría:Cloudy]]&lt;/div&gt;</summary>
		<author><name>Conxuro</name></author>	</entry>

	<entry>
		<id>http://es.wiki.guifi.net/wiki/Radioenlaces</id>
		<title>Radioenlaces</title>
		<link rel="alternate" type="text/html" href="http://es.wiki.guifi.net/wiki/Radioenlaces"/>
				<updated>2015-07-15T11:21:37Z</updated>
		
		<summary type="html">&lt;p&gt;Pakito.oliva: Página creada con «En esta página se contará la experiencia con los distintos tipos de radioenlaces, el material utilizado y el resultado obtenido.  ==Radioenlace de menos de 1 KM==  ==Radi...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En esta página se contará la experiencia con los distintos tipos de radioenlaces, el material utilizado y el resultado obtenido.&lt;br /&gt;
&lt;br /&gt;
==Radioenlace de menos de 1 KM==&lt;br /&gt;
&lt;br /&gt;
==Radioenlace de 1 a 5 Km==&lt;br /&gt;
&lt;br /&gt;
==Radioenlace de 5 a 10 Km==&lt;br /&gt;
&lt;br /&gt;
==Radioenlace de 10 a 20 Km==&lt;br /&gt;
&lt;br /&gt;
==Radioenlace de más de 20 Km ==&lt;/div&gt;</summary>
		<author><name>Pakito.oliva</name></author>	</entry>

	<entry>
		<id>http://es.wiki.guifi.net/wiki/Cloudynizar</id>
		<title>Cloudynizar</title>
		<link rel="alternate" type="text/html" href="http://es.wiki.guifi.net/wiki/Cloudynizar"/>
				<updated>2015-05-13T12:56:08Z</updated>
		
		<summary type="html">&lt;p&gt;Chk: Fix typo on command&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Una alternativa para instalar Cloudy es modificando un sistema Debian GNU/Linux, o basado en Debian, aplicando un ''script'' que convierte el sistema en un Cloudy.&lt;br /&gt;
&lt;br /&gt;
Para hacerlo puedes ejecutar los siguientes comandos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/Clommunity/cloudynitzar &amp;amp;&amp;amp; cd cloudynitzar&lt;br /&gt;
chmod +x cloudynitzar.sh&lt;br /&gt;
sudo ./cloudynitzar.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoría:Cloudy]]&lt;/div&gt;</summary>
		<author><name>Conxuro</name></author>	</entry>

	<entry>
		<id>http://es.wiki.guifi.net/wiki/Cloudy_64bits</id>
		<title>Cloudy 64bits</title>
		<link rel="alternate" type="text/html" href="http://es.wiki.guifi.net/wiki/Cloudy_64bits"/>
				<updated>2015-05-13T12:37:31Z</updated>
		
		<summary type="html">&lt;p&gt;Conxuro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Actualmente sólo existe generada la versión de 32 bits, sin embargo, puedes crear la versió de 64 bits de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
Primero, descarga el sistema de generación o &amp;quot;constructor&amp;quot; de imágenes ''(image builder)'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install build-essential live-build imagemagick curl debootstrap git unzip &lt;br /&gt;
git clone http://dev.cloudy.community/guifi.net/cloudy-image-builder.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A continuación modifica las siguientes variables del archivo ''Makefile'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ARCH ?= amd64&lt;br /&gt;
FLAVOUR ?= amd64&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finalmente, puedes generar la imagen con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo make&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez la imagen ha sido creada, tendrás una versión Cloudy de 64 bits en &amp;lt;code&amp;gt;./devel/binary.hybrid.iso&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Alternativamente puedes &amp;quot;Cloudynizar&amp;quot; una Debian de 64 bits para convertirla en Cloudy.&lt;br /&gt;
&lt;br /&gt;
Lee cómo en la página [[Cloudynizar]] de la wiki. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoría:Cloudy]]&lt;/div&gt;</summary>
		<author><name>Conxuro</name></author>	</entry>

	<entry>
		<id>http://es.wiki.guifi.net/wiki/Cloudy_web_UI</id>
		<title>Cloudy web UI</title>
		<link rel="alternate" type="text/html" href="http://es.wiki.guifi.net/wiki/Cloudy_web_UI"/>
				<updated>2015-05-12T18:49:46Z</updated>
		
		<summary type="html">&lt;p&gt;Conxuro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Introducción ==&lt;br /&gt;
&lt;br /&gt;
La inferfaz web de usuario (web User Interface (UI)) de Cloudy utiliza una aplicación llamada cDistro &amp;lt;ref name=&amp;quot;cdistro&amp;quot;&amp;gt;cDistro git repository: https://github.com/Clommunity/cDistro&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''(Añadir qué es)''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuración ==&lt;br /&gt;
&lt;br /&gt;
La configuración de cDistro se encuentra en &amp;lt;s&amp;gt;/etc/cdistro.conf&amp;lt;/s&amp;gt; /etc/cloudy/cloudy.conf&lt;br /&gt;
&lt;br /&gt;
Por defecto tiene el siguiente formato:&lt;br /&gt;
&lt;br /&gt;
 #cdistro config&lt;br /&gt;
 SERVER=&amp;quot;/usr/bin/php&amp;quot;&lt;br /&gt;
 OPTS=&amp;quot;&amp;quot;&lt;br /&gt;
 BINDIP=&amp;quot;0.0.0.0&amp;quot;&lt;br /&gt;
 PORT=&amp;quot;7000&amp;quot;&lt;br /&gt;
 DOCROOT=&amp;quot;/var/local/cDistro&amp;quot;&lt;br /&gt;
 # SSHAUTH=1 &amp;lt;- check user with ssh2 connection http://www.php.net/manual/en/function.ssh2-auth-password.php (Require: libssh2-php)&lt;br /&gt;
 SSHAUTH=1&lt;br /&gt;
 # LOGIN=&amp;quot;root&amp;quot;&lt;br /&gt;
 ## PASSWORD = md5(md5('secret')) =&amp;gt; php -r 'echo md5(md5(&amp;quot;secret&amp;quot;)).&amp;quot;\n&amp;quot;;'&lt;br /&gt;
 #PASSWORD=&amp;quot;7022cd14c42ff272619d6beacdc9ffde&amp;quot;&lt;br /&gt;
 PORT_SSL=7443&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SERVER ===&lt;br /&gt;
&lt;br /&gt;
La ruta del ejecutable PHP.&lt;br /&gt;
&lt;br /&gt;
'''Ejemplo:'''&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;/usr/bin/php&amp;quot; - en el caso de Cloudy (Debian).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OPTS ===&lt;br /&gt;
&lt;br /&gt;
Opciones de PHP.&lt;br /&gt;
&lt;br /&gt;
''(Añadir referencias o más info y ejemplo)''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== BINDIP ===&lt;br /&gt;
&lt;br /&gt;
La dirección IP donde el servicio estará escuchando.&lt;br /&gt;
&lt;br /&gt;
'''Ejemplo:'''&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;127.0.0.1&amp;quot; - aceptará sólo peticiones desde localhost.&lt;br /&gt;
* &amp;quot;0.0.0.0&amp;quot; - aceptará peticiones desde cualquier dirección.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PORT ===&lt;br /&gt;
&lt;br /&gt;
El puerto que abrirà el servicio para escuchar peticiones.&lt;br /&gt;
&lt;br /&gt;
'''Ejemplo:'''&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;7000&amp;quot; - abre el puerto 7000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== DOCROOT ===&lt;br /&gt;
&lt;br /&gt;
La ruta del ejecutable de la aplicación cDistro.&lt;br /&gt;
&lt;br /&gt;
'''Ejemplo:'''&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;/var/local/cDistro&amp;quot; - en el caso de Cloudy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SSLAUTH ===&lt;br /&gt;
&lt;br /&gt;
Parámetro que permite autenticación vía SSH2 en la aplicación, es decir, para utilizar las credenciales que permita el servidor SSH del sistema.&lt;br /&gt;
&lt;br /&gt;
Puede ser 0 o 1.&lt;br /&gt;
&lt;br /&gt;
'''Ejemplo:'''&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;1&amp;quot; - activa esta opción.&lt;br /&gt;
* &amp;quot;0&amp;quot; - desactiva esta opción (requerirá definir usuario y contraseña).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== LOGIN ===&lt;br /&gt;
&lt;br /&gt;
El nombre de usuario para autenticarse en la aplicación.&lt;br /&gt;
&lt;br /&gt;
Ha de ser una cadena sin espacios.&lt;br /&gt;
&lt;br /&gt;
'''Ejemplo:'''&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;cloudy&amp;quot; - este usuario podrá hacer log-in con la contraseña de PASSWORD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PASSWORD ===&lt;br /&gt;
&lt;br /&gt;
La contraseña del usuario definido en LOGIN.&lt;br /&gt;
&lt;br /&gt;
Ha de ser un ''hash'' sobre ''hash'' MD5 (hexadecimal), es decir, un ''hash'' del ''hash'' de la contraseña: md5(md5(&amp;quot;PASSWORD&amp;quot;)).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Ejemplo:'''&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;46d934e0f59ff1e2272f9f5f7950e5d9&amp;quot; - ''hash'' correspondiente a la cadena de carácteres &amp;quot;PASSWORD&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''Ejemplos de cómo generar este ''hash'' en un terminal:'''&lt;br /&gt;
&lt;br /&gt;
 $ php -r 'echo md5(md5(&amp;quot;PASSWORD&amp;quot;)).&amp;quot;\n&amp;quot;;'&lt;br /&gt;
 46d934e0f59ff1e2272f9f5f7950e5d9&lt;br /&gt;
 $ printf &amp;quot;PASSWORD&amp;quot; | md5sum | awk '{printf $1}' | md5sum | awk '{print $1}'&lt;br /&gt;
 46d934e0f59ff1e2272f9f5f7950e5d9&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PORT_SSL ===&lt;br /&gt;
&lt;br /&gt;
Puerto que utilizará Cloudy en la interfaz web con HTTPS (si SSL está instalado).&lt;br /&gt;
&lt;br /&gt;
'''Ejemplo:'''&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;7443&amp;quot; - se accederá a la web https://IP_SERVIDOR:7443.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Referencias ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoría:Cloudy]]&lt;/div&gt;</summary>
		<author><name>Conxuro</name></author>	</entry>

	<entry>
		<id>http://es.wiki.guifi.net/wiki/Cloudy_plug-ins</id>
		<title>Cloudy plug-ins</title>
		<link rel="alternate" type="text/html" href="http://es.wiki.guifi.net/wiki/Cloudy_plug-ins"/>
				<updated>2015-04-22T15:11:25Z</updated>
		
		<summary type="html">&lt;p&gt;Conxuro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ¿Qué es un plug-in? ==&lt;br /&gt;
&lt;br /&gt;
Cloudy es una distribución de Linux basada en Debian que proporciona a los usuarios una interfaz simple y cómoda para gestionar diferentes servicios que pueden usarse a través de una red comunitaria; en nuestro caso, Guifi.&lt;br /&gt;
&lt;br /&gt;
Al mismo tiempo, Cloudy ofrece una serie de herramientas que permiten a un usuario añadir un servicio de su agrado sin tener grandes conocimientos sobre redes e informática en general. Automaticamente, estos servicios se publican mediante Avahi, de manera que todo el que utilice Cloudy podrá hacer uso de estos servicios.&lt;br /&gt;
&lt;br /&gt;
Otra manera de llamar estos servicios que se pueden poner y quitar de forma sencilla es ''plug-in''. Por tanto, entendemos por plug-in a un programa o software que un usuario quiere añadir a la distribución y que puede ser gestionado de forma simple des de la interfaz web que provee Cloudy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Añadir servicios a Cloudy ==&lt;br /&gt;
&lt;br /&gt;
=== Una pequeña introducción ===&lt;br /&gt;
&lt;br /&gt;
Esta guía te enseñará el proceso para añadir un nuevo servicio en la distribución Cloudy.&lt;br /&gt;
&lt;br /&gt;
Para serclaro y dar algunos ejemplos al mismo tiempo, integraremos un servicio bastante simple mostrando algunos trozos de código por el camino. Para seguir el tutorial con más facilidad o bien para integrar servicios más complejos, estaría bien tener algunos conocimientos de Bash&amp;lt;ref name=&amp;quot;Bash&amp;quot;&amp;gt;(http://www.tldp.org/LDP/Bash-Beginners-Guide/Bash-Beginners-Guide.pdf)&amp;lt;/ref&amp;gt; y de PHP&amp;lt;ref name=&amp;quot;PHP&amp;quot;&amp;gt;(https://php.net/manual/es/index.php)&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Por simplicidad utilizaremos Pastecat&amp;lt;ref name=&amp;quot;Pastecat&amp;quot;&amp;gt;(https://github.com/mvdan/pastecat)&amp;lt;/ref&amp;gt;. Es un buen candidato ya que:&lt;br /&gt;
&lt;br /&gt;
* Es independiente y no se ''federa'' ni se comunica con otros nodos.&lt;br /&gt;
* Está hecho en Go, es facil de distribuir e instalar.&lt;br /&gt;
* No necesita archivos de configuración.&lt;br /&gt;
* No necesita muchos recursos.&lt;br /&gt;
&lt;br /&gt;
=== Obtener el binario ===&lt;br /&gt;
&lt;br /&gt;
Lo primero que hemos de investigar es como descargar e instalar el binario en Cloudy. La mayoria de software que podemos encontrar está por defecto en los paquetes de Debian, pero Pastecat no está. Si se diera el caso de que estuviera, solo tendríamos que ejecutar el comando &amp;lt;code&amp;gt;apt-get install pastecat&amp;lt;/code&amp;gt; desde PHP.&lt;br /&gt;
&lt;br /&gt;
Pero como este no es el caso, tendremos que obtener el binario por otro lado. Una opcion es coger el código fuente y compilarlo nosotros mismos, pero el problema de esto es que Cloudy necesitaria incluir muchas herramientas y librerias de desarrollo, y este no es el objetivo.&lt;br /&gt;
&lt;br /&gt;
La mejor opción si un paquete de Debian no está disponible en los repositorios es descargar los binarios de otro lugar seguro. Podemos utilizar el servicio de ''&amp;quot;releases&amp;quot;'' de Github para ello. Las dos opciones nos dan un archivo ejecutable que tendríamos que ser capaces de ejecutar directamente sobre Cloudy.&lt;br /&gt;
&lt;br /&gt;
En este caso en particular descargaremos los binarios desde el repositorio git con la siguiente linea de comandos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    wget https://github.com/mvdan/pastecat/releases/download/v0.3.0/pastecat_linux_386_v0.3.0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nótese que en este caso en concreto estamos descargando una versión específica para Linux con arquitectura i386.&lt;br /&gt;
&lt;br /&gt;
Fijaos que tener un servicio en los paquetes de Debian tiene muchas ventajas:&lt;br /&gt;
&lt;br /&gt;
* Las actualizaciones son simples y no necesitan trabajo extra desde Cloudy.&lt;br /&gt;
* El paquete está compilado para Debian de manera segura.&lt;br /&gt;
* Los archivos de ''init.d'' ya vienen por defecto.&lt;br /&gt;
* Los paquetes de Debian suelen contener correciones.&lt;br /&gt;
&lt;br /&gt;
=== Probarlo ===&lt;br /&gt;
&lt;br /&gt;
Antes de añadir un servicio deberíamos configurarlo y probarlo nosotros directamente para ver cómo funciona y que realmente funciona. También hemos de entender qué opciones de configuración o de linea de comandos necesitamos para hacer uso de este servicio en particular y como lo gestionariamos una vez este funcionando.&lt;br /&gt;
&lt;br /&gt;
=== Añadir el controlador ===&lt;br /&gt;
&lt;br /&gt;
En &amp;lt;code&amp;gt;web/plug/controllers&amp;lt;/code&amp;gt; tenenmos un archivo PHP para cada servicio, llamado controlador (o 'controller' en inglés). Este archivo contiene el codigo que se ejecutará cuando se visite la página de nuestro servicio desde la interfaz de Cloudy.&lt;br /&gt;
&lt;br /&gt;
==== Añadir la función indice ====&lt;br /&gt;
&lt;br /&gt;
Lo que queremos es que nuestro servicio esté integrado en la estructura web de Cloudy. Para ello, necesitamos crear unos cuantos ''scripts'' en PHP y añadirlos a nuestro sistema. De momento crearemos dos ''scripts'': &amp;lt;code&amp;gt;pastecat.php&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;pastecat.menu.php&amp;lt;/code&amp;gt;. El primer archivo es el controlador, es decir, el ''script'' que renderiza la página y tiene toda la información tal como botones o redireccionamientos. El otro es el que permite que nuestro servicio se muestre en los menus superiores desplegables de Cloudy. &lt;br /&gt;
&lt;br /&gt;
El código del menú será similar a esto:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt; &lt;br /&gt;
    &amp;lt;?php&lt;br /&gt;
    //peerstreamer.menu.php&lt;br /&gt;
    addMenu('Pastecat','pastecat','Clommunity');&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por ahora, utilizaremos un ''script'' muy simple en PHP como controlador:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt; &lt;br /&gt;
    &amp;lt;?php&lt;br /&gt;
    //pastecat&lt;br /&gt;
    $title=&amp;quot;Pastecat&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    function index(){&lt;br /&gt;
        global $paspath,$title;&lt;br /&gt;
        global $staticFile;&lt;br /&gt;
    &lt;br /&gt;
        $page=hlc(t($title));&lt;br /&gt;
        $page .= hl(t(&amp;quot;Minimalist pastebin engine written in Go&amp;quot;),4);&lt;br /&gt;
        $page .= par(t(&amp;quot;A simple and self-hosted pastebin service written in Go&amp;quot;).' '.t(&amp;quot;Can use a variety of storage backends&amp;quot;).' '.t(&amp;quot; Designed to optionally remove pastes after a certain period of time.&amp;quot;).' '.(&amp;quot;If using a persistent storage backend, pastes will be kept between runs.&amp;quot;).' '.t(&amp;quot;This software runs the&amp;quot;).' '.&amp;quot;&amp;lt;a href='http://paste.cat'&amp;gt;&amp;quot;.t(&amp;quot;paste.cat&amp;quot;).&amp;quot;&amp;lt;/a&amp;gt;&amp;quot;. t(&amp;quot; public service.&amp;quot;));&lt;br /&gt;
        &lt;br /&gt;
        return(array('type' =&amp;gt; 'render','page' =&amp;gt; $page));&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En nuestro sistema Cloudy estos archivos han de ponerse en los directorios dentro de &amp;lt;code&amp;gt;/var/local/cDistro/plug/&amp;lt;/code&amp;gt;. El primero ha de ir en &amp;lt;code&amp;gt;menus&amp;lt;/code&amp;gt; y el segundo en el directori &amp;lt;code&amp;gt;controllers&amp;lt;/code&amp;gt;. Una vez hecho esto podemos ir a la web de nuestro Cloudy y acceder al nuevo menú Pastecat.&lt;br /&gt;
&lt;br /&gt;
==== Hacer que el controlador instale nuestro servicio ====&lt;br /&gt;
&lt;br /&gt;
Como se ha comentado anteriormente, este paso es mucho más sencillo de hacer si el servicio está entre los paquetes de Debian. Como que no es el caso de Pastecat, lo tendremos que hacer manualmente. Normalmente hacer este proceso manualmente incluye una combinación de los comandos &amp;lt;code&amp;gt;wget&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;chmod&amp;lt;/code&amp;gt;. En general, es buena idea mantener los archivos de este tipo de servicios en &amp;lt;code&amp;gt;/opt/SERVICENAME&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
En nuestro caso particular, lo primero que necesitamos es descargar el binario de la ''release'' de Github. Para ello utilizaremos el comando: &amp;lt;code&amp;gt;wget&amp;lt;/code&amp;gt;. Dada una URL a un archivo, este comando permite descargar este archivo en nuestro sistema, i es lo que haremos con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code bash&amp;gt;&lt;br /&gt;
    wget https://github.com/mvdan/pastecat/releases/download/v0.3.0/pastecat_linux_386_v0.3.0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez tengamos el binario en nuestra máquina, lo moveremos al directorio /opt/pastecat/. Para mover los archivos por nuestro sistema usaremos el comando &amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt;. Aun así, primero tendremos que crear el directorio donde pondremos el archivo. Para ello utilizaremos &amp;lt;code&amp;gt;mkdir&amp;lt;/code&amp;gt; de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code bash&amp;gt;&lt;br /&gt;
   mkdir -p /opt/pastecat/&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hayamos creado el directorio, es hora de mover el binario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code bash&amp;gt;&lt;br /&gt;
    mv current_directory/pastecat_linux_386 /opt/pastecat/&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;quot;current_directory&amp;quot; es el directorio donde previamente hemos descargado el binario. Como el nombre del binario depende de la arquitectura, para simplificar el código del controlador, cambiaremos el nombre del archivo ejecutable por algo más genérico y simple:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code bash&amp;gt;&lt;br /&gt;
    mv /opt/pastecat/pastecat_linux_386 /opt/pastecat/pastecat&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora nuestro binario se llama &amp;lt;code&amp;gt;pastecat&amp;lt;/code&amp;gt; en lugar de &amp;lt;code&amp;gt;pastecat_linux_386&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Estos pasos son los requisitos mínimos para instalar un servicio que no se ofrece directamente en los repositorios oficiales de Debian. Sin embargo, de cara a un usuario final, sería una pesadilla tener que hacer todos estos comandos en una consola conectado a través de &amp;lt;code&amp;gt;ssh&amp;lt;/code&amp;gt; a su dispositivo, así que lo que haremos a continuación es crear un ''script'' en Bash que será llamado más adelante a traves de la interfaz web haciendo click en un botón.&lt;br /&gt;
&lt;br /&gt;
Este ''script'' es la primera versión del controlador de Pastecat. Por ahora solo incluiremos una función para instalar Pastecat en nuestro dispositivo. Más adelante incluiremos otras funciones para proveer a nuestro ''script'' de más servicios:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code bash&amp;gt;&lt;br /&gt;
    #!/bin/bash&lt;br /&gt;
    PCPATH=&amp;quot;/opt/pastecat/&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    doInstall() {&lt;br /&gt;
        if isInstall&lt;br /&gt;
        then&lt;br /&gt;
            echo &amp;quot;Pastecat is already installed.&amp;quot;&lt;br /&gt;
            return&lt;br /&gt;
        fi&lt;br /&gt;
    &lt;br /&gt;
        # Creating directory and switching&lt;br /&gt;
        mkdir -p $pcpath &amp;amp;&amp;amp; cd $pcpath&lt;br /&gt;
    &lt;br /&gt;
        # Getting file&lt;br /&gt;
        wget https://github.com/mvdan/pastecat/releases/download/v0.3.0/pastecat_linux_386_v0.3.0&lt;br /&gt;
    &lt;br /&gt;
        # Changing name so controller can invoke it generically&lt;br /&gt;
        mv pastecat_linux_386 pastecat&lt;br /&gt;
        chmod +x pastecat&lt;br /&gt;
        &lt;br /&gt;
        cd -&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    isInstalled() {&lt;br /&gt;
        [ -d $pcpath ] &amp;amp;&amp;amp; return 0&lt;br /&gt;
        return 1&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    case $1 in&lt;br /&gt;
        &amp;quot;install&amp;quot;)&lt;br /&gt;
            shift&lt;br /&gt;
            doInstall $@&lt;br /&gt;
            ;;&lt;br /&gt;
    esac&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos ver como los últimos pasos se han concentrado en una misma función, permmiténdonos instalar el software en el dispositivo de una manera mas sencilla.&lt;br /&gt;
&lt;br /&gt;
==== Hacer que el controlador utilitce Pastecat ====&lt;br /&gt;
&lt;br /&gt;
===== Ejecutar el servicio =====&lt;br /&gt;
&lt;br /&gt;
El paso siguiente es hacer que nuestro software se pueda utilizar desde la intarfaz web. Para ello incluiremos una nueva opción en nuestra página principal de Pastecat e incluiremos una nueva función en nuestro controlador para gestionar el binario. Añadiremos un botón en el código PHP de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code bash&amp;gt;&lt;br /&gt;
    $page .= addButton(array('label'=&amp;gt;t('Create a Pastecat server'),'href'=&amp;gt;$staticFile.'/pastecat/publish'));&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ha de ir justo después del mensaje &amp;lt;code&amp;gt;Pastecat is installed&amp;lt;/code&amp;gt;. A continuación se ha de implementar la función &amp;lt;code&amp;gt;publish&amp;lt;/code&amp;gt; en el mismo PHP. Esta función es la responsable de llamar a la función correspondiente desde el controlador y anunciar nuestro servicio utilizando Avahi. La diferencia con esta función es que requiere un formulario para introducir datos, así que al final acabaremos teniendo dos funciones: una ''get'' i una ''post'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
    function publish_get() {&lt;br /&gt;
        global $pcpath,$title;&lt;br /&gt;
        global $staticFile;&lt;br /&gt;
        &lt;br /&gt;
        $page = hlc(t($title));&lt;br /&gt;
        $page .= hlc(t('Publish a pastecat server'),2);&lt;br /&gt;
        $page .= par(t(&amp;quot;Write the port to publish your Pastecat service&amp;quot;));&lt;br /&gt;
        $page .= createForm(array('class'=&amp;gt;'form-horizontal'));&lt;br /&gt;
        $page .= addInput('description',t('Describe this server'));&lt;br /&gt;
        $page .= addSubmit(array('label'=&amp;gt;t('Publish'),'class'=&amp;gt;'btn btn-primary'));&lt;br /&gt;
        $page .= addButton(array('label'=&amp;gt;t('Cancel'),'href'=&amp;gt;$staticFile.'/peerstreamer'));&lt;br /&gt;
        &lt;br /&gt;
        return(array('type' =&amp;gt; 'render','page' =&amp;gt; $page));&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    function publish_post() {&lt;br /&gt;
        $port = $_POST['port'];&lt;br /&gt;
        $description = $_POST['description'];&lt;br /&gt;
        $ip = &amp;quot;&amp;quot;;&lt;br /&gt;
        &lt;br /&gt;
         &amp;lt;nowiki&amp;gt;$page = &amp;quot;&amp;lt;pre&amp;gt;&amp;quot;;&lt;br /&gt;
        $page .= _pcsource($description);&lt;br /&gt;
        $page .= &amp;quot;&amp;lt;/pre&amp;gt;&amp;quot;;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        return(array('type' =&amp;gt; 'render','page' =&amp;gt; $page));&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como podemos ver en la función &amp;lt;code&amp;gt;post&amp;lt;/code&amp;gt; estamos invocando otra función. El motivo de hacer esto es escribir el código de manera más simple y modular. En esta última funcion por fin llamamos al script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
    function _pcsource($port,$description) {&lt;br /&gt;
        global $pcpath,$pcprogram,$title,$pcutils,$avahi_type,$port;&lt;br /&gt;
    &lt;br /&gt;
        $page = &amp;quot;&amp;quot;;&lt;br /&gt;
        $device = getCommunityDev()['output'][0];&lt;br /&gt;
        $ipserver = getCommunityIP()['output'][0];&lt;br /&gt;
    &lt;br /&gt;
        if ($description == &amp;quot;&amp;quot;) $description = $type;&lt;br /&gt;
    &lt;br /&gt;
        $cmd = $pcutils.&amp;quot; publish '$port' '$description';&lt;br /&gt;
        execute_program_detached($cmd);&lt;br /&gt;
    &lt;br /&gt;
        $page .= t($ipserver);&lt;br /&gt;
        $page .= par(t('Published this server.'));&lt;br /&gt;
    &lt;br /&gt;
        $page .= addButton(array('label'=&amp;gt;t('Back'),'href'=&amp;gt;$staticFile.'/pastecat'));&lt;br /&gt;
    &lt;br /&gt;
        return($page)&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo siguiente que hemos de hacer es crear una función &amp;lt;code&amp;gt;publish&amp;lt;/code&amp;gt; en el controlador, por lo que añadiremos una nueva función al controlador básico que tenemos en la sección '''3.2'''. Primero añadiremos un nuevo paámetro llamado ''publish'', asi que la primera parte en ejecutarse del ''script'' sera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code bash&amp;gt;&lt;br /&gt;
    if [ $# -lt 1 ]&lt;br /&gt;
    then&lt;br /&gt;
        doHelp&lt;br /&gt;
    fi&lt;br /&gt;
    &lt;br /&gt;
    case $1 in&lt;br /&gt;
        &amp;quot;install&amp;quot;)&lt;br /&gt;
            shift&lt;br /&gt;
            doInstall $@&lt;br /&gt;
            ;;&lt;br /&gt;
        &amp;quot;publish&amp;quot;)&lt;br /&gt;
            shift&lt;br /&gt;
            doServer $@&lt;br /&gt;
            ;;&lt;br /&gt;
    esac&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como se puede ver, cuando el primer argumento del ''script'' es &amp;lt;code&amp;gt;publish&amp;lt;/code&amp;gt;, desplazamos (''shift'') el resto de argumentos y llamamos a la funcion &amp;lt;code&amp;gt;doServer&amp;lt;/code&amp;gt;. En esta función hemos de poner en marcha el servicio con los argumentos correspondientes, así que lo primero queharemos será poner estos parámetros en variables locales. Una vez hecho esto lo más lógico sería lanzar la aplicación directamente, pero como el ''script'' se llama con permisos de &amp;quot;root&amp;quot; (no recomendable), hemos de lanzar Pastecat como usuario &amp;lt;code&amp;gt;nobody&amp;lt;/code&amp;gt;. El problema es que el usuario &amp;lt;code&amp;gt;nobody&amp;lt;/code&amp;gt; no tiene casi permisos y Pastecat necesita algunos persmisos para crear directorios y archivos de texto. Para permitir que &amp;lt;code&amp;gt;nobody&amp;lt;/code&amp;gt; pueda hacerlo, primero crearemos un directorio con permisos a casi todos los usuarios. Para esto, utilizaremos el comando &amp;lt;code&amp;gt;chmod&amp;lt;/code&amp;gt; de nuevo. Ahora el usuario puede crear archivos y directorios dentro de este mismo directorio, y en consecuencia podemos ejecutar Pastecat. Finalmente hay que mantener el PID en una variable en caso de que lo necesitemos más adelante (que ya os adelantamos que sí lo necesitaremos):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code bash&amp;gt;&lt;br /&gt;
    doServer() {&lt;br /&gt;
        # Turning machine into a server&lt;br /&gt;
    &lt;br /&gt;
        local port=${1:-&amp;quot;&amp;quot;}&lt;br /&gt;
        local description=${2:-&amp;quot;&amp;quot;}&lt;br /&gt;
        local ip=${3:-&amp;quot;0.0.0.0&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
        # Creating directory with nobody permissions&lt;br /&gt;
        mkdir -p &amp;quot;/var/local/pastecat&amp;quot;&lt;br /&gt;
        chmod 777 &amp;quot;/var/local/pastecat&amp;quot; &amp;amp;&amp;amp; cd &amp;quot;/var/local/pastecat&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
        # Running pastecat &lt;br /&gt;
        cmd='su '$PCUSER' -c &amp;quot;{ '$PCPATH$PCPROG' -l :'$port' &amp;gt; '$LOGFILE' 2&amp;gt;&amp;amp;1 &amp;amp; }; echo \$!&amp;quot;'&lt;br /&gt;
        pidpc=$(eval $cmd)          # keeping PID for future needs...&lt;br /&gt;
    &lt;br /&gt;
        cd -&lt;br /&gt;
    &lt;br /&gt;
        # Using the PID, we could carry on process control so if the pastecat process die, we can also&lt;br /&gt;
        # stop the avahi process to avoid &amp;quot;false connections&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
        return&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fijaos que ahora estamos utilizando algunas variables globales que no estaban definidas antes, como &amp;lt;code&amp;gt;PCUSER&amp;lt;/code&amp;gt; y &amp;lt;code&amp;gt;LOGFILE&amp;lt;/code&amp;gt;. Estas variables tienen los siguientes valores:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code bash&amp;gt;&lt;br /&gt;
    PCPATH=&amp;quot;/opt/pastecat/&amp;quot;&lt;br /&gt;
    PCPROG=&amp;quot;pastecat&amp;quot;&lt;br /&gt;
    LOGFILE=&amp;quot;/dev/null&amp;quot;&lt;br /&gt;
    PCUSER=&amp;quot;nobody&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Parar el servicio =====&lt;br /&gt;
&lt;br /&gt;
En algún momento es posible que queramos parar nuestro servicio. Para esto crearemos un botón para hacerlo. Lo primero que hacer sería crear el botón, pero si pensamos un poco veremos que antes de crearlo necesitamos una manera de saber si nuestro servicio esta ejecutándose o no. Además, también necesitamos una manera de parar nuestro servicio. Como estamos ejecutando sobre Linux, podemos parar el servicio fácilmente utilizando el comando &amp;lt;code&amp;gt;kill&amp;lt;/code&amp;gt;. El problema es que para utilizar este comando primero necesitamos saber el número de identificación del proceso (PID). Por suerte, ja nos quedamos con este número cuando creamos el servidor de Pastecat; en concreto con la linea &amp;lt;code&amp;gt;pidpc=$(eval $cmd)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ahora que tenemos todo lo que necesitamos para matar nuestro proceso vamos a ver como lo hacemos para que PHP pueda saber si el servicio está ejecutándose o no. Una manera fácil y eficiente de hacerlo es almacenando algunos datos útiles en un archivo y borrarlo cuando se pare Pastecat. De esta manera nos aseguramos que el archivo sólo existe cuando Pastecat está activo. Este archivo lo crearemos desde el controlador aádiendo las siguientes lineas justo despues de la sentencia que hemos mencionado en el párafo anterior:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code bash&amp;gt;&lt;br /&gt;
    # Writting server info to file&lt;br /&gt;
    info=&amp;quot;$pidpc http://$ip:$port&amp;quot;          # Separator is space character&lt;br /&gt;
    echo $info &amp;gt; $PCFILE&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donde &amp;lt;code&amp;gt;$PCFILE&amp;lt;/code&amp;gt; es una variable global que contiene &amp;lt;code&amp;gt;/var/run/pc.info&amp;lt;/code&amp;gt;. Fijaos&lt;br /&gt;
que el contenido del archivo sera el PID del Pastecat y la dirección completa del servidor de este.&lt;br /&gt;
&lt;br /&gt;
Ahora ya tenemos una manera de saber si el servicio está activo o no, de manera que añadiremos justo a continuación el botón 'stop' en la interfaz web. Modificaremos un poco el ''script'' PHP que teniamos antes, añadiendo un anuncio indicando si Pastecat se está ejecutando o no, y dos botones más cuando éste esté ejecutándose. Así pues, nuestra función índice contendrá el siguiente codigo dentro de la condición que comprueba si Pastecat está instalado o no:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;$page .= &amp;quot;&amp;lt;div class='alert alert-success text-center'&amp;gt;&amp;quot;.t(&amp;quot;Pastecat is installed&amp;quot;).&amp;quot;&amp;lt;/div&amp;gt;\n&amp;quot;;&lt;br /&gt;
    if ( isRunning() ) {&lt;br /&gt;
        $page .= &amp;quot;&amp;lt;div class='alert alert-success text-center'&amp;gt;&amp;quot;.t(&amp;quot;Pastecat is running&amp;quot;).&amp;quot;&amp;lt;/div&amp;gt;\n&amp;quot;;&lt;br /&gt;
        $page .= addButton(array('label'=&amp;gt;t('Go to server'),'href'=&amp;gt;'http://'. getCommunityIP()['output'][0] .':'. $port));&lt;br /&gt;
        $page .= addButton(array('label'=&amp;gt;t('Stop server'),'href'=&amp;gt;$staticFile.'/pastecat/stop'));&lt;br /&gt;
    } else  {&lt;br /&gt;
        $page .= &amp;quot;&amp;lt;div class='alert alert-error text-center'&amp;gt;&amp;quot;.t(&amp;quot;Pastecat is not running&amp;quot;).&amp;quot;&amp;lt;/div&amp;gt;\n&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    $page .= addButton(array('label'=&amp;gt;t('Create a Pastecat server'),'href'=&amp;gt;$staticFile.'/pastecat/publish'));&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En este trozo de código podemos apreciar dos nuevas cosas. La priemra es una función de comprobación llamada &amp;lt;code&amp;gt;isRunning()&amp;lt;/code&amp;gt;. Esta función se parece mucho a la funcion que utilizamos para comprar si Pastecat esta instalado o no:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
    function isRunning() {&lt;br /&gt;
        // Returns whether pastecat is running or not&lt;br /&gt;
        global $pcfile;&lt;br /&gt;
        &lt;br /&gt;
        return(file_exists($pcfile));   &lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es tan simple como parece, solamente comprueba que el archivo creado cuando se lanza el servidor de Pastecat aun existe. Lo segundo que podemos ver nuevo en nuestro codigo es la existencia de una nueva función llamada &amp;lt;code&amp;gt;stop&amp;lt;/code&amp;gt;. Esta funcion invocará otra función en el controlador que parará el servidor de Pastecat:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
    function stop() {&lt;br /&gt;
        // Stops Pastecat server&lt;br /&gt;
        global $pcpath,$pcprogram,$title,$pcutils,$avahi_type,$port;&lt;br /&gt;
        &lt;br /&gt;
        $page = &amp;quot;&amp;quot;;&lt;br /&gt;
        $cmd = $pcutils.&amp;quot; stop &amp;quot;;&lt;br /&gt;
        execute_program_detached($cmd);&lt;br /&gt;
        &lt;br /&gt;
        return(array('type'=&amp;gt;'redirect','url'=&amp;gt;$staticFile.'/pastecat'));&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para hacer que el controlador entienda esta orden tendremos que modificarla sentencia &amp;lt;code&amp;gt;case&amp;lt;/code&amp;gt; y añadir la nueva función. En el &amp;lt;code&amp;gt;case&amp;lt;/code&amp;gt; añadiremos lo siguiente debajo de la opción &amp;lt;code&amp;gt;install&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code bash&amp;gt;&lt;br /&gt;
    &amp;quot;stop&amp;quot;)&lt;br /&gt;
        shift&lt;br /&gt;
        doStop $@&lt;br /&gt;
        ;;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto llama a la función &amp;lt;code&amp;gt;doStop&amp;lt;/code&amp;gt; dentro del mismo controlador. Esta función será similar a:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code bash&amp;gt;&lt;br /&gt;
    doStop() {&lt;br /&gt;
        # Stopping pastecat server&lt;br /&gt;
        pcpid=$(cat $PCFILE | cut -d' ' -f1)&lt;br /&gt;
        kill $pcpid&lt;br /&gt;
        &lt;br /&gt;
        # Removing info file&lt;br /&gt;
        rm $PCFILE&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta función coge el PID de Pastecat del archivo que hemos creado antes, mata el proceso y finalmente borra el archivo de manera que PHP pueda detectar que Pastecat se ha parado.&lt;br /&gt;
&lt;br /&gt;
Ahora podemos crear un servidor de Pastecat y pararlo. Aun así, aun hay algo que falta: hacer que el resto de usuarios puedan ver nuestro servicio. Para esto usaremos Avahi.&lt;br /&gt;
&lt;br /&gt;
=== Publicación de servicios Avahi ===&lt;br /&gt;
&lt;br /&gt;
Una de las mejores cosas de Cloudy es la caracteristica de publicar nuestros servicios con Avahi, permitiendo a otros usuarios saber qué ofrecemos y que puedan unirse a nuestro servicio. Para hacer esto primero hemos de añadir algunas lineas de código en el controlador PHP, justo debajo de la llamada al controlador en Bash para activar el servidor Pastecat. Añadiremos las siguientes lineas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
    $description = str_replace(' ', '', $description);&lt;br /&gt;
    $temp = avahi_publish($avahi_type, $description, $port, &amp;quot;&amp;quot;);&lt;br /&gt;
    $page .= ptxt($temp);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aisí al final nuestra función quedará así:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
    function _pcsource($port,$description) {&lt;br /&gt;
        global $pcpath,$pcprogram,$title,$pcutils,$avahi_type;&lt;br /&gt;
        &lt;br /&gt;
        $page = &amp;quot;&amp;quot;;&lt;br /&gt;
        $device = getCommunityDev()['output'][0];&lt;br /&gt;
        $ipserver = getCommunityIP()['output'][0];&lt;br /&gt;
        &lt;br /&gt;
        if ($description == &amp;quot;&amp;quot;) $description = $type;&lt;br /&gt;
        &lt;br /&gt;
        $cmd = $pcutils.&amp;quot; publish '$port' '$description'&amp;quot;;&lt;br /&gt;
        execute_program_detached($cmd);&lt;br /&gt;
        &lt;br /&gt;
        $page .= t($ipserver);&lt;br /&gt;
        $page .= par(t('Published this server.'));&lt;br /&gt;
        $description = str_replace(' ', '', $description);&lt;br /&gt;
        $temp = avahi_publish($avahi_type, $description, $port, &amp;quot;&amp;quot;);&lt;br /&gt;
        $page .= ptxt($temp);&lt;br /&gt;
        &lt;br /&gt;
        $page .= addButton(array('label'=&amp;gt;t('Back'),'href'=&amp;gt;$staticFile.'/pastecat'));&lt;br /&gt;
        &lt;br /&gt;
        return($page)&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con este simple paso hemos anunciado nuestro servicio en la red de Avahi. Pero el trabajo no acaba aquí, queda aun una cosa mas por hacer: crear un botón y programarlo de manera que cuando se pulse nos redirija directamente a nuestro servidor de Pastecat.&lt;br /&gt;
&lt;br /&gt;
Para hacer esto hay una carpeta llamada &amp;lt;code&amp;gt;avahi&amp;lt;/code&amp;gt; dentro del directorio &amp;lt;code&amp;gt;plug&amp;lt;/code&amp;gt;. Los ''scripts'' que definen la acción a llevar a cabo cuando se pulsan los botones estan en diferentes archivos dentro de este directorio. De este modo, crearemos un archivo llamado &amp;lt;code&amp;gt;pastecat.avahi.php&amp;lt;/code&amp;gt; que contendrá:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
    &amp;lt;?php&lt;br /&gt;
    // plug/avahi/pastecat.avahi.php&lt;br /&gt;
    &lt;br /&gt;
    addAvahi('pastecat','fpcserver');&lt;br /&gt;
    &lt;br /&gt;
    function fpcserver($dates){&lt;br /&gt;
        global $staticFile;&lt;br /&gt;
        &lt;br /&gt;
        return (&amp;quot;&amp;lt;a class='btn' href='http://&amp;quot; .$dates['ip'] .&amp;quot;:&amp;quot;. $dates['port'].&amp;quot;'&amp;gt;Go to server&amp;lt;/a&amp;gt;  &amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto creará un botón al lado del anuncio de Avahi que apuntará a nuestro servidor.&lt;br /&gt;
&lt;br /&gt;
Ahora que ya tenemos nuestro servicio anunciado, queremos que este desaparezca una vez paremos el servidor de Pastecat. Este último paso es muy simple pero importante. Consiste en unas pocas lineas de código en la función 'stop' del ''script'' PHP. Hasta ahora, esta función solo llamaba al controlador Bash y paraba Pastecat, pero ahora también parará la publicación Avavhi y mostrará un breve comentario notificando que la llamada ha funcionado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code php&amp;gt;&lt;br /&gt;
    $temp = avahi_unpublish($avahi_type, $port);&lt;br /&gt;
    $flash = ptxt($temp);&lt;br /&gt;
    setFlash($flash);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estas lineas tienen que ser añadidas justo después de la sentencia &amp;lt;code&amp;gt;execute_program_detached($cmd)&amp;lt;/code&amp;gt; en la función 'stop' de PHP.&lt;br /&gt;
&lt;br /&gt;
=== Final ===&lt;br /&gt;
&lt;br /&gt;
Finalmente añadir que todos los archivos implementados en este tutorial se pueden encontrar en un repositorio Github, que aparece en el apartado de Enlaces Externos, junto a este mismo tutorial en formato Markdown (md).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Referencias ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Enlaces externos ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/Clommunity/Doc/tree/master/plugins/pastecat&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Categoría:Cloudy]]&lt;br /&gt;
[[ca:Cloudy_plug-ins]]&lt;br /&gt;
[[en:Cloudy_plug-ins]]&lt;/div&gt;</summary>
		<author><name>Rogerpueyo</name></author>	</entry>

	</feed>