Planeta Linux México

Subscribe to canal de noticias Planeta Linux México
Planeta Linux México - http://planetalinux.org/mx
Actualizado: hace 1 hora 15 mins

Octavio Alvarez: postfix_delivery_search.bash

Lun, 16/01/2017 - 22:07

Este script sirve para buscar en los logs de Postfix 2.9.6 la historia de entrega de los correos que cumplan con el from= y el to= que se indiquen en el primer y segundo argumento del script, respectivamente.

#!/bin/bash # Configuration variables REQUIREMENTS="gawk sort uniq grep" LOGSOURCES="/var/log/mail.info.1 /var/log/mail.info" # Check requirements which $REQUIREMENTS > /dev/null 2>&1 || { echo The following required programs were not found: for R in $REQUIREMENTS; do which "$R" > /dev/null 2>&1 || echo "$R" done exit 63 } # Check arguments [ $# -eq 2 ] || { echo Usage: "$0" source_address destination_address exit 1 } # These work for Postfix 2.9.6 function get_filter_from() { echo 'BEGIN { FS="[ :]+"} /from=<'$1'>/ { print $8 }' } function get_filter_to() { echo 'BEGIN { FS="[ :]+"} /to=<'$1'>/ { print $8 }' } FILTER_FROM=$(get_filter_from "$1") FILTER_TO=$(get_filter_to "$2") # For each mail ID found in both from= and to= lines... for ID in $(cat <(gawk "$FILTER_FROM" $LOGSOURCES | sort | uniq) \ <(gawk "$FILTER_TO" $LOGSOURCES | sort | uniq) | sort | uniq -d) do echo ====== $ID ====== grep $ID /var/log/{mail.info.1,mail.info} done

Luis Armando Medina: Dell Presicion con Ubuntu te ahorra $2262.00 pesos

Jue, 12/01/2017 - 10:29
Dell tiene una larga trayectoria vendiendo equipos con Ubuntu Preinstalado y listo para funcionar, desde hace bastantes años ha puesto a la venta diversos equipo y hoy hay un Dell Presicion con el que puedes ahorrar $2,262.00 solo por usar … Continue reading →

Gustavo Rubio: En México todos tenemos una agenda

Jue, 12/01/2017 - 01:24

Cuando mi mujer me dijo que no había gasolina el pasado Sábado 7 de Enero pensé que estaba exagerando. La verdad es que, como parte de una terapia auto-recetada, me he abstenido de leer demasiado las noticias para mantenerme enfocado en otras actividades desde hace meses, bueno, suelo al menos leer los titulares, pero paso de largo los detalles. Ese mismo Sábado por la noche decidí ir a echar gasolina a la estación mas cercana y bueno, me llevé la sorpresa (amarga) de todos los demás que al parecer sí estaban atentos no solo de las noticias sino de la situación. Como yo suelo recargar el tanque por semana supongo no experimenté el caos en carne propia hasta que me afectó.

Ese mismo día recuerdo haber quedado de comer con mi esposa en algún lado por zona río (zona comercial/financiera de Tijuana, para los foráneos)  al mediodía, cuando ambos nos desocuparamos de nuestros respectivos compromisos; ella de un desayuno con amigas y yo probablemente de levantarme tarde. Finalmente el plan se vino abajo y terminamos comiendo en casa pues el tráfico por las manifestaciones simplemente había convertido en caos la ciudad.

Si bien estoy a favor de manifestaciones genuinamente sustentadas últimamente me he convertido en un tipo bastante moderado en cuestiones socio-políticas. La verdad es que conforme han pasado los años he aprendido lo que todos me repetían cuando era adolescente: “Un día vas a madurar” y bueno, supongo que he madurado. ¿Significa madurar perder el espíritu de rebelión? O mejor dicho, ¿Puede uno apoyar causas y aun así considerarse moderado?

