DEBIAN PRO

DEBIAN PRO
DEBIAN

lunes, 18 de diciembre de 2017

SQL Server performance y cache.



Optimización de SQL Server mediante cache en SQL.

Hace unas semanas tuve que implementar un proceso de optimización para SQL Server.

El problema inicial es una aplicación que solicita datos a un motor SQL Server, produce un query que demora unos 12 segundos para obtener los datos a enviar al cliente, ese query se ejecuta durante todo el dia, todas las veces que lo pida un cliente, pero desde "negocios" acordaron actualizar el proceso cada 8 horas. Existe un estimado de 5000 usuarios activos pidiendo sus datos. La medida del resultado del query es de unos 300 kb.

También existe otro proceso similar donde se definió una actualización cada hora.
Hay miles de usuarios pidiendo decenas de veces los mismos datos cada NN segundos.

Aunque 5000 usuarios no es un número muy grande, miles de sus peticiones durante todo el dia tiran al servidor SQL, el consumo de CPU es muy alto, aumenta la demora para resolver cada petición (de 12 a 40 segundos) hasta que entra en un espiral del que no puede salir, la cantidad de peticiones comienza a ser mayor que la cantidad que puede resolver.

Como muchas veces pasa, el aplicativo tiene muchos años, el volúmen de datos aumentó mucho, diferentes razones hacen que los 5000 clientes hagan varias peticiones (de 2x a 5x en algunos casos), dependiendo de cuantos equipos usan durante el dia, usan mas de un equipo (PCs, teléfonos, tables...) al final todo implica miles de peticiones cada minuto.

Luego de varias pruebas encontramos que existe un máximo de 10 peticiones que se pueden realizar al mismo tiempo y que el motor SQL puede resolver, si se aumenta ese valor comienzan a aumentar los tiempos de respuesta de cada una, si continúan o aumentan las peticiones ya no hay solución.

Es un aplicativo crítico, visible desde internet, muy usado todo el dia y con datos que deben ser actualizados cada hora ó cada ocho horas.

Luego de darle unas cuantas vueltas y evaluar varias alternativas, lo mas rápido y simple era implementar un cache del lado del motor SQL. Si, conocemos Redis y otras soluciones de cache, pero las otras soluciones requerían muchos mas cambios en distintos componentes, el "cache de SQL" es un punto único a cambiar. (un SP.)

La solución requería unas cuantas horas de programación de parte de un DBA experto, pruebas y salir al "live" rápidamente.


SOLUCION IMPLEMENTADA

Crear una tabla caché para cada proceso (2 tablas independientes), que contiene unos 25 campos (que son los que se envían desde el motor SQL al Aplicativo), ademas de tres campos adicionales, una fecha/hora (timestamp), un campo "id_usuario" y un campo ID_PK (PK, incremental).

En los 25 campos se guardaría los registros procesados (entre 100 y 500) que son los datos pedidos por los usuarios, en el campo fecha guardamos un timestamp del momento del cálculo, el campo ID_USUARIO contendría el ID del usuario que hizo la petición y el IDPK incremental sirve para que queden almacenados en el mismo órden en que fueron generados.

Los datos deben ser únicos, agrupados y ordenados, estas condiciones son las que demoran el query original.

Luego creamos un índice para que la lectura de esos registros para cada usuario sera la mas rápida posible.

El campo ID_USUARIO tiene datos redundantes pero me permitirá simplificar los procesos y tiempos. Se podría usar otra tabla normalizada, pero por razones de optimización lo descartamos.

Desde el APP se invocaba a un SP (Stored Procedure) pasando un identificador de usuario. El SP devolvía el join/where/group/order de unas 30 tablas en formato de 25 campos por 100 a 500 registros. (los dos SPs eran similares aunque el contenido era distinto)

Las tablas caché miden actualmente unos 2gb cada una, pero resuelven el problema de las NN peticiones repetidas, limitando el reproceso a una/ocho horas.

El nuevo SP incluye estas partes:
* El campo pasado como parámetro se usa para buscar en la tabla "cache" si tenemos datos para ese usuario, obtiene el primer registro y obtiene la fecha de la última grabación.
* Si no había datos, tendremos que generarlos.
* Si había datos pero había pasado el tiempo de "Caché válido", tendremos que generarlo.
* En caso contrario enviamos los registros que tenemos en nuestra tabla caché.
(ese proceso envía los datos en 1 segundo, pasando de 12-30 segs a solo 1)

* El SP entonces calcula los datos actualizados (demora entre 12 y 30 segundos).
* Se los envía al usuario.
* Borra los registros de la tabla cache para ese usuario.
* Luego los guarda en el cache (agregando timestamp, IDUsuario y el automático del IDPK)


SP Simplificado.

CREATE PROCEDURE proceso1
@user_id int -- parametro de entrada (ID)
begin

.......

-- @CUANDO es ahora
-- cuando es el campo de generación del cache.

SET @ACEPTO = ISNULL((
-- cuantos minutos pasaron desde la ultima peticion
SELECT TOP 1 ABS(DATEDIFF(minute, cuando, @CUANDO)) FROM CACHE WHERE user_id = @user_id
),0)

SET @ACEPTO2 = ISNULL((
-- en caso de tener cache cual fue la fecha de generacion
SELECT TOP 1 FECHAFIN FROM CACHE WHERE user_id = @user_id
),'2017-01-01')

-- solución para renovar el cache luego de 60 minutos.
-- si pasaron menos de 60 minutos,
-- mas de CERO, es decir "Tengo cache"
-- y los datos guardados corresponden a hoy
IF ( @Acepto > 0 AND @Acepto < 60 and @Acepto2 = @DiaFinD )
begin
-- el cache todavía es válido, lo envío
select * from CACHE WHERE user_id = @user_id;
END
ELSE
begin
-- aqui reprocesar y guardar en cache
-- muchos selects, se guarda el resultado en una tabla temporal @1
create table @1 ()
insert into @1 select * from xxxxxxx

-- borro datos del cache para ese usuario
DELETE FROM CACHE WHERE user_id = @user_id

-- meto en el cache los datos nuevos para ese usuario
INSERT INTO CACHE
SELECT *, @user_id, CONVERT(date, @diaFinD), @cuando FROM @t1

SELECT * FROM @t1
END


MariaDB versiones.


Un link a un post sobre Motores MySQL y MariaDB montados sobre Docker.

https://dockertips.com/MySQL_ultimas

Tiempos y Performance MariaDB


Un post con muchos detalles de pruebas realizadas usando MariaDB.

https://www.linkedin.com/pulse/problemas-performance-y-mediciones-en-mariadb-102-cialdella-c-/?published=t

sábado, 16 de diciembre de 2017

Problemas, Performance y Mediciones en MariaDB 10.2.

Durante esta semana tuve que trabajar en otro problema de optimización de un proceso basado en "datos".


Cuando se migran servidores, se actualizan sistemas operativos, se instalan nuevos motores de bases de datos, siempre hay cambios y a veces no son los esperados. Es decir, cambiar para peor.


En este caso, el problema es con un servidor MySQL y distintos motores de datos (InnoDB y MyISAM), aunque todo este proceso puede ser aplicable a otros motores, este post es el detalle de lo que detecté, verifiqué y algunas soluciones.



Ante un problema, recomiendo auditar todas las partes, virtualización, S.O., motor de base de datos, estructuras internas, configuraciones, redes, etc. Cada uno de los componentes debe ser verificado para aislarlo del problema central, como en una gran función completa multivariable, cada una de las variables debe ser una constante para que al final obtenamos la ecuación simplificada.


Debemos definir lo que queremos verificar, planificar los cambios uno a uno, medir científicamente y pensar todas las opciones posibles, usar pensamiento lateral, leer mucho en internet, comparar con otras situaciones, preparar el lote de pruebas y documentar todo.


Todo debe acabar siendo un gráfico simple o unas pocas líneas explicativas con las conclusiones. También debemos incluir alternativas de mejoras y/o otros caminos a seguir. El proceso de análisis debe ser "reproducible", proveer "datos numéricos" y usar una metodología científica.


Entorno Inicial y problema reportado.


