Planeta Sysadmin

de sysadmins para sysadmins

June 22, 2017

systemadmin.es

sar: Invalid system activity file

Al intentar ver el contenido de un fichero de sar podemos ver el siguiente mensaje:

# sar -f /var/log/sa/sar09
Invalid system activity file: /var/log/sa/sar09 (0x3130)

Dicho error puede parecer critico, pero en realidad nos esta diciendo que no entiende el contenido del fichero. La razón es simplemente que debemos usar los ficheros sa en lugar de los sar:

# sar -f /var/log/sa/sa09
Tags:

by Jordi Prats at June 22, 2017 12:22 PM

June 21, 2017

enavas.blogspot.com.es

Utilizar la herramienta PsPasswd para cambiar la password de un usuario local en máquinas remotas

PsPasswd es una herramienta de la suite PsTools que nos va a permitir cambiar la password de un usuario local en una máquina remota, algo que nos viene como anillo al dedo para cambiar la contraseña del administrador local.

Veamos un ejemplo:
C:\PSTools> pspasswd.exe \\infolab-prueba -u AdminEdu -p password_actual AdminEdu nueva_password
En el ejemplo anterior estamos usando el propio administrador local para cambiar su clave de forma remota.
C:\PSTools> pspasswd.exe \\infolab-prueba -u instituto\gestor -p password_usuario_gestor AdminEdu nueva_password
Por otra parte, en lugar de indicar el nombre del equipo, podemos especificar un nombre de fichero que contenga un listado de las máquinas a las que hay que cambiar la password:
C:\PSTools> pspasswd.exe @fichero -u instituto\gestor -p password_usuario_gestor AdminEdu nueva_password
Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at June 21, 2017 12:16 PM

GPO: Agregar un grupo del dominio al grupo local de Administradores

Para que un usuario pueda instalar aplicaciones en el sistema, debe tener permisos de Administrador. 

Si queremos que un grupo de usuarios del dominio no administradores puedan instalar aplicaciones, podemos añadir su grupo del dominio al grupo local de Administradores. O incluso podemos crear un grupo específico (por ejemplo Setup) que agreguemos al grupo local de Administradores y añadir y quitar usuarios cuando queramos concederles/denegarles permisos de administrador.

Para agregar un grupo del dominio como administrador local, crearemos una directiva de grupo en:
"Configuración del equipo" -> "Configuración de Windows" -> "Configuración de seguridad" -> "Grupos restringidos":

Hacemos clic con el botón derecho sobre "Grupos restringidos" y se nos mostrará un menú de contexto. De las diferentes opciones que nos aparecen, hacemos clic en "Agregar grupo" y se abrirá un cuadro de diálogo que nos permitirá agregar el grupo:


Hacemos clic en el botón "Examinar" y se nos abrirá un nuevo cuadro de diálogo en el que escribiremos el nombre del grupo de usuarios del dominio. A continuación hacemos clic en el botón "Comprobar nombres" para que busque el nombre de grupo en el dominio. Veremos que el nombre del grupo se subraya.


Pulsamos el botón "Aceptar" y nos mostrará el grupo del dominio añadido:


Pulsamos el botón "Aceptar" y se nos abrirá el cuadro de Propiedades. En el cuadro que dice "Este grupo es un miembro de:" pulsamos el botón "Agregar". Se abrirá un cuadro donde introducimos el nombre del grupo de administradores locales: Administradores. Y, a continuación, pulsamos el botón "Aceptar".


Es importante destacar que en la ventana anterior, no pulsamos el botón "Examinar" porque queremos agregar el grupo del dominio al grupo de administradores local y esta opción nos serviría para buscar un grupo del dominio.

Una vez hecho lo anterior, así nos quedaría configurada la pertenencia:


Pulsamos el botón "Aceptar" y volveremos de nuevo al editor de directivas de grupo, donde podremos añadir más grupos restringidos:

Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at June 21, 2017 10:53 AM

Instalación silenciosa de NetBeans en Windows

Al igual que en Linux, podemos realizar una instalación desatendida de NetBeans en Windows iniciando el instalador con el parámetro --silent:

Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at June 21, 2017 08:17 AM

June 20, 2017

enavas.blogspot.com.es

Eliminar el mensaje "No Valid Subscription" en versiones Proxmox 4.4+

Parece que en versiones más recientes de Proxmox, ya no funciona el viejo método de eliminar el popup con el mensaje "No Valid Subscription" que aparece al hacer login. No obstante, tal y como apuntaba el usuario Marcel G en el siguiente post, podemos seguir eliminándolo de la siguiente manera:
# sed -i.bak 's/NotFound/Active/g' /usr/share/perl5/PVE/API2/Subscription.pm && systemctl restart pveproxy.service
Si os dáis cuenta, estamos reemplazando "NotFound" por "Active" en el fichero "/usr/share/perl5/PVE/API2/Subscription.pm" y haciendo una copia de seguridad del mismo antes de reemplazar.
Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at June 20, 2017 12:21 PM

Utilizar YUMI en Linux mediante Wine

YUMI (Your Universal Multiboot Integrator) es una interesante herramienta para crear dispositivos USB Multiboot que contengan diferentes distribuciones y herramientas en Windows.

Si queréis utilizar esta herramienta en Linux, tendréis que instalar dos cosas:
  • wine.
  • el runtime de mono.
Instalar wine desde los repositorios de Linux es sencillo:
# apt-get install wine
Del mismo modo, también es sencillo instalar el runtime de mono:
# apt-get install mono-runtime
Una vez hecho ésto, podéis ejecutar YUMI mediante WINE:
# wine YUMI-2.0.4.9.exe


Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at June 20, 2017 10:49 AM

June 18, 2017

Blog Bitix

Autenticación mutua de cliente y servidor con certificados

OpenSSL

Los certificados no solo sirven para autenticar a un servidor o acceder solo a aquellos en los que confiamos. El servidor también puede autenticar a los clientes mediante un certificado como alternativa a usar un usuario y contraseña ya sea una autenticación BASIC o un formulario personalizado. Al igual que en el cliente usa el certificado de la autoridad de certificación en la que confía para validar el que presenta el servidor, el servidor puede requerir que el cliente también proporcione un certificado que el servidor valida según las autoridades de certificación en las que confía, en ambos casos el servidor o cliente usan su clave privada para iniciar la conexión segura con el handsake del protocolo TLS.

Para el ejemplo usaré un servidor web nginx ejecutado como un contenedor de Docker configurado de tal manera que requiere autenticación para el cliente con certificados.

Inicialmente deberemos generar tres parejas de claves privadas y públicas, una para nuestra propia autoridad de certificación, una clave para el servidor y otra para el cliente. Al mismo tiempo generaré otras tres parejas de claves privadas y públicas para comprobar que cuando se proporciona un certificado incorrecto la autenticación falla.

El siguiente paso es generar los certificados y firmar con la clave y certificado de la autoridad de certificado los certificados del servidor y cliente. Como paso previo a que la autoridad de certificación emita los certificados del servidor y cliente hay que generar una petición de firma de certificado, los archivos .csr.

Con la misma herramienta de OpenSSL es posible comprobar si un certificado es válido para una autoridad de certificación en la que se confía, para ello se usa el certificado raiz de la autoridad.

Para hacer que el servidor nginx requiera autenticación mediante certificados para el cliente hay que añadir un poco de configuración mediante las directivas ssl donde se indica el certificado del servidor, la clave privada del servidor, el certificado de la autoridad de certificación contra la que se validarán los certificados de los clientes y finalmente la directiva que establece que se ha de verificar a los clientes mediante certificados.

Con el siguiente archivo descriptor de Docker Compose y comando se inicia el servidor web nginx.

Iniciado el servidor web ya se pueden realizar peticiones y el servidor y el cliente se autenticarán mutuamente. El servidor devolverá el código HTML de la página de bienvenida por defecto con las cabeceras del protocolo HTTP después de realizar el handsake donde se valida el certificado del servidor.

Si se intenta realizar una petición sin certificado de cliente o con un certificado de cliente en el que no confié el servidor (que no esté firmado por la autoridad de certificación en la que confía) se devolverá un código de estado 400 que indica que la petición se ha rechazado. También el cliente advertirá si la autoridad de certificación en la que confía no valida el certificado del servidor con un error 400 y título 400 The SSL certificate error.

El siguiente script escrito en lenguaje Groovy muestra como desde un programa para la plataforma Java se realiza autenticación mutua y que error da cuando alguno de los certificados es inválido ya sea el del cliente o el del servidor. Generando previamente los keystores de la autoridad de certificado y del cliente introduciendo como clave en el ejemplo password cuando se solicita.

En caso de que al usar un keystore con un certificado de una autoridad que no valida el certificado del servidor se producirán un error, también cuando el certificado del cliente no sea válido para el servidor.

Lo anterior es usando la herramienta curl o un un programa en la plataforma Java, en el caso de querer realizar autenticación mutua con un navegador web como Firefox hay que instalar el certificado del cliente y si es necesario el certificado de la autoridad de certificación para que el candado indicativo de la seguridad del protocolo HTTPS se muestre en verde y no indique ningún problema de seguridad en la autenticación del servidor. En Firefox los certificados se añaden en el menú Preferencias > Avanzado > Ver certficados. En la pestaña Sus certificados hay que importar el certificado del cliente en formato PKCS12 y en la pestaña Autoridades el certificado de la autoridad que haya firmado el certificado del servidor, con el botón Importar se selecciona el archivo crt de la autoridad. Al introducir la URL y realizar la petición Firefox solicita mediante un diálogo seleccionar el certificado a usar para realizar la autenticación en el servidor.

Autenticación mutua de cliente y servidor con el navegador web Firefox

El código fuente completo del ejemplo puedes descargarlo del repositorio de ejemplos de Blog Bitix alojado en GitHub y probarlo en tu equipo ejecutando el comando docker-compose up && groovy MutualCertAuth.groovy.

by pico.dev at June 18, 2017 09:30 PM

June 14, 2017

Entre Dev Y Ops

Podcast 26: Big Data con José Mena

EDyO Podcast

Ya tenéis disponible el episodio 26 de nuestro podcast donde hablamos de Big Data con José Mena.

Si os gusta nuestro trabajo por favor corred la voz, dadnos, feedback, valorad con 5 estrellas iTunes y me gusta en Ivoox.

A continuación podéis encontrar los enlaces comentados en este episodio.

Leer más… (1 min remaining to read)

by David Acacio at June 14, 2017 11:00 AM

June 11, 2017

Blog Bitix

Introducción a la base de datos NoSQL Redis

Redis es una de las bases de datos NoSQL en este caso de tipo clave-valor. Los valores pueden ser de diferentes tipos y tiene una amplia colección de operaciones disponibles para usar según el tipo de datos asociado a la clave.

Redis

Redis es una de las bases de datos para almacenar información de los conocidas como NoSQL. Almacena los datos en memoria por lo que es muy rápido y es usada como base de datos, como cache o broker de mensajes. Los datos no se almacenan en tablas como en los sistemas relacionales tradiciones RDBMS como PostgreSQL o MySQL sino en estructuras de datos como cadenas, hashes, listas, conjuntos, conjuntos ordenado con rangos, bitmaps, hyperloglogs e índices geoespaciales. Incorpora replicación, scripting con LUA, desalojo LRU, transacciones, diferentes niveles de persistencia en disco y alta disponibilidad con Redis Sentinel y paticionamiento con Redis Cluster.

El punto más crítico en el rendimiento en una aplicación suele estar en la base de datos relacional, dado que han de garantizar las propiedades ACID y almacenan grandes cantidades de datos en disco son lentas (comparativamente) además de presentar dificultades para escalar horizontalmente. Redis almacena los datos en memoria por lo que es significativamente más rápida que una base de datos relacional aunque con la limitación de no poder almacenar las grandes cantidades de datos medidos hoy en día en terabytes o TiB (1024 GiB) que podría almacenar una base de datos relacional. Para la necesidad de acceder datos de forma rápida, de cachear datos a los que acceder rápido, datos a los que se acceden frecuentemente, datos precalculados, hay grandes cantidades de escrituras o necesidad de escalar Redis es una opción a tener en cuenta.

Redis es un sistema de datos clave-valor en el que cada clave tiene asociado un tipo de datos y unos datos que almacena. Según el tipo de datos de la clave se pueden realizar diferentes operaciones o comandos de consulta.

Usando Docker se puede iniciar una instancia de Redis con un archivo descriptor del contenedor en formato yml y el comando docker-compose up. Redis al igual que otras bases de datos posee un shell de linea de comandos, redis-cli. Iniciada la instancia del contenedor y el servicio de Redis se puede iniciar una sesión de sh y con ella el shell.

Hay multitud de clientes para los lenguajes de programación más populares y otros menos usados, en Java uno de los clientes más conocidos es Jedis. En el siguiente ejemplo un cliente Java se conecta a la instancia de Redis y lanza los varios comandos para almacenar cadenas, un set, set ordenados, lista, hash y algunas operaciones sobre claves. Este ejemplo desde Java realiza las mismas operaciones que las realizadas en el shell de Redis anterior.

Cada comando de Redis tiene una complejidad de tiempo ejecución, para obtener el mejor rendimiento hay que analizar los datos para almacenarlos en la estructura de datos adecuada de las que ofrece Redis junto con los comandos que son utilizados y su complejidad indicada en la documentación del comando en notación Big O. Redis solo es uno de los sistemas NoSQL, hay otros conocidos con MongoDB orientado a documentos o Cassandra híbrido entre clave-valor y tabular.

Para un conocimiento mucho más detallado de las posibilidades de esta base de datos el libro Mastering Redis o Redis in Action son un buen inicio.

El código fuente completo del ejemplo puedes descargarlo del repositorio de ejemplos de Blog Bitix alojado en GitHub y probarlo en tu equipo ejecutando el comando docker-compose up && ./gradlew run.

by pico.dev at June 11, 2017 10:00 AM

June 10, 2017

enavas.blogspot.com.es

Instalar un disco duro USB en un thinclient HP5730

En un post de febrero de 2016, vimos cómo aprovechar un thinclient HP5730 como firewall pfSense. 


Hace poco tiempo pensé darle un uso adicional como servidor de clonación DRBL, pero sin perder la funcionalidad de firewall. Como este thinclient cuenta con un IDE flash memory 44 PIN de 2GB, pero tiene dos conectores USB dentro de la carcasa, opté por conectar un disco duro vía USB aprovechando esos dos conectores USB internos:  


Puesto que mi thinclient tiene  instalado el módulo de expansión GZ286AA, es sencillo atornillarlo a la carcasa del thinclient para que quede alojado en el interior:


Para conectarlo por USB he usado la placa SATA-mini USB de la carcasa de un disco duro externo que en su día murió y que conservaba en un cajón:


De este modo, tan sólo tengo que conectar la placa al disco duro SATA:


Y, por último, conectar la placa a los conectores USB que quedan dentro de la carcasa con un cable como el siguiente:

Una vez hecho el montaje, cerramos la carcasa y el disco duro quedará oculto dentro.


Así tengo la posibilidad de arrancar el firewall desde la IDE flash memory de 2GB o cualquier distro/s que instale en el disco duro conectado vía USB, como por ejemplo, DRBL.

Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at June 10, 2017 05:21 PM

June 07, 2017

enavas.blogspot.com.es

Instalación silenciosa de Scratch 2.0 en Windows

Para instalar Adobe Air en Windows de forma silenciosa, no tenemos más que iniciar el instalador con los siguientes parámetros:


Es importante decir que Scratch es una aplicación Adobe AIR. Lo que significa que debéis instalar Adobe AIR para que funcione.
Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at June 07, 2017 09:36 AM

Instalación silenciosa de Adobe Air en Windows

Para un administrador es importante que una aplicación ofrezca la posibilidad de realizar una instalación silenciosa, porque nos va a permitir automatizar la distribución de la aplicación a un conjunto de máquinas.

Para instalar Adobe Air en Windows de forma silenciosa, no tenemos más que iniciar el instalador con el parámetro -silent:

Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at June 07, 2017 08:12 AM

June 06, 2017

enavas.blogspot.com.es

Puppet: Asegurar que un servicio esté detenido y deshabilitado

En ocasiones nos interesa garantizar que un servicio se encuentre detenido y que no vuelva a iniciarse. Para indicar a puppet el estado del servicio utilizamos el atributo ensure y para deshabilitarlo, usamos el atributo enable.
Por ejemplo:
   service { "checkLdapDaemon":
ensure => stopped,
enable => false
}
De este modo, estamos garantizando que el servicio se encuentre detenido y deshabilitado.
Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at June 06, 2017 10:42 AM

