domingo, 31 de mayo de 2020

Cambiar Hostname en Ubuntu Server

A mas de uno le habrá pasado de querer cambiar el nombre de la virtual de Ubuntu Server.

Aquí van los pasos a seguir:

Primero chequeamos el hostname actual:

hostname

o

cat /etc/hostname


Vemos que en mi caso, la virtual se llama debian01 (si, también funciona con Debian, increíble,¿no?)

Para cambiarlo ejecutamos:

sudo hostnamectl set-hostname nuevonombre

Para chequear el cambio ejecuto:

hostnamectl


Vemos que tomo el cambio (Static hostname) pero en el prompt me sigue apareciendo el viejo.
Entonces vamos a reiniciar:

sudo reboot

IMPORTANTE: En el caso de Ubuntu Server para que el cambio persista luego del reinicio tenemos que editar el siguiente archivo:

sudo nano /etc/cloud/cloud.cfg

Y cambiar el parámetro preserve_hostname de false a true

Y reiniciar.

Al iniciar nuevamente la virtual vemos que toma el nuevo hostname (ardilla-nb):


Y listo, ya quedó cambiado.

Aprovecho para indicar como corregir el error que me aparece a continuación:

unable to resolve host 
sudo: unable to resolve host ardilla-nb: Nombre o servicio desconocido

Esto es porque no lo agregué al archivo /etc/hosts. Entonces lo edito:

sudo nano /etc/hosts

Y luego le agrego mi hostname nuevo:


Reinicio con sudo reboot

Y listo, ya no aparece:


Esto fue todo, sencillo... pero emotivo (?)

COMPARTI de una vez, ¿que te cuesta?

Te mando un beso (?).

sábado, 30 de mayo de 2020

Rollback de Deployments y Namespace en Kubernetes

Hola Ardillas, para estos posts largos prefiero ir directamente al asunto y evitar chistes como el del hacker, así que arranquemos.

Para los que no quieren leer todo (aunque lo recomiendo) podríamos dividir el post en 3 grandes títulos que voy a marcarlos en mayúscula, azul y subrayado así TITULO
Los títulos son:
CREAR NAMESPACE
CREAR DEPLOYMENT
ROLLBACK DE UN DEPLOYMENT

Antes de avanzar con el post de rollback de un deployment en si vamos a ver que tengo corriendo actualmente en mi cluster de Kubernetes:

Para ver un listado de lo que tenemos corriendo en el cluster:

kubectl get all


Fijense que diferencia los PODs, de los servicios, de los deployments y las replicas.

Ver detalle de todos los PODs en el namespaces actual:

kubectl get pods -o wide


Ver detalle de todos los PODs en todos los namespaces:

kubectl get pods --all-namespaces  


En este caso vemos los mismos ya que tengo solo un namespace (los otros que aparecen son del sistema).

Ver cantidad de replicas:

kubectl get rs


Ver historial de cambios de un deployment:

kubectl rollout history deployment/nombredeldeploy



viernes, 29 de mayo de 2020

Javascript PROMISES en 10 minutos

Hola mis ardillas! ¿como van?

La verdad es que a raíz de la impresionante recepción que tuvo el posteo anterior relacionado con la programación ¬¬, me pareció que sería una excelente idea dejarles otro video de Javascript.

Si, para los miles que me preguntaron, ya hablé con nathaner.io y le comente lo que había subido pero ya estaba al tanto, porque es un gran fan de este blog. Realmente se mostró muy entusiasmado, algo así:

No se si tanto en realidad ¬¬
Bueno, vamos al asunto.

En este video se explican las Promises (promesas) agregadas en ES6 (ECMAScript 6) de Javascript, se aborda la función ejecutor y se aprende a resolver o rechazar una promesa.

También explica como obtener los valores de la resolución de la Promise mediante el uso de then, o como capturar el motivo del rechazo de la Promise mediante el uso del catch.

Finalmente se revisa el método finally que les permitirá ejecutar algún código luego de que la Promise o bien se resolvió correctamente o fue rechazada.

Todo en 10 minutos, ¿que haces en 10 minutos? No me contestes.
Basta de promesas ¬¬
Les dejo el vídeo para que disfruten:


Tremendo. Emocionante (?).