* Servidor Viejo con Linux 32 bits, 4 gb ram, Percona Server 5.5.29, dos tablas MyISAM con un join que guarda datos en una nueva tabla MyISAM.


* Servidor Nuevo con Linux 64 bits, 4 gb ram, MariaDB 10.2, 2 tablas InnoDB con un join y el destino es una tabla InnoDB.


* Los servidores son virtuales y están ubicados en un datacenter.


* El proceso es leer dos tablas de una base de datos y guardar registros en otra tabla de otra base de datos. (Todas en el mismo servidor MySQL)


* Los Usuarios reportan que ese proceso demora "mucho mas" en el servidor nuevo que en el viejo.





Objetivo del trabajo.


* Identificar en que se consume el tiempo del proceso, tratar de reducir los tiempos y entender porque los cambios fueron a peor.


* Definir un proceso de medición para procesos OLTP, el servidor optimizado debe tener buenos tiempos en procesos Batch y OLTP.


* Presentar los resultados fácilmente y ver alternativas.




Procesos de comparación.


* Creamos un proceso simple, paso a paso para las mediciones:


+ Reiniciar el Motor MariaDB para comenzar con un entorno limpio.

+ Crear tablas con distintas opciones.

+ Realizar el proceso de carga (leer 2 tablas y grabar 1)

+ Tomar tiempo del proceso.

+ Cambiar opciones de configuración del motor.

+ Comenzar nuevamente desde el principio.



* Usaremos 1M de registros en una de las tablas de lectura. 1.4 gb. 11 campos de lectura.

* También 300.000 registros para la segunda tabla de lectura. 400 mb. 1 campos de lectura.

* La tabla generada será de 904.000 registros con 12 campos almacenados. (1 de la 2da tabla y 11 de la primera tabla)



Opciones evaluadas :

+ Usar una tabla InnoDB con todos los índices existentes del modelo real.

+ Usar una tabla InnoDB sin índices.

+ Usar una tabla MyISAM con todos los índices.

+ Usar una tabla MyISAM sin índices.

+ Mover las tablas de lectura y de escritura a una nueva base de datos. (las 3 en una misma base de datos)

+ Cambiar el CHAR_SET para verificar si la degradación del proceso es por usar UTF8.

+ Probar guardar los datos en una tabla Comprimida.

+ Crear una tabla destino en memoria para evitar grabaciones en disco (solo habrá lecturas) y guardará el resultado en RAM.

+ Medir velocidad del disco de datos (comando dd) para ver si es suficientemente rápido.

+ Cambiar el proceso para que lea únicamente de una tabla y grabe en una. (resultado incompleto pero quitar la variable del join)

+ Crear un procedimiento que guarde datos en la tabla destino (proceso de grabación unicamente, sin lecturas)

+ Modificar el tipo de datos de campos de la tabla destino.


Para evitar generar degradación en el servidor viejo productivo, usé únicamente el servidor nuevo de TEST.

Lo aislé de todo otro proceso, paré los demás servicios, controlé que no haya acceso de personas o procesos y verifiqué un reinicio del motor para que en cada prueba comencemos desde cero.



La comparativa se realizó usando un servidor de TEST aislado, sin utilizar recursos externos, corriendo los procesos localmente en una sesión BASH, reiniciando el srv MariaDB 10.2 antes de cada parte, midiendo los procesos por las propias herramientas del motor, repitiendo cada proceso 3 veces y almacenando el promedio.



Luego de 3 dias de trabajo constantes (aunque continuaré), las conclusiones obtenidas son las siguiente:


* Usar las tres tablas MyISAM SIN todos los índices creados, requiere 3.53 segundos de proceso.

* Usar las tres tablas MyISAM CON todos los índices creados, requiere 17.1 segundos.

* Usar las tres tablas InnoDB SIN todos los índices creados, requiere 21 segundos.

* Las tres table InnoDB CON los índices, requiere 49 segundos.

* Usar tablas InnoDB consumo 2.86x veces el tiempo comparado con MyISAM.

* Realicé pruebas con 10K, 100K y 1M de registros, con MyISAM el crecimiento es proporcional.

* En el caso de InnoDB, el crecimiento es exponencial, mas registros mucho mayor es el tiempo necesario.

* Convertir la tabla de MyISAM a InnoDB demora 54.35 segundos y acaba midiendo 478 mb

* Convertirla de InnoDB a MyISAM demora 16.9 segundos y acaba midiendo 144mb+81mb (D+I)

* Comparando el proceso de carga con MyISAM y CON/SIN índices, CON necesita 4.83x mas que SIN.

* Comparando InnoDB, CON necesita 6.54x mas que SIN.

* Crear una base de datos nueva y crear dentro las 2 tablas orígenes y la de destino, necesitaba el mismo tiempo que 2 tablas en una base y el destino en otra base de datos.


* Evalué hacer la carga en una tabla InnoDB SIN índices y crearlos luego, pero el tiempo ganado (49-21=28 segs) se volvía a perder creando los índices (50.58 segs), mientras que insertar los registros en la tabla CON los índices creados demoraba 49 segs, cargar los registros en una tabla SIN índices y luego reindexar demoraba 21 + 50.58 secs, en total 71.58 segs.


* El aumento de tiempos en InnoDB sobre MyISAM, era proporcional a la medida de las tablas en disco. Eso quiere decir que en ambos motores el tiempo se consumía guardando los datos al disco a una velocidad aproximada.

En InnoDB los ficheros medían 3.3x mas que MyISAM, y el tiempo era 2.86x mas.


* Almacenar la tabla en RAM requería 53 segundos.


* Almacenar los registros en una tabla con "Row_Compress" (comprimida) requería 97 segundos.


* El tiempo de leer todos los registros del join era de 19 segundos, el resto del tiempo era usado para guardarlos en la tabla destino.


* Pasar el tipo de SET de caracteres a ASCII necesitó 53 segundos.


* Si leía los registros de una sola tabla (sin el JOIN) requería 45 segundos.


* Usar "LOCK TABLES" requería 51 segundos.


* Crear un SP para guardar 1M de registros en la tabla destino (sin leer nada de disco) requería 50 segundos.


* Si la tabla tenia dos cambios como "INT" necesitaba 50 segundos, no cambiaba mucho el tiempo total.


* Cambiar los parámetros del disco en el servidor virtual Línux, permitió pasar de 58MB/s a 155MB/s, mientras que mi equipo portátil con un disco SSD me da 287MB/s.


La configuración del motor MariaDB 10.2 que me dió mejores resultados es la siguiente, aunque seguiré haciendo pruebas :


[mysqld]

slow_query_log=0

innodb_file_per_table=1

innodb_flush_method=O_DIRECT

innodb_log_file_size=1G

innodb_buffer_pool_size=3500M

thread_cache_size=16

skip-name-resolve=1

tmp_table_size=128M

max_allowed_packet=64M

performance_schema=0

innodb_file_format=barracuda

innodb_strict_mode=1

innodb_flush_log_at_trx_commit=2

transaction-isolation=READ-COMMITTED

sql-mode=''



Mientras que InnoDB es un motor pensado para transacciones con propiedades ACID, con commit/rollback, consistencia y bloqueo parcial.

MyISAM sigue siendo un motor simple, con bloqueos completos de objetos, atomicidad en las transacciones pero con una gran velocidad.


Usar InnoDB para procesos batch (almacenar 1M de registros) requiere 2.86x mas tiempo con usando MyISAM.

lunes, 27 de noviembre de 2017

lunes, 23 de octubre de 2017

Mysql/MariaDB QPS


Un muy buen post ( y blog) sobre los límites de un servidor corriendo MySQL o sus primos, el nro de QPS (Querys per sec.) y como tantas veces vemos, un solo motor puede hacer muchisimo sin necesidad de pasar a otras soluciones de réplicas, sharding, master-master.... Simplemente implementado el motor correctamente y optimizando el APP.

http://dimitrik.free.fr/blog/

SSH problema y hack


Para todos los que usen SSH (deberian ser todos!!!!)
este link los ayudará a verificar un problema de seguridad en SSH.

https://github.com/crocs-muni/roca

No tiene que ver con los problemas de WPA / WPA2 (WIFI) sino con los sistemas de claves pública/privadas.