June 05, 2017

enavas.blogspot.com.es

Testear la configuración de hora de un cliente Windows

Una vez configurado el servicio de hora en clientes Windows, deberíamos echar un vistazo a un cliente y comprobar si se está realizando la sincronización.

Lo primero que deberíamos comprobar es si se ha aplicado la directiva en el cliente. Ésto es fácil de ver con rsop.msc (Resultant Set Of Policy):


Una vez comprobado, podemos consultar el estado de sincronización:


En este caso, veo que se ha realizado la sincronización con mi servidor de hora primario.

Por otra parte, con w32tm también podemos ver la configuración del cliente en un terminal:


Si todo es correcto, podéis tratar de realizar una re-sincronización para aseguraros:


Y consultar el estado del servicio tras realizar dicha sincronización:


Por útlimo, podemos usar el comando time con el parámetro /T para comprobar si la hora está bien actualizada:

Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at June 05, 2017 10:54 AM

GPO: Configurar el servicio de hora en los clientes de nuestro dominio

Es importante tener bien configurado el servicio de hora en todos los dispositivos de nuestra organización para lograr un buen funcionamiento de servicios y evitar problemas. Por tanto, me ha parecido interesante modificar las directivas de proveedores de hora para que los clientes Windows de mi dominio sincronicen su hora con los servidores NTP del centro. Para ello, vamos a tocar dos directivas:
  • Configurar el cliente NTP de Windows.
  • Habilitar el cliente NTP de Windows.

Ambas directivas se encuentran en:
Configuración del Equipo -> Directivas -> Plantillas administrativas -> Sistema -> Servicio Hora de Windows -> Proveedores de hora -> Configurar el cliente NTP de Windows


Abrimos la directiva "Configurar el cliente NTP de Windows" para habilitarla y configurarla:


Como se puede ver en la imagen anterior, he especificado que el cliente debe utilizar dos servidores NTP de mi red registrados en DNS con los siguientes nombres:
  • ntp (servidor primario)
  • ldap (servidor secundario)
Podemos indicar que el cliente use varios servidores, separándolos mediante un espacio.

Por otra parte, debemos mencionar que junto al nombre del servidor, separado por una coma, debemos especificar un valor de flag que puede tener uno de los siguientes valores o una combinación de los mismos (para más información ver el siguiente artículo):
  • 0x01 SpecialInterval 
  • 0x02 UseAsFallbackOnly 
  • 0x04 SymmatricActive 
  • 0x08 Client
Para el servidor primario, he definido un valor de flag de 0x9 (Client 0x08 + SpecialInterval 0x01).
Para el servidor secundario, he definido un valor de flag de 0xa (Client 0x08 + UseAsFallbackOnly 0x02).

En cuanto al tipo de servidor, seleccionamos NTP.

Por otra parte, abrimos la directiva "Habilitar el cliente NTP de Windows" para habilitar el cliente NTP de Windows:


Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at June 05, 2017 09:56 AM

GPO: Evitar problema "La relación de confianza entre esta estación de trabajo y el dominio principal falló"

Si gestionáis un dominio de Windows, seguro que en más de una ocasión, a algún usuario se le ha mostrado el siguiente mensaje al tratar de iniciar sesión en el dominio:
"La relación de confianza entre esta estación de trabajo y el dominio principal falló"

Después de este mensaje ningún usuario del dominio puede iniciar sesión y la única solución es iniciar sesión con un administrador local de la máquina, añadir la máquina a un grupo de trabajo para sacarla del dominio (lo que nos obligará a reiniciar), para posteriormente volver a iniciar sesión con el administrador local y añadir la máquina al dominio (lo que nos volverá a obligar a reiniciar de nuevo).

Este problema puede deberse a que:
  • La password del equipo almacenada en el controlador de dominio no coincide con la password almacenada en el equipo porque se ha renovado.
  • La password del equipo ha expirado porque ha alcanzado su duración máxima (por defecto el tiempo máximo es de 30 días).
Como la renovación de las passwords de los equipos es un proceso que se realiza automáticamente y de forma transparente para el usuario, es probable que algún problema con la fecha y la hora del equipo haya motivado el error y habría que investigarlo.

Lo ideal es detectar cuál es exactamente el problema para resolverlo, pero, mientras tanto, podemos evitar que suceda este problema bajando la seguridad mediante la modificación de las siguientes directivas:
  • Miembro de dominio: deshabilitar los cambios de contraseña de cuentas de equipo.
  • Miembro de dominio: duración máxima de contraseña de cuenta de equipo. En esta directiva podemos establecer un valor entre 0 y 999 días. El valor por defecto es 30. Establecer un valor de 0, signfica que los equipos no cambien sus contraseñas. 
Ambas directivas se encuentran en:
Configuración del equipo -> Directivas -> Configuración de Windows -> Configuración de seguridad -> Directivas locales -> Opciones de seguridad


Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at June 05, 2017 08:14 AM

June 04, 2017

Blog Bitix

Usar la base de datos NoSQL MongoDB con Java

MongoDB
Java

En un artículo anterior hacía una pequeña introducción a la base de datos NoSQL MongoDB comentando sus características, como empezar a usarla con Docker y como lanzar algunos comandos para crear bases de datos y colecciones junto las operaciones básicas de inserción, actualización, eliminación y búsquedas con consultas desde la shell que ofrece MongoDB para esta base de datos que guarda documentos.

La shell sirve para hacer estas consultas pero el caso de uso principal es usarlo desde una aplicación con alguno de los lenguajes de programación para los que se proporciona un controlador. MongoDB se puede usar desde cualquiera de los lenguajes de programación más populares entre ellos Java. En este artículo muestro con un ejemplo como realizar las operaciones que utilizaba desde la shell de MongoDB pero desde una aplicación Java.

Para el ejemplo uso una aplicación Java con Spring Boot en la que hay que incluir la dependencia org.springframework.boot:spring-boot-starter-data-mongodb que proporciona el acceso a esta base de datos. Para comunicación con el servidor de MongoDB hay que crear una instancia del cliente de la base de datos, una instancia de la clase MongoClient para lo que simplemente necesitamos el host y puerto en la que está arrancado el servidor. En el caso del ejemplo localhost y el puerto de MongoDB que por defecto es 27017. Al usar Spring defino un nuevo servicio en el contenedor de dependencias y la inyecto en la clase de la aplicación para hacer uso de ella, dado lo simple que es el ejemplo en el mismo archivo de código fuente.

Los documentos en MongoDB están en formato JSON, como Java no ofrece de una sintaxis sencilla de literales de listas y mapas para el uso de documentos JSON hay que usar algunas clases de la API de MongoDB para la construcción de los documentos, para las búsquedas en las que indicaremos filtros usaremos la clase Filters, Updates para las actualizaciones y para la construcción de documentos de datos y actualizaciones Document. Con la instancia de la clase cliente que da acceso a la base de datos MongoDB desde Java se listan las bases de datos, colecciones y lanzan los comandos.

Con la referencia a una colección se realizan las operaciones de inserción de un documento, actualización del documento completo o de una parte, eliminación de un documento y búsqueda de documentos con una consulta.

La instancia del servidor de MongDB la inicio usando Docker con un archivo de Docker Compose y el comando docker-compose up. En la serie de artículos sobre Docker que escribí puedes aprender como empezar a usar Docker y adquirir un conocimiento hasta un nivel intermedio.

El resultado en la terimnal de ejecutar el ejemplo con el comando gradlew run es el siguiente donde se muestran las bases de datos, la colección users creada en el ejemplo, los usuarios de la colección y una búsqueda de un usuario, el resultado de actualizar la propiedad de un documento y finalmente el número de documentos en la colección.

Spring ofrece en su API mediante el proyecto Spring Data MongoDB algunas clases adicionales para facilitar el acceso y obtención de datos de MongoDB. Entre estas clases están MongoTemplate, MongoOperations y MongoRepository cuyo uso puede consultarse en su manual de referencia.

En el libro MongDB in Action comentan más detalladamente y de forma más completa las opciones que se pueden utilizar en el lenguaje de consulta, muchas de las opciones son equivalentes a las que son conocidas del lenguaje SQL de las bases de datos relacionales.

El código fuente completo del ejemplo puedes descargarlo del repositorio de ejemplos de Blog Bitix alojado en GitHub y probarlo en tu equipo ejecutando el comando docker-compose up && ./gradlew run.

by pico.dev at June 04, 2017 11:00 AM

Introducción a la base de datos NoSQL MongoDB

En unos pocos años las bases de datos NoSQL se han dado a conocer ampliamente. Resuelven algunas problemáticas para las que las bases de datos relacionales más longevas no proporcionan una solución totalmente satisfactoria como el escalado horizontal y un modelo de datos normalizado en varias tablas, filas y columnas predefinidas y significativamente diferente del modelo de datos usados por las aplicaciones. La base de datos NoSQL MongoDB que almacena documentos se adecua mejor a cierto tipo de requerimientos.

MongoDB

Los sistemas de información empleados tradicionalmente en las aplicaciones son las bases de datos relacionales como MySQL, PostgreSQL u otras comerciales. Las bases de datos relacionales con sus propiedades ACID seguirán usándose pero desde hace unos años están surgiendo y empleándose para algunos casos otro tipo de bases de datos conocidas como NoSQL. Dentro de las bases de datos NoSQL hay varios tipos: clave-valor, de documentos, grafos, … Dentro de la categoría de bases de datos NoSQL orientadas a almacenar documentos una de las más destacadas es MongoDB.

Al igual que las bases de datos relacionales MongoDB posee un shell JavaScript con el que lanzar todas las operaciones anteriores que junto con Docker la experimentación de todo lo anterior será una tarea no demasiado complicada. Bastará descargar la imagen de MongoDB para Docker, iniciar un contenedor, iniciar una shell bash en el contenedor y la shell de MongoDB desde la que lanzar las consultas. Siguendo la seríe de artículos sobre Docker en unas pocas horas puedes usarlo.

La base de datos MongoDB al igual que muchas NoSQL no soporta completamente las propiedades ACID de las bases de datos relacionales, no soporta transacciones aunque sí garantiza que las operaciones individuales son atómicas, pero a cambio proporciona otras propiedades que para algunas necesidades podemos considerar más adecuadas como mayor escalabilidad horizontal, alta disponibilidad, réplicas y shards para distribuir los datos entre varias instancias. MongoDB guarda la información en documentos con formato JSON.

En vez de tablas, filas y columnas los términos en MongoDB son colecciones de documentos, los documentos son la unidad mínima de información almacenable y propiedades en esos documentos. Una propiedad interesante de los documentos es que estos no tiene porque tener todos las mismas propiedades, aunque se recomienda que las propiedades sean siempre del mismo tipo. Los documentos hacen menos necesarios y complejos los ORM para convertir del modelo relacional usado en las bases de datos al modelo de objetos de la aplicación.

Se pueden almacenar los documentos anteriores en la misma colección de artículos aunque ambos no tengan las mismas propiedades, en una base de datos relacional sería más complicado y en el caso de que los datos fuesen desconocidos en el momento de definir el modelo obligaría a usar el modelo entity-atribute-value.

La información que en una base de datos relacional está en varias tablas y es necesario realizar varias consultas SQL para obtenerla en MongoDB está en un mismo documento siendo más sencilla de recuperar con la posibilidad de no estar tan normalizada y sin necesidad de hacer joins entre varias tablas. Para guardar los documentos anteriores de ejemplo en una base de datos relacional se necesitan varias tablas, una para los artículos y otras para los comentarios, etiquetas y adicionales para las relaciones N a M.

Algunas bases de datos NoSQL no necesitan del potente lenguaje de consulta SQL de las bases de datos relacionales pero MongoDB proporciona su propio lenguaje de consulta diferente a SQL pero con muchas funcionalidades similares: proyecciones, agrupaciones, filtrado, agregación, ordenación, funciones lógicas, aritméticas, para fechas, para cadenas además de operaciones para realizar inserciones, actualizaciones de un documento completo o campos individuales y eliminaciones. Para que las búsquedas y filtrados tenga buen rendimiento en colecciones de documentos grandes también se pueden crear índices.

Estas son las operaciones CRUD ejecutadas desde la shell de MongoDB en una colección de artículos.

MongoDB proporciona controladores para acceder a la base de datos desde los lenguejes de programación más populares como muestro en el artículo Usar la base de datos NoSQL MongoDB con Java.

El libro MongoDB in Action es un buen material de referencia para dominar esta base de datos NoSQL con consejos prácticos de como guardar la información y como administrar la base de datos para replicar los datos en un cluster, escalar y otros temas administrativos como crear copias de seguridad, rendimiento, seguridad o monitorización.

La base de datos PostgreSQL es una de las mejores opciones en el ámbito de las bases de datos relacionales y el potente lenguaje SQL, las propiedades ACID o el PL/pgSQL entre otras funcionalidades hará que siga siendo una de las mejores opciones para almacenar de forma persistente la preciosa información. En los casos que la escalabilidad o la estructuración de la información en documentos se un factor determinante MongoDB es una buena opción. Ambas opciones no son excluyentes, según el caso estos dos sistemas de información se podrán combinar para obtener lo mejor de cada uno de ellos.

by pico.dev at June 04, 2017 10:30 AM

June 03, 2017

Blog Bitix

Así trata Pepephone a sus clientes

Pepephone

El martes 30 de mayo Pepephone me enviaba y a todos sus clientes un correo informándome que el día anterior habían tenido una caída de servicio en el ADSL y que si había sido afectado que lo sentían. La caída del servicio había sido durante unas cuatro horas de la noche del día anterior y de la madrugada del mismo día. En mi caso por ese horario no había resultado afectado por la caída del servicio y si no llega a ser por el correo que Pepephone me envió no me hubiese enterado.

Este es el correo que Pepephone envió para informar a los clientes del ADSL y fibra de la incidencia.

Correo informativo incidencia Pepephone

Informaban de la caída del servicio junto con una breve disculpa pero también a modo de compensación y sin tener que solicitarlo un descuento en la siguiente factura por valor de un día entero del servicio aunque la incidencia solo fue durante unas horas y yo no había sido afectado, es más según explicaban en el correo posiblemente no todos los clientes habían sido afectados pero la compensación con el descuento la aplicarían a todos los clientes. Un aplauso para Pepephone por tratar así a sus clientes, lo que corresponde según la ley y algo más ya que creo que las condiciones para la compensación deben superar un importe y una duración mínima de la incidnecia. Muchas veces solo hablamos para quejarnos cuando algo no nos gusta algo pero no alabamos las cosas positivas. Aunque sería mejor que no hubiese habido caída de servicio, como se produjo la respuesta de Pepephone fue compensar a sus cliente sin que éstos lo pidan lo que es de muy agradecer.

Y la compensación no ha sido varios meses después sino en la siguiente factura que correspondía emitir unos días más tarde.

Descuento en la factura con la compensación

Esto forma de trato es una diferencia destacable de esta compañía con respecto a muchos de los otros proveedores de internet. Varias otras compañías lo que suelen hacer es sin que tu lo pidas subirte el importe de la factura ofreciendo más megas de bajada o subida, o más megas mensuales que puede que no te interesen y prefieras seguir con los mismos megas y con el mismo importe de la factura.

El ADSL de Pepephone, o de cualquier otro operador, no ofrece mucha velocidad de descarga y de subida (yo obtengo 10 MB de bajada y 1 MB de subida) pero es más que suficiente para navegar y para hacer descargas P2P vía torrent. Salvo momentos muy puntuales en los que en una descarga si quiero que vaya más rápido la velocidad del ADSL es más que suficiente. Yo no soy un usuario que realice muchas descargas y cuando las hago con la Raspberry Pi en una noche no hay nada que no pueda descargar todo lo que le eche aún a la velocidad de descarga de 1 MiB/s, no soy un usuario que descarga mucho pero si un usuario que usa internet bastante, si para mi es suficiente para usuarios que no le den tanto uso a internet también debería ser suficiente. Y si eres de los afortunados que tiene cobertura de la fibra de Pepephone es la fibra con mejor precio aún con su coste de instalación, con la menor cuota mensual posterior en unos pocos meses queda compensada.

En el artículo Eligiendo proveedor de internet, finalmente Pepephone explicaba mis motivos y comparándola con otras opciones que barajé para decidirme por un proveedor. Finalmente fue Pepephone por el precio aun con su coste de instalación al cabo de unos meses compensa siendo internet un servicio que no se cambia cada pocos meses, pero no solo fue el precio también consideré el trato que da Pepephone a sus clientes y con correos como el anterior se demuestra. Donde otros operadores te suben la factura de forma unilateral anualmente o incluso más de una vez al año sin que lo quieras Pepephone hace una compensación sin que lo pidas, para todos los clientes y por más tiempo de lo que resultó la caída del servicio.

