Jueves 13 de diciembre de 2018

Marco Islas

Marco Islas
Marco Islas

Petición · Exigimos que los Jueces y Magistrados sean removidos de su cargo @SCJN · Change.org

Miércoles 05 de diciembre de 2018

Gunnar Wolf

Gunnar Wolf
Gunnar Wolf

New release of the Raspberry Pi 3 *unofficial Debian preview* image

Back in June, Michael Stapelberg asked for somebody interested in adopting the unofficial Debian image for the Raspberry Pi 3 family. It didn't take me long to raise my hand.
What did take me long is to actually do it. I have adopted Raspberry3 image spec repository, with the recipes to build the image using Lars' great vmdb2, as well as the raspi3-firmware non-free Debian package.
After delaying this for too long, first in order to understand it better, and second because of the workload I had this last semester, I think we are ready to announce...

There is a new, updated preview image!

You can look at the instructions at the Debian Wiki page on RaspberryPi3. Or you can just jump to the downloads, at my people.debian.orgxzipped image (388MB, unzips to 1.5GB, and resizes to the capacity of your boot SD at first boot), verification sha256sum, and PGP-signed verification sha256sum.
There are still many things that can be improved, for sure. The main issues for me are:

  • No wireless support. Due to a bug in Linux kenel 4.18, wlan0 support is broken. It is reported, and we expect it to be fixed in the next kernel upload.
  • Hardcoded root password. This will be tackled later on — part of the issue is that I cannot ensure how this computer will be booted. I have some ideas to tackle this, though...

Other than that, what we have is a very minimal Debian system, ready for installing software!
At some point in the future, I plan to add build profiles for some common configurations. But lets go a step at a time.

Lunes 03 de diciembre de 2018

Gunnar Wolf

Gunnar Wolf
Gunnar Wolf

Chairing «Topics on Internet Censorship and Surveillance»

I have been honored to be invited as a co-chair (together with Vasilis Ververis and Mario Isaakidis) for a Special Track called «Topics on Internet Censorship and Surveillance» (TICS), at the The Eighteenth International Conference on Networks, which will be held in Valencia, Spain, 2019.03.24–2019.03.28, and organized under IARIA's name and umbrella.

I am reproducing here the Call for Papers. Please do note that if you are interested in participating, the relevant dates are those publicized for the Special Track (submission by 2019.01.29; notification by 2019.02.18; registration and camera-ready by 2019.02.27), not those on ICN's site.

Over the past years there has been a greater demand for online censorship and surveillance, as an understandable reaction against hate speech, copyright violations, and other cases related to citizen compliance with civil laws and regulations by national authorities. Unfortunately, this is often accompanied by a tendency of extensively censoring online content and massively spying on citizens actions. Numerous whistleblower revelations, leaks from classified documents, and a vast amount of information released by activists, researchers and journalists, reveal evidence of government-sponsored infrastructure that either goes beyond the requirements and scope of the law, or operates without any effective regulations in place. In addition, this infrastructure often supports the interests of big private corporations, such as the companies that enforce online copyright control.

TICS is a special track the area of Internet censorship, surveillance and other adversarial burdens to technology that bring in danger; to a greater extent the safety (physical security and privacy) of its users.

Proposals for TICS 2019 should be situated within the field of Internet censorship, network measurements, information controls, surveillance and content moderation. Ideally topics should connect to the following , but not limited to:

  • Technical, social, political, and economical implications of Internet censorship and surveillance
  • Detection and analysis of network blocking and surveillance infrastructure (hardware or software)
  • Research on legal frameworks, regulations and policies that imply blocking or limitation of the availability of network services and online content
  • Online censorship circumvention and anti-surveillance practices
  • Network measurements methodologies to detect and categorize network interference
  • Research on the implications of automated or centralized user content regulation (such as for hate speech, copyright, or disinformation)

Please help me share this invitation with possible interested people!
Oh — And to make this more interesting and enticing for you, ICN will take place at the same city and just one week before the Internet Freedom Festival, the Global Unconference of the Internet Freedom Communities ☺

Miércoles 28 de noviembre de 2018

Mi primera experiencia con Arduino

Muy educativa… muy dirigida..

Taller introductorio de robótica educativa y drones

El paquete esta muy interesante, el juguete anda por los 4500 pesos, pero viene en aluminio y con una modificación de scratch, con un arduino con su caja de acrílico y conectores numerados y estilo telefónicos (RJ11) para mayor facilidad, me gusto mucho y me parece que el precio es mejor que el de los productos de Lego y me dejo pensando y me encontré con que el diseño es más o menos común, quiero creer que la idea del auto y del sigue lineas al menos lo debería de ser y encontré que Elegoo tiene uno disponible por 1500 pesos… que se me hace será lo siguiente que consiga, a menos que exista una opción local más económica, en este proyecto en otra sesión nos prestaron un kit muy parecido al que me encontré pero aún debo consultar cual es el precio y cual el distribuidor.

Lunes 26 de noviembre de 2018

Marco Islas

Marco Islas
Marco Islas


Viernes 23 de noviembre de 2018

Alcance Libre: Remate de cómics de Marvel.

Miércoles 21 de noviembre de 2018

Marco Islas

Marco Islas
Marco Islas

Yay! PyCharm 2018.3 !!

Martes 20 de noviembre de 2018

Configure SSH on a Ruckus Switch


I just have a Ruckus ICX 7150 Switch on my home and I’m trying to get access under ssh and web, to easy configuration and security instead of use telnet. So, I logged in using telnet and then run the following commands to configure a username/password and begin to receive petirions over port 22(ssh) and port 443(https). Let’s begin!

  1. We will connect via telnet to the switch.

     telnet SWITCH_IP
  2. Once we are on the Switch CLI as a optional step, we can configure an IP on the switch.

     device> enable
     device# configure terminal
     device(config)# ip address IP_ADDRESS/CIDR
     device(config)# ip default-gateway IP_GATEWAY
  3. Now, the next steps are for generate a SSL certificate, a username/password, activate password to login and enable thw web access and ssh access.

     device(config)# crypto-ssl certificate generate
     device(config)# username USERNAME password PASSWORD
     device(config)# aaa authentication login default local
     device(config)# aaa authentication web-server default local
  4. It may take several minutes to generate the certificate key. After that, save the configuration.

     device(config)# write memory

    Now you are able to login on your switch using ssh or web.

Un respaldo grande

Y largo de generar, recién tal vez el año pasado o a lo mejor el anterior, no recuerdo que dependencia requería un respaldo en MBZ de unos cursos de Moodle, yo por supuesto estaba más por mandarles un sql + un tgz, pero pidieron ese formato, a la fecha no tengo idea de si lo han montado en sus maquinas locales o si solo lo pidieron por ser parte del contrato que se entregue el fuente y lo que se realizó, por supuesto generarlos desde la aplicación web no sólo era suicida, además regresaba error de timeout de la plataforma, se me ocurrió que debería haber una herramienta de línea de comando para generalas justo por el tiempo de ejecución y por supuesto la hay:

[root@formacion cli]# time sudo -u apache php backup.php --courseid=20 --destination=/mnt/resource/temp/ && time sudo -u apache php backup.php --courseid=21 --destination=/mnt/resource/temp/
== Performing backup... ==
Writing /mnt/resource/temp/copia_de_seguridad-moodle2-course-20-cea_2018-20181117-2325.mbz
Backup completed.

real    95m6.135s
user    10m29.448s
sys     1m18.817s
== Performing backup... ==
Writing /mnt/resource/temp/copia_de_seguridad-moodle2-course-21-sxxi-20181118-0100.mbz
Backup completed.

real    113m7.253s
user    9m0.674s
sys     1m11.254s
[root@formacion cli]#

El primero mide 2.8GB el segundo 3.1GB…

Sábado 20 de octubre de 2018

Planeta Gruslic: Daniel Bahena: Set Region Zone Gcloud
Planeta Gruslic: Daniel Bahena: Gcloud Auth Revoke

Lunes 08 de octubre de 2018

Al tiempo…

Dice el dicho y bueno el correo toma tiempo de ver las reglas y los resultados… como continuación y esperemos cierre de la tormenta perfecta y de correo y correo, sirva esta entrada.

El día de hoy ya se ve así la cola de correo, después de un buen rato esta abajo de veinte mil 

Lo que va de octubre.