Por si les interesa la programación les dejo su canal de Youtube: Programando el destino

Eso es todo amigos.

COMPARTÍ, ¿que te cuesta?
Demostrame que los programadores son mejores que los administradores de sistemas.

Hasta la próxima campeón (?)

jueves, 28 de mayo de 2020

OpenFortiVPN desde terminal, y aprende a usar tmux

Bueno, después del post de Kubernetes quedé exhausto (?), así que vamos con algo livianito, algo así como una ensalada informática (?).

Estás en tu casa, yo se que te encantan éstas situaciones, que las visualizas. Estás en tu casa, aburrido, en cuarentena, no hay nada en la tele, hace 10 minutos que pasas los canales y no encontras nada que te llame la atención. ¿Entonces que haces?. Pensas, "creo que este es un buen momento para adelantar algo de trabajo". Ya se que no es cierto, pero usemos la imaginación, necesito un pie para meter lo que viene en el post, ¿si?. Bueno, pensas, ¡que bonito sería trabajar este domingo desde casa! (así, con signos de exclamación y todo).
Te dirigís hacia tu maquina, la encendes (me encanta contar el paso a paso, perdón), inicia tu Kubuntu 20.04 y te dispones a trabajar. Pero te das cuenta de algo, no tenes acceso a los servidores de la oficina desde tu casa, empezas a sudar, pero de inmediato recordas que no habías conectado la VPN, cuando chequeas te das cuenta que el panorama es peor de lo que imaginabas, porque... no tenes un cliente VPN instalado. Entras en crisis, estás llorando desconsoladamente como un niño, te sonas la nariz con una servilleta y entras a Ardillas en la red para ver si hay una solución a tu problema. Entonces vas a la ventana de la derecha en el blog, donde dice "buscar en este blog" y escribis "cliente VPN Fortinet", o simplemente VPN, y aparece este post guiñandote el ojo, que te va a permitir conectarte a la VPN de tu trabajo, y seguir adelante este domingo sin tristezas...

Si bien existe una versión oficial de FortiClient para Linux a la que es posible acceder por CLI la verdad es que no la probé, y siendo que OpenFortiVPN siempre me pareció simple, fácil y la verdad es que nunca me dio problemas, prefiero recomendar este cliente para las conexiones VPN SSL con Fortinet.
De todas formas les dejo algunos links para todas las Plataformas:
El FortiClient para Windows lo pueden descargar desde este link.
Para OSX desde este link.
Para Android lo pueden descargar de aca.
Para Linux (Ubuntu, Fedora y Centos) pero con entorno gráfico pueden seguir estos pasos.
Y si tienen otra plataforma pueden acceder directamente a esta pagina.

Luego de darles las opciones oficiales, procedemos con la instalación del cliente en cuestión.

INSTALAR OPENFORTIVPN

Para instalar (en Debian):

sudo apt-get install openfortivpn


Para ver la ayuda:

man openfortivpn

Para conectarte:

sudo openfortivpn HOSTNAME:PUERTO -u USUARIO


Facilisimo, ¿no?

INSTALAR TMUX

Y ahora vamos con tmux que es un software que nos permite lanzar múltiples terminales (ventanas y paneles) dentro de una única pantalla. Muy útil cuando tenes que hacer varias cosas en simultaneo desde la terminal.

Para instalar tmux:

sudo apt-get install tmux

Para crear una ventana:

Primero escribimos tmux para ingresar a la aplicación y luego pulsamos:

Ctrl+B c

Abajo en la franja verde vamos viendo las terminales que creamos. Por ejemplo, yo cree 4:

0:bash 1:bash 2:bash 3:bash


El asterisco nos marca en que ventana estamos ubicados.

Para movernos a la ventana 1 presionamos:

Ctrl+B 1

En esta ventana dejo corriendo el cliente VPN:


Luego me dirijo a la ventana 2:

Ctrl+B 2

Y dejo corriendo un TOP:


Bueno, y así con todo ¬¬

Para listar todas las ventanas:

Ctrl+B w

Para cambiar el nombre de una ventana:

Ctrl+B ,

Para dividir paneles verticalmente:

Ctrl+B %


Para dividir paneles horizontalmente:

Ctrl+B  » + h

