Noticias rmgss.net https://www.rmgss.net/rss Sitio personal de Rodrigo Garcia es python Flask - Jinja2 Accediendo a equipos de casa mediante vpn wireguard https://rmgss.net/posts/accediendo-a-equipos-de-casa-mediante-vpn-wireguard https://rmgss.net/posts/accediendo-a-equipos-de-casa-mediante-vpn-wireguard Tue Apr 2 23:38:31 2019 text/html Rodrigo Garcia software , tutoriales (u'Una forma sencilla de acceder a equipos de casa que tienen conexi\xf3n a internet pero no tienen IP p\xfablica. Se usa software para redes privadas virtuales VPN, en este caso Wireguard.\n\nDe esta manera podemos acceder a un equipo por ejemplo en nuestra casa usando como "puente" a un servidor con IP p\xfablica, la ventaja de usar una VPN como Wireguard es que es muy r\xe1pida, f\xe1cil de configurar, usa criptograf\xeda asim\xe9trica y adem\xe1s se pueden agregar pares (equipos en la vpn) de manera sencilla. Wireguard establece un t\xfanel de conexiones fuertemente cifradas entre pares.\n\n \nvpn-1\n\n \n- Un servidor con IP p\xfablica al que tengamos acceso.\n- Una computadora en casa con conexi\xf3n a internet a la que queremos acceder.\n- Se asume que tanto el servidor como la computadora funcionan con alguna distribuci\xf3n de GNU/Linux, aunque wireguard est\xe1 disponible para otros sistemas operativos.\n\n \nLa gu\xeda oficial est\xe1n en https://www.wireguard.com/install/, sin embargo para no agregar ppas a nuestro repositorio de paquetes, lo conveniente es instalar construyendo desde el c\xf3digo fuente, los pasos que segu\xed:\n\n :::bash\n sudo apt-get install libmnl-dev libelf-dev linux-headers-$(uname -r) build-essential pkg-config\n\t# clonando el repositorio\n\tgit clone https://git.zx2c4.com/WireGuard\n\t# construyendo\n\tcd WireGuard/src\n\tmake\n\t# instalando en el sistema\n\tsudo make install\n\n \nUsaremos archivos de configuraci\xf3n, recordando que para esta vpn s\xf3lo habr\xe1n dos pares; el servidor y la computadora en casa.\n\nPara una gu\xeda mas detallada se puede seguir https://www.wireguard.com/quickstart/\n\n \nPrimero se deben generar el par de claves p\xfablica y privada usando wireguard en ambos equipos.\n\n :::bash\n\t# clave privada\n sudo wg genkey > private.txt\n\t# clave publica\n\tsudo wg pubkey < private.txt > public.txt\n\nUsaremos el contenido de private.txt y public.txt para copiarlo en los archivos de configuraci\xf3n y permitir el acceso de los equipos a nuestra VPN.\n\n \nAhora creamos el archivo /etc/wireguard/10-mivpn.conf donde \n\n [Interface]\n\t# La clave privada es el contenido del archivo private.txt \n PrivateKey = eI0Tf4v...\n ListenPort = 10100\n\n # Peer equipo de casa\n [Peer]\n\t# Aqui copiamos la llave publica del equipo de casa (archivo public.txt)\n PublicKey = Aoc0F8e...\n # indicamos que se aceptan conexiones de cualquier IP\n AllowedIPs = 0.0.0.0/0\n\nLuego es conveniente crear un script bash para configurar la interfaz de red y aplicar las configuraciones a wireguard directamente. Por ejemplo en el script setup-vpn.sh:\n\n :::bash\n\t#!/bin/bash\n\tinterface=wg0\n\tconf=/etc/wireguard/10-mivpn.conf\n # configuracion de interfaces de red del tipo "wireguard"\n\tip link del dev $interface 2>/dev/null || true\n\tip link add $interface type wireguard\n\tip addr add 50.50.50.49 dev $interface\n\tip link set $interface up\n # aplicando configuracion a wireguard\n\twg setconf $interface $conf\n\twg show\n\n\texit 0\n\nAhora ejecutamos el script para configurar las interfaces de red y configurar la VPN.\n\n :::bash\n\tsudo ./setup-vpn.sh\n\n \nCreamos el archivo /etc/wireguard/10-mivpn.conf con:\n\n [Interface]\n\t# La clave privada es el contenido del archivo private.txt \n PrivateKey = C8M-25...\n ListenPort = 10100\n\n # Peer Servidor\n [Peer]\n\t# Aqui copiamos la llave publica del servidor (archivo public.txt)\n PublicKey = 9Fvpn4...\n # indicamos que se aceptan conexiones de cualquier IP\n AllowedIPs = 0.0.0.0/0\n\t# indicamos la IP publica del servidor y el puerto en que este escucha\n\tEndpoint = <IP p\xfablica del servidor>:10100\n\t# ajustamos intervalo de tiempo para enviar un paquete para mantener la conexion\n\tPersistentKeepalive = 120\n\nDe igual manera creamos un script para levantar la vpn f\xe1cilmente por ejemplo setup-vpn.sh:\n\n :::bash\n\t#!/bin/bash\n\tinterface=wg0\n\tconf=/etc/wireguard/10-mivpn.conf\n # configuracion de interfaces de red del tipo "wireguard"\n\tip link del dev $interface 2>/dev/null || true\n\tip link add $interface type wireguard\n\tip addr add 50.50.50.50 dev $interface\n\tip link set $interface up\n # aplicando configuracion a wireguard\n\twg setconf $interface $conf\n\twg show\n\n\texit 0\n\nLuego ejecutamos el script sudo bash setup-vpn.sh\n\n \nPodemos comprobar en ambos equipos la configuraci\xf3n de wireguard con:\n\n sudo wg show\n\t\nQue deber\xeda mostrar los cambios que hemos aplicado, es importante tambi\xe9n asegurarse que las interfaces de red est\xe9n funcionales con:\n\n ip a\n\t\nQue deber\xeda mostrarnos una interfaz del tipo wg0 con ipv4 50.50.50.x seg\xfan sea el servidor o la computadora de casa.\n\nFinalmente abrimos la conexi\xf3n de la VPN, desde el equipo de casa con:\n\n :::bash\n\tping 50.50.50.49\n\t\nQue deber\xeda responder positivamente. Hay que notar que el \xfanico equipo capaz de abrir la conexi\xf3n en este caso es la computadora de casa por que sabe como llegar al servidor, esto por la l\xednea Endpoint = &lt;IP p\xfablica del servidor&gt;:10100 en su archivo de configuraci\xf3n. Como este apunta a una IP p\xfablica accesible por internet, el equipo de casa puede llegar al servidor y al recibir las peticiones, wireguard en el servidor tambi\xe9n establece un t\xfanel hacia el equipo de casa.\n\nPara renovar autom\xe1ticamente la conexi\xf3n se usa PersistentKeepalive = 120 para enviar un paquete cada 120 segundos, tambi\xe9n por ejemplo en /etc/crontab del equipo de casa se puuede hacer que se envien peticiones ICMP (ping) al servidor para que vaya constantemente reavivando la conexi\xf3n y guardando en archivos el resultado del intento de conexi\xf3n.\n\nFinalmente si el resultado es positivo ya podemos conectarnos al equipo de casa a trav\xe9s del servidor primero, solo bastar\xeda acceder al servidor desde cualquier lugar y apuntar al equipo de casa (IP: 50.50.50.50) para establecer comunicaci\xf3n "directa".\n\nHay gran cantidad de usos para este tipo de conexiones, por ejemplo servir una p\xe1gina web alojada en un equipo en nuestra casa y usar un servidor s\xf3lo como proxy que dirija todas las peticiones desde internet a nuestro equipo de casa, y las respuestas del equipo de casa hacia internet, los ejemplos de uso son muy variados y espero esta gu\xeda te haya servido.\n\n\n\n', [u'software', u'tutoriales'])

]]>
Si del cielo te caen limones https://rmgss.net/posts/si-del-cielo-te-caen-limones https://rmgss.net/posts/si-del-cielo-te-caen-limones Sun Mar 31 15:22:11 2019 text/html Rodrigo Garcia reflexión , misceláneo (u'... aprende a hacer limonada. Dice una frase que suena hasta en canciones de salsa.\n\nQuiero compartir una reflexi\xf3n sobre las circunstancias que tocan vivir.\n\n \nEs el caso de un joven que ha tenido el sue\xf1o de ser artista desde ni\xf1o, ahora est\xe1 en plena juventud pero se siente infeliz por que no ha llegado a ser el artista que siempre ha so\xf1ado. Le lastima verse o pensar en eso y tambi\xe9n siente "envidia" al ver a sus cercanos rebosantes de alegr\xeda y con "\xe9xito".\n\nNo tiene una explicaci\xf3n certera de por que ha sido as\xed, pero cree haber encontrado una explicaci\xf3n. Dice que sus padres no le apoyaron cuando lo necesitaba, cuando era peque\xf1o le quer\xedan hacer ver que los artistas en este pa\xeds se mueren de hambre y est\xe1n destinados a una vida de miseria. Incluso llegaban a ser agresivos y se burlaban de estas personas refiri\xe9ndose a ellos como "buenos para nada" o "ignorantes perdedores".\n\nDesde peque\xf1o le llenaron la cabeza con esas ideas y en alg\xfan punto lleg\xf3 a creerlas, pero \xe9l no se conform\xf3 completamente con eso por que \xe9l quiere hacer las cosas que hacen los artistas.\n\nTermin\xf3 el colegio y a la hora de escoger algo que estudiar sus padres trataban a\xfan de imponer su punto de vista, incit\xe1ndole a estudiar una carrera lucrativa. Pero \xe9l no pod\xeda aceptarlo y si lo hac\xeda estar\xeda renunciando a lo que es.\n\nSus padres en cierta forma se dieron cuenta de que podr\xedan estar frente a un "caso perdido" y le quitaron el apoyo en casi todo lo referente a su sue\xf1o de ser artista. Desafortunadamente, el joven hab\xeda adquirido ciertos malos h\xe1bitos y cuando asist\xeda a eventos art\xedsticos a menudo retornaba a casa muy tarde y embriagado.\n\nSu familia y sus padres, r\xe1pidamente empezaron a asociar el arte con estos malos h\xe1bitos y se lo echaban en cara. El joven no pod\xeda simplemente mantener un trabajo por m\xe1s de 3 meses y le costaba mucho conseguir algo. Dentro de \xe9l crec\xeda un rencor hacia los que le hab\xedan rechazado y le han hecho la vida dif\xedcil, -- a medida que sus malos h\xe1bitos se hac\xedan m\xe1s frecuentes, mas crec\xeda su rencor.\n\nEl joven lleg\xf3 a un punto en que comenz\xf3 a culpar a sus padres y a su familia por la persona en la que se hab\xeda convertido, por no confiar en \xe9l y por no tomarle en cuenta. Ahora mismo su futuro es incierto y se pasa mucho tiempo encerrado en su habitaci\xf3n haciendo pasar el tiempo en actividades que le ayudan a no recordar su situaci\xf3n, pero a pesar de todo eso a\xfan quiere hacer las cosas que los artistas hacen y de alguna manera tiene esperanza a\xfan cuando no le gusta admitirlo frente a otros.\n\n \nAhora veamos el caso de otro joven, desde peque\xf1o le ha atra\xeddo el arte, sus padres le facilitaron una educaci\xf3n favorable para que alg\xfan d\xeda se convierta en un "artista exitoso". Casi siempre ha tenido lo que quer\xeda y ha conseguido tener una vida respaldada completamente por su trabajo art\xedstico.\n\nCuando hace alg\xfan trabajo y gracias a que ha ganado fama desde temprana edad, hay personas en sus expocisiones que admiran sus obras y le pagan para que siga haci\xe9ndolas. Hasta el otro joven en situaci\xf3n d\xedficil es un admirador de este \xfaltimo.\n\nPero ahora mismo, yo me pregunto \xbfC\xfaal fue el m\xe9rito, crucial para que este joven tenga tanto \xe9xito?\n\n \nSin llegar a muchos detalles yo dir\xeda que el joven artista exitoso no ha hecho grandes m\xe9ritos, simplemente ha estado en una situaci\xf3n favorable y lograr lo que ha logrado dadas las condiciones que ha vivido era probablemente s\xf3lo cuesti\xf3n de tiempo.\n\nUna vez un se\xf1or de avanzada edad, contempl\xf3 sus obras y sin conocerlo dijo en voz baja: "Este trabajo no me inspira mucho en especial, para mi le falta carisma y sentido art\xedstico", incluso alguien coment\xf3 a una persona cercana al joven: "El talento no lo es todo", quiz\xe1s viendo lo mismo que el se\xf1or de avanzada edad.\n\nEl joven "exitoso" no ha escuchado nada de eso, posiblemente no tiene inter\xe9s en comprender lo que otr@s pasan o han tenido que pasar para conseguir lo que tienen.\n\n \nYa sea el caso del joven "exitoso" o el joven en "situaci\xf3n no favorable", ninguno de ellos escog\xedo las circusntancias que han vivido. Era algo inevitable en ambos casos y cada uno ha tenido que vivir una vida distinta pero ambos comparten el gusto por el arte.\n\nEstar en situaci\xf3n favorable o desfavorable, no es algo que siempre podamos escoger, para alcanzar aquello que realmente queremos, de seguro las circunstancias est\xe1n fuera de nuestro poder de decisi\xf3n.\n\nLo mismo pasa con el estudiante que quiere ser cient\xedfico pero no puede costearse la educaci\xf3n necesaria, o qui\xe9n quiere ser atleta y tiene un problema en las rodillas, o el que quiere ser jardinero pero su entorno se lo impide.\n\nPensando en eso he llegado a la conclusi\xf3n de que lo \xfanico que est\xe1 en nuestras manos realmente es: que vamos a hacer con lo que nos ha tocado.\n\n \nA mi parecer, el m\xe9rito verdadero viene de encontrar una salida y aprender a lidiar con situaciones inevitablemente desfavorables para alcanzar aquello que realmente se necesita. De ese sacrificio, viene el m\xe9rito de conseguir algo y eso es lo que cambia el mundo, y si a eso se suman buenas intenciones --se cambia el mundo para bien.\n\nEntonces bajo ese razonamiento, puedo decir que qui\xe9n est\xe1 en situaci\xf3n NO favorable tiene la oportunidad de superarla y ganar una experiencia valiosa y enriquecedora.\n\nPor eso, si fuese el caso del joven artista en "situaci\xf3n desfavorable", seguramente tendremos que dejar de lamentarnos sobre lo que nos ha tocado o lo que nos han hecho pasar y buscar la manera de hacer arte, teniendo cuidado de no cometer errores que nos hagan perder el rumbo nuevamente.\n\nEn el caso del joven en "situaci\xf3n favorable" y con s\xf3lo guardarse el \xe9xito para el mismo, no se provocar\xe1 ning\xfan cambio significativo. Lo que conviene hacer es apoyar a otros en situaci\xf3n desfavorable compartiendo lo que tiene, ese aporte mejorar\xe1 sus condiciones significativamente.\n\n----\n\nEntonces para todos aquellos en busca de algo realmente valioso y se les hace dif\xedcil, busquen la salida, atr\xe9vanse a hackear la situaci\xf3n :)\n', [u'reflexi\xf3n', u'miscel\xe1neo'])

]]>
Resistirse a usar ciertos medios comunicacion https://rmgss.net/posts/resistirse-a-usar-ciertos-medios-comunicacion https://rmgss.net/posts/resistirse-a-usar-ciertos-medios-comunicacion Sun Mar 31 15:22:11 2019 text/html Rodrigo Garcia medios_de_comunicación , anonimato , reflexión (u'categor\xedas: #medios_de_comunicaci\xf3n #anonimato #reflexi\xf3n\n\n \nAlgunas razones por las que deber\xedamos considerar no utilizar ciertos medios de comunicaci\xf3n masiva por violar la privacidad de sus usuari@s y otras cosas negativas.\n\nTambi\xe9n voy a mencionar algunas alternativas y formas de incentivar, apoyar y desarrollar tecnolog\xedas que se adapten a las necesidades comunicacionales de las personas -- no adapatar las necesidades comunicacionales de las personas a las tecnolog\xedas.\n\n \nEn general de plataformas que funcionan por internet como Facebook, Twitter, Whatsapp, Google+, el motor de b\xfasqueda de google, Telegram y muchos otros m\xe1s.\n\nEsas plataformas tienen la caracter\xedstica de brindar soluciones comunicacionales r\xe1pidas, c\xf3modas y baratas para sus usuari@s, pero las consecuencias que estos \xfaltimos sufren incluso sin saberlo, tiene efectos que pone seriamente en riesgo su anonimato y derecho a la privacidad.\n\nAdem\xe1s generan una costumbre y tendencia a "sacrificar derechos a cambio de comodidades", esto por que los usuarios acostumbran a permitir que estas plataformas y las compa\xf1\xedas detr\xe1s se aprovechen exageradamente su necesidad de comunicaci\xf3n para --imponer condiciones de uso que requieren que los y las usuarias renuncien a ciertos derechos a cambio.\n\nVamos a ver el caso espec\xedfico de algunas plataformas a continuaci\xf3n.\n\n<span id="facebook"></span>\n \nConocida como la "red social" m\xe1s grande del mundo, tiene acumulada tanta informaci\xf3n sobre sus usuarios que le permite generar ganancias con las que ciertos pa\xedses solo pueden fantasear.\n\nPero el hecho de lucrar no le quita lo \xe9tico, sino la forma en que lo hace. Esto dicen en sus t\xe9rminos de servicio actualizados hasta el 28 de diciembre de 2016 :\n\n1. Recopilamos el contenido y otros datos que proporcionas cuando usas nuestros Servicios\n2. Tambi\xe9n recopilamos el contenido y la informaci\xf3n que otras personas proporcionan cuando usan nuestros Servicios y que puede incluir datos sobre ti.\n3. La informaci\xf3n asociada a tu cuenta se conservar\xe1 hasta que la cuenta se elimine, a menos que ya no necesitemos los datos para proporcionar los productos y servicios.\n4. Cuando eliminas tu cuenta, eliminamos el contenido que publicaste, como tus fotos y actualizaciones de estado\n5. Recuerda que la informaci\xf3n que otras personas compartieron acerca de ti no forma parte de tu cuenta y no se retirar\xe1 cuando la elimines.\n\nEsas son algunas oraciones escritas en los t\xe9rminos de servicio de Facebook, y es lo que Facebook dice hacer con los datos de sus usuarios.\n\nEl punto 1 es habitual en casi cualquier plataforma web, el punto 2 abre ciertas posibilidades, como por ejemplo que alguien que no seas t\xfa comparta supuesta informaci\xf3n relacionada a ti y que podr\xeda comprometerte de alguna manera, aunque eso tambi\xe9n ocurre cuando alguien habla acerca de ti por cualquier otro medio as\xed que no hay cosas demasiado cuestionables all\xed.\n\nEl punto 3 y 4 parece sugerir que al eliminar tu cuenta los datos se borran tambi\xe9n, pero al decir a menos que ya no necesitemos los datos para propocionar productos y servicios hacen entrar en duda sobre si realmente eliminan los datos o s\xf3lo lo hace cuando ya no les sirven.\n\nLos punto 2 y 5 dicen que si alguien que no seas tu comprate informaci\xf3n tuya en Facebook, a partir de ese momento esa informaci\xf3n no es parte de tu cuenta y permanecer\xe1 incluso si eliminas tu cuenta. Y eso a mi parecer es una injusticia por que si por ejemplo algui\xe9n comparte una foto tuya incluso sin tu permiso no puedes eliminarlo por que seg\xfan los t\xe9rminos de servicios esa informaci\xf3n no te pertenece.\n\n \nNo se y es dif\xedcil saberlo, pero seg\xfan los documentos que Edward Snowden filtr\xf3 sobre PRISM, Facebook colaboraba con la NSA y le proporciona datos para espiar las acciones de sus usuarios ([^6], [^2]) facilitando la recolecci\xf3n de su tr\xe1fico al gobierno estado unidense.\n\nSi Facebook hac\xeda eso a espaldas de los usuarios, es fundamentado sospechar que hace otras cosas como vender datos privados de las personas como chats, publicaciones, fotos, etc. a qui\xe9n pueda pagar.\n\n \nA parte para expandir su dominio y incrementar el n\xfamero de usuarios a facebook, este \xfaltimo lleva a cabo campa\xf1as de supuesta beneficencia. Cuando en realidad son estrategias que se aprovechan de la escasez de recusos en ciertos lugares para ofrecerles Facebook "gratis", pero a costa de que comiencen a conocer el internet como sin\xf3nimo de facebook.\n\nHace tiempo hab\xeda una campa\xf1a para informar de los peligros de esta iniciativa, revisa https://wiki.hacklab.org.bo/wiki/Anti_Internet.org_de_Facebook para m\xe1s informaci\xf3n.\n\n<span id="whatsapp"></span>\n \nLa empresa Facebook no hace mucho ha comprado Whatsapp y ahora sus usuarios han crecido mucho (m\xe1s 900 millones de usuarios mensuales seg\xfan wikipedia[^3]). Hay muchas personas que usan esta aplicaci\xf3n para sus comunicaciones m\xe1s intimas pero no consideran la posibilidad de que esta plataforma este vigilando sus acciones y vendiendo/revelando esta informaci\xf3n al igual que Facebook.\n\nAdem\xe1s la aplicaci\xf3n Whatssapp es software privativo, y no se puede estudiarla o saber que realmente hace, ni tampoco mejorarla o adaptarla a ciertas necesidades. \n\n<span id="telegram"></span>\n \nA diferencia de Whatsapp, la aplicaci\xf3n para celulares, para computadores de escritorio , y la aplicaci\xf3n web de telegram es c\xf3digo abierto lo que quiere decir que se la puede estudiar, copiar y mejorar [^4], adem\xe1s de brindar seguridad extra al cifrar las comunicaciones de cliente a servidor y otras utilidades para aumentar la privacidad.\n\nPero telegram almacena los datos en servidores y yo creo con ganas de restarle importancia sobre en qu\xe9 servidores se almacena la informaci\xf3n dice que los almacena en la nube [^5].\n\nDespu\xe9s de leer las preguntas y respuestas frecuentes de telegram no he encontrado menciones concretas de que hacen con las conversaciones y datos que los usuarios suben al usar telegram, en otras palabras el cliente telegram es libre pero telegram no es una red libre. (Si estoy equivocado agradezco te pongas en contacto)\n\nLuego de leer informaci\xf3n como la que propociona este hilo en el foro de trisquel, mi pocisi\xf3n al respecto sobre usar telegram es: Si telegram se resiste a decir que hace con datos m\xedos, entonces yo me resistir\xe9 a usarlo.\n\n<span id="google"></span>\n \nEs sin duda el gigante de la informaci\xf3n en internet, tanto as\xed que hace ver a Facebook, Twitter, Apple y posiblemente hasta Microsoft como diminutos en comparaci\xf3n con la cantidad de datos que Google posee sobre los usuarios.\n\nBasta con mirar la cantidad de servicios que tiene para suponer la cantidad de informaci\xf3n que tiene sobre las personas, podemos citar algunos servicios populares que brinda google:\n\n Motor de b\xfasquedas google.com (la p\xe1gina m\xe1s visitada en internet)\n gmail (el servicio de correo electr\xf3nico m\xe1s usado)\n youtube\n Google+\n Google Drive\n Traductor Google\n streetview\n Muchos otros m\xe1s\n\nCon esos servicios le basta como para convertirse en un gigante en la recolecci\xf3n de datos, es dif\xedcil imaginar la cantidad de informaci\xf3n que solamente youtube, gmail o google.com pueden conseguir sobre las personas en solamente 1 minuto o incluso 1 segundo.\n\nPero la recolecci\xf3n de datos no ser\xeda peligrosa en si misma, una vez m\xe1s seg\xfan los documentos filtrados por Edward Snowden ([^2], [^6], [^7]), google colaboraba con la NSA para revelar informac\xedon confidencial de sus usuarios al facilitar la vigilancia de su tr\xe1fico para el gobierno estado unidense.\n\n<span id="peligro_como_herramientas"></span>\n \nHay personas que opinan que por ejemplo google, facebook y otros medios similares son herramientas efectivas para llegar a la gente y es cierto, ya que la mayor parte de la gente en internet las utiliza.\n\nPero hacerse dependiente de estas herramientas, hace dependiente a qui\xe9n las utiliza para contactarte. Si por ejemplo llevas un proyecto de beneficiencia usando facebook, obligas que los beneficiarios sean usuarios de facebook, de igual manera con google, telegram, etc.\n\nSi bi\xe9n es comprensible que se utilicen estos medios por su gran alcance hacia la gente, si solamente utilizas estos como medios de comunicaci\xf3n para tus actividades, les das mucho poder y en el futuro ser\xe1 cada vez m\xe1s dif\xedcil quit\xe1rselo.\n\nUtiliza alternativas libres y descentralizadas y aseg\xfarate de promocionarlas en los medios de comunicaci\xf3n que utilices, lib\xe9rate de sus cadenas y libera tambi\xe9n a tus seguidores.\n\n<span id="que_hacer"></span>\n \nLo ideal ser\xeda no utilizar los servicios mencionados o los que son similares, pero esto no es una opci\xf3n f\xe1cil especialmente para personas que dependen mucho de estos servicios.\n\nUna estrategia es gradualmente reemplazar estos servicios por alternativas que re\xfanen condiciones donde se respeta la privacidad de los usuarios principalmente y con preferencia se pueda ejercer el derecho a la anonimidad.\n\n<span id="alternativas"></span>\n \nSe pueden econtrar muchas alternativas a los servicios mencionados. Esta es una tabla b\xe1sica:\n\n<table>\n<tr>\n\t<th>\t\t</th>\n\t<th> ALTERNATIVA RECOMENDADA</th>\n</tr>\n<tr>\n\t<td>google.com</td>\n\t<td>\n\t\t<a href="https://duckduckgo.com">duckduckgo.com</a>\n\t\tEste buscador adem\xe1s de ser software libre, no hace seguimiento a los usuarios o las b\xfasquedas que hacen.\n\t</td>\n</tr>\n<tr>\n\t<td> facebook</td>\n\t<td> <a href="https://joindiaspora.com/">diaspora</a> , tiene un uso y apariencia similar a facebook pero es software libre y no es centralizada, cualquier persona puede usarla y cualquiera esta en el derecho de montar un pod (se llaman pods a los servidores que ejecutan disapora y almacenan la informacion de los usuarios que se registran en ellos). Mientras mas pods menos centralizada es la informaci\xf3n y m\xe1s variedad hay.</td>\n</tr>\n\n<tr>\n\t<td> Whatsapp, Telegram </td>\n\t<td>\n\t\t<ul>\n\t\t\t<li><a href="https://kontalk.org/">kontalk</a> Es una aplicaci\xf3n de mensajer\xeda similar a telegram y whatsapp para dispositivos m\xf3vilies. Pero es gestionada y mantenida por comunidades, el servidor y el cliente son software libre. </li>\n\t\t\t<li><a href="https://tox.chat">Tox</a> Una aplicaci\xf3n de mensajer\xeda orientada a brindar privacidad, cifra fuertemente las comunicaciones, es software libre del lado del cliente y servidor.\n\t\t\t</li>\n\t\t</ul>\n\t</td>\n</tr>\n\n<tr>\n\t<td>Twitter</td>\n\t<td>\n\t\t<ul>\n\t\t\t<li><a href="https://es.wikipedia.org/wiki/GNU_Social">GNU Social</a> Similar a Twitter y distribuida.\n\t\t\t</li>\n\t\t</ul>\n\t</td>\n</tr>\n\n</table>\n\n\n[^2]: https://www.theguardian.com/world/2013/jun/06/us-tech-giants-nsa-data\n[^3]: https://es.wikipedia.org/wiki/WhatsApp\n[^4]: https://telegram.org/apps#source-code\n[^5]: https://telegram.org/faq#q-how-is-telegram-different-from-whatsapp\n[^6]: http://www.nytimes.com/2013/06/08/technology/tech-companies-bristling-concede-to-government-surveillance-efforts.html?ref=global-home&_r=1&&pagewanted=all\n[^7]: https://www.wired.com/2013/06/google-uses-secure-ftp-to-feds/\n\n>> Seguir\xe9 actulizando este post a medida que encuentre informaci\xf3n m\xe1s precisa.\n', [u'medios_de_comunicaci\xf3n', u'anonimato', u'reflexi\xf3n'])

]]>
Renovando nodo Chersky parte 2 https://rmgss.net/posts/renovando-nodo-Chersky-parte-2 https://rmgss.net/posts/renovando-nodo-Chersky-parte-2 Sun Mar 31 15:22:11 2019 text/html Rodrigo Garcia LaOtraRed , redes_libres , medios_de_comunicación , reseña (u'En la primera parte de la renovaci\xf3n del nodo Chersky, se vi\xf3 la conexi\xf3n del nodo hacia LaOtraRed e internet.\n\nA continuaci\xf3n veremos sobre los servicios que se ponen a dispocisi\xf3n incluyendo:\n\n Sobre la conexi\xf3n por VPN\n Conexi\xf3n del servidor (Raspberry pi)\n Sobre DNS autoritativo o resolvedor\n Servicios\n - Sitio web (p\xe1gina principal)\n - Radio (streaming de audio)\n - El Botadero (compartici\xf3n de archivos)\n Escalabilidad\n Conclusi\xf3n\n\n \nEl nodo Chersky a 2 de Noviembre de 2018 se conecta a LaOtraRed a trav\xe9s de una VPN (red privada virtual) por internet, esto por que a\xfan no tiene conexi\xf3n directa con otro nodo como modo de conexi\xf3n alternativa. Aun as\xed incluso por VPN el nodo Chersky anuncia sus rutas y hace crecer la red.\n\nLa conexi\xf3n es por una VPN mesh, en pocas palabras una VPN resitente a ca\xeddas usando el protocolo tinc. Las conexiones por VPN no son parte de la troncal de LaOtraRed y s\xf3lo son una forma de conexi\xf3n particular, por eso no tienen soporte oficial.\n\nconexi\xf3n por VPN\n(extra\xeddo de https://laotra.red/meshnet/vpnlor)\n\nEl dibujo anterior ilustra tres tres tipo de nodos, los nodos LOR (nodos dentro la red troncal), Concentradores Meshnet que son servidores en internet conectados por una VPN usando el protocolo tinc, y clientes VPN. El Nodo Chersky entrar\xeda en esta categor\xeda por estar conectado a LaOtraRed (LOR) a trav\xe9s de uno o m\xe1s concentradores meshnet, hay otros nodos que son Meshnet gateways y hacen el puente entre LOR y la VPN Meshnet.\n\nSi quieres m\xe1s informaci\xf3n sobre meshnet ponte en contacto.\n\n \nComo servidor principal para el nodo Chersky estoy usando un reaspberry pi 2, con 16 GB de almacenamiento y casi 1GB de RAM. En este equipo he instalado raspbian 9 y para tenerlo como el servidor principal de mi nodo he definido la direcci\xf3n ipv4 10.64.3.66 e ipv6 fc01:1934:1:200::2 fijas. Las configuraciones necesarias se han hecho en el archivo /etc/network/interfaces:\n\n :::bash\n auto eth0\n allow-hotplug eth0\n # conexion ipv4\n iface eth0 inet static\n address 10.64.3.66 # direccion ipv4 fija\n netmask 255.255.255.240\n gateway 10.64.3.65 # enrutador principal del nodo\n # conexion ipv6\n iface eth0 inet6 static\n address fc01:1934:1:200::2 # direccion ipv6 fija\n netmask 64\n gateway fc01:1934:1:200::1 # enrutador principal del nodo\n\nCon esas configuraciones el servidor ya tiene conexi\xf3n a internet y LaOtraRed por que el enrutador como se define en la primera parte se encarga de dirigir el tr\xe1fico donde corresponde.\n\n \nEn LaOtraRed a esta fecha se usa principalmente el servidor DNS autoritativo en 10.64.64.53 y se tienen registros para resolver el dominio chersky.laotra.red que apunten al servidor del nodo en ipv6 e ipv4.\n\nSe podr\xeda configurar en este nodo un servidor DNS autoritativo o resolvedor para colaborar con LaOtraRed, pero ahora mismo hay pocas conexiones y servicios que requiran este esfuerzo adicional. Entonces a trav\xe9s de los medios de contacto de LOR he solicitado expl\xedcitamente se registren los dominios: chersky.laotra.red botadero.chersky.laotra.red radio.chersky.laotra.red para que apunten al servidor del nodo Chersky.\n\n \nA continuaci\xf3n una breve explicaci\xf3n de los servicios que el nodo Chersky proporciona.\n\n \nEl sitio web es accesible en LOR y generalmente tambi\xe9n desde internet en la direcci\xf3n http://chersky.laotra.red.\n\nNodo Chersky protada\n\nUna p\xe1gina de presentaci\xf3n e informativa para visitantes, es un sitio web est\xe1tico y solamente ha hecho falta instalar el servidor web nginx en el servidor raspberry pi y hacer que apunte al sitio web.\n\nEn la p\xe1gina he puesto un \xedndice de los servicios disponibles y referencias a otros servicios de otros nodos y la p\xe1gina \xedndice de laotra.red (disponible tambi\xe9n en internet).\n\n \nEl servicio de streaming de audio, se ha hecho siguiendo la gu\xeda para montar radios por wifi en la wiki de LaOtraRed.\n\nEn mi caso he montado dos radios, una para audio en formato OGG Vorbis y otra para MP3. La radio es accesible desde LaOtraRed y pronto tambi\xe9n desde internet (se est\xe1 trabajando en el DNS para eso), en las direcciones http://chersky.laotra.red:7501/ogg y http://chersky.laotra.red:7501/mp3 :)\n\n \nTambi\xe9n, he montado el servicio de compratici\xf3n de archivos el botadero en botadero.chersky.nodo.laotra.red. Siempre es \xfatil tener un botadero para compartir archivos sin mayores complicaciones y libremente, estoy mejorando el programa y tengo instalada una versi\xf3n estable cuya sencilla instalaci\xf3n est\xe1 documentada en https://notabug.org/strysg/botadero.\n\nLa puesta a dispocisi\xf3n de este servicio se puede resumir en tres pasos.\n\n \n\t:::bash\n sudo apt install python-virtualenv python-pip python-dev build-essential nginx\n\t\n\n\nCrear un directorio, darle los permisos de un usuario no privilegiado a la aplicaci\xf3n.\n\n\t:::bash\n\tcd /srv\n\tsudo mkdir servicios\n\t# aqui reemplazar usuario por el el nombre de usuario deseado\n\tsudo chown -R usuario:usuario servicios \n\nClonar la aplicaci\xf3n, instalar entorno virtual:\n\n\t:::bash\n git clone https://notabug.org/strysg/botadero\n\tcd botadero\n\t## creando entorno virtual e instalando paquetes python\n\tvirtualenv venv\n\t. venv/bin/activate\n\tpip install Flask uwsgi\n\nAgregar permisos, cambiar el usuario due\xf1o del directorio de la aplicaci\xf3n y agergarlo como parte dle grupo www-data para el servidor web.\n\n\t:::bash\n\tcd /srv/servicios\n\tsudo chown -R www-data:www-data botadero\n\t# agregando el usuario al grupo www-data\n\tsudo gpasswd -a usuario www-data\n\n \nProbar que la aplicaci\xf3n se ejecuta correctamente:\n\n\t:::bash\n\tcd /srv/servicios/botadero\n\tsudo -u www-data venv/bin/uwsgi --ini botadero.ini\n\nHacer que la aplicaci\xf3n se ejecute autom\xe1ticamente al inicio del sistema, por ejemplo con systemd se crea el archivo /etc/systemd/system/botadero.service luego editarlo.\n\t\n [Unit]\n Description=uwsgi deamon\n After=network.target\n \n [Service]\n User=www-data\n Group=www-data\n WorkingDirectory=/srv/servicios/botadero/\n ExecStart=/srv/servicios/botadero/venv/bin/uwsgi --ini botadero.ini\n \n [Install]\n WantedBy=multi-user.target\n\nProbar que se ejecute el servicio con:\n\n\t:::bash\n\tsudo systemctl start botadero.service\n\t# comprobar\n\tsudo systemctl status botadero.service\n\t# si funciona todo bien, habilitar el servicio\n\tsudo systemctl enable botadero.service\n\n \nEn mi caso he creado el archivo /etc/nginx/sites-available/botadero.conf:\n\n server {\n \tlisten 80;\n \tlisten [::]:80;\n \tserver_name botadero.chersky.nodo.laotra.red;\n \tclient_max_body_size 5000M;\n \tlocation / {\n \t\tinclude uwsgi_params;\n \t\tuwsgi_pass unix:/srv/servicios/botadero/botadero.sock;\n \t}\n }\n\nCrear enlace simb\xf3lico.\n\n\t:::bash\n\tsudo ln -s /etc/nginx/sites-available/botadero.conf /etc/nginx/sites-enabled\n\nReiniciar nginx\n\n\t:::bash\n\t# probar configuraciones\n\tsudo nginx -t\n\tsudo service nginx restart\n\nSi todo anda bien al ingresar desde un navegador a botadero.chersky.nodo.laotra.red se puede acceder a la aplicaci\xf3n.\n\n \nUna vez siendo parte de la red, pr\xe1cticamente no hay restricciones para poner servicios o conectarse a m\xe1s nodos. El comportamiento de cada nodo permite y ayuda a que toda la red sea escalable, es decir siga creciendo en conexiones y contenidos. \n\n \nPoniendo a dispocisi\xf3n servicio tras servicio y haciendo que otras personas los usen es como se va llenando de contenido una red, y conectando m\xe1s y m\xe1s nodos es como se extienden las posiblidades, esto funciona de forma similar a internet pero con un enfoque m\xe1s distribuido y orientado primero a contenidos locales, luego a contenidos globales.\n\nSeguir\xe9 mejorando el nodo y los servicios, lo bueno es que al ser parte de la red libre no se require del permiso especial de alguien y las mejoras e innovaci\xf3n que pudiese hacer no est\xe1n condicionadas, me despido con una foto de la Chersky que ya est\xe1 de avanzada edad pero no ha perdido el toque :D\n\nChersky2\n', [u'LaOtraRed', u'redes_libres', u'medios_de_comunicaci\xf3n', u'rese\xf1a'])

]]>
Renovando nodo Chersky parte 1 https://rmgss.net/posts/renovando-nodo-Chersky-parte-1 https://rmgss.net/posts/renovando-nodo-Chersky-parte-1 Sun Mar 31 15:22:11 2019 text/html Rodrigo Garcia LaOtraRed , redes_libres , medios_de_comunicación , reseña (u'Como participante voluntario en LaOtraRed en La Paz (LOR), fue el turno de mi nodo de actualizarse y en este post voy a mostrar el nuevo nodo y c\xf3mo ha cambiado respecto a la primera versi\xf3n del Nodo Chersky.\n\nEsta primera parte abarca una descripci\xf3n y detalle del dise\xf1o de infraestructura de red y configuraci\xf3n. La segunda parte describir\xe1 mejor el montado de servicios incluidos DNS, servidor web, streaming de audio y otros (a\xfan no est\xe1 lista).\n\n \n Razones\n Definiendo la infraestructura de red\n Configuraciones\n Interfaces de Red\n Conexiones inal\xe1mbricas\n Protocolo de enrutamiento (conexi\xf3n a LOR)\n firewall\n DNS\n Pruebas de conexi\xf3n\n Conclusi\xf3n preliminar\n\n \nLa red libre ha estado evolucionando, por ejemplo se ha cambiado el protocolo de enrutamiento de babel a bmx7 y se han definido reglas de conexi\xf3n, objetivos y recomendaciones, que se pueden revisar en la primera versi\xf3n estable (1VE).\n\nLa anterior estructura del nodo Chersky no contaba con conexi\xf3n a internet y en este nuevo dise\xf1o se aprovecha esta conexi\xf3n para tambi\xe9n conectarse a LaOtraRed a trav\xe9s de una vpn privada ya que mi nodo a\xfan no tiene contacto f\xedsico directo con otros nodos. Principalmente en esta actualizaci\xf3n se utiliza IPv6 para el enrutamiento hacia otros nodos.\n\n \nNodo Chersky 2018 infraestructura --> ver tama\xf1o original\n\nSon b\xe1sicamente cinco componentes principales:\n\n1. Enrutador maestro (TL-WDR3600)\n2. Enrutador/m\xf3dem a internet\n3. Servidor p\xfablico\n4. Equipos "clientes" que consumen servicios desde la red interna.\n5. Conexi\xf3n a la red troncal de LaOtraRed v\xeda VPN.\n\nEste nodo tiene asignado el bloque IPv4 10.64.3.64/27 (un total de hasta 30 direcciones IP) y el bloque IPv6 fc01:1934:1:0200::/56 (millones de ipv6). (ver registro de direcciones)\n\nA diferencia de la primera implementaci\xf3n no hay subredes separadas para equipos visibles al resto de LOR y equipos protegidos dentro de la red privada. La nueva estrategia para aislar intentos de conexi\xf3n desde nodos externos hacia equipos dentro mi red privada, es bloquear todo el tr\xe1fico entrante.\n\nSin embargo, como quiero poner al menos un servidor disponible para que el resto de LOR, lo que tengo que hacer es agregar reglas en el firewall del enrutador para permitir acceso hacia este equipo. Este comportamiento se puede ilustrar as\xed:\n\nNodo Chersky 2018 intentos conexi\xf3n\n\nReplicando este comportamiento en el resto de LOR, se consigue una red distribuida con equipos consumidores y equipos servidores.\n\n \nTodas las configuraciones se hacen en el enrutador principal del nodo, en mi caso el TL-WDR3600. Como es t\xedpico, primero le instal\xe9 la \xfaltima versi\xf3n de openwrt (ver c\xf3mo). Luego pas\xe9 a configurarlo manualmente en el siguiente orden; Interfaces de red, conexiones inal\xe1mbricas, protocolo de enrutamiento / conexi\xf3n a LOR, firewall, dns y conexi\xf3n VPN.\n\nTodos los pasos salvo la conexi\xf3n VPN ser\xe1n similares para cualquier nodo en LaOtraRed y pronto automatizaremos este proceso para unirse a la red libre en unos cuantos clicks ;-)\n\n \nHe seguido la gu\xeda descrita en la wiki de LOR en https://wiki.lapaz.laotrared.net/configuraciones/routerprincipal#configuracion_de_red haciendo unas cuantas modificaciones por mi conveniencia.\n\nEl archivo /etc/config/network ha quedado m\xe1s o menos as\xed:\n\n\t:::bash\n # Interfaz principal\n config interface \'lan\'\n option type \'bridge\'\n option proto \'static\'\n option ifname \'eth0.1\'\n option ipaddr \'10.64.3.65\' # direccion ipv4 del router\n option netmask \'255.255.255.224\' # mascara ipv4\n option ip6addr \'fc01:1934:1:200::1/64\' # direccion ipv6 del router con mascara\n \n # Interfaz de conexi\xf3n a internet (propia de cada nodo)\n config interface \'wan\'\n # ...\n\n # Se define la interfaz bmx7 para la conexi\xf3n con el resto de los nodos\n # dentro LaOtraRed.\n config interface \'bmx7\'\n option type \'bridge\'\n option proto \'static\'\n\nLa configuraci\xf3n se simplifica a dos interfaces lan y bmx7, la primera para conectar los equipos internos de mi red y la segunda para conectarme al resto de LaOtraRed.\n\n \nEste paso es opcional pero como utilizo WiFi en mi nodo, s\xf3lo me ha hecho falta definir una conexi\xf3n wifi com\xfan conectada a la red lan en modo maestro o tambi\xe9n llamado modo AP.\n\nEsta configuraci\xf3n es m\xe1s sencilla hacerla desde la interfaz gr\xe1fica de openwrt (LUCI).\n\n \nDesde 2018 utilizamos el protocolo bmx7 para conectarse a la Red Troncal. Si quieres m\xe1s informaci\xf3n de c\xf3mo funciona este protocolo y una configuraci\xf3n b\xe1sica puedes revisar un post anterior sobre unas pruebas que hice con bmx7.\n\nEs necesario primero instalar bmx7 y las extensiones que utilizamos en LOR, se logra ejecutando en el enrutador:\n\n opkg update\n opkg install bmx7 bmx7-uci-config bmx7-iwinfo bmx7-json bmx7-table bmx7-topology bmx7-tun \n\nLuego editando el archivo /etc/config/bmx7 siguiendo estrictamente la gu\xeda descrita en la wiki https://wiki.lapaz.laotrared.net/configuraciones/routerprincipal#configuracion_de_la_sesion_de_routing, el archivo queda mas o menos as\xed:\n\n :::bash\n config \'bmx7\' \'general\'\n # anuncios uHNAs\n config \'unicastHna\' \'miPrefijoGlobal\'\n \toption \'unicastHna\' \'fc01:1934:1:0200::/56\'\n # anuncios de tuneles\n config \'tunDev\' defaultbmx7\n \toption \'tunDev\' \'defaultbmx7\'\n \toption \'tun4Address\' \'10.64.3.65/27\'\n \toption \'tun6Address\' \'fc01:1934:1:0200::1/128\'\n # otras configs mostradas en la wiki\n # ...\n\n # plugins necesarios\n config \'plugin\'\n option \'plugin\' \'bmx7_tun.so\'\n config plugin\n \toption plugin \'bmx7_config.so\'\n config plugin\n \toption plugin \'bmx7_json.so\'\n config plugin\n \toption plugin \'bmx7_topology.so\'\n\n \nDe igual manera he seguido al pie de la letra la gu\xeda de la wiki https://wiki.lapaz.laotrared.net/configuraciones/routerprincipal#configuracion_del_firewall, salvo unas cuantas modificaciones en el archivo /etc/config/firewall.\n\n :::bash\n config zone\n option input \'ACCEPT\'\n option forward \'REJECT\'\n option output \'ACCEPT\'\n option name \'laotrared\'\n option network \'bmx7\'\n list device \'X7+\'\n # otras configuraciones descritas en la wiki\n # ...\n\t\n # permitir el acceso hacia el servidor p\xfablico via ipv4\n config rule\n \toption target \'ACCEPT\'\n \toption src \'laotrared\'\n \toption name \'ServerPiPublico\'\n \toption dest_ip \'10.64.3.66\' # direccion que he asignado al servidor\n \toption proto \'all\'\n \toption dest \'lan\'\n # permitir acceso hacia mi servidor via ipv6\n config rule\n \toption enabled \'1\'\n \toption target \'ACCEPT\'\n \toption src \'laotrared\'\n \toption name \'ServerPiPublicoIpv6\'\n \toption family \'ipv6\'\n \toption proto \'all\'\n \toption dest \'lan\'\n \toption dest_ip \'fc01:1934:1:0200::2\' # ipv6 del servidor\n\nVale la pena recalcar que en las configuraciones mostradas en la wiki el tr\xe1fico recibido en la zona laotrared, se est\xe1 refiriendo al tr\xe1fico recibido desde otros nodos de LaOtraRed y el tr\xe1fico que sale a trav\xe9s de la zona laotrared va dirigido hacia otros nodos de LaOtraRed.\n\n \nEsta configuraci\xf3n permite que yo pueda acceder a servicios dentro de LaOtraRed de manera m\xe1s "humana" por ejemplo escribiendo en un navegador chersky.lor redirigir\xe1 a 10.64.3.66 que es el servidor p\xfablico del nodo chersky, de igual manera para cualquier dominio .lor utilizar\xe9 el servidor dns que tenemos en LaOtraRed.\n\nOtra vez siguiendo la wiki :) https://wiki.lapaz.laotrared.net/configuraciones/routerprincipal#dns el archivo /etc/config/dhcp.\n\nEl servicio DNS en 10.64.64.53 redirije peticiones hechas a chersky.lor hacia el servidor que he abierto como p\xfablico, sin embargo para no depender demasiado del servidor 10.64.64.53 (servidor DNS de LOR), se podr\xeda montar un servidor DNS autoritativo en el nodo Chersky que ayude a resolver cualquier dominio .chersky.lor, por ejemplo radio.chersky.lor botadero.chersky.lor chat.chersky.lor *.chersky.laotra.red, etc. Pero ese trabajo ir\xe1 en la segunda parte de esta rese\xf1a acompa\xf1ado de algunos servicios y configuraci\xf3n del servidor de mi nodo para el resto de la red.\n\n \nLo m\xe1s importante es \u2012asegurar la conexi\xf3n hacia la red distribuida\u2012 y de esto se encarga el protocolo bmx7. Para esta tarea podemos usar dos herramientas, la primera es usando bmx7 que est\xe1 instalado en el enrutador y hacer consultas directas al demonio bmx7.\n\nIngresamos al enrutador por ssh y como usuario root ejecutamos bmx7 -c show=originators, que muestra los otros nodos en la red que se est\xe1n conectando con nosotros, ah\xed deber\xedamos ver los nombres de elos otros nodos junto con una direcci\xf3n ipv6 que el protocolo bmx7 usa para identificarlos de manera \xfanica, la interfaz a trav\xe9s la cual nos conectamos y otros detalles.\n\nLa segunda forma es desde la interfaz gr\xe1fica LUCI, ingresando a Network -&gt; BMX7 -&gt; Nodes que muestra en mi caso:\n\t\nNodo Chersky 2018 rutas bmx7\n\nMuestra que existe conexi\xf3n hacia muchos otros nodos de la red :D\n\nPara comprobar que existe conexi\xf3n hacia y desde los otros nodos de LaOtraRed se pueden utilizar herramientas como traceroute ping ping6 dirigidos hacia los dem\xe1s nodos de la red por ejemplo al servidor DNS 10.64.64.53.\n\nFinalmente para deber\xedamos pedirle a otro nodo que compruebe la conexi\xf3n hacia nuestro nodo y en mi caso al servidor que he conectado. Por ejemplo que otro nodo pruebe ping 10.64.3.66 que devuelve:\n\n PING 10.64.3.66 (10.64.3.66) 56(84) bytes of data.\n 64 bytes from 10.64.3.66: icmp_seq=1 ttl=61 time=27.6 ms\n 64 bytes from 10.64.3.66: icmp_seq=2 ttl=61 time=28.3 ms\n 64 bytes from 10.64.3.66: icmp_seq=3 ttl=61 time=27.5 ms\n\nDe igual forma ping6 hacia fc01:1934:1:200::2 que es la direcci\xf3n IPv6 del servidor del nodo.\n\nUn resultado m\xe1s detallado lo podemos ver pidiendole a un nodo que ejecute traceroute6 fc01:1934:1:200::2 que deber\xeda devolver algo as\xed:\n\nNodo Chersky 2018 rutas bmx7\n\n \nCon los cambios hechos, el nodo Chersky aprovecha mejor el principio de comunicaci\xf3n distriuida, usa IPv6 e IPv4 seg\xfan la necesidad de conexi\xf3n y la red es m\xe1s flexible, entendible, robusta y segura. La mejor parte es que est\xe1 conectado a LaOtraRed y colabora con su crecimiento.\n\n----\nEn la segunda parte veremos las configuraciones de servicios que brinda el nodo Chersky, un poco sobre la conexi\xf3n por VPN y algunos detalles adicionales.\n\nEspero tenerla lista lo antes posible, hasta entonces me despido agradeciendo por leer el post :-)\n', [u'LaOtraRed', u'redes_libres', u'medios_de_comunicaci\xf3n', u'rese\xf1a'])

]]>
Probando mbedtls https://rmgss.net/posts/probando-mbedtls https://rmgss.net/posts/probando-mbedtls Sun Mar 31 15:22:11 2019 text/html Rodrigo Garcia software , tutoriales (u'Una implementaci\xf3n SSL/TLS libre, mbedtls es una biblioteca que re\xfane una suite de herramientas para cifrado. Est\xe1 hecha de tal forma que se puede portar f\xe1cilmente a dispositivos embebidos como un barato enrutador con GNU/Linux.\n\n \nTransport Security Layer (TLS) es un conjunto de protocolos que no solamente permiten cifrar comunicaciones, tambi\xe9n permiten autenticarlas, veamos un poco de la necesidad de autenticaci\xf3n adem\xe1s del cifrado.\n\nde A a B\n\nEn el caso 1 de arriba se ve como A env\xeda a B un mensaje "Hola", pero hay un esp\xeda que est\xe1 atento a lo que A y B se env\xedan y el esp\xeda tamb\xeden recibe "Hola".\n\nEn el caso 2 A toma una medida de seguridad y cifra el mismo mensaje "Hola" con alg\xfan algoritmo de cifrado y el resultado es "-, ]85" y suponiendo que B conoce el algoritmo que ha usado A, B podr\xe1 descifrarlo y obtener "Hola".\n\nPero "-, ]85" es el resultado de usar un algortmo "d\xe9bil" dada su simplicidad ya que el espia con algo de conocimiento en cifrado puede con algunos cientos o miles de intentos podr\xeda descubrir el algoritmo simple que A us\xf3 para cifrar "Hola". En el siguiente caso A y B deciden usar un mejor m\xe9todo de cifrado:\n\nde A a B\n\nAhora A ha cifrado "Hola" usando una clave en com\xfan que comparte con B. El mensaje resultante es:\n\n jA0EAwMCj9bE0UxtMdtgyR4rOyDRi1IA4fc7cP/VeSNgO1aVDqsV4H5amv7ZFjI=\n\t=z1GM\n\nB usa la clave y el algoritmo que ha usado A para descifrar este mensaje como "Hola", suponiendo que el espia conce el algoritmo que A, B han usado, a\xfan necesita saber la clave que han usado o al espia le ser\xe1 pr\xe1cticamente imposible descifrar el mensaje correctamente.\n\nEste cifrado es fuerte en tanto el espia no conozca la clave en com\xfan, pero aqu\xed estamos suponiendo que A y B ambos ya cuentan con la clave en com\xfan. Pero este no siempre es el caso.\n\nPor ejemplo imaginemos que A y B nunca antes se han comunicado y necesitan comunicarse de manera segura desde la primera vez. Para ello, necesitan definir el algoritmo que usar\xe1n e intercambiar una clave en com\xfan antes de comenzar a comunicarse de manera segura.\n\nAll\xed es donde TLS entra en juego, agrega una capa de seguridad permitiendo a cualquier A o B a usar criptograf\xeda asim\xe9trica y protocolos para intercambiar estas estas claves de manera segura.\n\n \nDe manera muy resumida con la criptograf\xeda asim\xe9trica cualquier A, B necesitan un par de claves; una clave privada y una p\xfablica, estas dos claves est\xe1n matem\xe1ticamente relacionadas y se consigue:\n\n Cuando se cifra con la llave privada, s\xf3lo se puede descifrar con la clave p\xfablica.\n Cuando se cifra con la clave p\xfablica, s\xf3lo se puede descifrar con la clave privada.\n\nLa clave p\xfablica est\xe1 pensada para que A la comprata con cualquier otro B, C, etc. y as\xed estos \xfaltimos puedan descifrar los mensajes que A cifre usando su llave privada. De igual manera si B usa la clave p\xfablica de A para enviarle un mensaje a A, s\xf3lo A podr\xe1 descifrar este mensaje por que se supone que A y solamente A posee su clave privada. La clave privada no se comparte con nadie.\n\nEn tanto A y B intercambien claves p\xfablicas y no revelen sus claves privadas, podr\xe1n comunicarse de manera segura. Un ejemplo de programa que permite usar este tipo de cifrado es GNUpg.\n\n \nSuponiendo que el espia no puede acceder a las claves de A o B, a\xfan puede enga\xf1ar a B fingiendo que es A:\n\nde A a B\n\nEn este caso el espia le dice a B que es A y le pasa una clave p\xfablica, B no tiene forma de comprobar que en realidad un espia esta intentando hacerse pasar por A y aceptar\xe1 la clave que se le pase, adem\xe1s confiar\xe1 en esta clave para comunicarse con A.\n\nPara evitar esto se usan certificados X.509, donde se agrega una medida de seguridad para evitar que un espia suplante a alg\xfan A. Se usan certificados firmados por autoridades certificadoras de confianza que aseguran a que A es quien dice ser. De este modo B primero conf\xeda en una autoridad certificadora CA. Cuando alguien le dice a B: "yo soy A, toma mi clave p\xfablica". B no confiar\xe1 ciegamente en esto, primero le pedir\xe1 a CA que compruebe que la clave que se le ha pasado a B, realmente le pertenece a A.\n\nSi CA lo comprueba, B confiar\xe1 plenamente en esa clave p\xfablica y a partir de ese momento la asociar\xe1 a A. Entonces el espia no podr\xe1 suplantar de nuevo a A, precisamente TLS implementa avanzados protocolos para asegurar que esto funcione correctamente.\n\n----\n\nPor eso todas las p\xe1ginas web actualizadas y que cifran su contenido, usan TLS y se identifican con https, as\xed los navegadores web y la p\xe1gina web intercambian contenido con un cifrado fuerte, y con las claves autenticadas de manera segura. Por defecto los nevegadores web, conf\xedan en un n\xfamero de autoridades certificadoras en internet.\n\n \nA diferencia de openssl que es una implementaci\xf3n muy conocida de TLS, mbedtls se centra en brindar una manera m\xe1s sencilla de usar TLS o su conjunto de herramientas de cifrado. Adem\xe1s mbedtls se puede f\xe1cilmente usar en dispositivos embebidos con capacidades computacionales reducidas, para lo que sigue de este post mostrar\xe9 una forma de construir mbedtls para que funcione en un enrutador TL-WDR3600 (aunque podr\xeda hacerse funcionar en un m\xe1s barato como el tl-mr3020), desde una distribuci\xf3n GNU/Linux.\n\nEstamos asumiendo que el enrutador tiene instalado firmware libre como lede, openwrt o librecmc.\n\n \nUna vez descargamos el c\xf3digo fuente desde https://tls.mbed.org/download, abrimos el archivo README.md, veremos que este requiere de herramienetas de construcci\xf3n como make o cmake. Para nuestro caso usaremos solamente make, entonces instalaremos los paquetes; gcc, build-essential, make. En nuestra distribuci\xf3n preferida GNU/Linux.\n\nLuego vamos al directorio donde esta mbedtls y ejecutamos:\n\n make\n\nDeber\xedamos estar atentos al procedimiento y si este termina satisfactoriamente, deber\xedamos poder probar por ejemplo cifrando y descifrando con rsa. Se ha creado una una carpeta programs/pkey/ y all\xed unos ejecutables que son programas de prueba:\n\n cd programs/pkey\n\t./rsa_encrypt "Hola"\n\nCifrar\xe1 el mensaje "Hola" con el par de claves de prueba que se crear\xf3n al hacer make; rsa_priv.txt y rsa_pub.txt y lo guarda en result-enc.txt, para descifrarlo se usa.\n\n ./rsa_decrypt\n\nY si vemos "Hola", significa que se ha descifrado correctamente.\n\n \nVamos a utilizar el SDK Software Development Kit de lede o librecmc para construir programas para enrutadores como el TL-WDR3600, (revisa este post para ver como construir el SDK ).\n\nUna vez tengamos el SDK, al llamar a make tenemos que usar el compilador gcc para la arquitectura mips_74kc que es la arquitectura del TL-WDR3600, en lugar del gcc instalado en el sistema desde el cual compilaremos.\n\nPara simplificar la compilaci\xf3n cruzada, puedes utilizar este script que llamaremos set-up.sh. Antes de ver el script deber\xedamos hacer un enlace simb\xf3lico del SDK que usaremos en la misma ruta donde descomprimimos mbedtls, lo podemos hacer con:\n\n ln --symbolic /ruta/absoluta/hacia/el/sdk/ SDK\n\nPor ejemplo:\n\n ln --symbolic /home/alguien/lede-sdk-ar71xx-generic_gcc-5.4.0_musl.Linux-i686 SDK\n\nA continuaci\xf3n el script set-up.sh.\n\n :::bash\n #!/bin/bash\n\t\n # Para compilar:\n # \n # ./set-up.sh build\n # ./set-up.sh clean\n \n # para copiarlo directamente al enrutador con <IP> dada (lo copia en /tmp/)\n #\n # ./set-up.sh export <IP>\n \n OP1=$1\n OP2=$2\n \n ayuda()\n {\n echo "Uso:"\n echo "Construye usando un cross compiler mips-openwrt-linux-musl-gcc:"\n echo " ./set-up.sh build"\n echo "Equivalente a \'make clean\':"\n echo " ./set-up.sh clean"\n echo "Construye y copia al enrutador con IP (usa root@IP y copia en /tmp/):"\n echo " ./set-up.sh export IP"\n echo "Ejemplo:"\n echo " ./set-up.sh export 192.168.1.1"\n echo ""\n echo "NOTA Antes de ejecutar:"\n echo " La ruta hacia el SDK de LEDE debe estar en este mismo directorio"\n echo " puede ser con un enlace simbolico con el nombre \'SDK\'"\n echo " ln --symbolic /ruta/absoluta/hacia/el/sdk/ SDK"\n }\n \n #### \n # setup inicial\n setup()\n {\n # agregando al path\n if ! echo $PATH | grep "mips-openwrt-linux-gcc-5.4.0/bin" \n then\n \t RUTA_SDK=$(readlink SDK)\n \t PATH=$PATH:"$RUTA_SDK"staging_dir/toolchain-mips_24kc_gcc-5.4.0_musl/bin/\n \t export PATH\n fi\n \n # agregando staging dir\n if ! echo $STAGING_DIR | grep "lede-sdk-ar71xx-generic_gcc-5.4.0_musl.Linux-i686/staging_dir"\n then\n \t RUTA_SDK=$(readlink SDK)\n \t STAGING_DIR="$RUTA_SDK"staging_dir/toolchain-mips_24kc_gcc-5.4.0_musl/bin/\n \t export STAGING_DIR\n fi\n echo\n echo "PATH:$PATH"\n echo "STAGING_DIR:$STAGING_DIR"\n }\n ####\n \n build()\n {\n echo "Construyendo..."\n setup\n echo\n echo "CROSS COMPILER:"\n mips-openwrt-linux-musl-gcc --version\n \n # para construir mbedtls (ver README.md)\n #make CC=mips-openwrt-linux-musl-gcc LD=mips-openwrt-linux-ld\n \n # construir usando archivo de configuracion personalizado\n echo ":-:-:"\n echo "Construyendo usando archivo de configuracion distinto al por defecto"\n echo "config-mini-tls1_1.h"\n make CC=mips-openwrt-linux-musl-gcc \\n\t\t LD=mips-openwrt-linux-ld \\n\t\t\t CFLAGS="-I$PWD/configs -DMBEDTLS_CONFIG_FILE=\'<config-mini-tls1_1.h>\'" \\n SHARED=TRUE \n \n echo "Hecho"\n }\n \n clean()\n {\n echo "Limpiando..."\n setup\n make clean\n }\n \n exportar()\n {\n "Exportando..."\n build\n scp -r programs/pkey root@$OP2:/tmp/\n }\n \n ####\n # opciones\n if [ -z "$OP1" ]\n then\n ayuda\n exit 2\n fi\n \n if [ $OP1 == "build" ]\n then\n build\n exit 0\n fi\n \n if [ $OP1 == "clean" ]\n then\n clean\n exit 0\n fi\n \n if [ $OP1 == "export" ]\n then\n R=$(echo $OP2 | grep "[a-z,A-Z]")\n if [ -z $OP2 ] || [ $R != "" ]\n then\n \tayuda\n \texit 2\n else\n \texportar\n \texit 0\n fi\n fi\n \n ayuda\n exit 2\n\nPara que sea m\xe1s c\xf3modo manejarlo le daremos permisos de ejecuci\xf3n con chmod +x set-up.sh\n\nEl script se encarga de primero agregar al PATH el compilador del SDK de lede y lo exporta. Al hacer ./set-up.sh build se llamar\xe1 al Makefile de mbedtls pero pas\xe1ndole tres opciones extra para que realice la compilaci\xf3n cruzada correctamente:\n\n :::bash\n make CC=mips-openwrt-linux-musl-gcc LD=mips-openwrt-linux-ld CFLAGS="-I$PWD/configs -DMBEDTLS_CONFIG_FILE=\'<config-mini-tls1_1.h>\'" SHARED=TRUE \n\nAqu\xed, CC=mips-openwrt-linux-musl-gcc indica a make que use el compilador mips-openwrt-linux-musl-gcc en lugar de gcc instalado en el S.O. De igual forma con el enlazador al modificar LD.\n\nComo se indica en la documentaci\xf3n (ver README en configs/README.txt de mbedtls) usaremos una configuraci\xf3n m\xednima para compilar mbedtls sin por ejemplo el m\xf3dulo de entrop\xeda, y se usar\xe1 el archivo de configuraci\xf3n config-mini-tls1_1.h, esto se logra agregando CFLAGS=&#34;-I$PWD/configs -DMBEDTLS_CONFIG_FILE=\&#39;&lt;config-mini-tls1_1.h&gt;\&#39;&#34; al llamar a make. Finalmente SHARED=TRUE hace que se construyan tamb\xeden bibliotecas compartidas (ver m\xe1s adelante)\n\nAs\xed es como el script nos permite hacer el cross compiling (compilaci\xf3n cruzada) y una vez termina podemos probar si esto ha funcionado copiando la carpeta programs/pkey/ en el enrutador manualmente o mediante el script y su opci\xf3n "export".\n\nPara poder probarlo, deber\xedamos tener instalado en el enrutador la biblioteca mbedtls, en lede se hace con:\n\n opkg install libmbedtls\n\nSi no logras instalar v\xeda opkg, el siguiente procedimiento podr\xeda funcionar (no lo he probado):\n\n1. De la carpeta library/ en el directorio donde construimos mbedtls, copiar al directorio /usr/lib/ del enrutador los archivos; libmbedcrypto.so, libmbedtls.so, libmbedx509.so. Estos son las bibliotecas compartidas que make ha construido al definir SHARED=TRUE en el script.\n2. Crear enlaces simb\xf3licos en el enrutador, para que el programa de cifrado sepa que la biblioteca mbedtls esta instalada:\n\n cd /usr/lib/\n\t\t ln -s $PWD/libmbedcrypto.so libmbedcrypto.so.0\n\t\t ln -s $PWD/libmbedtls.so libmbedtls.so.10\n\t\t ln -s $PWD/libmbedx509.so libmbedx509.so.0\n\n2. Copiar la carpeta programs/pkey que se construyer\xf3n con los programas de prueba, a /tmp/ del enrutador.\n\nLuego en el enrutador en el directorio /tmp/programs/pkey, deber\xedamos poder ejecutar los programas para cifrar y descifrar con rsa como probamos antes, si todo funciona bien ya podemos jugar y usar la bilioteca mbedtls para hacer/modificar programas y que se puedan ejecutar en nuestros enrutadores :)\n\n \nComo mbedtls es software libre, podemos modificar el c\xf3digo en cualquier momento y probar los resultados de las modificaciones que hagamos, es cuesti\xf3n de estudiar el c\xf3digo y aprender a dominarlo para hacer cosas divertidas.\n\nEspero esta gu\xeda te haya servido, ponte en contacto para consultas o correcciones.\n\n\n\n\n\n\n\n\n\n\n\n', [u'software', u'tutoriales'])

]]>
Probando bmx7 https://rmgss.net/posts/probando-bmx7 https://rmgss.net/posts/probando-bmx7 Sun Mar 31 15:22:11 2019 text/html Rodrigo Garcia software , tutoriales , redes_libres (u'En este post compartir\xe9 unas pruebas y peque\xf1a gu\xeda del protocolo de enrutamiento Bmx7 para una red en malla.\n\nPara construir una red en malla aut\xf3noma hace falta uno o m\xe1s protocolo de enrutamiento, donde cada nodo en la red se hace descubrir, descubre a otros nodos, avisa a sus vecinos a quienes ha descubierto y tambi\xe9n ayuda a llevar informaci\xf3n de un nodo a otro a trav\xe9s de el mismo.\n\nExisten varios protocolos de enrutamiento para redes mesh como Batman-adv, Babel, OLSR, bmx6, etc. y en el proyecto LaOtraRed hemos estado probando varios y buscando el protocolo que m\xe1s se ajuste a las necesidades de una red libre comunitaria y de control colectivo. En ese af\xe1n hemos estado trabajando sobre una primera versi\xf3n estable o 1VE donde hemos definido el protocolo bmx7 como el principal.\n\n \nEste protocolo es una versi\xf3n m\xe1s segura de bmx6. Bmx6 siendo una modificaci\xf3n de Batman-adv, est\xe1 enfocado a redes en malla (que es lo mismo que decir redes mesh) pero le agrega soporte para IPv6, mejora la difusi\xf3n del estado de cada nodo, etc [1] .\n\nBmx7 adem\xe1s le agrega seguridad usando SEMTOR lo que hace que los anuncios de rutas est\xe9n firmados criptogr\xe1ficamente [2] .\n\nA pesar de lo complejo que se ve el protocolo, configurar enrutadores para que lo utilicen es sencillo una vez se consigue poner el software necesario en el equipo.\n\n \nEscenario de prueba\n\nSon b\xe1sicamente dos nodos, el nodo A y el nodo B se descubren y establecen comunicaci\xf3n con la ayuda de bmx7. El nodo A tiene la direcci\xf3n IPv6: fa99:1:a::a y tambi\xe9n IPv4: 10.64.1.1, de manera similar el nodo B tiene sus propias direcciones IP.\n\nEn el escenario descrito A y B anuncian tambi\xe9n bloques de red, por ejemplo A dir\xe1 que es acreedor del bloque IPv6 fa99:1:a::/48 directamente y tambi\xe9n anuncia un bloque IPv4: 10.64.1.1/24 a trav\xe9s de un t\xfanel, la manera de hacer anuncios var\xeda en bmx7 y veremos eso m\xe1s adelante.\n\nLa idea de este escenario es que se puede hacer que un nodo le diga a toda la red y m\xe1s espec\xedficamente a sus vecinos, que tiene conexi\xf3n a un grupo de direcciones IP (bloque IP) y que a trav\xe9s de si mismo los dem\xe1s nodos de la red pueden conectarse a los dispositivos sean cuales fueren dentro de los bloques que anuncia.\n\n \nVamos a configurar paso a paso ambos enrutadores, para esta prueba he usado dos modelos de enrutadores baratos, el TP-link mr3040 y mr3020.\n\nNormalmente bastar\xeda con descargar la \xfaltima versi\xf3n estable del sistema operativo openwrt o lede para estos enrutadores desde https://downloads.lede-project.org/releases/17.01.4/targets/ar71xx/generic/ y buscando las imagenes .factory.bin o .sysupgrade.bin para el mr3020 y 3040 respectivamente. Luego instalar los paquetes necesarios con:\n\n :::bash\n opkg install bmx7 libmbedtls bmx7 bmx7-uci-config \\n bmx7-iwinfo bmx7-tun bmx7-table kmod-iptunnel6 \\n kmod-ip6-tunnel kmod-iptunnel4 kmod-iptunnel\n\nLas im\xe1genes de firmware por defecto en el repositorio de paquetes de lede u openwrt vienen con la interfaz luci para administrar el enrutador.\n\nDebido a que bmx7 usa criptograf\xeda para firmar paquetes y verificar autenticidad, requiere la biblioteca mbedtls instalada en el sistema, como los enrutadores mr3020 y 3040 s\xf3lo tienen 4MB de memoria FLASH, si se incluye el luci no hay cabida para bmx7. En modelos de enrtuadores con 8 MB de FLASH no se tiene esta limitaci\xf3n.\n\nUna soluci\xf3n ser\xeda desinstalar completamente luci pero no he encontrado una forma sencilla de hacerlo, por lo que se puede construir im\xe1genes de firmware usando buildroot o image-generator, en el post construir im\xe1genes de firmware para enrutadores con build root puedes ver c\xf3mo hacerlo.\n\nPor ejemplo usando el image-generator se puede construir im\xe1genes de firmware sin luci y con las dependencias necesarias para bmx7 con:\n\n :::bash\n make image PACKAGES="-libiwinfo-lua -liblua -libubus-lua -libuci-lua \\n -lua -luci -luci-app-firewall -luci-base -luci-lib-ip -luci-lib-nixio\\n -luci-mod-admin-full -luci-proto-ipv6 -luci-proto-ppp \\n -luci-theme-bootstrap -uhttpd -uhttpd-mod-ubus \\n bmx7 bmx7-iwinfo kmod-ip6-tunnel kmod-iptunnel6 kmod-iptunnel4 \\n kmod-iptunnel bmx7-json bmx7-sms bmx7-table bmx7-topology bmx7-tun\\n bmx7-uci-config libmbedtls"\n\n--> Tambi\xe9n puedes descargar las im\xe1genes de firmware con estas caracter\xedsticas de mi repositorio de im\xe1genes de firmware de openwrt (este repositorio cambia y no esta garantizado que siempre vaya a funcionar):\n\n* https://openwrt.rmgss.net/targets/ar71xx/generic/\n\nLuego instalar las im\xe1genes de firmware correspondientes en los enrutadores. Si nunca lo has hecho revisa esta gu\xeda.\n\n \nPrimero el archivo de interfaces de red para el Nodo A.\n\n \n\t:::bash\n config interface \'loopback\'\n \toption ifname \'lo\'\n \toption proto \'static\'\n \toption ipaddr \'127.0.0.1\'\n \toption netmask \'255.0.0.0\'\n \n config globals \'globals\'\n \t# mejor no cambiar esto en el enrutador\n \toption ula_prefix \'fd91:9cd6:f633::/48\'\n \n config interface \'lan\'\n \toption proto \'static\'\n \toption type \'bridge\'\n \toption ipaddr \'10.64.1.1\'\n \toption netmask \'255.255.255.0\'\n \toption ifname \'eth0\'\n \n config interface \'mesh\'\n \toption proto \'static\'\n \toption ip6addr \'fa99:1:a::a\'\n\nCon lo anterior configuramos dos interfaces, lan en IPv4 y mesh en IPv6.\n\n \n\t:::bash\n config wifi-device \'radio0\'\n \toption type \'mac80211\'\n \toption hwmode \'11g\'\n \toption path \'platform/ar933x_wmac\'\n \toption htmode \'HT20\'\n \toption channel \'2\'\n \toption country \'BO\'\n \toption txpower \'18\'\n \toption disabled \'0\'\n \n config wifi-iface\n \toption device \'radio0\'\n \toption network \'mesh\'\n \toption mode \'adhoc\'\n \toption ssid \'bmx7.pruebas\'\n \toption bssid \'D0:D0:11:11:11:11\'\n \toption encryption \'none\'\n\nHacemos que el nodo emita una se\xf1al wifi en modo adhoc que con ssid "bmx7.pruebas" y ligada a la interfaz "mesh" definida anteriormente.\n\n \n\t:::bash\n # modificamos un poco el archivo de configuracion por defecto\n # en bmx7\n config \'bmx7\' \'general\'\n # usando la interfaz mesh\n config \'dev\' \'mesh\'\n option \'dev\' \'wlan0\'\n \n # anuncios UHNA (para ipv6 directo)\n config \'unicastHna\' \'miPrefijoDeRed\'\n \toption \'unicastHna\' \'fa99:1:a::/48\'\n \n # tuneles (para bloques ipv4)\n # anunciar tunel ipv4\n config \'tunDev\' defaultbmx7\n \toption \'tunDev\' \'defaultbmx7\'\n \toption \'tun4Address\' \'10.64.1.0/24\'\n # aceptar anuncios \n config \'tunOut\'\n \toption \'tunOut\' \'ip4\'\n \toption \'network\' \'10.64.0.0/16\'\n \n # lo siguiente es para habilitar el plugin bmx7-tun\n # y con esto poder crear tuneles \n config \'plugin\'\n option \'plugin\' \'bmx7_tun.so\'\n \n config \'plugin\'\n option \'plugin\' \'bmx7_table.so\'\n\nEn la configuraci\xf3n de bmx7, primero definimos en que interfaz va a trabjar el protocolo.\n\nLuego definimos anuncios uHNA que son mensajes que anuncian a los nodos vecinos bloques y direcciones IP que tiene un nodo en la red. Lo bueno de usar UHNAs es que se garantiza que ning\xfan otro nodo pueda utilizar las IP que anuncia un nodo mediante un identificador \xfanico y que los bloques de direcciones no se solapen. Todos estos paquetes se asocian a un indentificador \xfanico por cada nodo y van firmados criptogr\xe1ficamente.\n\nFinalmente, bmx7 es s\xf3lo IPv6 y para anunciar bloques IPv4 utiliza anuncios de t\xfaneles. Afortunadamente no tenemos que crear los t\xfaneles manualemente ya que bmx7 los crea por nosotros, s\xf3lo indicamos mediante tun4Address que este nodo anuncia la red 10.64.1.0/24 y mediante tunOut le decimos que acepte anuncios que est\xe9n dentro de 10.64.0.0/16 y que los retransmita.\n\nEn el nodo B las configuraciones son similares donde s\xf3lo cambian los bloques y direcciones IP correspondientes, si habr\xeda otro nodo C o otros m\xe1s se hace de la misma forma.\n\nUna vez guardadas estas configuraciones, reiniciamos el demonio bmx7 con:\n\n /etc/init.d/network restart\n /etc/init.d/bmx7 restart\n\n \nEl demonio bmx7 se puede consultar en cualquier momento para consultar su estado ,nodos asociados o t\xfaneles, a continuaci\xf3n algunas consultas hechas en el enrutador.\n\n\n<div style="border:1px solid black;height:320px;width: 620px;overflow-y:hidden;overflow-x:scroll;">\n<pre>\nbmx7 -c status\n STATUS:\nshortId name nodeKey cv revision primaryIp tun6Address tun4Address uptime cpu txQ nbs rts nodes \n1A0165FA openwrt RSA2048 21 0a82c7c fd70:1a01:65fa:6d39:dce1:20b6:1299:1f82 ::/0 172.24.3.1/24 0:00:38:28 0.4 0/50 1 1 2/2\n \n bmx7 -c status originators\n \n STATUS:\nshortId name nodeKey cv revision primaryIp tun6Address tun4Address uptime cpu txQ nbs rts nodes \n1A0165FA openwrt RSA2048 21 0a82c7c fd70:1a01:65fa:6d39:dce1:20b6:1299:1f82 ::/0 10.64.0.0/24 0:00:38:28 0.4 0/50 1 1 2/2\nORIGINATORS:\nshortId name as S s T t descSqn lastDesc descSize cv revision primaryIp dev nbShortId nbName metric hops ogmSqn lastRef \n7B037847 openwrt1 nA A A A A 512 2303 671+747 21 0a82c7c fd70:7b03:7847:472a:414:9eee:2d98:3e14 wlan0 7B037847 openwrt1 22399K 1 356 0 \n1A0165FA openwrt nQ A A A A 413 132 671+749 21 0a82c7c fd70:1a01:65fa:6d39:dce1:20b6:1299:1f82 --- --- --- 257G 0 20 5\n \n bmx7 -c status originators descriptions tunnels\n </pre>\n</div>\nLa gu\xeda completa de comandos se puede ver en https://github.com/bmx-routing/bmx7 o una descripcion mas corta con bmx7 --verboseHelp.\n\nComo en las consultas anteriores vemos que el nodo B se ha dectectado, comprobamos que en el enrutador se hayan establecido rutas hacia \xe9l, por ejmplo con:\n\n :::bash\n ip -6 route\n # que muestra entre su salida que hay una ruta establecida hacia el nodo B\n fa99:1:b::/48 via fe80::ea94:f6ff:fe6b:80fa dev wlan0 metric 1024 \n fd70:7b03:7847:472a:414:9eee:2d98:3e14 via fe80::ea94:f6ff:fe6b:80fa dev wlan0 metric 1024 \n unreachable default dev lo metric -1 error -128\n fa99:1:a::a dev wlan0 metric 256\n\nEn bmx7 los nodos configuran autom\xe1ticamente una direcci\xf3n IPv6 al azar y un indentificador \xfanico en la red, pero los anuncios de redes UHNA son \xfanicos y eso suprime el riesgo de IP spoofing.\n\nAhora la comunicaci\xf3n entre el nodo A,B o una cantidad arbitraria de nodos es posible, podemos comprobar haciendo por ejemplo la prueba trazando rutas.\n\n\t:::bash\n\ttraceroute -6 fa99:1:b::b\n\nQue muestra que se puede llegar a esa direccion IP iendo por el nodo B.\n\n :::bash\n traceroute to fa99:1:b::b (fa99:1:b::b), 30 hops max, 16 byte packets\n 1 fa99:1:b::b (fa99:1:b::b) 1.392 ms 1.581 ms 1.329 ms\n\n # usando ip para ver que ruta se sigue para alcanzar una IP\n\tip route get fa99:1:b::b\n\tfa99:1:b::b from :: via fe80::ea94:f6ff:fe6b:80fa dev wlan0 src fc99:1:a::a metric 1024 \n\n \nEn bmx7 no es obligatorio utilizar un archivo de configuraci\xf3n para modificar el comportamiento del protocolo. Cuando el demonio bmx7 esta ejecut\xe1ndose con comandos se puede por ejemplo hacer que se anuncien bloques adicionales mediante UHNA.\n\n bmx7 -c u=fc01:1934:ffed::/64\n\nQue har\xeda que el nodo tambi\xe9n anuncie el bloque fc01:1934:ffed::/64, de igual manera se puede hacer que se anuncien t\xfaneles, quitarlos, establecer p\xf3liticas para aceptar anuncios y distribuirlos, etc. Consulta la gu\xeda oficial.\n\nCon toda la flexibilidad que ofrece bmx7 ya tenemos construida una peque\xf1a red en malla :)\n\n \n1. An evaluation of BMX6 for Community Wireless Networks\n2. Securely-Entrusted Multi-Topology Routing for\nCommunity Networks\n', [u'software', u'tutoriales', u'redes_libres'])

]]>
Nodo chersky LaOtraRed https://rmgss.net/posts/nodo-chersky-LaOtraRed https://rmgss.net/posts/nodo-chersky-LaOtraRed Sun Mar 31 15:22:11 2019 text/html Rodrigo Garcia LaOtraRed , redes_libres , medios_de_comunicación (u'Esta es una rese\xf1a sobre la puesta en marcha experimental del nodo "Chersky" como parte del proyecto LaOtraRed La Paz. En este post podr\xe1s revisar fotos, experiencias sobre el montado del nodo, adem\xe1s detalles t\xe9cnicos de puesta de servicios y configuraciones.\n\nNota: Este art\xedculo es una referencia hist\xf3rica por que el nodo Chersky ha evolucionado, aqu\xed la segunda versi\xf3n.\n \n LaOtraRed\n \xbfDe qu\xe9 se trata?\n Materiales usados\n Montado de la torre\n Servicios disponibles\n Agradecimientos y m\xe1s\n Infraestructura de red del nodo\n Configuraciones de aparatos enrutadores\n\n<span id="LaOtraRed"></span>\n \nLaOtraRed La Paz es una red libre construida y mantenida enteramente por personas voluntarias. La red le pertenece a toda la comunidad que forma parte de ella y no existe una persona, organizaci\xf3n u empresa que sea due\xf1a.\n\nPara que esta sea una red libre se siguen cuatro principios de convivencia fundamentales:\n\n Eres libre de utilizar la red para cualquier prop\xf3sito en tanto no perjudiques el funcionamiento de la propia red ni a la libertad de los dem\xe1s usuarios.\n Eres libre de saber c\xf3mo es la red, de qu\xe9 se compone y c\xf3mo funciona.\n Eres libre de emplear la red para cualquier tipo de comunicaci\xf3n y difundir su funcionamiento.\n Incorpor\xe1ndote a la red, ayudas a extender estas libertades en las mismas condiciones.\n\nEstos principios son extra\xeddos de la licencia procom\xfan inal\xe1mbrica version 1.0 derivada (Bolivia).\n\nEn La Paz LaOtraRed es principalmente impulsada por el Grupo de estudio de redes libres GEReL, del cual soy parte activa.\n\nEl nodo Chersky es el segundo nodo asegurado despu\xe9s del nodo sopocachi I.\n\n<span id="acercade"></span>\n \nEste nodo es un punto de conexi\xf3n wifi libre en un barrio de la ciudad de La Paz, si algui\xe9n se conecta a la se\xf1al wifi puede utilizar una serie de servicios libremente. Adem\xe1s este punto de conexi\xf3n wifi est\xe1 preparado para actuar como nodo en la red distribuida de LaOtraRed y se clasifica como un nodo normal por repartir la se\xf1al de la red distribuida en 5 Ghz y 2.4 Ghz.\n\nEste un diagrama a grandes rasgos de la infraestructura del nodo que ir\xe9 detallando m\xe1s adelante.\n\nNodo Chersky infraestructura\n\n \nEl nodo se encuentra en la ciudad de La Paz, casi llegando al barrio gr\xe1fico cerca la plaza Villaroel y el hospital Arco Iris, puedes buscar la se\xf1al de wifi por ah\xed.\n\n<span id="materiales"></span>\n \nHe realizado una inversi\xf3n considerable en el montado de este nodo, pero esto no quiere decir que esta es la forma \xf3ptima de montar un nodo o que el precio de montado es irreducible, como referencia voy a poner los precios de los materiales y equipos comprados:\n\nEquipos de comuptaci\xf3n y redes\n\n Computador AMD Atlon (prestado del r00thouse, a este server lo llamamos chipsito)\n Pila BIOS CR2032 (15 bs)\n Router Dual Band modelo TLWDR3600 (500 bs)\n Swtich ethernet (reciclado)\n\nAccesorios redes\n\n 2 Cajas de red (30 bs)\n Conectores hembra y macho jack (10 bs)\n 5 Conectores rj45 (5bs)\n 20 metros de cable utp cat5 (50 bs)\n\nPreparado de la antena\n\n 6 metros cable coaxial rg58 para hacer antena casera (24 bs)\n 2 conectores sma macho (28 bs)\n 1 conector sma hembra (14 bs)\n Tubo pvc 1.3 m (reciclado)\n\nMontado de la torre\n\n 2 amarros de alambre de amarre (20 bs)\n 2 palos de fierro 10 cm (reciclado)\n Pedazos de madera peque\xf1os (reciclados de un botadero)\n\nInversi\xf3n adquiriendo materiales y equipos : 696 bs\n\n<span id="torre"></span>\n \nPara la "torre" he usado b\xe1sicamente los palos de fierro, las maderas, alambre de amarre y cables de red.\n\nHe puesto el router en el techo para disminuir la distancia entre el equipo y la antena as\xed se puede reducir la p\xe9rdida en la l\xednea de transmisi\xf3n coaxial hasta la antena. Y para colocar el router arriba se requiere darle suministro el\xe9ctrico, lo que en ciscunstancias normales significa llevar un cable con 220 V AC.\n\n \nPara ahorrarse el cable para 220 V AC en el techo y aprovechar que no se necesitan todos los hilos del cable para la conexi\xf3n ethernet, se ha hecho una modificaci\xf3n usando dos cajitas de red, y dos conectores jack. Esta modificaci\xf3n est\xe1 mejor descrita aqu\xed, estas son un par de fotos del trabajo hecho.\n\ncajitas abiertas\n\n<img src="../static/imgs/posts/cajitas_terminadas.jpg">\n\n \nBusqu\xe9 la forma de hacer una antena casera onmidireccional para wifi con ganancia por encima de los 15 DBi, principalmente para ahorrarme dinero al tratar de adquirir una antena. Encontr\xe9 este dise\xf1o de antena hecha con el mismo cable coaxial y como parec\xeda sencilla de hacer la hice.\n\nPero no obtuve los resultados deseados y probablemente por errores en el proceso de construcci\xf3n, por ejemplo en las medidas de los trozos o al preparar los conectores, al final la antena med\xeda cerca de 1.4 m y la ganancia era similar a la antena con la que ven\xeda el router. De todas formas termin\xe9 pon\xedendola en el techo y espero poder realizar una mejor antena. Estar\xeda muy agradecido si me das sugerencias sobre antenas onmidireccionales, hazlo por aqu\xed por favor o escribe al foro de la otra red La Paz muchos te lo agradercer\xe1n.\n\nAqu\xed algunas fotos de lo que hice.\n\nPreparando los pedazos.\n\np1\np2\np3\np5\n\nColocando el dentro el tubo pvc como cubierta, a un extremo de la antena puse un conector SMA hembra para que se pueda conectar a otros pigtails de cable coaxial.\np6\n\nConectado al router luego de conectar con un pigtail que hice con el mismo cable coaxial y los conectores SMA macho.\n\np4\n\n \nUsando estos materiales:\n\ntorre materiales\n\nPrepare una base con los dos fierros e "incrust\xe9" un fierro en la base de madera para tener mejor apoyo sobre el techo inclinado.\n\ntorre materiales\n\nLuego amarr\xe9 3 alambres para sujetar los fierros donde tambi\xe9n asegur\xe9 la antena con el alambre de amarre, al final la base de la "torre" termin\xf3 as\xed:\n\ntorre asegurada\n\nDespu\xe9s conect\xe9 el cable coaxial de la antena casera a la entrada del router, en la imagen siguiente no esta el cable utp que va de la cajita al router, lo dibuje en la imagen por que despu\xe9s si lo puse o no habr\xeda conexi\xf3n con el servidor.\n\ntorre asegurada\n\nUna vez cubierto el router para protegerlo de la interperie y asegurarlo, s\xf3lo queda el trabajo al interior y esto es acomodar la computadora y conectar al switch tal y como si fuera una red LAN.\n\n<span id="chipsito"></span>\n \nEste servidor es del r00thouse y agradezco me lo presten mientras no lo necesiten. La historia que me contar\xf3n es que Amos Batto un activista ambientalista y que antes se pasaba por el r00thouse don\xf3 el equipo, agradezco a Amos por la donaci\xf3n y aunque chipsito es un equipo muy pesado y para algunos antiguo, funciona muy bien, espero darle el mejor uso en lo que le queda de vida \xfatil.\n\nChipsito tiene una CPU AMD Athlon, con 784 MB de RAM y 60 GB de disco duro. Luego de comprarle una nueva pila para el BIOS funciona bien. Le instal\xe9 Debian GNU/Linux 8 jessie y puse algunos servicios que especificar\xe9 a continuaci\xf3n.\n\nTiene el nombre de Chipsito gracias a Chip el perro de Armin que vive en el r00thouse y te daba la bienvenida con ladridos y golpes con las patas delanteras... es que es muy juget\xf3n e hiperactivo. Adem\xe1s hab\xeda otro equipo en el r00thouse que llamamos Chip pero ten\xeda caracter\xedsticas superiores al chipsito. Ni hablar m\xe1s aqu\xed unas fotos del equipo.\n\nchipsito1\nchipsito2\n\n<span id="servicios"></span>\n \nHasta el momento hay 6 servicios principales.\n\n wikipedia offline en castellano.\n Streaming de audio con icecast2, ices e ices2.\n Imageboard basado en https://github.com/tslocum/TinyIB\n El botadero para compartir archivos.\n Una app para poner anuncios y comentarios.\n Un directorio de descargas de archivos variados.\n\nM\xe1s referencia sobre el despliegue de estos servicios https://wiki.lapaz.laotrared.net/guias/indice_servicios.\n\nA parte en el router he tenido que configurar dnsmasq como servidor dns "invasivo" lo que se describir\xe1 m\xe1s adelante.\n\n<img src="../static/imgs/posts/pag_principal1.jpg" width=350>\n\n<small>Arriba una captura de pantalla del los servicios en la p\xe1gina principal del nodo.</small>\n\n<span id="agradecimientos"></span>\n \nMuchas personas han hecho posible el montado de este nodo y del proyecto LaOtraRed, voy a listar a quienes han tenido especial influencia.\n\n Luis Mita: Su ayuda en los aspectos t\xe9cnicos han sido fundamentales, cuando andaba desubicado me ayudaba a ubicarme de nuevo. Su apoyo moral tambi\xe9n ha sido importante adem\xe1s de ser el impulsor principal del proyecto LaOtraRed en La Paz.\n Donato Aymatha: Ha hecho un gran trabajo consiguiendo contactos y difundiendo el proyecto a distintos sectores y eso me ha ayudado a entender algunas necesidades comunicacionales b\xe1sicas de muchas personas y que no todo se enfrasca en un mundo de consumismo digital, hay que darle a las personas los medios para generar sus propios contenidos y en una red libre eso es importante.\n Sergio Guill\xe9n: Wonkey como miembro del r00thouse ayud\xf3 mucho impulsando el proyecto y haciendo cosas que nadie m\xe1s se animaba como cuando se anim\xf3 a configurar VLANS o conseguir routers ganando hackatones. Eso me d\xedo animos para seguir trabajando.\n Armin Mesa: Como miembro del r00thouse por apoyar en lo que estaba a su alcance animando a seguir con los proyectos, adem\xe1s por permitirme usar el server chipsito para este nodo.\n Franklin Torres: Dx por su ayuda y apoyo constante en cada problema que surg\xeda cuando yo era parte del r00thouse.\n Esteban Lima: Tebo de buena gana ayud\xf3 a iniciar el proyecto LaOtraRed y a conseguirnos espacios de prueba, tambi\xe9n colabor\xf3 en Cochabamba donde han estado construyendo LaOtraRed.\n\nVoy a hacer un agradecimiento especial a Philippe Rivi\xe8re o Fil, que es la persona que realiz\xf3 una importante donaci\xf3n monetaria cuando empezabamos el proyecto con esa donaci\xf3n pudimos adquirir muchos enrutadores con los que empezamos a probar en serio la creaci\xf3n de una red distribuida y para montar un nodo de pruebas en el r00thouse.\n\nFil hizo un viaje largo desde Francia a Bolivia y antes de irse hizo el donativo sin anunciarlo a grandes voces ni esperar reconocimiento p\xfablico, s\xf3lo confiando en que su donativo apoyar\xeda al proyecto y as\xed lo hizo \xa1Gracias Fil!.\n\n \nAntes de pasar a la parte enteramente t\xe9cnica me gustar\xeda animar a muchos otros para que monten sus nodos o ayuden a montarlos y expandir una red distribuida y libre.\n\nNo es buena idea esperar a que otr@s nos brinden soluciones comunicacionales que probablemente no se ajustar\xe1n a nuestras necesidades reales, adem\xe1s se podr\xedan aprovechar de nuestra situaci\xf3n por falta de comunicaci\xf3n para --imponernos tarfias excesivas y un mal servicio, como es el caso del internet en Bolivia.\n\nSi tienes la posibilidad debes tomar acci\xf3n apoyando la creaci\xf3n de redes libres para los y las ciudadanas, controladas y gestionadas por los mismos.\n\nRechaza medios de comunicaci\xf3n que te quitan la libertad de comunicarte libremente y anima a otros a hacerlo.\n\nPuedes revisar este post que estoy escribiendo al respecto.\n\n<span id="infraestructura"> </span>\n \nEste diagrama explica a grandes rasgos la infraestructura del nodo:\n\nNodo Chersky infraestructura\n\nComo se ve hay un router no solamente reparte wifi para que se conencten varios clientes, tambi\xe9n emite y recibe se\xf1ales wifi (2.4 y 5Ghz) en modo adhoc para unirse a la red distribuida LaOtraRed.\n\nEl siguiente diagrama muestra con m\xe1s detalle la infraestructura del nodo.\n\nNodo Chersky infraestructura detalle\n\nS\xf3lo hay un aparato enrutador que realiza la conexi\xf3n a la red distribuida, este aparato tambi\xe9n sirve como repartidor de red wifi para clientes, el conmutador de red es opcional y puede servir para conectar equipos adicionales como servidores que tendr\xe1n una IP p\xfablica (ser\xe1n visibles por todos los nodos en LaOtraRed).\n\n<span id="configuraciones"></span>\n \nEsta es una configuraci\xf3n experimental de nodo para LaOtraRed y no compromete al proyecto.\n\nEn los diagramas de la infraestructura del nodo se puede ver que se conecta a la red distribuida de LaOtraRed por wifi (en 2.4 y 5Ghz) y adem\xe1s a una red local de clientes temporales.\n\n El nodo Chersky tiene reservado el bloque 10.64.3.64 /27 siguiendo una pol\xedtica de asignaci\xf3n de IPs\n\nLo \xfaltimo significa que este nodo puede usar como mejor le convenga un total 30 direcciones IP para equipos que van desde 10.64.3.65 a 10.64.3.94 y estas direcciones ser\xe1n p\xfablicas en todo el espacio de la red distribuida.\n\n \nEste enrutador tiene instalado el S.O. openwrt y sus funciones son:\n\n Conectarse a la red distribuida por wifi en 2.4 y 5 Ghz usando el bloque p\xfablico 10.64.3.64 /27 asignado a este nodo.\n Crear una red local para clientes en 172.24.1.0 /24.\n Servir de wifi hotspot en 2.4 Ghz.\n Servidor dhcp para asignar direcciones IP autom\xe1ticamente a clientes.\n Servidor DNS para la red local.\n\n \nEste es el archivo donde se definen las interfaces de red.\n\nPor convenencia se ha definido VLANs para reservar puertos ethernet del aparato de forma ordenada siguiendo: https://wiki.openwrt.org/toh/tp-link/tl-wdr3600#switch_ports_for_vlans, la definici\xf3n de VLANs no es estricamente necesaria.\n\nPor ejemplo he definido la VLAN 1 que abarca los puertos ethernet 1 y 2 y hace que cualquier dispositivo que se conecte all\xed pertenezca a una interfaz espec\xedfica (en este caso "wiredmesh"), la VLAN 2 abarca los puertos ethernet 3 y 4 y cualquier dispositivo que se conecte a estos puertos pertenecer\xe1 a la interfaz "mesh", de igual manera con la VLAN 3 pero con la interfaz "wan" y usando el puerto ethernet wan.\n\nEste el archivo de configuraci\xf3n completo:\n\n :::bash\n config interface \'loopback\'\n \toption ifname \'lo\'\n \toption proto \'static\'\n \toption ipaddr \'127.0.0.1\'\n \toption netmask \'255.0.0.0\'\n \n config globals \'globals\'\n \toption ula_prefix \'fdec:6a81:414a::/48\'\n # red mesh para conexiones cableadas (ethernet)\n config interface \'wiredmesh\'\n \toption ifname \'eth0.1\' # VLAN 1\n \toption force_link \'1\'\n \toption proto \'static\'\n \toption ipaddr \'10.64.3.65\' # IPv4 publica del router\n \toption netmask \'255.255.255.224\' # mascara /27\n # red mesh para 2.4 Ghz\n config interface \'mesh_2G4\'\n \toption proto \'static\'\n \toption ipaddr \'10.64.3.65\' # IPv4 publica del router\n \toption netmask \'255.255.255.224\'\n \toption ip6addr \'fc01:1934:fffe:9493:44d9:e7ff:fe4b:2661/128\'\n # red mesh para 5 Ghz\n config interface \'mesh_5G\'\n \toption proto \'static\'\n \toption ipaddr \'10.64.3.65\' # IP publica del router\n \toption netmask \'255.255.255.224\'\n \toption ip6addr \'fc01:1934:fffe:9493:44d9:e7ff:fe4b:2669/128\'\n # red lan\n config interface \'lan\'\n \toption ifname \'eth0.2\' # VLAN 2\n \toption force_link \'1\'\n \toption type \'bridge\'\n \toption proto \'static\'\n \toption ipaddr \'172.24.1.1\' # IPv4 del route en la red lan privada\n \toption netmask \'255.255.255.0\' # mascara /24\n\t\t\n config interface \'wan6\'\n \toption ifname \'eth0.3\'\n \toption proto \'dhcpv6\'\n config interface \'wan\'\n \toption ifname \'usb0\'\n \toption proto \'dhcp\'\n # Definicion de VLANs\n config switch\n \toption name \'switch0\'\n \toption reset \'1\'\n \toption enable_vlan \'1\'\n # VLAN 1\n config switch_vlan\n \toption device \'switch0\'\n \toption vlan \'1\'\n \toption ports \'0t 2 3\'\n # VLAN 2\n config switch_vlan\n \toption device \'switch0\'\n \toption vlan \'2\'\n \toption ports \'0t 4 5\'\n # VLAN 3\n config switch_vlan\n \toption device \'switch0\'\n \toption vlan \'3\'\n \toption ports \'0t 1\'\n\n \nComo es un router DUAL BAND y este es un nodo normal dentro LaOtraRed se debe expandir la se\xf1al de la red distribuida en 2.4 y 5 Ghz, a continuaci\xf3n el archivo de configuraci\xf3n:\n\n :::bash\n\t# dispositivo 2.4Ghz\n config wifi-device \'radio0\'\n \toption type \'mac80211\'\n \toption hwmode \'11g\'\n \toption path \'platform/ar934x_wmac\'\n \toption htmode \'HT20\'\n \toption country \'BO\' # normativa Boliviana\n\t\toption channel \'7\'\n \toption disabled \'0\'\n \toption txpower \'19\'\n \toption distance \'1000\'\n # dispositivo 5Ghz\n config wifi-device \'radio1\'\n \toption type \'mac80211\'\n \toption txpower \'22\'\n \toption country \'BO\' # normativa Boliviana\n \toption channel \'153\' # Canal comun para LaOtraRed\n \toption hwmode \'11a\'\n \toption path \'pci0000:00/0000:00:00.0\'\n \toption htmode \'HT20\'\n \toption disabled \'0\'\n # 5 Ghz mesh\n config wifi-iface\n \toption device \'radio1\'\n \toption network \'mesh_5G\'\n \toption mode \'adhoc\'\n \toption ssid \'lapaz.laotrared.net\'\n \toption bssid \'BE:BA:CA:FE:BE:BE\' # MAC comun 5Ghz\n \toption encryption \'none\'\n # 2.4 Ghz mesh\n config wifi-iface\n \toption device \'radio0\'\n \toption mode \'adhoc\'\n \toption network \'mesh_2G4\'\n \toption ssid \'lapaz.laotrared.net\'\n \toption bssid \'BE:BA:CA:FE:B3:B3\' # MAC comun 2.4Ghz\n \toption encryption \'none\'\n # 2.4 Ghz clientes (lan privada)\n config wifi-iface\n \toption device \'radio0\'\n \toption mode \'ap\'\n \toption encryption \'none\' # tambien se puede usar cifrado aqui\n \toption ssid \'Chersky - LaOtraRed\'\n \toption network \'lan\'\n\n \nComo se considera la interfaz lan una red privada, todos los dispositivos conectados que quieran ver contenido de equipos p\xfablicos dentro LaOtraRed La Paz (bloque 10.64.0.0 /15) lo har\xe1n a trav\xe9s de NAT. Esto quiere decir que se usar\xe1 la IP 10.64.3.65 del router para enviar el tr\xe1fico desde la interfaz lan hacia otros nodos en LaOtraRed.\n\nPor eso se agregan las siguientes opciones en el firewall:\n\n :::bash\n config zone\n \toption input \'ACCEPT\'\n \toption output \'ACCEPT\'\n \toption name \'mesh\'\n \toption forward \'ACCEPT\'\n \toption network \'lan mesh_2G4 mesh_5G wiredmesh\'\n \toption masq \'1\' # masquerading (NAT)\n \n config forwarding\n \toption dest \'lan\'\n \toption src \'mesh\'\n\n \nComo se trata de una red distribuida, todos los nodos deben colaborar para brindar conexi\xf3n a otros. Se utiliza el protocolo de enrutamiento din\xe1mico babel.\n\nHacemos que babeld haga algunas cosas:\n\n Diga a los nodos vecinos que el bloque 10.64.3.64 /27 es su dominio y para llegar a ese bloque de direcciones IP lo har\xe1n a trav\xe9s de este router.\n Reciba rutas de otros vecinos dentro el bloque 10.64.0.0 /15 y se las avise a otros vecinos.\n Sea punto intermedio de conexi\xf3n entre otros nodos cuando estos lo requieran.\n* Detecta autom\xe1ticamente otros nodos en la red y estos se unen autom\xe1ticamente.\n\nLa ventaja de este protocolo es que elimina la posibilidad de que se formen bucles de enrutamiento y trabaja en IPv6 e IPv4.\n\nPara utilizarlo se tiene instalado el paquete babeld con:\n\n opkg install babeld\n\nEste es el archivo de configuraci\xf3n:\n\n :::bash\n package babeld\n config general\n \toption \'random_id\' \'true\'\n \toption \'ipv6_subtrees\' \'true\'\n \n ##### interfaces en las que babel participa\n # (wifi 2.4Ghz adhoc)\n config interface\n \toption \'ifname\' \'wlan0\'\n \toption channel \'7\'\n # (wifi 5Ghz adhoc)\n config interface\n \toption \'ifname\' \'wlan1\'\n \toption channel \'153\'\n \n ###### filtros para rutas de entrada (anunciadas por los vecinos)\n # permitir rutas del bloque 10.64.0.0 /15 (LaOtraRed La Paz - El Alto)\n config filter\n \toption type \'in\'\n \toption ip \'10.64.0.0/15\'\n \toption action \'allow\'\n config filter\n \toption type \'in\'\n \toption ip \'fc01:1934::/32\'\n \toption \'allow\'\n \n ###### filtros para rutas internas (kernel)\n # anunciar a los vecinos el bloque de este nodo\n config filter\n \toption type \'redistribute\'\n \toption ip \'10.64.3.64/27\' # bloque IPv4 de este nodo\n \toption action \'allow\'\n config filter\n \toption type \'redistribute\'\n \toption ip \'fc01:1934:fffe:9493:44d9:e7ff:fe4b:2662/128\' # IPv6 (de pruebas)\n \n ###### denegar otras rutas no definidas\n config filter\n \toption type \'in\'\n \toption action \'deny\'\n config filter\n \toption type \'redistribute\'\n \toption local \'true\'\n \toption action \'deny\'\n\nCon estas configuraciones el router funciona como nodo dentro la red distribuida. Si otro nodo tiene configuraciones similares estar\xe1 haciendo crecer la red distribuida y libre.\n\nLo que en otro nodo se deber\xeda cambiar son las direcciones IP correspondientes a las que tengan asingadas, ver pol\xedtica de asignaci\xf3n de IPs para m\xe1s informaci\xf3n.\n\n \nSe usa dnsmasq como servidor DNS y DHCP, no se han hecho cambios al arhivo /etc/config/dhcp pero si en el archivo de configuraci\xf3n global de dnsmasq para que dirija las b\xfasquedas de dominios hacia una direcci\xf3n IP, en esta caso hacia el servidor chipsito.\n\nSe ha puesto al principio del archivo /etc/dnsmasq.conf la l\xednea:\n\n address=/#/10.64.3.66\n\nQue retornar\xe1 a 10.64.3.66 cualquier b\xfasqueda no respondida desde /etc/hosts o DHCP y que no haya sido enviada a un servidor DNS upstream, esto funcionar\xe1 para los dispositivos conectados en a la red lan y est\xe1n como clientes de este nodo.\n\nEn 10.64.3.66 (server chipsito) hay una p\xe1gina de bienvenida que le indica al visitante los serivicios disponibles para este nodo.\n\n \nEn este archivo se han agregado entradas para dominios locales en este caso:\n\n 127.0.0.1 localhost\n 10.64.3.66 chersky.lor\n 10.64.3.66 radio.chersky.lor\n 10.64.3.66 wikipedia.chersky.lor\n 10.64.3.66 botadero.chersky.lor\n 10.64.3.66 fotos.chersky.lor\n 10.64.3.66 anuncios.chersky.lor\n 10.64.3.66 extra.chersky.lor\n\nSe usa el Top Level Domain (TLD) .lor que viene de "LaOtraRed".\n\n \n * Todos los equipos conectados al wifi para clientes de este nodo, f\xe1cilmente podr\xe1n usar sus servicios ya que hay una p\xe1gina de bienvenida y dnsmasq los redirije a esta. Sin embargo, no hay una referencia a servidores DNS p\xfablicos en LaOtraRed. Mientras no se definan servidores DNS p\xfablicos se podr\xeda agregar entradas en /etc/hosts para los dominios de otros nodos.\n * Las conexiones en modo ad-hoc por wifi desde esto nodo hacia los dem\xe1s nodos en la red distribuida, no se est\xe1n cifrando desde este nodo, esto por que no se tiene aun definida una contrase\xf1a p\xfablica entre nodos.\n \n----\nEspero te haya servido, me despido con una foto de la Chersky.\n\n<img src="../static/imgs/posts/chersky1.jpg" width="362">\n\n\n\n\n', [u'LaOtraRed', u'redes_libres', u'medios_de_comunicaci\xf3n'])

]]>
Navidad 2018 https://rmgss.net/posts/navidad-2018 https://rmgss.net/posts/navidad-2018 Sun Mar 31 15:22:11 2019 text/html Rodrigo Garcia reflexión , navidad (u' \nEsta navidad he querido verla desde otro punto de vista, desde donde otras personas no la pasan tan bien.\n\nnavidad2018\n<--tama\xf1o original\n\nEsta es como una continuaci\xf3n a la reflexi\xf3n de navidad 2017.\n\n\xc9poca de descanso y tranquilidad para muchas personas, tambi\xe9n de ajetreo y preocupaciones para otras. Tantas matices que tiene esta fecha que quiz\xe1 pocos se animan a explorar y este a\xf1o tuve un fuerte impulso por conocer aunque sea un poco esas matices distintas.\n\n \nFu\xed al hospital de la mujer poco antes de navidad para dar un apoyo a alguien y como siempre en este lugar hay mucho apoyo que dar. Pregunt\xe9 a la trabajadora social que atiende a las enfermas por un caso que en especial requiera alg\xfan apoyo econ\xf3mico y me mostr\xf3 el caso de una menor de edad que producto de un abuso sexual di\xf3 a luz a dos gemelos, en este caso la adolescente s\xf3lo contaba con la ayuda de sus padres que ya estaban mas de dos semanas en La Paz con pocos recursos, una ciudad grande que no conoc\xedan, una gran preocupaci\xf3n y cansados por estar tantos d\xedas sin alimentarse apropiadamente.\n\nNo consegu\xed muchos m\xe1s detalles, pero vi un poco de las consecuencias del abuso a una persona indefensa en recuperaci\xf3n. La ayuda que pude dar por cuenta propia fue una parte a la familia y otro al hospital que necesitaba insumos ya que ten\xeda otros casos similares y entre uno de ellos uno de abandono.\n\nR\xe1pidamente el dinero que hab\xeda destinado para esto \u013ao gaste en una farmacia comprando todo lo que alcanz\xf3. A mi me parecieron excesivos los precios de los medicamentos e insumos que me indicaron hac\xedan falta, pero a\xfan as\xed tuve que comprarlos. Luego ped\xed ayuda a algunas personas del trabajo que no se negaron y aportaron de buena gana :) Con ese dinero alcanz\xf3 para comprarles ropa, pa\xf1ales y muchos otros productos de beb\xe9s para los reci\xe9n nacidos y algo para la familia.\n\nEsperando que esta navidad sea mejor para esa familia me desped\xed cuando se sub\xedan al transporte que los llevaba de vuelta a su pueblo lejano en los Yungas de La Paz. Por todo lo dem\xe1s fue una navidad t\xedpica en familia para mi, pero me queda la necesidad de hacer m\xe1s cosas similares.\n\n \nNo pude evitar pensar en este caso como muchos otros casos de abuso con consecuencias muy fuertes, cu\xe1les son las causas o factores que los disparan. Revise sin muchos detalles algunas estad\xedsticas y luego entend\xed mejor lo que impulsa a muchos movimientos de lucha contra el abuso y violencia contra la mujer.\n\nLas mujeres viven una situaci\xf3n de desigualdad en nuestro medio y padecen directamente las consecuencias, por que en un caso como este, posiblemente la madre de los dos gemelos tendr\xeda que dejar de estudiar y dedicarse al cuidado de los ni\xf1os a\xfan si fuese en contra de su voluntad.\n\nPienso que entre la gran cantidad de problemas de desigualdad que existen, uno de los peores es la falta de educaci\xf3n equitativa, \u2014tener un grupo de personas "con buen nivel de educaci\xf3n" no garantiza el buen vivir de otro grupo de personas con un nivel de educaci\xf3n inferior.\n\n \nLa desigualdad es tremenda s\xf3lo comparando las cenas de navidad que unas familias tienen y c\xf3mo otras no las tienen o las dificultades que muchas tienen que vivir. Si la gente que tiene mucho en navidad dar\xeda a la gente que no tiene, seguro se ver\xedan grandes diferencias en esta celebraci\xf3n. Dar algo nuestro para otras personas que lo necesitan provoca cambios positivos y duraderos.\n\nNo hay raz\xf3n para que este tipo de actos sean considerados raros, "cursis" o dif\xedciles de hacer, m\xe1s bien es hora de hacerlo una costumbre m\xe1s extendida :D \n', [u'reflexi\xf3n', u'navidad'])

]]>
Libro Programming in C https://rmgss.net/posts/libro-Programming-in-C https://rmgss.net/posts/libro-Programming-in-C Sun Mar 31 15:22:11 2019 text/html Rodrigo Garcia descargas , libros , software (u'descargar.png Descargar versi\xf3n offline\n\nAqu\xed comparto una versi\xf3n descargable y offline del libro "Programming in C UNIX System Calls and Subroutines using C" por A. D. Marshall (1999)\n\nLa versi\xf3n online del libro se encuentra en https://users.cs.cf.ac.uk/Dave.Marshall/C/CE.html, sin embargo para los que no tengan internet todo el tiempo y aun as\xed quieran leer el libro de manera c\xf3moda la versi\xf3n offline que pongo les servir\xe1.\n\nSolo hace falta descomprimir el .zip y abrir la p\xe1gina \xednidice que tiene nombre node1.html con un navegador web, desde all\xed se puede revisar todo el contenido.\n\n \n wget -r https://users.cs.cf.ac.uk/Dave.Marshall/C/CE.html\n\nQue descarga recursivamente con una profundidad de hasta 5 y afortunadamente wget tamb\xeden descarga las im\xe1genes del libro, luego hay una carpeta llamda Dave.Marshall y dentro otra C, s\xf3lo he comprimido esa carpeta como .zip\n\nEspero les sirva.\n', [u'descargas', u'libros', u'software'])

]]>
El nodo en la zona norte https://rmgss.net/posts/el-nodo-en-la-zona-norte https://rmgss.net/posts/el-nodo-en-la-zona-norte Sun Mar 31 15:22:11 2019 text/html Rodrigo Garcia LaOtraRed , redes_libres (u'Estamos construyendo LaOtraRed en la ciudad de La Paz, como son las etapas iniciales es dif\xedcil encontrar lugares donde poner nodos y as\xed enlazarnos.\n\nEn esta ocasi\xf3n, el s\xe1bado 1 de Abril nos hemos reunido en casa de Aymatha para asegurar un enlace entre un nodo funcional en Pampahasi.\n\n<a href="../static/imgs/posts/fotos/zona_norte_lp1.jpg">\n <img src="../static/imgs/posts/fotos/thumb_zona_norte_lp1.jpg" title="Vista zona norte La Paz" width="720" heigth="434">\n</a>\n\nVista desde la zona norte de la ciudad de La Paz (se ve como la lluvia viene acerc\xe1ndose).\n\nNo hemos tenido las condiciones m\xe1s adecuadas, primero se puso a llover fuerte, luego empez\xf3 a lloviznar. En plena llovizna nos subimos al techo de la casa de Aymatha para apuntar el enrutador hacia pampahasi y asegurar otro enlace para la red distribuida.\n\n<table width="59%">\n<tr>\n<td><img src="../static/imgs/posts/nano_m5_mastil1.jpg">\n El enrutador Nano station m5, este tiene una antena direccional inclu\xedda para hacer enlaces de larga distancia.\n</td>\n<td>\n <img src="../static/imgs/posts/routers_lor_1.jpg" width="362" heigth="233">\n <br>\n Dos enrutadores peque\xf1os que ser\xe1n usados por Aymatha en su red interna (Estos no son necesarios para montar un nodo)\n </td>\n</tr>\n</table>\n\nLuego de colocarle software libre y configurar los aparatos, empezamos a buscar la se\xf1al wifi en 5Ghz lapaz.laotrared.net que la transmite el nodo Gauss en la zona de Pampahasi.\n\nLa encontramos y tratamos de conectarnos, pero la potencia de la se\xf1al era a lo mejor de -83 dBm lo que no permite un enlace estable.\n\n \nA la fecha 3 de Abril de 2017, existen 3 nodos en LaOtraRed La Paz:\n\n- Nodo Sopocachi I (Zona de Sopocachi)\n- Nodo Gauss (Zona de Pampahasi)\n- Nodo Chersky (Barrio Gr\xe1fico, cerca de Villa F\xe1tima)\n\nS\xf3lo el nodo Sopocachi I y el Nodo Gauss tienen conexi\xf3n y la idea era agregar el nodo en la casa de Aymatha ubicado en la zona Norte de La Paz (como a 5 Km del nodo Gauss) para extender la conexi\xf3n y empezar a distribuirla en la zona Norte.\n\nEn los siguientes d\xedas vamos a intentar mover las antenas en el nodo Gauss para asegurar el enlace pero puede que esto no funcione.\n\nNecesitamos asegurar m\xe1s nodos para extender la red libre y de control ciudadano :)\n\nSi quieres ayudar poniendo un nodo o sugiriendo uno, hazlo en el foro https://foro.laotrared.net/ toda la comunidad de LaOtraRed estar\xe1 atenta.\n\n\n\n\n', [u'LaOtraRed', u'redes_libres'])

]]>
Construyendo Babeld para enrutadores https://rmgss.net/posts/construyendo-Babeld-para-enrutadores https://rmgss.net/posts/construyendo-Babeld-para-enrutadores Sun Mar 31 15:22:11 2019 text/html Rodrigo Garcia proyectos , tutoriales (u'Aqu\xed se muestra una manera de construir el programa Babeld mediante compilaci\xf3n cruzada para enrutadores con el sistema operativo LEDE. \n\nterm.png Babeld que es una implementaci\xf3n del protocolo de enrutamiento Babel escrito en lenguage C, se utliza frecuentemente en enrutadores de redes inl\xe1mbricas en malla que crecen y se gestionan autom\xe1ticamente.\n\nContenido:\n\n Como construir programa Babeld para enrutadores de la rama ar71xx que tengan el sistema operativo LEDE por ejemplo para el enrutador TL-MR3020 o TL-MR3040.\n\n Como construir Babeld-lor para enrutadores de la rama ar71xx, Babeld-lor que es una implementaci\xf3n de un m\xe9todo de autenticaci\xf3n para el protocolo Babel que he estado probando y desarrollando.\n\n \nPara poder obtener el ejecutable de Babeld (construirlo) y que se pueda ejecutar en un enrutador b\xe1sicamente se necesita:\n\n Compilador cruzado Cross compiler de lenguage C.\n Enlazador, bibliotecas y otros utilitarios para lenguage C.\n\n \nComo queremos que el programa se ejecute en un enrutador TL-MR3020, primero debemos obtener el compilador cruzado apropiado. Dentro del Sistema operativo LEDE u Openwrt, el TL-MR3020 esta dentro de la rama objetivo ar71xx.\n\n \nLa primera forma de obtener el cross compiler es descarg\xe1ndolo del repositorio oficial, el proyecto LEDE mantiene un SDK.\n\nEn https://downloads.lede-project.org/releases/17.01.4/targets/ar71xx/generic/ deber\xeda haber un archivo que contenga sdk por ejemplo: lede-sdk-17.01.4-ar71xx-generic_gcc-5.4.0_musl-1.1.16.Linux-x86_64.tar.xz.\n\nEn la wiki de LEDE se describe mejor el SDK, b\xe1sicamente es una cadena de herramientas (toolchain) para hacer compilaci\xf3n cruzada y construir programas para una determinada plataforma objetivo (en nuestro caso ar71xx).\n\nLuego debemos descomprimir este archivo, que contiene el toolchain que necesitamos.\n\n \nSi lo que quieres es construir todo incluyendo el SDK, puedes usar Build root. El proceso de construcci\xf3n lo he descrito en el post: Construir firmware para enrutadores con Buildroot, no olvides marcar la opci\xf3n: Build the ... SDK.\n\nUna vez termine el largo proceso de construcci\xf3n, hay que ubicarse en bin/targets/ar71xx/generic donde deber\xeda estar un archivo comprimido con el SDK reci\xe9n construido.\n\n--> En general, es preferible usar la primera forma y s\xf3lo descargar el SDK precompilado desde el repositorio oficial de LEDE.\n\n \nEl c\xf3digo fuente de Babeld se puede obtener desde https://www.irif.fr/~jch/software/files/babeld-1.8.0.tar.gz o descargando la versi\xf3n de desarrollo con:\n\n git clone git://github.com/jech/babeld.git\n\nCon todo lo necesario, ya podemos empezar a construir Babeld.\n\n<hr id="Babeld">\n \nPrimero como en todo programa nos ubicamos en el directorio ra\xedz del c\xf3digo fuente, luego de clonar u obtener Babeld en el directorio ra\xedz existe un archivo Makefile, con instrucciones b\xe1sicas para la construcci\xf3n del programa.\n\nEn el Makefile, la regla con la instrucci\xf3n de compilaci\xf3n:\n\n babeld: $(OBJS)\n $(CC) $(CFLAGS) $(LDFLAGS) -o babeld $(OBJS) $(LDLIBS)\n\nAh\xed la variable $(CC) es la que se puede reemplazar para que se utilice el compilador cruzado del SDK de LEDE.\n\nBabeld no utiliza bibliotecas adicionales y todas las necesarias (libc) vienen en el SDK asi que para construirlo solamente apuntamos al compilador cruzado del SDK que tenemos, esto se hace con el comando:\n\nmake CC=/ubicacion/del/SKD/staging_dir/toolchain-mips_24kc_gcc-5.4.0_musl/bin/mips-openwrt-linux-musl-gcc PLATFORM_DEFINES=\&#39;-march=mips32\&#39;\n\nLa parte que dice /ubicacion/del/SKD/ apunta a la ubicaci\xf3n en nuestro compuador donde descomprimimos el SDK, ah\xed dentro esta staging_dir/ y ah\xed deber\xeda estar el toolchain para la arquitectura, en este caso mips_24kc.\n\nPara comprobar que en este directorio se encuentra el compilador cruzado:\n\n :::bash\n ./ubicacion/del/SKD/staging_dir/toolchain-mips_24kc_gcc-5.4.0_musl/bin/mips-openwrt-linux-gcc --version\n\nUsaremos el compilador gcc-5.4.0 cuyo archivo ejecutable es mips-openwrt-linux-gcc y si en la pantalla aparece un mensaje con la version 5.4.0 el archivo es correcto, por ejemplo:\n\n mips-openwrt-linux-gcc (LEDE GCC 5.4.0 r3664-4124847) 5.4.0\n\nAhora, construimos con:\n\n :::bash\n make CC=/ubicacion/del/SKD/staging_dir/toolchain-mips_24kc_gcc-5.4.0_musl/bin/mips-openwrt-linux-musl-gcc \\n\tPLATFORM_DEFINES=\'-march=mips32\'\n\nEl proceso deber\xeda terminar r\xe1pidamente y deber\xeda haber un archivo ejecutable con nombre babeld. Este archivo se puede ejecutar en un enrutador con LEDE, para comprobar que la arquitectura objetivo del ejecutable es correcta usamos:\n\n :::bash\n file babeld\n\nQue deber\xeda mostrar:\n\n :::bash\n babeld: ELF 32-bit MSB executable, MIPS, MIPS32 rel2 version 1, dynamically linked, interpreter /lib/ld-musl-mips-sf.so.1, not stripped\n\nAhora solo hace falta probarlo copiando el archivo babeld al enrutador digamos en el directorio /tmp/ y luego ejecutarlo con:\n\n ./babeld\n\n--> De esta forma hemos usado el compilador cruzado directamente para construir desde el c\xf3digo fuente, de forma similar se construyen programas para los enrutadores y cada programa puede tener sus necesidades espec\xedficas. Pero con esto podr\xedamos modificar el c\xf3digo de Babeld y probar estos cambios directamente en el enrutador.\n\n<hr id="Babeld-lor">\n \nAhora podemos usar el SDK para construir una versi\xf3n modificada de Babeld llamada Babeld-lor, esta versi\xf3n en desarrollo pretende implementar un m\xe9todo de autenticaci\xf3n en el protocolo Babel para protegerlo contra ataques de suplantaci\xf3n de identidad.\n\n \nBabeld-lor utiliza descifrado RSA y una clave p\xfablica RSA generada por una entidad central para autenticaci\xf3n, por eso es necesario copiar o tener instalada la biblioteca mbedtls en el enrutador.\n\nUna forma sencilla de instalarla es mediante el mediante manejador de paquetes de LEDE, en el enrutador:\n\n opkg install libmbedtls\n\nPara m\xe1s detalles sobre esta biblioteca revisa este post como construir mbedtls.\n\n \nSe puede copiar a la partici\xf3n /tmp los archivos necesarios para la biblioteca mbedtls. El siguiente procedimiento es una soluci\xf3n temporal y cada que el enrutador se reinicie se debe volver a repetir cierta parte.\n\n :::bash\n # Conect\xe1ndose al enrutador que digamos tiene la IP: 192.168.1.1\n ssh root@192.168.1.1\n\t# una vez dentro el enrutador\n ### obteniendo mbdetls \n cd /tmp/\n wget https://downloads.lede-project.org/releases/17.01.4/packages/mips_24kc/base/libmbedtls_2.6.0-1_mips_24kc.ipk\n mv libmbedtls_2.6.0-1_mips_24kc.ipk libmbedtls_2.6.0-1_mips_24kc.tar.gz\n tar -zxvf libmbedtls_2.6.0-1_mips_24kc.tar.gz\n tar -zxvf data.tar.gz\n cd usr/lib\n\tmkdir /tmp/mbedtls\n cp libmbedcrypto.so.0 libmbedtls.so.10 libmbedx509.so.0 /tmp/mbedtls\n ######\n # creando un enlace simbolico para que el sistema apunte a los archivos correctos\n cd /usr/lib\n ln -s /usr/lib/libmbedcrypto.so /tmp/mbedtls/libmbedcrypto.so.0\n ln -s /usr/lib/libmbedtls.so /tmp/mbedtls/libmbedtls.so.10\n ln -s /usr/lib/libmbedx509.so /tmp/mbedtls/libmbedx509.so.0\n\nAhora la biblioteca libmbedtls esta instalada temporalmente en el sistema, pero al apagar el equipo la partici\xf3n temporal /tmp se vaciar\xe1 y tiene que repetir la parte que dice "### obteniendo mbdtls".\n\n \nComo Babeld-lor utiliza una clave p\xfablica RSA de una entidad central, es necesario que el enrutador la tenga para poder descifrar las actualizaciones de rutas y autenticarlas. Tambi\xe9n, se requiere que cada enrutador cuente con un conjunto de tokens de autenticaci\xf3n.\n\n \nPrimero se debe crear el par de claves p\xfablica y privada y lo podr\xedamos hacer en nuestra computadora, esta clave debe ser creada con la biblioteca mbedtls, una forma r\xe1pida de construir mbedtls est\xe1 la secci\xf3n "construyendo mbedtls" del post: probando mbedtls\n\nUna vez lo tengamos, en el directorio del c\xf3digo fuente de mbedtls:\n\n cd programs/pkey\n ./gen_key\n\nQue generar\xe1 el par de claves de la entidad central.\n\nAhora podemos utilizar este script para generar tokens cifrados para direcciones IP dadas:\n\n :::bash\n DIR_BASE=$PWD\n DIR_RSA=/Ruta/donde/esta/mbedtls-2.4.2/programs/pkey # modificar esto segun convenga\n ARCH_TOKEN=$DIR_RSA/result-enc.txt\n DIR_DEST=$DIR_BASE/tokens\n PREFIJO=$1\n \n echo "preparando para prefijo $PREFIJO"\n \n if [ ! -e tokens ]\n then\n mkdir tokens\n fi\n \n if [ -e $DIR_DEST/$PREFIJO.ctxt ]\n then\n echo "borrando tokens/$PREFIJO.ctxt"\n rm $DIR_DEST/$PREFIJO.ctxt\n fi\n \n for((i=0;i<100;i++))\n do\n B=$(head -c 19 /dev/urandom | sha1sum | head -c 6 | tr "[a-z]" "[0-9]")\n if [ $i -lt "10" ]\n then\n CAD=$PREFIJO""$B"0"$i\n else\n CAD=$PREFIJO""$B$i\n fi\n \n echo "mensaje: $CAD"\n \n # cifrando\n cd $DIR_RSA\n ./rsa_encrypt_con_clave_privada $CAD > /dev/null\n #$PPK "$CAD" 2> /dev/null\n TOKEN=$(cat $ARCH_TOKEN | tr -d \' \')\n #echo "TOKEN: $TOKEN"\n # quitando newlines\n while read -r linea\n do\n L=$(echo "$linea"| tr -d \' \' )\n #echo -n "$L"\n echo -n "$L" >> $DIR_DEST/$PREFIJO.txt\n done < $ARCH_TOKEN\n echo >> $DIR_DEST/$PREFIJO.txt\n done\n \n # eliminando ^M\n cat $DIR_DEST/$PREFIJO.txt | tr -d $\'\r\' > $DIR_DEST/$PREFIJO.ctxt\n rm $DIR_DEST/$PREFIJO.txt\n \n cp $DIR_RSA/rsa_pub.txt $DIR_DEST/\n \n echo "Hecho."\n exit 0\n\nGuardamos este script como digamos "gk.sh", ahora creamos los tokens con:\n\n :::bash\n bash gk.sh 192.168.1.1\n\nQue generar\xe1 un total de 100 tokens de autenticaci\xf3n para la direcci\xf3n ip 192.168.1.1 en una carpeta tokens\n\n \nAhora necesitamos descargar el c\xf3digo fuente de Babeld-lor, por ejemplo de la rama de desarrollo forked-updateTLV:\n\n git clone https://notabug.org/strysg/babeld-lor/src/forked-updateTLV\n\nEste repositorio contiene un Makefile para compilar usando mbedtls y un SDK.\n\nTambi\xe9n un script llamado set-up.sh que apunta a un SDK en el directorio actual y como podr\xedamos tener el SDK de LEDE en otro directorio podemos crear un enlace simb\xf3lico al SDK con:\n\n ln -s /ruta/donde/esta-el-SDK/ SDK\n\nEl script set-up.sh extrae la clave p\xfablica, los tokens de autenticaci\xf3n, el ejecutable construido y los copia al enrutador en la carpeta /tmp, no instala Babeld-lor ya que estamos solamente haciendo una prueba.\n\nAntes de ejecutar el script deber\xedamos copiar el contenido de la carpeta tokens donde se generaron las claves de autenticaci\xf3n al directorio donde descargamos Babeld-lor, concretamente en un directorio pruebas/tokens dentro el c\xf3digo fuente de Babeld-lor.\n\nFinalmente para construir babeld-lor usamos:\n\n ./set-up.sh export 192.168.1.1\n\nQue construir\xe1 el programa usando el SDK, y copiar\xe1 lo necesario al enrutador con la direcc\xedon IP 192.168.1.1.\n\nPara probar que esto funciona en el enrutador:\n\n :::bash\n cd /tmp/\n # para que babeld-lor exporte las rutas por la interfaz wifi wlan0\n ./babeld wlan0\n # o si queremos mas verbosidad\n ./babeld -d 2 wlan0\n # Para utlizar el archivo de configuracion por defecto\n ./babeld -c /var/etc/babeld.conf -d 2\n\nSi funciona ahora se puede probar y modificar Babeld-lor a gusto.\n\n', [u'proyectos', u'tutoriales'])

]]>
Construir firmware para enrutadores con buildroot https://rmgss.net/posts/construir-firmware-para-enrutadores-con-buildroot https://rmgss.net/posts/construir-firmware-para-enrutadores-con-buildroot Sun Mar 31 15:22:11 2019 text/html Rodrigo Garcia software , tutoriales , redes_libres (u'Aqu\xed se muestra una forma de construir una imagen de firmware para grabarla en un dispositivo enrutador o en uno embebido, todo esto usando el sistema de construcci\xf3n "Build root" de sistemas operativos libres como openwrt, lede o librecmc.\n\nEn otras palabras, construir/compilar el sistema operativo manualmente y ponerlo en un enrutador compatible.\n\nAlgunas ventajas de usar "Build root" son:\n\n La generaci\xf3n de la imagen es altamente personalizable y tendr\xe1 los programas que escojamos en el proceso de construcci\xf3n.\n Construir el conjunto de paquetes e incluirlos en la imagen resultante o en paquetes por separado.\n Constuir y poder usar la cadena de herramientas (en ingl\xe9s toolchain) para hacer compilaci\xf3n cruzada.\n Obtener el SDK para hacer compilaci\xf3n cruzada desde otra computadora.\n Obtener el Image generator para poder cocinar im\xe1genes de firmware m\xe1s r\xe1pidamente desde otra computadora.\n Constuir los programas y mantenerlos en paquetes instalables o incluirlos por defecto en la imagen generada.\n Generar un repositorio descargable de paquetes e im\xe1genes de firmware personalizadas generadas como este: https://librecmc.rmgss.net\n Hacer modificaciones/mejoras al sistema operativo resultante.\n\nEste alto nivel de flexibilidad es justo lo que se necesita para proyectos de redes libres o para personas que necesitan hacer modificaciones a nivel de sistema operativo en sistemas embebidos.\n\n \nBuild root, es una colecci\xf3n de Makefiles y parches que permiten f\xe1cilmente generar una cadena de herramientas y el sistema de archivos ra\xedz para sistemas embebidos, usando una biblioteca C est\xe1ndar y descargando el kernel linux. [^1]\n\nEste sistema de construcci\xf3n tiene una interfaz c\xf3moda que permite seleccionar los programas que necesitemos y los dispositivos objetivos. Los Makefiles son archivos con recetas de construcci\xf3n de software, y el sistema de construcci\xf3n Build root los utiliza para constuir los programas que seleccionemos.\n\n-- Para el resto de este tutorial se utilizar\xe1 el sistema de construcci\xf3n de librecmc, librecmc es una distribuci\xf3n GNU/Linux para sistemas embebidos que contiene solamente software libre.\n\n \nHardware:\n\n De 8 a 10 GB de espacio en disco duro.\n 4 GB de RAM , aunque yo lo he probado con 2 GB de RAM pero ha tardado mucho.\n\nSoftware:\n\n Sistema operativo GNU/Linux\n GNU GCC / GCC-C++\n build-essential\n flex, gawk, wget, unzip\n ncurses-dev (ncurses5-devel, etc..)\n libghc-zlib-dev, libssl-dev, patch, perl5, subversion, git-core\n\nInternet:\n\nUna buena conexi\xf3n a internet por que la descarga puede tranquilamente superar los 2 GB, en mi caso al no tener internet en casa he usado un Servidor con buena conexi\xf3n.\n\nAqu\xed esta la referencia oficial.\n\n \nSe instalan los paquetes build-essential, gcc, git-core, etc como se indican en los prerequisitos.\n\nLuego queda descargar el sistema de construcci\xf3n en si mismo como se indica en el manual de librecmc:\n\n :::bash\n\tgit clone https://gogs.librecmc.org/libreCMC/libreCMC.git\n\nEsto descargar\xe1 la colecci\xf3n de Makefiles y parches necesarias para el proceso de construcci\xf3n, la estructura de directorios descargada se divide en carpetas:\n\n tools: Contiene las instrucciones para descargar las herramientas de construcci\xf3n para la imagen.\n toolchain: Contiene las instrucciones para descargar las cabeceras del kernel, la biblioteca C, binutils, el compilador y el depurador.\n target: Instrucciones de construci\xf3n para la imagen de fimrware y para el kernel.\n package: Los makefiles y parches para todos los paquetes principales, estos Makefiles tienen su propia sintaxis diferente a la herramienta make.\n scripts: Scripts perl que se encargan del manejo de paquetes openwrt.\n dl: Directorio donde se descargan los tarballs (archivos .tar) con c\xf3digo fuente.\n build_dir: Donde todas las herramientas user-space ser\xe1n "cross-compiladas".\n bin: Directorio donde se guardan las im\xe1genes de firmware generedas y tambi\xe9n los paquetes .ipk\n\nReferencia utilizada: http://www.ccs.neu.edu/home/noubir/Courses/CS6710/S12/material/OpenWrt_Dev_Tutorial.pdf\n\n \nEntramos al directorio donde hemos clonado el c\xf3digo de buildroot, cd libreCMC y ejecutamos:\n\n :::bash\n ./scripts/feeds update -a\n\t./scripts/feeds install -a\n\nEsto actualizar\xe1 la lista de todos los paquetes y har\xe1 que sean disponibles para seleccionar en el men\xfa de construcci\xf3n.\n\n \nUtilizamos\n\n :::bash\n make menuconfig\n\t\nEsto desplegar\xe1 un men\xfa con interfaz en modo texto c\xf3modo para configurar la construcci\xf3n.\n\nmake menuconfig\n\nNavegar por el men\xfa se hace con las flechas del teclado, presionando enter para ingresar a una secci\xf3n, esc para salir al anterior, espacio para seleccionar un programa para que se incluya en la imagen generada, m para modularizar o marcar un programa y que se genere un paquete .ipk en lugar de incluirlo en la imagen generda por defecto.\n\n \nEl men\xfa desplegado tiene varias secciones y debemos empezar indicando la arquitectura objetivo, esta debe ser la arquitectura del microprocesador del router o dispositivo embebido para el que queremos crear una imagen de firmware.\n\nPara este ejemplo construiremos la imagen para el enrutador TP-Link TL-MR3020, ingresamos al menu "Target System" y marcamos Atheros AR7xxx/AR9xxx que corresponde a la arquitectura para este enrutador.\n\nLuego hay que especificar el objetivo espec\xedfico en este caso en el menu Target Profile, seleccionaremos TP-LINK TL-MR3020.\n\n \nAntes de continuar para seleccionar los programas que contendr\xe1 la imagen vamos a seleccionar las opciones:\n\n Build the librecmc Image Builder: generar\xe1 el Image Builder para poder descargarlo y generar im\xe1genes desde otra computadora y m\xe1s rapidamente.\n Inlcude package repositories: Para que el Image Builder generado use a repositorios externos para paquetes .ipk.\n Build the librecmc SDK: Construir\xe1 el SDK para poder descargarlo y usarlo en otra computadora, el SDK es \xfatil para compilar programas para el enrutador objetivo.\n Package the librecmc-based toolchain: Empaquetar el toolchain (cadena de herramientas).\n\nEste paso es opcional y la imagen se generar\xeda de igual forma incluso si no lo seleccionamos.\n\n \nHay una gran variedad de programas que podemos incluir, por defecto est\xe1n seleccionados programas b\xe1sicos para utlizar el dispositvo y los estrictamente necesarios como libc y algunos controladores no pueden excluirse de la selecci\xf3n ya que el men\xfa no da esa opci\xf3n.\n\nLos programas est\xe1n bien clasificados por secciones y debemos ingresar a cada una de ellas para seleccionarlos, por ejemplo en Base System est\xe1n marcados libc, busybox, uci, firewall, etc. Se puede prescindir de algunos de ellos por ejemplo no incluir el firewall desmarc\xe1ndolo.\n\nLa selecci\xf3n de programas es enteramente nuestra responsabilidad y podemos experimentar con muchas opciones, por ejemplo no incluir una interfaz de configuraci\xf3n luci, no incluir controladores para wifi, no incluir un servidor dhcp, incluir m\xf3dulos para controlar dispositovs usb, manejar los leds del aparato, incluir utilidades para monitorizar tr\xe1fico de red, estad\xedsticas de conexi\xf3n como iperf3, etc. Las combinaciones ser\xe1n a nuestra elecci\xf3n y tenemos toda la libertad de probar bajo nuestro propio riesgo.\n\nLo que se debe tener en cuenta es que no todos los paquetes pueden ser incluidos en la imagen del firmware generada esto por limitaciones de espacio del mismo dispositivo. En el caso del TL-MR3020 este s\xf3lo cuenta con 4MB de memoria FLASH, y no se puede hacer caber todos esos programas en tan peque\xf1o espacio de almacenamiento.\n\nPor eso existe la opci\xf3n de modularizar los programas, esto es presionando M para que estos programas se empaquten como .ipk y luego se puedan instalar manualmente con opkg install nombre_del_paquete en el dipositivo una vez se haya transferido la imagen y si tiene espacio disponible.\n\nUna vez termines de seleccionar los programas presiona esc hasta salir y aparecer\xe1 un mensaje que pregunta si va a guardar las configuraciones y tenemos que indicarle que SI lo haga. Estas configuraciones se guardar\xe1n en un archivo con nombre .config en el mismo directorio y es buena idea hacerle copias para recuperar configuraciones.\n\n \nPara aprovechar al m\xe1ximo estos 4MB de memoria donde se debe almacenar el sistema operativo base y programas, openwrt y otros como librecmc y lede utlizan un layout especial en la memoria [^2].\n\nDurante el arranque del sistema cuando instalemos la imagen generada, se crea un sistema de archivos de s\xf3lo lectura squashfs para comprimir el sistema base y un sistema de archivos JFFS2 de lectura/escritura para datos adicionales. Ambos se combinan y montan en un punto de montaje /overlay, para el usuario del sistema se ve como un sistema de archivos \xfanico y usable. [^3]\n\nSquashFS es un sistema de archivos de s\xf3lo lectura y est\xe1 pensado para su uso como sistema de archivos gen\xe9rico de solo lectura y en dispositivos de bloques/sistemas de memoria limitados [^4], en SquashFS adem\xe1s se incluye un sistema de recuperaci\xf3n en caso de "mal configurar" el router, con esta utilidad se puede entrar a un modo de recuperaci\xf3n para arreglar el sistema. Adem\xe1s algunos programas y datos de SquashFS y JFFS2 se descomprimen en la memoria RAM para ser ejecutados desde alli. En el caso del TL-MR3020 se tiene 32 MB de RAM.\n\nPuedes revisar https://wiki.openwrt.org/doc/techref/flash.layout para ver la distrubici\xf3n de la memoria FLASH con mayor detalle.\n\n \nAhora solo queda emepezar la construcci\xf3n y se hace con:\n\n :::bash\n\tmake\n\nO para una visi\xf3n mucho m\xe1s completa de lo que pasa:\n\n :::bash\n make V=s\n\nEste proceso puede tardar mucho y es un trabajo intensivo para el CPU que puede tomar muchas horas dependiendo la cantidad de programas seleccionados y dispositivos objetivos.\n\nSi quieres dejar este trabajo como tarea en segundo plano y adem\xe1s necesitas cerrar la terminal actual, puedes utilizar:\n\n nohup make &\n\t\nQue enviar\xe1 el proceso de construcci\xf3n en segundo plano y continuar\xe1 incluso si cerramos la terminal actual, adem\xe1s puedes usar ionice para aumentar/reducir prioridad a la tarea o cpulimit para limitar el uso del CPU.\n\nEl proceso puede fallar y si as\xed lo hace debes usar la opci\xf3n make V=s para ver el detalle.\n\nCuando hagas make, se har\xe1:\n\n1. Construir - automake , autoconf, sed, cmake.\n2. Construir los binutils - ld, as ,etc\n3. Construir el toolchain - gcc, g++, etc\n4. Construir los m\xf3dulos del kernel linux.\n5. Constuir los paquetes base y feed.\n6. Constuir la imagen del kernel.\n7. Generar la imagen del firmware.\n\nReferencia: https://wiki.openwrt.org/about/toolchain#openwrt_build_system_build_sequence\n\n \nLa imagen generada deber\xeda estar en la carpeta bin/targets del directorio ra\xedz donde hemos descargado Build Root, m\xe1s concretamente targets/ar71xx/ por ser la arquitectura ar71xx.\n\nUn ejemplo del resultado est\xe1 en https://librecmc.rmgss.net/\n\nAhora seleccionaremos la imagen con nombre librecmc-ar71xx-generic-tl-mr3020-v1-squashfs-factory.bin, cuando termina -factory.bin se trata de la imagen que podemos grabar en el enrutador TL-MR3020 para reemplazar el sistema operativo actual.\n\nEl proceso de grabaci\xf3n no esta contemplado en este tutorial pero puedes revisar los siguientes enlaces:\n\n https://wiki.lapaz.laotrared.net/guias/instalar_openwrt#paso_0\n http://lamurraydemas.blogspot.com/2014/03/actualizar-tp-link-tl-mr3020-con-openwrt.html\n http://kurup87.blogspot.com/2014/09/installing-open-wrt-in-tp-link-mr3020.html\n\n\n----\n\n \nEl proceso de construci\xf3n no se limita a generar la imagen de firmware, tamb\xeden tengamos en cuenta lo siguiente:\n\n staging_dir/: Contiene el compilador y el toolchain (la cadena de herramientas) para la arquitectura seleccionada, el toolchain est\xe1 en este caso en staging_dir/toolchain-mips_24kc_gcc-5.4.0_musl-1.1.16/bin/ y podemos usarlo para hacer compilaci\xf3n cruzada y crear/construir programas para que se ejecuten en el router.\n bin/packages/: Contiene los paquetes .ipk que hemos seleccionado para instalarlos manualmente.\n bin/targets/: Contiene el Image Generator o Image Builder para construir firmware desde otras computadoras con GNU/Linux, usando los paquetes y programas que acabamos de construir, tambi\xe9n contiene el SDK para usarlo en otras computadoras con GNU/Linux y construir/compilar programas para el dispositivo objetivo que hemos selccionado.\n* dl/: Contiene los tarballs con el c\xf3digo fuente de los programas seleccionados.\n\nCon Build root hemos generado una serie de herramientas para generar sistemas operativos a medida gracias a las herramientas libres que proveen proyectos como openwrt, lede o librecmc.\n\nAdem\xe1s tenemos la posiblidad de tener el control y conocimiento entero de todo el sofware que opera en el enrutador.\n\nEspero este tutorial te haya servido, lo actualizar\xe9 con informaci\xf3n adicional o haciendo correcciones.\n\n[^1]: https://wiki.openwrt.org/about/toolchain\n[^2]: https://wiki.openwrt.org/doc/techref/flash.layout\n[^3]: https://wiki.openwrt.org/doc/techref/filesystems#boot_process\n[^4]: http://squashfs.sourceforge.net/\n\n', [u'software', u'tutoriales', u'redes_libres'])

]]>
Como publicar un paquete python al repositorio pypi https://rmgss.net/posts/como-publicar-un-paquete-python-al-repositorio-pypi https://rmgss.net/posts/como-publicar-un-paquete-python-al-repositorio-pypi Sun Mar 31 15:22:11 2019 text/html Rodrigo Garcia software , tutoriales , python , proyectos (u'En este post veremos como publicar un paquete de software al repositorio pypi.python.org (Python Package Index), as\xed estar\xe1 disponible p\xfablicamente y para que cualquiera lo instale s\xf3lo har\xe1 falta usar pip install nombre_del_paquete.\n\nSi tienes un m\xf3dulo o paquete python que te ha servido mucho, lo hayas escrito tu o con amigos, puedes compartirlo en el repositorio https://pypi.python.org y as\xed le servir\xe1 a cualquiera que lo necesite. En este post veremos el proceso paso a paso, empecemos.\n\n \nPypi.python.org es un repositorio p\xfablico que alberga software escrito en el lenguaje de programaci\xf3n python. A esta fecha hay m\xe1s de 129000 paquetes disponibles.\n\nEste repositorio facilita enormente en el desarrollo de software, por que para incluir uno o varios m\xf3dulos, s\xf3lo hace falta utilizar pip en un entorno de sistema o virtual para un programa que estemos escribiendo.\n\nPor ejemplo para este sitio web, utilizo el micro-framework Flask y otros paquetes python, de no ser por pip para instalarlo tendr\xeda que posiblemente descargarme el c\xf3digo fuente y hacer una serie de pasos manuales para que esta p\xe1gina web pueda utilizar sus funcionalidades. Pero gracias a pip y el repositorio pypi.python.org para instalar flask se puede hacer comdamente en un entorno virtual:\n\n :::bash\n mkdir nombre_proyecto\n\tcd nombre_proyecto\n virtualenv venv\n source venv/bin/activate\n # con la siguiente l\xednea se descargar\xe1 e instalar\xe1 todo el framework Flask\n # en el entorno virtual de nuestra computadora (la carpeta venv)\n # y estar\xe1 listo para usarse.\n pip install flask\n\n\n \nEste el paso m\xe1s largo e importante, una vez tengamos el m\xf3dulo python funcional es cuando debemos pensar en si lo vamos a compartir con el resto del mundo. Para este ejemplo he escrito un peque\xf1o paquete en python llamado simplemotds.\n\n \nEl paquete simplemotds ayuda a obtener un mensage del d\xeda y que cambie autom\xe1ticamente, de ah\xed el nombre simple motds (motd = Message Of The Day).\n\nB\xe1sicamente lo que hace es leer un directorio con archivos donde cada uno tiene un mensaje o consejo del d\xeda, al llamar al m\xe9todo getMotdContent(), este devuelve el contenido del archivo seleccionado para el d\xeda de hoy. Al d\xeda siguiente este mensaje cambiar\xe1 autom\xe1ticamente.\n\nAdicionalmente a este m\xf3dulo se le puede configurar f\xe1cilmente para que el mensaje cambie por ejemplo al cabo de un mes, una semana, una hora o hasta un minuto. La selecci\xf3n del mensaje tamb\xeden puede cambiarse.\n\nPara m\xe1s detalles puedes ver el c\xf3digo fuente de python-simplemotds y una demostraci\xf3n de c\xf3mo funciona se la ve en esta misma p\xe1gina que muestra los consejos para cada d\xeda utilizando simplemotds.\n\n \nHay un buen tutorial para empaquetar software python [1] , para el ejemplo de simplemotds, tenemos la siguiente estrucutra:\n\n :::bash\n \u251c\u2500\u2500 LICENSE.txt\n \u251c\u2500\u2500 MANIFEST.in\n \u251c\u2500\u2500 README.md\n \u251c\u2500\u2500 setup.cfg\n \u251c\u2500\u2500 setup.py\n \u2514\u2500\u2500 simplemotds # esta es la carpeta con el software en si\n \u251c\u2500\u2500 config.json\n \u251c\u2500\u2500 init.py\n \u251c\u2500\u2500 messages \n \u2502\xa0\xa0 \u251c\u2500\u2500 m1.html\n \u2502\xa0\xa0 \u251c\u2500\u2500 m2.html\n \u2502\xa0\xa0 \u2514\u2500\u2500 m3.html\n \u2514\u2500\u2500 simplemotds.py\n\nIndependientemente del m\xf3dulo python que desarrollemos, son obligatorios los archivos: LICENSE.txt, MANIFEST.in, README y setup.py. Estos son la meta-data que pypi.python.org usar\xe1 para identificar nuestro paquete y deben estar un directorio arriba de nuestro m\xf3dulo. Algo que difiere es que el archivo README deber\xeda estar en formato rst seg\xfan la documentaci\xf3n oficial de python [2] .\n\nEl paquete simplemotds es tan simple que s\xf3lo tiene un archivo de c\xf3digo fuente simplemotds.py aunque tambi\xe9n tiene otros archivos como config.json y un directorio messages donde hay unos mensajes de prueba, por supuesto para que python interprete el directorio como un m\xf3dulo est\xe1 el archivo __init__.py.\n\n \nEste archivo es muy importante y se utiliza para configurar la instalaci\xf3n del paquete, para nuestro caso su contenido es:\n\n :::python\n from setuptools import setup, find_packages\n \n setup(\n name = \'simplemotds\',\n packages = [\'simplemotds\'], \n include_package_data=True, # muy importante para que se incluyan archivos sin extension .py\n version = \'0.23\',\n description = \'Configurable package that returns the message of the day (motd)\',\n author=\'Rodrigo Garcia\',\n author_email="strysg@riseup.net",\n license="GPLv3",\n url="https://github.com/strymsg/python-simplemotds",\n classifiers = ["Programming Language :: Python :: 3",\\n\t\t "License :: OSI Approved :: GNU General Public License v3 (GPLv3)",\\n\t\t\t"Development Status :: 4 - Beta", "Intended Audience :: Developers", \\n\t\t\t"Operating System :: OS Independent"],\n\t\t)\n\nPara empaquetar este proyecto usaremos la biblioteca setuptools y es mejor tenerla instalada en el sistema en su versi\xf3n m\xe1s reciente, si usamos una distribuci\xf3n de GNU linux basada en debian podr\xedamos instalarlo con sudo apt install python-setuptools, pero puede que el paquete debian no sea actualizado, en todo caso podr\xedamos utilizar pip.\n\n pip install -U pip setuptools # que instalar\xe1 setuptools en el sistema\n\n name: Es el nombre del paquete.\n packages: Es la lista de paquetes que contiene nuestro m\xf3dulo, para el caso de simplemotds s\xf3lo existe un paquete que se llama simplemotds.\n include_package_data: Por defecto setuptools s\xf3lo empaqueta archivos con estensi\xf3n .py, en este cas se utiliza un archivo de configuraci\xf3n config.json y varos archivos de prueba .html, esta variable debe ser True para que sean incluidos.\n version: La versi\xf3n del paquete (debemos cambiarla cada que necesitemos actualizar.\n description: Una descripci\xf3n corta\n author y author_email\n license: Obligatorio especificar una licencia de software libre o al menos c\xf3digo abierto, puedes revisar esta gu\xeda si no sabes cu\xe1l escoger. url: Sitio web donde se puede revisar el proyecto.\n calssifiers: Sirven para clasificar apropiadamente tu paquete en pypi.python.org [1] .\n\nHay m\xe1s opciones [2] , [3] .\n\n \nEste archivo es para especificar archivos adicionales [1] , para este caso queremos incluir el archivo config.json y los mensajes de prueba dentro el directorio messages/.\n\n recursive-include simplemotds config.json\n recursive-include simplemotds/messages .html\n\nCon esta configuraci\xf3n b\xe1sica tenemos lo necesario para empaquetar el software python y luego subirlo.\n\n \nPara empaquetar ejecutamos en el directorio ra\xedz del proyecto:\n\n python setup.py sdist\n\nLo que ocurrir\xe1 ser\xe1 que se interpreta setup.py se aplican las configuraciones y se leer\xe1 el archivo MANIFEST.in para incluir archivos adicionales. Una vez se termina, todo el m\xf3dulo python quedar\xe1 dentro un archivo .tar.gz dentro el directorio dist/ que setup crear\xe1.\n\nEn el caso de simplemotds se ha empaquetado en simplemotds-0.23.tar.gz, deber\xedamos revisar en el archivo comprimido si esta todo lo que se requiere.\n\n \nPrimero es necesario que tengamos una cuenta de usuario en pypi.python.org, afortunadamente el registro es libre.\n\n \nUna vez hayamos creado la cuenta para facilitar el proceso de autenticaci\xf3n con pypi.python.org, podemos incluir las credenciales de la cuenta que tengamos en pypi.python.org en un archivo. Usualmente el archivo deber\xeda estar en el directorio HOME del usuario actual es decir $HOME/.pypirc, luego en ese archivo poner las credenciales de la siguiente manera:\n\n [pypi]\n username = <usuario>\n password = <password>\n\nPara que el archvivo este m\xe1s seguro:\n\n :::bash\n chmod 600 $HOME/.pypirc\n\nUna nota sobre passwords [4] .\n\n \nPara subir el paquete he utilizado la herramienta twine que ayuda a interactuar con PyPI enviando las credenciales, y subiendo el paquete que preparamos antes al repositorio PyPI.\n\nTwine no viene por defecto con python y por eso hay que instalarlo en el sistema, usualmente se deber\xeda poder con sudo apt install twine, pero en el caso de mi distribuci\xf3n la versi\xf3n de twine estaba muy desactualizada y al tratar de usarlo retornaba error 401 [5] .\n\nPara solucionarlo he tenido que desinstalar twine del sistema e instalar la \xfaltima versi\xf3n estable con pip:\n\n pip install -U pip setuptools twine\n\nLuego confirmar la versi\xf3n de twine con twine --version que deber\xeda devolver 1.9.1 o superior\n\nNota: En mi sistema (basado en ubuntu 16) hubo el problema que al desinstalar twine con sudo apt-get purge twine e instalarlo con pip, la referencia a la nueva versi\xf3n de twine no se resolv\xeda correctamente, entonces uso whereis twine que me dice que el binario de twine est\xe1 en /usr/local/bin/twine. Para llamar al twine correcto uso /usr/local/bin/twine seguido de las opciones.\n\n \nAhora usamos:\n\n twine upload dist/\n\nQue subir\xe1 a pypi.python.org lo que tengamos en el directorio dist/ que es donde qued\xf3 empaquetado nuestro paquete python.\n\nUna vez se haga esto correctamente deber\xedamos comprobar ingresando a https://pypi.python.org y buscando por el nombre del paquete que hemos subido reci\xe9n.\n\n \nEn pypi.python.org es necesario indicar expl\xedcitamente que versi\xf3n de nuestro paquete estar\xe1 disponible p\xfablicamente. Par eso debemos ingresar con nuestra cuenta de usuario al sitio y revisar la p\xe1gina relacionada a nuestro paquete, luego liberarla manualmente. Para el caso de simplemotds, la imagen siguiente muestra como hacerlo.\n\nsimplemotds_en_pypi.python.org\n\nComo se ve, se listan las versiones que he subido de simplemotds, finalmente para liberar la \xfaltima versi\xf3n solo se hace click en Update Releases.\n\nBien, ahora si desde cualquier proyecto utilizamos\n\n pip search simplemotds\n\nNos devuelve:\n\n simplemotds (0.23) - Configurable package that returns the message of the day\n (motd)\n\nEsto indica que el paquete simplemotds se ha subido correctamente al \xedndice de paquetes python https://pypi.python.org y por eso para cualquier proyecto lo podemos instalar con:\n\n pip install simplemotds\n\n \nPuede que subir un paquete la primera vez sea algo tedioso, sin embargo como vimos existen las herramientas necesarias para hacerlo bien y facilitar el proceso.\n\nSi tienes un pedazo de c\xf3digo tuyo escrito en python que funcione bien como m\xf3dulo, piensa en compartirlo con todo el mundo o tambi\xe9n si te gusta un m\xf3dulo de python en especial haz tu aporte para mejorarlo y que otr@s se beneficien ;)\n\n \n1. Gu\xeda detallada para empaquetar bibliotecas python y subirlas a pypi.org\n2. Documentaci\xf3n oficial de python para empaquetar y distribuir paquetes\n3. Documentaci\xf3n de setuptools\n4. Post r\xe1pido para subir paquetes (desactualizado pero \xfatil como referencia).\n5. Error 401 al enviar paquetes (hilo en stackoverflow)\n', [u'software', u'tutoriales', u'python', u'proyectos'])

]]>
Charla jugando con redireccion en bash https://rmgss.net/posts/charla-jugando-con-redireccion-en-bash https://rmgss.net/posts/charla-jugando-con-redireccion-en-bash Sun Mar 31 15:22:11 2019 text/html Rodrigo Garcia software , tutoriales , bash (u'He propuesto dar esta charla para el Debian Day 2017 en La Paz y este art\xedculo es para quienes no puedan asistir a la charla o quieren revisarla con m\xe1s calma.\n\nMostrar\xe9 las formas en las que he estado jugando con operadores de redireccionamineto y tuber\xedas en bash como interprete de comandos en GNU/Linux. (descargar las diapositivas (155KB))\n\n Brevemente sobre file-descriptors\n Sobre operadores de redirecci\xf3n\n Ejemplos de utilidad\n\n<br id="file-descriptors">\n \nUn programa o comando en GNU/Linux puede hacer muchas cosas y entre estas esta interactuar con otros programas o usuarios extrayendo informaci\xf3n de alg\xfan lugar y tambi\xe9n poner los resultados de lo que hace en otro lugar.\n\nT\xedpicamente el "lugar" desde donde los programas extraen informaci\xf3n es un stream al que se le llama la entrada est\xe1ndar o stdin (que viene de standard input). El lugar hacia donde reportan sus acciones es la salida est\xe1ndar o stdout y donde reportan errores se llama el error est\xe1ndar stderr. Los streams que utilizan los procesos son listados en file-descriptors asociados a cada proceso.\n\nEstos tres streams son los m\xe1s utilizados y estandarizados pero en este sistema operativo se pueden usar otros mas y podr\xedamos utilizarlos como nos convega.\n\nUn descriptor de archivo o file-descriptor es como un indicador que dice los streams que usa un archivo. En sistemas UNIX todo es un archivo, y al estar GNU/Linux basado en UNIX, un proceso tienen una serie de archivos asociados a este que lo describen y ayudan a gestionarlo. (en este https://pastebin.com/raw/PnUj8UPt puedes ver otra descripci\xf3n sencilla sobre file-descriptors)\n\nPor ejemplo podemos ver los archivos asociados un proceso, en este caso el proceso de la terminal que tenemos abierta con:\n\n :::bash\n lsof -p $BASHPID\n\nDonde lsof es un comando que se utiliza para ver los archivos abiertos y con -p $BASHPID filtramos solo los archivos del identificador de proceso (PID) de la misma terminal abierta, en bash la variable $BASHPID es la que alamcena el PID de la terminal abierta, para filtrar solamente los file-descriptors asociados al proceso de la terminal acutal podemos usar:\n\n :::bash\n lsof +f g -ap $BASHPID -d 0,1,2\n\n(Ejemplo extra\xeddo de http://wiki.bash-hackers.org/howto/redirection_tutorial)\n\nEl resultado muestra entre muchas cosas los file descriptros (FD) usados por el proceso con PID 6841:\n\n COMMAND PID USER FD TYPE FILE-FLAG DEVICE SIZE/OFF NODE NAME\n bash 6481 lorilu 0u CHR RW 136,5 0t0 8 /dev/pts/5\n bash 6481 lorilu 1u CHR RW 136,5 0t0 8 /dev/pts/5\n bash 6481 lorilu 2u CHR RW 136,5 0t0 8 /dev/pts/5\n\nEn el caso anterior con -d 0,1,2 filtramos los file descriptors 0,1,2 que se asocian a stdin, stdout y stderr respectivamente ya que:\n\n \n Stream File-descriptor (FD) \n\n stdin (entrada estandar) ---> 0 \n stdout (salida estandar) ---> 1\n stderr (error estandar) ---> 2\n\nSi queremos ver todos los file descriptors asociados a un proceso, podemos listar el contenido del directorio /proc/&lt;PID&gt;/fd, donde &lt;PID&gt; viene a ser el PID del proceso.\n\nLos operadores de redirecci\xf3n entre los que est\xe1n &gt; &gt;&gt; &lt; n&gt;m &amp;&gt; o las tuber\xedas | ayudan a manipular la fuente o destino de informaci\xf3n con la que los programas interact\xfaan y fuer\xf3n programados para brindar un alto nivel de flexiblidad.\n\n<br id="op-redireccion">\n \nComo sabemos que los programas act\xfaan sobre streams definidos por file-descriptors ahora podemos utilizar los operadores de redirecci\xf3n, que est\xe1n brevemente descritos en http://www.catonmat.net/download/bash-redirections-cheat-sheet.pdf\n\n \n comando &gt; archivo\n\nEl operador &gt; redirije el stdout y lo guarda en un archivo.\n\n :::bash\n\t# guarda la salida estandar de cada comando en archivos nuevos\n\tls > lista.txt\n ps -aux --forest > lista_procesos.txt\n\t\nAl usar comando &gt; archivo se debe tener en cuenta que si archivo ya existe su contenido sera reemplazado por la salida est\xe1ndar de comando.\n\n \n comando &gt;&gt; archivo\n\n&gt;&gt; al igual que &gt; redirije el stdout, pero a diferencia de este adiciona el contenido de stdout al archivo y no lo reemplaza.\n\n \n comando &amp;&gt; archivo\n comando &amp;&gt;&gt; archivo\n\nPor defecto redirije la stdout y stderr al archivo, pero puede usarse tambien de otros file-descriptors que veremos mas adelante.\n\n \n comando &lt; archivo\n\nRedirecciona el contenido del archivo a la stdin, si el comando lee la entrada estandar estara en realidad leyendo el contenido del archivo y lo usara como argumento.\n\n \n comando1 | comando2\n\nRedirije stdout del comando1 a stdin y si el comando2 la lee la usara como argumento.\n\n \n comando 2&gt; archivo\n\nFunciona igual que &gt; solo que en este caso 2&gt; redirije el file-descriptor 2 que es stderr al archivo, de hecho se puede usar cualquier file desriptor por ejemplo comando 11&gt; archivo que usara el file-descriptor 11 y lo guardara en archivo. El comportamiento es el mismo con n&gt;&gt;.\n\n \n comando 1&lt; archivo\n\nAl igual que &lt; redirije el contenido de archivo al file-descriptor 1.\n\n \n comando 2&gt;&amp;1\n\nEste operador hace que lo que haya escrito en el file-descriptor 2 (stderr) vaya al file-descriptor 1 (stdout)\n\n \nBash eval\xfaa los operadores de redireccionamiento de izquierda a derecha.\n\nPor ejemplo si queremos guardar en un archivo el error y salida estandar de un comando se hace asi, por ejemplo para ls:\n\n :::bash\n ls algo-que-no-existe > archivo 2>&1\n\nGr\xe1ficamente se puede ver por pasos como funciona esto:\n\nPrimero.- Al evaluar bash &gt; archivo los file-descriptors quedan de esta forma:\n\n File descriptor (FD) Archivo\n \n 0 ---------> /dev/pts/5\n \t 1 ---------> archivo\n \t 2 ---------> /dev/pts/5\n \n Hay que notar que /dev/pts/5 es la terminal y por ende lo esta muestra en la pantalla, se ve que la entrada estandar stdin y stderr apuntan a la terminal actual /dev/pts/5. En cambio stdout est\xe1 apuntando a archivo\n\nLuego.- bash eval\xfaa 2&gt;&amp;1 que hara que los file-descriptors queden de esta forma:\n\n File descriptor (FD) Archivo\n \n 0 ---------> /dev/pts/5\n \t 1 ---------> archivo\n /\n 2 ---\xb4\n\nSe ve que 2&gt;&amp;1 hace que lo que esta en stderr (file descriptor 2) se duplique en 1 (se copie en 1), y antes el file descriptor 1 estaba apuntando a archivo. De esta forma tanto stderr y stdout se guardaran en archivo.\n\nSe puede ver adem\xe1s que bash ejecuta primero los operadores de redirecci\xf3n antes que los comandos.\n\nOtro ejemplo si queremos ver con el comando less el error estandar y la salida estandar de un comando podemos usar lo siguiente:\n\n comando1 2&gt;&amp;1 | less\n\nEsto hace que el stderr vaya hacia stdout y como | redirije stdout al stdin del comando que esta a la derecha, less recibira los dos streams como argumentos.\n\n\n<br id="ejemplos">\n \nEn lo que queda de este tutorial se usar\xe1n ejemplos concretos para algunos operadores de redirecci\xf3n.\n\n \n :::bash\n\t# obtener los 10 procesos que usan mas memoria RAM de todos los usuarios\n\tps aux --sort -rss | head \n\n\t# obtener los 10 procesos que usan mas memoria RAM del usuario \'lorilu\'\n\tps aux --sort -rss | head | grep -E "^lorilu"\n\nEn estos dos primeros ejemplos usamos ps --sort -rss para que ordene los procesos de todos los usuarios por el campo RSS que se refiere a la memoria residente o la cantidad de memoria RAM que ocupa acutalmente un proceso, usamos | para redirigir la stdout de ps a la stdin de head que muestra las 10 primeras l\xedneas. Al agregar | grep -E &#34;^lorilu&#34; hacemos que grep reciba la salida de head y filtre solamente las l\xedneas que empiezan en "lorilu" que es el nombre del usuario de quien buscamos los procesos abiertos, se busca solo en el principio de la l\xednea por que ps pone el nombre del usuario al principio de cada l\xednea.\n\n :::bash\n\t# itera linea por linea en archivo.txt\n\twhile read -r linea \n\tdo\n\t echo "$linea"\n\t # extas ...\n\tdone < archivo.txt\n\nEste script muestra que bash ejecuta primero los operadores de redirecci\xf3n (en este caso &lt;) antes que los comandos. En la parte final del script bash, &lt; archivo.txt hace que stdin apunte al contenido de archivo.txt y esto hace que el bucle while itere sobre el contenido del archivo y haga que read -r lea cada linea y guarde el resultado de cada iteraci\xf3n en la variable linea, echo simplmente muestra la l\xednea actual. Dentro el blucle se pueden poner una cantidad indefinida de comandos para procesar cada l\xednea a conveniencia.\n\n \n :::bash\n\t# renombra los archivos cuyos nombres tienen espacios en blanco y los reemplaza por _\n\tfor nombre in \n\tdo\n\t nombre_sin_espacios=$(echo $nombre | tr " " "")\n\t\tmv "$nombre" "$nombre_sin_espacios" 2> /dev/null\n\tdone\n\nA veces es problem\xe1tico tener archivos con nombres con espacios en blanco como "archivo numero 1" lo que hace el script anterior es renombrarlo como "archivo_numero_1".\n\nEl bucle for actua iterando en * que coincide con cualquier archivo dentro el directorio actual y guardando cada nombre de archivo en nombre en cada iteraci\xf3n. Luego echo $nombre | tr &#34; &#34; &#34;_&#34; hace que tr reemplaze cualquier caracter " " por "" y la salida de esto se guarda en la variable nombre_sin_espacios.\n\nLuego se usa mv &#34;$nombre&#34; &#34;$nombre_sin_espacios&#34; para renombrar el archivo por su "equivalente" sin espacios en blanco.\n\nLa parte 2&gt; /dev/null es opcional ya que para el caso en que los archivos no tengan nombres con espacios en blanco, mv mostrar\xe1 un error ya que los archivos son del mismo nombre y no pueden renombrarse, ese error va hacia stderr y se mostrar\xeda en pantalla si no fuese por 2&gt; /dev/null que pone stderr en /dev/null haciendo que se pierda y no se muestre en pantalla los errores producidos por mv, esto es es como silenciar los errores.\n\n \n :::bash\n\t# Cifra una carpeta con la clave "123456" comprimiendola primero\n\ttar -cf - carpeta/ | gpg --symmetric --no-use-agent --passphrase "123456" > carpeta.gpg\n\nEl comando tar puede comprimir archivos o carpetas pero requiere escribir el resultado en algun lugar por ejemplo tar -cf carpeta.tar.gz carpeta/ lo guarda en el archivo carpeta.tar.gz. En este caso para enviar su salida directamente a otro programa se usa tar - donde - es una opci\xf3n de tar para enviar el resultado a stdout (salida est\xe1ndar).\n\nLuego a medida que la carpeta se va comprimiendo, mediante | se env\xeda el resultado a gpg --symmetric que cifrar\xe1 lo que lea de stdin y con &gt; carpeta.gpg se guarda la salida est\xe1ndard (stdout) en el archivo carpeta.gpg. Las opciones -no-use-agent --passphrase &#34;123456&#34; son para indicarle a gpg que no le pida al usuario ingresar la clave mediante teclado y en lugar de eso utilice "123456" para cifrar el mensaje.\n\n \n :::bash\n\t# Enviar una carpeta al servidor algo.com a medida que es comprimida\n\t# primero se requiere que en el servidor algo.com se tenga un puerto escuchando\n\t# el trafico en un puerto dado para recibir el contenido enviado\n\n # En el servidor\n\tnc -l -p 5151 | tar -C . -xvf -\n\nPrimero en el servidor "algo.com" abrimos el puerto 5151 haciendo que nc (netcat) escuche el tr\xe1fico en este puerto. nc enviara a stdout el tr\xe1fico que reciba satisfactoriamente y con | hacemos que tar -xvf - descomprima lo que reciba en stdin y lo guarde en el directorio actual con las opciones -C .\n\n :::bash\n # En el cliente (la maquina que envia la carpeta)\n\ttar -cf - carpeta/ | nc -q 0 algo.com 5151\n\nComo el servidor esta escuchando el tr\xe1fico en el puerto 5151, usamos tar -cf - carpeta/ para comprimir la carpeta y enviar el resultado a stdout. Con | lo redirijimos al stdin de nc algo.com 5151 que env\xeda lo que lea del stdin al servidor algo.com por el puerto 5151. La opci\xf3n -q 0 de netcat hace que cuando se detecte EOF (fin de archivo) de la entrada est\xe1ndard al cabo de 0 segundos se cierre el programa.\n\nDe esta forma se puede enviar un archivo mediante TCP a medida que es comprimido y al llegar al servidor se ira descomprimiendo, se puede obviamente combinar esto con otros comandos para por ejemplo cifrar el contenido o analizar el env\xedo en tiempo real.\n\n \n :::bash\n\t# convertir una secuencia de imagenes .jpg en un archivo pdf ordenando alfabeticamente\n\tls .jpg | sort -n | tr \'\n\' \' \' | sed \'s/$/\ doc.pdf/\' | xargs convert - doc.pdf\n\nSoluci\xf3n extra\xedda de este hilo en stack-overflow\n\nCon ls *.jpg listamos todos los archivos de imagen .jpg, luego sort -n los ordena alfab\xe9ticamente, la lista ordenada la recibe tr \&#39;\\n\&#39; \&#39; \&#39; que reemplaza los saltos de l\xednea \\n por espacios en blanco , despu\xe9s sed \&#39;s/$/\\ mydoc.pdf/\&#39; agrega al final de la l\xednea un espacio en blanco " " y la cadena "doc.pdf" esto por que el comando convert requiere recibir las imagenes seguido del nombre del archivo pdf que crear\xe1 a partir de los archivos de im\xe1genes que le preceden.\n\nFinalmente mediante | xargs convert - doc.pdf se hacen varias cosas, primero el comando xargs se utiliza para pasarle como lista de argumentos la salida stdout* de lo que esta a la izquierda de | al comando que esta a la derecha, en este caso es convert - doc.pdf que tomar\xe1 los nombres de los archivos de imagen y a partir de estos crear\xe1 el archivo doc.pdf.\n\nEsto es \xfatil cuando se requiren hacer reportes r\xe1pidos en pdf de una lista larga de im\xe1genes.\n\n--> Espero este peque\xf1o compendio de utilidades te haya servido y tratar\xe9 de reunir m\xe1s pronto. Si tienes sugerencias u observaciones ponte en contacto\n\n \n * http://www.catonmat.net/download/bash-redirections-cheat-sheet.pdf (Tabla de referencia r\xe1pida sobre operadores de redirecci\xf3n)\n * http://wiki.bash-hackers.org/howto/redirection_tutorial (Tutorial extenso sobre redirecci\xf3n en bash)\n * https://www.gnu.org/software/bash/manual/html_node/Redirections.html (Manual de referencia sobre redirecciones en bash)\n\n', [u'software', u'tutoriales', u'bash'])

]]>
Utilidades bash 1 https://rmgss.net/posts/Utilidades-bash-1 https://rmgss.net/posts/Utilidades-bash-1 Sun Mar 31 15:22:11 2019 text/html Rodrigo Garcia software , bash , python (u'En este post compartir\xe9 algunos scripts en bash, python y combinaci\xf3n de comandos que me han servido en distintas ocasiones como para escribir programas, estudiar, buscar, administrar sistemas, etc.\n\nLos scripts bash requieren tener instalado bash que viene instalado para la mayor\xeda de las distribuciones GNU/Linux, para las utilidades siguientes no he definido un orden pero aqu\xed una tabla peque\xf1a de contenidos:\n\n \n Programaci\xf3n\n\t- B\xfasqueda de palabras o expresiones\n Administraci\xf3n\n\t- Comando less manteniendo colores\n\t- Tama\xf1o de carpetas\n\t- Digestos de archivos en el directorio actual\n\t- Archivos duplicados\n\n \t\n \nLos programas pueden tener muchos archivos distintos con muchas l\xedneas de c\xf3digo. En varias ocasiones es necesario buscar una palabra o expresi\xf3n en particular en todos los archivos de c\xf3digo fuente del programa y podemos usar:\n\n :::bash\n grep -lir "palabra" .\n\nEsta orden usa grep en modo recursivo -r para buscar en todos los ficheros de subdirectorios, -l en lugar de mostrar las l\xedneas donde se encuentran ocurrencias solamente muestra el archivo donde se ha encontrado la "palabra". -i hace se ignore la diferencia entre may\xfasculas y min\xfasculas, finalmente. le dice que busque en el directorio actual.\n\nEl comando anterior es muy \xfatil, pero puede que necesitemos m\xe1s detalles por ejemplo saber cu\xe1ntas veces se encuentra la "palabra" en cada archivo para lo cual podemos usar los siguiente:\n\n\t:::bash\n\tgrep -irc "palabra" . | grep -E --color "[1-9]+[0-9]$"\n\nQue muestra el n\xfamero de veces que se encuentra "palabra" en cada archivo gracias a la opci\xf3n c. Luego de la tuber\xeda otro grep filtra una expresi\xf3n regular (por usar -E), la expresi\xf3n regular [1-9]+[0-9]*$ coincide con todas las cadenas que terminen en al menos una combinaci\xf3n de n\xfameros entre 1 y 9 seguido de cero o m\xe1s combinaciones de n\xfameros entre 0 y 9.\n\nSe usa este filtro por que la opci\xf3n -c del grep inicial tambi\xe9n imprime 0 en caso de que no se encuentren ocurrencias en un archivo, pero nosotros s\xf3lo queremos que se muestren los archivos en donde se encuentre al menos una ocurrencia.\n\nEl script anterior tambi\xe9n es muy \xfatil y gracias a --color en la salida final se mantiene resaltado en colores el n\xfamero de ocurrencias en un archivo. Sin embargo puede perfeccionarse, por ejemplo en un proyecto en python o node.js se tienen los directorios venv y node_modules con archivos de c\xf3digo fuente de las extensiones o programas que usa el programa principal, pero incluirlos en la b\xfasqueda seguramente no es lo que buscamos. Para que se ignoren estos directorios usamos --exclude-dir:\n\n\t:::bash\n\t# para python\n\tgrep -irc "palabra" --exclude-dir=venv . | grep -E --color "[1-9]+[0-9]$"\n\t# para node.js\n\tgrep -irc "palabra" --exclude-dir=node_modules . | grep -E --color "[1-9]+[0-9]$"\n\nAhora para no tener que escribir todo el tiempo la larga combinaci\xf3n de arriba y tener mayor facilidad lo convertiremos en un \xfatil script.\n\n\t:::bash\n #!/bin/bash\n \n uso()\n {\n echo "Uso:"\n echo " pgrep.sh [-e DIRECTORIO] EXPRESION"\n echo ""\n echo "Busca la EXPRESION en todos los ficheros dentro el directorio actual"\n echo "Si se ysa \'-e\' se excluye el DIRECTORIO en la b\xfasqueda."\n\t\texit 0\n }\n EXCLUDE=""\n EXPR=""\n if [ -z $1 ]\n then\n uso\n fi\n if [ $1 == "-e" ] # excluir directorio\n then\n if [ -z $2 ] \n then\n\t\t\tuso\n fi\n EXCLUDE=$2\n EXPR=$3\n else\n EXPR=$1\n fi\n # comando final de b\xfasqueda\n grep -rc "$EXPR" --exclude-dir="$EXCLUDE" . | grep -E --color "[1-9]+[0-9]$"\n exit 0\n\t\nPodr\xedamos incluso incluir el script anterior como global para usarlo en cualquier momento, para eso lo guardamos en una ruta dentro el PATH por ejemplo yo lo he guardado as\xed /usr/bin/ogrep.sh luego le damos permisos de ejecuci\xf3n (chmod +x /usr/bin/ogrep.sh) y listo.\n\n \nA menudo se usa less para capturar la salida de uno o m\xe1s comandos en una consola, al usar less los colores en el texto de salida se puede perder por ejemplo si se hace ls -l | less. Aqu\xed un ejemplo para mantener los colores usando less:\n\n\t:::bash\n\tls -l --color | less -R\n\nla opci\xf3n -R de less hace que se interpreten caracteres en bruto en este caso c\xf3digos de colores que ls con la opci\xf3n --color produce.\n\n\t:::bash\n\t# mantiene los colores en resultados de buscar .html en un archivo\n\tgrep ".html$" archivo --color=always | less -R\n\nM\xe1s ejemplos\n\n \n\t:::bash\n\t# Espacio que ocupa cada carpeta en el directorio actual\n\tdu -h --max-depth 1 .\n\t# Espacio que ocupa el directorio actual\n\tdu -sh\n\n \nUna manera simple para obtener sha1:\n\n\t:::bash\n\tsha1sum \n\nQue obtiene el digesto sha1 de todos los archivos en el directorio actual aunque este tambi\xe9n intenta obtener de los directorios, para solamente obtener de archivos se puede usar:\n\n :::bash\n find . -maxdepth 1 -type f | tr "\n" " " | xargs sha1sum\n\t# de la misma forma sin usar tr (mas eficiente)\n\tfind . -maxdepth 1 -type f -print0 | xargs --delimiter "\0" sha1sum\n\nDonde . hace que se busque en el directorio actual, -maxdepth con una profundidad de 1 y de tipo archivo (-type f), luego se usa tr &#34;\\n&#34; &#34; &#34; que reemplaza los saltos de l\xednea por espacios en blanco para que xargs se los pase a sha1sum. La segunda forma es m\xe1s eficiente al no tener que llamar a otro comando.\n\n \nEl siguiente script permite buscar archivos duplicados dentro un directorio dado analizando los nombres de archivos y si el contenido. Esta escrito en python y puede ejecutarse con:\n\n\tpython3 duplicados.py\n\nEl script se puede mejorar o agregar funcionalidades --> aqu\xed la \xfaltima versi\xf3n <-- si quisieras contribuir.\n\n\t:::python\n #!/usr/bin/python3\n import hashlib\n import os\n import sys\n \n # helpers\n def getList(directory="."):\n \'\'\' retorna una lista con los nombres de todos los archivos dentro el \n directorio actual.\n * basado en https://stackoverflow.com/questions/120656/directory-tree-listing-in-python#120701\n \'\'\'\n files = []\n for dirname, dirnames, filenames in os.walk(directory):\n # for subdirname in dirnames:\n # files.append(os.apth.join(dirname, subdirname))\n for filename in filenames:\n files.append(os.path.join(dirname,filename))\n return files\n \n def digest(filename, algorithm=\'sha1\'):\n \'\'\' returns hexdigest of the given filename using the gibe algorithm \'\'\'\n with open(filename, \'r+b\') as fil:\n if (algorithm == \'sha1\'):\n return hashlib.sha1(fil.read()).hexdigest()\n elif (algorithm == \'sha224\'):\n return hashlib.sha224(fil.read()).hexdigest()\n elif (algorithm == \'sha256\'):\n return hashlib.sha256(fil.read()).hexdigest()\n elif (algorithm == \'sha384\'):\n return hashlib.sha384(fil.read()).hexdigest()\n elif (algorithm == \'sha512\'):\n return hashlib.sha512(fil.read()).hexdigest()\n elif (algorithm == \'md5\'):\n return hashlib.md5(fil.read()).hexdigest()\n print (\'Invalid algorithm\')\n return ""\n \n def digests(fileList, algorithm=\'sha1\'):\n \'\'\' Retorna un diccionario con los digestos calculados de la lista de\n archivos `fileList\'.\n \'\'\'\n dict = {}\n for file in fileList:\n d = digest(file)\n if d in dict:\n # duplicado encontrado\n l = dict[d]\n l.append(file)\n dict[d] = l\n else:\n l = []\n l.append(file)\n dict[d] = l\n return dict\n \n def use():\n print (\'Obtiene un lista de archivos duplicados desde un directorio ra\xedz\')\n print (\'Cada linea contiene los archivos que se ha detectado iguales\')\n print ()\n print (\' python3 duplicados.py [DIR] [ALGORITMO]\')\n print ()\n print (\' - DIR: Directorio ra\xedz donde realizar la b\xfasqueda usa "." por defecto\')\n print (\' - ALGORITMO: Algoritmo para obtener digestos "sha1" por defecto\')\n print (\' permitidos; md5,sha1,sha224,sha256,sha384,sha512\')\n \n # main\n files = []\n directory=\'.\'\n hashAlgorithm = "sha1"\n \n if (len(sys.argv) > 1):\n if (sys.argv[1] != \'\'):\n if (sys.argv[1]==\'-h\' or sys.argv[1]==\'--help\'):\n use()\n exit(0)\n \n directory=sys.argv[1]\n if (len(sys.argv) > 2):\n if (sys.argv[2] != \'\'):\n if (sys.argv[2]==\'sha1\' or sys.argv[2]==\'md5\' or sys.argv[2]==\'sha224\'\n or sys.argv[2]==\'sha256\' or sys.argv[2]==\'sha512\'):\n hashAlgorithm = sys.argv[2]\n else:\n use()\n exit(0)\n \n files = getList(directory)\n digests = digests(files, hashAlgorithm)\n for digest, lista in digests.items():\n # verbose\n #print (digest, lista)\n \n if len(lista) > 1:\n s = \'\'\n for file in lista:\n s += file+\' \'\n print(s[:-1])\n exit(0)\n\nLa idea del script anterior se puede explotar de muchas formas, al usarlo se obtiene la lista de archivos que se detectan con contenido igual y a partir de esa lista se puede por ejemplo eliminar los duplicados. Adem\xe1s para que parezcan que no se han eliminado se podr\xeda crear enlaces simb\xf3licos y s\xf3lo mantener un archivo con contenido original por todos los dem\xe1s repetidos.\n\n----\nSi tienes comentarios sobre lo mostrado escr\xedbeme, espero te haya servido.\n', [u'software', u'bash', u'python'])

]]>