Resulta que nos quejamos de los precios de algunos operadores o del trato que ofrecen a los clientes pero luego los usuarios siguen contratando con esas compañías cuando hay otras que tratan a sus clientes con respeto. No hacen regalos ni promociones pero ofrecen un precio ajustado y razonable y un trato respetuoso. En internet está Pepephone y en el sector de las eléctricas están empresas como HolaLuz o Pepeenergy que ofrecen energía 100% renovable y de las que también he oído hablar bien, cambiar de compañía que ofrece un servicio no se hace todos los días pero si en algún momento tienes que hacerlo considera alguna de estas u otras compañías con estos valores y no te dejes engatusar por promociones envenenadas destinadas más bien a engañar a los clientes. Como consumidores tenemos también una responsabilidad.

¿Tu proveedor de internet te trata así?

by pico.dev at June 03, 2017 10:00 AM

June 02, 2017

enavas.blogspot.com.es

Script de PowerShell para instalar actualizaciones de Windows Update mediante el módulo de PowerShell PSWindowsUpdate

El script del post anterior installwindowsupdate.ps1 instala el módulo de PowerShell PSWindowsUpdate y, una vez instalado, descarga e instala actualizaciones de Windows. Como una vez instalado lo único que vamos a necesitar va a ser realizar las actualizaciones, podríamos crear un nuevo script windowsupdate.ps1 a partir del anterior en el que tan sólo dejáramos la parte que obtiene e instala actualizaciones:

windowsupdate.ps1
Import-Module -Name PSWindowsUpdate
Get-WUInstall -WindowsUpdate -IgnoreUserInput -AcceptAll -IgnoreReboot -Verbose | Out-File C:\Windows\Temp\PSWindowsUpdate.log
Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at June 02, 2017 10:14 AM

Script de PowerShell que instala el módulo de PowerShell PSWindowsUpdate

En el post anterior, vimos como instalar el módulo de PowerShell PSWindowsUpdate. Si tenemos que instalarlo en varias máquinas, sería interesante conventirlo en un script que podamos ejecutar directamente, y, de paso, que realice la instalación de actualizaciones de Windows Update:

installwindowsupdate.ps1
Set-ExecutionPolicy RemoteSigned -Force
Install-PackageProvider NuGet -Force
Import-PackageProvider NuGet
Set-PsRepository -Name PSGallery -InstallationPolicy Trusted
Save-Module -Name PSWindowsUpdate -Path C:\Windows\System32\WindowsPowerShell\v1.0\Modules
Install-Module -Name PSWindowsUpdate
Import-Module -Name PSWindowsUpdate
Get-WUInstall -WindowsUpdate -IgnoreUserInput -AcceptAll -IgnoreReboot -Verbose | Out-File C:\Windows\Temp\PSWindowsUpdate.log
Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at June 02, 2017 09:52 AM

Instalar módulo de PowerShell PSWindowsUpdate

PSWindowsUpdate es un módulo de PowerShell que nos va a permitir gestionar las actualizaciones de Windows Update de nuestros clientes mediante PowerShell. 

Para instalarlo, no tenemos más que abrir PowerShell y ejecutar la siguiente secuencia de comandos que, por otro lado, podemos incluir en un script:
Set-ExecutionPolicy RemoteSigned -Force
Set-PsRepository -Name PSGallery -InstallationPolicy Trusted
Save-Module -Name PSWindowsUpdate -Path C:\Windows\System32\WindowsPowerShell\v1.0\Modules
Install-Module -Name PSWindowsUpdate
Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at June 02, 2017 09:28 AM

June 01, 2017

blogofsysadmins.com

Raiola Manda Y No El Panda

raiola manda y no el panda Seguro? seguro que raiola manda y no el panda? no me lo puedo creer mira que a raiola lo podemos tirar en 0.2 y entonces el panda mandaría mas que raiola. Aguantará raiola a las ostias del panda? el panda manda? Esto no es nada más que un puto …

by GhOsTi at June 01, 2017 04:04 PM

enavas.blogspot.com.es

Prestar servicio DNS en la interfaz WAN del Firewall PfSense

Como ya expliqué en un post de septiembre de 2016, tengo dividida la red del centro en varias VLAN, de manera que los equipos que se conectan vía wifi se encuentran en la VLAN 3, los equipos de infolab se encuentran en la VLAN 4 y ambos acceden a los servicios del centro en la interfaz WAN del firewall PfSense.

Para facilitar la gestión de recursos, habilité DNS Resolver en PfSense con la intención de prestar servicio de nombres en ambas VLAN. 

A raíz de un problema surgido con el servicio LDAP del servidor del centro, me ha parecido que sería interesante contar con otro servidor DNS que pudiera utilizar adicionalmente cuando lo necesite. Como ya tengo funcionando DNS Resolver en PfSense, he pensado que sería más que suficiente con hacer que DNS Resolver preste servicio DNS en la interfaz WAN también. Veamos cómo hacerlo:

Primero.- En el apartado "Network Interfaces", además de las interfaces WIFI e INFOLAB, seleccionamos la interfaz WAN para que DNS Resolver atienda peticiones DNS en dicha interfaz:


Segundo.- Creamos una regla en el firewall que permita recibir el tráfico DNS (puerto 53) en la interfaz WAN:


Tercero.- En el aparatado "Access list" de DNS Resolver creamos una regla que permita realizar consultas a los hosts de la red del centro donde está conectada la interfaz WAN:


Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at June 01, 2017 11:07 AM

DaboBlog

En el ESET Security Day 2017 con “PYMES Exposed”

ESET Security Days 2017 | Live the ExperienceEl pasado 10 de mayo tuve la oportunidad de participar en el ESET Securiy Day 2017 que se celebró en Bilbao. Ya era como la tercera vez que se me ofrecía la posibilidad de participar en un Security Day y tocaba acudir a la llamada del amigo Josep -;).

Su planteamiento inicial  fue contar cuales son los principales problemas a los que se puede exponer una PYME si no gestiona bien sus servidores, o que servicios pueden verse afectados caso de ser comprometidos.

Y después de pensar en lo que podía necesitar saber algún responsable de IT en una PYME  a la hora de contratar un alojamiento web y basándome lo que me comentaba Josep, quise dar respuesta en la medida de lo posible con esta propuesta:

En esta charla se enumerarán las amenazas a las que se enfrenta la empresa cuando externaliza los servicios de hosting, así como la problemática generada de la confusión entre los diferentes tipos de alojamiento (servidores compartidos, VPS, dedicados, Cloud, etc). Para ayudar a su comprensión se expondrán varios ejemplos basados en casos reales, uno desde el punto de vista de la seguridad web y el acceso a información no autorizada, y el otro más orientado a la continuidad de negocio, o más bien la discontinuidad por una falta de disponibilidad del servidor web en un momento clave para la empresa.

También hablé de WordPress y el peligro de no tener las versiones actualizadas (aquí podéis ver info de releases según ramas), de ataques DDoS y UFONet (muy recomendable), metodologías como OWASP y su Top 10 pensando en un desarrollo lo más seguro posible desde el inicio y de otras cuestiones relacionadas.

Tuve la ocasión de compartir ponencias con gente tan profesional como el propio Josep Albors, Carlos Tortosa, Ignacio Lassa Bellet, Mónica Valle, Pablo F. Burgueño, Garikoitz Merino y todo el equipazo de ESET que se desplazó a Bilbao a quien mando un fuerte abrazo y por ese gran trato y cercanía que tuvieron en todo momento. Aquí tenéis los vídeos de la jornada y aquí enlazo al de mi intervención.

La entrada En el ESET Security Day 2017 con “PYMES Exposed” aparece primero en DaboBlog.

by David Hernández (Dabo). at June 01, 2017 09:05 AM

enavas.blogspot.com.es

Instalar libarchive-zip-perl para disponer de la herramienta crc32 en Debian Jessie

Llevamos ya un tiempo utilizando el servidor ldap con configuración OLC.

Se supone que con OLC no debemos modificar manualmente los archivos de configuración, pero, en ocasiones, puede que por alguna razón necesitemos hacerlo. En ese caso, cuando realicemos una operación con ldap, nos encontraremos con un error similar al siguiente:
54f983e8 ldif_read_file: checksum error on "/etc/ldap/slapd.d/cn\=config.ldif"
(...)
Donde vemos que hay un error de CRC en el archivo que hemos editado manualmente. Para solucionar el problema, necesitaremos la herramienta crc32 que se encuentra disponible en el paquete libarchive-zip-perl. Así que lo instalaremos:
# apt-get -y install libarchive-zip-perl
Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at June 01, 2017 08:07 AM

May 31, 2017

Entre Dev Y Ops

Podcast 25: Cómo organizar con éxito un evento como PyData Barcelona 2017

EDyO Podcast

Ya tenéis disponible el episodio 25 de nuestro podcast donde hablamos sobre la organización del PyData Barcelona 2017.

Comentar que se nos quedó en el tintero el tema de la diversidad, sobre lo que se detalla más información en este artículo. También os facilitamos los enlaces que hemos comentamo durante el episodio.

Leer más… (1 min remaining to read)

by Ignasi Fosch at May 31, 2017 11:00 PM

enavas.blogspot.com.es

Ejecutar script de Powershell desde la consola de Windows

Podemos ejecutar un script de PowerShell directamente desde la consola de windows (cmd) de la siguiente manera:
C:\WINDOWS\system32> powershell -File windowsupdate.ps1
Donde windowsupdate.ps1 es el script de powershell que queremos ejecutar.

Es importante destacar que, por seguridad, la ejecución de scripts se encuentra deshabilitada por defecto, para evitar ejecutar accidentalmente código malicioso en nuestro sistema. No obstante, Windows permite establecer tres posibles políticas de ejecución de scripts:
  • AllSigned.
  • RemoteSigned.
  • Unrestricted.
La directiva AllSigned requiere que todos los scripts y archivos de configuración estén firmados por un editor de confianza, incluidos los scripts que se escriban en el equipo local. 

La directiva RemoteSigned requiere que todos los scripts y archivos de configuración descargados de Internet estén firmados por un editor de confianza, pero no requiere firmas digitales en scripts ejecutados desde el equipo local.

En cuanto a la directiva Unrestricted, permite ejecutar todos los scripts sin necesidad de que hayan sido firmados por un editor de confianza. 
Para consultar qué política se encuentra establecida en nuestro equipo en un momento determinado, podemos ejecutar:
C:\WINDOWS\system32> powershell Get-ExecutionPolicy
AllSigned
Y para establecer una política, por ejemplo, RemoteSigned:
C:\WINDOWS\system32> powershell Set-ExecutionPolicy RemoteSigned
Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at May 31, 2017 04:22 PM

May 30, 2017

enavas.blogspot.com.es

GPO: Eliminar perfiles de usuario con una antigüedad superior al número de días especificado al reiniciar el sistema

Podemos utilizar la directiva "Eliminar perfiles de usuario con una antigüedad superior al número de días especificado al reiniciar el sistema" para hacer limpieza en Windows eliminando perfiles de usuario locales que no se hayan usado durante un número determinado de días. Esta directiva se encuentra accesible en:

Configuración del equipo -> Directivas -> Plantillas administrativas -> Sistema -> Perfiles de usuario -> Eliminar perfiles de usuario con una antigüedad superior al número de días especificado al reiniciar el sistema

Una vez seleccionada la directiva, la habilitamos y especificamos el número de días de antigüedad:

Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at May 30, 2017 08:44 AM

Instalar OpenSSH en Windows mediante Chocolatey

Para los que trabajamos habitualmente en Linux, es importante disponer del servicio ssh en Windows porque nos va a permitir conectarnos a nuestros clientes del mismo modo que nos conectamos a los clientes Linux. Ésto es algo muy sencillo de conseguir si utilizáis chocolatey:
C:\Windows\System32> choco install openssh -params '"/SSHServerFeature"'
Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at May 30, 2017 08:00 AM

May 28, 2017

RooTeando

Ficheros Hook en Virtualenvwraper

Virtualenvwrapper es un conjunto de extensiones de virtualenv que permite tener un entorno aislado por cada proyecto, con sus paquetes y configuración.

Dentro de esta herramienta existen una serie de ficheros denominados Hook, que se activan cuando ocurren una determinada acción, cada fichero esta relacionado con una acción. Estos ficheros pueden contener una serie de comandos que seran ejecutados cuando sean activados.

Estos ficheros tienen dos ambitos:

  • Ámbito global: dentro de la carpeta .virtualenvs ...

May 28, 2017 06:00 PM

Blog Bitix

Introducción a la base de datos relacional PostgreSQL

De todas las funcionalidades que tiene SQL muchos desarrolladores solo usamos un pequeño conjunto de las posibilidades del lenguaje. Algunas bases de datos no implementan muchas posibilidades del lenguaje SQL y no son usables en esos sistemas, PostgreSQL es una de las bases de datos relacionales que mejor soporta el estándar ANSI-SQL. Conociendo sus posibilidades podremos implementar funcionalidades de forma más sencilla o con mejor rendimiento.

PostgreSQL

Aún con el reciente auge de las bases de datos NoSQL las bases de datos relacionales siguen siendo la opción usada mayoritariamente para persistir los datos de una aplicación. El potente lenguaje SQL permite obtener, modificar, insertar y eliminar datos de forma declarativa. Una característica deseada de las bases de datos relacionales es la de mantener con transacciones la integridad referencial y consistencia de los datos en todo momento que las bases de datos NoSQL no ofrecen aunque estas últimas a cambio ofrecen mejores opciones para escalar. Por otro lado los datos ya sean en una base de datos relacional o NoSQL seguirán un esquema aunque en este último caso no se exija, las bases de datos relacionales al exigir que los datos sigan un esquema evitará inconsistencias y los tipos de los datos serán los definidos en la tabla de datos en las que se guarden.

De las bases de datos relacionales más utilizadas que tienen una licencia de software libre están MySQL, MariaDB y PostgreSQL, con licencia privativa y comerciales están Microsoft SQL Server, Oracle y DB2 siendo su coste significativo en algunos casos solo alcanzable por grandes organizaciones. PostgreSQL con su licencia de software libre es una de las bases de datos más avanzadas soportando muchas de las opciones definidas en el estándar del lenguaje SQL.

Muchos desarrolladores conocemos las opciones básicas del lenguaje SQL, las sentencias insert, update, delete y select, sin embargo las últimas versiones del lenguaje SQL añade muchas posibilidades que quizá desconozcamos. PostgreSQL por ejemplo soporta inserciones de múltiples filas en una misma sentencia, actualización o inserción con la sentencia upsert, window functions, common table expressions o consultas recursivas. PostgreSQL además tiene un sistema de tipos avanzado pudiendo definir tipos de datos personalizados y funciones sobre esos tipos asi como herencia que son motivos por los cuales se autodenomina una base de datos object-relational.

Veamos algunos ejemplos de estas características del lenguaje SQL y que PostgreSQL soporta siendo una de las bases de datos relacionales más ANSI-SQL compliant. Para los casos demostrativos de las sentencias SQL usaré una base de datos de ejemplo con unas pocas tablas y datos sobre ciudades, países, población y lenguajes obtenida de PgFoundry Sample Databases, hay varias en concreto usaré la base de datos world. En la página de bases de datos ejemplo para PostgreSQL hay otras.

Para una fácil instalación de una instancia de la base de datos PostgreSQL usaré Docker con la que una vez terminados los ejemplos se puede eliminar sin dejar ningún rastro. Si aún no has usado Docker puedes leer la serie de artículos sobre Docker que he escrito.

Instalación PostgreSQL con Docker

Una vez instalado Docker e iniciado su servicio y con el comando docker-compose y el archivo docker-compose.yml que contiene la definición del contenedor lo iniciamos con el comando docker-compose up. El comando docker ps lista los contenedores en ejecución y con el comando docker exec iniciamos un proceso bash en el contenedor indicado con su identificativo.

Comandos básicos del shell psql

El shell de psql usa varios comandos precedidos por una contrabarra para interpretar algunos comandos muy útiles como listar las bases de datos, cambiar de base de datos de trabajo, listar las tablas de una base de datos, mostrar la definición de una tabla para saber sus campos y tipos o salir del shell. Los siguientes son solo unos pocos de los disponibles.

  • \l: lista las bases de datos de la instancia de PostgreSQL.
  • \connect [database]: cambia de base de datos actual de trabajo.
  • \dt: lista las tablas de la base de datos actual de trabajo.
  • \d+ [table]: muestra la definición de una tabla de la base de datos actual de trabajo.
  • \q: sale del intérprete de comandos del shell de PostgreSQL.

  • psql shell