miércoles, 18 de octubre de 2017

Docker y Persistencia


Un post sobre persistencia en Docker, vale la pena leerlo.

https://thenewstack.io/methods-dealing-container-storage/

OpenCommunities


Para el próximo Sábado reunión de "Open Communities"

https://www.eventbrite.es/e/entradas-open-communities-summit-2017-38651010212?utm_source=eb_email&utm_medium=email&utm_campaign=order_confirmation_email&utm_term=eventname&ref=eemailordconf

Registro gratuito. Ahí nos veremos.

Docker run exec


Un muy buen post sobre Docker y las maneras de arrancar procesos en Contenedores.

https://chankongching.wordpress.com/2017/03/17/docker-what-is-the-different-between-run-and-exec/

Here are some command ref:

To use binaries in a docker images:
docker run #{image} "COMMAND to be Ran"

To use binaries in a docker images continuously(setting or configs need to be inherited):
docker run #{image} --name #{container_name}

To enter a docker images and run command interactively:
docker run -it #{image}

To start a docker in background(as daemon)with process up and running that defined in Dockerfile:
docker run -d --name #{container_name} #{image}



Agrego mis recetas recolectadas (que suelo tener a mano)


https://github.com/wsargent/docker-cheat-sheet
docker pull alpine
docker images
docker inspect alpine

docker create - creates a container but does not start it.
docker rename - allows the container to be renamed.
docker run - creates and starts a container in one operation.
docker rm - deletes a container.
docker update - updates a container's resource limits.

docker start - starts a container so it is running.
docker stop - stops a running container.
docker restart - stops and starts a container.
docker pause - pauses a running container, "freezing" it in place.
docker unpause - will unpause a running container.
docker wait - blocks until running container stops.
docker kill - sends a SIGKILL to a running container.
docker attach - will connect to a running container.

docker images shows all images.
docker import creates an image from a tarball.
docker build creates image from Dockerfile.
docker commit creates image from a container, pausing it temporarily if it is running.
docker rmi removes an image.
docker load loads an image from a tar archive as STDIN, including images and tags (as of 0.7).
docker save saves an image to a tar archive stream to STDOUT with all parent layers, tags & versions (as of 0.7).

docker container stats
docker stats --all

docker ps -a

docker rm image_name delete image
docker rmi $(docker images -q) delete all images

docker container rename nervous_meitner testing
docker exec -it testing /bin/sh

docker ps - show running container
docker inspect - get info from container
docker events - evetns from con
docker port
docker top
docker stats


docker build use a file to create a server ( Dockerfile )
docker pull image (download a image file)
docker ps -l -q -- last run container
docker run -d alpine /bin/sh .c "sleep 20"
docker stop "container"
docker start "container"
docker restart "container"
docker rm `container`
docker cp `container`:/etc/passwd . (copy file to container)




docker build -t wangxian/alpine-mysql .

docker run -it --rm -v $(pwd):/app -p 3306:3306 wangxian/alpine-mysql
(docker MariaDB 10.1.19)
mysql -u root -p -h 172.17.0.1 (111111)

# RUN ALPINE DOCKET SERVER
docker run -it --rm -v $(pwd):/app -p 3306:3306 db933b99cf44

docker run -it --name mysql -p 3306:3306 -v $(pwd):/app -e MYSQL_DATABASE=admin -e MYSQL_USER=tony -e MYSQL_PASSWORD=dpa\*12d -e MYSQL_ROOT_PASSWORD=111111 wangxian/alpine-mysql



docker run -it ubuntu

martes, 17 de octubre de 2017

U2F Key


Compré un hard key para validar los accesos a cuentas con una verificación de "Dos pasos". La llave es muy barata (9.5 €uros en amazon)
https://www.amazon.es/gp/product/B01N6XNC01/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1



Tuve que tocar un fichero en Linux para que la reconozco, luego cambiar una configuración de Firefox, probar Nightly version 58.... al final no funciona en Mozilla Firefox. pero parece que SI funciona en Chrome.


vi /etc/udev/rules.d/70-u2f.rules

# this udev file should be used with udev 188 and newer
ACTION!="add|change", GOTO="u2f_end"
# Key-ID FIDO U2F
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="096e", ATTRS{idProduct}=="0850|0880", TAG+="uaccess"
LABEL="u2f_end"


Descargar la version Nightly
1. Open the Firefox advanced preferences at `about:config`.
2. Search for "webauth"
3. Enable (value=True) these two:
- security.webauth.u2f
- security.webauth.webauthn_enable_usbtoken


Seguiré probando si puedo hacerlo funcionar, sería muy bueno tener esa opción desde Firefox, evita tipear claves, y aumenta la seguridad de las cuentas.

WPA WPA2 Hack - KrackAttack


Ya todos sabrán que se encontró un problema en la encriptación WPA. Lo positivo es que ya hay un parche para Linux. Lo bajé ayer.
mas info del problema aqui
https://www.krackattacks.com/

miércoles, 4 de octubre de 2017

Keyboard sounds


Two options to produce ticky sound when typing.

https://github.com/BillBillBillBill/Tickeys-linux

yaourt -S bucklespring-git

SQL Server sobre Linux


Desde hace casi un año vengo probando los betas de SQL Server para Linux, clientes y luego servidores, desde Linux hacia SQL Server y desde Windows hacia Linux/SQLSrv. Siempre pensando si es posible utilizar esta solución y tiene sentido.

Reconozco que no me gusta en absoluto, poner un producto Propietario sobre Linux no es bueno, además un producto de MS, además una empresa que claramente era anti-Linux y recientemente está intentando hacercarse, un producto con una calidad de código fuente que no se puede verificar.

De todas formas, desde Arch Linux, el proceso de instalación de un servidor/cliente es sencillo.

yaourt -S mssql-server mssql-ciente

Al final la instalación se debe configurar el Servidor.

sudo /opt/mssql/bin/mssql-conf setup las opciones son :

Choose an edition of SQL Server:
1) Evaluation (free, no production use rights, 180-day limit)
2) Developer (free, no production use rights)
3) Express (free)
4) Web (PAID)
5) Standard (PAID)
6) Enterprise (PAID)
7) Enterprise Core (PAID)
8) I bought a license through a retail sales channel and have a product key to enter.

Al final de su configuración está listo para funcionar.

/usr/lib/systemd/system/mssql-server.service


sqlcmd -S 127.0.0.1 -Usa -Pclave
1> select @@version;
2> go
----------------------------------------------
Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64)
Aug 22 2017 17:04:49
Copyright (C) 2017 Microsoft Corporation
Express Edition (64-bit) on Linux (Manjaro Linux)
(1 rows affected)

lunes, 2 de octubre de 2017

DevOps Admin Windows from Linux



As a DBA with difference engines to administer, sometimes I need to connect to SQL Server and MySQL engines, sometimes in Windows and sometimes in Linux.

I prefer to use Linux O.S. in my notebooks, may be it's not the best option at all, I know, but I want to be safe, have more resources for my tasks, less delays, and a simple way to do daily tasks. (clean, simple, spartan), off course I'm a Debian Linux fan too.

Right or wrong...? it's my option.


I had to prepare some script to simplify my daily works.

may be I'm a DevOp + DBA ?
who cares, je je...


As I.T. Engineering I have to solve problems everyday and sometimes build my own tools to solve it (if I don't have them).

I want to share some script I use in my daily tasks, I guess you could modify it with "your needs" too, and think in GPL and share it too.


Massive connection to Linux & MySQL servers and SQL Servers


(if you want the .sh file, just ask for it)

#!/bin/bash
# run it $ xxxxx NN
#
clear
echo " ----- All in One -----------------------------"
echo "1. uptime"
echo "2. mysql running ? check"
echo "3. SQL Server check"

for i in '192.168.10.2' \
'192.168.10.3' \
'192.168.10.4'

do
case $1 in
1)
echo "****"
echo "$i"
ssh "$i" 'echo `hostname`' "$i"
ssh "$i" "uptime"
;;

case $1 in
2)
clear
echo "****"
echo "$i"
ssh "$i" 'echo `hostname`' "$i"
mysql -uUSER -p'PASSWORD' -h "$i" -e 'select 1;'