Verán, hay un refrán que dice que “Cada quien jala agua para su propio molino” y bueno, México es un país donde llevar agua al molino propio es deporte nacional. Antes solía tener largas conversaciones, debates y hasta peleas con amigos, no tan amigos, familiares, maestros y quien se me pusiera enfrente sobre los problemas propios del país, las raíces y hasta posibles soluciones (que ingenuo) pero conforme he crecido he encontrado cada vez más difícil mantener la energía para desarrollar dichos debates o siquiera propiciarlos, o sea, me da mucha hueva conversar sobre problemas tan complejos sin tener una dirección clara, sin embargo, siendo una persona tan obstinada, inconscientemente he desarrollado la capacidad de analizar, en segundo plano, cada situación de los problemas que aquejan a la sociedad mexicana en particular y siempre he llegado a la misma conclusión: en México todos tenemos una agenda particular.

Solo hay que voltear a ver el problema de los combustibles. Situación que afectó a muchos, muchísimos ciudadanos, y sectores variados, el de los transportistas, por ejemplo, que con pancartas con leyendas como “fuera el gobierno corrupto” en las parrillas de sus tracto-camiones enviaban un mensaje de hartazgo. Lo curioso es que un gran porcentaje de estos transportistas son los mismos que aplican su “mochada” con las autoridades para poder transportar 40t de carga en vez de 25t y que tienen destruídas vías y carreteras por ejemplo.

Y también ahí en la marcha muy seguramente estuvo el taxista que no respeta el reglamento de tránsito, los autobuses de líneas de transporte urbano con precios inflados, unidades contaminantes y mal servicio, el propietario de un vehículo chocolate que no lo quiere legalizar pero si le alcanza para la cerveza del fin de semana. Y así, muchas personas, sectores y grupos se cuelgan de situaciones políticas en beneficio de sus propios intereses pero cuando toca hacer lo propio para no joder a los demás, bueno… no hacemos nada.

Si bien muchos de los protestantes son personas genuinamente responsables, preocupadas y sobre todo ocupadas (léase: cívicamente responsables) la mayoría guarda(mos) y cargamos nuestros propios pecados y al final eso, en conjunto, se manifiesta en nuestros gobernantes y burócratas; desde el que nos atiende en ventanilla en una empresa de estado, el regidor local, el delegado de alguna secretaría, hasta nuestro congreso y presidente. Vivimos en un sistema político de representatividad donde, tristemente, sí estamos representados por mayoría.

Así que siempre que vuelvo a tener un debate o simple conversación sobre los cientos de problemas que aquejan al país recuerdo este extracto:

México es una sociedad en la que gente quiere dos policías, uno que sea honesto y detenga delincuentes y otro que le haga un “paro”, quiere dos políticos; uno que sea integro y otro que viole las leyes cuando este en un problema y necesite de su ayuda; donde quiere dos códigos de ética, uno donde mi mujer sea sumisa y fiel, y otro donde la mujer del vecino sea flexible, quiere dos códigos migratorios; uno que le conceda visas de trabajo en EUA y otro donde expulse a los centroamericanos de nuestro país, una sociedad que exige buenos empleos pero demasiada floja para asistir puntualmente a ellos

Y recuerdo que mientras la revolución no empiece desde adentro nunca tendremos un cambio y para eso tenemos que dejar de pensar en solo jalar agua para nuestro propio molino.

Octavio Alvarez: Codificación defensiva (era Re: Pleonasmos booleanos)

Vie, 06/01/2017 - 19:32

Cuidado con las vulnerabilidades.

En Pleonasmos Booleanos, publicación del excelente blog Developeando, del cual me considero un ávido seguidor, Mario nos sensibiliza sobre la legibilidad de código. Nos dice que al escribir código debemos tomar en cuenta que no solo escribimos para la maquina. Concuerdo con él.

Sin embargo, hay que considerar qué pasa cuando lo que parece que es código redundante, realmente no lo es. Qué pasa si tenemos este código:

function deboLanzarMisil(statusProhibicion) { result = false if (statusProhibicion == false) result = true; return result; }

y lo que parece código redundante se legibiliza así:

function deboLanzarMisil(statusProhibicion) { return !statusProhibicion; }

o incluso así:

function deboLanzarMisil(statusProhibicion) { if (!statusProhibicion) return true; return false; }

En ambos casos habríamos introducido una vulnerabilidad (o bueno, de bug para arriba) que se presenta cuando statusProhibicion es null. En el primer código:

> deboLanzarMisil(true) false > deboLanzarMisil(false) true > deboLanzarMisil(null) false

En ambos ejemplos de código legibilizado:

> deboLanzarMisil(true) false > deboLanzarMisil(false) true > deboLanzarMisil(null) true

El código que estoy usando como ejemplo de lo que es supuestamente ilegible en realidad sigue un patrón de programación defensivo o seguro. En esta técnica:

  1. Se inicializa una variable a un valor seguro o valor por defecto.
  2. Sólo se modifica el valor bajo validaciones estrictas.

Claro que, aún cuando el siguiente código sigue esta técnica, habría sido inseguro, pero eso es porque se violó la regla #2:

function deboLanzarMisil(statusProhibicion) { result = false if (!statusProhibicion) result = true; return result; }

El punto es que la única manera de corregir un potencialmente vulnerable return !x manteniendo la legibilidad hubiera sido usar más de una línea de código o invertir la lógica de la función.

El código que usa Mario para ejemplificar el caso de ilegibilidad resulta ser funcionalmente equivalente al código legibilizado y no son vulnerables ante una entrada null. Sin embargo consideremos los dos siguientes códigos, que no son funcionalmente equivalentes.

Este código es seguro:

function deboLanzarMisil(statusProhibicion) { if (statusProhibicion == false) return true; else return false; } > deboLanzarMisil(true) false > deboLanzarMisil(false) true > deboLanzarMisil(null) false

Este otro código, aparentemente equivalente, resulta inseguro ante una entrada null:

function deboLanzarMisil(statusProhibicion) { if (statusProhibicion == true) return false; else return true; } > deboLanzarMisil(true) false > deboLanzarMisil(false) true > deboLanzarMisil(null) true

Al final todo depende del lenguaje de programación. En SQL, por ejemplo, la lógica es distinta: NULL <> NULL da NULL y NULL == NULL da NULL.

En resumen, sí, hay que considerar que nuestro código será leído por otras personas o por nosotros mismos en el futuro (o por un violento psicópata que sabe dónde vives), pero recuerda que, en Javascript, x == false no es funcionalmente equivalente a !x.

Víctor Martínez: Algo muy grave va a suceder en este pueblo

Jue, 05/01/2017 - 15:14

En 2011 a raíz de los disturbios que hubo en varias partes del mundo [1]. [2], [3] y de la incertidumbre que hubo en el puerto de Veracruz [4], que posteriormente al siguiente año también pasaría en la ciudad de México siendo el conflicto realmente grave solo en Chimalhuacan [5], [6], agregue una lectura a mi curso, el siguiente cuento de Gabriel García Márquez, se sigue usando en clase y pensé que lo había colocado aquí y veo que no es así, lo coloco en este espacio para referencia rápida y para poderlo vincular, en momentos como hoy es importante recordar la necesidad de verificar el de donde viene la información, la leyenda dice que Sócrates tenía tres preguntas para evitar el rumor [7], me parece que provenga de él o no, son muy útiles hoy en día, por cierto he tomado el texto de acá [8] pero se ha movido varias veces con los cambios del sitio.

Dicho sea de paso, recopilar las fuentes del tema me han hecho pensar que vale la pena convertirlo en un material más estructurado, en la página del curso de hecho esta replicado ya que han cambiado muchos vínculos o desaparecido.

[Cuento – Texto completo.]

Imagínese usted un pueblo muy pequeño donde hay una señora vieja que tiene dos hijos, uno de 17 y una hija de 14. Está sirviéndoles el desayuno y tiene una expresión de preocupación. Los hijos le preguntan qué le pasa y ella les responde:
-No sé, pero he amanecido con el presentimiento de que algo muy grave va a sucederle a este pueblo.

Ellos se ríen de la madre. Dicen que esos son presentimientos de vieja, cosas que pasan. El hijo se va a jugar al billar, y en el momento en que va a tirar una carambola sencillísima, el otro jugador le dice:

-Te apuesto un peso a que no la haces.

Todos se ríen. Él se ríe. Tira la carambola y no la hace. Paga su peso y todos le preguntan qué pasó, si era una carambola sencilla. Contesta:

-Es cierto, pero me ha quedado la preocupación de una cosa que me dijo mi madre esta mañana sobre algo grave que va a suceder a este pueblo.

Todos se ríen de él, y el que se ha ganado su peso regresa a su casa, donde está con su mamá o una nieta o en fin, cualquier pariente. Feliz con su peso, dice:

-Le gané este peso a Dámaso en la forma más sencilla porque es un tonto.

-¿Y por qué es un tonto?

-Hombre, porque no pudo hacer una carambola sencillísima estorbado con la idea de que su mamá amaneció hoy con la idea de que algo muy grave va a suceder en este pueblo.

Entonces le dice su madre:

-No te burles de los presentimientos de los viejos porque a veces salen.

La pariente lo oye y va a comprar carne. Ella le dice al carnicero:

-Véndame una libra de carne -y en el momento que se la están cortando, agrega-: Mejor véndame dos, porque andan diciendo que algo grave va a pasar y lo mejor es estar preparado.

El carnicero despacha su carne y cuando llega otra señora a comprar una libra de carne, le dice:

-Lleve dos porque hasta aquí llega la gente diciendo que algo muy grave va a pasar, y se están preparando y comprando cosas.

Entonces la vieja responde:

-Tengo varios hijos, mire, mejor deme cuatro libras.

Se lleva las cuatro libras; y para no hacer largo el cuento, diré que el carnicero en media hora agota la carne, mata otra vaca, se vende toda y se va esparciendo el rumor. Llega el momento en que todo el mundo, en el pueblo, está esperando que pase algo. Se paralizan las actividades y de pronto, a las dos de la tarde, hace calor como siempre. Alguien dice:

-¿Se ha dado cuenta del calor que está haciendo?

-¡Pero si en este pueblo siempre ha hecho calor!

(Tanto calor que es pueblo donde los músicos tenían instrumentos remendados con brea y tocaban siempre a la sombra porque si tocaban al sol se les caían a pedazos.)

-Sin embargo -dice uno-, a esta hora nunca ha hecho tanto calor.

-Pero a las dos de la tarde es cuando hay más calor.

-Sí, pero no tanto calor como ahora.

Al pueblo desierto, a la plaza desierta, baja de pronto un pajarito y se corre la voz:

-Hay un pajarito en la plaza.

Y viene todo el mundo, espantado, a ver el pajarito.

-Pero señores, siempre ha habido pajaritos que bajan.

-Sí, pero nunca a esta hora.

Llega un momento de tal tensión para los habitantes del pueblo, que todos están desesperados por irse y no tienen el valor de hacerlo.

-Yo sí soy muy macho -grita uno-. Yo me voy.

Agarra sus muebles, sus hijos, sus animales, los mete en una carreta y atraviesa la calle central donde está el pobre pueblo viéndolo. Hasta el momento en que dicen:

-Si este se atreve, pues nosotros también nos vamos.

Y empiezan a desmantelar literalmente el pueblo. Se llevan las cosas, los animales, todo.

Y uno de los últimos que abandona el pueblo, dice:

-Que no venga la desgracia a caer sobre lo que queda de nuestra casa -y entonces la incendia y otros incendian también sus casas.

Huyen en un tremendo y verdadero pánico, como en un éxodo de guerra, y en medio de ellos va la señora que tuvo el presagio, clamando:

-Yo dije que algo muy grave iba a pasar, y me dijeron que estaba loca.

FIN

[1] http://www.jornada.unam.mx/2011/10/01/economia/023n1eco
[2] http://redaccion.nexos.com.mx/?p=3355
[3] http://redaccion.nexos.com.mx/?p=3400
[4] http://web.archive.org/web/20130403133637/http://www.imagendeveracruz.com.mx/vernota.php?id=99663
[5] http://www.eluniversalmas.com.mx/editoriales/2012/09/60356.php
[6] http://redaccion.nexos.com.mx/?p=4215
[7] http://www.academiasocrates.es/socrates/dialogo.php
[
8] http://ciudadseva.com/texto/algo-muy-grave-va-a-suceder-en-este-pueblo/

José Oviedo: Gparted: Error al iniciar, undefined symbol

Lun, 02/01/2017 - 09:35