Importación base de datos de ejemplo

Antes de lanzar sentencias SQL hay que crear una base de datos con varias tablas y datos, en este caso usando una base de datos de ejemplo que se descarga con el comando wget, se descomprime, se crea un nuevo esquema y se importan las tablas y datos, finalmente se listas las definiciones de las tablas.

Para probar que la base de datos se ha importado correctamente la siguiente sentencia SQL lista el número de ciudades por país ordenados alfabéticamente o por número de ciudades descendentemente.

Para algunas sentencias usaré una base de datos un poco más sencilla que con una tabla para almacenar empresas.

Inserción múltiple

Si insertamos muchos datos en una misma tabla podemos insertarlos en una única sentencia en vez de múltiples para un mejor rendimiento, evitando enviar al servidor mútiples sentencias individuales.

UPSERT

En algún caso quizá tengamos la necesidad de hacer un insert y si el registro ya existe hacer un update. Usando la expresión ON CONFLICT UPDATE conocida como UPSERT podemos hacer esta operación que nos evitará hacerlo de forma programática en la aplicación.

En el ejemplo, se hace una insert de la empresa Canonical, en el segundo caso como esta empresa ya está creada y hay una restricción en el nombre para que sea único se realiza un update y se actualiza su número de empleados pero no se inserta un nuevo registro duplicado.

Common table expressions

Las cláusula WITH que define las common table expressions o CTE proporcionan una forma de escribir sentencias auxiliares para su uso en una sentencia más grande. Cada sentencia auxiliar de una cláusula WITH puede ser un SELECT, INSERT, UPDATE o DELETE y la sentencia primaria asociada a la cláusula WITH también puede ser un SELECT, INSERT, UPDATE o DELETE.

Window functions

Las window functions realizan cálculos sobre un conjunto de datos que están relacionados de alguna forma con la fila actual. Al contrario que las funciones de agregación el cálculo de las window functions no causan que las filas se agrupen en una única fila manteniéndose como filas separadas.

Usando la base de datos world que contienen ciudades y países con sus poblaciones con la siguiente consulta SQL se obtienen las tres ciudades más pobladas de Alemania, España, Francia e Italia con su porcentaje respecto al total del país. En este caso Berlín es la ciudad más poblada de Alemania con aproximadamente el 12% de la población de ese país. En este caso además de usar windows functions se usa una Common Table Expressions con la cláusula WITH.

Consultas recursivas

El modificador RECURSIVE cambia la sentencia WITH de una conveniencia sintáctica en una funcionalidad que proporciona algo que no sería posible con el SQL que soporta algunas otras bases de datos. Usando RECURSIVE, una cláusula WITH puede referenciar su propia salida. Con esta cláusula las relaciones jerárquicas pueden implementarse sin usar otras soluciones más complejas.

Tipo array, enumerado

Con la ayuda de los arrays podemos definir una columna con un conjunto de valores que en casos simples nos evitarán crear una tabla con una relación 1 a N. Además, con las funciones asociadas a los arrays podemos definir una columna con un conjunto de valores cuyos valores no se repitan o si la lista es un conjunto limitados de valores con un enumerado.

Tipo personalizado

En PostgresSQL se pueden definir nuevos tipos de datos así como nuevas funciones sobre estos tipos de datos. Una vez definidos las columnas de las tablas pueden hacer uso de ellos. Pueden ser:

  • Compuestos: están formados por una lista de nombres de atributos y tipos.
  • Enumerados: son una lista de una o más etiquetas.
  • Rangos
  • Base
  • Arrays: las columnas de una tabla se pueden definir como un array multidimensional de longitud variable. Se pueden crear arrays de cualquier de los tipos incorporados por defecto y de los tipos base, enumerados y compuestos.

Creando tipos de datos personalizados se evita crear en las tablas varios campos de tipos básicos individuales pero relacionados y estos tipos se pueden reutilizar en la definición de varias tablas.

Índices

Los índices cuando son utilizados son una forma que mejora enormemente el rendimiento de una consulta. Permiten buscar y obtener filas específicas mucho más rápido que sin un usar un índice.

Índice parcial

Un índice parcial es un índice construido sobre un subconjunto de una tabla, el subconjunto es definido por una expresión condicional. El índice contiene entradas solo para las filas de la tabla que satisfacen el predicado.

La motivación de los índices parciales es evitar indexar valores comunes. Dado que una búsqueda para un valor común no usará el índice de todas maneras no hay necesidad de mantener esas filas en el índice. Esto reduce el tamaño del índice que hará más rápidas aquellas consultas que lo usen así como las actualizaciones de la tabla ya que no será necesario actualizarlo en todos los casos.

Índices multicolumna

Un índice puede ser definido sobre más de una columna de una tabla. Son apropiados cuando hay consultas con predicados por las dos columnas del índice.

Restricciones, Constraints

Los tipos de datos son una forma de limitar los tipos de datos que pueden ser almacenados en una tabla. Para muchas aplicaciones las restricciones que proporcionan son demasiado simples. Por ejemplo, una columna que contenga el precio de un producto debería aceptar solo valores positivos. Pero no hay un tipo de datos que acepte solo números positivos. Otro problema es que quizá deseemos restringir el dato de una columna respecto a otras columnas o filas. Por ejemplo, en una tabla que contenga información de un producto el número del producto debería ser único.

SQL permite definir restricciones en columnas y tablas proporcionando el control sobre los datos que deseamos. Si se intentan almacenar datos en una columna que viola una restricción se lanza un error.

Tipos de tablas

Si se especifica en la creación de la tabla TEMPORARY o TEMP esta es creada con una tabla temporal que es eliminada al final de la sesión u opcionalmente al finalizar la transacción actual. Si se especifica UNLOGGED es creada como no trazable haciendo que los datos escritos en la tabla no sean escritos en el write-ahead log que lo hace considerablemente más rápido que las tablas ordinarias. Sin embargo, no son seguras ante fallos.

PL/pgSQL

PostgreSQL al igual que otras bases de datos ofrece un lenguaje procedural que puede ser usado para crear procedimientos de funciones o triggers, añadir estructuras de control al lenguaje SQL, realizar cálculos complejos, hereda todos los tipos de usuario, funciones y operadores, puede ser definido como de confianza por el servidor y es fácil de usar. El lenguaje sql es fácil de aprender y es común a las bases de datos relacionales pero cada sentencia SQL debe ser ejecutada individualmente por el servidor. Esto significa que la aplicación cliente debe enviar cada sentencia al servidor, esperar a que sea procesada, recibir y procesar los resultados, realizar algún cálculo y entonces enviar más sentencias al servidor. Todo esto incurre en comunicación entre procesos y de red si el cliente está en una máquina diferente del servidor de base de datos.

Con PL/pgSQL se puede crear un bloque de computación y una serie de sentencias SQL dentro del servidor de base de datos, tiendo el poder de un lenguaje procedural y la facilidad de SQL pero con un considerable ahorro de comunicación entre cliente y servidor. Las ventajas son evitar viajes entre el servidor y el cliente, resultados inmediatos que no son necesarios convertir y transferir entre el cliente y servidor y múltiples pasos de procesado de las sentencias son evitados. Todo esto resulta en algunos casos un incremento de rendimiento considerable comparado con una aplicación que no usa procedimientos almacenados.

Otras

Otros elementos que soporta la base de datos PostgreSQL en el lenguaje SQL son Grouping Sets, ROLLUP, CUBE, Set Returning Functions, tablefunc, búsquedas a texto completo que para casos sencillos no hace falta recurrir a soluciones más especializadas como Elasticsearch, selección y bloqueo de filas con la clásula FOR UPDATE, vistas y vistas materializadas entre seguro otras muchas cosas de las que me olvido o desconozco.

Por todas estas características se considera a PostgreSQL una de las bases de datos relacionales más avanzadas existentes. Hay mucha literatura sobre las bases de datos relacionales desde el lenguage SQL en general, libros específicos sobre PostgreSQL o como evitar errores diseño al estructurar la información en tablas y columnas.

En caso de optar por una base de datos NoSQL para persistir la información la base de datos NoSQL MongoDB permite guardar los datos en forma de documentos y conseguir la escalabilidad que las bases de datos relacionales con sus propiedades ACID es difícil.

by pico.dev at May 28, 2017 10:00 AM

May 24, 2017

enavas.blogspot.com.es

Administrar extensiones de Gnome Shell en portablet Vexia

Todos los nuevos equipos de nuestros centros llevan montado Ubuntu Trusty con entorno de escritorio XFCE4, excepto los portablets Vexia, en los que instalaron Ubuntu Xenial con entorno de escritorio GNOME SHELL, motivado porque estos últimos dispositivos tienen pantalla táctil.

Los portablets Vexia tienen instaladas una serie de extensiones de Gnome Shell que modifican el comportamiento y la funcionalidad del escritorio. Pues bien, para instalar y gestionar estas extensiones, podemos instalar una extensión en Firefox y/o Google Chrome que permite la integración de GNOME SHELL con el repositorio de extensiones https://extensions.gnome.org/


Aquí podéis ver una imagen de la extensión instalada en Google Chrome:


Y en Firefox:

Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at May 24, 2017 06:49 PM

May 23, 2017

enavas.blogspot.com.es

Obtener la clave de Windows OEM mediante Windows OEM Product Key Tool

Los nuevos equipos con Windows ya no traen una pegatina con la clave de instalación. En lugar de ésto, incorporan la clave en la BIOS o EFI. 

Para obtener la clave de instalación de un equipo Windows con licencia OEM, podemos utilizar la herramienta Windows OEM Product Key Tool.


Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at May 23, 2017 04:08 PM

Quitar mensaje: Modo de Prueba | Windows 10

Es posible que en alguna ocasión hayáis visto el siguiente mensaje en la esquina inferior derecha de vuestro escritorio Windows:


Para eliminarlo, abrimos como administrador la herramientas de símbolo de sistema de Windows cmd y ejecutamos el siguiente comando: bcdedit -set TESTSIGNING OFF




Una vez hecho ésto, reiniciamos el equipo y listo.
Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at May 23, 2017 03:44 PM

Entre Dev Y Ops

Podcast 24: Especial WannaCry

EDyO Podcast

Ya tenéis disponible el episodio 24 de nuestro podcast donde hablamos sobre el virus WannaCry.

A continuación os facilitamos los enlaces que hemos comentamo durante el episodio.

Leer más… (1 min remaining to read)

by David Acacio at May 23, 2017 11:30 AM

May 22, 2017

josedomingo.org

Curso de infraestructura Cloud con OpenStack. Universidad de Almería

La pasada semana, junto a mi compañero @alberto_molina hemos impartido en la Universidad de Almería, un curso sobre infraestructura Cloud, donde hemos tratado temas como la instalación automática y la administración de OpenStack, y la relación entre OpenStack y los contenedores, centrándonos principalmente en Kubernetes. Puedes acceder al curso completo en la siguiente dirección:

Curso de infraestructura Cloud con OpenStack. Universidad de Almería

Introducción

Instalación automática de OpenStack

Contenedores en OpenStack

Otros

by admin at May 22, 2017 06:41 AM

May 21, 2017

Blog Bitix

Sobre el ataque de ransomware que ha sufrido Telefonica y otras empresas

Microsoft
Windows 10

El día 12 de mayo de 2017 se produjo un ataque informático de tipo ransomware que afectó a varias empresas entre ellas Telefonica. El ataque se aprovecha de una vulnerabilidad conocida en los sistemas con el sistema operativo Windows no parcheados y vulnerables y para la cual Microsoft ya había publicado un parche de seguridad que la corregía. El programa ransomware WannaCry era extremadamente peligroso ya que cifra los archivos y documentos locales o en unidades a las que tuviese acceso el sistema afectado solicitando para recuperarlos 300 dólares en bitcoins.

La peligrosidad de este ransomware radica en que cifra los datos que es una de las cosas más importantes de un sistema, también causa que el sistema deje de prestar su servicio con los quebrantos que puede ocasionar si el buen funcionamiento del sistema es crítico en una empresa. Una vez un sistema es corrompido la forma de no ser víctima de la extorsión para recuperar los archivos es a través de una copia de seguridad una vez reinstalado Windows.

Captura del ransomware WannaCry en un sistema infectado

El programa ransomware se introduce en los los sistemas aún vulnerables conectados a internet o porque un usuario lo activa por ejemplo mediante un clic en un correo electrónico en un sistema interno no conectado directamente a internet. Una vez un sistema es infectado se transmite al resto de equipos vulnerables a los que tenga acceso de la red local, multiplicando el problema.

Unos dicen que el problema es de Windows pero al ser un sistema operativo mayoritario este es más interesante de atacar por los delincuentes informáticos. También en defensa de Windows unos dicen que Microsoft ya publicó un parche de seguridad que lo resolvía y que la culpa es de las empresas que no los mantiene actualizados pero no es tan sencillo, algunos sistemas son críticos o desempeñan funciones importantes por los que una actualización que cause problemas no es plausible ya que genera problemas y costes entre otras cosas, la opción es mantenerlos desactualizados hasta que las actualizaciones se comprueben que no causan problemas.

Son numerosos los medios que se han hecho eco del acontecimiento tecnológico de esa semana:

Quizá alguien piense que un sistema con GNU/Linux hubiese sido distinto pero no, un sistema GNU/Linux desactualizado es igual de vulnerable, por el hecho de ser GNU/Linux no es más seguro. Lo que hay que implementar son procedimientos y aplicar medidas para evitar estos fallos de seguridad y para minimizar las vulnerabilidades de los sistemas cualquiera que sea el sistema utilizado. A pesar de lo anterior una muestra de la seguridad que ofrece GNU/Linux que hay que destacar es que es un sistema utilizado en una gran mayoría de servidores importantes de los que ofrecen servicios en internet u otros servicios críticos, correctamente configurados y mantenidos funcionando de forma segura.

En unas empresas y sociedad cada vez más dependientes de la tecnología un ataque como este puede causar importantes daños como ha sido en el caso del sistema de salud británico, en empresas como en el mismo caso de Telefonica ha obligado a apagar sistemas para evitar la propagación y preventivamente males mayores impidiendo trabajar con normalidad a un importante número de empleados de la empresa. El ataque de WannaCry es una advertencia de lo que puede provocar un caso peor en el futuro, y este ransomware cuando actúa es evidente que se está sufriendo, otros ataques menos notorios pueden pasar inadvertidos. Algo que ocasionará lo sucedido es que se dedicarán más recursos a la seguridad.

GNU/Linux es un sistema más abierto y público que Windows, su código fuente está disponible para ser analizado por cualquiera con los conocimientos de programación suficientes y cuando un fallo de seguridad es descubierto el parche de seguridad es publicado no mucho tiempo más tarde sin depender de los intereses de una única empresa. Windows al ser más cerrado y desarrollado por una empresa que tiene su control absoluto, del cual dependen otras empresas y organizaciones gubernamentales, algunos fallos de seguridad son ocultados pero explotables hasta que son resueltos por el parche de seguridad.

Pero sin duda en cualquiera de los dos sistemas operativos el usuario o administrador del sistema es una pieza clave para mantener su seguridad como comento en el artículo Distribuciones GNU/Linux, ¿más seguras que Windows?.

by pico.dev at May 21, 2017 09:45 AM

May 20, 2017

Blog Bitix

Sobre el anuncio de Shuttleworth de abandonar Unity y Mir y volver a GNOME en Ubuntu

Ubuntu
Canonical

Hace unas semanas el fundador de Ubuntu, Mark Shuttleworth, una de las distribuciones más populares de GNU/Linux publicaba que abandona dos de sus proyectos más conocidos, la interfaz Unity y el servidor gráfico Mir. Uno de ellos la interfaz Unity en favor de GNOME que se materializará en la siguiente versión de Ubuntu, la 17.10 o 18.04 LTS. Al mismo tiempo daba a conocer que abandonaba el desarrollo de su servidor gráfico Mir en favor de su alternativa y más aceptada en la comunidad Wayland.

El abandono de un proyecto no es nada nuevo en el software libre o en el software a secas, unos tienen éxito y otros perecen y volverá a pasar en el futuro. En cualquier caso queda claro que Ubuntu, Canonical o Shuttleworth no han tenido éxito para continuar y finalizar el desarrollo de Mir, un motivo porque su desarrollo requiere gran esfuerzo en desarrolladores dedicados y también económicamente que no le deben sobrar. Tampoco ha sido un proyecto aceptado por la comunidad, finalmente el vencedor a sido GNOME y Wayland más apoyados por RedHat empresa con gran éxito a nivel empresarial, al igual que pasó con el sistema de inicio Upstart abandonado en favor de systemd y en el futuro quien sabe si pasará algo parecido con la forma de distribuir software con snaps y su equivalente Flatpak. Tampoco, lo que no ha conseguido Shuttleworth es tener el apoyo de la comunidad e incluir en sus desarrollos al resto de empresas del mundo del software libre como RedHat.