read
;;

case $1 in
2)
clear
echo "****"
echo "$i"
ping -c 1 "$i"

# mssql tools installed in Linux
sqlcmd -U"user" -P"password" -S "$i" -Q "select 1;"

;;

esac

done

echo " # EOT "
exit 0
#
# EOF
#




Another script to connect to Windows servers (from Linux)
Again simple, clear and spartan (I have hundreds like this, one for each server) it's easy to type the name/ip and "Enter"



#!/bin/bash
rdesktop SERVERNAME/IP -x l -z -g 1024x768 -uUser -pPassword -r sound:off

I'm pretty sure you could create more like this for simple tasks, "bash" is still a great tool to interact, program and administer a remote server.



Another one, to identify new connections in a server or dis-connections.



#!/bin/bash
clear
netstat -a -n | grep tcp > /tmp/tcp
netstat -a -n | grep udp > /tmp/udp
while [ 1 = 1 ]
do
# sleep 0.5
cp /tmp/tcp /tmp/tcp2
cp /tmp/udp /tmp/udp2

netstat -a -n | grep tcp > /tmp/tcp
netstat -a -n | grep udp > /tmp/udp

# clear
echo "-----------------------------------------------------------------------"
date
echo "-----------------------------------------------------------------------"

# compare what lines appear now, not exists before
diff --side-by-side --suppress-common-lines /tmp/tcp /tmp/tcp2 | grep "<" diff --side-by-side --suppress-common-lines /tmp/udp /tmp/udp2 | grep "<" # read key, if Q exit read -t 1 -n 1 key if [[ $key = q ]] then break fi done # # EOF #







sábado, 30 de septiembre de 2017

IPFS vs FreeNet


Un post con algunas ideas sobre las diferencias entre IPFS y FreeNET.
https://github.com/ipfs/faq/issues/18

Estoy usando Freenet hace muchos años y ahora estor probando IPFs, pensando en compartir contenido en internet.

viernes, 29 de septiembre de 2017

GPG / PGP rápido


Estoy probando como hacer para simplificar el proceso de encriptar un texto rápidamente.
El caso simple sería, estoy escribiendo un correo desde un WebMail (en APP para envio de correos es mas facil) y quisiera hacer
COPIAR
ctrl-alt-xxx
PEGAR
y que el texto ya esté encriptado usando mi clave.


Algunos componentes, desde linux importar clave pública y privada en GPG
gpg --import < claves.txt

crear un alias de bash
alias cryptclip='xsel|gpg --yes -ear cuenta@servidor.com|xsel --clipboard'

agregar la linea en /home/xxxx/.bashrc

crear un shortcut de treclado, ejemplo ctrl-alt-k para llamar al cryptlib

Luego seleccionar texto, copiar y ctrl-alt-k, pero me pide una confirmación.

Sigo probando como mejorarlo....

viernes, 22 de septiembre de 2017

Migrate Centos+Gnome to Arch+Xfce


Llevo usando Linux de manera profesional y diaria, desde hace mas de 7 años, aunque desde el 96 lo uso de manera virtual o solo en algunos portátiles o con ciertas condiciones.
Durante mas de 5 años usé Xubuntu, me parecía la mejor opción, pero durante los últimos 9 meses tuve que usar Centos 7 con Gnome (laboralmente), mi corazón educativo sigue estando con Debian !!!!

El hardware es un Portátil HP Elitebook I5, 8 gb, 256 ssd, monitor de 1920 x 1080, usb-c, última generación (algo muy parecido a un Macbook Air, dije parecido), básicamente por tener que correr un cliente de VPN especial que no funcionaba correctamente en derivados de Debian (Ubuntu, Xubuntu, etc). Aunque la interfaz Gnome ha mejorado mucho, es agradable y simple, todo bastante pulido pero seguía prefiriendo mi viejo y espartano XFCE4.

Hace unos dias actualicé a Centos 7.4 y comenzaron los problemas, dejó de funcionar MySQL-workbench, arandr y otros paquetes.... Necesito esos paquetes a diario y no puedo trabajar SIN ELLOS, me puse a pensar como resolverlo..... luego de varios dias dije "porqué no migrar nuevamente y salir de Centos+Gnome" ?

Tuve que revisar varias distros (usando Virtualbox) y verificar que el cliente de VPN funcionaba correctamente.

Si, XFCE es un Desktop simple, bastante básico, a medio camino entre un BlackBox/LXDE y un Gnome/Kde. Me sigue gustando como el primer dia. Pretendo tener todo lo que necesito a mano, directamente, sin muchas vueltas, todo bastante plano, sin bellezas estéticas que pueda demorar o hacer mas lento mi trabajo. Funciona muy rápido pero es bastante amigable.

Gracias a un "mate" (Andrea B.) quien me recomienda siempre ARCH, me puse a ver Manjaro 17.0.5.

Hoy luego de 3 horas de copias de datos a un disco externo, instalación de Manjaro+XFCE y copias de vuelta al PC, lo tengo en funcionamiento, quería evitar tener que perder horas de instalación manual (ARCH + XFCE), edición de archivos textos, configs.... leer páginas....

Preferí la solución rápida e instalé Manjaro. Todavía recuerdo a Miguel Angel que me había comentado la distro hace años, pero yo seguía fiel a mi Xubuntu.


Mis conclusiones luego de poner en marcha mi equipo desde cero nuevamente.

* La Instalación de Manjaro+XFCE es muy sencilla, tal sencilla o mas que Xubuntu. Rápida y sin muchas vueltas en que instalar. Pocas cosas de mas, pocos adicionales.

* Tuve que entender que debia crear una particion aislada para BOOT+EFI, quizas debido a mi hardware o la manera en que arranca Manjaro+xfce. Hasta ahora con Debian, Xubuntu y otras distros no me había pasado.

* Tuve que aprender rápidamente, gracias Andrea B. por los tips sobre paquetes en ARCH, pacman, pamac, yaourt y otros APPs. Al final con la interfaz gráfica de Manjaro no es tan complicado.

* He instalado lo que uso a diario. Casi todo con los paquetres oficiales, aunque tuve que descubrir AUR. Estoy revisando ese repositorio, porque no le tengo 100% de confianza, está preparado por usuarios. La comunidad ayuda pero miro cada paquete de AUR con mucho cuidado, riezgos los mínimos porque es mi portátil de trabajo.

PAQUETES
- calibre
- chrome
- dbeaver
- desktop access
- firefox
- jitsi
- keepass x
- libreoffice
- mysql-workbench
- owncloud
- pinta
- remmina
- skype
- slack
- sublimetext
- teamviewer
- transmission
- veracrypt
- virtualbox
- vlc
- arandr



* Al Bootear luego de varias instalaciones la pantalla se quedó en negro, y no pude entrar a la interfax gráfica, tuve que modificar el grub.conf para que arranque en modo texto y luego desde el shell texto (de mi cuenta) arrancar el entorno gráfico (startx).

Aunque seguramente lo arreglaré, la solución de 15 mins fue esta

Add "systemd.unit=multi-user.target" (without quotes) to the linux line of grub entry. [1]
Best also remove "quiet" and "splash" there.

[1] - At grub menu, arrow to manjaro entry, press 'e'

type in systemd.unit=multi-user.target en medio del Linux boot info.
F10 to boot.
Do not press 'esc' ; if do repeat steps.

El fichero queda

linux /boot/vmlinuz-4.9-x86_64 root=UUID=eb77aa43-eb11-4f27-aae2-2a1ec7b8b836 rw quiet systemd.unit=multi-user.target resume=UUID=39784c92-d258-42ea-8e93-a880df0684ac

* Tuve algunos problemas con el invernado, sigo probando las opciones.

* Tengo un problema al tipear caracteres españoles. Sin nada corriendo, al tipear se congela el teclado y solo puedo ctrl-alt-f1 / f2 y reboot.
https://www.youtube.com/edit?o=U&video_id=GXT5CZ6MVyk
Resuelto aqui
https://forum.manjaro.org/t/solved-xfce-freeze-when-type-special-chars-and-others/31932