Al ejecutar el comando gparted o gparted-pkexec arroja el siguiente error (también el programa gnome-system-monitor):

/usr/sbin/gpartedbin: symbol lookup error: /usr/lib/x86_64-linux-gnu/libgiomm-2.4.so.1: undefined symbol: _ZN4Glib11VariantTypeD1Ev

Al parecer el problema lo genera VMWare, pero para solucionar el error, seguir los siguientes pasos, todo como root.

Mover el archivo LD_LIBRARY_PATH.conf

sudo mv /etc/ld.so.conf.d/LD_LIBRARY_PATH.conf /etc/ld.so.conf.d/LD_LIBRARY_PATH.conf.bak

Después ejecutar:
sudo ldconfig

Y listo!!, asunto arreglado.

Gunnar Wolf: Giving up on the Drupal 8 debianization ☹

Lun, 26/12/2016 - 21:03

I am sad (but feel my duty) to inform the world that we will not be providing a Drupal 8 package in Debian.

I filed an Intent To Package bug a very long time ago, intending to ship it with Jessie; Drupal 8 was so deep a change that it took their community overly long to achieve and stabilize. Still, Drupal 8 was released over a year ago today.

I started working on debianizing the package shortly afterwards. There is also some online evidence – As my call for help sent through this same blog.

I have been too busy this last year. I let the packaging process lay dormant for too long, without even touching it for even half a year. Then, around September, I started working with the very nice guys of Indava, David and Enrique, and did very good advances. They clearly understood Debian's needs when it comes to full source inclusion (as D8 ships many minified Javascript libraries), attribution (as additionally to all those, many third-party PHP projects are bundled in the infamous vendor/ directory), and system-wide dependency management (as Drupal builds on some frameworks and libraries already available within Debian, chiefly Symfony, Doctrine, Twig... Even more, most of them appeared to work at the version levels we will be shipping, so all was dandy and for some weeks, I was quite optimistic on finishing the package on time and with the needed quality and testing. Yay!

But... Reality bites.

When I started testing my precious package... It broke in horrible ways. Uncomprehensible PHP errors (and I have to add here, I am a PHP newbie and am reluctant to learn better a language that strikes me as so inconsistent, so ugly), which we spent some time tackling... Of course, configuration changes are more than expected...