Creo que Shuttleworth tiene razón para apostar por la convergencia ya que coincido en que la convergencia será la siguiente disrupción tecnológica y la empresa que primero consiga implementarla con éxito tendrá una ventaja sobre el resto y estará en la mejor posición para dominar el mercado tecnológico durante la siguiente década. La que llegue tarde corre peligro de perder gran parte de su relevancia o incluso desaparecer del primer plano como le sucedió a Nokia con la llegada de los smartphones por parte de Apple o con la llegada tardía de Microsoft con su sistema operativo para estos dispositivos sin éxito y con una cuota de mercado mínima. Parece que Microsoft está bien posicionada en este caso para la convergencia y ya se están publicando algunos artículos indicando que los procesadores basados en ARM como es el Snapdragon 835 serán capaces de ejecutar Windows 10 y programas x86 vía emulación con un rendimiento satisfactorio, en el momento que esto se comercialice incluso el dominio de Intel en el mercado de procesadores puede verse amenazado.

La apuesta de Unity en Ubuntu como entorno de escritorio por defecto no ha sido bien acogido por sus usuarios y una buena cantidad de ellos han migrado a distribuciones como Linux Mint que debe en gran parte a su éxito al no éxito de Unity y en otra parte a las críticas que recibió en su día GNOME. La vuelta a GNOME que inicialmente era un escritorio aún inmaduro, ya desde 3.18 añadió multitud funcionales y realizado una gran mejora que puede convencer a alguno de sus antiguos usuarios a regresar a Ubuntu. En las últimas versiones de GNOME se van puliendo detalles de menor importancia que en anteriores versiones pero haciendo cada vez más de GNOME un escritorio muy completo y bien integrado.

Otro de los motivos que se ha comentado es que Shuttleworth quiere que su empresa empiece a cotizar el bolsa y para mejorar su valoración los inversores considerarían en mejor grado deshacerse de los proyectos que no tiene éxito para centrarse en las áreas que sí como el internet de las cosas y la computación en la nube.

Aunque Canonical haya abandonado estos dos proyectos hay que reconocerle su trabajo para intentar innovar y liderar con dos proyectos que hubiesen contribuido a Linux y el software libre al igual que hay que agradecerle a popularizar aún más Linux con Ubuntu. En cualquier caso parece que los proyectos continuarán por parte de la comunidad pero ahora sin el apoyo oficial de Canonical.

by pico.dev at May 20, 2017 09:45 PM

joseangelfernandez.es

Winter IoT coming! Auroras Boreales en tu casa directamente desde el polo

Un año más se ha celebrado en Madrid una nueva edición del Global Azure Bootcamp. En esta ocasión hemos tenido el lujo de contar con el proyecto del Instituto de Astrofísica de Canarias para analizar la vida secreta de las galaxias. Si tenéis curiosidad sobre el proyecto tenéis disponible la sesión que impartieron el equipo del IAC e Intelequia al respecto de cómo se había montado el laboratorio.

Como en otras ocasiones, Iria y yo nos animamos a presentar una sesión. En esta ocasión, a diferencia de las anteriores, no fue sobre un producto o tecnología en concreto sino que nos enfocamos en cómo implementar una idea con los diferentes servicios que Azure pone a nuestra disposición. Si tienes curiosidad, aquí os dejo la descripción de la sesión y la grabación gracias al equipo de DX.

“Las Auroras Boreales son un fenómeno difícil de predecir, empiezan y acaban de forma rápida con pocos minutos de margen para disfrutar de ellas. Por lo tanto, un termo de café caliente y una buena ropa de abrigo son las mejores herramientas para superar las gélidas noches nórdicas en busca y captura de ellas. ¿No sería mejor podes disfrutar de ellas desde el calorcito de tu casa?
En esta sesión veremos cómo a través de Azure podremos construir un sistema que nos permita disfrutar de las Auroras Boreales en nuestra habitación con un poco de serverless computing e IoT.
¿Te vienes a verlas con nosotros?”

by jafernandez at May 20, 2017 11:45 AM

May 19, 2017

enavas.blogspot.com.es

Instalar paquetes mediante Chocolatey a través de un proxy de nuestra red

Como ya vimos en posts anteriores es muy sencillo instalar y mantener actualizada una gran cantidad de software en Windows mediante Chocolatey.


Para instalar un paquete en concreto, tan sólo tenemos que utilizar el comando choco install al que pasaremos el nombre del paquete:
C:\> choco install mls-software-openssh
Chocolatey detectará el proxy de nuestra red y lo usará para instalar los paquetes que le pidamos. Ahora bien, en un momento determinado, es posible que nos interese especificar otro proxy diferente del proxy por defecto. Por ejemplo:
C:\> choco install mls-software-openssh --proxy=recursos:3128
Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at May 19, 2017 08:21 AM

May 18, 2017

enavas.blogspot.com.es

WSUS Offline Update: Solucionar problema de timeout en script DoUpdate.cmd

En mi centro utilizo WSUS Offline Update para descargar las actualizaciones de Windows y Office e instalarlas de forma local, lo que reduce el tiempo de actualización  y el consumo de ancho de banda.

Para descargar las actualizaciones, se utiliza un script que se ejecuta una vez a la semana en el servidor de almacenamiento mediante cron.

Para actualizar los clientes se utiliza un script Doupdate.cmd que se encuentra en el directorio wsusoffline/client/cmd/.

Pues bien, actualizando clientes, observé que tanto al detener el servicio wuauserv, como al iniciarlo o esperar a que estuviera iniciado, siempre se alcanzaba el timeout, lo que retardaba la ejecución un tiempo extra de 180s + 60s.

Esta mañana me puse a ver el código y descubrí dónde estaba el problema: El script está pensado para obtener el estado del servicio filtrando por la palabra "STAT".  Ahora bien, como nuestro sistema se encuentra en español, esa condición no se produce y estaremos esperando hasta que se agote el tiempo definido en el script.
La forma más sencilla de solucionar el problema es cambiar la palabra "STAT" por "ESTADO".

Aquí tenéis la parte del script donde hay que realizar las modificaciones:
:WaitService
echo Waiting for service '%1' to reach state '%2' (timeout: %3s)...
echo %DATE% %TIME% - Info: Waiting for service '%1' to reach state '%2' (timeout: %3s)>>%UPDATE_LOGFILE%
echo WScript.Sleep(2000)>"%TEMP%\Sleep2Seconds.vbs"
for /L %%i in (2,2,%3) do (
for /F "tokens=4" %%j in ('%SystemRoot%\System32\sc.exe query %1 2^>nul ^| %SystemRoot%\System32\find.exe /I "STAT"') do (
if /i "%%j"=="%2" (
echo %DATE% %TIME% - Info: Service '%1' reached state '%2'>>%UPDATE_LOGFILE%
del "%TEMP%\Sleep2Seconds.vbs"
goto :eof
)
)
%CSCRIPT_PATH% //Nologo //B //E:vbs "%TEMP%\Sleep2Seconds.vbs"
)
echo Warning: Service '%1' did not reach state '%2' (timeout occured)
echo %DATE% %TIME% - Warning: Service '%1' did not reach state '%2' (timeout occured)>>%UPDATE_LOGFILE%
del "%TEMP%\Sleep2Seconds.vbs"
verify other 2>nul
goto :eof


:StopWUSvc
for /F "tokens=4" %%i in ('%SystemRoot%\System32\sc.exe query wuauserv 2^>nul ^| %SystemRoot%\System32\find.exe /I "STAT"') do (
if /i "%%i"=="STOPPED" goto :eof
)
echo Stopping service 'Windows Update' (wuauserv)...
echo %DATE% %TIME% - Info: Stopping service 'Windows Update' (wuauserv)>>%UPDATE_LOGFILE%
%SC_PATH% stop wuauserv >nul 2>&1
if errorlevel 1 (
echo Warning: Stopping of service 'Windows Update' ^(wuauserv^) failed.
echo %DATE% %TIME% - Warning: Stopping of service 'Windows Update' ^(wuauserv^) failed>>%UPDATE_LOGFILE%
) else (
call :WaitService wuauserv STOPPED 30
if not errorlevel 1 echo %DATE% %TIME% - Info: Stopped service 'Windows Update' ^(wuauserv^)>>%UPDATE_LOGFILE%
)
goto :eof


:StartWUSvc
for /F "tokens=4" %%i in ('%SystemRoot%\System32\sc.exe query wuauserv 2^>nul ^| %SystemRoot%\System32\find.exe /I "STAT"') do (
if /i "%%i"=="RUNNING" goto :eof
)
echo Starting service 'Windows Update' (wuauserv)...
echo %DATE% %TIME% - Info: Starting service 'Windows Update' (wuauserv)>>%UPDATE_LOGFILE%
%SC_PATH% start wuauserv >nul 2>&1
if errorlevel 1 (
echo Warning: Starting of service 'Windows Update' ^(wuauserv^) failed.
echo %DATE% %TIME% - Warning: Starting of service 'Windows Update' ^(wuauserv^) failed>>%UPDATE_LOGFILE%
) else (
call :WaitService wuauserv RUNNING 30
if not errorlevel 1 echo %DATE% %TIME% - Info: Started service 'Windows Update' ^(wuauserv^)>>%UPDATE_LOGFILE%
)
goto :eof
Y aquí tenéis esa parte del script en la que he cambiado la palabra "STAT" por "ESTADO":

:WaitService
echo Waiting for service '%1' to reach state '%2' (timeout: %3s)...
echo %DATE% %TIME% - Info: Waiting for service '%1' to reach state '%2' (timeout: %3s)>>%UPDATE_LOGFILE%
echo WScript.Sleep(2000)>"%TEMP%\Sleep2Seconds.vbs"
for /L %%i in (2,2,%3) do (
for /F "tokens=4" %%j in ('%SystemRoot%\System32\sc.exe query %1 2^>nul ^| %SystemRoot%\System32\find.exe /I "ESTADO"') do (
if /i "%%j"=="%2" (
echo %DATE% %TIME% - Info: Service '%1' reached state '%2'>>%UPDATE_LOGFILE%
del "%TEMP%\Sleep2Seconds.vbs"
goto :eof
)
)
%CSCRIPT_PATH% //Nologo //B //E:vbs "%TEMP%\Sleep2Seconds.vbs"
)
echo Warning: Service '%1' did not reach state '%2' (timeout occured)
echo %DATE% %TIME% - Warning: Service '%1' did not reach state '%2' (timeout occured)>>%UPDATE_LOGFILE%
del "%TEMP%\Sleep2Seconds.vbs"
verify other 2>nul
goto :eof


:StopWUSvc
for /F "tokens=4" %%i in ('%SystemRoot%\System32\sc.exe query wuauserv 2^>nul ^| %SystemRoot%\System32\find.exe /I "ESTADO"') do (
if /i "%%i"=="STOPPED" goto :eof
)
echo Stopping service 'Windows Update' (wuauserv)...
echo %DATE% %TIME% - Info: Stopping service 'Windows Update' (wuauserv)>>%UPDATE_LOGFILE%
%SC_PATH% stop wuauserv >nul 2>&1
if errorlevel 1 (
echo Warning: Stopping of service 'Windows Update' ^(wuauserv^) failed.
echo %DATE% %TIME% - Warning: Stopping of service 'Windows Update' ^(wuauserv^) failed>>%UPDATE_LOGFILE%
) else (
call :WaitService wuauserv STOPPED 30
if not errorlevel 1 echo %DATE% %TIME% - Info: Stopped service 'Windows Update' ^(wuauserv^)>>%UPDATE_LOGFILE%
)
goto :eof


:StartWUSvc
for /F "tokens=4" %%i in ('%SystemRoot%\System32\sc.exe query wuauserv 2^>nul ^| %SystemRoot%\System32\find.exe /I "ESTADO"') do (
if /i "%%i"=="RUNNING" goto :eof
)
echo Starting service 'Windows Update' (wuauserv)...
echo %DATE% %TIME% - Info: Starting service 'Windows Update' (wuauserv)>>%UPDATE_LOGFILE%
%SC_PATH% start wuauserv >nul 2>&1
if errorlevel 1 (
echo Warning: Starting of service 'Windows Update' ^(wuauserv^) failed.
echo %DATE% %TIME% - Warning: Starting of service 'Windows Update' ^(wuauserv^) failed>>%UPDATE_LOGFILE%
) else (
call :WaitService wuauserv RUNNING 30
if not errorlevel 1 echo %DATE% %TIME% - Info: Started service 'Windows Update' ^(wuauserv^)>>%UPDATE_LOGFILE%
)
goto :eof
Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at May 18, 2017 03:43 PM

Entre Dev Y Ops

Podcast 23: Vulnerabilidad de Wordpress, generadores de contenido estáticos y Amazon Drive.

EDyO Podcast

Ya tenéis disponible el episodio 23 de nuestro podcast donde hablamos de una Vulnerabilidad de Wordpress, comentamos qué son los generadores de contenido estáticos y hacemos una pequeña comparativa entre servicios para almacenar ficheros, destacando a Amazon Drive.

A continuación os facilitamos los enlaces que hemos comentamo.

Leer más… (1 min remaining to read)

by David Acacio at May 18, 2017 09:00 AM

May 17, 2017

Entre Dev Y Ops

El SLA del Cloud

SLA

A raíz del incidente de AWS S3 del pasado 28 de Febrero he oído, y no en pocas ocasiones, frases del estilo “pero esto del cloud no se caía, no?”, “hasta el cloud tiene caídas de servicio” y similares. Si hablamos con personas que conozcan que es el cloud seguramente tendrán una opinión similar: una de las ventajas de migrar hacia el cloud es que nunca tendrás caídas de servicio.

Lamentablemente eso no es del todo verdad y las empresas que ofrecen servicios de cloud lo saben.

Leer más… (2 min remaining to read)

by David Acacio at May 17, 2017 11:35 AM

May 15, 2017

pablo.sarubbi.com.ar

(MS17-010) Seek and Destroy #WannaCry

Gracias al aporte de Paulino Calderon (@calderpwn) tenemos disponible desde hace unas horas un script para sumar a nuestra colección en nmap que nos permite con un solo comando escanear la red y descubrir aquellos equipos que podrían ser afectados por el último ransomware WannaCry.

Lo que hace este script es conectarse al $IPC y ejecutar una transacción sobre FID 0 para verificar el error “STATUS_INSUFF_SERVER_RESOURCES” y así determinar si el equipo fue parcheado o no contra MS17-010.

El único requerimiento (además de un nmap actualizado) es descargar el script de github y copiarlo al directorio /scripts

wget https://raw.githubusercontent.com/cldrn/nmap-nse-scripts/master/scripts/smb-vuln-ms17-010.nse
mv smb-vuln-ms17-010.nse /opt/nmap-7.40/scripts/
sudo ./nmap -sC -p445 --open --max-hostgroup 3 --script smb-vuln-ms17-010.nse 192.168.1.0/24

Un ejemplo de equipo vulnerable retornaría algo similar a:

Nmap scan report for 192.168.1.2
Host is up (0.00079s latency).
PORT    STATE SERVICE
445/tcp open  microsoft-ds

Host script results:
| smb-vuln-ms17-010: 
|   VULNERABLE:
|   Remote Code Execution vulnerability in Microsoft SMBv1 servers (ms17-010)
|     State: VULNERABLE
|     IDs:  CVE:CVE-2017-0143
|     Risk factor: HIGH
|       A critical remote code execution vulnerability exists in Microsoft SMBv1
|        servers (ms17-010).
|       
|     Disclosure date: 2017-03-14
|     References:
|       https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-0143
|       https://blogs.technet.microsoft.com/msrc/2017/05/12/customer-guidance-for-wannacrypt-attacks/
|_      https://technet.microsoft.com/en-us/library/security/ms17-010.aspx

Para solucionar esta vulnerabilidad debemos aplicar los parches que tan gentilmente nos ofrece Microsoft tanto para los sistemas mantenidos como para los XP y 2003.

Para Windows XP y 2003 descargar y aplicar los siguientes parches de seguridad (requiere reinicio)
https://blogs.technet.microsoft.com/msrc/2017/05/12/customer-guidance-for-wannacrypt-attacks/?utm_content=buffer8d9ab&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer

Para las versiones actuales de Windows descargar y aplicar los siguientes parches de seguridad (requiere reinicio)
https://technet.microsoft.com/en-us/library/security/ms17-010.aspx

Actualización:
Si cuando ejecutamos el escaneo obtenemos como respuesta es un error similar al siguiente:

NSE: smb-vuln-ms17-010 against 192.168.1.2 threw an error!
/usr/bin/../share/nmap/scripts/smb-vuln-ms17-010.nse:85: variable 'debug1' is not declared
stack traceback:
        [C]: in function 'error'
        /usr/bin/../share/nmap/nselib/strict.lua:80: in function '__index'
        /usr/bin/../share/nmap/scripts/smb-vuln-ms17-010.nse:85: in function 'check_ms17010'
        /usr/bin/../share/nmap/scripts/smb-vuln-ms17-010.nse:160: in function 

Es probable que necesitemos actualizar el nmap, tarea relativamente sencilla siguiendo estos pasos:

wget https://nmap.org/dist/nmap-7.40.tar.bz2
bzip2 -cd nmap-7.40.tar.bz2 | tar xvf -
cd nmap-7.40
./configure
make
sudo make install

by pablo at May 15, 2017 01:38 PM

May 14, 2017

Blog Bitix

Luces navideñas con la Raspberry Pi y Java

Con diferentes sensores y dispositivos de salida de electrónica se pueden realizar proyectos muy interesantes. En el siguiente usaré múltiples diodos LED que se encenderán y apagarán de forma aleatoria cada cierto tiempo. El resultado será muy vistoso y lo utilizaré cuando lleguen las fechas como luces navideñas.

Raspberry Pi
Java

Como muestra de lo que se puede hacer con la Raspberry Pi usando los pines GPIO haré un ejemplo que consistirá en múltiples diodos LED de diferentes colores enciendan y apaguen simulando una especie de luces navideñas. Como yo tengo la Raspbperry Pi 1 B con 26 pines de los cuales solo 17 son GPIO podré usar hasta 17 diodos LED, aunque solo usaré 15. En el kit de iniciación a la electrónica para la Raspberry Pi viene incluidos 24 diodos LED de diferentes colores 6 blancos, 6 rojos, 6 amarillos y 6 verdes, también es necesario una resistencia por cada diodo de unos 200 ohmios de los cuales en el kit se incluyen 20 de este valor.

Aunque con muchos más LED el ejemplo no es más complicado que el ejemplo que ya mostré de encender y apagar un diodo LED. Usaré diodos de diferentes colores y dispuestos de forma aleatoria para darle un aspecto desordenado, para darle un aspecto más caótico los LEDs se encenderán y apagarán de forma aleatoria. Usaré el lenguaje de programación Java y la librería de alto nivel diozero para controlar el encendido y apagado de los diodos.

Esta es la foto del cableado usando múltiples cables macho-macho para conectar los pines con el polo positivo de los diodos pasando por la resistencia y también múltiples cables para conectar el polo negativo del diodo con tierra. Usando una placa breadboard para realizar las conexiones sin soldadura y una placa de extensión wiringPi para conectar la Raspberry Pi con la placa breadboard con un cable de 26 pines en mi caso por el modelo que tengo de RPi este es el aspecto de cableado.

Cableado de las luces LED del árbol de navidad

Cada cierto tiempo los diodos cambian de estado, algunos se encenderán, otros se apagarán y otros seguirán en el estado que estaban. Para ello generaré un booleano aleatorio para cada uno de los diodos que determinará si debe estar encendido o apagado. Este es el programa Java junto con la parte relevante del archivo Gradle para compilar y construir el ejemplo y el comando que uso para ejecutarlo.

Esta aplicación para la Raspberry Pi queda bastante vistosa y no es muy complicado de realizar a pesar del del lío de cables que resulta. Este es un vídeo de su funcionamiento.

El código fuente completo del ejemplo puedes descargarlo del repositorio de ejemplos de Blog Bitix alojado en GitHub y probarlo en tu equipo ejecutando el comando ./gradlew executeChristmasTree.

by pico.dev at May 14, 2017 09:00 AM

May 13, 2017

Blog Bitix

Controlar un servomotor con la Raspberry Pi y Java

Raspberry Pi
Java

Otro de los elementos que incluye el kit de iniciación a la Raspberry Pi es un servomotor, en concreto uno del modelo SG90. En la especificación del servomotor SG90 está detallado cual es el código de colores de los cables. Rojo para la corriente de 5V, marrón para tierra y naranja para el pin PWM con el que se controlará el servo motor, el diodo led es simplemente para saber que cuando se enciende el programa Java se ha iniciado. La Raspberry Pi tiene algunos pines con soporte hardware para realizar PWM.

Un servomotor es un elemento distinto de un motor, un motor usa dos cables uno para mover el motor hacia adelante y otro cable para mover el motor hacia atrás. Los servomotores además de utilizar un único cable para controlarlo su funcionalidad es distinta usándose para posicionar el motor en un determinado ángulo que en el caso del SG90 tiene un ángulo de funcionamiento de 180º. Además el servomotor es más complejo, como se explica en el siguiente artículo de título ¿Cual es la diferencia entre un motor DC y servo motor? el servomotor se compone de varios elementos empaquetados como una pieza. Se compone de un motor DC normal, una unidad de reducción, un sensor de posicionamiento y un circuito de control.

Servomotor y cableado

La función del servomotor es recibir la señal de control y aplicar corriente al motor hasta que que esté en la posición indicada por la señal. Un servomotor no rota libremente sino que como he comentado en el caso del SG90 tiene un ángulo de funcionamiento de entre 0º y 180º. La señal de control es un pulso de anchura modulada o PWM.

Usando la librería Diozero es sencillo controlar un servomotor a través de la clase Servo. El constructor recibe tres datos el pin de la Raspberry Pi que controlará el servomotor, según la nomenclatura Broadcom que usa la librería Diozero, la frecuencia del pulso PWD que sirve para controlar la velocidad de rotación y finalmente la posición inicial a establecer. Con el método pulseWidthMs y un rango de un valor float entre 0.6 y 2.4 controlaremos la posición o ángulo del servomotor.

El siguiente programa Java cambia en un bucle la posición del servo desde la posición mínima a la máxima. En él he utilizado el pin 18 que en la Raspberry Pi 1 soporta PWD, en las versiones 2 y 3 podríamos haber usado los pines 18 o 19.

Aunque he conseguido hacer funcionar el servomotor con este programa no ha sido exento de problemas. Y es que cuando el programa finaliza la Raspberry Pi se me bloquea o se pierde la conectividad de red. No se si por algún bug en la librería Diozero o alguna incompatibilidad con la Raspberry Pi 1 B, quizá en otro modelo de la Raspberry Pi no dé los problemas que a mi me da.

En otros artículos de la serie puedes consultar cómo usar otros elementos de kit con Java y la Raspberry Pi.

El código fuente completo del ejemplo puedes descargarlo del repositorio de ejemplos de Blog Bitix alojado en GitHub y probarlo en tu equipo ejecutando el comando ./gradlew executeServomotor.

by pico.dev at May 13, 2017 09:40 AM

Descargar e instalar Windows 10 paso a paso desde cero

Un virus, el bloatware preinstalado en muchos portátiles o tras instalar y desinstalar programas en Windows puede ocasionar que el equipo sea lento, se muestren mensajes de error o un virus cifre los archivos personales. En estos casos una solución habitual sencilla, rápida y fiable de volver a usar con normalidad el equipo es reinstalar Windows 10 desde cero. No es complicado pero para un usuario con pocos conocimientos de informática no es una tarea sencilla. En este artículo explicaré como instalar paso a paso y desde cero el sistema operativo Windows 10.

Microsoft
Windows 10

Prácticamente la totalidad de portátiles que se venden en las grandes superficies comerciales más conocidas están con el sistema operativo Windows preinstalado. Pero los fabricantes con la intención dotar de más capacidades y funcionalidades que las que incorpora Windows instalan numerosos programas que conforman el conocido bloatware que en muchas ocasiones hacen que un equipo completamente nuevo sea más lento de lo normal al iniciar el sistema, al arrancar programas o trabajar con ellos. Entre los programas que suelen preinstalar los fabricantes están los antivirus que al cabo de un tiempo se desactivan ya que suelen ser versiones de evaluación pudiendo dejar al equipo desprotegido ante virus y software malicioso, Windows 10 ya incorpora uno, Windows Defender, y para la mayoría de usuarios es suficiente por su efectividad aceptable. Otros programas que los fabricantes suelen instalar son reproductores de vídeo o software multimedia en la mayoría de casos innecesario ya que Windows de por si ya incorpora las capacidades de trabajar con archivos multimedia como fotografías o vídeos. También puede darse el caso que tras una actualización o la instalación de un programa el equipo empiece a presentar fallos.

En los casos anteriores realizar una reinstalación de Windows desde cero es necesaria. Muchos usuarios no tienen conocimientos avanzados de tecnología o informática y no conocen los pasos para realizar una reinstalación. En este artículo explicaré detalladamente, paso a paso y desde cero cuales son los pasos que hay que realizar para instalar Windows 10.

Requisitos mínimos

Lo primero es conocer que Windows 10 para funcionar correctamente posee unos requisitos mínimos para el equipo en el que vaya a ser instalado, fue comercializado en julio del 2015 y cualquier equipo posterior a esa fecha ya cumplirá con los requisitos mínimos y también los equipos que cumpliesen con los de Windows 7 o viniesen preinstalados con esta versión anterior. En la página de Especificaciones y requisitos del sistema para Windows están detalladas una buena cantidad de notas informativas y los requerimientos que son los siguientes:

  • Procesador: Un procesador a 1 GHz o más rápido o SoC
  • RAM: 1 gigabyte (GiB) para 32 bits o 2 GB para 64 bits
  • Espacio en disco duro: 16 GB para un SO de 32 bits o 20 GB para un SO de 64 bits
  • Tarjeta gráfica: DirectX 9 o posterior con un controlador WDDM 1.0
  • Pantalla: 800 x 600

Estos son los requisitos básicos, los recomendables para una buena experiencia de uso son disponer de 4 GiB de memoria y con esta memoria el siguiente aspecto con el que más se nota una mejora es disponer de un disco duro de estado sólido o SSD en vez de mecánico ya que son varias magnitudes más rápidos tanto en la lectura como en la escritura.

Cualquier equipo nuevo cumple con estos requisitos pero quizá algunos no posean disco duro SSD, estos discos son más caros y ofrecen menos capacidad aunque ya se han abaratado y son bastante asequibles y su capacidad a partir de los 128 GiB o 256 GiB son suficientes para muchos usuarios. Pagar algo más por un equipo con un disco SSD es una buena decisión, un equipo con disco mecánico puede tardar 1 o 2 minutos en iniciarse, uno con un SSD menos de 10 segundos lo que es solo un ejemplo entre la diferencia entre unos y otros.

Copia de seguridad

Una vez que sabes que el equipo cumple con los requisitos mínimos hay que hacer una copia de seguridad de los documentos, fotos y demás archivos personales que posea el equipo y quieras conservar en un disco duro o memoria USB externo, si son muchos los datos en vez de copiar y pegar con el explorador de archivos puedes hacer la copia de seguridad con el programa FreeFileSync y restaurar los datos también con el mismo programa una vez reinstalado Windows.

Realizar copia de seguridad con FreeFileSync

Creación del medio de instalación

En versiones anteriores de Windows este debía buscarse en las redes de compartición de archivos o P2P como torrent. Con Windows 10 Microsoft sabiamente para evitar problemas de seguridad proporciona la imagen ISO o una herramienta de creación del medio USB desde su propia página. Para descargar la imagen ISO de Windows hay que seleccionar la edición a descargar (en el momento de escribir este artículo la última es la Creators Update) y el idioma.

Según la actualización de Windows descargada las capturas de pantalla o pasos variarán pero serán similares en gran parte. En este artículo he utilizado la actualización Creators Update, la anterior era Anniversary Update y la anterior la versión original de Windows 10. Cualquier equipo de la última década ya incorpora un procesador de 64 bits, que el procesador sea de 64 bits le permite usar tamaños de memoria superiores a 4 GiB.

Accediendo a la página de descarga de Windows 10 desde un sistema con Windows 7, Windows 8.1 o Windows 10 se mostrará la opción de descargar la herramienta de creación de medios o Media Creation Tool. Descargada y ejecutada la herramienta realiza la descarga de Windows 10 y la creación de medio ya sea un DVD o memoria USB. En el caso de la memoria USB esta deberá tener una capacidad de al menos 8 GiB y todos los datos que posea se perderán con lo que su datos en su caso deberán ser salvaguardados en otra unidad externa.

Para realizar la instalación de Windows 10 es más recomendable usar una memoria USB con el programa Media Creation Tool ya que es más rápida que utilizar un disco DVD ya en desuso para los que algunos sistemas ya ni siquiera incorporan su lector.

Creación del medio de instalación

Inicio instalación de Window 10

Una vez está listo el medio de instalación de Windows 10 en forma de memoria USB o DVD con el equipo apagado y el medio de instalación conectado a un puerto USB o insertado en el lector de DVD hay que iniciarlo para que arranque desde el medio de instalación. Según el fabricante iniciar el equipo desde el medio de instalación varía ligeramente pero suele emplearse la pulsación de una tecla cuando el equipo se inicia que suele ser la tecla F2, F8, F10, F12 o la tecla Escape que permite seleccionar la unidad desde la que se inicia el equipo donde hay que elegir la memoria USB o DVD. Puede ser que la tecla de acceso a la BIOS UEFI donde también se podrá seleccionar el orden de arranque de las unidades que también varía según el fabricante, la BIOS UEFI contiene parámetros importante de configuración del equipo con lo que hay que tener precaución en las cosas que se modifican en ellas por lo que si no estás seguro de los cambios que estás realizando no los guardes, por suerte las últimas versiones de las BIOS UEFI son más intuitivas y con interfaces gráficas más fáciles de usar.

Según el fabricante e incluso modelos de la misma fabricante la tecla de acceso para iniciar desde el medio de instalación varía:

  • Acer: F2 o Delete
  • Asus: F2 o F10
  • Dell: F2, F1, Delete, F12 o F3
  • HP: F10 o Esc
  • Lenovo: F1 o F2
  • Sony: F2, F3, F1 o tecla assist
  • Toshiba: F2, F1, Esc

En las siguientes páginas puedes encontrar varias posibles teclas para entrar en la BIOS y cambiar la unidad de inicio del sistema según la marca, I, II y III.

Puede ser el caso de que cuando se inicia el equipo muestre un mensaje con la tecla que hay que pulsar si hay que probar hasta dar con ella. Después de pulsar la tecla de encendido poco después o según se muestra un logotipo es cuando hay que pulsar la tecla.

Asistente de instalación de Windows 10

Uno de los éxitos de Windows 10 es que la instalación ofrece un asistente con el que después de completar varios pasos y pulsaciones en botones Siguiente el sistema queda instalado y listo para usarse. La instalación se completa en menos de una hora.

Entre los pasos están la selección del idioma, la versión del sistema Home o Pro (la primera es suficiente), la lectura de de los términos de la licencia de uso que poca gente se lee completamente por su extensión y su jerga legal poco comprensible. Si el equipo tiene una licencia se ofrecerá la posibilidad de introducir la clave del producto para activar Windows, si no la tiene es posible omitir este paso pulsando la opción No tengo clave de producto y usar Windows sin limitaciones durante un tiempo, pasado un tiempo en cualquier caso las limitaciones son muy leves y Windows 10 es usable con normalidad.

Es recomendable la instalación Personalizada: instalar solo Windows y no conservar archivos y configuraciones anteriores para evitar problemas o heredarlos del sistema anterior. También es recomendable eliminar todas las particiones del disco y dejar que Windows cree las necesarias.

Instalación de Windows 10

Tras unos pasos donde se mostrará el progreso de instalación y algún reinicio automático el sistema se inicia con un asistente de configuración para personalizar el sistema.

Configuración básica

Después de instalar Windows este ofrece un nuevo asistente donde se personalizan algunas cosas adicionales del sistema. Algunas opciones a seleccionar en estos pasos antes de empezar a usar Windows 10 son:

  • La región o país del usuario.
  • La distribución o disposición de las teclas del teclado.
  • El usuario de inicio de sesión ya sea con una cuenta de Microsoft o con una cuenta sin conexión y la contraseña.
  • Si se desea usar Cortana como asistente personal.
  • Algunas opciones de privacidad que son recomendables desactivar para que Windows no recopile información de nuestro dispositivo aunque sean datos anónimos.