* ALGO MUY POSITIVO es tener las ultimas versiones funcionando, me preocupa FIREFOX que es algo que uso a diario, ssh y otros paquetes que puedan ser atacados por 0days. Me gusta el que cada paquete sea bajado y compilado en mi equipo, quizas un poco mas lento que instalar binarios, pero me da mas confianza.

* Como ocurre siempre, al reinstalar todo de nuevo, gano unos 30 gb que estaban ocupados en cache, shares locales, temporales... etc.etc... Gano disco que ya llenaré en unos meses.

* Otro punto positivo es que comenzó a funcionar el Bluetooth, no lo uso nunca, pero en Manjaro funciona correctamente.

* Mas cosas buenas, tiene un gestor de Kernels que me permite usar los mas nuevos, instalarlos de una manera simple y avisarme cuando salga uno mas.

* Una manía que tengo es quitar los paquetes que no necesito y que se que no usaré en el próximo año, recupero unos pocos megas, pero viv omas feliz usando lo que realmente necesito y quitando lo que no necesito. En el caso de Manjaro no encontré un solo paquete que no necesite y que haya quitado, si usan estadísticas para saber que usa la gente, lo están haciendo muy bien !


viernes, 8 de septiembre de 2017

Mandos Xin-Mo


Ahora estoy viendo como resolver en Linux el problema de tener dos mandos XIN-MO, pero que Linux solo reconozca uno solo.
Mientras que el driver de Windows funciona perfectamente, en Linux no va bien, parece que en RetroPi (Raspberry pi) hay una solución, estoy viendo si la puedo aplicar a un Xubuntu.

xin-mo controller two joysticks on linux

Mame Linux Hyperspin


Mi pequeño resúmen sobre mi propia consola para Jugar en casa.

El modelo terminado y funcionando....


Configurando un equipo para Jugar en Linux

* Varios sistemas operativos
Linux
Windows xp / 7
RetrOs
PI
RetroPi
otros

* Luego aplicación MAME, el emulador que corre distintos hardwares
* Mame (maquinas electronicas)
* Commodore 64
* Amiga
* Atari
* Msx
* PC
* Nintendo
* Sega
* ZX Spectrum
Todo aqui
http://www.arcadepunks.com/hyperpie-and-motion-blue-v4-rom-pack-downloads/

Versiones de Mame, para 32 y 64 bits y distintos S.Operativos
http://mamedev.org/release.html

PDF sobre la configuracion del Mame
http://docs.mamedev.org/_files/MAME.pdf

* El mame tiene un fichero mame.ini de configuracion del propio MAME.
la version que baje de internet viene preconfigurada correctamente
tambien hay opciones para configurar VIDEO, plugins y ROMs

* Luego existen GUIs
* Attrack Mode
* Hyperspin
* MameUI
otros

* HyperSpin - puede tener videos, pantallas, presentacion, sonidos. etc.etc
Hyperspin all in one
magnet:?xt=urn:btih:AF34EF8F9B7EC113563C80141443C33FD9741A3C&dn=hyperspin+project+the+frontend&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80%2Fannounce&tr=udp%3A%2F%2Fopen.demonii.com%3A1337

Info
http://www.arcadepunks.com/hyperspin-project-95gb/


* Luego las ROMs
* Ficheros (ZIP o otros formatos con la ROM del juego) esto tiene propiedad intelectual
Dentro de los ZIPs hay .ROM

Aqui hay ROMs para muchas maquinas (Arcade, PC, Sega, etc)
http://www.arcadepunks.com/hyperpie-and-motion-blue-v4-rom-pack-downloads/

* Luego hay adicionales para cada juego
* Pictures,
* Videos
* Info del juego
* Cheats
otros ficheros de configuracion para cada juego, como las opciones de botones

* Mandos para jugar
* Teclado, mouse
* Joysticks externos por USB

Estos son mis mandos


* La interfaz GUI se debe configurar para los mandos que usaremos
Mame y Attrack Mode vienen configurados para Teclados y Mouse
En el caso de los mandos externos, hay dos partes para configurar
a) la propia GUI se puede ajustar según el Joystick que tengamos
b) cada juego se puede configurar para que use cada botón

* Mi joystick externo doble aparece en Linux como
Bus 003 Device 007: ID 16c0:05e1
Van Ooijen Technische Informatica Free shared USB
VID/PID pair for CDC devices

Tienen 4 direcciones, JOY 0 UP, DOWN, LEFT y RIGHT y JOY 1.
y también un nro de botones, en mi caso del 0 al 21

EN MI CASO

_____7____6______21______20
__________3_4_5__________13__18__19
___8______0_1_2__________10__11__12___9


RECOMIENDO visitar a los chicos de ARCADE MADRID.
Excelentes personas, tienen de todo, venden Pingballs, recreativas, equipos de todo tipo, reparan
Me han reparado mi Pingball y me han ayudado con este proyecto de MAME también.


http://www.arcademadrid.com/
91 889 86 92 - 639 52 29 03
Alcalá de Henares - Madrid




Algunos juegos no te funcionan ?
puede que necesites la rom de otras consolas, ejemplo
neogen.zip
metes el fichero en la misma carpeta donde tienes las demas roms y listo.

Con eso logré que funcione el MetalSlug, un juego que DEBIA tener.
Estoy mirando ROMs de Commodore, Apple y PC viejos.

lunes, 31 de julio de 2017

domingo, 30 de julio de 2017

Mysql WorkBench


The dashboard in MySQL Workbench is a great tool....
I did not find a similar one for MariaDB10.2.7...
Any ideas ?




Now testing
mysql + telegraf + influxdb + grafana

First graphic 2 hours later.

lunes, 24 de julio de 2017

WifiPhiser


Su nombre lo dice todo.... pezcador de Wifi....
https://github.com/wifiphisher/wifiphisher

Paquete para Linux que sirve para tareas "poco éticas"... genera un FakeAP o roque AP, puede saturar un router WIFI con paquetes de des-autenticaciones, genera un portal para engañar y pedir contraseñas de sitios... en fin. Toda una herramienta para el uso diario de los malos.

MyDumper Backup MySQL


Un producto para hacer backups de una manera distinta en motores MySQL o derivados. Funciona en paralelo, comprime, usa una carpeta para guardar los scripts y parece ser un poco mas rápido para bases de datos muy grandes.

https://twindb.com/mydumper-rpm-for-centosrhel/

martes, 20 de junio de 2017

Linux with XFCE


Fresh install to compare Linux Distros with my favorite interface (XFCE)

Debian 9 + XFCE
Xubuntu (Ubuntu 14.10 + XFCE)

2 Srvs crreated in VirtualBox.
1 CPU + 2 gb + 18 gb disk + Bridge ethernet + SSD Disk

Install with Xubuntu 17.04 64 bits - 1.3 gb Disk Image Sezty
Total timing for installation 6 mins and the system rebooted is working again.
Minimal instalation, use 3er parties packages and NO UPDATE from internet during instalation
Use all disk automatically

Then Update all to last options. Another 4 minutes

apt dist-upgrade -- 107 packages updated
Last version
config display 1024x768
kernel 4.10.0.24
4.9 gb disk usage (/)
Port 631 open
1564 packages active (dpkg -l | wc -l)
138 Process running
295 MB RAM USAGE




Then same Virtual Server, now with Debian 9 Testing 64 bits
Disk image 3.5 gb
Install standard options - select XFCE.
9 minutos to complete instalation
1097 packetes para instalar

First Reboot
apt dist-upgrade -- to update the complete distro
194 packas updated
remove exim4 (port 25)
kernel 4.9.0.3
3.1 gb disk usade
1303 packetes en total
117 Process running
218 Mb RAM USAGE




Visual details
Xubuntu looks better, small fonts, nice environment
Debian, I have to add plugins for XFCE and disable 2nd bar
at the end both seams very similar


VirtualBox configuration




Debian 9








Xubuntu 14.04










Both Screens side by side


martes, 13 de junio de 2017

R studio


El año pasado completé un Master en DataScience con R, de excelente calidad (John Hopkins), viendo las tendencias mundiales sobre la gestión de los datos, el valor que tienen. Me enamoré de R y Rstudio, fue increible haber hecho los 10 cursos en 6 meses y descubrir el potencial increible de R.

