Bash en Windows 10 64 Bits!

Muchos de nosotros somos Linuxeros de corazón pero por temas laborales nos vemos obligados a trabajar bajo entorno Windows y aunque ciertamente Windows 10 parece estar muy bien a nivel de consola siempre extrañamos nuestra Shell Bash de siempre, algunos por costumbre y otros por fanatismo (en mi caso una mezcla un poco rara entre ambas), el tema es que hay muchas o varias opciones para tener nuestra consola Linux en Windows, no obstante en Windows 10 64 bits (si tienes la versión 32 bits tendrías que actualizar a la versión de 64 aquí tienes un enlace de como hacerlo) tenemos la opción de habilitarlo y te comento como a continuación:

  1. Abres Configuración de Windows / Actualización y Seguridad.
  2. Click en “Para programadores”.
  3. En la sección “Usar las funciones de programador“, habilitar la opción “Modo de programador“.
  4. Luego hacemos click en inicio (icono de Windows) y escribimos “Programas” nos aparecerá la opción de “Programas y características“, presionamos ENTER.
  5. Hacemos click en “Activar o desactivar las características de Windows“.
  6. Se desplegara una pequeña ventana con titulo “Características de Windows“, bajamos casi hasta el final de la lista y seleccionamos la opcion “Subsistema de Windows para Linux (beta)” y hacemos click en aceptar.
  7. Nos notificara que necesita reiniciar el ordenador para poder aplicar los cambios, lastimosamente hay que hacerlo así que guarda todos los documentos en los que estés trabajando y haz click en “Reiniciar“.
  8. Una ves reiniciado el ordenador haz click en Inicio y escribe “bash“, te aparecerá la opción bash.exe, presiona ENTER.
  9. Se te abrirá la consola tipo CMD pero ejecutando bash.exe, te informara que se instalara el entorno de Ubuntu en Windows y te dirá que su licencia es Canonical dándote el link para que consultes dicha licencia, aquí solo tienes que escribir “y” para continuar, esto descargara todos los paquetes necesarios del repositorio.
  10. Lo siguiente que te pedirá es asignar un nombre de usuario a la bash, escribes el que quieras y presionas ENTER.
  11. Ahora te pedirá la contraseña para dicho usuario, la escribes presionas ENTER y te pedirá confirmarla, la vuelves a escribir y presionas ENTER.
  12. Te notificara que la instalación se realizo correctamente y veras que en la consola ya te muestra la sesión de usuario en el host correspondiente a tu ordenador y ya podrás comenzar a lanzar comandos como si te encontraras en un Linux puro y duro, que en principio prácticamente seria así ya que estas en una bash de Ubuntu.

Espero que os sea de utilidad!

Docker show time!

Con los vientos que corren últimamente y todas las movidas de las nuevas tecnologías si hay algo que no se puede dejar pasar es el hecho de que al parecer el futuro es la virtualización!, no obstante con lo rápido que avanza todo estas tecnologías acotan mas y mas y es en este momento que tenemos que hablar de Docker!

Docker es un proyecto de código abierto que fue lanzado inicialmente el 13 de marzo de 2013 por Solomon Hykes, implementa una API de alto nivel y gestiona contenedores con recursos aislados, estamos acostumbrados a entornos basados en VMWare, VirtualBox, Hyper-V, etc, que no están mal y que para ser sinceros funcionan bastante bien pero no dejan de requerir que se ponga en marcha un OS y sobre el mismo el respectivo servicio que deseas poner en marcha, para que os hagáis una idea, si requieren en algún momento un servidor Web trabajando con VMWare requieren poner en marcha una VM, instalar un OS Base como Debian y luego instalar Apache, Nginex o lo que necesiten, con Docker al estar basado en las funcionalidades del kernel y utilizar aislamiento de recursos y namespaces separados puedes tener un Container exclusivamente con el Apache, otro container con MySQL en el cual gestiones las bases de datos, otro como Volumen de almacenamiento en el que guardes los archivos o ficheros de la Web y se guarden las bases de datos, es decir puedes tener los servicios separados, puedes crear clústers de estos servicios y mucho mas, ademas el despliegue se realiza con tan solo un comando, a continuación os explico un poco mas en detalle.