Todo el merequetengue completo, el inicio del curso grande en la semana 36 junto con el error de configuración, en la semana 37 el purgar el correo mal configurado, al final de la semana 37 purgar todo el correo, iniciar la 38 descubriendo el error, la 39 con la puesta en marcha de la gestión del correo por parte de Moodle (los rebotes, errores de dedo, equivocación con el correo, etc., es decir inhabilitar el envió para las direcciones que son incorrectas) y al final de la 39 comenzamos a normalizar, ya en la 40 se ve más como debería.


Jueves 04 de octubre de 2018

Planeta Gruslic: Daniel Bahena: How to create a bare git repo

Martes 02 de octubre de 2018

Héctor Daniel Cortés

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

OpenFOAM y Fedora 28

Se está realizando un curso de OpenFOAM en el IER. Algunos usuarios tienen Fedora en sus portátiles y se han presentado algunos problemas con la instalación.

De acuerdo con las instrucciones en https://www.openfoam.com/download/install-binary-linux.php y en https://openfoam.org/download/6-linux/ lo mejor es utilizar docker.

Pero como dijo Cantiflas, siendo OpenFOAM una aplicación para Ubuntu, echarla a andar en Fedora tiene sus detalles, particularmente con SELinux.

Primeramente, lo más fácil es instalar y echar a andar docker:
# dnf -y install docker 
# systemctl start docker
Como dice en https://www.projectatomic.io/blog/2015/08/why-we-dont-let-non-root-users-run-docker-in-centos-fedora-or-rhel/, hay que ignorar las instrucciones de hacer un grupo docker, y en su lugar utilizar sudo. Se pueden seguir cualquiera de las dos opciones: la de https://openfoam.org/download/6-linux/ o bien https://www.openfoam.com/download/install-binary-linux.php. Yo terminé instalando las dos, utilizando los directorios ~/OpenFOAM/turbo-6 y ~/OpenFOAM/turbo-v1806 respectivamente.

Ahora bien, antes de ejectuar startOpenFOAM o bien openfoam6-linux hay que ir en contra del sentido común y apagar SELinux:

# setenforcing 0
Finalmente, escogemos una versión/directorio de trabajo, y ejecutamos el contenedor vía sudo:

$ cd ~/OpenFOAM/turbo-6
$ sudo openfoam6-linux
O bien:

$ cd ~/OpenFOAM/turbo-v1806
$ sudo startOpenFOAM
Listo. Ya podemos hacer las pruebas que indican las instrucciones.

Al terminar de usar openFOAM recuerden activar SELinux:

# setenforcing 1
Lo demás, no tengo idea. Creo que debí enlistarme en el curso. Será para la próxima.

Jueves 27 de septiembre de 2018

Actualizaciones forzadas en Windows 10 – Parte Dos

Desde hace bastante veo que existen muchas visitas en el articulo Deshabilitar actualizaciones forzadas en Windows 10, cuando escribí el articulo, Windows 10 no tenia las opciones de limitar el ancho de banda el cual utiliza a la hora de actualizar, ni las opciones de horarios.

Teniendo en cuenta que al deshabilitar las actualizaciones de Windows 10 realizamos una práctica no buena en materia de seguridad he decidido redimir el articulo y actualizar la forma en la cual manejaba mis actualizaciones (Las activaba 1 vez a la semana) esto se debe a que mi conexión anterior era de 3 MB DSL (así es.. donde vivo Internet es realmente lento).

Ahora teniendo 20 MB de velocidad mi política debe extenderse a la prioridad de actualizar con mas frecuencia, sobre todo en este mundo donde todos andan probando algún 0-day. Al momento de escribir este articulo, la version de Windows sigue siendo la misma, pero el build es el siguiente:

Windows PowerShell
Copyright (C) Microsoft Corporation. Todos los derechos reservados.

PS C:\Users\alber> [System.Environment]::OSVersion.Version

Major Minor Build Revision
----- ----- ----- --------
10 0 17134 0

PS C:\Users\alber>

Ahora si ingresamos a “Actualización y seguridad” veremos “Opciones avanzadas” desde ahí ingresamos a “Optimización de entrega” y luego a “Opciones Avanzadas”, (Así es, Opciones Avanzadas se repite dos veces).

Una vez, dentro de Opciones Avanzadas veremos la siguiente ventana:

Como pueden observar, ahora contamos con opciones para:

Limitar la cantidad de ancho de banda. (Por alguna razón aparece dos veces).

Limitar la cantidad de ancho de banda para cuando compartimos las actualizaciones (en caso de tener esta opción habilitada).

Límite de subida.




Al fin podemos decir que todo ha vuelto a la normalidad. Si bien el servicio de BITS trae una opción para limitar el ancho de banda, esta opción presentada es la que debemos utilizar, he probado BITS con GPO pero nunca funcionó.

Domingo 23 de septiembre de 2018

Eduardo Ruiz Duarte

Eduardo Ruiz Duarte
Beck's blog

Criptografía asimétrica con curvas elípticas isógenas súpersingulares resistentes a ataques cuánticos

Poco a poco la criptografía como la conocemos está desapareciendo, he hablado con Tanja Lange un par de veces en los congresos que hace la sociedad matemática holandesa y ella parece insistir mucho que estamos ya muy cerca presenciar la existencia de una computadora cuántica, ella afirma que entre el 2024-2030 ya existirá alguna.

Lo relevante es que toda la criptografía actual implementada en los ámbitos económicos, militares y gubernamentales, cuenta con seguridad extrema ante computo clásico como lo conocemos (modelos Von Neumann, Turing...) . El problema es que el modelo de cómputo cuántico rompe todos los algoritmos implementados hoy en día. Esto es debido a la existencia de un algoritmo por Peter Shor que factoriza y calcula logaritmos discretos, es decir, rompe RSA y criptografía basada en el problema de logaritmo discreto (Curvas elípticas) en tiempo polinomial. Esto significará que todos seríamos vulnerables ante el individuo/organización que construya computadora cuántica (IBM, DWave, Google por ejemplo).

Por lo que, las curvas elípticas e hiperelípticas como las implementamos hoy en día, comienzan a ser obsoletas en criptografía, aunque siguen siendo muy útiles para computación en teoría de números algebraica que sirve para hacer nuevos algoritmos, es decir, no estoy diciendo que ya no sirvan las curvas, sino que la criptografía que usa el problema de logaritmo discreto con curvas o variedades abelianas está vulnerado ante la presencia de una computadora cuántica.

En este post les voy a mostrar un análogo de Diffie Hellman que no es vulnerable ante la presencia de un atacante con recursos cuánticos. El post es autocontenido, sólo requieres saber la teoría básica de curvas elípticas la cual la puedes leer en mi blog, recomiendo (aunque no es obligatorio ya que trato de hacerlo autocontenido leer estos artículos aquí en mi blog antes)

Teorema de Hasse en curvas elípticas
Álgebras de endomorfismos en curvas elípticas
j-Invariante en curvas elípticas

El método de Diffie Hellman que funciona bajo cómputo cuántico que describiremos aquí necesita conocimiento de morfismos entre curvas elípticas (isogenias u homomorfismos de los grupos abelianos inducidos por las curvas).
El contenido de este post es el siguiente:

* Background en isogenias y kérneles de éstas antes de irse a lo cuántico.
* Grado de una isogenia

* p-Torsión, j-invariante y características de curvas elípticas súpersingulares
* Construyendo Isogenias desde subgrupos de la curva usando fórmulas de Velú.
* Algoritmo explítico Diffie Hellman con isogenias entre curvas elípticas supersingulares.
* ¿Pero por qué nos enfocamos en súpersingulares?
* ¿En qué se basa la seguridad?, ¿qué tengo que romper si quiero hacer criptoanálisis?

Todo esto que escribo fue gracias a la emoción que me causaron las pláticas de Dimitar Jetchev (EPFL, Lausanne, Suiza), Frederik Vercauteren (KU Leuven, Bélgica), Benjamin Smith (INRIA, Francia) y René Schoof (Università di Roma, Italia) en el workshop "Mathematical structures for cryptography" el cual tuve la suerte de poder trabajar con grandes matemáticos del 22-26 de Agosto en Leiden, Países Bajos cuyo objetivo era juntar investigadores en matemáticas y criptografía para resolver problemas abiertos en esta teoría así como la basada en retículas para cómputo cuántico (Lattice Based Cryptography), todos los participantes aportamos algo interesante, y fue una de las más grandes experiencias profesionales que he tenido, aquí hay más información de la gente involucrada http://www.lorentzcenter.nl/lc/web/2016/834/participants.php3?wsid=834&venue=Oort