Unos meses después veo que las nuevas versiones de SQL Server ya traer un servidor R incluido, para que un SQL Server pueda invocar a un script de R (R server) y aprovechar el beneficio del lenguaje R en temas de estadística, probabilidad, gestión de datos, gráficas, preparación de contenido web... y un largo etc.

Ingenuamente pensé que Ms había entendido que otras empresas pueden desarrollar producto de calidad y que ellos pueden usarlo, R y RStudio es un standard reconocido en el mundo desde hace mas de 10 años y además un producto sólido.

Pero nuevamente me defraudaron porque ahora veo que esta ves también Ms comienza a preparar "SU PRODUCTO" basado en R, y como siempre a su manera, usando lo que le gusta y preparando sus interfaces, sus denominaciones, sus capas, sus bibliotecas, su forma de trabajar particular.....

En lugar de "dar espacio a R y su mundo", veo que quieren duplicarlo, usando la licencia que tiene, pero generando SUS productos MS.

https://mran.microsoft.com/documents/rro/installation/

En mi mente paranoica, veo que "o lo compran o lo copia/reemplazan", parece esos sitios de Bloggeros que sacan contenido de otro lado, lo modifican un poco, se atribuyen la autoría de esas ideas brillantes, se hacen autobombo y se van alejando del Standard que sigo el resto del mundo.

"Microsoft R Open: The Enhanced R Distribution

Microsoft R Open, formerly known as Revolution R Open (RRO), is the enhanced distribution of R from Microsoft Corporation. The current release, Microsoft R Open 3.4.0, is based the statistical language R-3.4.0 and includes additional capabilities for improved performance, reproducibility and platform support.

Just like R, Microsoft R Open 3.4.0 is open source and free to download, use, and share.

Microsoft R Open includes:

The open source R language, the most widely used statistics software in the world
Compatibility with all packages, scripts and applications that work with R-3.4.0
The installation of many packages include all base and recommended R packages plus a set of specialized packages released by Microsoft Corporation to further enhance your Microsoft R Open experience
Support for Windows and Linux-based platforms

Plus these key enhancements:

Multi-threaded math libraries that brings multi-threaded computations to R.
A high-performance default CRAN repository that provide a consistent and static set of packages to all Microsoft R Open users.
The checkpoint package that make it easy to share R code and replicate results using specific R package versions.

Furthermore, you can access documentation and a forum to help you use R more effectively.

Download and install Microsoft R Open 3.4.0 today, free of charge.
"


Mas info aca
http://blog.revolutionanalytics.com/2016/04/data-scientist-perspective.html

https://mran.microsoft.com/documents/rro/installation/

Qubes OS


Hoy volví a mirar este proyecto, QubesOS, un Sistema operativo pensado para la "Seguridad", dice que Snowden lo usa... no debe ser malo supongo.
Básicamente parece un Linux con XEN que corre equipos virtuales y aplicaciones en entornos controlados, usa cierto tipo de Hardware (ver página de recomendaciones) porque necesita acceso a cierto hardware, compatibilidad de placas WIFI, de videos. etc.

Pero al funcionar, mantiene procesos totalmente aislados, que es lo que se busca, también implementaron un sistema de copia de datos entre equipos con muy buena seguridad, evitando los espacios comunes. Entorno totalmente gráfico y fácil de usar (para quien usa Linux....)

https://www.qubes-os.org/hcl/#hardware-laptops

jueves, 8 de junio de 2017

VirtualBox Windows space disk


Como reducir el espacio usado por discos virtuales en VirtualBox.
https://www.maketecheasier.com/shrink-your-virtualbox-vm/

En resúmen bajar el programa SDelete de la página de Microsoft,
correrlo
sdelete -Z c:
apagar el equipo virtual Windows

y Desde Linux, clonar el disco virtual, el destino (win7) deberá medir bastante menos.
vboxmanage clonehd VM\ Windows\ 7.vdi win7.vdi

En mi caso pasé de 65 gb a 33 gb. Algo muy importante para no usar tanto mi disco SSD de 256gb.

martes, 6 de junio de 2017

SQL Server on Linux


Installed and testing it.


$ sqlcmd -Usa -Ppassword -S127.0.0.1
1> select @@version
2> go

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Microsoft SQL Server 2017 (CTP2.1) - 14.0.600.250 (X64)
May 10 2017 12:21:23
Copyright (C) 2017 Microsoft Corporation. All rights reserved.
Developer Edition (64-bit) on Linux (Ubuntu 16.04.2 LTS)

(1 rows affected)
1> quit

lunes, 22 de mayo de 2017

WannaCry Ransomware Telefonica ataque.


Datos generales.

Intentaré explicar de una manera simple lo que pasó ( y volverá a pasar ) con WannaCry/Ransomware/incidentes de las últimas semanas.


Mapa del Ataque de WannaCry.




Todo equipo electrónico (teléfonos, tables, portatiles, PCs, Cámaras web) tienen un "Programa" dentro que controla los componentes físicos.
El teĺéfono es un aparato electrónico físico pero al arrancarlo inicia un "Sistema Operativo" / "Firmware" que es el que nos permite interactuar con él, interpretando los toques en la pantalla, botones y realizando acciones.


Los que usan Windows, Windows es "el sistema operativo", los que usan productos Apple (OSX) es el sistema operativo, los que usan teléfonos con Android "Android" es el sistema operativo (Linux) y los que usan Linux igual.

Todo equipo físico requiere de una parte "programa"/"programable"/"cambiante" para manejarlo que pueda ser actualizable para poder mejorar sus funciones o arreglar fallos. Si esto no existiera la vida útil de un equipo se reduciría y ante un problema detectado, deberíamos cambiar el equipo físico por uno nuevo.

Como ejemplo, cuando alguien dice se me actualizó su teléfono, quiere decir que, el fabricante el teléfono envió otro S.Operativo para que pise/reemplace el que teníamos.

Además del S.Operativo, hay "programas" que corren sobre el S.O., por ejemplo el programa para leer correos, navegador en internet, facebook, whatsapp, google maps, etc.

Las empresas que desarrollan los programas también los actualizan y nos mandan nuevas versiones a nuestros equipos.



Dicho esto, ahora llegamos a una parte oscura y fea pero que es importante entender.

Todos los sistemas operativos y todos los programas fueron hechos por hombres que tuvieron descuidos o no contemplaron ciertas situaciones de uso, todos hemos vivido el que un programa se cierre solo, de un error o directamente se cuelga y tenemos que reiniciarlo. A veces solo un programa a veces el sistema operativo. Los que tengan Windows hace años, recordarán la frase de "reinicia el Windows cada dos o tres dias".

Nada es perfecto, y así como explotaban ciertas baterías por defectos de construcción, también ocurre que ciertos programas fallan si ocurre algo en particular (ciertas condiciones o combinaciones de acciones).

Esto no es nuevo y desde hace muchos años, las empresas tienen sitios donde se pueden reportar esos errores para que ellos los arreglen. Y en algunos casos hasta pagan a los informantes de esos errores.

En el caso de las empresas propietarias, Microsoft, Apple y otras tantas, suelen intentar tapar los errores porque cobraron por un producto que tiene fallos, cada uno representa un error/problema para su marca, un aumento de costo de reparación, una caída de su imágen... etc... Como esas empresas ganan dinero vendiendo sus productos, es "mejor" para ellos que no parezca tener tantos problemas. Y hay un costo asociado al arreglar esos problemas que reducen sus ganancias (millonarias), ademas de que venden el derecho de uso de un programa pero ellos siguen siendo los propietarios.

En el mundo GPL/Abierto de Linux, los errores/bugs son bien recibidos porque ayudan a mejorar el producto que todos estamos usando, de cierta manera es "mejor recibido" porque se busca tener productos de mejor calidad. No hay costo de uso, ni de licencia por lo que cada error es arreglado porque sirve para mantener la calidad de cada programa.



Ahora llegamos a una parte aún mas oscura.