Para cambiar entre paneles:

Ctrl+B  tecla de flecha


Para cerrar la ventana actual:

Ctrl+B &

Para cerrar en panel actual:

Ctrl+B » + X

Bueno, esto fue todo, sencillo, pero emotivo (?).
No se porque sos tan egoísta y no compartís, pero tenes que saber que com par tir, extender la mano a tus hermanos, com par tir para hacer un mundo nueeevo.

Perdón, chau.

PD: No me juzguen ni lo cuenten.

lunes, 25 de mayo de 2020

Kubernetes para principiantes

Bueno, ya vimos Ansible, ya vimos Docker y ahora vamos con Kubernetes.
No, hoy no te voy a hacer el chiste del hacker, aunque si, me sigue causando gracia.
Hoy vamos al grano, porque es un post largo que creo que les va a resultar útil.

Kubernetes (K8s) es un proyecto open source que nació en Google y sirve para orquestar contenedores (Docker), aunque no nos permite crear imágenes, ni subirlas al registry, solo sirve para gestionarlos. Es un buen complemento, sino el ideal, de Docker (motor de contenedores) para los entornos de producción grandes en donde Docker solo, no puede escalar.
Distribuye de la mejor forma posible la carga de todos los NODOS.

POD: La unidad mas chica en Kubernetes es un POD, que agrupa dentro suyo diferentes contenedores (en general uno solo) que tienen un componente (kubelet) "que le avisa" al NODO MASTER si la aplicación se encuentra o no corriendo. Y si no esta corriendo entonces Kubernetes levanta una nueva para mantener la cantidad de replicas que configuramos para que se encuentren corriendo. Estas instancias se levantan en base a una imagen, como los containers de Docker.
Los PODs por definición son stateless, y Kubernetes los crea o destruye de manera constante en función de las necesidades. Si los PODs deben tener datos persistentes, deben utilizarse volúmenes.
Los containers levantados en el mismo POD comparten el stack de red y pueden hablar entre si, así como también pueden compartir un volumen y acceder a la misma información. Cada POD tiene su propia direccion IP.
La desventaja de que los containers dentro del POD compartan el stack de red es que no podes tener 2 containers adentro del mismo POD escuchando en el mismo puerto, porque al tener la misma red hay colisión de puertos, pero esto se resuelve poniendo esos 2 containers en PODs diferentes.

NODO: Un NODO conjunto de PODs.

NODO MASTER: Se encargan de coordinar el clúster. Tiene que haber mínimo uno por cluster. Generalmente no ejecutan contenedores, sino que deciden en qué nodo se ejecuta cada contenedor. Usualmente son 3 nodos para alta disponibilidad. Esto es debido a etcd, que guarda el estado global del clúster y su información es crítica. Si hay 3 nodos de etcd y se pierde uno, el sistema puede seguir funcionando, ya que los dos nodos restantes pueden seguir verificándose el uno al otro. Pero ya no se puede perder ningún otro. Por eso, los nodos de etcd se escalan siempre de dos en dos, si hay 3 se puede perder 1, si hay 5 se pueden perder 2 y así sucesivamente.

El NODO MASTER ejecuta los siguientes procesos:
- kube-apiserver que es la forma en la que interactuamos con los otros NODOS del cluster.
- Kubernetes Controller (kube-controller) que compara el estado actual del cluster con el estado que debería tener (chequea por ejemplo si la cantidad de PODs que hay en un NODO es la que debería haber, y sino los levanta).
- Kubernetes Scheduler (kube-scheduler) que es el que se encarga de escuchar al controller y cuando el controller le avisa que le faltan PODs, el scheduler se fija en que NODO pueden estar mejor ubicados y los levanta ahí.
- etcd que es una base de datos que se utiliza para mantener la configuración global del clúster. La información contenida en etcd es crítica y debe tenerse siempre un plan de copias de seguridad.

NODO MINION (WORKERS): Se encargan de la ejecución de los contenedores desplegados en el clúster. Tienen instalado el agente de Kubernetes llamado kubelet (que se encarga de monitorizar que un contenedor se inicie, funcione correctamente y en caso de error, reiniciarlo inmediatamente) y un kube-proxy, que gestiona la red virtual y las IPs virtuales que de cada contenedor.