Background en isogenias y kérneles de éstas antes de irse a lo cuántico.

Sea $latex E$ una curva elíptica en forma de Weierstrass sobre un campo finito $latex \mathbb{F}_q$ , es decir $latex E:=\lbrace (x,y)\in \mathbb{F}_q\times\mathbb{F}_q : y^2 = x^3 + ax + b \rbrace$.

Como he explicado en posts anteriores, las curvas elípticas forman un grupo abeliano, es decir, $latex \langle E,\oplus\rangle$ es una estructura donde los puntos se pueden "sumar y restar" , es conmutativa, todos tienen inverso aditivo, es asociativa, cerrada y con elemento neutro $latex \infty$.

Hay fórmulas explícitas para calcular la suma de puntos como en el post anterior mencionado en el párrafo anterior, y también están muy bien explicadas en wikipedia, así que supondré que ya sabemos como funciona la adición elíptica que geométricamente la intuición es con la siguiente imagen:

Isogenias entre curvas 
(mapeos de curvas elípticas, homomorfismos de grupos abelianos inducidos)

Tenemos que si $latex \langle E_1, \oplus\rangle ,\langle E_2,\boxplus \rangle$ son dos curvas elípticas y existe un morfismo $latex \psi:E_1\to E_2$ que respeta la estructura de grupo de cada una, es decir $latex \psi(P\oplus Q)= \phi(P)\boxplus \phi(Q)$ y que mapea el $latex 0$ de una al $latex 0$ de la otra, entonces decimos que ambas son isógenas.

Ahora vamos a ver qué son esos ceros en la curva, ya que no es trivial desde el punto de vista afín.

Kérnel de isogenias

En curvas elípticas tenemos que una isogenia entre dos curvas se ve como $latex \psi(x,y) := (\frac{a_1(x)}{a_2(x)}, \frac{yb_1(x)}{b_2(x)} )$ donde más técnicamente es porque $latex \frac{a_1(x)}{a_2(x)}, \frac{yb_1(x)}{b_2(x)} \in \mathbb{F}_q(E_2)$ es decir son funciones bien definidas en los puntos de la curva en el codominio, son funciones de su campo de funciones (campo de fracciones de la gavilla de funciones del la curva vista como esquema).

Para entender el kérnel de un mapeo como el anterior, necesitamos ver la curva de manera proyectiva, ya que el 0 (cero) en $latex E_1$ y $latex E_2$ no es un punto afín.

Si $latex \psi:E_1\to E_2$ es una isogenia entre curvas elípticas, el kérnel está definido como:

$latex ker\psi := \lbrace P\in E_1 : \psi(P) = \infty_{E_2}\rbrace$

Es decir, todos los puntos que nos mandan al infinito.

Recuerden que las curvas son proyectivas, entonces lo que esto significa exactamente es que si la isogenia está definida por $latex (\frac{a_1(x)}{a_2(x)},y\frac{b_1(x)}{b_2(x)})$ entonces podemos proyectivizar estas ecuaciones con una nueva variable $latex z$ (cerradura proyectiva), los puntos que el mapeo manda al infinito veremos a continuación que son justamente donde no están definidas esas funciones racionales sin proyectivizar.

Informalmente pero no incorrectamente, definir la imagen de estos puntos "no definidos bajo $latex \phi$" como $latex \infty_{E_2}$ se hace, deshaciéndose de los denominadores en la isogenia y homogeneizando, eso será la isogenia vista en la cerradura proyectiva de la curva que es $latex zy^2 = x^3 + az^2x + bz^3$ .

Entonces tendremos que los puntos afines de la cerradura proyectiva de la curva están dados por los puntos $latex (x:y:1)$ , es decir, la imagen afín de $latex \psi$ es  $latex (\frac{a_1(x)}{a_2(x)}:y\frac{b_1(x)}{b_2(x)}:1)$ , por lo que entonces la ecuación proyectiva es: $latex (a_1(x)b_2(x):yb_1(x)a_2(x):a_2(x)b_2(x))$ , y todos los puntos $latex (x:y:1)$ donde no está definida la curva afín, justamente estarán bien definidos aquí proyectivamente y esos puntos, son los que tienen imagen al infinito , es decir, que tienen como imagen el punto $latex \infty := (0:1:0)$, y son los puntos en el $latex ker\psi$ incluyendo al $latex \infty_{E_1}$ ya que es requisito de una isogenia mapear infinitos.

Pueden ustedes demostrar de hecho que $latex ker\psi := \lbrace (x,y)\in E_1 : a_2(x)=0\rbrace$ con el hint de que $latex a_2^3 \mid b_2^2$ siempre, y así como que $latex b_2^2\mid f_1a_1^3$ donde $latex f_1$ es la ecuación que define a $latex E_1$ en $latex y^2 = x^3 + a_1x + b_1$, recuerden que esto lo demuestran en el campo de funciones de la curva, es decir tienen que tomar en cuenta la ecuación de la curva al momento de demostrar esto.

Teorema: Si dos curvas elípticas son isógenas sobre un campo finito, entonces tienen el mismo número de puntos.

Grado de una isogenia

Antes de demostrar el teorema, necesitamos entender qué es el grado de una isogenia.

Sea $latex \psi:E_1\to E_2$ una isogenia definida sobre un campo finito $latex \mathbb{F}_q$.

Decimos que el mapeo $latex \psi$ es separable si la extensión de los campos inducida por $latex \mathbb{\psi}$ es separable.

Es decir si $latex \mathbb{F}(E_1)/\psi^{*}\mathbb{F}_q(E_1)$ es separable, y su dimensión como espacio vectorial la usamos para definir:

$latex \text{grad}\psi := dim_{\mathbb{F}_q}(\mathbb{F}_q(E_1)/\psi^{*}\mathbb{F}_q(E_1))=[\mathbb{F}(E_1):\psi^{*}\mathbb{F}_q(E_1)]$

Si esta extensión de campos inducida por $latex \psi$ es separable, decimos que es $latex \psi$ es separable, y una propiedad de isogenias separables es que $latex \text{grad}\psi :=$#$latex ker\psi$.

Pero que no cunda el pánico, vamos a ver cómo encontrar este grado sin meternos en la teoría dura, esto sólo es para definir algo (grado) y luego ver que su cálculo se puede hacer sin tener que calcular bases de espacios vectoriales.

Es fácil demostrar que el grado de la extensión de campos se mide siempre de una manera inocente contando el número de elementos en la imagen inversa de cualquier punto (sin ramificación) en el codominio.

O sea si el grado de $latex \psi$ fuera 1, significa que los espacios vectoriales inducidos por $latex \psi$ son los mismos, por lo que la imagen inversa de cualquier punto tiene sólo 1 punto ya que en este caso $latex \psi$ sería un isomorfismo.

El grado mide qué tan "complejo" es $latex \psi$ , por lo que de hecho el grado de una isogenia está definido también por la cantidad de elementos en la imágen inversa de $latex \psi$ para un punto ordinario general, es decir de $latex \psi^{-1}(Q_{E_2})$ donde $latex Q_{E_2}\in E_2$ es un punto ordinario, es decir no presenta ramificación (Por ejemplo un punto $latex (x,y)$ cuya coordenada $latex x$ no sea raíz de $latex x^3 + ax + b$ , ya que estos puntos son de ramificación, pero no entraremos en eso por ahora).

Como $latex \psi$ es un homomorfismos, tenemos que #$latex \psi^{-1}(Q_{E_2}) =$#$latex ker\psi$, por lo que tenemos otra igualdad más.

De tarea ustedes entonces dicho lo anterior pueden probar que $latex \text{grad}\psi$ es fácilmente calculable ya que si $latex P\in E_1$ y $latex Q:=\psi(P)$ es un punto con coordenadas $latex (s,t)$ en $latex E_2$ entonces #$latex \psi^{-1}(Q)$ es exactamente el número de ceros diferentes del polinomio $latex a_1(x)-sa_2(x)$ pero como $latex \psi$ es separable entonces este polinomio no tendrá raíces repetidas, por lo que #$latex \text{grad}\psi = \text{Deg}(a_1(x)-sa_2(x))=$#$latex ker\psi$.

Demostración de teorema

Dicho todo esto, considera el mapeo $latex \phi_1\in End_{\mathbb{F}_q}(E_1)$ y $latex \phi_2\in End_{\mathbb{F}_q}(E_2)$ tal que si $latex (x_i,y_i) \in E_i$ entonces $latex \phi_i(x_i,y_i) = (x_i^q, y_i^q)$ .