Tal como han reportado Edward Snowden, Chelsea Manning, Richard Stallman, julian assange, Wikileaks, Anonymous y otros tantos profesionales/sitios de la tecnología, el Gobierno de Estados Unidos (seguramente otros también) ha comprado y desarrollado internamente programas para "explotar"/"Usar" los errores de otros programas, en lugar de reportarlo a Microsoft, Apple y otras empresas, se guardan el conocimiento de "si hago esto y esto, puedo entrar a un equipo con Windows remoto". Se lo denomina "explotar la vulnerabilidad" de un componente.

Hay un mercado de "programas que se aprovechan de errores de otros programas" con grandes empresas que facturan millones para encontrar esos fallos, también grupos de hackers oscuros en el mundo y hasta los propios gobiernos metidos, la inseguridad es un gran negocio porque permite tener el control de equipos de otros SIN SU PERMISO, colgarlos o destruirlos.

Hay pruebas de que la NSA y otras oficinas gubernamentales en el mundo han comprado ese tipo de programas a consultoras legalmente, amparados en sus leyes o no. Han logrado construir el denominado "armamento cibernético".

Ejemplo, supongamos que en un pais del medio oriente que usa Windows en sus equipos y quiere fabricar Uranio enriquecido.
A Estados Unidos (USA) no le gusta y les envía un virus/troyano/programa_malo para que infecte sus PCs y que esos equipos con Windows se reseteen cada hora, o la fecha/hora cambie permanentemente o aparezcan las pantallas azules de "colgado". Eso ha ocurrido y se llama "ataque cibernético" o "ciberataque". Ver Stuxnet.

Al mismo tiempo, puede haber grupos de hackers pagados por China, Rusia, Alemania, UK o "autónomos" que pueden hacer algo similar, desarrollan un programa e "infectan" determinados equipos (o todos los que puedan) para intentar ganar algo, sea molestar a otros, ganar dinero, bajar las acciones de la Bolsa... El daño es para unos y el beneficio para otros.

Creo que hay tres motivaciones para este tipo de acciones, motivaciones políticas/gobierno, motivaciones económicas personales/grupo o simplemente buscar "fama"/reconocimiento durante un tiempo.
Para las motivaciones económicas a veces el mal paga mas y mas rápido que el bien, no hay datos de lo recaudado por los cyberdelincuentes de WannaCry, pero seguramente es muchisimo mas de lo que hubieran ganado enviando los errores a Microsoft para su arreglo.

Si esto lo hacen grupos "muy malos" sin estar soportados por gobiernos se lo suele llamar "cyber terrorismo", es como poner una bomba en un centro comercial y generar "miedo".
Si lo hacen los gobiernos y aunque la acción sea la misma, se lo denomina "Seguridad Nacional"...

Las creencias nacionalistas, religiosas, morales hacen que todos estos grupos puedan ser vistos como "buenos o malos", no voy a emitir opinión.



Orígen del incidente del 12 Mayo.

Hace unos cuantos meses, un grupo de hackers pudo obtener una copia de todos los virus/troyanos/programas_malos de la NSA (su cyberarmamento), el paralelo sería entrar en un complejo de investigación de enfermedades contagiosas y robar las muestras de todos los virus que mantenían guardados (en muchos casos sin vacuna). Quien tenían esos virus los guardaba para enviarlos a un pais lejano y hacer ataques bacteriológicos a otros.

Ese grupo hizo público todos los virus que encontraron y pidió un rescate para vender/entregarlos en internet, cobrando Bitcoins a cambio. Comenzó a liberar de a partes lo que habían encontrado.
Y en un punto del tiempo hicieron público la información de todos los virus que le habían robado a la NSA.

Quizas ellos mismos o otros grupos hackers, obtuvieron esos virus, los mezclaron, les agregaron otras enfermedades y los enviaron a muchos emails en el mundo, generalmente como "Adjuntos en Email", o "Links de fotos/pdfs" o Webs infectados. Parece que lograron llegar a Telefónica, Sistemas de salud Ingleses, empresas de todo tipo y como los virus biológicos, estos virus informáticos infectaron cientos de miles de PCs en el mundo, en pequeñas empresas, grandes, equipos de Universidades, etc. El número total de infectados jamas se sabrá porque es casi imposible estimarlo. Muchas gente reinstaló Windows y no hay donde informar de eso.

En este caso le agregaron un componente para pedir dinero a los infectados, el virus infectó un equipo con Windows, encriptó determinados ficheros y pide dinero a su dueño para des-encriptarlo, esto se llama RansomWare (exactamente esto mismo apareció en una serie llamada MrRobot), una profesía autocumplida o un riezgo que todos veíamos y no se puedo parar.



El ataque.
Por determinadas condiciones todos los equipos infectados (quizas hace meses) se "activaron" y comenzaron a infectar a sus vecinos, y se disparó la epidemia, en varias empresas mandaron a sus empleados a la calle "SIN EQUIPOS" para evitar que contagie a otros equipos (en sus casas).

Esto pasó en equipos con Windows como sistema operativo, pero puede pasar con productos Apple, con Linux y lo peor de todo es que "puede volver a pasar nuevamente".

El programa ademas de encriptar los ficheros presenta una pantalla para pedir un "rescate" de unos 300 U$S, y por conocidos que han aceptado y enviado el dinero, les han enviado la clave para des-encriptar todos sus ficheros.

Gracias a empresas de seguridad que entendieron que estaba pasando, probaron soluciones y además informaron a Microsoft, se pudieron fabricar las vacunas para "ESE VIRUS".
El término es "patchear" Windows, colocarle unos parches/arreglos en sus programas para evitar que vuelvan a vulnerar esos mismos puntos.

Investigadores y consultoras de seguridad mundiales han verificado que en este caso, varios componentes del virus estaban en el armamento robado a la NSA, con una mezcla de otros programas y preparado para encriptar archivos y solicitar dinero.





¿ Responsables ?
Aqui nuevamente por razones "políticas, religiosas, humanas o sociales" se puede acusar a la NSA de construir, pagar y almacenar un muestrario de virus para sus propios fines, SIN avisar a Microsoft (en este caso) de lo que encontraron, buscando su propio beneficio en ataques a otros.
Podemos apuntar a Microsoft por sus políticas propietarias y oscurantismo en la manera de gestionar su seguridad, sus productos propietarios y por "permitir" que existan errores SIN arreglarse en sus productos. O que no hayan sido arreglados rápidamente.

Podemos acusar a un grupo de hackers malos que robaron el armamento bacteriológico/informático de la NSA, sería un robo en instalaciones de un ente de gobierno que se dedica a "Seguridad"...

Las personas y empresas que usan Windows y que confían en su seguridad y sistema de parches, también tienen un 2% de culpa, seguramente escucharon cientos de veces los problemas de un Sistema Operativo pero confiaron que no les pasaría nada, no hacían copias de seguridad, no tenían antivirus (algo que no les hubiera servido en este caso), no mantienen sus productos actualizados, etc.etc.... Es algo mínimo pero son responsables también.



¿ Esto puede volver a pasar ?
SI, SIN DUDA. la pregunta es ¿Cuándo?, porque puede volver a pasar hoy mismo.
¿ Puede ocurrir usando productos Apple ? SI, perfectamente.
¿ Y usando Linux ? Si, quizas en menor grado, pero SI, podría pasar.

Las estadísticas dicen que el 70% de los equipos tiene Windows, un 25% Apple y un 5% Linux. Para mi, eso esos números representan los porcentajes de que vuelva a ocurrir.

Grupos que busquen un beneficio económico o gobiernos que busquen un beneficio estratégico/económico pueden volver a provocar algo similar.



¿ Es este el fin de la tecnología tal como la conocemos ?
¿ Hará falta que la humanidad intente ser mas cooperativa, que mucha gente salga de productos propietarios y se pase a soluciones GPL ?
¿ Hace falta que los directivos de Seguridad en el mundo entiendan los problemas y vean como solucionarlos eficientemente en lugar de patear las pelotas fuera de la cancha ?
¿ Un mundo mas justo ?
Total, que no sea por no pedir.



jueves, 4 de mayo de 2017

VoltDB


En estos dias estoy probando VOLTDB, un nuevo producto para gestión de datos.
Requiere Java.... ya empezamos mal... hay que instalar unos cuantos componentes y ademas solo dice que está soportado para Ubuntu 16.04 (y no en nuevas versiones).