Lo primero que tienen que saber es que Docker es multi-plataforma, es decir que pueden ponerlo en marcha tanto en Windows, Linux como en Mac OS X, su gestión y administración es a través de su propia CLI que viene cargada de un montón de funcionalidades y opciones, la verdad es que es bastante extenso así que quien quiera ampliar aquí os dejo su documentación oficial.

En mi caso las pruebas las he estado haciendo en mi ordenador de sobre mesa basado en Windows 10, con lo que el terminal que he usado es el de PowerShell aunque para ser sincero he estado tirando mas de Cmder que me ha dejado muy buen sabor de boca por todas sus funcionalidades, aquí os dejo también su web oficial por si le quieren dar un vistazo!

Lo primero que tenemos que hacer es descargar he instalar Docker de su web oficial .

Ahora que ya lo tenemos instalado, imaginemos que queremos desplegar un contenedor con UBUNTU, podemos ubicar la información del contenedor oficial de UBUNTU desde los repositorios oficiales de Docker en este caso el enlace es https://hub.docker.com/_/ubuntu/.

Importante: los caracteres “>_” son para denotar que se trata de un comando, no debes ejecutar los comandos con estos caracteres solo a partir de la palabra docker incluyendo la palabra docker.

Para descargar el contenedor solo debemos ejecutar el siguiente comando en la consola:

>_ docker pull ubuntu

Iniciara una descarga de la imagen en cuestión, puede tardar mas o menos dependiendo de nuestra conexión a Internet.

Una ves finalizada podemos verificar que la imagen se encuentra en nuestro repositorio local con el siguiente comando:

>_  docker images

Ahora podemos desplegar un contenedor usando esa imagen como repositorio local simplemente con el comando:

>_ docker run -it ubuntu

Esto desplegara el contenedor y nos dejara dentro de la Shell del UBUNTU con el que podremos interactuar a plenitud, no obstante en cuanto hagamos un exit de la consola volveremos a nuestro entorno Shell o PowerShell o el que tengamos en uso en nuestro ordenador y el Container en cuestión se detendrá y con el cualquier servicio que este corriendo en dicho Container, pero no os preocupéis, a continuación detallo un montón de opciones con las cuales podrán lanzar Containers en modo dettached y así los contenedores quedaran en funcionamiento siempre, así como el comando para salir de la consola del contenedor actual sin que este se detenga que no es mas que Ctrl-P + Ctrl-Q.

Varios comandos importantes!

Crear un contenedor dettached y definiendo un nombre:

>_ docker run -d –name NOMRE

Si queremos mapear puertos hacia el contenedor:

>_ docker run -p in:out

ej: >_ docker run -p 8080:80 apache
Explicación: este comando inicia un contenedor llamado apache y definiendo la regla de que todo el trafico que entra al 8080 vaya al 80 del contenedor.
NOTA: los contenedores han de llamarse con nombres en minúsculas.

Si usas GIT y te conectas desde la consola de GIT a un contenedor Docker con attach no te dejara con los comandos básicos, así que tienes que añadir el prefijo “winpty“, imaginemos con el contenedor con ID ae143a78a8ba

ej: >_ winpty docker attach ae143a78a8ba

Distribuir imágenes

Descripción: no es mas que la publicación de las imágenes en tu repositorio de Docker como si de GIT se tratara.

>_ #docker login

>_ docker login hub.dondocker.com #DonDocker

>_ docker login [ hub.docker.com ] #Docker (no es necesario especificar)

Ahora etiquetamos la imagen con el nombre del servicio y el usuario:

>_ #docker tag //

>_ docker tag mi-apache hub.dondocker/canonale/mi-apache

>_ docker tag mi-apache [hub.docker.com/]canonale/mi-apache