CLUSTER: Es un conjunto de NODOS.
Entre sus principales funciones se encuentran:
. Permite Escalar
. Permite balanceo de carga
. Reparación automática del contenedor (si falla o muere, el cluster automáticamente levanta uno nuevo)
. Distribución inteligente de la carga de trabajo
. Permite almacenamiento persistente en la nube
. Optimiza nuestros recursos
Para entornos de Workstation se puede usar Minikube .

SERVICES: Los PODs no son visibles más allá de su propio contenedor. Para solucionar esto, existen los services, que son objetos que permiten reenviar tráfico de red a un conjunto de PODs, lo cual nos permite acceder a nuestras aplicaciones. Los services utilizan servidores DNS instalados en la red para registrarse en esta y permitir el acceso por nombres de servicio a sus PODs, facilitando el descubrimiento de los mismos.

VOLUMENES PERSISTENTES: Es una pieza de almacenamiento en el cluster que sirve para guardar los datos de nuestros PODs. Su ciclo de vida es independiente de los PODs individuales.

LABELS/SELECTORS: Los selectors son filtros de las etiquetas. Las labels son muy útiles cuando por ejemplo manejamos 500 contenedores que hacen de webserver y cuya etiqueta es webserver, entonces, si queremos eliminarlos a todos ponemos que borre todo lo que tenga esa etiqueta en lugar de borrar uno por uno.

En Kubernetes, podemos exponer nuestras aplicaciones de varias maneras:
ClusterIP, es el servicio que se genera de forma predeterminada y nos permite acceder a los servicios dentro del clúster. Este servicio no es accesible desde Internet, para que lo sea necesitaríamos habilitar el acceso a través del proxy de Kubernetes.
- Usando un servicio de tipo Kubernetes NodePort, que expone la aplicación en un puerto a través de cada uno de sus nodos. Sólo un servicio por puerto. No es para ambientes en Producción.
- Usando un servicio de tipo Kubernetes LoadBalancer, que crea un balanceador de carga externo que apunta a un servicio Kubernetes en su clúster.
- Usando un Kubernetes Ingress Controller, que permite un enrutamiento HTTP basado en host o URL. Ingress no es un tipo de servicio como el resto, se trata más de un enrutador que permite la entrada al clúster y gestionar el acceso a múltiples servicios. Hay que tener en cuenta que un Ingress Controller generalmente no elimina la necesidad de un LoadBalancer externo: el Ingress Controller solo agrega una capa adicional de enrutamiento y control detrás del balanceador de carga.
Estos son los patrones básicos para enrutar el tráfico externo a su clúster Kubernetes.

MINIKUBE: Es un proyecto que nos permite probar Kubernetes en una maquina local y utiliza maquinas virtuales de Virtual Box (por defecto). Kubernetes necesita al menos 3 nodos para funcionar, lo cual no siempre es posible en una maquina local. Para eso se creó Minikube, que es una versión reducida de Kubernetes, que corre en una única máquina virtual que hace de maestro y esclavo a la vez.
Ademas de Minikube también necesitara instalar kubectl para poder comunicarse con el servidor Kubernetes.

Kubernetes tiene también una parte Web, con un dashboard que permite monitorizar y gestionar el clúster. Minikube viene instalado con uno por defecto.

DEPLOYMENT: Para mantener los PODs prestando servicio sin interrupción utilizamos los deployments, acá definimos cuantas replicas queremos, como queremos desplegarlos, como queremos escalar y Kubernetes se encarga de mantener el clúster funcionando. Los deployments crean replication controllers que por defecto mantienen el número de réplicas que especificamos en el despliegue, pero nos permitirán cambiar este numero a futuro si así lo deseamos.

Bueno, hasta acá toda la teoría, pero estas aburrido, ¿no?
Queres tocar, queres poner manos a la obra, queres revolcarte en este chiquero (?).
Empecemos:


sábado, 23 de mayo de 2020

Curso Javascript - EVENTOS [addEventListener]

Hola mis ardillas queridas! ¿como van?
Bueno, últimamente cuando voy por la calle me paran muchos programadores que me dicen, ¿y las entradas de programación para cuando?
A lo que yo respondo:

Sin embargo, la otra vez me quedé pensando, y me dije a mi mismo, ¿por que no?.
La cuestión es que me decidí a hacer un post de programación, mas precisamente de Javascript.
Me senté frente a mi computadora, y me acordé algo esencial: No se programar.
Entonces me fui a dormir.
Pero a la mañana siguiente, mientras desayunaba mi café con leche y tocino (?), recordé que alguna vez un programador escribió como invitado en este blog.
Específicamente, escribió un post llamado Primeros pasos con HTML y CSS que pueden ver haciendo click AQUI.
Entonces decidí invitarlo nuevamente a que colabore con este increíble blog de informática y tecnología. Así que fui a su canal de Youtube, vi los títulos de sus videos y le robé el mas interesante (?), que es el del título.
En este vídeo se explica el manejo de Eventos en Javascript, puntualmente el Evento Click para los botones. Se muestra el uso del atributo onclick así como el manejo de eventos mediante los Listeners utilizando el método addEventListener.
Sin mas preámbulos, disfrutenlo:


Increíble, ¿no?.
Para que se queden tranquilos, porque se que estas cosas no les gustan, le voy a decir que lo tomé prestado, pero antes de decirle quiero simplemente ver si sigue siendo seguidor de este sensacional blog.
De paso lo saludo, bienvenido nuevamente Hades_Ra, ahora conocido como nathaner.io.
Por si les interesa la programación les dejo su canal de Youtube: Programando el destino

Eso es todo amigos.

COMPARTÍ, ¿que te cuesta?
Demostrame que los programadores son mejores que los administradores de sistemas.

Nos vemos (?)

viernes, 22 de mayo de 2020

Speedtest desde tu terminal, y de paso juga

Plena cuarentena. Internet se vuelve mas indispensable que nunca. Te sobra plata (?), no sabes que hacer, entonces se te ocurre que quizás sea una buena idea aumentar la velocidad de tu conexión para navegar mas rápido, para ver videos mas rápido (?).
Pero en el medio de tanta euforia, te surge una duda que no te deja dormir, son las 22hs y no te dormís, las 23 y no te dormís, y así sucesivamente. Tu duda es: ¿tendré la velocidad que contraté?
Impaciente, te levantas de la cama, te dirigís hacia tu maquina, la encendes y cuando vas a abrir el navegador para hacer un Speedtest... te das cuenta de que no tenes interfaz gráfica, solo una terminal...
¿Y por que no tenes interfaz gráfica? Porque sos hacker... y ya sabes...
¿Y como jugas juegos sin interfaz gráfica? Los hackers no juegan, hackean.
Entonces, ¿como hago para saber que velocidad tiene mi conexión de internet desde la terminal, sin interfaz gráfica?

Muy fácil, con speedtest-cli, para la cartera de la dama y el bolsillo del caballero (?).

Para instalar:

sudo apt-get install speedtest-cli


Si no te funciona podes probar con estos comandos:

sudo apt-get install python-pip
sudo pip install speedtest-cli

Para hacer el test:

speedtest-cli


Como verán, a mi mucha plata no me sobra ¬¬

¿Te vas a ir otra vez sin compartir? ¿Como dormís por las noches? 
No seas egoísta, ¿que te cuesta?

Cariños (?)

PD: ¿Queres jugar desde la terminal, no? Yo se que queres.

Toma:

NINVADERS

Instalar: sudo apt install ninvaders
Ejecutar: ninvaders


TETRIS:

Instalarsudo apt install bsdgames
Ejecutartetris-bsd


nSNAKE:

Instalarsudo apt install nsnake
Ejecutar: nsnake


PACMAN:

Instalarsudo apt install pacman4console
Ejecutarpacman4console


¿Y ahora que esperas para compartir?

jueves, 21 de mayo de 2020

Ocultar archivo usando esteganografia en Linux

Yo se que el post anterior te dejó pensando, se que ahora estás empezando a creer en vos mismo y está naciendo en vos un nuevo hacker.
Y si alguien te dice que no... Nunca dejes que nadie te diga que no sos un hacker 
Pero mi querida ardilla, yo quiero que vayas mas allá, quiero que sueñes conmigo, quiero que ahora te imagines que sos un espía, un espía que maneja información confidencial, toda guardada en un archivo txt (?). Y tu misión es copiar ese archivo con esa información en el escritorio de Ramón (?). Pero Ramón comparte la PC con su esposa y sus hijos, y el archivo tiene que si o si quedar en su escritorio, aunque nadie, excepto Ramón, puede acceder a esa información, ¿como haces?