En fin, seguiré probando.


Todo esto sumado a que no compila....
buildinfo:
[exec] This is not a git working tree
[exec]
[exec] This not an svn working copy
[exec] Version: 7.2.1 This is not from a known repository

ee_buildmakefile:
[exec] Traceback (most recent call last):
[exec] File "build.py", line 52, in
[exec] if CTX.compilerName() == 'gcc':
[exec] File "/home/dac/voltdb-voltdb-7.2.1/buildtools.py", line 74, in compilerName
[exec] self.getCompilerVersion()
[exec] File "/home/dac/voltdb-voltdb-7.2.1/buildtools.py", line 92, in getCompilerVersion
[exec] vinfo = output = Popen([self.CXX, "-v"], stderr=PIPE).communicate()[1]
[exec] File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
[exec] errread, errwrite)
[exec] File "/usr/lib/python2.7/subprocess.py", line 1343, in _execute_child
[exec] raise child_exception
[exec] OSError: [Errno 2] No such file or directory

BUILD FAILED
/home/dac/voltdb-voltdb-7.2.1/build.xml:1556: exec returned: 1

Total time: 2 minutes 23 seconds



Un buen rato después, varios paquetes instalados, sistema actualizado nuevamente..... otro error.

[exec] make[1]: Entering directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d'
[exec] making all in crypto...
[exec] make[2]: Entering directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto'
[exec] making all in crypto/objects...
[exec] make[3]: Entering directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/objects'
[exec] make[3]: Nothing to be done for 'all'.
[exec] make[3]: Leaving directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/objects'
[exec] making all in crypto/bn...
[exec] make[3]: Entering directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/bn'
[exec] make[3]: Nothing to be done for 'all'.
[exec] make[3]: Leaving directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/bn'
[exec] making all in crypto/buffer...
[exec] make[3]: Entering directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/buffer'
[exec] make[3]: Nothing to be done for 'all'.
[exec] make[3]: Leaving directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/buffer'
[exec] making all in crypto/bio...
[exec] make[3]: Entering directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/bio'
[exec] make[3]: Nothing to be done for 'all'.
[exec] make[3]: Leaving directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/bio'
[exec] making all in crypto/stack...
[exec] make[3]: Entering directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/stack'
[exec] make[3]: Nothing to be done for 'all'.
[exec] make[3]: Leaving directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/stack'
[exec] making all in crypto/lhash...
[exec] make[3]: Entering directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/lhash'
[exec] make[3]: Nothing to be done for 'all'.
[exec] make[3]: Leaving directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/lhash'
[exec] making all in crypto/rand...
[exec] make[3]: Entering directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/rand'
[exec] make[3]: Nothing to be done for 'all'.
[exec] make[3]: Leaving directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/rand'
[exec] making all in crypto/err...
[exec] make[3]: Entering directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/err'
[exec] make[3]: Nothing to be done for 'all'.
[exec] make[3]: Leaving directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/err'
[exec] making all in crypto/asn1...
[exec] make[3]: Entering directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/asn1'
[exec] make[3]: Nothing to be done for 'all'.
[exec] make[3]: Leaving directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/asn1'
[exec] if [ -n "" ]; then \
[exec] (cd ..; make libcrypto); \
[exec] fi
[exec] make[2]: Leaving directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto'
[exec] created directory `/home/dac/voltdb-voltdb-7.2.1/obj/release/3pty-install/bin'
[exec] created directory `/home/dac/voltdb-voltdb-7.2.1/obj/release/3pty-install/lib'
[exec] created directory `/home/dac/voltdb-voltdb-7.2.1/obj/release/3pty-install/lib/engines'
[exec] created directory `/home/dac/voltdb-voltdb-7.2.1/obj/release/3pty-install/lib/pkgconfig'
[exec] created directory `/home/dac/voltdb-voltdb-7.2.1/obj/release/3pty-install/include'
[exec] created directory `/home/dac/voltdb-voltdb-7.2.1/obj/release/3pty-install/include/openssl'
[exec] created directory `/home/dac/voltdb-voltdb-7.2.1/obj/release/3pty-install/misc'
[exec] created directory `/home/dac/voltdb-voltdb-7.2.1/obj/release/3pty-install/certs'
[exec] created directory `/home/dac/voltdb-voltdb-7.2.1/obj/release/3pty-install/private'
[exec] making install in crypto...
[exec] make[2]: Entering directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto'
[exec] making install in crypto/objects...
[exec] make[3]: Entering directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/objects'
[exec] make[3]: Leaving directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/objects'
[exec] making install in crypto/bn...
[exec] make[3]: Entering directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/bn'
[exec] make[3]: Leaving directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/bn'
[exec] making install in crypto/buffer...
[exec] make[3]: Entering directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/buffer'
[exec] make[3]: Leaving directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/buffer'
[exec] making install in crypto/bio...
[exec] make[3]: Entering directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/bio'
[exec] make[3]: Leaving directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/bio'
[exec] making install in crypto/stack...
[exec] make[3]: Entering directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/stack'
[exec] make[3]: Leaving directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/stack'
[exec] making install in crypto/lhash...
[exec] make[3]: Entering directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/lhash'
[exec] make[3]: Leaving directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/lhash'
[exec] making install in crypto/rand...
[exec] make[3]: Entering directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/rand'
[exec] make[3]: Leaving directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/rand'
[exec] making install in crypto/err...
[exec] make[3]: Entering directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/err'
[exec] make[3]: Leaving directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/err'
[exec] making install in crypto/asn1...
[exec] make[3]: Entering directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/asn1'
[exec] make[3]: Leaving directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto/asn1'
[exec] make[2]: Leaving directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d/crypto'
[exec] installing libcrypto.a
[exec] cp libcrypto.pc /home/dac/voltdb-voltdb-7.2.1/obj/release/3pty-install/lib/pkgconfig
[exec] chmod 644 /home/dac/voltdb-voltdb-7.2.1/obj/release/3pty-install/lib/pkgconfig/libcrypto.pc
[exec] cp libssl.pc /home/dac/voltdb-voltdb-7.2.1/obj/release/3pty-install/lib/pkgconfig
[exec] /bin/sh: 5: cmake: not found
[exec] make: *** [configure-s2-geometry] Error 127
[exec] chmod 644 /home/dac/voltdb-voltdb-7.2.1/obj/release/3pty-install/lib/pkgconfig/libssl.pc
[exec] cp openssl.pc /home/dac/voltdb-voltdb-7.2.1/obj/release/3pty-install/lib/pkgconfig
[exec] chmod 644 /home/dac/voltdb-voltdb-7.2.1/obj/release/3pty-install/lib/pkgconfig/openssl.pc
[exec] make[1]: Leaving directory '/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/openssl/openssl-1.0.2d'
[exec] Configuring The S2 Library for building.
[exec] if [ ! -f google-s2-geometry/Makefile ] ; then \
[exec] rm -rf google-s2-geometry; \
[exec] mkdir google-s2-geometry; \
[exec] cd google-s2-geometry; \
[exec] cmake -DCXX_VERSION_FLAG="-std=c++11" -DVOLTDB_THIRD_PARTY_CPP_DIR="/home/dac/voltdb-voltdb-7.2.1/third_party/cpp" -DCMAKE_INSTALL_PREFIX="/home/dac/voltdb-voltdb-7.2.1/obj/release/3pty-install" -DCMAKE_BUILD_TYPE="Release" "/home/dac/voltdb-voltdb-7.2.1/third_party/cpp/google-s2-geometry"; \
[exec] fi
[exec] makefile:382: recipe for target 'configure-s2-geometry' failed
[exec] make: Leaving directory '/home/dac/voltdb-voltdb-7.2.1/obj/release'
[exec] Building with c++11
[exec] Compiler: gcc 5.4.0
[exec] OpenSSL: version 1.0.2d, config linux-x86_64:gcc -fpic
[exec]
[exec] Making in directory "obj/release/" with 1 threads

BUILD FAILED
/home/dac/voltdb-voltdb-7.2.1/build.xml:1546: exec returned: 255

Total time: 1 minute 2 seconds