Es decir son los endomorfismos de Frobenius de cada una de las curvas.

Recuerden que queremos demostrar que dos curvas $latex E_1,E_2$ isógenas sobre $latex \mathbb{F}_q$ tienen el mismo números de puntos, y tenemos que la isogenia es $latex \psi:E_1\to E_2$.

Es fácil ver que $latex \psi\circ \phi_1 = \phi_2\circ \psi$, ya que si $latex P:=(x_1,y_1)\in E_1$ y $latex (x_2,y_2):=\phi(P)$ entonces $latex \psi(\phi_1(P)) = \psi(x_1^q,y_1^q)$ y en el otro lado $latex \phi_2(\psi(P)) = \phi_2(x_2,y_2)=(x_2^q,y_2^q)$.

Es decir, en el párrafo anterior afirmo que  $latex (x_2^q,y_2^q) = \psi(x_1^q,y_1^q)$, ya que recuerden que $latex \psi$ está formada por funciones racionales en $latex x$ y en $latex y$, entonces es un ejercicio de álgebra básica demostrar que si $latex r(x)$ es un polinomio sobre un campo finito entonces $latex r^q(x)=r(x^q)$, es decir se cumple el sueño de todo niño de secundaria, que por ejemplo si $latex x+y\in \mathbb{F}_q(x,y)$ entonces $latex \phi(x+y)=(x+y)^q = x^q + y^q$.

Entonces con toda mi informalidad que me caracteriza, tenemos ya que $latex \psi\circ \phi_1 = \phi_2\circ \psi$

Por lo que como la operación $latex \circ$ de composición en $latex End_{\mathbb{F}_q}(E_i)$ es distributiva, podemos inferir que:

$latex \psi\circ (\mathbbm{1}_{E_1} - \phi_1) = (\mathbbm{1}_{E_2}- \phi_2)\circ \psi$   (*)

Tal que $latex \mathbbm{1}_{E_i}$ es el mapeo de identidad en $latex End_{\mathbb{F}_q}(E_i)$ .

Calculemos el grado de  (*) .

Sabemos que el $latex \text{grad}\psi_1\circ \psi_2 = \text{grad}\psi_1\cdot \text{grad}\psi_2$ , esto lo pueden demostrar usando mi demostración anterior de que el grado de una isogenia está directamente relacionado con el grado de un polinomio dado por el mapeo, y pues al componerlos, el grado incrementa multiplicativamente.

También tenemos que el grado de $latex \mathbbm{1}_{E_i}-\phi_i$, como es un mapeo separable, es el número de elementos en el kernel de $latex \mathbbm{1}_{E_i}-\phi_i$... Pregunta ¿quién está en el kernel de $latex \mathbbm{1}_{E_i}-\phi_i$?

Recordemos que el endomorfismo de Frobenius tiene una propiedad interesante, es decir, si tenemos que $latex \mathbb{F}_{p^n}$ es un campo finito, y definimos para todo $latex x\in \mathbb{F}_{p^n}$ el mapeo $latex \phi_m(x) := x^{p^m}$ entonces $latex \phi_m(x)=x$ sí y sólo sí $latex x\in \mathbb{F}_{q^m}$ por lo que $latex x\in \overline{\mathbb{F}_p}$  es $latex \mathbb{F}_{p^m}$-racional si $latex \phi_m(x)=x$ , es decir, donde el endomorfismo de Frobenius se comporta como la identidad, nos caracteriza a los puntos racionales.

Entonces el kernel de $latex \mathbbm{1}_{E_i}-\phi_i$ son los puntos $latex (x_i,y_i)\in E_i$ que son iguales ante Frobenius y ante la identidad... es decir, puntos racionales $latex \mathbb{F}_q$-racionales.

Con lo anterior tenemos que  $latex \text{grad} (\mathbbm{1}_{E_i}-\phi_i)=$#$latex E_i$ .
Con esto tenemos tenemos que el grado de (*) es:

$latex \text{grad}\psi\cdot$#$latex E_1 = \text{grad}\psi\cdot$#$latex E_2$ por lo que #$latex E_1=$#$latex E_2$. q.e.d. $latex \blacksquare$.

p-Torsión, j-invariante y características de curvas elípticas súpersingulares

Definición: $latex E/\mathbb{F}_{p^n}$ una curva elíptica, entonces definimos la n-torsión de la curva como:

$latex E[n] := \lbrace P\in E : nP=\infty \rbrace$

Es decir, los puntos que al sumarse $latex n$ veces, se anulan.

Definición: Sea $latex E/\mathbb{F}_{p^n}$ entonces decimos que $latex E$ es ordinaria si $latex E[p]\cong \mathbb{Z}/(p)$ y es supersingular si $latex E[p]\cong\lbrace\infty\rbrace$.

Es decir, si no tiene p-torsión más que la trivial, le llamamos supersingular.

La palabra "supersingular" no tiene nada que ver con "singular", ya que una curva es singular si tiene singularidades, pero una curva elíptica por definición no es singular, es decir, no tiene puntos raros (discriminante de la curva es distinto de cero), ni tampoco raices repetidas.

La palabra supersingular es porque realmente son excepcionales,  y de hecho una cosa interesante de estas curvas es que SIEMPRE están bien definidas sobre $latex \mathbb{F}_{p^2}$ para cualquier $latex p$ , es decir, al reducir una ecuación de una curva a $latex \mathbb{F}_{p^2}$ nunca presentará singularidades.

Ahora vamos a ver otra definición importante que justamente será usada por el protocolo Diffie-Hellman.

Definición: Definimos el j-invariante de una curva elíptica $latex E/k$ donde $latex k$ es cualquier campo de caracteristica mayor que 3 y la forma de Weierstrass de $latex E$ es $latex y^2=x^3 + ax+b$ lo definimos como:

$latex j(E):=1728 \frac{4a^3}{4a^3+27b^2}$

Esta función loquita es muy importante en análisis complejo, y se preguntarán de donde sale ese 1728. Primero necesitamos saber para qué es esto.

El j-invariante tiene la propiedad de que si dos curvas tienen el mismo j-invariante, es decir $latex j(E_1)=j(E_2)$ entonces tenemos que $latex E_1\cong E_2$ sobre su campo de definición $latex k$.

Noten que el denominador del j-invariante nunca es 0, ya que es justamente el discriminante de $latex x^3 + ax+b$ y este no es cero porque sino la curva tendría singularidades y por definición una curva elíptica no es singular.

Otro teorema importante es que para todo $latex j_0\in k$ existe una curva elíptica $latex E_{j_0}$ tal que $latex j(E_{j_0})$ por lo que automáticamente podemos inferir que sobre cualquier campo... el moduli de TODAS las curvas elípticas sobre cualquier campo finito o infinito... es unidimensional... es decir, todas las curvas elípticas forman una línea.

Otros teoremas importantes es que los endomorfismos extendidos a $latex \mathbb{Q}$ definido como $latex End_0(E):= End_k(E)\otimes_{k}\mathbb{Q}$ cuando $latex E$ es supersingular, forman una álgebra de cuaternios, es decir no es conmutativa.

En el caso ordinario donde $latex E$ no sea supersingular , tenemos que $latex End_0(E)$ siempre es una extensión cuadrática de $latex Q$ compleja, es decir $latex End_0(E)\cong \mathbb{Q}(\sqrt{d})$  con $latex d$ negativo y libre de cuadrados.

Corolario: Sea $latex E/\mathbb{F}_q$ una curva elíptica supersingular, entonces #$latexE(\mathbb{F}_q)=p+1$.


No lo haré, pero usen el teorema de Hasse, deduzcan que si la curva es supersingular, entonces la traza del endomorfismo de frobenius es 0, todo esto se puede demostrar con lo anterior.

Teorema: Sea $latex \psi:E_1\to E_2$ una isogenia tal que $latex E_1$ es súpersingular, entonces $latex E_2$ también es supersingular.

Lo mismo aplica para curvas ordinarias, es decir, los dos tipos de curvas, súpersingulares y ordinarias sólo "se llevan" entre sus respectivas categorías, esto es importante, porque el protocolo que describiré pronto asegura que todas las isogenias serán entre curvas súpersingulares.

Pero antes veamos cómo construir isogenias cuyo kernel sea el subgrupo del dominio de la isogenia, es decir, dado un $latex H_P\subset E$ un subgrupo de una curva elíptica sobre un campo finito, en este caso $latex H_P$ es el generado por $latex P$ , construiremos explícitamente $latex \psi_P:E\to E_P$ tal que $latex ker\psi_P=H_P$ y la ecuación explícita de $latex E_P$.

