Domingo 19 de agosto de 2018

Octavio Alvarez

Octavio Alvarez
Planeta Linux –

Formatos de fecha, su endianness, ISO 8601 y otras reflexiones

Introducción

El propósito de esta publicación es reflexionar en los diferentes formatos de fecha, sus conceptualizaciones, sus ambigüedades, su endianness y finalmente el formato internacional de fecha ISO 8601.

El endianness se refiere al extremo por el que comienza la representación de un número. Por ejemplo, para el número 547 —y considerando que en español escribimos de izquierda a derecha— primero escribimos el 500, después el 40 y después el 7. El 5 tiene más valor relativo que el 7. Puesto que se comienza por el dígito de mayor valor, a esto se le llama big-endian y es común en protocolos de red. El contrario se denomina little-endian y es común en algunos procesadores de Intel. Cuando no se sigue un orden progresivo se le dice middle-endian.

Formatos mexicano y estadounidense

Siendo mexicano me acostumbre desde niño al formato de fecha que se usa aquí, día-mes-año (DMY), que se usa así:

  • Al hablar decimos “[DÍA] de [MES] de [AÑO]”. Ejemplo: 7 de agosto de 2018.
  • Al escribirlo abreviadamente usamos “DD/MM/YYYY”. Ejemplo: 7/8/2018. A veces usamos guiones para separar en lugar de diagonales.
  • Cuando el mes es de un dígito, algunos anteponen un cero: 7/08/2018. Algunos hacen lo mismo con el día, aunque es menos común.
  • Como forma alternativa, a veces ponemos el mes con letra y abreviado: 7/ago/2018.
  • Para acortar el año simplemente escribimos los dos últimos dígitos: 7/8/18.
  • El formato DMY se dice que es little-endian, pues primero se menciona lo que significa menos (el día) y progresivamente se incrementa hasta llegar a lo que significa más: el año.

Sin embargo, como tijuanense, pronto estuve expuesto al formato de fecha estadounidense, mes-día-año (MDY), que se usa así:

  • Al hablar, dicen “[MES] [DÍA](th), [AÑO]”. Ejemplo: August 7th, 2018. Ellos usan el día en forma ordinal.
  • Al escribirlo abreviadamente usan “mm/dd/yyyy”. Ejemplo: 8/7/2018.
  • Ellos no usan la forma alterna con el mes abreviado como nosotros (Aug/7/2018). Resulta más sencillo abreviar la manera larga: Aug 7, 2018 y omitir ordinalizar el día.
  • Para acortar el año, la costumbre es anteponer un apóstrofo (comilla simple): Aug 7, ’18.
  • Este sistema no tiene un endianness progresivo. Primero va una cifra de significancia media (el mes), después la de menor valor (el día) y finalmente la de mayor valor (el año). Esto es, middle-endian.

Hay algunas diferencias interesantes entre estos dos formatos, especialmente en las diferencias de conceptualización de una fecha entre estas dos culturas:

  1. En Estados Unidos, el día se expresa de manera ordinal. En español se usa de manera cardinal. La traducción literal al español de la fecha estadounidense sería: séptimo [día] de agosto de 2018.
  2. Aún, en ambos casos resulta claro que el día pertenece al mes: 7 de agosto y August 7th.
  3. Los meses (al igual que los días de la semana) en inglés estadounidense son sustantivos propios y por lo tanto se escriben con mayúscula. Para los hispanos, son sustantivos comunes:
    • I was born in September.
    • Nací en septiembre.
  4. En ambos casos, cuando se especifica el día de la semana, se antepone.
  5. Si eliminamos el año, nosotros usamos una notación de cantidad menos significativa a más significativa dd < mm mientras que ellos usan una notación inversa: mm > dd.

Ambigüedades en la interpretación

Desafortunadamente, existen situaciones en donde el formato usado no es distinguible: textos traducidos, fechas con contexto insuficiente, formatos internacionales y programas de cómputo.

En el caso de programas de cómputo, no es posible saber si el programa está mostrando la fecha correctamente regionalizada. Por ejemplo, si un programa está en inglés pero instalado sobre un sistema operativo regionalizado al español y la fecha que se muestra es 3/9/2019, tenemos diferentes posibles interpretaciones:

  • Que el programa tiene código para pedir al sistema operativo la correcta expresión de la fecha, en cuyo caso es 3 de septiembre de 2019.
  • Que el programa no tiene código para pedir al sistema operativo la correcta expresión de la fecha, en cuyo caso es 9 de marzo de 2019.
  • Que el programa incluye sus propias rutinas de regionalización de fecha, pudiendo abrirse en otras dos opciones:
    • Que el programa pregunte al sistema operativo la región en cuestión y que el manejo de fecha esté correcto en sus rutinas, en cuyo caso es 3 de septiembre de 2019.
    • Que el programa no pregunte la región al sistema operativo o que su manejo de fechas sea incorrecto, en cuyo caso podría ser 9 de marzo de 2019.
    • Que el programa contenga una opción de configuración para la regionalización de la fecha.
    • Que el formato aceptado por el programa para el ingreso de fechas corresponda con el formato usado para representarla en pantalla.

Cuando el programa en cuestión es un sitio Web, debemos considerar otros factores como:

  • Si el navegador está correctamente configurado para enviar el encabezado Accept-Language y si se incluye la parte del locale.
  • Si la el servicio respeta el valor indicado por Accept-Language o si utiliza la dirección IP para la geoubicación del usuario.
  • Si el usuario puede especificar manualmente una regionalización en su perfil.

Formato japonés

Al explorar diferentes opciones de regionalización en los sistemas operativos conocí otros formatos, como el japonés, donde ellos usan año-mes-día (YMD): Ejemplo: 2018年8月7日. Observaciones:

  • Este formato es big-endian. Se especifican las cantidades de más a menos significativas: yyyy > mm > dd, al revés que nosotros.
  • Para los meses de un solo dígito, no se antepone un cero.
  • Parecería que no estamos acostumbrados a ese orden, sin embargo, es así como expresamos la hora: hh > mm > ss, Decimos que son las 7:32, no que estamos en el segundo 32 del minuto 7.

Formato ISO 8601

Y finalmente, el formato de fecha definido en el estándar ISO 8601 que sigue el mismo orden que el formato japonés pero:

  • el año siempre se indica en cuatro dígitos,
  • el día y el mes se indican invariablemente con dos dígitos.

Entonces, el formato ISO 8601 lleva la forma YYYY-MM-DD: 2018-08-07. Este formato tiene algunas particularidades:

  1. Se especifican las cantidades de más a menos significativas: yyyy > mm > dd, al revés que nosotros. Es big-endian.
  2. Ingresar una fecha en formato YYYY-MM-DD resulta inambiguo pues nadie utiliza YYYY-DD-MM como su formato de fecha corta.
  3. Al escribir de mayor a menor significancia en el mismo orden que nuestra escritura, el formato de fecha presenta una útil peculiaridad: el orden alfabético de un juego de fechas en formato ISO 8601 coincide con su orden cronológico computacional, aún si se especifican con todo y hora del da. Esto no ocurre con los formatos mexicano ni estadounidense.

Ejemplo: si ordenamos alfabéticamente las siguientes fechas: 2018-07-03, 2019-09-13 y 2018-07-04: nos quedan así: 2018-07-03, 2018-07-04, 2019-09-13, que coincide con su orden cronológico. Esto no funciona si usamos el formato mexicano o estadounidense.

Sin embargo, esto sólo funcionará durante años de cuatro dígitos, pues, alfanuméricamente, 10000 < 9999 debido a que el primer 1 es menor que el primer 9. No es ningún secreto que el ISO 8601 padece de un problema de Y10K, pero es lo mejor que tenemos hasta ahora. Y si unos 2000 años antes optan por usar letras en el primer dígito (A001 en lugar de 10,001) podrían extender el uso de ISO 8601 por 20000 años más.

Comentario final

Acostumbrarme a usar ISO 8601 para mis anotaciones personales me resulta sumamente útil y me ahorra problemas. Obviamente, al momento de compartir información, paso las fechas a un formato más conveniente.

Finalmente, no puedo evitar compartir esta caricatura de XKCD, reference al ISO 8601:

Viernes 17 de agosto de 2018

Alcance Libre: Procedimiento de actualización de PostgreSQL 9.2 a PostgreSQL 9.6 para ALDOS 1.4.

Jueves 02 de agosto de 2018

Marco Islas

Marco Islas
Marco Islas

Documentando código en Python

Eduardo Ruiz Duarte

Eduardo Ruiz Duarte
Beck's blog

The arithmetic geometry of the Fields Medal 2018, perfectoid spaces (part 1/2, Affinoid Spaces)

Today, the fields medal was awarded. One of the recipients is the German director of the Max Planck institute Peter Scholze (he has only 30 years old!). He obtained his Ph.D. inventing and studying his notion of perfectoid spaces which is the topic that I will introduce, but first I will talk about affinoid spaces today.

I have been attending seminars with that is now ex-group of algebraic geometry at the university of Groningen where I made my Ph.D. during the past five months related to overconvergent sheaves and rigid geometry leaded by Jaap Top, Marius van der Put and Stephen Mueller. I learnt there about affinoid spaces and Frobenius structures. I will just define and give some motivation of their invention here and then I will try to give a very brief and informal description of a perfectoid space tomorrow in a continuation of this post.


Why?

One of the main purposes of all these mathematics is to study points on algebraic varieties. For example, is well known by Gerd Faltings  (see here) that the number of solutions of an algebraic curve defined by $latex C(x,y)=0$ of genus $latex g \geq 2$ has a finite number of solutions over any finite extension of $latex \mathbb{Q}$, which we denote by $latex k$. In other words, there is just a finite number of $latex (\tfrac{a}{b},\tfrac{c}{d})$ where $latex a,b,c,d\in O_k$ and $latex c,d\neq 0$ and $latex C(\tfrac{a}{b},\tfrac{c}{d})=0$.

There are bounds for the number of points of $latex C/k$, in fact, if we fix $latex k=\mathbb{Q}$, $latex O_k=\mathbb{Z}$ and $latex C/\mathbb{Q}$ is hyperelliptic, one has that #$latex C(k)\leq 8rg+33(g-1)+1$ where $latex r=\text{rank}(J)$ and $latex J$ is the algebraic group variety associated to the curve $latex C$ which must have rank at most $latex g-3$.  This bound was presented to me in Groningen by professor Michael Stoll from the University of Bayreuth (see here). He uses Chabauty-Coleman integration to obtain this.

The problem is that this bound is very restricted, does not work for varieties of arbitrary dimension, and only works for a very well behaved family of curves (hyperelliptic). For the restriction of $latex r\leq g-3$ there is current hot develpments by Bas Edixhoven, Rene Schoof and others in Leiden using Poincare Torsors on the Neron Severi group of $latex J$.


p-adic numbers (recall)