Usando esteganografía, muy fácil, ¿no?.

Ahora, ¿que carajo es la esteganografía?.
Según Wikipedia, la esteganografía (del griego στεγανος steganos, "cubierto" u "oculto", y γραφος graphos, "escritura") trata el estudio y aplicación de técnicas que permiten ocultar mensajes u objetos, dentro de otros, llamados portadores, para ser enviados y que no se perciba el hecho.
Impresionante.

Ahora que tiene que ver Ramón, la esposa, la esteganografia... Ni idea, pero me pareció que tenía que hacer una intro ¬¬
No, mentira. Lo que vamos a hacer es valernos de la esteganografia para poder dejar el archivo .txt con la información confidencial en el escritorio de Ramón, y que su esposa y sus hijos no se den cuenta.

Para ello, vamos a usar un software llamado Outguess. Que se encuentra en los repositorios de nuestro GNU/Linux Debian.

Para instalarlo:

sudo apt-get install outguess


Para ocultar archivo:

outguess -k "clavesecreta" -d /root/textooculto.txt /root/ImagenOriginal.jpg /root/ImagenConTextoOculto.jpg

Acá lo que hacemos es ocultar el archivo textooculto.txt dentro del archivo de imagen ImagenOriginal.jpg. La unión de ambos dará como resultado el archivo ImagenConTextoOculto.jpg que al abrirlo veremos la imagen, pero que dentro suyo, tendrá albergando en su interior (?) el archivo textooculto.txt.
La clavesecreta es la que nos va a pedir luego cuando necesitemos "desocultarlo".


Para "desocultarlo":

outguess -k "clavesecreta" -r /root/ImagenConTextoOculto.jpg ArchivoOcultoDesocultado.txt

Luego de esto, veremos el archivo que teníamos que aparentemente era solo una imagen (ImagenConTextoOculto.jpg) y el archivo .txt con la información que habíamos agregado antes (ArchivoOcultoDesocultado.txt).


No lo podes creer, ya lo sé. Esto de internet es una locura (?).
Ya sos un espía, tene cuidado.

Compartí de una vez, dale hermano, no seas egoísta, ¿que te cuesta?

Te mando un beso (?).

miércoles, 20 de mayo de 2020

Saber tu IP Publica desde la terminal

Imaginemos esta situación, estas frente a la terminal, una pantalla negra con miles de letras bajando cual Matrix, y pensas: "¿Cual sera la ip publica de esta maquina? Quiero hackearla"


Porque sos hacker, y los hackers hackean (?).
Si, sos hacker, nunca dejes que nadie te diga que no lo sos, porque lo sos, mi querida ardilla.


Perdón, me deje llevar ¬¬

Vamos a lo nuestro, ¿como sabes la IP Publica de tu maquina desde la terminal?
Muy fácil! Ejecutando cualquiera de estos comandos:

curl https://ipinfo.io/ip

curl ifconfig.io

curl ipecho.net/plain; echo

curl icanhazip.com


Increíble, ¿no?
Pero hay mas, también podes verla a través de lynx, que es un navegador web que funciona desde la terminal.

Para instalarlo en Debian:

apt-get install lynx

Para ingresar a la pagina de Cual es mi ip:

lynx www.cualesmiip.com

Te va a preguntas si permitis las cookies:



Pones Y

Y luego:



Tremendo, no se puede creer.
Compartí, dale, no seas egoísta, ¿que te cuesta?
Hoy por ti mañana por mi (?).

Abrazo de Gol (?).

martes, 19 de mayo de 2020

Docker: La guia definitiva

¿Que titulo eh? Tremendo, uno entra a un posteo así y automáticamente piensa que va a entenderlo absolutamente todo.
Bueno, es mentira, no esta todo, lamento desilusionarte mi querida ardilla.
Pero, a pesar de esto, es una guía con bastantes comandos como para atesorar entre tus bienes mas preciados, compartir, recomendar, acompañar con una cerveza (?), etc.