But, just as we Debianers learnt some important lessons after the way-too-long Sarge freeze (ten years ago, many among you won't remember those frustrating days), Drupal learnt as well. They changed their release strategy — Instead of describing it, those interested can read it at its source.

What it meant for me, sadly, is that this process does not align with the Debian maintenance model. This means: The Drupal API stays mostly-stable between 8.0.x, 8.1.x, 8.2.x, etc. However, Drupal will incorporate new versions of their bundled libraries. I understood the new versions would be incorporated at minor-level branches, but if I read correctly some of my errors, some dependencies change even at patch-level updates.

And... Well, if you update a PHP library, and the invoking PHP code (that is, Drupal) relies in this new version... Sadly, it makes it unmaintainable for Debian.

So, long story short: I have decided to drop Drupal8 support in Debian. Of course, if somebody wants to pick up the pieces, the Git repository is still there (although I do plan on erasing it in a couple of weeks, as it means useless waste of project resources otherwise), and you could probably even target unstable+backports in a weird way (as it's software that, given our constraints, shouldn't enter testing, at least during a freeze).

So... Sigh, a tear is dropped for every lost hour of work, and my depeest regrets to David and Enrique who put their work as well to make D8 happen in Debian. I will soon be closing the ITP and... Forgetting about the whole issue? ☹

Luis Armando Medina: Como Encontrar el Nombre y Versión del Controlador de Red en Linux

Lun, 26/12/2016 - 18:42
Para resolver algún problema de red es necesario conocer el nombre del controlador de red y la versión del driver de red. Para poder encontrar estos datos en Linux Existen varias formas. Ve en este post como puedes saber el … Continue reading →

Luis Armando Medina: Como instalar Redis en Ubuntu 16.04

Vie, 23/12/2016 - 11:20
Redis es una herramienta para agilizar el tiempo de respuesta de un sitio web cuando se está trabajando con sitios con muchas visitas. Redis es una base de datos en memoria un tanto particular y aquí vamos a ver como … Continue reading →

Luis Armando Medina: Linux Mint 18.1 Serena ha sido Anunciado Oficialmente

Vie, 16/12/2016 - 12:33
Para cerrar bien el 2016 se ha anunciado oficialmente el lanzamiendo de la versión final de Linux Mint 18.1 Serena en sus dos variantes con Cinnamon y MATE como entornos de escritorio. Linux Mint ha ido mejorando con el tiempo … Continue reading →

Luis Armando Medina: Centos 7-1611 ha Sido Anunciado y Está Listo para Descargar

Mar, 13/12/2016 - 16:37
Hace algunas semanas se anunciaba el lanzamiento de Red Hat Enterprice Linux 7.3 y como era de esperarse ahora tenemos disponible la nueva versión de Centos 7 que se construya a partir del código fuente de RHEL 7.3. Descarga la … Continue reading →

Luis Armando Medina: Como encontrar y borrar archivos con más de X días de Antigüedad

Jue, 08/12/2016 - 16:52
El comando find en Linux, uno de esos comando poco valorados aun cuando es no de los mas poderosos y flexible, tiene un gran cantidad de parámetros que dificultan su uso cuando uno es principiante, pero si lo sabes usar … Continue reading →

Luis Armando Medina: Como establecer $PATH permanente en Linux Mint

Mié, 07/12/2016 - 12:06
Como establecer una variable PATH permanente en Linux Mint. Cuando necesitas que un script o aplicación se ejecute desde un directorio en particular puedes agregar la ruta de este a la variable de entorno $PATH de forma permanente y aquí … Continue reading →

Luis Armando Medina: El Comando Linux rmdir para Borrar Directorios

Lun, 05/12/2016 - 10:51
El comando linux rmdir sirve para borrar directorios, este comando es muy simple y no tiene muchos parámetros. En general se puede decir que rmdir es útil cuando tienes que borrar directorios que están vacíos, en otro caso es mejor … Continue reading →

Luis Armando Medina: Cuando eres SysAdmin y le invitas a tequila a todos

Vie, 02/12/2016 - 09:00
Pues ya es viernes y si eres SysAdmin que se respete hay que pasar por unos shots de tequila. Y para la ocasión no puede faltar la camiseta Geek alusiva a la ocasión. Cual es tu camiseta Geek Favorita para … Continue reading →

Luis Armando Medina: Como hacerle al Hacker de Hollywood en Ubuntu

Jue, 01/12/2016 - 17:54
Si quieres hacerle al Hacker e impresionar a alguien que no sabe nada de nada pero que si ve la pantalla de tu lap dice WOW, solo por que ve comandos, métricas y texto que no entiende pero que se … Continue reading →

Luis Armando Medina: Desactivar SELinux Termporalmente o Permanentemente en RHEL Centos 6 y 7

Jue, 01/12/2016 - 11:32
Uno de las características de seguridad de Centos y RHEL es SELinux, un módulo de seguridad para el kernel Linux que proporciona el mecanismo para configurar políticas de control de acceso. Algunas veces es engorroso o innecesario por lo que puedes … Continue reading →

Víctor Martínez: Hackers, activismo, privacidad

Jue, 01/12/2016 - 09:07

Se que me falto de activismo, así que por eso especialmente pongo aquí mi selección que realice para tratar estos temas en clase.


Ben Goldacre (2012): What doctors don’t know about the drugs they prescribe

Amy Webb (2013) :How I hacked online dating

Keren Elazari (2014): Hackers: the Internet’s immune system

Wael Ghonim (2015): Let’s design social media that drives real change

Christopher Soghoian (2016): Your smartphone is a civil rights issue

 

Luis Armando Medina: Cambiar el Nombre de Host en Ubuntu

Mié, 30/11/2016 - 16:34
Cambiar el nombre de host en Ubuntu en una tarea sencilla, cuando se instala Ubuntu te permite poner el nombre al equipo, sin embargo en ocasiones es necesario cambiarlo y para hacerlo puedes usar la interfaz gráfica o la linea … Continue reading →

Páginas