Una vez etiquetado esta imagen solo falta subirla y, si se hace como con GIT: push.

>_ #docker push //

>_ docker push hub.dondocker/canonale/mi-apache

>_ docker push [hub.docker.com/]canonale/mi-apache

Ahora solo es necesario hacer un pull para disponer de esa imagen.

Salir de un contenedor sin que se detenga:

Para realizar el detach de la consola de un contenedor Docker evitando que este se detenga tenemos que ejecutar la secuencia de comando siguiente:

Ctrl-P + Ctrl-Q (Es decir, primero hacemos CONTROL+P y luego CONTROL+Q)

Crear un nuevo direccionamiento IP para Docker:

>_ docker network create –subnet=172.16.0.0/16 myNewLan

Con –subnet asignamos el tipo de red en este caso el direccionamiento sera clase C con mascara 255.255.0.0 y al final le asignamos el nombre “myNewLan”

Lanzar un container selecionando una red y asignando una IP especifica:

>_ docker run –net myNewLan –ip 172.16.26.10 -it debian bash

Luego de esto podemos hacer un docker ps o un docker ps -a y ver de esta forma el container lanzado, haciendo un attach a dicho container y ejecutando “ip addr” podemos ver que tiene asignada la IP 172.16.26.10.

Creacion de una imagen Docker a partir de un Docker file:

Crearemos una imagen de Docker basada en Debian en su ultima versión que contara con la instalación y puesta en marcha de OpenSSH-Server y habilitaremos la contraseña password para el usuario root, para conseguir que cuando lancemos la imagen en un contenedor podamos hacer login vía SSH con PuTTy por ejemplo hemos de crear un archivo (Bash Script) dentro de un directorio que llamaremos Debian_SSHD y lo llamaremos “entrypoint.sh” y dentro de este archivo el siguiente contenido:


#!/bin/sh

# Start the ssh server
/etc/init.d/ssh restart

# Execute the CMD
exec "$@"

Ahora crearemos el Dockerfile en  el mismo directorio del Script Bash anterior.

Dentro del directorio Docker_SSHd creamos el archivo Dockerfile escrito tal cual como lo he expuesto con la D mayúsculas, y dentro añadimos el siguiente contenido:

FROM debian:latest

RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:password' | chpasswd
RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config

# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd

ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile

EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"]
CMD ["/etc/init.d/ssh restart"]

Luego debemos acceder vía consola al directorio Docker_SSHd donde tenemos nuestro Dockerfile y ejecutar el comando que hará el build de dicha imagen:

>_ docker build -t img_sshd .

Con el punto (.) del final le decimos que ubique el Dockerfile en el directorio en el que nos encontramos.

Luego solo hay que ver la imagen que se ha generado.

>_ docker images

Y luego lanzar la imagen

>_ docker run -d –name consola sshd_img bash

La verdad es que todo el tema de Docker es para continuar y continuar con varios posts y es lo que pienso hacer mas adelante, el tema es extenso y las funcionalidades y aplicaciones muchas, así que por el momento lo dejare hasta aquí y espero que os sirva de ayuda a todos!

Hasta otra!

Apache Tomcat 8 Proxy Balancer en Debian Jessie

Siguiendo con los Cluster´s y dado que ya hemos hecho uno simplemente de Apache que mejor que darle paso a Tomcat de que se presente de la misma forma!

El esquema sera el mismo que el expuesto para el Cluster Apache Proxy Balancer si no lo has visto te invito a visitar el post y ver los requisitos.

Comencemos!

1.- Instalación y configuración de Servidor Apache2 (Proxy)

Iniciaremos por el servidor Apache que nos hará de proxy para todos las peticiones HTTP:

NOTA!: recuerda que los comandos los coloco con el carácter especial # pero tu has de obviarlo!


apt-get update && apt-get -y upgrade
apt-get install -y apache2 libapache2-mod-jk

Después de esto al acceder desde tu navegador Web a la IP del servidor 192.168.1.30 tendrías que poder la Web por defecto de Apache en la que se te muestra información básica del mismo, algo como lo que sigue:

Ahora configuramos el archivo por defecto de Apache para habilitar el Balancer desde el mismo, editamos el archivo /etc/apache2/sites-enabled/000-default.conf y añadimos las siguientes lineas:


JkMount /status status
JkMount /* loadbalancer

Quedando de esta forma:

Perfecto, ahora vamos a configurar el archivo workers.properties donde se definen los nodos del Cluster Tomcat, en este caso y por defecto el archivo se encuentra en /etc/libapache2-mod-jk/workers.properties, pero crearemos un archivo nuevo y en otra ubicación para evitar complicaciones y le daremos los permisos respectivos:


touch /etc/apache2/workers.properties && chmod 755 /etc/apache2/workers.properties

Ahora lo editamos y añadimos los siguientes parámetros:

worker.list=loadbalancer, status

worker.tomcat1.port=8009
worker.tomcat1.host=192.168.1.41
worker.tomcat1.type=ajp13
worker.tomcat2.port=9009
worker.tomcat2.host=192.168.1.42
worker.tomcat2.type=ajp13

worker.tomcat1.lbfactor=1
worker.tomcat2.lbfactor=1
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=tomcat1,tomcat2

worker.status.type=status

Fijate que has de cambiar el puerto y la IP de cada Worker en cada NODO Tomcat, ajustalo a la configuración IP segun tu caso.

Ahora editamos el archivo /etc/apache2/mods-enabled/jk.conf en el que comentamos la linea que comienza con el parámetro JkWorkersFile y añadimos una nueva con la dirección de nuestro nuevo archivo worker.properties creado anteriormente, tendría que quedarte así:

También es necesario que modifiques los parámetros Location que se encuentran mas abajo con la siguiente configuración:


<Location /jk-status>
# Inside Location we can omit the URL in JkMount
JkMount jk-status
Order allow,deny
#Deny from all
Allow from all
</Location>
<Location /jk-manager>
# Inside Location we can omit the URL in JkMount
JkMount jk-manager
Order allow,deny
#Deny from all
Allow from all
</Location>

Ha de quedar como sigue!

 

2. – Instalacion y configuracion de NODOS Tomcat 8

La siguiente configuración es la misma para ambos servidores NODO, solo los valores en ROJO han de ser ajustados segun el servidor que toque.

Lo primero es instalar Tomcat 8 y unos extras:


apt-get update && apt-get -y upgrade
apt-get install -y tomcat8 tomcat8-admin tomcat8-docs tomcat8-examples

Una ves finalizada la instalación tienes que añadir el usuario de administración, el código es el siguiente y ha de ir dentro de las etiquetas principales, solo has de asignar el usuario y la contraseña que desees.

<role rolename=”manager-gui”/>
<user username=”tomcat” password=”secret” roles=”manager-gui”/>

Ahora simplemente reiniciamos Tomcat 8 en los dos NODOS:


/etc/init.d/tomcat8 restart

Despues puedes comprar el estado de los mismos con:


/etc/init.d/tomcat8 status

Luego de esto puedes acceder a cada servidor desde su IP añadiendo el puerto por defecto 8080 (http://192.168.1.31:8080 y http://192.168.1.32:8080)

Si todo esta correcto verías un mensaje por defecto de Tomcat 8.

Ahora es necesario modificar el archivo /etc/tomcat8/server.xml, busca la linea <connector port=”8009” protocol=”AJP/1.3” redirectport=”8443” /> que se encuentra comentada, simplemente tendrás que descomentar eliminado las etiquetas <!– del principio y –> del final, en el NODO Tomcat 1 no hay problema en dejar el port 8009 como puerto por defecto pero en el NODO Tomcat 2 es necesario que lo cambies por otro, por ejemplo 9009.

A continuación hemos de crear un archivo index.jsp para realizar la prueba del balanceador, en este caso crearemos el directorio demo con el siguiente comando en ambos servidores Tomcat:


mkdir /var/lib/tomcat8/webapps/demo

Ahora crearemos dentro de dicho directorio el archivo index.jsp (mkdir /var/lib/tomcat8/webapps/demo/index.jsp) con el siguiente contenido:

<!DOCTYPE html>
<html>
<head>
<title>Hello Tomcat</title>
</head>
<body>
<h1>Welcome to Tomcat Server 1</h1>
<h3>Hello World!</h3>
</body>
</html>

Ten en cuenta cambiar el numero en rojo por 2 para el caso del index.jsp del NODO Tomcat 8 192.168.1.32.

Finalmente reiniciamos los servicios en los 3 servidores:

Apache (192.168.1.30)


/etc/init.d/apache2 restart

Tomcat 1(192.168.1.31)


/etc/init.d/tomcat8 restart

Tomcat 2 (192.168.1.32)


/etc/init.d/tomcat8 restart

Ahora accediendo a la IP del Apache Proxy http://192.168.1.30/demo podremos ver el mensaje Welcome to Tomcat 1 o Welcome to Tomcat 2 variando cada ves que actualicemos la Web ya que el Apache Proxy ira repartiendo o balanceando la carga de solicitudes HTTP que se realizan al servidor entre ambos NODOS Tomcat 8.

Accediendo a http://192.168.1.30/status podrás ver el estado actual de NODOS Tomcat que se encuentran operativos, estadísticas entre otra información valiosa así como realizar algunos cambios en los parámetros de configuración!

Eso es todo! espero que os sirva de ayuda, hasta la próxima!

Retomar una sesión SSH.

Screen Terminal

Cuantas veces has estado realizando una tarea bien sea en la oficina o en algun cliente que esta llevando mas tiempo de lo que te esperabas?, copiando o moviendo archivos o incluso eliminando archivos de grabaciones de audio o video que se estan llevando una vida porque son 50 GB de informacion, el reloj no se detiene y en menos de media hora tienes que estar en camino para poder llegar a recoger a tu hijo@ al cole, lo que estas haciendo es fundamental para que el sistema funcione correctamente y no puedes cerrarlo todo y dejar al cliente colgado!

Pues bien, la solucion es simple, “SCREEN“, si no esta instalado en el servidor en el que estas operando instalalo con APT:

apt-get install screen

Su uso es muy sencillo, una ves instalado solo tienes que abrir una consola con el comando screen:

$ screen -S nombreDeLaSesion

Algunas opciones interesantes de esta app son las siguientes:

OPCIONES
# -S sockname Da nombre a la sesión [pid].sockname.
# -ls Lista las sesiones abiertas de screen.
# -r Reattach a un sesión. Es posible especificar el nombre ej: screen -r sockname.
# -t título Permite dar un título a una ventana.
# Ctrl-a ? Ayuda y sumario de funciones.
# Ctrl-a c Crear una nueva ventana (sin nombre).
# Ctrl-a Ctrl-n Cambiar a la Siguiente o Anterior terminal.
# Ctrl-a Ctrl-N Cambiar a la Siguiente o Anterior terminal N [0-9].
# Ctrl-a ” Lista navegable de terminales en funcionamiento.
# Ctrl-a a Limpiar un Ctrl-a pulsado por error.
# Ctrl-a Ctrl-d Desconectar y dejar la sesión en funcionamiento.
# Ctrl-a x Bloquear todas las terminales con una clave.
# Ctrl-a d Dettach. Sale de la sesión pero la deja en segundo plano junto a todas sus ventanas.
# exit Cierra la ventana actual. Cerrando todas las ventanas se cierra la sesión de screen.

Como puedes ver hay numerosas opciones bastante interesantes yo hace años que la uso y te aseguro que uso como mucho 3 o 4 de ellas solamente, combinada con Tmux y otras las aplicaciones en un entorno de producción donde tienes que estar constantemente monitorizando o haciendo varias cosas vía Shell su uso se hace imprescindible, espero que te sea de ayuda el dato!

Hasta otra…