Configuración inicial de Windows 10

Usando Windows

Si el equipo ya tenía licencia de de Windows y estaba activado seguramente Windows 10 ya lo reconozca como activado. También es muy probable que Windows 10 sea capaz de reconocer automáticamente todo el hardware que posea en el equipo incluyendo la tarjeta gráfica pasa usar la máxima resolución que ofrezca la pantalla.

Llegado a este punto Windows 10 ya se puede empezar a usar y quizá instalar el software básico que vayas a utilizar como un paquete ofimático ya sea Microsoft Office o alguna de las mejores 3 alternativas a Microsoft Office, un navegador web como Firefox o Chrome con el complemento para bloquear publicidad AdBlockPlus en vez de usar Microsoft Edge que está incorporado por defecto.

Aún sin licencia y sin activar Windows 10 es perfectamente usable, quizá al cabo de un tiempo no puedas cambiar algunas opciones de personalización como el fondo del escritorio o temas de las ventanas pero nada importante que impida usarlo. Y en cualquier caso Windows 10 y Office 2016 siguen siendo tan fáciles de usar sin licencia como siempre.

Windows 10

Alternativa a Windows con distribuciones GNU/Linux

Debes conocer que Windows no es la única opción de sistema operativo que puedes instalar, si quieres puedes probar alguna de las distribuciones GNU/Linux como alternativa a Windows y descubrir el mundo del software libre que respeta tus derechos y no te los quita como el software privativo, puedes leer el artículo Elegir una distribución GNU/Linux según el usuario o equipo e instalar Ubuntu paso a paso desde cero.

Las siguientes son unas capturas de pantalla de varias de las distribuciones GNU/Linux más famosas.

Ubuntu y elementaryOS Fedora y openSUSE

by pico.dev at May 13, 2017 09:35 AM

Descargar e instalar la distribución Ubuntu de GNU/Linux paso a paso desde cero

Pasar de usar Windows a usar una distribución GNU/Linux es un paso difícil para muchos usuarios, algunos usuarios desconocen incluso que tienen la posibilidad de usar un sistema operativo alternativo a Windows. O si lo conocen pueden creer erróneamente que instalar una distribución GNU/Linux es muy complicado… sabiendo algunas casas por lo demás es tan sencillo instalar como el sistema operativo Windows ya que muchas distribuciones incluyen una interfaz gráfica en su instalador y el proceso consiste en responder unas pocas preguntas, introducir algunos datos y pulsar varios botones siguiente.

Ubuntu
Linux
GNU

Quizá hayas oído hablar de Linux o GNU/Linux como alternativa al sistema operativo de Microsoft Windows y sientes curiosidad por probarlo y adentrarte con ello en el mundo del software libre. Si estás leyendo esta guía y te es necesaria para instalar una de las muchas distribuciones de GNU/Linux entiendo que necesitas ayuda para saber como instalarlo desde cero, paso a paso y empezando desde lo más básico.

En GNU/Linux para cada tarea que un usuario quiera realizar hay múltiples opciones entre las que elegir, desde tareas ofimáticas como LibreOffice, navegadores web como Firefox o Chrome, mensajería instantánea como Empathy, correo electrónico como Evolution, Thunderbird o Geary, reproductores de música o vídeo como VLC, visor de imágenes y archivos PDF, edición fotográfica como GIMP, edición de vídeo como OpenShot, algunos juegos destacables, … en todos los casos hay un programa de software libre por el que no hay que pagar una licencia ni buscar cracks para activar el software que son fuente de virus y problemas de seguridad. Y ya desde hace mucho tiempo en GNU/Linux el hardware es reconocido y usable en su mayor parte desde el primer momento incluyendo la tarjeta gráfica, sonido, red, bluetooth, wifi, HDMI, USB, … aunque alguno puede necesitar instalar sus controladores de dispositivo.

Debes saber es en GNU/Linux hay muchas versiones o distribuciones, muchas desarrolladas por personas sin ánimo de lucro que se agrupan formando comunidades y otras que tienen el soporte de una empresa pero que a los usuarios les ofrece la distribución sin ningún coste ni necesidad de adquirir licencias. Una distribución está formada por el conjunto de programas de software o paquetes, repositorios de paquetes y gestor de paquetes. Hay muchas distribuciones, y muchas son cientos, pero no más de 10 con una cuota de uso dentro de las distros significativa.

El paso de Windows a GNU/Linux significa usar un nuevo entorno y es algo que muchos de los usuarios que hoy somos de GNU/Linux hemos dado en algún momento, yo empecé por pasar De Windows a Arch Linux y aún me mantengo De Arch Linux a Arch Linux. GNU/Linux tiene sus puntos fuertes y algunos para los usuarios de escritorio menos fuertes, principalmente debido a no ser el sistema mayoritario los fabricantes tienen más en cuenta a Windows cuando lanzan un nuevo producto, en el caso de los juegos triple AAA o la excesiva fragmentación por la cantidad de opciones. En cualquier caso muchas distribuciones GNU/Linux son tan fáciles de usar como Windows o macOS y tan o más capaces que estos.

Lo primero que debes hacer es decidir la distribución que quieres instalar, según tus preferencias y necesidades. Para los usuarios que van a tener su primer contacto con GNU/Linux algunas de las recomendadas son Ubuntu o elementaryOS. En este artículo explicaré como instalar Ubuntu en su versión 16.04 LTS, los pasos son similares para elementaryOS ya que es una distribución que se basa en Ubuntu.

Las versiones LTS de Ubuntu tienen un soporte de largo plazo de 5 años para corrección de errores y fallos de seguridad y se publican cada dos años siendo la siguiente LTS la 18.04 que se publicará en marzo del año 2018. Salvo que estés afectado por versionitis y quieras tener las últimas versiones de los programas la versión LTS es más recomendable.

Requisitos mínimos

Los requisitos mínimos de Ubuntu son bastante bajos para cualquier sistema de unos pocos años. Aunque en la memoria es recomendable tener al menos 2 GiB o incluso 4 GiB.

  • Procesador de 700 MHz (Intel Celeron o mejor)
  • Memoria del sistema 512 MiB RAM
  • 5 GB de espacio de almacenamiento (o memoria USB, tarjeta de memoria o unidad externa)
  • Gráficos con resolución de al menos 1024x768
  • Unidad CD/DVD o puerto USB
  • Acceso a internet es recomendable

Copia de seguridad

Al instalar Ubuntu todos los datos que tuviese el equipo se perderán por lo que si quieres conservarlos debes copiarlos previamente a un disco duro externo o memoria USB de la capacidad que necesiten tus archivos, una vez finalizada la instalación de Ubuntu puedes recuperarlos y copiarlos al equipo de nuevo.

Descarga de Ubuntu

Antes de iniciar la instalación hay que descargar la imágen ISO de la versión de Ubuntu que queramos instalar. En la página oficial de Ubuntu se puede descargar de forma directa con el navegador o vía P2P en la red de compartición de archivos torrent. Ubuntu a su vez proporciona varias versiones de su distribución donde varía el entorno de escritorio que también debes elegir según tus preferencias, hay varias posibilidades Unitiy (que en la versión 18.04 será sustituida por GNOME), GNOME y KDE aunque recomiendo una de las dos últimas. Cualquiera de ellas con un aspecto gráfico muy cuidado, intuitivas y fáciles de usar. La opción más similar al entorno de escritorio de Windows es KDE con la que te encontrarás bastante cómodo al usarla si provienes de Windows.

Creación del medio de instalación

Para una mayor velocidad de instalación es mejor usar una memoria USB de al menos 8 GiB de capacidad en vez un CD o DVD que son más lentos y algunos equipos nuevos ya ni siquiera incorporan porque están en desuso con la aparición de las memorias USB. La memoria debe estar vacía ya que se perderán todos sus datos. Con el programa Rufus para Windows seleccionado el archivo de la imagen ISO descargada y la unidad USB se crea el medio de instalación, en la siguiente página está explicado como crear una memoria USB arrancable en Windows.

Hay que conectar una memoria USB, seleccionarla, seleccionar el archivo de la imagen ISO de Ubuntu y pulsar el botón Empezar, al cabo de unos minutos la memoria estará lista para empezar a instalar Ubuntu.

Creación de medio de instalación en memoria USB dese Windows

Iniciar el sistema con el medio de instalación

Con el equipo apagado y la memoria USB contactada hay que iniciar el equipo para que se inicie desde la memoria USB. La forma de hacer que el equipo se inicie desde la memoria USB depende de cual sea el fabricante. Pulsando una tecla dependiendo de caso como F2, F8, F10, F12, ESC u otra se puede entrar en la BIOS o seleccionar el medio de instalación. La BIOS es una zona de configuración donde se modifican algunos parámetros del equipo muy importantes con lo que hay que tener cuidado de que se modifica para evitar comportamientos anómalos, a pesar de todo suele ser bastante intuitiva y si es un equipo reciente incluso con interfaz gráfica.

Según el fabricante e incluso modelos de la misma fabricante la tecla de acceso para iniciar desde el medio de instalación varía:

  • Acer: F2 o Delete
  • Asus: F2 o F10
  • Dell: F2, F1, Delete, F12 o F3
  • HP: F10 o Esc
  • Lenovo: F1 o F2
  • Sony: F2, F3, F1 o tecla assist
  • Toshiba: F2, F1, Esc

En las siguientes páginas puedes encontrar varias posibles teclas para entrar en la BIOS y cambiar la unidad de inicio del sistema según la marca, I, II y III.

Puede ser el caso de que cuando se inicia el equipo muestre un mensaje con la tecla que hay que pulsar si hay que probar hasta dar con ella. Después de pulsar la tecla de encendido poco después o según se muestra un logotipo es cuando hay que pulsar la tecla.

Si tu sistema tiene una BIOS de tipo UEFI, cualquier equipo del último lustro su BIOS será de este tipo, se debe desactivar la opción llamada Secure Boot que utiliza Windows como medida de seguridad pero que no está soportada aún en GNU/Linux.

Instalación de Ubuntu

Una vez iniciado el programa que guía en la instalación de Ubuntu hay que responder a algunas preguntas e introducir algunos pocos datos y en cuestión de menos de una hora el equipo ya está listo para empezar a usarse. En el artículo he utilizado la versión 16.04 LTS.

El asistente de instalación pregunta:

  • El idioma.
  • Si se quieren descargar las actualizaciones (recomendable) y software para reproducir mp3, flash así como controladores para la tarjeta gráfica y wifi.
  • Borrar el contenido del disco duro y si se quieren cifrar los datos del dispositivo de almacenamiento.
  • La clave para cifrar los datos del dispositivo de almacenamiento.
  • Una confirmación para proceder a borrar el disco duro e iniciar la instalación.
  • La zona horaria del usuario y la disposición del teclado.
  • El nombre del equipo, del usuario y la contraseña para iniciar sesión.

Los asistentes de instalación utilizan el entorno de escritorio del sabor que se está instalando pero los pasos son similares y piden la misma información.

Instalación de Ubuntu

Usando Ubuntu

Si se ha elegido cifrar el contenido del dispositivo de almacenamiento al realizar la instalación en el inicio del sistema Ubuntu pregunta por la contraseña para descifrar su contenido.

Ubuntu 16.04 con entorno de escritorio Unity Ubuntu 16.04 con entorno de escritorio GNOME Ubuntu 16.04 con entorno de escritorio KDE

Centro de software y actualizaciones

Ubuntu por defecto ya incorpora una buena cantidad de software preinstalado. En cualquier caso con la aplicación Software de Ubuntu se puede instalar más.

Al cabo de un tiempo de haber instalado Ubuntu se publicarán actualizaciones del software que tengas instalado con mejoras y correcciones de seguridad que son recomendables instalarlas usando la aplicación Actualizciones de software.

Instalar actualizaciones de seguridad y software

Ayuda

En internet hay cantidad de artículos en blogs o foros con ayuda que puedes encontrar con un buscador web como Google o DuckDuckGo. En ellos seguramente encontrarás una respuesta que te resuelva o ayude en cualquier problema que se te presente o duda que te surja. Y si después de haber buscado no encuentras la solución deja un comentario en este blog e intentaré ayudarte.

by pico.dev at May 13, 2017 07:00 AM

May 08, 2017

Poesía Binaria

Haciendo SSH a través de SSH. Rápido y fácil con ProxyCommand.

SSH a través de SSH
Como vemos en las películas de hackers. ¡Alguien ha conectado con el servidor y no podemos averiguar su IP porque ha estado rebotando a través de varios servidores! Bueno, yo me quejaría un poco de la velocidad de la conexión entre mi ordenador y el ordenador destino cuando paso por dos servidores intermedios. Pero puede ser un buen ejercicio. A la vez que útil cuando queremos ocultar el acceso a nuestro servidor o tenemos que acceder a un ordenador que está en una red privada.

En el primer ejemplo me refiero a un servidor cuyo acceso SSH está cerrado a todas las IPs exceptuando las de una red o una máquina concreta. Por ejemplo, podemos abrir el puerto SSH de nuestro ordenador de casa o nuestro mediacenter sólo a la IP de un servidor de nuestra propiedad. Así, cuando nos hagan un scan de puertos, el puerto estará cerrado. Pero cuando quiera conectarme desde fuera, primero tendré que conectarme a mi servidor y desde ahí conectarme al mediacenter de casa.

En el segundo ejemplo, imaginad que tenemos un servidor web conectado directamente a Internet, y un servidor de base de datos conectado al servidor web. Si deseamos acceder al servidor de base de datos desde Internet tendremos que entrar primero al servidor web y desde ahí acceder al servidor de base de datos. Bueno, este esquema de red lo podemos complicar mucho más. Además, esquemas parecidos nos los podemos encontrar, por ejemplo, en Amazon, cuando hemos creado una VPC con subred pública y privada y queremos acceder a las máquinas de la subred privada.

Pinceladas de seguridad

Antes de nada, os recomiendo este post sobre Consejos para endurecer un servidor SSH y hacerlo más seguro. Con muchas cosas a tener en cuenta a la hora de montar nuestro servidor SSH y aislarlo de posibles ataques desde fuera.
Otro detalle más, y muy interesante es que lo que pongo en este post debemos hacerlo siempre en servidores de confianza. Es decir, puede que tengamos acceso a un servidor SSH que hemos encontrado por Internet, que sea muy rápido y todo muy bonito. Pero al final, la clave privada de acceso al segundo servidor va a pasar por el primero para poder conectar. Como algún administrador de sistemas esté atento se puede quedar con tu clave privada y las claves privadas no se pueden dar a nadie.

Por otra parte, al conectar con un servidor intermedio y estar enviando una clave privada, si alguien intercepta el tráfico con el primer servidor y consigue descifrarlo podrá entrar en los dos servidores en nuestro nombre. Aunque son cosas difíciles de descifrar… todo es posible. Siempre es importante tener actualizado tanto el cliente como el servidor SSH en todos los puntos para que la negociación de protocolos elija siempre los algoritmos más seguros disponibles.

El método clásico. SSH, entro, SSH, entro

Lo primero que se nos puede pasar por la cabeza es hacer SSH en al primer servidor y una vez dentro hacer SSH al segundo. Esto es sencillo cuando tenemos contraseñas. Es decir, para entrar en el primero nos pide introducir contraseña y luego para entrar en el segundo también. Luego para cerrar la sesión, hacemos exit en el segundo y seguidamente exit en el primero.
Pero siempre se recomienda utilizar pares de claves pública y privada (ver los consejos para endurecer un servidor SSH). Aunque ahora empieza a ser un poco incómodo porque conectar al primer servidor es inmediato. Ya que el servidor conoce nuestra clave pública podemos entrar directamente. Pero para entrar en el segundo servidor, es decir, nuestro destino, este segundo servidor tiene que tener la clave pública del primer servidor y el primero la clave privada correspondiente. Por lo que configurar un sistema así es arriesgado:

  • Por un lado, la clave privada de acceso al segundo servidor debe estar siempre en el primero. Cualquiera podría verla, sobre todo si el usuario dentro del servidor es compartido. Aunque no es una técnica recomendable, se utiliza.
  • Configurarlo todo es un rollo, y es muy fácil confundirse con las claves. Además, para copiar en el servidor no vamos a utilizar nuestra clave privada, utilizamos otra por si las moscas.
  • Acceder al servidor es lento, necesitamos ejecutar un comando intermedio. Y luego si no queremos sólo acceder sino que queremos copiar archivos, es mucho más lío copiar los archivos al primero y una vez copiados, copiarlos al segundo.

Otro método que podríamos utilizar. VPN