Vamos a lo nuestro, ya se, nadie lee el principio ¬¬

¿Que es Docker
Supongo que ya lo sabes, sino te lo digo, así a grandes rasgos Docker es un administrador de contenedores ligeros y portables, la idea de Docker es que estos contenedores puedan ejecutarse en cualquier máquina con Docker instalado, independientemente del sistema operativo de la misma y sin necesidad de estar viendo si la otra maquina donde queremos ejecutar nuestra aplicación cuenta con el software necesario para poder ejecutarla.
La funcionalidad de Docker, creo, que es a partir del Kernel 3.10, y los containers (si no estoy equivocado y si lo estoy me corrigen) nacen en 2009/2010 y Docker en el 2013. Docker llega directo al kernel no necesita un hypervisor.
Ya se, estas sudando, queres instalar Docker ya, te tiemblan las manos, estas realmente ansioso. Pasemos a esa parte:

Instalar Docker en Debian (Acá dejo un link para instalar Docker en Centos). Primero, instalamos las dependencias necesarias, agregamos las claves GPG, el repositorio estable de Docker y actualizamos:

sudo apt-get install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common build-essential

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian buster stable"

sudo apt-get update

Luego, instalamos Docker:

sudo apt-get install -y docker-ce docker-ce-cli

Ya tenemos Docker instalado, ahora podemos conquistar el mundo (?).
Para ver la versión de Docker:

sudo docker -v

Para ver si anda :)

sudo docker run hello-world


¿Que hizo acá? Vio que no teníamos ninguna imagen llamada hello-world, entonces fue a buscarla al repositorio para descargarla localmente y luego poder ejecutarla.
Con esto ya saben que existe un repositorio de imágenes que pueden usar.
Si volvemos a ejecutar el comando anterior, vemos únicamente el resultado de la imagen (no la vuelve a descargar).

Ahora vamos a ver que otra imagen descargar. 
En esta página (Docker Hub) hay decenas de imágenes para instalar. Un contenedor es un proceso que se levanta a partir de una imagen.

Vamos a probar con Wordpress por ejemplo. Buscamos a ver si hay una imagen y vemos que hay una oficial:


Para instalarla ejecutamos:

sudo docker pull wordpress


Para ver las imagenes descargadas ejecutamos:

sudo docker images

Y vemos que tenemos la de Wordpress:


Ahora vamos a levantar un contenedor con esta imagen:

docker run --name MiWordpress -p 8080:80 -d wordpress

El -d es vital, porque es para que se ejecute en segundo plano, sin esto no vas a poder interactuar con la terminal. El --name es para ponerle un nombre mas descriptivo y que nos guste, podrías ponerle Ramón (?).
Y el -p 8080:80 indica que cuando te conectas al puerto 8080 de tu equipo en realidad te estas conectando al 80 del contenedor. Lo ultimo (wordpress) es el nombre de la imagen a partir de la cual vamos a levantar el contenedor.

Para acceder escribimos en un navegador:

http://localhost:8080 


No es la idea del post, pero si siguen el asistente van a tener un Wordpress funcional para probar un montón de cosas (?). Aca estan los pasos que siguen.

Si no tienen interfaz gráfica pueden probar con lynx que es un navegador que funciona desde la terminal:

 lynx localhost:8080


Creanme que es Wordpress ¬¬, y si alguien les mira la pantalla les dicen que son hackers y después me lo comentan en el post así nos reímos juntos (?).

Bueno, ahora vamos con algunos comandos útiles:

Borrar imagen de Docker:

docker rmi nombredelaimagen

Lanzar contenedor e iniciar sesión en el mismo:

docker run --name MyWordpress -it wordpress /bin/bash

Este ultimo comando esta bueno, porque te da una shell bash en el contenedor y básicamente podes navegar por todo ese "linux minimalista" que lo corre:


Ver todos los procesos activos:

docker ps -a


Podemos ver en la imagen que hay 4 contenedores, uno corriendo (el de Wordpress) y 3 contenedores que estaban activos y ya no lo están. Y no, la traducción no es excitado ¬¬

Para saber la ip de un contenedor:

docker inspect nombrecontenedor