Construyendo Isogenias desde subgrupos de la curva usando fórmulas de Velú.

Recuerden que #$latex E(\mathbb{F}_q)=N$ es finito, ya que el campo de definición es finito.
Entonces por el teorema de lagrange, sabemos que la información de sus subgrupos está escondida en la factorización de $latex N$.

Sea $latex P\in E$, definimos el subgrupo $latex H_P\subsetneq E$ como:

$latex H_P:=\lbrace nP : n \in \mathbb{Z}\rbrace$

Este es el grupo de "todos los múltiplos de $latex P$:" en la curva, es trivial que es un subgrupo de $latex E$.

Vamos ahora a construir una isogenia asociada a $latex P\in E$ que denotamos por $latex \psi_P$ cuyo kernel sea $latex H_P$ hacia otra curva que denotaremos como $latex E_P$.

Es decir vamos a construir $latex \psi_P:E\to E_P$ tal que $latex ker\psi_P = H_P$
Todos sabemos que el kérnel de un morfismo de grupos es un subgrupo normal del grupo, así que esto no debe causarles conflicto.

La notación de las coordenadas para los puntos en $latex \langle E,\oplus\rangle$  será $latex P:=(x_P,y_P), Q:=(x_Q,y_Q), P\oplus Q:=(x_{P+Q},y_{P+Q})$.

Definición-Teorema-Vélu: Sea $latex \langle E/\mathbb{F}_q,\oplus\rangle$ una curva elíptica y $latex P_0\in E$, tal que $latex y^2 = x^3 + ax + b$ construyamos como vimos anteriormente el grupo generado por los "múltiplos de $latex P_0$" , $latex H_{P_0}$.

Entonces tenemos que para todo $latex P\notin H_{P_0}$:

$latex \psi_{P_0}:E\to E_{P_0}$
           $latex P\mapsto \Big( x_P+\displaystyle\sum_{Q\in H_{P_0}\setminus\lbrace\infty\rbrace}(x_{P+Q}-x_Q), y_P+\displaystyle\sum_{Q\in H_{P_0}\setminus\lbrace\infty\rbrace}(y_{P+Q}-y_Q)\Big)$

Y si $latex P\in H_{P_0}$ definimos $latex \psi_{P_0}(P)=\infty$.

Es fácil mostrar que $latex ker\psi_{P_0}:=H_{P_0}$ , de hecho, ústedes háganlo y verán como todo se reduce a hacer matemáticas lindas, no es tan difícil.

Pero bueno, esta función $latex \psi_{P_0}$ no está dada por la forma que mostrarmos al principio, es decir por la isogenia definida con los polinomios $latex \big( \frac{a_1(x)}{a_2(x)},y\frac{b_1(x)}{b_2(x)} \big)$.

Pero Dustim Moody y Daniel Shumow ya lo hicieron en la sección 2.3 de un paper, aquí dejo su páper , así que ya tenemos la isogenia explícita, y de hecho en ese mismo paper se describe la ecuación de la curva $latex E_{P_0}$ la cual es $latex y^2 = x^3 + (a-5v)x + (b-7w)$ donde $latex v,w$ son constantes que dependen de $latex H_{P_0}$ y son explícitamente calculables.

Ahora sí, el algoritmo

Algoritmo explícito Diffie Hellman con isogenias entre curvas elípticas supersingulares.

Considera una curva elíptica supersingular $latex E$ definida sobre $latex \mathbb{F}_{p^2}$  tal que $latex p=w_A^{e_A}\cdot w_B^{e_B}\cdot f \pm 1$, es decir es un número primo especial, donde $latex w_A,w_B$ son números primos chicos y $latex f$ es cualquier entero, así como $latex e_A,e_B$ los cuales se escogerán de tamaños parecidos y tal que $latex p$ cumpla el nivel de seguridad requerido en bits para este esquema, que está probado que es aproximadamente de 3000 bits (referencia aquí). Entonces con todo lo que dijimos en la sección de curvas súpersingulares es fácil inferir que el tamaño de la curva está dado por #$latex E(\mathbb{F}_{p^2})=(p\pm 1)^2$.

Sean A=Artemisa y B=Boris , dos personas que desean intercambiar una llave en un canal no seguro intervenido por un atacante con recursos cuánticos.

Entonces ellos harán lo siguiente:

Algoritmo SIDH (Supersingular Isogeny Diffie-Hellman)

Públicamente harán lo siguiente: 

Se ponen de acuerdo en los siguiente: $latex p=w_A^{e_A}\cdot \w_B^{e_B}\cdot f \pm 1,\langle E/\mathbb{F}_{p^2},\oplus\rangle,P_A,Q_A,P_B,Q_B\in E$ tal que $latex E$ es súpersingular.
donde intercambiar una curva $latex E/\mathbb{F}_{p^2}$ equivale a mandar $latex \lbrace a,b\rbrace$ tal que $latex y^2 = x^3 + ax+b$.

Tenemos que $latex P_A,Q_A$ y $latex P_B,Q_B$ fueron escogidos tal que tienen orden $latex w_A^{e_A}$ y $latex w_B^{e_B}$ respectivamente, lo cual es fácil por el número primo que construimos.

Vamos a denotar por nA, nB, el paso $latex n$ que tiene que hacer Artemisa o Boris respectivamente,.


1A: A genera dos números aleatorios $latex m_A,n_A$ < $latex w_A^{e_A}$
2A: A genera $latex R_A := m_A\cdot P_A \oplus n_A\cdot Q_A$ (secreto)
3A: A usa el punto $latex R_A$ para crear el subgrupo $latex H_{R_A}$ que funcionará como kernel del mapeo $latex \psi_{A}:E\to E_A$, por lo que ya tiene $latex R_A,\psi_{A},E_A$ donde los últimos dos son gracias a las fórmulas de Vélu mostradas en la sección anterior.
4A: A forma los puntos $latex \psi_{A}(P_B)$ y $latex \psi_{A}(Q_B)$ con su isogenia creada en el paso anterior.
5A: A le manda a B $latex \lbrace E_A,\psi_A(P_B),\psi_A(Q_B)\rbrace$
Pero NO le manda la isogenia, sino la imagen de los puntos bajo la isogenia secreta $latex \psi_A$

1B-4B: Ahora Boris hace los mismos primeros 4 que Artemisa, sólo intercambiamos las letras de los subscripts A por B

5B: B manda a A $latex \lbrace E_B,\psi_B(P_A),\psi_B(Q_A)\rbrace$
6A: A tiene $latex m_A,n_A,\psi_B(P_A),\psi_B(Q_A)$ y forma el punto $latex S_{BA}:=m_A\cdot\psi_B(P_A)\oplus n_A\cdot\psi_B(Q_A)$.
7A: A usa el punto para generar la isogenia $latex \psi_{BA}$ usando fórmula de Vélu, así como la imagen de la isogenia que será la nueva curva $latex E_{BA}$ que es isógena a $latex E$ gracias a $latex \psi_{BA}$.
8A. A calcula el j-invariante  de la curva $latex E_{BA}$ que será $latex \kappa:=j(E_{BA})$.
6B: Similarmente al paso 6A, Boris tiene $latex m_B,n_B,\psi_A(P_B),\psi_A(Q_B)$ por lo que forma el punto $latex S_{AB}:=m_B\cdot\psi_A(P_B)\oplus n_B\cdot\psi_A(Q_B)$.
7B: Boris usa el punto $latex S_{AB}$ para generar la isogenia con las fórmulas de Velú asociada al subgrupo generado por $latex S_{AB}$ , esta isogenia es $latex \psi_{AB}$ y genera también el codominio de esta isogenia que es la curva $latex E_{AB}$ que es isógena a $latex E$ gracias a $latex \psi_{AB}$.
8B: B calcula el j-invariante de la curva $latex E_{AB}$ que será $latex \kappa:=j(E_{AB})$.

Las curvas $latex E_{AB}$ y $latex E_{BA}$ son isomorfas, ustedes lo pueden demostrar si hacen todo el diagrama, por lo que el j-invariante será el mismo, y ya ambos pueden usar como password $latex  \text{Hash}(\kappa)$ o cualquier función en Kappa.

¿Pero por qué nos enfocamos en súpersingulares?