Otro método interesante sería crear una red VPN entre nuestro ordenador y el ordenador de destino. Pasaríamos por el servidor VPN y tendríamos la conexión cifrada. Sobre esa conexión estableceríamos la conexión por SSH y listo. Aunque tendríamos que tener de antes la VPN. De todas formas, el método que explicaré a continuación con ProxyCommand podríamos utilizarlo para entra en la máquina antes de tener la VPN montada.

Conectar con ProxyCommand

Este método ha sido inventado precisamente para conectar con un servidor intermedio. En este caso, hacemos que para conectar tengamos que ejecutar algo en el servidor intermedio. ¿Qué ejecutamos? ssh para conectar y nc (netcat) para que el primer servidor haga de puente. Veamos la línea de conexión más a fondo:

ssh -o ‘ProxyCommand=ssh usuario@intermedio.com nc %h %p’ usuario@final.com

Con esto, hacemos que se utilize la opción ProxyCommand que justo antes de conectar hará ssh al intermedio.com (nuestro servidor intermedio) con el usuario usuario y seguidamente ejecutará nc al host y puerto con el que vamos a conectar. En nuestro caso el host sería final.com y el puerto 22 para SSH (aunque como veremos en futuros ejemplos, podremos variar estos puertos).

Perfectamente podríamos cambiar los puertos, por ejemplo SSH al puerto 221 para el servidor intermedio y el puerto 222 para el servidor final:

ssh -p222 -o ‘ProxyCommand=ssh -p221 usuario@intermedio.com nc %h %p’ usuario@final.com

Conectando de esta forma, la clave privada no tiene por qué estar almacenada en el servidor intermedio todo el tiempo, ni tampoco tendríamos que añadir una clave pública extra al servidor final. Directamente las cogerá de nuestro directorio ~/.ssh/ local. Y ssh se encargará de hacer la negociación de claves y protocolos.

Esto también podríamos añadirlo en nuestro archivo ~/.ssh/config con la siguiente información:

Host final.com
ProxyCommand ssh -p221 usuario@intermedio.com nc %h %p
Port 222

Ahora, haciendo sólo:

ssh usuario@final.com

Conectaría automáticamente con el proxy. Es decir, sería transparente para nosotros y no tendríamos que especificar el ProxyCommand todo el rato para conectar. Aún así hemos de ser conscientes que se ejecuta un netcat en el servidor, es decir, en ese punto, la información está sin cifrar. Si alguien mete mano en el nc estamos perdidos. Por lo tanto, hacedlo siempre en servidores de confianza. Además, si se compromete el servidor intermedio, tal vez no se haya comprometido sólo la clave privada para el servidor final. Así que cuidado.

Transfiriendo archivos

Podemos hacerlo con scp. Si en nuestro ~/.ssh/config hemos hecho las modificaciones anteriormente mencionadas no habrá problema, podremos hacer scp sin mover un dedo. Pero, ¿cómo sería el comando para hacer scp?

scp -P222 -o ‘ProxyCommand=ssh -p221 usuario@intermedio.com nc %h %p’ fichero_origen usuario@final.com:directorio_o_fichero_destino

Aunque lo interesante es hacerlo con rsync que nos da muchas facilidades y ventajas frente a la transmisión con scp:

rsync -avhP -e “ssh -p222 -o ‘ProxyCommand=ssh -p 221 usuario@intermedio.com nc %h %p'” edid_monitor fichero__o_directorio_origen usuario@final:directorio_o_fichero_destino

Aunque los argumentos -avhP no son estrictamente necesarios. Con rsync tengo siempre esta coletilla que me vale para la mayoría de los casos. Pero añadiremos -e con el comando para ejecutar ssh y tendremos que añadir toda la línea de conexión. Aunque, como antes, si lo tenemos configurado en ~/.ssh/config no hace falta.

Notas finales

Para realizar este tipo de conexión, debemos tener acceso al servidor intermedio y el servidor intermedio deberá tener acceso al segundo. Pero no es necesario que tengamos acceso al servidor final, es más, puede que no tengamos ping, puede que el servidor final, como dije al principio esté dentro de una red privada y el intermedio sea sólo el punto de entrada. Aunque lo pongamos en nuestro archivo de configuración (~/.ssh/config) podemos poner una IP privada a la que no tenemos acceso (siempre es mejor que los hosts tengan su nombre, pero no nos vamos a morir si no es así).
Pero insisto, el servidor intermedio sí que debe tener acceso.

Foto principal: Metropolitan transportation

The post Haciendo SSH a través de SSH. Rápido y fácil con ProxyCommand. appeared first on Poesía Binaria.

by Gaspar Fernández at May 08, 2017 03:10 PM

josedomingo.org

May 06, 2017

El Blog de Marcelo!

Nuevo Documento: “HTTP/2. Un nuevo protocolo para la web” (v1.0)

Les comparto el documento que armé dentro del marco del grupo de Teleinformática y Redes de la Universidad Nacional de Luján sobre el protocolo HTTP/2, a modo de recopilación, traducción y simplificación de todo lo que anda dando vueltas en la web. La idea es ir actualizándolo y completándolo a medida que pase el tiempo.

Dejo el link para bajarlo en PDF.

Se aceptan sugerencias, comentarios y críticas, por qué no. 🙂

Saludos

by Marcelo at May 06, 2017 03:04 PM

Blog Bitix

Artículo #4 de Yo apoyo al software libre

En los últimos meses las visitas que estoy recibiendo en Blog Bitix están creciendo cada mes entre un 5% y 10%, junto con el número de visitas los ingresos por la publicidad AdSense también estoy notando que está aumentando en proporción similar o incluso más aún. Cuando hace no tanto un buen mes generaba unos 12€ y uno malo 6€ ahora el blog me está reportando entre 18€ y 40€ al mes. Además, en este último periodo he escrito un artículo patrocinado sobre Servidores Cloud VPS en la nube para Clouding.io que también ha sido otra forma de ingreso. El punto negativo de todo esto es que solo son unos pocos artículos los que se llevan la mayor parte del tráfico de mi blog, aún así el resto de artículos contribuyen a que las visitas e ingresos aumenten constantemente.

Como cada vez que desde hace un tiempo recibo una transferencia en mi cuenta por la publicidad AdSense o a través del programa de afiliados de Amazon me he planteado realizar unas pocas donaciones económicas a algunos de los proyectos de software libre que uso habitualmente o creo que son merecedores de una donación. En anteriores ocasiones han sido a la FSFE, Wikipedia, Firefox, Elementary OS, Arch Linux ARM y Libre Office.

GNOME

Uno de los proyectos a los que he donado esta vez ha sido al entorno de escritorio GNOME que uso en mi equipo con GNU/Linux ya desde la época de la versión 2.30 allá por el 2010 y continué utilizándolo desde los inicios turbulentos de la versión 3.0 en la que todavía era un nuevo concepto del escritorio inmaduro pero que desde entonces ha mejorado notablemente en cada nueva versión publicada con una cadencia puntual cada seis meses. A partir de la versión 3.16 o 3.18 el escritorio de GNOME empezó a completar la visión de sus desarrolladores y satisfacer con las expectativas de muchos más usuarios en cuanto a funcionalidades y detalles gráficos. En las últimas versiones los cambios ya no son tan notables pero sigue mejorando.

GNOME

VideoLAN (VLC)

Otro proyecto al que he donado ha sido el reproductor de multimedia VLC del que no me gusta mucho su interfaz gráfica pero que funciona muy bien y es capaz de reproducir cualquier formato de archivo multimedia ya sea de audio o vídeo. Además de este proyecto me encargo de la traducción al español.

VLC

Arch Linux

Finalmente, he donado a Arch Linux que es la distribución de GNU/Linux que ya uso de manera constante desde hace unos años después de usar en unos pequeños periodos Ubuntu y Debian. Al ser una distribución rolling release o en constante actualización no es necesario reinstalar cada nueva versión basta con actualizar el equipo cada unas semanas para tener las últimas versiones de cada paquete de software que se encuentre en sus repositorios de paquetes. La última reinstalación de Arch Linux que hice en mi equipo es de principios del 2014, no por actualizar el equipo cada unas semanas he tenido problemas con las nuevas versiones o los he resuelto fácilmente leyendo la excelente wiki, los foros o la página principal con las noticias de la distribución.

Por un problema con el medio de pago que usa Arch Linux, Software in the Public Interest (SPI), para hacer donaciones directas no he podido pagar con mi tarjeta de crédito, finalmente he optado por comprar unas pegatinas para poner en el portátil, unas de Arch Linux, otras de Linux y otras de GNOME en unixstickers.

Arch Linux

Comprobantes de las donaciones

Donación GNOME Donación VideoLAN (VLC) Donación Arch Linux

Las donaciones no son muy cuantiosas pero son una forma de entre las muchas que hay de colaborar con estos proyectos. Otras formas de colaborar son reportando de errores o que no requieren conocimiento técnico como traduciendo las aplicaciones al lenguaje español o simplemente compartiendo las imágenes torrent de las distribuciones GNU/Linux.

Si los ingresos que tengo siguen al mismo ritmo que los últimos meses, y parece que sí, en poco tiempo escribiré un nuevo artículo con los proyectos a los que he donado.

Yo apoyo al software libre

Estas son las donaciones que he realizado hasta el momento:

  • 2015/12: FSFE 40€
  • 2016/09: Wikipedia 10€, Firefox 10€
  • 2017/01: Elementary OS 10€, Libre Office 10€, Arch Linux ARM 10€
  • 2017/05: GNOME 15,31€, VideoLAN (VLC) 10€, Arch Linux 0,31€

by pico.dev at May 06, 2017 09:00 AM

May 05, 2017

enavas.blogspot.com.es

Reparación de particiones NTFS en Linux

Algunos usuarios tienen las particiones de sus discos duros externos en formato NTFS  y, si una partición se ha desmontado mal en algún momento, es posible que se necesite ser reparada.

Para reparar particiones NTFS desde linux podemos utilizar en primera instancia la herramienta ntfsfix que vienen en el paquete ntfs-3g. Por ejemplo: Supongamos que estamos tratando de conectar un disco duro que nos está mostrando error al montarse y que tiene una única partición /dev/sdb1. Podríamos chequearlo mediante ntfsfix de la siguiente manera:
# ntfsfix /dev/sdb1
Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at May 05, 2017 10:13 AM

ntfs-3g: Gestionar particiones NTFS desde Linux

ntfs-3g es una implementación open source del sistema de ficheros NTFS de Microsoft. Para poder trabajar con particiones ntfs en nuestro sistema Ubuntu/Debian, no tenemos más que instalar este paquete:
apt-get install ntfs-3g

Al instalar el paquete, tendremos a nuestra disposición, junto con el driver, una amplia colección de utilidades que nos permiten trabajar con particiones NTFS.

Veamos algunas de las utilidades que nos proporciona este paquete:
  • ntfsfix tal y como dice la ayuda, ntfsfix es una utilidad que arregla algunos problemas comunes en volumenes NTFS.
  • mkntfs nos permite formatear una partición con el sistema de archivos NTFS.
  • ntfsinfo nos permite ver informacion detallada de volumenes NTFS.
  • ntfslabel nos permite ver y cambiar la etiqueta de volumen de una particion NTFS.
  • ntfsresize nos permite redimensionar un volumen NTFS de forma no destructiva, moviendo de forma segura cualquier dato si es necesario.
  • ntfsundelete nos permite recuperar archivos eliminados de una particion NTFS.
  • ntfscluster identifica ficheros en una región específica de un volumen NTFS.
  • ntfscat muestra en pantalla ficheros de volumenes NTFS sin montar la particion.
  • ntfsls lista el contenido de directorios sin montar la particion.
  • ntfscp nos permite copiar ficheros en un volumen NTFS.
  • ntfsclone nos permite clonar volumenes NTFS o una parte de ellos.
Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at May 05, 2017 10:02 AM

Controlar los clientes Ubuntu de Infolab con Epoptes

Para los que no lo conocen, Epoptes es una herramienta de control de aula GPL bastante sencilla de utilizar que funciona mediante un sistema cliente/servidor y que nos va a permitir:
  • Mostrar la pantalla en los clientes.
  • Supervisarlos.
  • Ejecutar comandos de forma remota.
  • Enviarles mensajes.
  • Aplicar restricciones como por ejemplo el bloqueo del terminal.
  • etc...
Es fácil de implantar. Tan sólo requiere instalar y configurar:
  • El paquete epoptes en el equipo del profesor.
  • El paquete epoptes-client en los equipos de alumnos.
Además, es sencillo de desplegar con un simple módulo puppet que instale y configure tanto el cliente como el servidor.

Para que el profesor pueda controlar el aula, tiene que estar en el grupo por defecto epoptes. No obstante, es posible cambiarlo en el fichero /etc/default/epoptes:
# The port where the server will be listening on, and where the client will try
# to connect to. For security reasons it defaults to a system port, 789.
#PORT=789

# Epoptes server will use the following group for the communications socket.
# That means that any user in that group will be able to launch the epoptes UI
# and control the clients.
#SOCKET_GROUP=epoptes
SOCKET_GROUP=teachers
En el directorio /etc/epoptes del equipo del profesor, donde hemos instalado el paquete epoptes, encontraréis dos ficheros que contienen la clave pública y la clave privada:
# ls -l /etc/epoptes/
total 8
-rw-r--r-- 1 root root 1919 abr 21 13:44 server.crt
-rw------- 1 root root 3272 abr 21 13:44 server.key
Podemos distribuir la clave pública del equipo del profesor (server.crt) a los clientes mediante el módulo puppet que creemos para configurarlo.

Por último, podemos crear un grupo de hosts para cada infolab y copiar la información de grupos a los profesores: $HOME/.config/epoptes/groups.json 

Una vez configurarlo, podremos, encender, apagar y controlar los equipos de alumnos:


Como podéis ver en la siguiente imagen, podemos controlar el equipo de alumno incluso antes de que inicie sesión:


Y veremos qué equipos están encendidos, cuáles se encuentran apagados y quién ha iniciado sesión en un determinado equipo:


Además, podemos conectarnos de forma remota mediante ssh exportando el display y controlaremos el aula desde nuestro equipo de administrador.
Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at May 05, 2017 08:53 AM

May 04, 2017

DevOps en Español

Aprendiendo Consul

Aprendiendo Consul

En esta ocasión, les contaremos como implementar Consul, la herramienta de descubrimiento y configuración de servicios.

by DevOps at May 04, 2017 02:55 PM

enavas.blogspot.com.es

Eliminar rutas por defecto cuando tenemos varias interfaces de red

Supongamos que tenemos un equipo con al menos dos interfaces de red... Por ejemplo:
# cat /etc/network/intefaces
auto lo eth0 eth1

iface lo inet loopback

iface eth0 inet dhcp

iface eth1 inet dhcp

Si queremos garantizar que la ruta por defecto sea la de la interfaz eth0, podemos eliminar la ruta por defecto de la interfaz eth1 simplemente añadiendo la línea que he resaltado en color amarillo y que se encarga de eliminarla:
auto lo eth0 eth1

iface lo inet loopback

iface eth0 inet dhcp

iface eth1 inet dhcp
post-up route del default dev $IFACE
Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at May 04, 2017 11:47 AM

CUPS Cloud Print: Nueva versión del paquete

Como ya vimos en un post de septiembre de 2015, el paquete cupscloudprint nos permite utilizar impresoras de Google Cloud Print como impresoras locales en nuestro equipo.
El paquete que instalábamos en ese post no funcionaba en versiones más actuales del sistema operativo, por lo que el autor del paquete publicó una nueva versión corrigiendo los problemas. Si queréis, podéis descargarlo con wget:
# wget http://ppa.launchpad.net/simon-cadman/niftyrepo/ubuntu/pool/main/c/cupscloudprint/cupscloudprint_20160502-1_all.deb
E instalarlo directamente:
# dpkg -i cupscloudprint_20160502-1_all.deb
Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at May 04, 2017 11:11 AM

Warnings "W: Possible missing firmware /lib/firmware/rtl_nic/rtl8107e-2.fw for module r8169" en Debian

Si tenéis mensajes de warning del tipo: "W: Possible missing firmware /lib/firmware/rtl_nic/rtl8107e-2.fw for module r8169", lo más probable es que sea porque no tenéis instalado el firmware propietario de Realtek. Podéis instalar este firmware simplemente instalando el paquete firmware-realtek:
# apt-get install firmware-realtek
Publicado por primera vez en http://enavas.blogspot.com.es

by noreply@blogger.com (Esteban M. Navas Martín) at May 04, 2017 11:02 AM