Van a ver varias lineas con información del contenedor, entre ella su dirección ip:


Pueden obtenerla directamente filtrando la salida con grep:

docker inspect WordpressARDILLASENLARED | grep 'IPAddress'


Eliminar contenedor:

docker rm nombrecontenedor

Reiniciar, detener e iniciar contenedor:

docker restart nombrecontenedor
docker stop nombrecontenedor
docker start nombrecontenedor


Para conectarse al contenedor con una shell bash:

docker exec -it nombrecontenedor /bin/bash 

Usar con cuidado este comando, sirve para eliminar todos los contenedores detenidos, las redes que no están siendo utilizadas y sus imágenes colgadas:

docker system prune


Para ver los logs de un contenedor ejecutamos:

docker logs nombredelcontenedor

Crear backup de un contenedor:

docker commit -p iddelcontenedor nombredelarchivodebackup

Guardarlo en un archivo .tar para moverlo a cualquier maquina con Docker:

docker save -o ~/nombrecontenedor.tar nombrecontenedorbackupeado

Restaurar backup del contenedor (vamos a poder ver la imagen con docker images a partir de la cual podemos levantar un nuevo contenedor con docker run):

docker load -i nombredelarchivodebackup.tar

Podría seguir hasta el fin del los tiempos (?), pero es todo por hoy.
Compartí, no seas malo ni egoísta, dale, ¿que te cuesta?
Si lo hace vas a motivarme, y el próximo post de Docker va a ser mucho mejor (?)

Saludos cordiales (?)

lunes, 18 de mayo de 2020

Navegar sin restricciones con Squid

Hola mis ardillas! Hoy les traigo un tip? mini tutorial? para navegar a través de la internet de tu casa sin filtros a todas las paginas que quieras. Si, a esas también ¬¬

Para ello, en la PC de nuestra casa, que por supuesto tiene Linux (?), actualizamos nuestros repos e instalamos Squid:

apt-get update
apt-get upgrade
apt-get install squid

Si tenes Windows con antivirus no te aflijas, también hay Squid para Windows, acá te dejo un tutorial de instalación. Cuando termines dirá la base de datos de virus ha sido actualizada (?).
Ahora vamos al archivo de configuración del Squid  y permitimos toda la navegación sin restricciones:

nano /etc/squid/squid.conf

Para habilitar nuestra red local agregamos la siguiente linea:

acl localnet src "TuLAN"

En mi caso:

acl localnet src 192.168.5.0/24


Luego, para permitir todo el trafico http agregamos:

http_access allow all


Guardamos los cambios y reiniciamos el servicio:

systemctl restart squid.service

Nos anotamos la IP de este servidor porque la vamos a necesitar.

Lo que sigue es en nuestro Router hacer el NAT con la redirección del puerto. Esto varia dependiendo de cada Router, pero generalmente en tu Router tiene que haber una parte de NAT que te permita indicar que puerto queres redireccionar (3128) y desde que IP privada (IP del server con Squid) a que IP publica (la IP por la que navegas).

En mi caso:


Indico nombre descriptivo, el puerto que va a atender externamente e internamente y la IP privada del servidor al que le instale el Squid (la que anotamos en el paso anterior).
Fijense que el Nateo se realiza desde la interfaz WAN1 así que ahora vamos a ver que IP publica tiene configurada esa interfaz porque va a ser la que vamos a tener que configurar en la maquina de destino:


Vemos que la IP es la 200.xxx.xxx.xx

Una vez realizado este paso nos vamos a la maquina de destino a configurar el proxy.
En tu navegador predeterminado (o no), en mi caso Firefox, vamos a la configuración del Proxy y en proxy server address va la IP publica (la de la WAN1), en mi caso:


Y el puerto por defecto es el 3128.
Aceptamos, y si ingresamos a Cual es mi ip vamos a ver que estamos saliendo por la publica de nuestra casa:


Si quito el proxy y vuelvo a Cual es mi ip salgo por la IP Publica del lugar donde me encuentro:


Listo, ya burlaste el sistema (?). ¿Que se siente? ¬¬
Compartí, dale, no seas egoísta, ¿que te cuesta?
Dale like al FACE, ¿es un click entendes? Cada click es una inyección anímica!

Nos vemos, abrazo (?).