La verdad nunca usamos nada de las características supersingulares... Pero recuerden que el álgebra de endomorfismos de una curva elíptica supersingular NO es conmutativa, ya que es isomorfa a un álgebra de cuaternios.

Existe un ataque, que resuelve el problema "difícil" en el que está basado este protocolo en tiempo subexponencial cuántico. El algoritmo está descrito en este paper por Andrew M. Childs, David Jao y Vladimir Soukharev.  El cuál hace uso extenso de la CONMUTATIVIDAD del anillo de endomorfismos de la curva elíptica para resolver subexponencialmente el "Abelian Hidden Shift Problem" que es el nombre del problema que hace seguro al algoritmo descrito en la sección anterior.

Por lo que debemos enfocarnos a curvas cuyo anillo de endomorismos no sea conmutativo... es decir... súpersingulares.

¿En qué se basa la seguridad?, ¿qué tengo que romper si quiero hacer criptoanálisis a este algoritmo?

Lo que hay que romper es el "Abelian Hidden Shift Problem".  Algo así en español como "Problema oculto de desplazamiento oculto", ya que lo que estamos haciendo en el algoritmo anterior, es desplazar grupos, y adquireir nuevas curvas "desplazando" con puntos nuevos.

Este problema en general consta de lo siguiente.

-Sea $latex A$ un grupo abeliano finito.
-Sea $latex S$ un conjunto finito.
-Sea $latex f:A\to S$ y $latex g:A\to S$ dos funciones inyectivas.
-Existe una $latex b\in A$ tal que para todo $latex x\in A$ tenemos que $latex f(x)=g(xb)$
-El valor que un atacante quisiera saber es $latex b$.

Vamos a reformular esto en términos de curvas elípticas de manera básica.

-Tenemos dos curvas isógenas $latex E,\hat{E}$
-Decimos que $latex f_0(a)=a*E$ y $latex f_1(a)=a*\hat{E}$.
-Entonces $latex b*E=\hat{E}$
-También $latex f_1(a)=a*\hat{E}=a*b*E=f_0(ab)$

Resolver el Abelian Hidden Shift Problem en $latex f_0$ y $latex f_1$ es descubrir $latex b$.

Esto realmente significa calcular la acción en las curvas elípticas

Dicho esto, SIDH con curvas elípticas súpersingulares, la seguridad se obtiene es con llaves de 3000 bits para obtener seguridad cuántica exponencial de 128 bits, la cual es más que suficiente.

Esto es todo por hoy, ahora saben cómo implementar un algoritmo que tenga seguridad cuántica.

Espero les haya gustado.

Más información, pueden ver el paper original de Luca De Feo, David Jao y Jerome Plut.

Eduardo Ruíz Duarte (beck)
Twitter: @toorandom

Miércoles 19 de septiembre de 2018

Gunnar Wolf

Gunnar Wolf
Gunnar Wolf

Privacy and Anonymity Colloquium • Activity program announced!

It's only two weeks to the beginning of the privacy and anonymity colloquium we will be celebrating at the Engineering Faculty of my University. Of course, it's not by mere chance we are holding this colloquium starts just after the Tor Meeting, which will happen for the first time in Latin America (and in our city!)

So, even though changes are still prone to happen, I am happy to announce the activity program for the colloquium!

I know some people will ask, so — We don't have the infrastructure to commit to having a video feed from it. We will, though, record the presentations on video, and I have the committment to the university to produce a book from it within a year time. So, at some point in the future, I will be able to give you a full copy of the topics we will discuss!

But, if you are in Mexico City, no excuses: You shall come to the colloquium!

poster.pdf881.35 KB
poster_small.jpg81.22 KB

Lunes 17 de septiembre de 2018

Alex Callejas

Alex Callejas

Resolviendo el #SysArmyMx Challenge Part Deux

¿De qué sirve saber algo, si usted no comparte lo que sabe?
Rubén Blades

Después de 211 visitas al post y 46 descargas de la imagen KVM (Gracias a todos los que participaron!), les comparto la solución, con su debida explicación al #SysArmyMx Challenge:

  • Configuramos nuestra VM con la imagen del disco descargada y la arrancamos; tecleamos F2 o Esc para ver los mensajes de arranque (durante la carga de plymouth). Un par de segundos después, empezaremos a ver los errores en la carga del SO
  • Al terminar, parece mostrarnos el login correctamente, pero al tratar de acceder, nos muestra el mensaje de error que nos proporciona una pista de lo que sucede
  • Al tratar de montar la partición linux, el modo de rescate nos indica que no lo encuentra, por lo que procedemos a montarlo manualmente
  • Al ejecutar chroot sobre la partición de rescate montada, observamos claramente el error

    • Entonces, como podemos observar, el comportamiento al arranque se debía a que la shell (intérprete de comandos) con la que debía levantar el sistema (/bin/bash) no se encontraba disponible. Esto mismo se nos mostraba al inicio de la carga de la VM, cuando, después del intento de login, el sistema nos mandaba el mensaje de error:
--- root: no shell: No such file or directory

Uno de los conceptos principales y básicos como SysAdmin, y que nos ayuda a comprender mejor este comportamiento, es el arranque del sistema. Tradicionalmente, las versiones basadas en System V, realizaban el arranque siguiendo el flujo mostrado hasta que el kernel ejecuta el proceso init, con el que se inicializan todos los procesos del sistema:

Actualmente, los sistemas basados en Systemd, realizan el arranque de manera similar, pero el primer proceso que ejecuta el kernel es systemd, quién se encarga de arrancar todos los procesos y servicios de forma simultánea:

El intéprete de comandos (bash) es el medio que utiliza el kernel para continuar el flujo del arranque, por lo que, como lo mencionamos anteriormente, los mensajes de error relacionados con la carga de unit files de systemd, más el mensaje de error en el login nos daban el indicio de la falla, la cual comprobamos con el proceso de rescate.

  • Para solucionar esta falla, simplemente restauramos el archivo y validamos que podamos ejecutar chroot:
  • Con la partición montada y enjaulada, configuramos la contraseña de root:

  • Al reiniciar, conforme nos mando mensaje de error originalmente, el sistema realizará el re-etiquetado de SELinux:

  • Después de este proceso, el arranque es correcto y podemos hacer login en el sistema:

  • Con el sistema funcionando, podemos realizar la configuración que nos han solicitado:


# hostnamectl set-hostname host01.sysarmy.mx


Para actualizar el kernel a la versión solicitada, había que actualizar el SO; éste, es uno de los pasos más recomendados, pero a veces (debido a alguna aplicación hecha en casa o restricciones en las políticas de seguridad para la aplicación de patches) no se aplica. Lo mejor, conforme a las mejores prácticas, es hacerlo al menos dos veces por año en la medida de lo posible. Para esto ejecutamos:

# yum update


Para realizar la configuración de la red, conforme un post de hace algunos años, modificamos el archivo de configuración de la nic (/etc/sysconfig/network-scripts/ifcfg-eth0):



Esta parte del reto, tiene dos partes en la solución: la más obvia y sencilla (instalar el servidor web [apache]), y, si queremos hacerlo más pro: configurar el firewall del sistema, para que sólo permita conexiones por el puerto de servicio del servidor web:

* apache*

Para instalar el servidor web apache, simplemente se ejecuta:

# yum install httpd

Para posteriormente crear la página de inicio del servicio:

# echo "Hola Mundo" > /var/www/html/index.html

Habilitamos y arrancamos el servicio y validamos que la página de inicio sea visible:

# systemctl enable httpd; systemctl start httpd
# curl
Hola Mundo


Para instalar el firewall, se ejecuta:

# yum install firewalld

Después de habilitar y arrancar el servicio, configuramos los servicios y puertos de acceso que deseamos:

# systemctl enable firewalld; systemctl start firewalld
# firewall-cmd --permanent --add-port={22/tcp,80/tcp,443/tcp}
# firewall-cmd --permanent --add-service={http,https,ssh}
# systemctl restart firewalld.service

# firewall-cmd --list-ports
22/tcp 80/tcp 443/tcp

Y validamos nuevamente que la página de inicio sea visible:

# curl 
Hola Mundo

  • Al finalizar la configuración, reiniciamos el sistema y comprobamos que ésta perduren:


Además de la complejidad observada, la imagen KVM está configurada con el teclado en “Español Latinoamericano” lo cual, al conectarse por la consola, ocasionaba un pequeño inconveniente al teclear algunos comandos; se podía cambiar el teclado, pero no sentí que fuera un gran obstáculo 😉