Consider the non-archimidean field $latex \mathbb{Q}_p$  (here you can construct them using the Cauchy completion of $latex \mathbb{Q}$ under the weird absolute value $latex |x|_p=|p^n\tfrac{a}{b} |_p=p^{-n}$ with $latex p$ prime and $latex a,b\in\mathbb{Z}$ (just as you construct $latex \mathbb{R}$ from the convergent sequences over $latex \mathbb{Q}$. It is handy to represent the elements of $latex \mathbb{Q}_p$ as the "Laurent series" of the form $latex \sum_{i=-m}^\infty a_ip^i\in\mathbb{Q}_p$ where $latex a_i\in\{0,...,p-1\}$ and $latex m\in\mathbb{Z}^+$ (see Theorem 3.4 here).

There is very nice theory that we wont expose here, such that taking the curve $latex C/\mathbb{Q}_p$ can tell us information of $latex C/\mathbb{Q}$. You can imagine this field $latex \mathbb{Q}_p$ as being something that approximates a solution point of $latex C$ over $latex \mathbb{Q}$, since its elements are power series in p, and we will use this "imagination" which is very informal, to indeed, pursue this objective. For the algebrist it is easier to define these numbers. We start with the inverse limit of the rings $latex \mathbb{Z}/p^n\mathbb{Z}$ which we denote by $latex \mathbb{Z}_p$. A p-adic integer $latex m$ is then a sequence $latex (a_n)_{n\geq 1}$ such that $latex a_n$ is in $latex \mathbb{Z}/p^n\mathbb{Z}$. If $latex n \leq m$, then $latex a_n \equiv a_m (\bmod p^n)$. It is easy to check that the ring of fractions of $latex \mathbb{Z}_p$ is in fact what we described before, the field $latex \mathbb{Q}_p$ which has characteristic 0.

Affinoid algebras and spaces.

Consider the field $latex \mathbb{Q}_p$ for some prime $latex p$. Consider the ring of formal power series in the variables $latex x_1,...,x_n$ and the subring $latex \tau_n\subset \mathbb{Q}_p[[x_1,...,x_n]]$ of all the strictly convergent series, that is, if we denote the power series in multi index notation as $latex \sigma:=\sum_{I} c_I x^I$,  then $latex \sigma\in\tau_n$ if and only if $latex |c_I|_p=0$ as $latex I\to \infty$. This give us a feature of $latex \tau_n$, first,... it is a ring and an algebra (prove it). Moreover, every element  $latex \sigma\in\tau_n$ has a norm, $latex ||\sigma||=\sup\{c_I\}_{I}$, making $latex \tau_n$ a Banach $latex \mathbb{Q}_p$-algebra of countable type. So here, we reduced the horribly big ring of formal power series to something which cohomologically will be more "manageable", in fact $latex \tau_n$ is a unique factorization domain with Krull dimension $latex n$.

An affinoid algebra is any $latex A:=\tau_n/(J)$ where $latex J$ is a closed ideal of $latex A$.  An affinoid space $latex X$ is the maximal spectrum of this ring, that is $latex X=\text{Specm}(A)$ (set of maximal ideals of $latex A$, which can be regarded as points).

Imagine that to study $latex C/\mathbb{Q}$ you will consider the space of points $latex X_C:=\text{Specm}\;\tau_2/(C(x,y))$, which can be given many topologies, like the Zariski (very coarse unfortunately), Grothendieck or étale Topology and others.


Tomorrow (I hope) I will continue with perfectoid spaces and I will try to develop an example of how to work with these spaces which allow us to work with "mixed characteristic", namely, characteristic 0 and p.


The geometry of curves over $latex K:= \mathbb{Q}_p$ is very interesting, here, as a matter of morbosity, I leave you of the Berkovich projective line using these ideas for $latex \mathbb{P}^1(K)$.




Eduardo Ruiz Duarte
Twitter: @torandom
PGP: FEE7 F2A0

Sábado 28 de julio de 2018

Marco Islas

Marco Islas
Marco Islas

Cinco programas antiguos que siguen siendo muy útiles (y no tienen rival)

Viernes 27 de julio de 2018

Marco Islas

Marco Islas
Marco Islas

Buenas practicas en Django

Aquí no hay mucho que decir, estamos hablando de Python y por lo tanto aplican las reglas de estilo de Código de Python, debes escribir siguiendo la PEP8. Django también tiene sus propias convenciones para escribir código, estas las puedes encontrar aquí , coteja con las de Python, verás que son complementarias.

Lunes 23 de julio de 2018

Alex Callejas

Alex Callejas
|rootzilopochtli.com|

AdminFest 2018 – Celebremos el 19° Día del SysAdmin

Como ya es toda una costumbre, el próximo 27 de Julio, se celebrará internacionalmente el Día del Administrador de Sistemas. Para esta su 19a edición, y con el fin de que pueda asistir la mayoría, la comunidad SysArmy México, nos reuniremos el Sábado 28 de Julio para compartir historias y anécdotas al lado de una buena botana y una ronda de retas de arcade al estilo de la vieja escuela 😉 , la invitación es extendida a quién guste acompañarnos; a los primeros en llegar, SysArmy México les tiene preparadas varias sorpresas:

La cita es en Game Score, cerca de las 7:30 PM y hasta que las obligaciones nos lo permitan. La dirección es:

Calle Niza 19 PB, Juárez, 06600 Ciudad de México, CDMX

Además de lo acostumbrado, el buen amigo Gunnar Wolf, nos ha obsequiado un ejemplar de su libro “Fundamentos de Sistemas Operativos“, dedicado conforme a la ocasión, el cuál será el premio de una dinámica durante el evento.

Para registrarse al evento, confirmen su asistencia en la liga del meetup.

Allá nos vemos!! 🙂

Alcance Libre: Disponible ALDOS 1.4.14

Martes 17 de julio de 2018

Gunnar Wolf

Gunnar Wolf
Gunnar Wolf

A very nice side-project that has come to fruition: Fresh from the 1960s, my father's travel memories

So... Everybody I've interacted with along the last couple of weeks knows I'm basically just too busy. If I'm not tied up with stuff regarding my privacy/anonymity project at the university, I am trying to get the DebConf scheduling, or trying to catch up with my perpetual enemy, mail backlog. Of course, there's also my dayjob — Yes, it's vacation time, but I'm a sysadmin, and it's not like I want to give software updates much of a vacation! Of course, my family goes to Argentina for a couple of weeks while I go to DebConf, so there's quite a bit of work in that sphere as well, and... And... And... Meh, many other things better left unaccounted for ☺
But there's one big extra I was working on, somewhat secretly, over the last two months. I didn't want to openly spill the beans on it until it was delivered in hand to its recipient.
Which happened this last weekend. So, here it is!

During the late 1960s, my father studied his PhD in Israel and had a posdoctoral stay in Sweden. During that time, he traveled through the world during his vacations as much as he could — This book collects his travels through Ethiopia (including what today is Eritrea), Kenya, Uganda, Rwanda, Burundi, Turkey, Afghanistan, Pakistan, Czechoslovakia, Sweden, Norway, Iceland and India. As he took those trips, he wrote chronicles about them, and sent them to Mexico's then-most-important newspaper (Excélsior), which published each of them in four to six parts (except for the Czechoslovakia one, which is a single page, devoted to understanding Prague two years after the Soviet repression and occupation).

I did this work starting from the yellow-to-brown and quite brittle copies of the newspaper he kept stored in a set of folders. I had the help of a digitalization professional that often works for the University, but still did a couple of cleanup and QA reads (and still, found typos... In the first printed page, in the first title! :-/ ). The text? Amazing. I thoroughly enjoyed it. He wrote the chronicles being between 23 and 27 years old, but the text flows quick and easy, delightful, as if coming from a professional writer. If you can read Spanish, I am sure you will enjoy the read:

Chronicles of a backpacker in a more naïve world

Why am I publishing this now, amid the work craze I've run into? Because my father is turning 75 year old next weekend. We rushed the mini-party for him (including the book-as-a-present) as we wanted my kids to deliver the present, and they are now in a plane to South America.

The book run I did was quite limited — Just 30 items, to give away to family and close friends. I can, of course, print more on demand. But I want to take this work to a publisher — There are many reasons I believe these youth chronicles are of general interest.

AttachmentSize
libro_bwolf.jpg64.11 KB
portada.jpg368.39 KB
cronicas_de_un_mochilero.pdf25.3 MB

Lunes 16 de julio de 2018

Octavio Alvarez

Octavio Alvarez
Planeta Linux –

Video: Cómo usar Vim, abril de 2018

He subido un nuevo video a YouTube, titulado “Taller práctico: Cómo usar Vim”

Es la grabación de mi participación en el FLISoL 2018 celebrado en Guadalajara, México, en LinuxCabal el pasado sábado 28 de abril de 2018.

Liga al video en YouTube: https://www.youtube.com/watch?v=J7EjB7HiMTw

Viernes 13 de julio de 2018

Itzcoalt Alvarez Moreno

Itzcoalt Alvarez Moreno
Itzcoalt (itz) Álvarez

AMLO Presidente.

Hot:

Finalmente, lo que las encuestas nos marcaban se ha convertido en una realidad, AMLO gana las elecciones presidenciales por un amplio margen.

Muchos se preguntan si la votación ha sido por ignorancia o por el cansancio del abuso del actual régimen, la respuesta es interesante, pero palidece ante el hecho de que los próximos seis años nos espera un gobiernos que seguramente romperá los protocolos y la normatividad  existente.

Se puede decir que ese  es el cambio que la gente espera, yo personalmente espero que los efectos directos y secundarios de las acciones que se realicen dejen a México en una mejor posición, y que realmente no estemos entrando a una etapa obscura de nuestra historia.

Como lo mencione en algún momento, hay que estar alertas a lo que sucede, y siempre tener el pasaporte vigente y a la mano, no sea que necesitemos tomar unas vacaciones algo largas.

AMLO tiene retos interesantes que vencer, se vera si sus asesores o el mismo pueden resolverlos de la mejor manera, también  ya no deberá de dar excusas para definir realmente el “COMO” realizara lo que prometió, por que finalmente ya tendrá los elementos necesario para llevar acabo los cambios ofrecidos, ya es gobierno.

Atentos estemos.

 

 

Itzcoalt Alvarez Moreno

Itzcoalt Alvarez Moreno
Itzcoalt (itz) Álvarez

45 !!!!!

Hot:

El momento llego, he cumplido 45 años, ya no soy el chaval de antaño, ni tampoco el veterano de un futuro cercano, estoy en un punto medio que me permite ver lo afortunado que he sido, y esperar que mis acciones actuales me permitan tener un futuro relajado.

Cuando llegas a cierta edad, empiezas a preocuparte por tus gastos funerarios, por tus ingresos durante la vejes, por  el testamento, y por las actividades que realizaras cuando decidas retirarte, y es que aun me hacen falta algunos años, pero ya es necesario aprender a hacer algunas otras actividades que me permitan relajarme en mis tiempos de ocio.

Así que, bienvenidos los 45, y esperamos llegar a los 50.

 

Domingo 08 de julio de 2018

Anillo en el cielo

Ayer, regresando de almorzar, el cielo nos dio un espectáculo.

Jueves 05 de julio de 2018

Planeta Gruslic: Max Valdez: Cosas que voy a observar

Domingo 01 de julio de 2018

La triste historia de una compra no realizada o de como digitalife nunca cumplió

En 2017 decidí dar una sorpresa y regalarle a mi pareja un ipod mini, puesto que Sanborns había tenido el juguete en oferta (pero en una versión ya vieja), me pareció que otras cadenas lo podían tener en oferta y resulto que Digitallife lo tenia en un muy buen precio, me puse a leer los términos de servicio que parecen un contrato de MS y que en su momento me parecieron draconianos y muy raros y recordé que alguna vez me comentaron que eran buena tienda física, pero no tan buena digital, pero pensando en la comodidad y en el costo de envió, decidí brincar estos dos detalles, gran error.

El domingo 29 de enero, me registro y valido mi cuenta, lunes 30 de enero levanto mi pedido y lo pago, totalmente contento porque por más lento que pueda ser la cosa debería de estar como para el la segunda semana de febrero en mi domicilio y ademas de que su sistema me enviá un correo muy formal:

Su pedido en Digitalife ha sido generado correctamente.

1 message
Digitalife <noreply@digitalife.com.mx> Mon, Jan 30, 2017 at 7:42 PM
Reply-To: noreply@digitalife.com.mx
To: vicm3@blografia.net

Su pedido fue generado correctamente
Hola,
Víctor Manuel Martínez Martinez

¡Gracias por comprar en Digitalife!
Recibimos tu pedido número 64195
Procesaremos tu pedido una vez que recibamos tu pago, y la disponibilidad del producto comenzará a partir de esa fecha.

A continuación encontrarás todos los detalles sobre tu compra:
Número de pedido: 64195
PRODUCTO CANTIDAD IMPORTE TOTAL
IPAD MINI 2 RETINA APPLE 16GB A7 8″ WIFI GRIS ESPACIAL ME276E/A
Número de Parte: ME276E/A
1
$ 4,791.67
IVA INCLUIDO

Subtotal: $4,130.75
IVA 16%: $660.92
Total con IVA: $4,791.67
TOTAL A PAGAR: $4,791.67
MÉTODO DE PAGO
A través de tarjeta de crédito

Pago e imaginé que se me contactaría por ser primera compra o para ver sobre el pago como esta en sus términos de servicio:

DIGITALIFE se reserva el derecho de cancelar cualquier pago que no cumpla con los requisitos que solicite el banco, esto significa que en ciertos casos se le puede pedir que nos envíe una copia de su identificación oficial y/o comprobante de domicilio, así como RFC, copia del estado de cuenta de su tarjeta de crédito o débito y otros documentos que comprueben su identidad. En caso de cualquier falta de documentos solicitado su pago será revertido.

Y no lo hacen, de hecho en la página pasadas 72 horas es decir el miércoles primero por la noche les escribo, que cual es el estatus de mi pedido y me contestan con el siguiente correo:

Tiene nuevos mensajes sobre su pedido 64195.
1 message
Digitalife <noreply@digitalife.com.mx> Thu, Feb 2, 2017 at 1:00 PM
Reply-To: “noreply@digitalife.com.mx” <noreply@digitalife.com.mx>
To: vicm3@blografia.net

Nuevo mensaje de Digitalife
Tiene nuevos mensajes de Digitalife con relación a su pedido 64195.

Primer mensaje sin leer: Buen día, los pagos con tarjeta tardan en reflejarse de 24 a 48 horas hábiles, en cuanto se refleje le cambiaremos el status de su pedido.
Para VER este mensaje favor haz click AQUI.
Agradecemos tu preferencia

Les contesto que ya lleva 72 horas que se pago a lo que responden:

64195
3 messages
Ventas Internet <ventas.internet@digitalife.com.mx> Fri, Feb 3, 2017 at 10:11 PM
To: vicm3@blografia.net
Buen día

Su pedido se encuentra en validación, es necesario que nos envíe una copia de su IFE y una copia de la caratula de su estado de cuenta reciente a nuestro correo: ventas.internet@digitalife.com.mx

Estamos a sus órdenes.

Esto el viernes por la tarde, lo cual me deja con muchas más dudas ya que bueno el IFE me lo esperaba de la lectura de sus términos de servicio pero una copia de la caratula del estado de cuenta, tiene información que el banco pide que sea manejada de manera confidencial y que no sea revelada ni al propio banco, por lo que los contacto por teléfono la mañana del sábado y como al tercer intento conecto con un humano o tal vez con el vigilante, que sólo atina a decirme que si ay información confidencial que la tape en la copia… y eso hago envió la información del estado de cuenta con lo que considero confidencial con tache negro y una imagen de mi IFE con marca de agua en blanco y negro.

Y el correo de arriba es la ultima comunicación de su parte, como se pasa la fecha en que quería hacer el obsequio el 8 llamo de nuevo a su numero, en el cual de las veces que llevaba hasta ese momento la mitad de ocasiones se perdía la llamada, me contesta Tere y me dice que no ha procedido el pago (SIC, puesto que desde el 30 mi banco me hizo el cobro) puesto que necesitan mi IFE a color (y por alguna razón desconocida no me lo han hecho saber)… se envía como la piden… y nos vamos de vacaciones, valga mencionar que con re dirección de llamadas por si llegasen a llamar… no sucede.

El 23 de febrero ya de regreso en casa reviso mi cuenta para ver que pasa con mi pedido y resulta que el articulo ya no aparece, ni mi orden, me comunico, sufriendo para conectar y perdiendo un par de veces la conexión telefónica y se me dice que no se tiene el articulo en existencia y a la pregunta de cuando se enviara o se tendrá en existencia, la respuesta es que no se sabe, por lo que se pide la devolución del pago, se asegura que se tendrá una respuesta después de las 16 horas… no hay comunicación de su parte.

Primero de marzo se les envía correo, preguntando que paso “En espera de información, se solicito devolución del pago. Se quedo que se informaría el 23 de febrero. ”

16 de marzo llamada telefónica, 11 minutos al teléfono, pasando entre extensiones, en una transferencia, me cuelgan, se vuelve a llamar para saber el estado de la devolución otra vez pasando entre extensiones, teniendo que explicar a cada ejecutivo todo el asunto completo, se informa de parte de Daniel que se pasó al banco el 15 de marzo que de 5 a 7 días hábiles se vera el deposito, como se cruza el fin de semana largo se espera que hasta el día de corte aparezca, esto es para mi el 4 de abril y especialmente para recibir el estado de cuenta como por el 10, espero hasta esa fecha, a que llegue el estado de cuenta y no hay rembolso…

Se sale de vacaciones me olvido del asunto que ya me tiene harto y el 24 de abril revisando mi correo y notas no tengo mas que la confirmación del cobro la necesidad de documentación y ningún seguimiento de su parte del servicio que se pago o siquiera del rembolso, me molesto terriblemente porque no he anotado la cantidad y duración de llamadas que he tenido que hacer y de las cuales más de la mitad han terminado en espera hasta que cuelgan o que me han colgado sin mas o se cortan, se llena ese mismo día la forma de contacto para que se contacten con uno… hago cuentas y ya se pasaron los noventa días para reportar el cargo como invalido con el banco, que en febrero no lo hice porque en esencia confiaba en que la compañía se hiciera responsable y entregara rápidamente el producto o me devolviera mi dinero, lo cual tristemente descubrí no fue capaz de hacer.

Me pase al paquete sin limites de telcel para poderlos llamar cuando fuera en el transporte en el tiempo muerto, para llevarme el chasco de que cuando uno llama por celular a un sistema de que lo pone en espera después de un minuto de no haber voz, corta automáticamente la llamada…. GRRRRR ya francamente harto de tener sólo interacción por teléfono y que solo sea que me tenga que chutar la grabación esperar y pasar entre extensiones me prometo no volver a hablarles por teléfono

El 15 de mayo contacto a PROFECO para ver cuales son mis opciones:

Compra no cumplida
1 message
Victor Martinez <vicm3@blografia.net> Mon, May 15, 2017 at 12:57 PM
To: asesoria@profeco.gob.mx
En enero realicé una compra en línea y no me entregaron el producto, ni me han devuelto mi dinero, ya me canse de llamarles por teléfono y tener que dar vueltas en su sistema de telefónico y que me pasen de extensión en extensión.

Segun leo en http://www.gob.mx/profeco/documentos/tuviste-algun-problema-de-consumo?state=published necesito algo como esto

<Mi dirección>

Fusion Store S.A. de C.V. con nombre comercial DIGITALIFE® y domicilio en Calle Garibaldi 2410, Colonia Ladrón de Guevara, C.P. 44600, Guadalajara, Jalisco México

En enero se compró a través del sitio de internet de https://www.digitalife.com.mx/, un ipod mini por 4791.67 pesos se realizó el cobro mediante tarjeta y se han realizado llamadas a GDL para gestionar primero los datos extra que pidieron a saber INE y Estado de cuenta de la tarjeta con que se pagó, al no tener en existencia el producto se pidió la devolución del pago lo cual al día de hoy no ha sucedido.

¿Qué documentos, requiero para poder levantar una queja para que me devuelvan mi dinero? ¿Necesito ir a una oficina de PROFECO? Ya que en horario de oficina solo podría miércoles o viernes.

Ya pensando que la dirección de PROFECO no era leída por nadie el 23 de mayo recibo esto:

BV SE PROPORCIONA ASESORÍA [InteractionID:d089d4e6-c741-4ed8-8c05-003294dfa25a]
1 message
asesoria@profeco.gob.mx <asesoria@profeco.gob.mx> Tue, May 23, 2017 at 10:03 AM
To: victor

Subprocuraduría de Servicios

Dirección General de Quejas y Conciliación

Dirección de Asesoría e Información

Apreciable Consumidor(a),

En atención al correo electrónico que nos es enviado a la Procuraduría Federal del Consumidor, con relación a la problemática que enfrenta con el proveedor Fusion Store SA de CV, derivado del rembolso que está solicitando.

Al respecto le comento, una de las obligaciones del proveedor es entregar el bien o suministrar el servicio de acuerdo con los términos y condiciones ofrecidos en la publicidad, salvo que exista un acuerdo en contrario entre el consumidor y el proveedor, o consentimiento escrito del consumidor, igualmente entregar al consumidor factura, recibo o comprobante, en el que consten los datos específicos de la compra del bien o servicio, así como hacerse responsable por sus actos o por los de sus empleados.

En relación a lo anterior, si a Usted se le incumplió con la entrega del bien, cuenta con el o los documentos donde se establezca la relación de consumo, lo ha notificado y continúan sin realizarle el reembolso; se le extiende una invitación para que acuda a la delegación Profeco, con la finalidad de que personal de la Institución lleve a cabo el análisis de los hechos y la documentación correspondiente para determinar si existen elementos jurídicos suficientes, formalizando así una queja y comenzar con el procedimiento conciliatorio, a que haya lugar. El objetivo de este procedimiento es que tanto proveedor (a) como consumidor (a) lleguen a un acuerdo y Profeco vigile que no se violenten sus derechos.

En atención al problema que enfrenta, le comento que la Procuraduría Federal del Consumidor pone a su disposición las siguientes formas para hacer valer sus derechos para que decida cual le resulta más práctica.

Tiene la opción de agendar una cita en el micro sitio del Teléfono del Consumidor en Línea, ingresando a http://telefonodelconsumidor.gob.mx/, aquí podrá programar, reprogramar o cancelar citas en nuestras respectivas delegaciones; o bien acudir directamente a la Delegación Profeco en un horario de lunes a viernes de 9:00 a 15:00 horas, (para conocer la ubicación de nuestras delegaciones, puede consultar nuestra página de Internet http://www.profeco.gob.mx/delegaciones/delegaciones.asp.)

Presentando los siguientes requisitos:

· Nombre y domicilio del consumidor o consumidora;

· Descripción del bien o servicio que se reclama y relación de los hechos;

· Señalar nombre y domicilio del proveedor que se contenga en el comprobante o recibo que ampare la operación materia de la reclamación, y

· Documento que acredite la relación de consumo en original y dos copias (contrato, factura, recibo, publicidad, etc.).

Si al titular de la compra o de la contratación del servicio le fuera imposible acudir de manera personal a la delegación, puede hacerlo otra persona en su representación, siempre y cuando lleve consigo carta poder simple firmada por el titular, su representante y dos testigos, además de su identificación.

El término para presentar las reclamaciones ante Profeco relacionadas con enajenación de bienes, productos o prestación de servicios, uso o goce temporal de bienes es de un año a partir de la fecha de contratación, pago o entrega del bien o servicio, o de la última fecha en que solicito al proveedor el cumplimiento de sus obligaciones.

Su opinión es importante para mejorar los servicios del Teléfono del Consumidor, por lo que le invitamos a realizar una encuesta de satisfacción dando clic en la siguiente dirección: (http://www.profeco.gob.mx/encuestas/EncuestasTelcon/EncuestaCorreo.asp)

Quedo a sus órdenes.

Belén Velázquez Bolaños.

Asesora del Teléfono del Consumidor

Dirección de Asesoría e Información

¿Y notan el detalle? Hay que ir en persona u otorgar un poder… y que creen se cuenta con un año, 2017 fue muy complicado para mi y la verdad no veía un momento para realizar el asunto de la oficina y darle seguimiento y ya harto del teléfono y de todo esto, busque y busque un momento para realizarlo y no lo encontré de verdad que en el correo de arriba donde pongo que sólo puedo miércoles y viernes, no es broma… pero en retrospectiva parece tan sencillo, llego enero de 2018 y se fue y se paso el año del que tiene uno para reclamar y como no encuentro mejor manera de quejarme, quede la entretenida y triste historia (al menos para mi) en este lugar como advertencia de proveedores que no cumplen, tienen sistemas telefónicos que pareciera son diseñados para no dar servicio a sus usuarios y que le dan vueltas a las cosas hasta exasperar a las personas.

En fin que si a alguien le es útil esta información ya vamos de gane.

Viernes 29 de junio de 2018

Gunnar Wolf

Gunnar Wolf
Gunnar Wolf

Want to set up a Tor node in Mexico? Hardware available

Hi friends,

Thanks to the work I have been carrying out with the "Derechos Digitales" NGO, I have received ten Raspberry Pi 3B computers, to help the growth of Tor nodes in Latin America.

The nodes can be intermediate (relays) or exit nodes. Most of us will only be able to connect relays, but if you have the possibility to set up an exit node, that's better than good!

Both can be set up in any non-filtered Internet connection that gives a publicly reachable IP address. I have to note that, although we haven't done a full ISP survey in Mexico (and it would be a very important thing to do — If you are interested in helping with that, please contact me!), I can tell you that connections via Telmex (be it via their home service, Infinitum, or their corporate brand, Uninet) are not good because the ISP filters most of the Tor Directory Authorities.

What do you need to do? Basically, mail me (gwolf@gwolf.org) sending a copy to Ignacio (ignacio@derechosdigitales.org), the person working at this NGO who managed to send me said computers. Oh, of course - And you have to be (physically) in Mexico.

I have ten computers ready to give out to whoever wants some. I am willing and even interested in giving you the needed tech support to do this. Who says "me"?

Abierto libro, libre de ruido. Ven, vívelo.

Autor: Mario Villamil Granados.

Abierto libro, libre de ruido. Ven, vívelo. Mario Villamil Granados (mvillamil arroba upn punto mx), junio 2018

Mario comparte a cada rato en el correo institucional su visión del mundo, la cual es muy bella, interesante y provocadora, no se acomoda a las plataformas de publicación electronica, alguna vez nos sentamos a probar flickr y no le encontró, lo intentamos un par de veces más y desistió… entonces hoy que comparte esta imagen, la comparto aquí que llegará a mas personas y un publico mayor, no dudo que eventualmente las publique en otros medios, mientras tanto, aquí una muestra.

Jueves 28 de junio de 2018

Planeta Gruslic: Héctor Daniel Cortés: ¡De panzazo!

Domingo 24 de junio de 2018

Gunnar Wolf

Gunnar Wolf
Gunnar Wolf

Yes! I am going to...

Having followed through some paperwork I was still missing...

I can finally say...

Dates

I’m going to DebCamp18! I should arrive at NCTU in the afternoon/evening of Tuesday, 2018-07-24.

I will spend a day prior to that in Tokio, visiting a friend and probably making micro-tourism.

My Agenda

Of course, DebCamp is not a vacation, so we expect people that take part of DebCamp to have at least a rough sketch of activities. There are many, many things I want to tackle, and experience shows there's only time for a fraction of what's planned. But lets try:

keyring-maint training
We want to add one more member to the keyring-maint group. There is a lot to prepare before any announcements, but I expect a good chunk of DebCamp to be spent explaining the details to a new team member.
DebConf organizing
While I'm no longer a core orga-team member, I am still quite attached to helping out during the conference. This year, I took the Content Team lead, and we will surely be ironing out details such as fixing schedule bugs.
Raspberry Pi images
I replied to Michael Stapelberg's call for adoption of the unofficial-but-blessed Raspberry Pi 3 disk images. I will surely be spending some time on that.
Key Signing Party Coordination
I just sent out the Call for keys for keysigning in Hsinchu, Taiwan. At that point, I expect very little work to be needed, but it will surely be on my radar.

Of course... I *do* want to spend some minutes outside NCTU and get to know a bit of Taiwan. This is my first time in East Asia, and don't know when, if ever, I will have the opportunity to be there again. So, I will try to have at least the time to enjoy a little bit of Taiwan!

Viernes 22 de junio de 2018

Emerson Posadas

Emerson Posadas
toxickore BLOG

Vintage Computing Festival Berlin (VCFB)

https://www.vcfb.de/2018/

VCFB Flyer (PNG)
:')

Jueves 14 de junio de 2018

Gustavo Rubio

Gustavo Rubio
Ahí vamos

¿Por qué amamos odiar a Microsoft (y su compra de GitHub)?

Recuerdo bien la primera vez que intenté instalar Linux en el otoño del año 2000: una de esas revistas que compraba, alguna especia de PC

Jueves 07 de junio de 2018

Gustavo Rubio

Gustavo Rubio
Ahí vamos

El (triste) estado de la privacidad de datos en México

Seguramente en las últimas semanas has recibido, al igual que la mayoría de usuarios de casi cualquier servicio de Internet, decenas (o hasta cientos, literalmente)

Jueves 31 de mayo de 2018

Gustavo Rubio

Gustavo Rubio
Ahí vamos

Mi (no tan) reciente amor por los relojes

Todos tenemos “hobbies” e intereses distintos y a veces muy particulares. Hay quienes coleccionan cosas por puro gusto como monedas, vehículos a escala, estampas, etc.

Viernes 18 de mayo de 2018

Miguel de Icaza

Miguel de Icaza
Miguel de Icaza

Startup Improvements in Xamarin.Forms on Android

With Xamarin.Forms 3.0 in addition to the many new feature work that we did, we have been doing some general optimizations across the board, from compile times to startup times and wanted to share some recent results on the net effect on one of our larger sample apps.

These are the results when doing a cold start for the SmartHotel360 application on Android when compiled for 32bits (armeabi-v7a) on a Google Pixel (1st gen).

Release Release/AOT Release/AOT+LLVM
Forms 2.5.0 6.59s 1.66s 1.61s
Forms 3.0.0 3.52s 1.41s 1.38s

This is independent of the work that we are doing to improve Android's startup speed, that both brings additional benefits today, and will bring additional benefits in the future.

One of the areas that we are investing on for Android is to remove any dynamic code execution at startup to integrate with the Java runtime, instead all of this is being statically computed, similar to what we are doing on Mac and iOS where we completely eliminated reflection and code generation from startup.

Miércoles 16 de mayo de 2018

Planeta Gruslic: Max Valdez: Amnistía a los narcos ?
Alcance Libre: Cambios en ALDOS 1.4

Domingo 29 de abril de 2018

Alex Callejas

Alex Callejas
|rootzilopochtli.com|

FLISoL 2018 – La fiesta del software libre

Compartir el conocimiento es generar riqueza intelectual – Richard Stallman

Hace unos días tuve el agrado de presentarme una vez más, en el mayor evento de difusión del Software Libre: El Festival Latinoamericano de Instalación de Software Libre (FLISoL). En esta edición, me invitaron al Centro Cultural “El Rule” y a la Fes Acatlán:

En donde presente mi plática sobre la 3a Ley del SysAdmin (Automatización) además de un taller de Administración de Sistemas y otro más de SELinux.

Pueden descargar ambas presentaciones aquí:

Las fotos del evento las pueden checar en est post del facebook del blog: FLISoL 2018.

Les dejo también el vídeo de la presentación:

Ver en Youtube

Gracias a todos los organizadores por la invitación, en especial a Wendy, Charly, Diego y Emilio, lo disfrute muchísimo!! 🙂

 

 

 

Miércoles 18 de abril de 2018

Instalar Let’s Encrypt SSL en CentOS 7 con Apache

Let’s Encrypt es una autoridad de certificacion (CA) gratuita, automatizada y abierta:Let's Encrypt Logo

Let’s Encrypt is a free, automated, and open certificate authority (CA), run for the public’s benefit. It is a service provided by the Internet Security Research Group (ISRG).

Para el propósito de esta guía usaremos el dominio chingon.com y será referenciado de ahora en adelante.

 

Paso 1 – Instalando el software necesario

Nos conectamos a nuestro servidor e instalamos los paquetes mod_ssl y certbot-apache. El primero es una dependencia para poder hacer uso de los certificados.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
perengano@elrond:~$ ssh vpsmikel.ds
Last login: Tue Apr 17 03:08:56 2018 from 189.201.191.13
[perengano@B8GUsg ~]$ sudo su -
[sudo] password for perengano:
Último inicio de sesión:mar abr 17 03:09:03 EDT 2018en pts/0
[root@B8GUsg ~]# yum install mod_ssl
[root@B8GUsg ~]# yum install certbot-apache
Loaded plugins: fastestmirror
base | 3.6 kB 00:00:00
epel/x86_64/metalink | 29 kB 00:00:00
extras | 3.4 kB 00:00:00
remi-php70 | 2.9 kB 00:00:00
remi-php72 | 2.9 kB 00:00:00
remi-safe | 2.9 kB 00:00:00
updates | 3.4 kB 00:00:00
vz-base | 951 B 00:00:00
vz-updates | 951 B 00:00:00
updates/7/x86_64/primary_db | 6.9 MB 00:00:01
Loading mirror speeds from cached hostfile
* base: mirror.reconn.ru
* epel: mirror.logol.ru
* extras: mirror.reconn.ru
* remi-php70: mirror.reconn.ru
* remi-php72: mirror.reconn.ru
* remi-safe: mirror.reconn.ru
* updates: mirror.reconn.ru
Resolving Dependencies
--&gt; Running transaction check
---&gt; Package python2-certbot-apache.noarch 0:0.22.2-1.el7 will be installed
--&gt; Processing Dependency: certbot &gt;= 0.21.1 for package: python2-certbot-apache-0.22.2-1.el7.noarch
--&gt; Processing Dependency: python2-certbot &gt;= 0.21.1 for package: python2-certbot-apache-0.22.2-1.el7.noarch
--&gt; Processing Dependency: python-augeas for package: python2-certbot-apache-0.22.2-1.el7.noarch
--&gt; Running transaction check
---&gt; Package certbot.noarch 0:0.22.2-1.el7 will be installed
--&gt; Processing Dependency: /usr/sbin/semanage for package: certbot-0.22.2-1.el7.noarch
---&gt; Package python-augeas.noarch 0:0.5.0-2.el7 will be installed
--&gt; Processing Dependency: augeas-libs for package: python-augeas-0.5.0-2.el7.noarch
---&gt; Package python2-certbot.noarch 0:0.22.2-1.el7 will be installed
--&gt; Processing Dependency: python2-acme &gt; 0.21.1 for package: python2-certbot-0.22.2-1.el7.noarch
--&gt; Processing Dependency: python-configobj for package: python2-certbot-0.22.2-1.el7.noarch
--&gt; Processing Dependency: python-parsedatetime for package: python2-certbot-0.22.2-1.el7.noarch
--&gt; Processing Dependency: python-setuptools for package: python2-certbot-0.22.2-1.el7.noarch
--&gt; Processing Dependency: python-zope-component for package: python2-certbot-0.22.2-1.el7.noarch
--&gt; Processing Dependency: python-zope-interface for package: python2-certbot-0.22.2-1.el7.noarch
--&gt; Processing Dependency: python2-configargparse for package: python2-certbot-0.22.2-1.el7.noarch
--&gt; Processing Dependency: python2-cryptography for package: python2-certbot-0.22.2-1.el7.noarch
--&gt; Processing Dependency: python2-future for package: python2-certbot-0.22.2-1.el7.noarch
--&gt; Processing Dependency: python2-josepy for package: python2-certbot-0.22.2-1.el7.noarch
--&gt; Processing Dependency: python2-mock for package: python2-certbot-0.22.2-1.el7.noarch
--&gt; Processing Dependency: python2-pyrfc3339 for package: python2-certbot-0.22.2-1.el7.noarch
--&gt; Processing Dependency: pytz for package: python2-certbot-0.22.2-1.el7.noarch
--&gt; Running transaction check
---&gt; Package augeas-libs.x86_64 0:1.4.0-2.el7_4.2 will be installed
---&gt; Package policycoreutils-python.x86_64 0:2.5-17.1.el7 will be installed
--&gt; Processing Dependency: setools-libs &gt;= 3.3.8-1 for package: policycoreutils-python-2.5-17.1.el7.x86_64
--&gt; Processing Dependency: libsemanage-python &gt;= 2.5-5 for package: policycoreutils-python-2.5-17.1.el7.x86_64
--&gt; Processing Dependency: audit-libs-python &gt;= 2.1.3-4 for package: policycoreutils-python-2.5-17.1.el7.x86_64
--&gt; Processing Dependency: python-IPy for package: policycoreutils-python-2.5-17.1.el7.x86_64
--&gt; Processing Dependency: libqpol.so.1(VERS_1.4)(64bit) for package: policycoreutils-python-2.5-17.1.el7.x86_64
--&gt; Processing Dependency: libqpol.so.1(VERS_1.2)(64bit) for package: policycoreutils-python-2.5-17.1.el7.x86_64
--&gt; Processing Dependency: libcgroup for package: policycoreutils-python-2.5-17.1.el7.x86_64
--&gt; Processing Dependency: libapol.so.4(VERS_4.0)(64bit) for package: policycoreutils-python-2.5-17.1.el7.x86_64
--&gt; Processing Dependency: checkpolicy for package: policycoreutils-python-2.5-17.1.el7.x86_64
--&gt; Processing Dependency: libqpol.so.1()(64bit) for package: policycoreutils-python-2.5-17.1.el7.x86_64
--&gt; Processing Dependency: libapol.so.4()(64bit) for package: policycoreutils-python-2.5-17.1.el7.x86_64
---&gt; Package python-configobj.noarch 0:4.7.2-7.el7 will be installed
---&gt; Package python-setuptools.noarch 0:0.9.8-7.el7 will be installed
--&gt; Processing Dependency: python-backports-ssl_match_hostname for package: python-setuptools-0.9.8-7.el7.noarch
---&gt; Package python-zope-component.noarch 1:4.1.0-3.el7 will be installed
--&gt; Processing Dependency: python-zope-event for package: 1:python-zope-component-4.1.0-3.el7.noarch
---&gt; Package python-zope-interface.x86_64 0:4.0.5-4.el7 will be installed
---&gt; Package python2-acme.noarch 0:0.22.2-1.el7 will be installed
--&gt; Processing Dependency: pyOpenSSL &gt;= 0.13 for package: python2-acme-0.22.2-1.el7.noarch
--&gt; Processing Dependency: python-ndg_httpsclient for package: python2-acme-0.22.2-1.el7.noarch
--&gt; Processing Dependency: python2-pyasn1 for package: python2-acme-0.22.2-1.el7.noarch
--&gt; Processing Dependency: python2-requests for package: python2-acme-0.22.2-1.el7.noarch
--&gt; Processing Dependency: python2-six for package: python2-acme-0.22.2-1.el7.noarch
---&gt; Package python2-configargparse.noarch 0:0.11.0-1.el7 will be installed
---&gt; Package python2-cryptography.x86_64 0:1.7.2-1.el7_4.1 will be installed
--&gt; Processing Dependency: python-six &gt;= 1.4.1 for package: python2-cryptography-1.7.2-1.el7_4.1.x86_64
--&gt; Processing Dependency: python-idna &gt;= 2.0 for package: python2-cryptography-1.7.2-1.el7_4.1.x86_64
--&gt; Processing Dependency: python-cffi &gt;= 1.4.1 for package: python2-cryptography-1.7.2-1.el7_4.1.x86_64
--&gt; Processing Dependency: python-ipaddress for package: python2-cryptography-1.7.2-1.el7_4.1.x86_64
--&gt; Processing Dependency: python-enum34 for package: python2-cryptography-1.7.2-1.el7_4.1.x86_64
---&gt; Package python2-future.noarch 0:0.16.0-6.el7 will be installed
---&gt; Package python2-josepy.noarch 0:1.0.1-1.el7 will be installed
---&gt; Package python2-mock.noarch 0:1.0.1-9.el7 will be installed
---&gt; Package python2-parsedatetime.noarch 0:2.4-5.el7 will be installed
---&gt; Package python2-pyrfc3339.noarch 0:1.0-2.el7 will be installed
---&gt; Package pytz.noarch 0:2016.10-2.el7 will be installed
--&gt; Running transaction check
---&gt; Package audit-libs-python.x86_64 0:2.7.6-3.el7 will be installed
---&gt; Package checkpolicy.x86_64 0:2.5-4.el7 will be installed
---&gt; Package libcgroup.x86_64 0:0.41-13.el7 will be installed
---&gt; Package libsemanage-python.x86_64 0:2.5-8.el7 will be installed
---&gt; Package pyOpenSSL.x86_64 0:0.13.1-3.el7 will be installed
---&gt; Package python-IPy.noarch 0:0.75-6.el7 will be installed
---&gt; Package python-backports-ssl_match_hostname.noarch 0:3.4.0.2-4.el7 will be installed
--&gt; Processing Dependency: python-backports for package: python-backports-ssl_match_hostname-3.4.0.2-4.el7.noarch
---&gt; Package python-cffi.x86_64 0:1.6.0-5.el7 will be installed
--&gt; Processing Dependency: python-pycparser for package: python-cffi-1.6.0-5.el7.x86_64
---&gt; Package python-enum34.noarch 0:1.0.4-1.el7 will be installed
---&gt; Package python-idna.noarch 0:2.4-1.el7 will be installed
---&gt; Package python-ipaddress.noarch 0:1.0.16-2.el7 will be installed
---&gt; Package python-ndg_httpsclient.noarch 0:0.3.2-1.el7 will be installed
---&gt; Package python-six.noarch 0:1.9.0-2.el7 will be installed
---&gt; Package python-zope-event.noarch 0:4.0.3-2.el7 will be installed
---&gt; Package python2-pyasn1.noarch 0:0.1.9-7.el7 will be installed
---&gt; Package python2-requests.noarch 0:2.6.0-0.el7 will be installed
--&gt; Processing Dependency: python-requests &gt;= 2.6.0 for package: python2-requests-2.6.0-0.el7.noarch
---&gt; Package python2-six.noarch 0:1.9.0-0.el7 will be installed
---&gt; Package setools-libs.x86_64 0:3.3.8-1.1.el7 will be installed
--&gt; Running transaction check
---&gt; Package python-backports.x86_64 0:1.0-8.el7 will be installed
---&gt; Package python-pycparser.noarch 0:2.14-1.el7 will be installed
--&gt; Processing Dependency: python-ply for package: python-pycparser-2.14-1.el7.noarch
---&gt; Package python-requests.noarch 0:2.6.0-1.el7_1 will be installed
--&gt; Processing Dependency: python-urllib3 &gt;= 1.10.2-1 for package: python-requests-2.6.0-1.el7_1.noarch
--&gt; Running transaction check
---&gt; Package python-ply.noarch 0:3.4-11.el7 will be installed
---&gt; Package python-urllib3.noarch 0:1.10.2-3.el7 will be installed
--&gt; Finished Dependency Resolution

Dependencies Resolved

========================================================================================================================================================================
Package Arch Version Repository Size
========================================================================================================================================================================
Installing:
python2-certbot-apache noarch 0.22.2-1.el7 epel 214 k
Installing for dependencies:
audit-libs-python x86_64 2.7.6-3.el7 base 73 k
augeas-libs x86_64 1.4.0-2.el7_4.2 updates 355 k
certbot noarch 0.22.2-1.el7 epel 21 k
checkpolicy x86_64 2.5-4.el7 base 290 k
libcgroup x86_64 0.41-13.el7 base 65 k
libsemanage-python x86_64 2.5-8.el7 base 104 k
policycoreutils-python x86_64 2.5-17.1.el7 base 446 k
pyOpenSSL x86_64 0.13.1-3.el7 base 133 k
python-IPy noarch 0.75-6.el7 base 32 k
python-augeas noarch 0.5.0-2.el7 base 25 k
python-backports x86_64 1.0-8.el7 base 5.8 k
python-backports-ssl_match_hostname noarch 3.4.0.2-4.el7 base 12 k
python-cffi x86_64 1.6.0-5.el7 base 218 k
python-configobj noarch 4.7.2-7.el7 base 117 k
python-enum34 noarch 1.0.4-1.el7 base 52 k
python-idna noarch 2.4-1.el7 base 94 k
python-ipaddress noarch 1.0.16-2.el7 base 34 k
python-ndg_httpsclient noarch 0.3.2-1.el7 epel 43 k
python-ply noarch 3.4-11.el7 base 123 k
python-pycparser noarch 2.14-1.el7 base 104 k
python-requests noarch 2.6.0-1.el7_1 base 94 k
python-setuptools noarch 0.9.8-7.el7 base 397 k
python-six noarch 1.9.0-2.el7 base 29 k
python-urllib3 noarch 1.10.2-3.el7 base 101 k
python-zope-component noarch 1:4.1.0-3.el7 epel 227 k
python-zope-event noarch 4.0.3-2.el7 epel 79 k
python-zope-interface x86_64 4.0.5-4.el7 base 138 k
python2-acme noarch 0.22.2-1.el7 epel 135 k
python2-certbot noarch 0.22.2-1.el7 epel 481 k
python2-configargparse noarch 0.11.0-1.el7 epel 30 k
python2-cryptography x86_64 1.7.2-1.el7_4.1 updates 502 k
python2-future noarch 0.16.0-6.el7 epel 799 k
python2-josepy noarch 1.0.1-1.el7 epel 86 k
python2-mock noarch 1.0.1-9.el7 epel 92 k
python2-parsedatetime noarch 2.4-5.el7 epel 78 k
python2-pyasn1 noarch 0.1.9-7.el7 base 100 k
python2-pyrfc3339 noarch 1.0-2.el7 epel 13 k
python2-requests noarch 2.6.0-0.el7 epel 2.9 k
python2-six noarch 1.9.0-0.el7 epel 2.9 k
pytz noarch 2016.10-2.el7 base 46 k
setools-libs x86_64 3.3.8-1.1.el7 base 612 k

Transaction Summary
========================================================================================================================================================================
Install 1 Package (+41 Dependent packages)

Total download size: 6.5 M
Installed size: 28 M
Is this ok [y/d/N]: y
Downloading packages:
(1/42): audit-libs-python-2.7.6-3.el7.x86_64.rpm | 73 kB 00:00:00
(2/42): libsemanage-python-2.5-8.el7.x86_64.rpm | 104 kB 00:00:00
(3/42): libcgroup-0.41-13.el7.x86_64.rpm | 65 kB 00:00:00
(4/42): augeas-libs-1.4.0-2.el7_4.2.x86_64.rpm | 355 kB 00:00:00
(5/42): python-IPy-0.75-6.el7.noarch.rpm | 32 kB 00:00:00
(6/42): pyOpenSSL-0.13.1-3.el7.x86_64.rpm | 133 kB 00:00:00
(7/42): checkpolicy-2.5-4.el7.x86_64.rpm | 290 kB 00:00:00
(8/42): python-augeas-0.5.0-2.el7.noarch.rpm | 25 kB 00:00:00
(9/42): python-backports-1.0-8.el7.x86_64.rpm | 5.8 kB 00:00:00
(10/42): python-configobj-4.7.2-7.el7.noarch.rpm | 117 kB 00:00:00
(11/42): certbot-0.22.2-1.el7.noarch.rpm | 21 kB 00:00:00
(12/42): python-enum34-1.0.4-1.el7.noarch.rpm | 52 kB 00:00:00
(13/42): python-cffi-1.6.0-5.el7.x86_64.rpm | 218 kB 00:00:00
(14/42): python-ipaddress-1.0.16-2.el7.noarch.rpm | 34 kB 00:00:00
(15/42): python-ndg_httpsclient-0.3.2-1.el7.noarch.rpm | 43 kB 00:00:00
(16/42): python-ply-3.4-11.el7.noarch.rpm | 123 kB 00:00:00
(17/42): python-pycparser-2.14-1.el7.noarch.rpm | 104 kB 00:00:00
(18/42): python-requests-2.6.0-1.el7_1.noarch.rpm | 94 kB 00:00:00
(19/42): python-idna-2.4-1.el7.noarch.rpm | 94 kB 00:00:00
(20/42): python-six-1.9.0-2.el7.noarch.rpm | 29 kB 00:00:00
(21/42): python-urllib3-1.10.2-3.el7.noarch.rpm | 101 kB 00:00:00
(22/42): python-backports-ssl_match_hostname-3.4.0.2-4.el7.noarch.rpm | 12 kB 00:00:00
(23/42): policycoreutils-python-2.5-17.1.el7.x86_64.rpm | 446 kB 00:00:00
(24/42): python-setuptools-0.9.8-7.el7.noarch.rpm | 397 kB 00:00:00
(25/42): python-zope-component-4.1.0-3.el7.noarch.rpm | 227 kB 00:00:00
(26/42): python-zope-event-4.0.3-2.el7.noarch.rpm | 79 kB 00:00:00
(27/42): python2-acme-0.22.2-1.el7.noarch.rpm | 135 kB 00:00:00
(28/42): python-zope-interface-4.0.5-4.el7.x86_64.rpm | 138 kB 00:00:00
(29/42): python2-certbot-0.22.2-1.el7.noarch.rpm | 481 kB 00:00:00
(30/42): python2-certbot-apache-0.22.2-1.el7.noarch.rpm | 214 kB 00:00:00
(31/42): python2-configargparse-0.11.0-1.el7.noarch.rpm | 30 kB 00:00:00
(32/42): python2-future-0.16.0-6.el7.noarch.rpm | 799 kB 00:00:00
(33/42): python2-cryptography-1.7.2-1.el7_4.1.x86_64.rpm | 502 kB 00:00:00
(34/42): python2-josepy-1.0.1-1.el7.noarch.rpm | 86 kB 00:00:00
(35/42): python2-mock-1.0.1-9.el7.noarch.rpm | 92 kB 00:00:00
(36/42): python2-parsedatetime-2.4-5.el7.noarch.rpm | 78 kB 00:00:00
(37/42): python2-pyrfc3339-1.0-2.el7.noarch.rpm | 13 kB 00:00:00
(38/42): python2-requests-2.6.0-0.el7.noarch.rpm | 2.9 kB 00:00:00
(39/42): python2-six-1.9.0-0.el7.noarch.rpm | 2.9 kB 00:00:00
(40/42): pytz-2016.10-2.el7.noarch.rpm | 46 kB 00:00:00
(41/42): python2-pyasn1-0.1.9-7.el7.noarch.rpm | 100 kB 00:00:00
(42/42): setools-libs-3.3.8-1.1.el7.x86_64.rpm | 612 kB 00:00:00
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 4.4 MB/s | 6.5 MB 00:00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : python-six-1.9.0-2.el7.noarch 1/42
Installing : python2-pyasn1-0.1.9-7.el7.noarch 2/42
Installing : pyOpenSSL-0.13.1-3.el7.x86_64 3/42
Installing : pytz-2016.10-2.el7.noarch 4/42
Installing : python2-pyrfc3339-1.0-2.el7.noarch 5/42
Installing : python2-future-0.16.0-6.el7.noarch 6/42
Installing : python-zope-interface-4.0.5-4.el7.x86_64 7/42
Installing : python2-parsedatetime-2.4-5.el7.noarch 8/42
Installing : python2-six-1.9.0-0.el7.noarch 9/42
Installing : setools-libs-3.3.8-1.1.el7.x86_64 10/42
Installing : python-enum34-1.0.4-1.el7.noarch 11/42
Installing : checkpolicy-2.5-4.el7.x86_64 12/42
Installing : audit-libs-python-2.7.6-3.el7.x86_64 13/42
Installing : augeas-libs-1.4.0-2.el7_4.2.x86_64 14/42
Installing : python-augeas-0.5.0-2.el7.noarch 15/42
Installing : python-ipaddress-1.0.16-2.el7.noarch 16/42
Installing : python-zope-event-4.0.3-2.el7.noarch 17/42
Installing : 1:python-zope-component-4.1.0-3.el7.noarch 18/42
Installing : python-configobj-4.7.2-7.el7.noarch 19/42
Installing : python2-mock-1.0.1-9.el7.noarch 20/42
Installing : python-ply-3.4-11.el7.noarch 21/42
Installing : python-pycparser-2.14-1.el7.noarch 22/42
Installing : python-cffi-1.6.0-5.el7.x86_64 23/42
Installing : python-backports-1.0-8.el7.x86_64 24/42
Installing : python-backports-ssl_match_hostname-3.4.0.2-4.el7.noarch 25/42
Installing : python-setuptools-0.9.8-7.el7.noarch 26/42
Installing : python-ndg_httpsclient-0.3.2-1.el7.noarch 27/42
Installing : python-urllib3-1.10.2-3.el7.noarch 28/42
Installing : python-requests-2.6.0-1.el7_1.noarch 29/42
Installing : python2-requests-2.6.0-0.el7.noarch 30/42
Installing : libsemanage-python-2.5-8.el7.x86_64 31/42
Installing : python-idna-2.4-1.el7.noarch 32/42
Installing : python2-cryptography-1.7.2-1.el7_4.1.x86_64 33/42
Installing : python2-josepy-1.0.1-1.el7.noarch 34/42
Installing : python2-acme-0.22.2-1.el7.noarch 35/42
Installing : libcgroup-0.41-13.el7.x86_64 36/42
Installing : python-IPy-0.75-6.el7.noarch 37/42
Installing : policycoreutils-python-2.5-17.1.el7.x86_64 38/42
Installing : python2-configargparse-0.11.0-1.el7.noarch 39/42
Installing : python2-certbot-0.22.2-1.el7.noarch 40/42
Installing : certbot-0.22.2-1.el7.noarch 41/42
ValueError: SELinux policy is not managed or store cannot be accessed.
Installing : python2-certbot-apache-0.22.2-1.el7.noarch 42/42
Verifying : python-augeas-0.5.0-2.el7.noarch 1/42
Verifying : python-backports-ssl_match_hostname-3.4.0.2-4.el7.noarch 2/42
Verifying : python2-configargparse-0.11.0-1.el7.noarch 3/42
Verifying : python-zope-interface-4.0.5-4.el7.x86_64 4/42
Verifying : python-ndg_httpsclient-0.3.2-1.el7.noarch 5/42
Verifying : 1:python-zope-component-4.1.0-3.el7.noarch 6/42
Verifying : python2-future-0.16.0-6.el7.noarch 7/42
Verifying : policycoreutils-python-2.5-17.1.el7.x86_64 8/42
Verifying : python-setuptools-0.9.8-7.el7.noarch 9/42
Verifying : python2-acme-0.22.2-1.el7.noarch 10/42
Verifying : python2-cryptography-1.7.2-1.el7_4.1.x86_64 11/42
Verifying : python2-certbot-apache-0.22.2-1.el7.noarch 12/42
Verifying : certbot-0.22.2-1.el7.noarch 13/42
Verifying : python2-pyrfc3339-1.0-2.el7.noarch 14/42
Verifying : python2-six-1.9.0-0.el7.noarch 15/42
Verifying : pytz-2016.10-2.el7.noarch 16/42
Verifying : python-urllib3-1.10.2-3.el7.noarch 17/42
Verifying : python-IPy-0.75-6.el7.noarch 18/42
Verifying : libcgroup-0.41-13.el7.x86_64 19/42
Verifying : python-six-1.9.0-2.el7.noarch 20/42
Verifying : python2-certbot-0.22.2-1.el7.noarch 21/42
Verifying : python-idna-2.4-1.el7.noarch 22/42
Verifying : libsemanage-python-2.5-8.el7.x86_64 23/42
Verifying : python2-requests-2.6.0-0.el7.noarch 24/42
Verifying : python-backports-1.0-8.el7.x86_64 25/42
Verifying : python-cffi-1.6.0-5.el7.x86_64 26/42
Verifying : python-ply-3.4-11.el7.noarch 27/42
Verifying : pyOpenSSL-0.13.1-3.el7.x86_64 28/42
Verifying : python2-parsedatetime-2.4-5.el7.noarch 29/42
Verifying : python-pycparser-2.14-1.el7.noarch 30/42
Verifying : python2-mock-1.0.1-9.el7.noarch 31/42
Verifying : python-configobj-4.7.2-7.el7.noarch 32/42
Verifying : python-requests-2.6.0-1.el7_1.noarch 33/42
Verifying : python-zope-event-4.0.3-2.el7.noarch 34/42
Verifying : python-ipaddress-1.0.16-2.el7.noarch 35/42
Verifying : augeas-libs-1.4.0-2.el7_4.2.x86_64 36/42
Verifying : python2-pyasn1-0.1.9-7.el7.noarch 37/42
Verifying : audit-libs-python-2.7.6-3.el7.x86_64 38/42
Verifying : python2-josepy-1.0.1-1.el7.noarch 39/42
Verifying : checkpolicy-2.5-4.el7.x86_64 40/42
Verifying : python-enum34-1.0.4-1.el7.noarch 41/42
Verifying : setools-libs-3.3.8-1.1.el7.x86_64 42/42

Installed:
python2-certbot-apache.noarch 0:0.22.2-1.el7

Dependency Installed:
audit-libs-python.x86_64 0:2.7.6-3.el7 augeas-libs.x86_64 0:1.4.0-2.el7_4.2 certbot.noarch 0:0.22.2-1.el7
checkpolicy.x86_64 0:2.5-4.el7 libcgroup.x86_64 0:0.41-13.el7 libsemanage-python.x86_64 0:2.5-8.el7
policycoreutils-python.x86_64 0:2.5-17.1.el7 pyOpenSSL.x86_64 0:0.13.1-3.el7 python-IPy.noarch 0:0.75-6.el7
python-augeas.noarch 0:0.5.0-2.el7 python-backports.x86_64 0:1.0-8.el7 python-backports-ssl_match_hostname.noarch 0:3.4.0.2-4.el7
python-cffi.x86_64 0:1.6.0-5.el7 python-configobj.noarch 0:4.7.2-7.el7 python-enum34.noarch 0:1.0.4-1.el7
python-idna.noarch 0:2.4-1.el7 python-ipaddress.noarch 0:1.0.16-2.el7 python-ndg_httpsclient.noarch 0:0.3.2-1.el7
python-ply.noarch 0:3.4-11.el7 python-pycparser.noarch 0:2.14-1.el7 python-requests.noarch 0:2.6.0-1.el7_1
python-setuptools.noarch 0:0.9.8-7.el7 python-six.noarch 0:1.9.0-2.el7 python-urllib3.noarch 0:1.10.2-3.el7
python-zope-component.noarch 1:4.1.0-3.el7 python-zope-event.noarch 0:4.0.3-2.el7 python-zope-interface.x86_64 0:4.0.5-4.el7
python2-acme.noarch 0:0.22.2-1.el7 python2-certbot.noarch 0:0.22.2-1.el7 python2-configargparse.noarch 0:0.11.0-1.el7
python2-cryptography.x86_64 0:1.7.2-1.el7_4.1 python2-future.noarch 0:0.16.0-6.el7 python2-josepy.noarch 0:1.0.1-1.el7
python2-mock.noarch 0:1.0.1-9.el7 python2-parsedatetime.noarch 0:2.4-5.el7 python2-pyasn1.noarch 0:0.1.9-7.el7
python2-pyrfc3339.noarch 0:1.0-2.el7 python2-requests.noarch 0:2.6.0-0.el7 python2-six.noarch 0:1.9.0-0.el7
pytz.noarch 0:2016.10-2.el7 setools-libs.x86_64 0:3.3.8-1.1.el7

Complete!
[root@B8GUsg ~]#

yum install certbotcertbot installed

 

Paso 2 – Reglas del firewall

Si están usando firewalld o iptables para tener abiertos sólo los servicios que se ocupen, necesitamos agregar reglas para los puertos 80 y 443.

Si usan firewalld, con los siguientes comandos:

1
2
3
[root@B8GUsg ~]# firewall-cmd --add-service=http
[root@B8GUsg ~]# firewall-cmd --add-service=https
[root@B8GUsg ~]# firewall-cmd --runtime-to-permanent

En el caso de que estemos usando iptables, ejecutamos lo siguiente:

1
2
[root@B8GUsg ~]# iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
[root@B8GUsg ~]# iptables -I INPUT -p tcp -m tcp --dport 443 -j ACCEPT

Paso 3 – Solicitando un Certificado SSL de Let’s Encrypt

Ya que tenemos esto listo, podemos solicitar un certificado SSL para nuestro dominio.

Generar el certificado SSL para Apache usando el cliente para Let’s Encrypt certbot es muy sencillo. El cliente obtendrá e instalará automáticamente un nuevo certificado SSL válido para los dominios proporcionados como parámetros.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
[root@B8GUsg ~]# certbot --apache -d chingon.com -d www.chingon.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): perengano@gmail.com
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org

-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A

-------------------------------------------------------------------------------
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'
d like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: Y
Starting new HTTPS connection (1): supporters.eff.org
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for chingon.com
http-01 challenge for www.chingon.com
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/httpd/sites-available/chingon.com-le-ssl.conf
Deploying Certificate to VirtualHost /etc/httpd/sites-available/chingon.com-le-ssl.conf
Enabling site /etc/httpd/sites-available/chingon.com-le-ssl.conf by adding Include to root configuration
Deploying Certificate to VirtualHost /etc/httpd/sites-available/chingon.com-le-ssl.conf

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server'
s configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Redirecting vhost in /etc/httpd/sites-enabled/chingon.com.conf to ssl vhost in /etc/httpd/sites-available/chingon.com-le-ssl.conf

-------------------------------------------------------------------------------
Congratulations! You have successfully enabled https://chingon.com and
https://www.chingon.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=chingon.com
https://www.ssllabs.com/ssltest/analyze.html?d=www.chingon.com
-------------------------------------------------------------------------------

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/chingon.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/chingon.com/privkey.pem
Your cert will expire on 2018-07-16. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

[root@B8GUsg ~]#

certbot domain

 

Paso 4 – Habilitando SSL en nuestro Apache

Aunque estamos usando CentOS, cuando se hizo la instalación de Apache, fueron creados dos directorios para el uso de los VirtualHost y de esta manera sea más sencillo su uso. Esta forma es habitual en Debian, y son sites-available y sites-enabled.

1
2
3
4
5
6
7
8
9
10
11
12
[root@B8GUsg ~]# cd /etc/httpd/
[root@B8GUsg httpd]# ls -l
total 20
drwxr-xr-x 2 root root 4096 Apr 17 14:40 conf
drwxr-xr-x 2 root root 4096 Apr 17 14:40 conf.d
drwxr-xr-x 2 root root 4096 Apr 17 03:10 conf.modules.d
lrwxrwxrwx 1 root root 19 Apr 13 11:18 logs -&gt; ../../var/log/httpd
lrwxrwxrwx 1 root root 29 Apr 13 11:18 modules -&gt; ../../usr/lib64/httpd/modules
lrwxrwxrwx 1 root root 10 Apr 13 11:18 run -&gt; /run/httpd
drwxr-xr-x 2 root root 4096 Apr 17 14:41 sites-available
drwxr-xr-x 2 root root 4096 Apr 17 14:49 sites-enabled
[root@B8GUsg httpd]#

El archivo de configuración de nuestro dominio con su certificado está en: /etc/httpd/sites-available/chingon.com-le-ssl.conf, y necesitamos crear un enlace simbólico en sites-enabled para que Apache lo tome en cuenta.

1
[root@B8GUsg httpd]# ln -s /etc/httpd/sites-available/chingon.com-le-ssl.conf /etc/httpd/sites-enabled/chingon.com.ssl.conf

 

Paso 5 – Añadiendo seguridad extra a la configuración SSL de Apache

La configuración por defecto de CentOS 7 del Apache que está disponible está un poco desactualizada en cuanto a configuración se refiere, al mismo tiempo que es vulnerable a ataques y técnicas recientes.

Se recomienda deshabilitar los siguientes valores en el archivo /etc/httpd/conf.d/ssl.conf así que creamos una copia de seguridad como primer paso:

1
2
3
[root@B8GUsg httpd]# cd conf.d/
[root@B8GUsg conf.d]# cp ssl.conf /root/
[root@B8GUsg conf.d]# nano ssl.conf

Una vez hecho eso, es momento de editar dicho archivo y comentar SSLProtocol y SSLCipherSuite:

1
2
3
4
5
. . .
# SSLProtocol all -SSLv2
. . .
# SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
. . .

Copiamos lo siguiente después del fin del bloque VirtualHost, que en este caso está al final del archivo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# Begin copied text
# from https://cipherli.st/
# and https://raymii.org/s/tutorials/Strong_SSL_Security_On_Apache2.html

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder On
# Disable preloading HSTS for now. You can use the commented out header line that includes
# the "preload" directive if you understand the implications.
#Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
# Requires Apache &gt;= 2.4
SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
# Requires Apache &gt;= 2.4.11
# SSLSessionTickets Off

Verificamos que la configuración de Apache no tenga ningún error:

1
2
3
[root@B8GUsg conf.d]# apachectl configtest
Syntax OK
[root@B8GUsg conf.d]#

Si obtenemos Syntax OK, quiere decir que todo está bien, así que reiniciamos el servicio de Apache:

1
2
[root@B8GUsg conf.d]# systemctl restart httpd
[root@B8GUsg conf.d]#

 

Paso 6 – Verificando el estado de tu Certificado

Si se fijaron, al final de la obtención del certificado venía el siguiente texto, así que podemos usar esa URL para comprobarlo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-------------------------------------------------------------------------------
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=chingon.com
https://www.ssllabs.com/ssltest/analyze.html?d=www.chingon.com
-------------------------------------------------------------------------------
[cc lang="bash"]
<h1>
Paso 7 - Configurando la auto-renovación del Certificado</h1>
<p style="text-align: justify;">Los certificados de <strong>Let's Encrypt</strong> son válidos durante 90 días, por lo que es recomendable que se renueven cada 60 días. En este ejemplo se ejecutará cada día 15 de cada mes a las 2:30hrs. Editamos <strong>Crontab</strong>:</p>
[cc lang="bash"]
[root@B8GUsg conf.d]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab

Añadimos el siguiente contenido:

[root@B8GUsg conf.d]#
# Ejecutar los 15 de cada mes a las 2:30
30 2 15 * * /usr/bin/certbot renew &gt;&gt; /var/log/le-renew.log

En esta guía vimos como instalar un Certificado SSL gratuito de Let’s Encrypt para tener un sitio seguro en Apache en un servidor CentOS 7.

Referencias

La entrada Instalar Let’s Encrypt SSL en CentOS 7 con Apache se publicó primero en hbautista's blog.

Martes 17 de abril de 2018

Configurando y usando OpenSSH en CentOS 7

SSH LogoEl escenario es el siguiente, CentOS 7 recién instalado con OpenSSH instalado y configurado por default y SELinux desactivado.

Aunque usemos contraseñas con 20 o 30 caracteres usando caracteres especiales y todo eso, siempre es mejor el uso de llaves y cambiar algunos valores en el servidor al que nos queremos conectar.

Para generar una clave SSH en Linux usando el comando ssh-keygen deberías ejecutarlo usando la línea de comandos, esto se hace desde el cliente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
perengao@elrond:~$ ssh-keygen -t rsa -b 4096 -C "perengano@gmail.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/perengano/.ssh/id_rsa):
Created directory '/home/perengano/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/perengano/.ssh/id_rsa.
Your public key has been saved in /home/perengano/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:1AfAgsKI7fv/9h0dTHkUccMR2bwD+XkUcBQbWOaq/LA perengano@gmail.com
The key's randomart image is:
+---[RSA 4096]----+
|.+ . .... .B/%|
|o + . . .. . ++=O|
| . . .. . . =++|
| . . . o.*.|
| . S .o o|
| . . .. . |
| . +. . |
| . . .+. |
| ..o...E.. |
+----[SHA256]-----+
perengano@elrond:~$ cat .ssh/id_rsa.pub

En este ejemplo no estoy usando una passphrase, pero se aconseja usar una.

Una vez que la llave ha sido generada, podemos copiarla al servidor destino usando el siguiente comando:

1
ssh-copy-id user@serverip

También pueden hacerlo usando copiar y pegar, subiendo el archivo con scp, etc.

1
2
3
4
5
6
7
8
9
10
11
12
perengano@elrond:~$ ssh-copy-id perengano@vpsmikel.ds
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/perengano/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
perengano@vpsmikel.ds's password:

Number of key(s) added: 1

Now try logging into the machine, with: "ssh '
perengano@vpsmikel.ds'"
and check to make sure that only the key(s) you wanted were added.

perengano@elrond:~$

Ahora nos toca realizar lo siguiente del lado del servidor, primeramente dejar los permisos para que OpenSSH no nos de lata:

1
2
3
4
5
6
perengano@elrond:~$ ssh perengano@vpsmikel.ds
perengano@vpsmikel.ds's password:
Last login: Mon Apr 10 19:22:07 2018 from 189.201.191.13
[perengano@B8GUsg ~]$ chmod 700 .ssh
[perengano@B8GUsg ~]$ chmod 600 .ssh/authorized_keys
[perengano@B8GUsg ~]$

OpenSSH es muy quisquilloso con los permisos tanto del directorio como del archivo, en mi caso había hecho el segundo comando, pero no el primero y no me permitía loguearme con las llaves.

1
2
3
4
5
6
[perengano@B8GUsg ~]$ sudo su -
[sudo] password for perengano:
Último inicio de sesión:lun abr 16 21:40:02 EDT 2018en pts/0
Último inicio de sesión fallido:lun abr 16 22:47:05 EDT 2018de 195.208.185.50en ssh:notty
Hubo 2 intentos de logueo fallidos desde el último logueo exitoso.
[root@B8GUsg ~]#

Ya como root, hacemos una copia de seguridad del archivo de configuración original y editamos:

1
2
[root@B8GUsg ~]# cp /etc/ssh/sshd_config /etc/ssh/orig.sshd_config
[root@B8GUsg ~]# nano /etc/ssh/sshd_config

Y los valores que hay que cambiar son los siguientes

1
2
3
4
5
6
7
8
9
# Desactivamos que root pueda loguearse usando ssh
PermitRootLogin no

# Estos valores nos permiten usar SSH keys en lugar de passwords
RSAAuthentication yes
PubkeyAuthentication yes

# Desactivamos las contraseñas
PasswordAuthentication no

Reiniciamos el servicio:

1
[root@B8GUsg ~]# systemctl restart sshd.service

Nota: Abrir una segunda terminal o pestaña de terminal y desde ahí hacer pruebas, no te desconectes en caso de que algo no funcione como debe:

1
2
3
perengano@elrond:~$ ssh vpsmikel.ds
Last login: Mon Apr 16 21:52:28 2018 from 189.201.191.13
[perengano@B8GUsg ~]$

Con eso deben tener todo listo para poder hacer uso de las llaves. Sin embargo, si quieren usar un cliente como Filezilla para copiar archivos y todo eso, necesitamos exportar nuestra llave. Esto lo podemos hacer usando puttygen.exe

Creo un directorio con los archivos generados al inicio:

1
2
3
perengano@elrond:~$ mkdir keys
perengano@elrond:~$ cp .ssh/id_rsa keys
perengano@elrond:~$ cp .ssh/id_rsa.pub keys

Vamos a usar Wine, si no lo tienen pueden instalarlo:

1
2
3
4
5
perengano@elrond:~$ sudo apt install wine wine-utils
perengano@elrond:~$ cd keys
perengano@elrond:~$ wine ../Descargas/puttygen.exe
it looks like wine32 is missing, you should install it.
as root, please execute "apt-get install wine32"

PuttygenImport keyPuttygen WarningPuttygen save key

Después de hacerlo, podemos ver los archivos que tenemos:

1
2
3
4
5
6
7
8
perengano@elrond:~/keys$ ls -la
total 20
drwxr-xr-x 2 perengano perengano 4096 abr 16 23:21 .
drwxr-xr-x 49 perengano perengano 4096 abr 16 17:51 ..
-rw-r--r-- 1 perengano perengano 3244 abr 16 23:15 id_rsa
-rw-r--r-- 1 perengano perengano 755 abr 16 23:15 id_rsa.pub
-rw-r--r-- 1 perengano perengano 2701 abr 16 23:21 perengano.ppk
perengano@elrond:~/keys$

Ahora sí, podemos añadir nuestro archivo .ppk a Filezilla

FilezillaFilezilla warningFilezilla connected

Y eso sería todo.

Referencias:

 

La entrada Configurando y usando OpenSSH en CentOS 7 se publicó primero en hbautista's blog.

Lunes 16 de abril de 2018

Emerson Posadas

Emerson Posadas
toxickore BLOG

OpenVPN with easy rsa 3

https://www.sys-dev.cat/blog/3/

Jueves 12 de abril de 2018

Miguel de Icaza

Miguel de Icaza
Miguel de Icaza

How we doubled Mono’s Float Speed

My friend Aras recently wrote the same ray tracer in various languages, including C++, C# and the upcoming Unity Burst compiler. While it is natural to expect C# to be slower than C++, what was interesting to me was that Mono was so much slower than .NET Core.

The numbers that he posted did not look good:

  • C# (.NET Core): Mac 17.5 Mray/s,
  • C# (Unity, Mono): Mac 4.6 Mray/s,
  • C# (Unity, IL2CPP): Mac 17.1 Mray/s,

I decided to look at what was going on, and document possible areas for improvement.

As a result of this benchmark, and looking into this problem, we identified three areas of improvement:

  • First, we need better defaults in Mono, as users will not tune their parameters
  • Second, we need to better inform the world about the LLVM code optimizing backend in Mono
  • Third, we tuned some of the parameters in Mono.

The baseline for this test, was to run Aras ray tracer on my machine, since we have different hardware, I could not use his numbers to compare. The results on my iMac at home were as follows for Mono and .NET Core:

Runtime Results MRay/sec
.NET Core 2.1.4, debug build dotnet run 3.6
.NET Core 2.1.4, release build, dotnet run -c Release 21.7
Vanilla Mono, mono Maths.exe 6.6
Vanilla Mono, with LLVM and float32 15.5

During the process of researching this problem, we found a couple of problems, which once we fixed, produced the following results:

Runtime Results MRay/sec
Mono with LLVM and float32 15.5
Improved Mono with LLVM, float32 and fixed inline 29.6

Aggregated:

Chart visualizing the results of the table above

Just using LLVM and float32 your code can get almost a 2.3x performance improvement in your floating point code. And with the tuning that we added to Mono’s as a result of this exercise, you can get 4.4x over running the plain Mono - these will be the defaults in future versions of Mono.

This blog post explains our findings.

32 and 64 bit Floats

Aras is using 32-bit floats for most of his math (the float type in C#, or System.Single in .NET terms). In Mono, decades ago, we made the mistake of performing all 32-bit float computations as 64-bit floats while still storing the data in 32-bit locations.

My memory at this point is not as good as it used to be and do not quite recall why we made this decision.

My best guess is that it was a decision rooted in the trends and ideas of the time.

Around this time there was a positive aura around extended precision computations for floats. For example the Intel x87 processors use 80-bit precision for their floating point computations, even when the operands are doubles, giving users better results.

Another theme around that time was that the Gnumeric spreadsheet, one of my previous projects, had implemented better statistical functions than Excel had, and this was well received in many communities that could use the more correct and higher precision results.

In the early days of Mono, most mathematical operations available across all platforms only took doubles as inputs. C99, Posix and ISO had all introduced 32-bit versions, but they were not generally available across the industry in those early days (for example, sinf is the float version of sin, fabsf of fabs and so on).

In short, the early 2000’s were a time of optimism.

Applications did pay a heavier price for the extra computation time, but Mono was mostly used for Linux desktop application, serving HTTP pages and some server processes, so floating point performance was never an issue we faced day to day. It was only noticeable in some scientific benchmarks, and those were rarely the use case for .NET usage in the 2003 era.

Nowadays, Games, 3D applications image processing, VR, AR and machine learning have made floating point operations a more common data type in modern applications. When it rains, it pours, and this is no exception. Floats are no longer your friendly data type that you sprinkle in a few places in your code, here and there. They come in an avalanche and there is no place to hide. There are so many of them, and they won’t stop coming at you.

The “float32” runtime flag

So a couple of years ago we decided to add support for performing 32-bit float operations with 32-bit operations, just like everyone else. We call this runtime feature “float32”, and in Mono, you enable this by passing the --O=float32 option to the runtime, and for Xamarin applications, you change this setting on the project preferences.

This new flag has been well received by our mobile users, as the majority of mobile devices are still not very powerful and they rather process data faster than they need the precision. Our guidance for our mobile users has been both to turn on the LLVM optimizing compiler and float32 flag at the same time.

While we have had the flag for some years, we have not made this the default, to reduce surprises for our users. But we find ourselves facing scenarios where the current 64-bit behavior is already surprises to our users, for example, see this bug report filed by a Unity user.

We are now going to change the default in Mono to be float32, you can track the progress here: https://github.com/mono/mono/issues/6985.

In the meantime, I went back to my friend Aras project. He has been using some new APIs that were introduced in .NET Core. While .NET core always performed 32-bit float operations as 32-bit floats, the System.Math API still forced some conversions from float to double in the course of doing business. For example, if you wanted to compute the sine function of a float, your only choice was to call Math.Sin (double) and pay the price of the float to double conversion.

To address this, .NET Core has introduced a new System.MathF type, which contains single precision floating point math operations, and we have just brought this [System.MathF](https://github.com/mono/mono/pull/7941) to Mono now.

While moving from 64 bit floats to 32 bit floats certainly improves the performance, as you can see in the table below:

Runtime and Options Mrays/second
Mono with System.Math 6.6
Mono with System.Math, using -O=float32 8.1
Mono with System.MathF 6.5
Mono with System.MathF, using -O=float32 8.2

So using float32 really improves things for this test, the MathF had a small effect.

Tuning LLVM

During the course of this research, we discovered that while Mono’s Fast JIT compiler had support for float32, we had not added this support to the LLVM backend. This meant that Mono with LLVM was still performing the expensive float to double conversions.

So Zoltan added support for float32 to our LLVM code generation engine.

Then he noticed that our inliner was using the same heuristics for the Fast JIT than it was using for LLVM. With the Fast JIT, you want to strike a balance between JIT speed and execution speed, so we limit just how much we inline to reduce the work of the JIT engine.

But when you are opt into using LLVM with Mono, you want to get the fastest code possible, so we adjusted the setting accordingly. Today you can change this setting via an environment variable MONO_INLINELIMIT, but this really should be baked into the defaults.

With the tuned LLVM setting, these are the results:

Runtime and Options Mrays/seconds
Mono with System.Math --llvm -O=float32 16.0
Mono with System.Math --llvm -O=float32 fixed heuristics 29.1
Mono with System.MathF --llvm -O=float32 fixed heuristics 29.6

Next Steps

The work to bring some of these improvements was relatively low. We had some on and off discussions on Slack which lead to these improvements. I even managed to spend a few hours one evening to bring System.MathF to Mono.

Aras RayTracer code was an ideal subject to study, as it was self-contained, it was a real application and not a synthetic benchmark. We want to find more software like this that we can use to review the kind of bitcode that we generate and make sure that we are giving LLVM the best data that we can so LLVM can do its job.

We also are considering upgrading the LLVM that we use, and leverage any new optimizations that have been added.

SideBar

The extra precision has some nice side effects. For example, recently, while reading the pull requests for the Godot engine, I saw that they were busily discussing making floating point precision for the engine configurable at compile time (https://github.com/godotengine/godot/pull/17134).

I asked Juan why anyone would want to do this, I thought that games were just content with 32-bit floating point operations.

Juan explained to that while floats work great in general, once you “move away” from the center, say in a game, you navigate 100 kilometers out of the center of your game, the math errors start to accumulate and you end up with some interesting visual glitches. There are various mitigation strategies that can be used, and higher precision is just one possibility, one that comes with a performance cost.

Shortly after our conversation, this blog showed up on my Twitter timeline showing this problem:

http://pharr.org/matt/blog/2018/03/02/rendering-in-camera-space.html

A few images show the problem. First, we have a sports car model from the pbrt-v3-scenes **distribution. Both the camera and the scene are near the origin and everything looks good.

** (Cool sports car model courtesy Yasutoshi Mori.) Next, we’ve translated both the camera and the scene 200,000 units from the origin in xx, yy, and zz. We can see that the car model is getting fairly chunky; this is entirely due to insufficient floating-point precision.

** (Thanks again to Yasutoshi Mori.) If we move 5×5× farther away, to 1 million units from the origin, things really fall apart; the car has become an extremely coarse voxelized approximation of itself—both cool and horrifying at the same time. (Keanu wonders: is Minecraft chunky purely because everything’s rendered really far from the origin?)

** (Apologies to Yasutoshi Mori for what has been done to his nice model.)

Martes 10 de abril de 2018

Emerson Posadas

Emerson Posadas
toxickore BLOG

easy-rsa 3

So this is now the way to use easy-rsa on version 3

https://www.sys-dev.cat/blog/3/

Jueves 05 de abril de 2018

Firefox Quantum en Debian Stretch

New Tab

Firefox Quantum es la nueva versión de Firefox que viene completamente renovada. Desafortunadamente no lo encontramos en los repositorios de Debian Stretch ni en Backports. Aunque si esta en Sid, lo podríamos instalar usando APT Pinning, lo cual no es muy recomendable, y en lo personal me causaba muchos conflictos.

Firefox QuantumLo primero que hay que hacer es descargar el archivo comprimido desde el sitio oficial de Mozilla, y una vez descargado realizamos los siguientes pasos como root:

1
root@elrond:~# tar xjfv /home/hbautista/Descargas/firefox-59.0.1.tar.bz2 -C /opt/

En mi caso y dado que no necesito Mozilla Firefox ESR, que al momento de escribir esto es la versión 52.7.2esr-1~deb9u1, decidí quitar.

1
root@elrond:~# apt remove firefox-esr

Necesitamos es crear su acceso directo, que es un archivo .desktop y se puede crear con tu editor de texto favorito, en mi caso estoy usando nano:

1
root@elrond:~# nano /usr/share/applications/firefox-quantum.desktop

Debe contener lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Desktop Entry]
Name=Firefox Quantum
Comment=Web Browser
GenericName=Web Browser
X-GNOME-FullName=Firefox Quantum Web Browser
Exec=/opt/firefox/firefox %u
Terminal=false
X-MultipleArgs=false
Type=Application
Icon=/opt/firefox/browser/chrome/icons/default/default128.png
Categories=Network;WebBrowser;
MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/vnd.mozilla.xul+xml;application/rss+xml;application/rdf+xml;image/gif;image/jpeg;image/png;x-scheme-handler/http;x-scheme-handler/ht$
StartupWMClass=Firefox
StartupNotify=true

Para guardar y cerrar presiona CTRL + O y para salir CTRL + X

Le damos permiso de ejecución al acceso directo:

1
root@elrond:~# chmod +x /usr/share/applications/firefox-quantum.desktop

Creamos un enlace simbólico para que cualquier usuario pueda ejecutarlo:

1
root@elrond:~# ln -s /opt/firefox/firefox /usr/lib/

Firefox & Mate en Debian Stretch
Actualización manual de Mozilla Firefox

Si por alguna razón, no se actualiza de forma automática, siempre se puede hacer manualmente. Descargar el archivo .bz2 desde el sitio de Mozilla Firefox y hacer lo siguiente:

Eliminamos todo el contenido en /opt:

1
root@elrond:~# rm -Rf /opt/firefox/

Y volvemos a descomprimir:

1
root@elrond:~# tar xjfv /home/hbautista/Descargas/firefox-59.0.2.tar.bz2 -C /opt/

La entrada Firefox Quantum en Debian Stretch se publicó primero en hbautista's blog.

Miguel de Icaza

Miguel de Icaza
Miguel de Icaza

Fixing Screenshots in MacOS

This was driving me insane. For years, I have been using Command-Shift-4 to take screenshots on my Mac. When you hit that keypress, you get to select a region of the screen, and the result gets placed on your ~/Desktop directory.

Recently, the feature stopped working.

I first blamed Dropbox settings, but that was not it.

I read every article on the internet on how to change the default location, restart the SystemUIServer.

The screencapture command line tool worked, but not the hotkey.

Many reboots later, I disabled System Integrity Protection so I could use iosnoop and dtruss to figure out why screencapture was not logging. I was looking at the logs right there, and saw where things were different, but could not figure out what was wrong.

Then another one of my Macs got infected. So now I had two Mac laptops that could not take screenshots.

And then I realized what was going on.

When you trigger Command-Shift-4, the TouchBar lights up and lets you customize how you take the screenshot, like this:

And if you scroll it, you get these other options:

And I had recently used these settings.

If you change your default here, it will be preserved, so even if the shortcut is Command-Shift-4 for take-screenshot-and-save-in-file, if you use the TouchBar to make a change, this will override any future uses of the command.

Martes 03 de abril de 2018

Alex Callejas

Alex Callejas
|rootzilopochtli.com|

#MeetArmy – Cómo monitorear recursos sin morir en el intento

You know, there are 20 million guys out of work in Manhattan alone just waiting for my job and yours too | Tu sabes, hay 20 millones de hombres sin trabajo en Manhattan solo esperando mi trabajo y el tuyo también – Detective Robert Thorn (Soylent Green – 1973)

El pasado 12  y 28 de Marzo tuve la fortuna de poder presentar la plática Cómo monitorear recursos sin morir en el intento durante el #MeetupArmy y el Meetup de GDG UNAM. Muchas gracias a ambos por la oportunidad!!

Durante la plática, les conté algunas experiencias en cuanto al monitoreo de recursos y las herramientas más comúnes y básicas para estas actividades.

También les presenté el video basado en la película Soylent Green:

Ver en YouTube

Les dejo la presentación aquí.

Espero les sirva…

Martes 27 de marzo de 2018

Eduardo Ruiz Duarte

Eduardo Ruiz Duarte
Beck's blog

Matemáticas, música y recuerdos

Hoy, en mi trabajo por alguna razón mientras trataba de entender algo un poco abstracto en álgebra, me acordé de mi maestro de piano cuando era niño (1993) y tuve una emoción un poco filosófica y nostálgica. Intenté buscarlo en internet para ver si existía algún registro de él, una foto o una grabación... no tuve éxito. Él vivía de dar conciertos en salones pequeños y de dar clases de canto y piano a niños y adultos en su casa ubicada en el barrio de Coyoacán. No era un virtuoso pero era muy trabajador, muy apasionado y una persona muy noble y pura. Él perfeccionaba cualquier pieza si se lo proponía. Tenía cuatro pianos de cola en su casa. Siempre sacaba piezas nuevas para interpretarlas en conciertos y salones locales en Coyoacán como la Sala Rodolfo Usigli y otros lugares. En su casa tenía una foto de Dolores del Río, era fanático de su belleza. Recuerdo que un sábado por la tarde de un 13 de octubre (era el día de San Eduardo por eso lo recuerdo), después de yo llegar de los "boy scouts", entré a mi casa en la calle de Malintzin en la colonia Del Carmen en Coyoacán y me topé con la sorpresa de que había un piano para mí (de hecho era una pianola). Las clases las tomaba antes de este piano en su casa. Mi madre y él lo escogieron muy cuidadosamente ya que "tenían que estar en perfectísimo estado los martinetes" para darme la gran sorpresa y por fin poder practicar en un instrumento de verdad, lo cual les agradezco infinitamente tanto a mi madre María G. Duarte como a él.
Él me entrenó para entrar a la Escuela Nacional de Música de la UNAM donde estudié piano desde 1996 hasta la huelga (2000). Pude pasar sin ningún problema gracias a que perfeccioné con él el Minueto en Sol Mayor de Johann Sebastian Bach que presenté en mi examen de admisión siendo un niño. Mi maestro tenía un sueño un poco peculiar, que era ir a la casa de Beethoven en Bonn, Alemania. Ahora que lo analizo, iré a Bonn este sábado, entonces tal vez me acordé hoy de mi maestro ya que siempre me decía: "Tú eres bueno en matemáticas porque te gusta tocar el piano" (noten la lógica). Otra anécdota es que solía decír que yo tenía muy "buen oído" y le encantaba al final de mi clase tocar acordes mientras yo miraba hacia otro lado y preguntarme cuáles notas eran las que él estaba tocando. Gracias a él pude interpretar varias melodías de Beethoven, (Sonata Opus 27 no. 2 fue a la que más tiempo le dedicamos), Preludios de Chopin, Mazurkas y varios arreglos de Mozart. Yo siempre era rebelde y quería tocar cosas "modernas". Recuerdo que le insistía en que tocáramos a Di Blassio o Richard Clayderman y él sólo se reía como diciéndome "no seas naco" (obvio él no decía eso pero seguro tenía la intención). Le agradezco mucho el haberme mostrado la belleza de la música clásica. Mi madre siempre le sugirió que vendiera uno de sus grandes pianos para poder viajar a Bonn y conocer a su héroe, pero él los amaba y jamás se quiso deshacer de alguno de ellos.
Falleció en la primavera del 2000 de cáncer prostático, justo cuando ya no podía pagar su casa y mantener sus pianos por culpa de su enfermdad. Había abandonado su casa de Coyoacán para ir a un pequeño departamento en Acoxpa. Como ya no tenía espacio en su nueva casa nos regaló sus macetas de jazmines que florecieron por muchos años.
Su nombre era Aurelio de Alba, era originario de Durango, mi emoción surgió al no encontrar absolutamente nada en internet. No tuvo hijos y sólo tenía un hermano de edad similar que era maestro particular de inglés. Ambos ya no viven. Mi maestro murió primero que su hermano quien vendió todos los pianos ya que no había más qué hacer con ellos. Qué difícil y triste es pensar en el hecho de que ya nadie se acuerde de él más que mi madre y yo; que no haya un sólo registro de sus bellas melodías. ¿Cuántos humanos así han dejado de existir en la mente de todos los que están vivos hoy en día?. Les dejo la melodía que él más amaba y que decenas de veces lo escuché interpretar (Intermezzo de Manuel María Ponce).
Que en Paz descanse maestro Aurelio.

Eduardo



Itzcoalt Alvarez Moreno

Itzcoalt Alvarez Moreno
Itzcoalt (itz) Álvarez

Electrumx

Hot:

Después de un tiempo de pensarlo, he tomado la decisión de montar un nodo de bitcoind y electrumx.

Electrumx permite actuar de intermediario entre la cartera del mismo nombre y el blockchain de bitcoin  (bitcoind), permitiendo que los usuarios no tengan que descargar toda la cadena, operar y sobre todo, conservar sus llaves en su poder.

Esto es importante, por que le da una mayor versatilidad a las operaciones de bitcoin.

De al forma, si lo usan, pueden conectarse a : electrum.joiz.net.

 

 

 

Domingo 25 de marzo de 2018

Alejandro Acosta

Alejandro Acosta
alejandroacosta.com

Another year, another great Linux conference – Scale16x

From March 8th to  11th, 2018 the Southern California Linux Expo (SCaLE) took place in beautiful Pasadena for the third year in a row, previous edition were held in hotels near LAX. This was the 16th edition of the conference -hence the #Scale16x hashtag that flooded social media those days- and my personal 8th.

I’ve been saying it for a while now that I think that the conference is just getting better by every year, but this year I heard several comments that this is one of the best and most important community driven conferences in the world. Rough estimations tell that there were around 3,000 attendees this year.

As a long time tradition now, the Fedora community held some activities in the conference, as well as a booth in the exhibition floor. This year, I had the privilege and pleasure of  promoting Fedora, answer question from people that showed interest in  (or are already users of) Fedora or simply saluting people that stopped by. I have to say that it pleasantly surprised me the growing number of spanish-speaking people that attended this year. I was accompanied in booth duty with long time Fedora contributors -but above all great Friends- Perry Rivera, Scott Williams and my newest Fedora friend Michael Singh. Unofficialy, but always willing to help, RedHat’s Tom ‘Spot’ Callaway was also supporting our booth and we always appreciate it and thank him for his work.

perry_selfie

 

Speaking of Red Hat -if you were unaware, it is the company that sponsors our community- they also had a booth and some talks in the conference, so it was a great pleasure to say hello to old RedHatters Jen Madriaga, Karsten Quaid and Brian Proffit, just to mention some of the ones that I know for a while now.

By the way, thank you Jen for the photo 🙂

Thank you also to my new friend Jennifer, who took this picture randomly and later that day I casually met her, as she was with a long time Scale attending group from Tijuana.

 

casualfromjenny2

Also, it is always satisfactory to say hello to contributors and friends from  other RedHat sponsored communities like opensource.com.

There was for sure a pretty interesting schedule of talks and events for the conference, it can be reviewed here.  Unfortunatelly, we had few time to attend a lot of talks due to booth duty -not complaining about it though- but we still manage to attend a few that would not interfere with it. Of course, we couldn’t have missed RedHat’s Langdon White talk titled “Fedora Modularity: Lessons Learned, Next Steps & Demo“.  Langdon presented a new modular model for distributing applications that is getting maturity and will be available in future Fedora releases. After the talk, later that night we had a small discussion group with people interested in the subject.

The full presentation can be reviewed in the following link, around 5:08:00

 

Personally, I also had the opportunity to attend a Kubernetes Bird of Feathers with a bunch of interesting guys from top kubernetes contributing companies like Google, RedHat and Samsung. It was for sure a delightful and enricher experience.

DSC_0989

Words never seem to be enough, SCaLE is such an important event for Free and Open Source Software and communities. I am so glad I had a chance to participate and I cannot stress enough how happy and proud I’m to be part of Fedora and I can’t wait for upcoming editions of the conference.

 

 

 

 

Jueves 15 de marzo de 2018

PXE boot server on a Raspberry Pi

Right now, I’m configuring a Homelab, to start practicing with OpenStack, VMware, Docker, and Kubernetes.

So, to install the Operative System from Network, I will implement a PXE boot server on a Raspberry Pi.

The main idea is to be capable of installing CentOS7, ESXi 6.5 and Ubuntu 17.04 from the network using the PXE boot server on a Raspberry Pi.

What I used: Raspberry Pi Model 2 CentOS7 ISO image ESXi 6.5 ISO image Ubuntu 17.04 ISO image

Variables to use: Raspberry Pi’s IP address: 10.0.0.252 DHCP server gateway: 10.0.0.252 subnet: 10.0.0.0/24 domain name: example.net hostname: pxeboot

I assume that Raspian is already installed on the Raspberry Pi, if not you can follow the official installation guide.

Installing and Configuring HTTP server

We’re going to configure the HTTP server to server the installation files:

Edit the /etc/hosts file. Append the following line:

10.0.0.252 pxeboot.example.com pxeboot
Install the HTTP server and curl (to test the HTTP server):
sudo aptitude install apache2 curl
 

By default, HTTP server should be running immediately after the install. You can confirm by running the command:

sudo systemctl apache2 status
Now we’re going to create a virtual host. To create the document root directory for our virtual host:
sudo mkdir -p /var/www/vhosts/pxeboot/{centos7,ubuntu1704}
Apply appropriate permissions to the subdirectories:
sudo chmod -R 755 /var/www
To create the configuration file for our new virtual host, let’s just copy the uncommented lines from the default website config file, 000-default.conf to pxeboot.example.com.conf file:
grep -v ‘#’ /etc/apache2/sites-available/000-default.conf | sudo tee /etc/apache2/sites-available/pxeboot.example.com.conf
Modify the “ServerName” variable:
ServerName pxeboot.example.net
Modify the “DocumentRoot” line to point to the new directory:
DocumentRoot /var/www/vhosts/pxeboot/
Restart the HTTP server:
sudo systemctl restart apache2.service
Download media ISOs
sudo mkdir -p /tmp/isos/
sudo wget http://mirrors.ocf.berkeley.edu/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1611.iso -O /tmp/isos/centos7.iso
sudo wget http://releases.ubuntu.com/17.04/ubuntu-17.04-server-amd64.iso -O /tmp/isos/ubuntu1704.iso
Mount the images to the /media directory:

sudo mkdir -p /media/{centos7,ubuntu1704} sudo mount -o loop /tmp/isos/centos7.iso /media/centos7 sudo mount -o loop /tmp/isos/ubuntu1704.iso /media/ubuntu1704

Now, recursively copy all the contents from each iso in the correspondent directory

sudo rsync -artuv /media/ /var/www/vhosts/pxeboot/

Before moving on, you’d have to disable the default website due to lack of name resolver in our environment. This can be done with the command:

sudo a2dissite 000-default.conf sudo systemctl restart apache2.service

Installing and Configuring DHCP/TFTP server

Install the DHCP/TFTP server: sudo apt-get install dnsmasq

First, make sure you backup this file in case you need to review it later and, then, create a new blank configuration file:

mv /etc/dnsmasq.conf /etc/dnsmasq.conf.backup vim /etc/dnsmasq.conf

Copy and paste the following configuration:

interface=enxb827eb7c4aa2,lo #bind-interfaces domain=example.com

DHCP range-leases

dhcp-range= enxb827eb7c4aa2,192.168.1.10,192.168.1.60,255.255.255.0,1h

PXE

dhcp-boot=pxelinux,192.168.1.200

Gateway

dhcp-option=3,192.168.1.254

DNS

dhcp-option=6,192.168.1.254, 8.8.8.8 server=8.8.4.4

Broadcast Address

dhcp-option=28,192.168.1.255

NTP Server

dhcp-option=42,0.0.0.0 pxe-prompt=“Press F8 for menu.”, 30 pxe-service=x86PC, “PXEBOOT from server: 192.168.1.85”, pxeboot enable-tftp tftp-root=/var/lib/tftpboot

For other advanced options concerning configuration file feel free to read dnsmasq manual.

Install SYSLINUX Bootloaders

Copy the syslinux-version-arch.rpm package from the document root directory to the ‘/tmp directory’. We’re going to get the files needed for successful PXE boot:

1

sudo cp /var/www/pxeboot.example.net/install/Packages/syslinux-4.05-12.el7.x86_64.rpm /tmp You’d need to install the rpm2cpio package to extract the syslinux package:

1

sudo apt-get install rpm2cpio Now change to ‘/tmp’ directory and extract the syslinux package:

1 2

cd /tmp sudo rpm2cpio syslinux-4.05-12.el7.x86_64.rpm | cpio -idmv

My First Contribution to OpenStack project

OpenStack Logo

I been working since last year using Ansible for fun and to trying to get prepared to become a DevOps, so I found an excelent OpenStack project called ARA Records Ansible.

Ansible Logo Ansible Logo

Basically it is a project from the OpenStack community that makes it easier to understand and troubleshoot your Ansible roles and playbooks.
If you want more information, please refer to the Documentation Page.

Anyhow, I just found a little bug on the Ansible Role to install ARA ansible-role-ara on Debian based distros and just send the patch to fixit.

Here is the link to my contribution.

And, as I am proud of my first commit on a big project here is the screenshot too:

My First OpenStack Contribution

I feel happy and motivated to still learn about this Open Source project and a lot more.

Miércoles 07 de marzo de 2018

crear particion con parted

Por lo general siempre que he creado particiones las he creado con fdisk, pero bueno el fdisk ya no nos permite crear particiones tan grandes, otra por que en la chamba ya no quieren que usemos fdisk si no parted 😛 y a parte con formato gpt, ya no msdos para soporte de mbr 😛 bueno asi que veamos como crear una particion sencilla con parted

 
 

~]# parted -a optimal /dev/xvdc
GNU Parted 2.1
Using /dev/xvdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) help                                                             
  align-check TYPE N                        check partition N for TYPE(min|opt) alignment
  check NUMBER                             do a simple check on the file system
  cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER   copy file system to another partition
  help [COMMAND]                           print general help, or help on COMMAND
  mklabel,mktable LABEL-TYPE               create a new disklabel (partition table)
  mkfs NUMBER FS-TYPE                      make a FS-TYPE file system on partition NUMBER
  mkpart PART-TYPE [FS-TYPE] START END     make a partition
  mkpartfs PART-TYPE FS-TYPE START END     make a partition with a file system
  move NUMBER START END                    move partition NUMBER
  name NUMBER NAME                         name partition NUMBER as NAME
  print [devices|free|list,all|NUMBER]     display the partition table, available devices, free space, all found partitions, or a particular
        partition
  quit                                     exit program
  rescue START END                         rescue a lost partition near START and END
  resize NUMBER START END                  resize partition NUMBER and its file system
  rm NUMBER                                delete partition NUMBER
  select DEVICE                            choose the device to edit
  set NUMBER FLAG STATE                    change the FLAG on partition NUMBER
  toggle [NUMBER [FLAG]]                   toggle the state of FLAG on partition NUMBER
  unit UNIT                                set the default unit to UNIT
  version                                  display the version number and copyright information of GNU Parted
(parted) mklabel gpt                                                      
(parted) print                                                            
Model: Xen Virtual Block Device (xvd)
Disk /dev/xvdc: 215GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start  End  Size  File system  Name  Flags

(parted) print free                                                       
Model: Xen Virtual Block Device (xvd)
Disk /dev/xvdc: 215GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End    Size   File system  Name  Flags
        17.4kB  215GB  215GB  Free Space

(parted) help unit
  unit UNIT                                set the default unit to UNIT

	UNIT is one of: s, B, kB, MB, GB, TB, compact, cyl, chs, %, kiB, MiB, GiB, TiB
(parted) unit GiB                                                         
(parted) print free
Model: Xen Virtual Block Device (xvd)
Disk /dev/xvdc: 200GiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start    End     Size    File system  Name  Flags
        0.00GiB  200GiB  200GiB  Free Space


(parted) mkpart primary 0 200                                             
(parted) name 1 u01                                                       
(parted) print                                                            
Model: Xen Virtual Block Device (xvd)
Disk /dev/xvdc: 200GiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start    End     Size    File system  Name  Flags
 1      0.00GiB  200GiB  200GiB               u01

(parted) quit                                                             
Information: You may need to update /etc/fstab.      


     ~]# mkfs.ext4 /dev/xvdc1
mke2fs 1.43-WIP (20-Jun-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
13107200 inodes, 52428288 blocks
2621414 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
1600 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done  

~]# vi /etc/fstab

Montamos la particion  y si le damos un df en este caso ya etara vible nuestra particion de /dev/xvdc1  

Lunes 05 de marzo de 2018

Deployment de un sitio estatico con Hugo y Git Hooks

1. Motivación

Estoy intentando escribir un poco más en mi blog, ya que noté que muchas veces no lo hacia muy a menudo por que al llegar a la consola de administración de Wordpress, habia que dar bastantes clicks para llegar al menu de “Posts”, además de que cada vez que entraba había un plugin diferente que actualizar, y verificar que nada se rompiera con las nuevas actualizaciónes, en pocas palabras hay que darle bastante mantenimiento a un sitio con Wordpress, y además de eso había que dedicarse a escribir el post.

Otra razón por lo que opté hacer el cambio de plataforma, es que al estar tratando de convertirme en DevOps, es necesario, desde mi punto de vista; tratar automatizar/scriptear la mayoria de tus tareas que realizas día a día, y con Hugo considero que se puede realizar este objetivo también.

1.1 Consideraciones

Una vez que decidí migrarme de Wordpress, el siguiente paso era decidir a que plataforma mudarme. De entrada la plataforma que queria probar era un Static Site Generator, aqui otro link de por que usar un Static Site Generator.

Partiendo de lo anterior, las opciones que me parecieron interesantes fueron:

Cada una de las opciones tiene diferentes caracteristicas, que no vamos a discutir en este post, sin embargo las carteristicas que me convencieron de usar Hugo por encima de las otras alternativas fueron:

  • Consta solamente de un binario, que comparado con las otras posibilidades hay que instalar todo un ambiente de desarrollo/producción.
  • Es bastante rápido.
  • Es Multi-plataforma
  • Tiene diversos temas

2. Instruciones

2.1 Consideraciones técnicas

El ambiente consta de: - 1 servidor productivo donde esta instalado hugo, git y un servidor web (apache o nginx) , haremos todos los deployments usando el usuario admin, ojo que no es el usuario root. - 1 servidor/equipo de desarrollo, de igual forma que cuenta con hugo y git, en mi caso, es mi computadora personal y mi usuario es luiscachog. - 1 cuenta de github.com

2.2 Autenticación mediante llaves SSH

El primer paso es realizar el intercambio de llaves SSH entre el equipo de desarrollo y el equipo productivo. Para ello seguimos los siguientes pasos:

  1. Generar la llave SSH, tendrás que contestar algunas preguntas, entre las cuales está si quieres ponerle un password, a lo cual deberas dejarlo en blanco para que no te pida contraseña.
luiscachog@dev-server:~$ ssh-keygen
  1. Copiar la llave SSH hacia el equipo productivo:
luiscachog@dev-server:~$ ssh-copy-id admin@IP_servidor_productivo
  1. Verificar que te puedas conectar desde tu servidor de desarrollo, con tu usuario al servidor productivo, con el usuario que realizará los deployments.
luiscachog@dev-server:~$ ssh admin@162.125.2.30 hostname

En este caso, debera de mostrarte el hostname del servidor productivo sin pedirte el password.

2.3 Configuración sitio con Hugo

El siguiente paso es configurar nuestro ambiente de desarrollo con Hugo y Git.

  1. Para instalar ambos en Ubuntu o derivados debes de ejecutar:

    luiscachog@dev-server:~$ sudo apt install hugo git
    

    Para tener la version más actualizada de hugo puedes seguir los pasos descritos en este link

  2. Vamos a crear un directorio de trabajo para nuestro sitio estatico

    luiscachog@dev-server:~$ mkdir ~/sites
    luiscachog@dev-server:~$ cd ~/sites
    
  3. Crearemos un nuevo sitio usando el comando hugo

    luiscachog@dev-server:~$ hugo new site luiscachog.io
    Congratulations! Your new Hugo site is created in /home/luiscachog/sites/luiscachog.io.
    
    Just a few more steps and you're ready to go:
    
    1.- Download a theme into the same-named folder.
        Choose a theme from https://themes.gohugo.io/, or
        create your own with the "hugo new theme <THEMENAME>" command.
    2.- Perhaps you want to add some content. You can add single files
        with "hugo new <SECTIONNAME>/<FILENAME>.<FORMAT>".
    3.- Start the built-in live server via "hugo server".
    
    Visit https://gohugo.io/ for quickstart guide and full documentation.
    
  4. Cuando termine de correr el comando se podra apreciar los siguientes directorios y archivos

    luiscachog@dev-server:~$ cd luiscachog.io
    luiscachog@dev-server:~$ ls
    archetypes  config.toml  content  data  layouts  static  themes
    luiscachog@dev-server:~$ tree 
    .
    ├── archetypes
    │   └── default.md
    ├── config.toml
    ├── content
    ├── data
    ├── layouts
    ├── static
    └── themes
    
    6 directories, 2 files
    
  5. El siguiente paso es agregar un tema, puedes encontrar uno que te guste en https://themes.gohugo.io/

    git init
    git submodule add https://github.com/budparr/gohugo-theme-ananke.git themes/ananke
    
    # Edit your config.toml configuration file
    # and add the new theme.
    
    echo 'theme = "ananke"' >> config.toml
    

    Como recomandación adicional en este paso, puedes realizar un fork del tema que te guste en github para poder realizar modificaciones y proponer cambios al mismo, contribuyendo de esa forma a su desarrollo, para hacerlo, sigue los pasos:

    1. Realizar un fork del tema, sigue esta guia para hacerlo.
    2. Al realizar el fork, tendras en tus repositorios de github el tema que quieras, por lo que tendras que ejecutar los mismos comandos del punto anterior, pero el repositorio del tema apuntara a tu usario en github
    git init
    git submodule add https://github.com/k4ch0/gohugo-theme-ananke.git themes/ananke
    # Edit your config.toml configuration file
    # and add the new theme.
    
    echo 'theme = "ananke"' >> config.toml
    
  6. Vamos a crear un post de prueba para verificar que todo esta funcionando correctamente

    hugo new posts/my-first-post.md
    echo "Hola Mundo" >> content/posts/my-first-post.md
    

    El comando anterior creara un archivo en la ruta content/posts/my-first-post.md, y el contenido será:

    ---
    title: "My First Post"
    date: 2018-02-28T12:02:38-06:00
    draft: true
    ---
    Hola Mundo!!!
    
    
  7. Finalmente, probaremos que nuestro sitio estatico con nuestro post se muestren de manera local, en nuestro servidor de desarrollo. Cabe mencionar, que por defecto el comando ‘hugo server’ no mostrará los posts que tengan la opción ‘draft: true’, por ello se agrega la bandera -D

    luiscachog@dev-server:~$ hugo server -D
    

2.4 Configuración del repositorio Git en el servidor de desarrollo 1ra parte

En el paso pasado, realizamos la inicialización del repositorio dentro del directorio del sitio estatico:

luiscachog@dev-server:~$ pwd
/home/luiscachog/sites/luiscachog.io
luiscachog@dev-server:~$ git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

    new file:   .gitmodules
    new file:   themes/ananke

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    archetypes/
    config.toml
    content/
    themes/ananke/

Ahora, para tener el repositorio publico, tenemos que crear el repositorio en github.com y configurarlo como un repositorio remoto

luiscachog@dev-server:~$ git add *
luiscachog@dev-server:~$ git commit -m "First commit"
luiscachog@dev-server:~$ git remote add origin https://github.com/k4ch0/luiscachog.io
luiscachog@dev-server:~$ git push -u origin master

2.5 Configuración del repositorio Git en el servidor productivo

Para poder ocupar los hooks de git es necesario hacer una primera copia inicial del repositorio en el que vamos a trabajar, con la particularidad de que el repositorio clonado debe ser del tipo bare.

En nuestro servidor productivo haremos:

admin@prod-server:~$ mkdir sites
admin@prod-server:~$ cd sites
admin@prod-server:~$ git clone --bare https://github.com/k4ch0/luiscachog.io  luiscachog.io.git

2.5.1 Configuración del hook

  1. Ya que tenemos nuestro repositorio tipo bare en el servidor productivo vamos a crear el script que mandará a llamar el hook de git.

    admin@prod-server:~$ cd sites/luiscachog.io.git/hooks
    admin@prod-server:~$ vim post-update
    
  2. Y agregamos algo asi:

    #!/bin/bash
    
    GIT_REPO=$HOME/luiscachog.io.git
    WORKING_DIRECTORY=/var/www/vhosts/luiscachog.io/working_hugo
    PUBLIC_WWW=/var/www/vhosts/luiscachog.io/public_html
    BACKUP_WWW=/var/www/vhosts/luiscachog.io/backup_html
    MY_DOMAIN=luiscachog.io
    
    set -e
    
    rm -rf $WORKING_DIRECTORY
    rsync -aqz $PUBLIC_WWW/ $BACKUP_WWW
    trap "echo 'A problem occurred.  Reverting to backup.'; rsync -aqz --del $BACKUP_WWW/ $PUBLIC_WWW; rm -rf $WORKING_DIRECTORY" EXIT
    
    git clone $GIT_REPO $WORKING_DIRECTORY
    mkdir -p $WORKING_DIRECTORY/themes
    rm -rf $PUBLIC_WWW/*
    /home/admin/bin/hugo -v -s $WORKING_DIRECTORY -d $PUBLIC_WWW -b "http://${MY_DOMAIN}"
    trap - EXIT
    
  3. Damos permisos de ejecución al script

    admin@prod-server:~$ chmod +x post-update
    
  4. Probamos que nuestro script funcione adecuadamente:

    admin@prod-server:~$ ~/sites/luiscachog.io.git/hooks/post-update
    
    Cloning into '/var/www/vhosts/luiscachog.io/working_hugo'...
    done.
    0 draft content
    0 future content 
    4 pages created
    0 paginator pages created
    0 tags created
    1 categories created
    in 26 ms
    
  5. Podras verificar tu nuevo post en la URL de su sitio:

http://production_domain_or_IP

2.6 Configuración del repositorio Git en el servidor de desarrollo 2da parte

Una vez tenemos configurado nuestro repositorio en el servidor de producción, procedemos a agregarlo como repositorio remoto en nuestro servidor de desarrollo

luiscachog@dev-server:~$ cd /home/luiscachog/sites/luiscachog.io
luiscachog@dev-server:~$ git remote add prod admin@IP_servidor_productivo:luiscachog.io
luiscachog@dev-server:~$ git ls-remote prod
d1b0b73528ab3117170ef74e133d0194dd2bc88a    HEAD
d1b0b73528ab3117170ef74e133d0194dd2bc88a    refs/heads/master

Puedes verificar los repositorios remotos con el comando:

luiscachog@dev-server:~$ git remote -v
origin  git@github.com:k4ch0/luiscachog.io.git (fetch)
origin  git@github.com:k4ch0/luiscachog.io.git (push)
prod    admin@IP_servidor_productivo:luiscachog.io.git (fetch)
prod    admin@IP_servidor_productivo:luiscachog.io.git (push)

Ahora cada vez que realizemos un push hacia el remote llamado ‘prod’ se llamara la función del hook.

luiscachog@dev-server:~$ cd /home/luiscachog/sites/luiscachog.io
luiscachog@dev-server:~$ hugo new posts/Testing-Deployment.md
luiscachog@dev-server:~$ echo "Deployment Test" >> content/posts/Testing-Deployment.md
luiscachog@dev-server:~$ git add *
luiscachog@dev-server:~$ git commit -m 'Deployment test with git hooks'

Este es el comando que hace la magia:

luiscachog@dev-server:~$ git push prod master
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 310 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: Cloning into '/var/www/vhosts/luiscachog.io/working_hugo'...
remote: done.
remote: Cloning into '/var/www/vhosts/luiscachog.io/working_hugo/themes/hugo-future-imperfect'...
remote: INFO 2018/03/01 03:12:34 Using config file: /var/www/vhosts/luiscachog.io/working_hugo/config.toml
remote: Building sites … INFO 2018/03/01 03:12:34 syncing static files to /var/www/vhosts/luiscachog.io/public_html/
remote: 
remote:                    | EN  
remote: +------------------+----+
remote:   Pages            | 10
remote:   Paginator pages  |  0  
remote:   Non-page files   |  0  
remote:   Static files     |  3  
remote:   Processed images |  0  
remote:   Aliases          |  1  
remote:   Sitemaps         |  1  
remote:   Cleaned          |  0  
remote: 
remote: Total in 44 ms
To admin@IP_servidor_productivo:luiscachog.io.git
   d5b0671..cvc4dee  master -> master

Listo ya podemos probar nuestro sitio

http://luiscachog.io

Con esto el siguiente paso que realizare es hacer el deployment de mi servidor para el blog usando Ansible.

Nos Vemos!!!

Sources: Digital Ocean

Sábado 03 de marzo de 2018

Conectarse remotamente usando llaves publicas y privadas

 

ssh


 

ssh un protocolo de comunicación que encontramos en la capa de aplicación del protocolo de comunicación TCP/IP, ssh nos sirve para establecer conexiones de manera remota y de manera segura entre servidores.

Por lo general cuando usamos ssh siempre a la hora de hacer la conexión del lado del servidor nos preguntara un usuario y un passwd. Así mismo cuando tenemos muchos servidores pues es algo engorroso tener un montón de passwds. en otras ocaciones las políticas de passwd son algo complejas de equis número de caracteres, números, caracteres especiales, mayusculas y minúsculas.

 

Una imagen para medio explicar como funciona el protocolo de comunicación de SSH

 
 

ssh

No se ustedes pero en lo personal no me aprenderia tantisimas contraseñas.

entonces lo que podemos hacer es generar nuestra llave y subirla a los servidores a donde necesitamos ingresar y ya sea que usemos una llave con alguna frase mas sencilla o dejarla sin frase.

Hacemos lo siguiente si mi usuarios es xanatos y quiero ingresar a mi maquina vmclase001 sin tener que usar passwd haremos lo siguiente.

 

ssh-keygen -t rsa -b 4096 -C "bernardo.mejia@gmail.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/xanatos/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/xanatos/.ssh/id_rsa.
Your public key has been saved in /home/xanatos/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Choz61K1xeFpqf6o66AT1LX8I/7I6KXMWnThT4bSV9g bernardo.mejia@gmail.com
The key's randomart image is:
+---[RSA 4096]----+
|                 |
|     .. o        |
|  . o+.= E       |
| . .+oX .        |
|. ++.X.+S        |
|. o*=o=+         |
|.ooo..o..        |
|+o+ *o.          |
|.=BO.+o.         |
+----[SHA256]-----+

como podemos ver ejecutamos el ssh-keygen se genera nuestra llave publica y privada dentro de nuestro home directory y en el subdirectorio .ssh y genera mis archivo id_rsa e id_rsa.pub.

Copiamos nuestra llave pulica al server al archivo authorized_keys

en el server si no existe el archivo lo creamos

touch authorized_keys
vi authorized_keys

$ cat authorized_keys 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqF4X5322/2MbloaZAIKXLvfqz7ZxSJYmdYlXluNZqZvPZ7W4qF78/kL7n+N2EUrGR1oPkd0kJaAZuQvJyPiYO2L+GaraS5IRJoWbqbM1yAP0htAhsuSx1Gj+DBe2H8IcANGQ9aG9nmlouykAWcut2bEPdvglOI2hjPi71OJvJbh10AXL4leaBuJbFOkxSqwoH15RAo6kPgcZhhyNkhKcS0qv0FPQ9F46LLuQuAcBfZCOzTYjlfMt418GQaL61LjGIK48l3Tl7Yo1RwJMRZrwWJUvmNsDXmovmkhfcbVVJGXsVR21X22AVq+8l1F9yXUUAKNeqT3BLTrThlGZc0PiLANaqYm60m/okDdy+UT8NCYxy6TCggQxpIsOuQaPfQfWEzNDBf7+dTL9VudECcHyPAHdXEOMnBvRXI/Vk9IKng3j7fILtDsfkkSp8Hd1z50ascpmam7fgInghz1RY/YmhPPqsIUiWkvHM24+o08pbiyrL6BjGldcuBAyRsFzuB573+vldp9i9LQxPjK5FuIUN2bc12w6TatS/VUkMDPyjcFPzENvccdB9aQ3odSw1QLPcIqyGw5S/azE6Ay4kwak6hblBzT1ztIKiI9v873f0CjOmOjYzT4DkBZOmbc7sld5XMmeNdFOP/kbcDj+ggCyEOBx7tPixD81Qia6AWm7FjQ== bernardo.mejia@gmail.com
xanatos@vmclase001:~/.ssh$ 

Ahora ya subimos nuestra llave y en teoría ya podemos entrar al server sin necesitad de una centraseña!

intentamos

~$ ssh xanatos@mysqlvm001.bmejiaparedes.mx
The authenticity of host 'mysqlvm001.bmejiaparedes.mx (62.151.176.96)' can't be established.
ECDSA key fingerprint is SHA256:igQgIOtrN74YqwH+uCQONWfTwyCItXgXspFUBaVY8PI.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'mysqlvm001.bmejiaparedes.mx,62.151.176.96' (ECDSA) to the list of known hosts.
xanatos@mysqlvm001.bmejiaparedes.mx's password:

Nos damos cuenta que nos sigue pidiendo passwd, necesitaremos revisar los permisos y tenemos que tener los archivos con los siguientes permisos

 

~/.ssh$ ls -ltr
total 16
-rw-r--r-- 1 xanatos xanatos  750 mar  3 11:14 id_rsa.pub
-rw------- 1 xanatos xanatos 3243 mar  3 11:14 id_rsa
-rw------- 1 xanatos xanatos  750 mar  3 11:21 authorized_keys
-rw-r--r-- 1 xanatos xanatos  444 mar  3 11:25 known_hosts

 

Volvemos a intentar y ahora si podemos entrar sin necesidad de poner una contraseña y solo co nuestra llave.

:~/.ssh$ cd
xanatos@vmclase001:~$ 
xanatos@vmclase001:~$ ssh xanatos@mysqlvm001.bmejiaparedes.mx
Last login: Sat Mar  3 17:32:13 2018 from fixed-189-203-149-57.totalplay.net
[xanatos@vmX ~]$

 

Ahora si ya existe el usuario y tenemos el acceso a las llaves usaremos nuestra llave privada para poder acceder al usuario

aquí tenemos las llaves del usuario clasex1 y haremos lo siguiente

xanatos@vmclase001:~$ ls -ltr |grep id
drwxr-xr-x 2 xanatos xanatos 4096 feb 21 21:28 Videos
-rw------- 1 xanatos xanatos 3243 mar  3 08:34 id_rsa_clasex1
-rw------- 1 xanatos xanatos  744 mar  3 08:34 id_rsa_clasex1.pub
xanatos@vmclase001:~$ 

xanatos@vmclase001:~$ ssh -i id_rsa_clasex1 clasex1@mysqlvm001.bmejiaparedes.mx
Last login: Sat Mar  3 16:44:09 2018 from fixed-189-203-149-57.totalplay.net
[clasex1@vmX ~]$

 

Ahora solo usamos nuestra llave privada que fue con anterioridad compartida para con nosotros. :p

Jueves 08 de febrero de 2018

Se vende Maleta para Laptop

5.11 Tactical Side Trip Briefcase Especialmente diseñada para negocios y oficina, hasta 32 litros de almacenamiento, compartimentos para libretas, papeles, laptops de hasta 17 pulgadas, bolsas laterales de 1 litro de capacidad y además meter ropa. Hecha de Nylon texturizado 1000D, cuenta con funda impermeable y varios compartimentos secretos. Tiene 1 año promedio de uso, sin ningún desperfecto ni desgaste. Forma de Conseguirla Me pueden contactar por los medios habituales, con los siguientes precios:

Viernes 26 de enero de 2018

Fco. de la Torre Inguanzo

Fco. de la Torre Inguanzo
Linux y Software Libre – LinuxmanR4

Mejorar el tiempo de arranque de Manjaro

LinuxmanR4
LinuxmanR4 - Historias sobre Linux, Manjaro, Elastix, software libre, afeitado y barbas clásicas.

Ayer estaba leyendo esta nota en la Mirada del Replicante: Canonical quiere que Ubuntu arranque más rápido ¡Y yo también!, pero existe el problema de que yo no utilizo Ubuntu desde hace varios años. En su lugar tengo instalado Manjaro como mi distro linuxera de cabecera para mis equipos de uso personal.

No es que mi equipo arranque lento, generalmente enciendo el equipo, me voy a preparar un café y cuando llego ya esta la pantalla que me pide iniciar sesión. Unos minutos después ya estoy listo para empezar a trabajar.

De hecho vino a mi memoria un momento en el que Ubuntu arrancaba endemoniadamente rápido, pero no era con systemd así que ese dato no me era útil.

updatedb y man-db.

Investigando di con otro artículo de La mirada del replicante: Analizar el tiempo de arranque de tu sistema con systemd-analize . Ahí fue donde conocí el comando systemd-analyze.

Al ejecutar el comando systemd-analyze blame en la terminal me di cuenta de dos procesos que en conjunto ocupaban ¡más de 5 minutos del arranque!.

Estos son los culpables:

  • updatedb.service
  • man-db.service

El servicio updatedb se encarga actualizar una base de datos que sirve para localizar archivos (es parte del paquete mlocate).

man-db se utiliza para inicializar o actualizar las cachés de la base de datos que normalmente son mantenidas por man (que muestra las ayudas de los comandos de la terminal).

Updatedb le agregaba en mi caso más de 4 minutos al proceso de arranque, man-db sólo 1, pero comparado con los demás procesos que se inician durante el arranque que duran segundos simplemente era demasiado.

Tuneando systemd.

Me di cuenta que no era el único con este problema. Después de buscar un poco en Google di con una solución sencilla que fue indicarle a systemd que ejecutara esos servicios a cierta hora o mucho después de iniciado el proceso de arranque.

Para eso es necesario crear estos archivos.

Nota: Las carpetas man-db.timer.d y updatedb.timer.d no existen hay que crearlos desde la terminal.

# /etc/systemd/system/man-db.timer.d/man-db.timer.conf

[Timer]
OnCalender=
OnCalendar=13:00
OnBootSec=120
# /etc/systemd/system/updatedb.timer.d/updatedb.timer.conf

[Timer]
OnCalender=
OnCalendar=13:05
OnBootSec=180

Claro que estos valores son ajustables. De esta forma logré disminuir mi tiempo de arranque a tan solo 1 minuto y medio, que no esta nada mal cuando se requiere un arranque veloz.

Espero que este artículo les sea de utilidad.

Enlaces de interés.

Mejorar el tiempo de arranque de Manjaro
linuxmanr4.

Lunes 15 de enero de 2018

Cristian Trujillo

Filtrado de contenido

El internet es parte inherente del negocio. Ahora se dice que el negocio es internet.

Es decir, todo lo relacionando con el negocio esta ligado a las redes. Con ello llegaron muchos aspectos en seguridad. Uno de ellos es lo que pueden navegar los usuarios dentro de la empresa.

Los usuarios al interior de la empresa pueden tener la sensación de estar en el anonimato, dentro de una mampara, cubículo u oficina.

Unas de las justificaciones para tener filtrado de contenido  es la productividad.

Los usuarios pueden llegar a perder demasiado tiempo en paginas que no estan relacionadas con el negocio. Incluso pueden estar descargando pirateria. Que pudiera llegar a comprometer directamente a la empresa.

Aunado a que usuarios que si requieren ancho de banda lo vean disminuido por usuario que lo consumen en ocio.

Las soluciones van desde lo mas laborioso hasta lo mas industrual.

Ediitar el archivo de hosts, los sistemas operativos pueden ser enga;anados al medifical la tabla de DNS local. Haciendo una relacion falsa entre un dominio poco productivo hacia alguna direccion interna o cualquier otra.

Instalando un antivirus. Algunos de estos productos ya cuentan con filtrado de contenido administrado con contrase;a para evitar que el usuario tenga acceso a modificar.

Instalando un servidor proxy. Queda en el punto intermedio entre la red de los usuarios y la nube de internet. Es la solucion mas ampliamente utilizada. Se puede administrar de forma centralizada.

Instalando hardware especializado.

Integrando servicios de la nube.

Jueves 11 de enero de 2018

Fco. de la Torre Inguanzo

Fco. de la Torre Inguanzo
Linux y Software Libre – LinuxmanR4

Convertir imágenes de formato HEIC a JPG con Linux

LinuxmanR4
LinuxmanR4 - Historias sobre Linux, Manjaro, Elastix, software libre, afeitado y barbas clásicas.

Hace unos días tuve un problema muy interesante. Les cuento, ustedes saben que buena parte del negocio de Apple es aumentar el tamaño del espacio de almacenamiento rentado en iCloud.

Me parece que de inicio dan 5 GB que es claramente insuficiente y se llena con mucha facilidad. Es por eso que muchas personas optan por comprar un plan de almacenamiento que varía un poco de país en país.

Planes de almacenamiento de iCloudPrecios a Enero del 2018.

Un compañero llegó a mi por una advertencia de que su espacio en iCloud ya estaba lleno. Le expliqué que si quería almacenar sus fotos en iCloud tendría que pagar a menos que …

Google Fotos

Se que existe una versión de Google Fotos para iOS, solo se necesita una cuenta de Google para que empiece a almacenar las fotos que se toman en el iPhone o en el iPad y se sincronizan automáticamente.

Tengo entendido que el espacio es ilimitado si se guardan en formato de alta calidad, pero no muy alta calidad (estos aparatos nuevos abusan).

Mi compañero me dijo que no importaba, solo quería tener un respaldo de sus fotos por si algún dispositivo se pierde o descompone.

Y funcionó muy bien !!! De inmediato las fotos se empezaron a subir a la nube de Google, lo mejor es que también tiene acceso mediante el sitio web así que todo era miel sobre hojuelas hasta que un día …

HEIC ¿Qué demonios es eso?

Un buen día quiso descargar un álbum de imágenes selectas y ¡Oh sorpresa! nos dimos cuenta de que los archivos tenían una extensión extraña, todos las imágenes tenían la extensión .heic .

Pues resulta que HEIC (High Efficiency Image File Format) es el nuevo formato que utilizan los dispositivos Apple, creo que a partir de iOS 11. Y por lo visto todavía no es muy conocido y algunos no están muy contentos con “la novedad” (léase HEIC file format is Unwelcomed!).

Google Fotos no tiene problemas para mostrar los archivos, pero al descargarlos lo hace en su formato original y actualmente no es muy conocido. Ninguno de mis programas para visualizar imágenes en Linux lo reconocía ¡Ni siquiera GIMP! y eso amigos, eso si que es un problema.

Intenté un cambio de formato con ImageMagick pero tampoco. Así que era tiempo de buscar opciones.

Tifig

Afortunadamente me encontré en GitHub con un programa muy verde pero que en mi caso funcionó muy bien llamado tifig.

Tuve que instalarlo a mano, porque todavía no existe un paquete en AUR para este programa. Hay un repositorio para Ubuntu, pero en mi caso tuve que instalar algunos programas dependientes.

En la misma página del proyecto se ofrecen las distintas opciones de instalación.

De HEIC a JPG por montones

Una vez instalado tifig todo es más sencillo.

Forma de uso:

Converts iOS 11 HEIC images to practical formats
Usage:
  tifig [OPTION...] input_file [output_file]

  -i, --input arg            Input HEIF image
  -o, --output arg           Output image path
  -q, --quality [=arg(=90)]  Output JPEG quality (default: 90)
  -v, --verbose              Verbose output
  -w, --width arg            Width of output image
  -h, --height arg           Height of output image
  -c, --crop                 Smartcrop image to fit given size
  -p, --parallel             Decode tiles in parallel
  -t, --thumbnail            Use embedded thumbnail
      --version              Show tifig version 

Sin embargo, ejecutar un comando por cada archivo es tardado y tedioso. Al principio pensé en alguna solución con Bash, pero luego apareció parallel como una alternativa más eficiente.

Por ejemplo, esta instrucción convierte todos los archivos .heic del directorio actual a jpg y además los redimensiona a 1200 pixeles de ancho.

parallel -j 3 --eta tifig -w 1200 '{}' '{.}.jpg' ::: *.heic

A parallel le indiqué que utilizara 3 núcleos del microprocesador con -j 3 (tengo un microprocesador de 4 núcleos) y que me mostrara un tiempo aproximado de finalización con –eta.

De este modo la conversión es mucho más veloz.

La solución web

Existe una página que ofrece la conversión de heic a jpg que se llama heictojpg.com que hace un excelente trabajo.

HeictojpgHeic to JPG para trabajos pequeños.

El único problema es que esta limitado a 50 imágenes por lote.

Supongo que con el tiempo el formato heic se agregará a los formatos soportados por los principales programas de edición gráfica. Pero por el momento esto es lo que hay.

¡Felices conversiones!.

Imagen destacada de Medhat Dawoud en Unsplash

Convertir imágenes de formato HEIC a JPG con Linux
linuxmanr4.

Miércoles 03 de enero de 2018

Se vende Maleta para Laptop

5.11 Tactical Side Trip Briefcase Especialmente diseñada para negocios y oficina, hasta 32 litros de almacenamiento, compartimentos para libretas, papeles, laptops de hasta 17 pulgadas, bolsas laterales de 1 litro de capacidad y además meter ropa. Hecha de Nylon texturizado 1000D, cuenta con funda impermeable y varios compartimentos secretos. Tiene 1 año promedio de uso, sin ningún desperfecto ni desgaste. Forma de Conseguirla Me pueden contactar por los medios habituales, con los siguientes precios:

Domingo 03 de diciembre de 2017

Se vende Maleta para Laptop

5.11 Tactical Side Trip Briefcase Especialmente diseñada para negocios y oficina, hasta 32 litros de almacenamiento, compartimentos para libretas, papeles, laptops de hasta 17 pulgadas, bolsas laterales de 1 litro de capacidad y además meter ropa. Hecha de Nylon texturizado 1000D, cuenta con funda impermeable y varios compartimentos secretos. Tiene 1 año promedio de uso, sin ningún desperfecto ni desgaste. Forma de Conseguirla Me pueden contactar por los medios habituales, con los siguientes precios:

Sábado 25 de noviembre de 2017

Excel 2013, convertir mes en texto a numero

Si tienes un mes en formato ENERO este lo cambiara a 02, funciona en la versión de Excel 2013, solo se tienen que reemplazar J2 por la celda que contenga el mes en formato de texto, espero que le sea de ayuda a alguien.

=SI(J2="ENERO","01",SI(J2="FEBRERO","02", 
SI(J2="MARZO","03",SI(J2="ABRIL","04", 
SI(J2="MAYO","05",SI(J2="JUNIO","06", 
SI(J2="JULIO","07",SI(J2="AGOSTO","08", 
SI(J2="SEPTIEMBRE","09", 
SI(J2="OCTUBRE","10", 
SI(J2="NOVIEMBRE","11", 
SI(J2="DICIEMBRE","12","ERROR"))))))))))))

Miércoles 22 de noviembre de 2017

Mover ‘logical volume’ de un disco a otro con pvmove en línea

Hace meses decidi eliminar completamente Windows de mi laptop de trabajo, despues de eliminar Windows y sus particiones tuve ganas de probar ZFS, por lo que tuve la necesidad de reacomodar datos en el disco pero no queria reinstalar y como afortunadamente siempre uso Volume Groups pues decidi mover algunos LV aka Logical Volume, el procedimiento que voy a realizar solo voy a mover datos dentro de un mismo disco a diferente particion, pero sirve para mover datos entre discos.

Layout de Particiones actual

  • /dev/sda1 -> 40MB (diag)
  • /dev/sda2 -> 16GB (Recovery)
  • /dev/sda3 -> 100GB (NTFS Windows c:\)
  • /dev/sda4 -> 350GB (Particion Extendida)
    • /dev/sda5 -> 150GB (el Volume Group vg_DragonBorn, con 4 LV)
    • /dev/sda6 -> 200GB (NTFS Windows d:\)

El Volume Group esta distribuido de la siguiente forma

  • lv_root -> 37GB para /
  • lv_swap -> 10GB para SWAP
  • lv_home -> 50GB para /home
  • lv_opt -> 50GB para /opt

Objetivo

La idea es que la particion /dev/sda3 contenga el volume group, eliminar la particion extendida /dev/sda4 y crear una particion para ZFS y ahi poner /opt

Primeros Pasos

Despues de eliminar las particiones windows asi se veian en gparted

Estado actual de particionesEstado actual de particiones

Procedemos a crear una particón, en la primer sección de sin asignar

Crear nueva particiónCrear nueva partición

Seleccionamos tipo lvm2 en sistema de archivos y le damos a añadir

Seleccionamos tipo lvm

 

Despues damos en aplicar cambios en gparted

aplicar cambios

con lo anterior se ha cread /dev/sda3 por lo que procedemos a cerrar gparted y abrir una consola y primero inicializamos la partición /dev/sda3 para el uso con LVM.

Incializacion de particion o disco

Si tu deseas mover de disco y no de particion como es mi caso, reemplazar /dev/sda3 por tu nuevo disco, si es el disco completo no requiere una particion podrias incializar por completo el disco

sudo pvcreate /dev/sda3

pvcreate /dev/sda3

Extendemos el volume group con la nueva particion inicializada

sudo vgextend vg_DragonBorn /dev/sda3

vgextend vg_DragonBorn /dev/sda3

Mover los datos con pvmove

Mi primer logical volume a mover es lv_swap,

sudo pvmove -v (verbose) -n (nombre de logical volume) /disco/fuente /disco/destino

sudo pvmove -v -n lv_swap /dev/sda5 /dev/sda3

Despues de unos minutos u horas dependiendo del tamaño del logical volume o de los discos a mover, veremos una pantalla simliar

pvmove success

Hacer esto por los volumenes logicos que se quieran migrar

 

Viernes 10 de noviembre de 2017

José Oviedo

José Oviedo
oviedo.mx

Certificados SSL Gratis con Let’s Encrypt

Let’s Encrypt es un esfuerzo, impulsado por la Fundación Linux, para crear una entidad certificadora que ofrezca certificados SSL abiertos, libres, gratuitos y automáticos.

Para instalar Let’s Encrypt en nuestra distribución Ubuntu/Debian ejecutamos lo siguiente:

apt install letsencrypt
apt install python-letsencrypt-apache

Y después para iniciar la configuración de nuestros dominios ponemos:

letsencrypt –apache –redirect -d DOMINIO.COM

Y listo!!.., con eso tenemos redireccionamiento desde HTTP > HTTPS y el HTTPS configurado correctamente.

Lo único es que el certificado no dura 1 año, pero para renovarlo ejecutar este comando:

letsencrypt renew

Pueden ponerlo en el CRON y listo otra vez

Sí su distribución no cuenta con el programa letsencrypt pueden utilizar otro llamado certbot, las instrucciones son las mismas:

sudo add-apt-repository ppa:certbot/certbot
sudo apt-get install python-certbot-apache
sudo certbot –apache -d DOMINIO.COM

Fuente:
https://ayudawp.com/lets-encrypt-certificado-ssl-libre-y-gratuito-para-asegurar-tu-web-con-https/
https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu-14-04
https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu-16-04

Fco. de la Torre Inguanzo

Fco. de la Torre Inguanzo
Linux y Software Libre – LinuxmanR4

Impresora compartida con samba pide usuario y contraseña

LinuxmanR4
LinuxmanR4 - Historias sobre Linux, Manjaro, Elastix, software libre, afeitado y barbas clásicas.

A lo mejor el título de este artículo no es muy claro. Voy a intentar explicar la situación. Generalmente mando mis trabajos de impresión a la impresora compartida de un equipo que utiliza Windows 7. Usualmente no había tenido problemas hasta después de la última actualización de Manjaro en la que para mandar imprimir me pide un nombre de usuario y una contraseña.

Al principio creí que era la contraseña de root, pero luego me la volvía a pedir. Intenté con mi usuario de linux y tampoco. Lo único que funcionó era el nombre de usuario y contraseña de la computadora con Windows. Bueno ya era un avance.

En ocasiones anteriores este tipo de problemas se arreglaban solos o bastaba con dar de alta nuevamente la impresora para que desaparecieran pero ese no fue el caso.

Durante más de una semana me acostumbré a teclear el usuario y la contraseña. Funcionaba pero era poco práctico, ya era hora de buscar una solución.

Configuración de impresión.

Manjaro tiene un programa que se llama Configuración de impresión que es donde administro las impresoras que tengo dadas de alta en mi sistema. Supuse que la solución era un poco obvia, decirle a mi Manjaro que almacenara el nombre de usuario y contraseña en lugar de teclearlo cada vez que quería imprimir.

Cambiar el URI del dispositivoNo almacena el usuario y la contraseña.

Incluso existe un espacio en donde se puede especificar un usuario y contraseña en donde dice Autenticación, lamentablemente después de varios intentos me di cuenta de que no guarda esa información y en la siguiente impresión la vuelve a pedir. Así que era necesario probar otro enfoque.

Mediante la página de CUPS.

Para entrar a la página de CUPS solo hay que visitar http://localhost:631/ , luego el menú AdministraciónAdministrar Impresoras .. MantenimientoModificar Impresora (o ya de plano dar de alta una nueva impresora).  Seleccionar la opción que dice: Windows Printer via SAMBA y en ese lugar se le puede especificar el usuario y contraseña de la conexión a la impresora.

Modificar impresora en CUPSAquí es donde va a guardar la información de la conexión.

La conexión quedaría más o menos así:

smb://usuario:contraseña@ip_computadora/impresora_compartida

Me pasó que el nombre de usuario de la computadora con Windows incluía un espacio, en ese caso, se agrega un %20 en el lugar donde va el espacio, algo más o menos así:

smb://usuario%20con%20espacio:contraseña@ip_computadora/impresora_compartida

Lo que sigue es guardar los cambios, hacer algunas pruebas y si todo salio bien, ya no pedirá el usuario y la contraseña. Bueno, hasta la próxima actualización de Manjaro.

Espero que este consejo les sea de utilidad. ¡Hasta la próxima!.

Enlaces.

 

Impresora compartida con samba pide usuario y contraseña
linuxmanr4.

Viernes 03 de noviembre de 2017

Jonathan Hernández

Jonathan Hernández
Ion

Hola

alert("hola");
 

Jueves 28 de septiembre de 2017

Héctor Daniel Cortés

Héctor Daniel Cortés
'Aztec Eagle' Turbo

Héctor y el secreto de la felicidad

Ayer ví una película de Simon Pegg titulada Héctor y el secreto de la felicidad.

Debo decir que me gustó.

«Un psiquiatra busca en el mundo para encontrar el secreto de la felicidad»

Aunque no voy a platicar la película, sí voy a mencionar las quince notas en el cuaderno de Héctor, así que, estimados lectores (¿todavía queda alguno por aquí?), están advertidos.

  1. Hacer comparaciones puede estropear tu felicidad.
  2. Mucha gente piensa que la felicidad es ser rico o importante.
  3. Muchas personas ven la felicidad sólo en su futuro.
  4. La felicidad podría ser la libertad de amar a más de una mujer al mismo tiempo.
  5. A veces la felicidad es no saber toda la historia.
  6. Evitar la infelicidad no es el camino hacia la felicidad.
  7. ¿La persona con la que te encuentras te trae predominantemente A): Arriba o B): Abajo?
  8. La felicidad es responder a tu vocación.
  9. La felicidad es ser amado por ser quien eres.
  10. Sweet Potato Stew!
  11. El miedo es un impedimento para la felicidad.
  12. La felicidad es sentirse completamente vivo. 
  13. La felicidad es saber celebrar.
  14. Escuchar es amar.
  15. La nostalgia no es lo que solía ser.
Y aunque no lo escribe en el cuaderno, termina diciendo «Todos tenemos la obligación de ser felices».

Ver en NetFlix

Martes 19 de septiembre de 2017

Héctor Daniel Cortés

Héctor Daniel Cortés
'Aztec Eagle' Turbo

2017-09-19 18:14:39 (M7.1) PUEBLA, MEXICO 18.6 -98.4 (82934)

== PRELIMINARY EARTHQUAKE REPORT ==



Region: PUEBLA, MEXICO
Geographic coordinates: 18.584N, 98.399W
Magnitude: 7.1
Depth: 51 km
Universal Time (UTC): 19 Sep 2017 18:14:39
Time near the Epicenter: 19 Sep 2017 13:14:39
Local standard time in your area: 19 Sep 2017 12:14:39

Location with respect to nearby cities:
8 km (5 miles) ESE (111 degrees) of Iz�car, Puebla, Mexico
22 km (14 miles) ENE (71 degrees) of Atencingo, Puebla, Mexico
36 km (22 miles) ENE (75 degrees) of Axochiapan, Morelos, Mexico
56 km (35 miles) SSW (202 degrees) of Puebla, Puebla, Mexico
123 km (76 miles) SE (139 degrees) of MEXICO CITY, D.F., Mexico


ADDITIONAL EARTHQUAKE PARAMETERS
________________________________
event ID : us 2000ar20

This is a computer-generated message and has not yet been reviewed by a
seismologist.
For subsequent updates, maps, and technical information, see:
http://earthquake.usgs.gov/earthquakes/eventpage/us2000ar20
or
https://earthquake.usgs.gov/

National Earthquake Information Center
U.S. Geological Survey


DISCLAIMER: https://earthquake.usgs.gov/ens/help.html?page=help#disclaimer

Lunes 18 de septiembre de 2017

Promoviendo Software Libre: Conocer el total de memoria RAM en SOLARIS

Viernes 08 de septiembre de 2017

Héctor Daniel Cortés

Héctor Daniel Cortés
'Aztec Eagle' Turbo

2017-09-08 04:49:17 UPDATED: (M8.0) OFFSHORE CHIAPAS, MEXICO 15.0 -93.8 (82934)

== PRELIMINARY EARTHQUAKE REPORT ==

***This event supersedes event AT00OVY2Q7,PT17251000.


Region: OFFSHORE CHIAPAS, MEXICO
Geographic coordinates: 15.029N, 93.807W
Magnitude: 8.0
Depth: 35 km
Universal Time (UTC): 8 Sep 2017 04:49:18
Time near the Epicenter: 7 Sep 2017 23:49:18
Local standard time in your area: 7 Sep 2017 22:49:18

Location with respect to nearby cities:
97 km (60 miles) SW (221 degrees) of Pijijiapan, Chiapas, Mexico
107 km (66 miles) WSW (245 degrees) of Mapastepec, Chiapas, Mexico
117 km (73 miles) S (182 degrees) of Tonal�, Chiapas, Mexico
165 km (102 miles) W (275 degrees) of Tapachula, Chiapas, Mexico
356 km (221 miles) W (278 degrees) of GUATEMALA CITY, Guatemala


ADDITIONAL EARTHQUAKE PARAMETERS
________________________________
event ID : us 2000ahv0

This is a computer-generated message and has not yet been reviewed by a
seismologist.
For subsequent updates, maps, and technical information, see:
http://earthquake.usgs.gov/earthquakes/eventpage/us2000ahv0
or
https://earthquake.usgs.gov/

National Earthquake Information Center
U.S. Geological Survey


DISCLAIMER: https://earthquake.usgs.gov/ens/help.html?page=help#disclaimer


Miércoles 16 de agosto de 2017

Rafael Bucio

Rafael Bucio
Rafael Bucio ⠠⠵

Fork Bomb

Fork bomb is an infinite loop that repeatedly launches the same process.

:() Defining a function called :

{:|: &} means run the function : and send its output to the : function again and run that in the background.

The ; is a command separator, like &&

: runs the function the first time.

!b00m

#/bin/sh if for comment!! ;-)

Domingo 13 de agosto de 2017

Rafael Bucio

Rafael Bucio
Rafael Bucio ⠠⠵

Defcon 25!

DEFCON 25!, muy bueno !