Les comparto las evidencias de quienes terminaron el reto y mandaron su captura de pantalla:

Nuevamente, muchas gracias por participar, espero les haya gustado 🙂

P.D.: Que les pareció la lista de Blades en Spotify? 😉

Jueves 13 de septiembre de 2018

Gustavo Rubio

Gustavo Rubio
Ahí vamos

Romantizando a los personajes despreciables de Silicon Valley

Juro que es pura conincidencia que hoy, el día que Apple lanza su Keynote anual, escriba este artículo. En realidad Silicon Valley es más que

Miércoles 12 de septiembre de 2018

José Oviedo

José Oviedo

Visual Basic 6.0, Adodc MoveComplete ERROR

Al iniciar la compilación del código en VB6 me arroja el siguiente error:

Error de compilación, La declaración del procedimiento no coincide con la descripción del evento o el procedimiento que tiene el mismo nombre

Al parecer el problema es por la versión del ADO, falta actualizar el “service pack 6” para visual basic y se soluciona el problema, pero una solución rápida sería agregar el 20 al final del nombre del procedimiento, teniendo algo así.

Versión original, con el problema:

Private Sub Adodc1_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)

Versión corregida con el 20:

Private Sub Adodc1_MoveComplete20(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)

Viernes 24 de agosto de 2018

Alex Callejas

Alex Callejas

#SysArmyMx Challenge Part Deux

Tus probabilidades de éxito aumentan cada vez que lo intentas
John Nash (1928-2015)

Hace unos días, mientras recordábamos aquella certificación creada por el buen Sandino (Mendozaaaa!!) en el grupo de telegram de SysArmy (por cierto, ya se unieron a la conversación? t.me/Sysarmymx), decíamos que era un buen reto estar probando nuestras capacidades y conocimiento mediante desafios que nos ayudaran a mejorar los mismos.

Yo les comenté que cuando me toco hacer entrevistas y pruebas técnicas a algunos candidatos a un puesto, realice un examen sencillo, pero que pone a prueba los conocimientos básicos de cualquier SysAdmin Linux.

A los candidatos les proporcionaba la imagen de una VM, y el reto consistía en conseguir la siguiente configuración:

Host: testbox0x
root password: redrum
hostname: host.sysarmy.mx
kernel: 3.10.0-862.11.6.el7.x86_64
— IP: 192.168.122.[# testbox]0
— Netmask: /24
— Gateway:
— DNS:
webpage: “Hola Mundo”

Después de seleccionar un id para su VM (textbox0x) debían realizar la configuración solicitada.

Algunos se rindieron sin terminar, otro me descompuso mi KVM 🙁 , pero el día valió la pena cuando uno de los chicos entrevistados lo supero y me contó los detalles del reto (tú sabes quién eres 😉 ).

Si gustan realizarlo y probarse, les dejo el link a la imagen KVM de la VM aquí.

Déjenme en los comentarios sus dudas, sugerencias y el testimonio de que lo terminaron.

En un siguiente post pondré como se soluciona el desafío.

Espero les sirva… 🙂


Martes 21 de agosto de 2018

Alcance Libre: Próximanente migración de ALDOS 1.4 a GCC 7 y LibPNG 1.6.

Domingo 19 de agosto de 2018

Octavio Alvarez

Octavio Alvarez
Planeta Linux –

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


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 el servicio respeta el valor indicado por Accept-Language o, en cambio, 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 computacional de un juego de fechas en formato ISO 8601 coincide con su orden cronológico, aún si se especifican con todo y hora del día. 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, que hace referencia 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.

Domingo 12 de agosto de 2018

Deshabilitar la búsqueda de Bing en Windows 10

Si encuentro algo molesto es que Windows 10 está constantemente buscando sacarme de mi equipo para ir a Internet y hacer uso de sus servicios. Con esta simple modificación, cuando busquemos un archivo local luego de utilizar la Cortana no terminaremos en Bing si no encontramos el archivo deseado.

Creamos un archivo llamado Windows.reg y agregamos el siguiente código dentro:

Windows Registry Editor Version 5.00

Luego ejecutamos el archivo, nos pedirá acceso de administrador, aceptamos y listo. Ahora podremos realizar búsquedas de archivos sin escaparnos a Bing.

Viernes 10 de agosto de 2018

Megacable México – Solo malas experiencias

Desde el 20 de mayo, Megacable México ha funcionado de forma espantosa, tanto asi que solo hemos recibido cerca del 20% del servicio. De 20 MB contratados, la descarga promedio ronda en 200 kbps. Perdón Telmex, pensé que nada sería peor que vos.

Aquí un breve ejemplo:

Haciendo ping a barrahome.org [] con 32 bytes de datos:
Tiempo de espera agotado para esta solicitud.
Tiempo de espera agotado para esta solicitud.
Respuesta desde bytes=32 tiempo=73ms TTL=48
Respuesta desde bytes=32 tiempo=71ms TTL=48
Respuesta desde bytes=32 tiempo=76ms TTL=48
Tiempo de espera agotado para esta solicitud.
Respuesta desde bytes=32 tiempo=72ms TTL=48
Respuesta desde bytes=32 tiempo=71ms TTL=48
Tiempo de espera agotado para esta solicitud.
Tiempo de espera agotado para esta solicitud.
Tiempo de espera agotado para esta solicitud.
Respuesta desde bytes=32 tiempo=70ms TTL=48
Tiempo de espera agotado para esta solicitud.
Respuesta desde bytes=32 tiempo=72ms TTL=48
Respuesta desde bytes=32 tiempo=73ms TTL=48
Respuesta desde bytes=32 tiempo=73ms TTL=48
Tiempo de espera agotado para esta solicitud.
Respuesta desde bytes=32 tiempo=72ms TTL=48
Tiempo de espera agotado para esta solicitud.
Tiempo de espera agotado para esta solicitud.
Respuesta desde bytes=32 tiempo=71ms TTL=48
Respuesta desde bytes=32 tiempo=73ms TTL=48
Tiempo de espera agotado para esta solicitud.
Respuesta desde bytes=32 tiempo=71ms TTL=48
Tiempo de espera agotado para esta solicitud.
Tiempo de espera agotado para esta solicitud.
Respuesta desde bytes=32 tiempo=73ms TTL=48
Respuesta desde bytes=32 tiempo=73ms TTL=48
Respuesta desde bytes=32 tiempo=73ms TTL=48
Respuesta desde bytes=32 tiempo=72ms TTL=48
Respuesta desde bytes=32 tiempo=71ms TTL=48
Respuesta desde bytes=32 tiempo=70ms TTL=48
Respuesta desde bytes=32 tiempo=71ms TTL=48
Respuesta desde bytes=32 tiempo=72ms TTL=48
Respuesta desde bytes=32 tiempo=71ms TTL=48
Tiempo de espera agotado para esta solicitud.
Tiempo de espera agotado para esta solicitud.
Tiempo de espera agotado para esta solicitud.
Respuesta desde bytes=32 tiempo=73ms TTL=48
Respuesta desde bytes=32 tiempo=71ms TTL=48
Respuesta desde bytes=32 tiempo=74ms TTL=48
Respuesta desde bytes=32 tiempo=73ms TTL=48
Tiempo de espera agotado para esta solicitud.
Tiempo de espera agotado para esta solicitud.
Respuesta desde bytes=32 tiempo=79ms TTL=48
Respuesta desde bytes=32 tiempo=72ms TTL=48
Tiempo de espera agotado para esta solicitud.
Respuesta desde bytes=32 tiempo=72ms TTL=48
Tiempo de espera agotado para esta solicitud.
Respuesta desde bytes=32 tiempo=71ms TTL=48
Respuesta desde bytes=32 tiempo=76ms TTL=48
Respuesta desde bytes=32 tiempo=71ms TTL=48
Respuesta desde bytes=32 tiempo=72ms TTL=48
Respuesta desde bytes=32 tiempo=71ms TTL=48
Respuesta desde bytes=32 tiempo=72ms TTL=48
Tiempo de espera agotado para esta solicitud.
Respuesta desde bytes=32 tiempo=75ms TTL=48
Respuesta desde bytes=32 tiempo=72ms TTL=48
Respuesta desde bytes=32 tiempo=71ms TTL=48
Respuesta desde bytes=32 tiempo=73ms TTL=48
Respuesta desde bytes=32 tiempo=72ms TTL=48
Respuesta desde bytes=32 tiempo=70ms TTL=48
Tiempo de espera agotado para esta solicitud.
Tiempo de espera agotado para esta solicitud.
Respuesta desde bytes=32 tiempo=71ms TTL=48
Respuesta desde bytes=32 tiempo=72ms TTL=48
Respuesta desde bytes=32 tiempo=73ms TTL=48
Respuesta desde bytes=32 tiempo=73ms TTL=48
Respuesta desde bytes=32 tiempo=77ms TTL=48
Respuesta desde bytes=32 tiempo=72ms TTL=48
Tiempo de espera agotado para esta solicitud.
Respuesta desde bytes=32 tiempo=71ms TTL=48
Respuesta desde bytes=32 tiempo=69ms TTL=48
Respuesta desde bytes=32 tiempo=69ms TTL=48
Respuesta desde bytes=32 tiempo=74ms TTL=48
Respuesta desde bytes=32 tiempo=77ms TTL=48
Respuesta desde bytes=32 tiempo=76ms TTL=48
Tiempo de espera agotado para esta solicitud.
Respuesta desde bytes=32 tiempo=73ms TTL=48
Tiempo de espera agotado para esta solicitud.
Respuesta desde bytes=32 tiempo=72ms TTL=48
Tiempo de espera agotado para esta solicitud.
Respuesta desde bytes=32 tiempo=73ms TTL=48
Respuesta desde bytes=32 tiempo=71ms TTL=48
Respuesta desde bytes=32 tiempo=72ms TTL=48
Tiempo de espera agotado para esta solicitud.
Respuesta desde bytes=32 tiempo=72ms TTL=48
Respuesta desde bytes=32 tiempo=73ms TTL=48
Respuesta desde bytes=32 tiempo=72ms TTL=48
Respuesta desde bytes=32 tiempo=69ms TTL=48
Tiempo de espera agotado para esta solicitud.
Respuesta desde bytes=32 tiempo=72ms TTL=48
Respuesta desde bytes=32 tiempo=71ms TTL=48
Respuesta desde bytes=32 tiempo=72ms TTL=48
Tiempo de espera agotado para esta solicitud.
Respuesta desde bytes=32 tiempo=73ms TTL=48
Respuesta desde bytes=32 tiempo=75ms TTL=48
Tiempo de espera agotado para esta solicitud.
Respuesta desde bytes=32 tiempo=72ms TTL=48
Respuesta desde bytes=32 tiempo=71ms TTL=48

Estad¡sticas de ping para
Paquetes: enviados = 100, recibidos = 69, perdidos = 31
(31% perdidos),
Tiempos aproximados de ida y vuelta en milisegundos:
M¡nimo = 69ms, M ximo = 79ms, Media = 72ms

Actualización 06/08/2018 – 16:50 PM

deepin-15.6-amd64.iso.2 0%[---------------] 20.20M 461KB/s eta 75m 27s

La velocidad sigue siendo la misma pero ellos informan mediante DM en Twitter lo siguiente:

Hola Alberto, buenas tardes, actualmente hemos revisado el servicio, no encontramos problema alguno el día de hoy, anteriormente se tenía una falla en la zona la cual quedó solucionada, ¿continúa con fallas en el servicio?

Esto como veran esta muy por fuera de la realidad.

El mes pasado (Julio) solo me dieron 4 dias de servicio estable. Tienen 9 llamadas mías. Cada llamada te dicen que se soluciona de 24 a 48 o 72 hs, dependiendo de quien te atienda. Tomando en cuenta el máximo que ellos te piden son 27 días sin servicio.

Actualización 09/08/2018 – 22:23 PM


Ambos resultados muestran la pésima conectividad recibida. Segun ellos en twitter el servicio funciona bien. Mientras tanto buscan cobrar por la falta de servicio.

Jueves 02 de agosto de 2018

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.


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

Lunes 23 de julio de 2018

Alex Callejas

Alex Callejas

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!! 🙂

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.


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 !!!!!


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.


Jueves 28 de junio de 2018

Héctor Daniel Cortés

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

¡De panzazo!

México pasa a octavos de final... ¡De panzazo!

Si bien es cierto hay que reconocer que, después de los cachirules, siempre se ha superado la ronda de grupos. Con esta edición, 7 veces en forma consecutivas.

A continuación las estadísticas del tricolor al terminar la ronda de grupos desde Italia 1990:

Año Lugar JJ JG JE JP GF GC Dif Pts
Italia 1990 Descalificado * * * * *
USA 1994 [1] 3 1 1 1 3 3 0 4
Francia 1998 [2] 3 1 2 0 7 5 2 5
Corea/Japón 2002 [1] 3 2 1 0 4 2 2 7
Alemania 2006 [2] 3 1 1 1 4 3 1 4
Sudáfrica 2010 [2] 3 1 1 1 3 2 1 4
Brasil 2014 [2] 3 2 1 0 4 1 3 7
Rusia 2018 [2] 3 2 0 1 3 4 -1 6

Hasta el momento estamos presenciando la tercera mejor actuación de #MEX 🇲🇽 en el Mundial, siendo la mejor en Brasil 2014, seguida por Corea/Japón 2002.

Sólo hay una manera de mejorar la presente actuación: El Lunes 2 de Julio, en octavos de final, frente a Brasil. México puede perder el Lunes, pero el Domingo ¡no!

Viernes 22 de junio de 2018

Emerson Posadas

Emerson Posadas
toxickore BLOG

Vintage Computing Festival Berlin (VCFB)


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)

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 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.

perengano@elrond:~$ ssh vpsmikel.ds
Last login: Tue Apr 17 03:08:56 2018 from
[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: will be installed
--&gt; Processing Dependency: python-backports for package: python-backports-ssl_match_hostname-
---&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
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 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- | 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- 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- 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

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:
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

[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:

[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:

[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.

[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
(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

You should test your configuration at:

- Congratulations! Your certificate and chain have been saved at:
Your key file has been saved at:
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.

[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.

[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:

[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:

. . .
# SSLProtocol all -SSLv2
. . .
. . .

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

# Begin copied text
# from https://cipherli.st/
# and https://raymii.org/s/tutorials/Strong_SSL_Security_On_Apache2.html

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:

[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:

[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:

You should test your configuration at:
[cc lang="bash"]
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.


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:

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.. |
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:

ssh-copy-id user@serverip

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

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 '
and check to make sure that only the key(s) you wanted were added.


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

perengano@elrond:~$ ssh perengano@vpsmikel.ds
perengano@vpsmikel.ds's password:
Last login: Mon Apr 10 19:22:07 2018 from
[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.

[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 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:

[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

# 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:

[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:

perengano@elrond:~$ ssh vpsmikel.ds
Last login: Mon Apr 16 21:52:28 2018 from
[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:

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:

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:

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

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

FilezillaFilezilla warningFilezilla connected

Y eso sería todo.



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


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


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.


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:


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


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:

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.

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:

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

Debe contener lo siguiente:

[Desktop Entry]
Name=Firefox Quantum
Comment=Web Browser
GenericName=Web Browser
X-GNOME-FullName=Firefox Quantum Web Browser
Exec=/opt/firefox/firefox %u

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

Le damos permiso de ejecución al acceso directo:

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

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

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:

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

Y volvemos a descomprimir:

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 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.


Itzcoalt Alvarez Moreno

Itzcoalt Alvarez Moreno
Itzcoalt (itz) Álvarez



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

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.



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.



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.


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: DHCP server gateway: subnet: 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: 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,,,,1h






dhcp-option=6,, server=

Broadcast Address


NTP Server

dhcp-option=42, pxe-prompt=“Press F8 for menu.”, 30 pxe-service=x86PC, “PXEBOOT from server:”, 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:


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:


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.

Martes 13 de marzo de 2018

Héctor Daniel Cortés

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

Verificando los arreglos de discos

Aplicar la siguiente orden de vez en cuando:

for f in $(awk '/^md/ {print $1}' /proc/mdstat | shuf)
do echo check > /sys/block/$f/md/sync_action

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
  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  

Sábado 03 de marzo de 2018

Conectarse remotamente usando llaves publicas y privadas




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



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.         |

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

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


~$ ssh xanatos@mysqlvm001.bmejiaparedes.mx
The authenticity of host 'mysqlvm001.bmejiaparedes.mx (' 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,' (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:~$ 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:~$ 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 - 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

# /etc/systemd/system/updatedb.timer.d/updatedb.timer.conf


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

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 - 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.


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
  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

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.


Miércoles 22 de noviembre de 2017

Mario Tello

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


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

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