David Bohm

Hay dos frases que definen mi manera de pensar:
Realmente no hemos prestado mucha atención al pensamiento como un proceso; hemos participado en pensamientos, pero sólo hemos prestado atención al contenido, no al proceso.
La capacidad de percibir o pensar de manera diferente es más importante que el conocimiento adquirido.
Ambas son de David Bohm.

sábado, 6 de noviembre de 2021

Programar en C con Visual Studio Code en Windows 10

Vamos a configurar el compilador de C y Visual Studio Code para poder desarrollar, compilar y ejecutar nuestros programas.

Lo primero que haremos será descargar el compilador, para ello vamos al enlace: https://es.osdn.net/projects/mingw/

Descargamos MinGW y lo ejecutamos. Comenzará la descarga del gestor de instalación. Una vez que esté listo nos permite la instalación de paquetes. De la lista en 'Basic Setup' que muestra y para desarrollo en C vamos a seleccionar:

  • mingw-developer-toolkit-bin
  • mingw32-base-bin
  • mingw32-gcc-objc-bin
  • msys-base-bin  

Para desarrollo en C++ tendríamos que seleccionar:

  • mingw32-gcc-g++-bin

Al marcarlos los estamos seleccionando para su instalación. En el menú 'Installation' hacemos clic en 'Apply Changes' para que realice la instalación de los paquetes seleccionados.

La instalación la habremos hecho por ejemplo en C:\MinGW, ahora tenemos que agregar a la variable de entorno PATH la ruta: C:\MinGW\bin, esto nos permitirá llamar al compilador desde cualquier sitio sin necesidad de indicar una ruta absoluta.

Si abrimos una consola podemos ejecutar:

   C:\> gcc --version

Y obtendremos el resultado de la versión instalada.

En Visual Studio Code agregamos la extensión: C/C++ de Microsoft (C/C++ - Visual Studio Marketplace) y C/C++ Extension Pack de Microsoft (C/C++ Extension Pack - Visual Studio Marketplace)

Creamos un archivo 'helloworld.c' e introducimos el siguiente código:

// Hola Mundo

#include <stdio.h>

int main () {
    printf ("Hola Mundo!!! \nWelcome to C!!!");
    return 0;
}

Pulsamos F5 para compilar el código y la primera vez Visual Studio Code nos preguntará el compilador que deseamos utilizar. Seleccionamos C++ (GDB/LLDB) para después indicar que queremos utilizar el compilador que hemos instalado con MinGW: gcc.exe

Se abrirá el archivo de configuración .json que deberemos modificar, donde pone:

   "externalConsole": false,

Cambiaremos a true el valor que define este parámetro:

   "externalConsole": true,

Guardamos el archivo, cerramos y volvemos a pulsar F5, se realizará la compilación del programa creandose un helloworld.exe que podremos ejecutar y comprobar el resultado de nuestro primer programa

SaluDOS

domingo, 26 de septiembre de 2021

Edge en Ubuntu 20.04

Ya hemos visto en otras entradas que Microsoft está dando pasos de gigante para acercarse al mundo GNU/Linux. Es verdad que habría que evaluar si esto es bueno o no, pero a priori sin exprimirnos mucho el cerebro está claro que es positivo. Se han liberado proyectos muy potentes como Visual Studio Code o el mismo Powershell, algo que acerca a los administradores de sistemas herramientas que nos permiten tener una gestión centralizada de nuestras infraestructuras mixtas. Todo ello con el código fuente al alcance de poder ser modificado.

Vamos a la página: https://www.microsoftedgeinsider.com/en-us/download/?platform=linux

Y podremos encontrar disponible la versión Beta del navegador Edge basado en Chromium y que está rompiendo muchas barreras a nivel corporativo en muchas compañías. Su módulo de compatibilidad con IE está permitiendo que las empresas se pasen a este navegador manteniendo las herramientas o desarrollos que todavía no han migrado a entornos actualizados.

Desde esta página, una vez aceptados los terminos de Microsoft, podemos descargar la versión en paquetería .deb para Ubuntu. Si nos desplazamos mas abajo veremos que existen paquetes para otros sistemas operativos y distribuciones como .rpm

Realizamos la instalación:

   # dpkg -i microsoft-edge-beta_94.0.992.31-1_amd64.deb

Hay que tener en cuenta que es una versión preliminar destinada fundamentalmente a los desarrolladores para que puedan ir viendo los resultados de trabajar con sus aplicaciones web en este navegador para validar o adaptar los desarrollos.

En mi caso, nada mas lanzar la aplicación me ofrece un detalle interesante: 

   La aplicación Microsoft Edge (beta) se cerró inesperadamente.

No indagaremos mas, soy fan de Firefox y no necesito (de momento) Edge en mis equipos linux.

SaluDOS

Microsoft To-Do directamente en Ubuntu 20.04 LTS

En el caso de Microsoft To-Do, hay varias alternativas, programas desarrollados de forma alternativa y parecía una buena idea ver cuales son.

Indagando sobre el tema, he decidido acabar usando el que viene en los repositorios oficiales, a través de Ubuntu Software. Realizamos la búsqueda de To-Do y obtenemos 2 resultados interesantes:

Microsoft To-Do (unofficial)

Por un lado tenemos Microsoft To-Do (unofficial), una versión no oficial de este software. El desarrollador es Patrick Wu y es un paquete snap, la fuente es snapcraft.io

La instalarlo, obtenemos una conexión a la página web de Microsoft To-Do, introducimos nuestras credenciales y tenemos acceso a la herramienta. Es un acceso a la web y nos permite interactuar en ella a través de una ventana independiente que podemos abrir y cerrar, se puede agregar a favoritos como si fuese una aplicación independiente.

AO

El otro resultado que aparece en la búsqueda es Ao, y se describe como "Elegant Microsoft To-Do desktop app". En este caso el repositorio se encuentra en: https://github.com/klaussinani/ao desarrollado por Klaus Sinani. También es un paquete snap y la fuente es snapcraft.io

En este caso vamos a realizar una instalación diferente, descargamos el paquete .deb para amd64, lo cogeremos directamente desde: https://github.com/klaussinani/ao/releases/tag/v6.9.0

Ejecutaremos:

   # wget https://github.com/klaussinani/ao/releases/download/v6.9.0/ao_6.9.0_amd64.deb

Realizamos la instalación

   # dpkg -i ao_6.9.0_amd64.deb

Al abrir el programa ocurre lo mismo que el anterior, se conecta a la web, introducimos las credenciales y ya tenemos conexión con nuestro To-Do.

En este caso Ao va un paso mas allá, tiene un menú que interactúa con la herramienta, se puede crear una nueva lista, renombrar, eliminar, etcétera. Además nos permite tener atajos a través de las opciones que presenta este desarrollo. En la versión que hemos instalado hay atajos que facilitan la productividad para no soltar el teclado, algunos ejemplos:

Buscar: Ctrl + F 

Trabajar con las listas:

   Nueva lista: Ctrl + L
   Eliminar lista: Ctrl + Shift + D
   Cambiar el nombre de la lista: Ctrl + Y

Desplazarnos por los diferentes apartados de To-Do:

   Ir a Mi día: Ctrl + M
   Ir a Importante: Ctrl + I
   Ir a Planificado: Ctrl + P
   Ir a Tareas: Ctrl + J

Salir: Alt + Ctrl + Q

Como se indica en el apartado de atajos (https://github.com/klaussinani/ao#keyboard-shortcuts) se pueden personalizar los métodos abreviados en: ~/.ao.json

En general las dos herramientas funcionan bien y permiten trabajar con To-Do. Al final es como entrar a la página web y hacerlo desde el navegador. Es verdad que es mas cómodo tenerlo en una ventana independiente, como hemos visto en entradas anteriores que se puede hacer con Outlook por ejemplo. 

SaluDOS.

jueves, 2 de septiembre de 2021

Cuando los electrones te permiten tener Office 365 on line de Microsoft en Ubuntu 20.04 LTS

Como ya hemos visto en una entrada anterior, a través de una aplicación hecha en electron hemos sido capaces de simular que tenemos OneNote en nuestro GNU Linux . Al final es una ventana que "engancha" la aplicación on line, embebe esa web en una ventana y da la sensación de que es una aplicación instalada, aunque solo es un navegador.

Existe algo parecido para las aplicaciones de Office, por ejemplo outlook me parece una opción interesante para tenerlo configurado de este modo y no tener que abrir el navegador y tirar de un marcador cada vez que quieres abrirlo.

En esta ocasión el repositorio es: https://github.com/matvelloso/electron-office/

Se ve que no se ha actualizado desde Diciembre de 2019 donde hicieron el último commit, pero creo que puede seguir funcionando sin problemas, el concepto al fin y al cabo es la web del portal de Office embebida en una ventana. Para probarlo es realmente facil, solo tenemos que ir a Release y localizar el paquete .deb apropiado para nosotros.

Podemos ver que son pre-releases, actualmente en la versión 1.1.2. El enlace que utilizaremos para wget es: https://github.com/matvelloso/electron-office/releases/download/1.1.2/outlook.office365.com_1.1.2_amd64.deb

Ejecutamos:

   # cd ~/Downloads/

   # wget https://github.com/matvelloso/electron-office/releases/download/1.1.2/outlook.office365.com_1.1.2_amd64.deb

   # dpkg -i outlook.office365.com_1.1.2_amd64.deb

Si sale algún error ejecutamos:

   # apt install -f

Ahora ya podemos buscar la aplicación 'Outlook for o365 on Electron' y lanzarla en Ubuntu. Veremos que es la versión On Line embebida en una ventana. Creo que es una solución original y práctica.

Es cierto que nada tienen que ver las versiones webs con la versión de escritorio, pero de momento vamos a probarlo.

En caso de que queramos tener la suite de office, sería hacer la misma instalación con el paquete que se encuentra en el mismo repositorio:  https://github.com/matvelloso/electron-office/releases/download/1.1.2/office.office365_1.1.2_amd64.deb

Al hacerlo, tendremos la aplicación 'Office 365 on Electron' que podremos buscar y lanzar en Gnome Shell. En esta ventena tendremos embebida la web portal.office.com con todas las aplicaciones de Microsoft con las que cuente nuestra suscripción. Quizás con esto, evitaríamos tener que instalar el paquete anterior, pero reconozco que a mi me está gustando el tener outlook en una ventana simulando que lo tengo instalado.

SaluDOS


miércoles, 1 de septiembre de 2021

Conectandonos a unidades de red a través de "Archivos" de Gnome con Ubuntu 20.04

Cuando en Windows tenemos unidades de red corporativas del estilo: \\Servidor.dominio.com\Unidad_Compartida$ aunque no te lo creas, también se puede mapear la unidad en nuestro GNU Linux Ubuntu 20.04.

Entramos a Archivos, el explorador de archivos predeterminado en Gnome Shell, actualmente la aplicación se encuentra en su versión 3.36.3-stable

Solo tenemos que ir a "Otras Ubicaciones" y a la derecha nos saldrán dos grupos, el de nuestro equipo y el de Redes, justo debajo tenemos una opción llamada "Conectar al servidor".

Es bastante sencillo, tenemos que especificar el protocolo y la ruta, por ejemplo:

   smb://Servidor.dominio.com/Unidad_Compartida$ 

Y hacer clic en Conectar. Se nos mostrará un cuadro de diálogo para que introduzcamos los datos de conexión. Podemos utilizar un usuario anónimo si la unidad de red lo permite, aunque no sería lo habitual o deseable.

Lo normal es que tengamos que introducir:

   Nombre de Usuario

   Dominio

   Contraseña

Además podemos decidir que queremos que se haga con la contraseña.

   Olvidar contraseña inmediatamente

   Recordar la contraseña hasta salir de la sesión

   Recordar para siempre 

La opción mas deseable por seguridad sería la segunda. Aunque cada vez que iniciemos sesión en Ubuntu tengamos que introducirla, no cuesta nada y ahorramos disgustos a futuro.

Para desconectar esta conexión, solo tenemos que pulsar en el botón al estilo extrae tu USB o CD que se encuentra junto a la unidad mapeada, o mostrar el menú contextual con el botón derecho del ratón sobre ella y elegir la opción "desmontar". Realizará un desmontaje de la unidad mapeada, le puede costar un poco hasta que la desconecta del todo. Paciencia.

Tenemos la opción de conectarnos también a sistemas de archivos en red a través de nfs. Sería similar a lo que hemos hecho anteriormente. Este caso podría ser aplicable si tenemos un NAS en casa y queremos establecer una conexión NFS a una de las carpetas del NAS por ejemplo.

SaluDOS

Cuando los electrones te permiten tener OneNote on line de Microsoft en Ubuntu 20.04 LTS

Ya vimos en una entrada pasada que Microsoft Teams tiene una preview que funciona bajo nuestro GNU Linux, tiene limitaciones, alguna bastante limitante como el no poder poner un fondo y que todo el mundo vea la habitación donde estás, pero supongo que poco a poco irá avanzando el proyecto.

Veamos como podemos tener OneNote a través de un programa alternativo: P3X OneNote Linux o como lo denominan ahora en GitHub: Linux Electron Onenote.

El repositorio se encuentra en: https://github.com/patrikx3/onenote que actualmente está en la versión 2021.10.109, así que el proyecto se muestra muy activo y actualizado hace 5 días.

Aunque en GitHub muestran el enlace: https://www.corifeus.com/onenote/

En esta última web explican muy bien que es esta aplicación y copio literalmente: P3X OneNote Linux es, en realidad, una ventana de navegador independiente para el OneNote online. Puedes utilizar este programa sin tener que saturar tu navegador. 

Las funciones principales son:

  • que es independiente de cualquier navegador, ya que funciona en su propio proceso
  • dispone de una bandeja, que permite cerrar el navegador mientras sigue funcionando en la bandeja
  • los datos se almacenan en caché y es más rápido que abrir siempre una nueva ventana
  • permite iniciar la sesión con el usuario corporativo o personal
  • cuando hay una nueva actualización, se actualiza automáticamente (Sólo en la versión AppImage.)
  • el programa permite usar otras aplicaciones online de Microsoft, pero el propósito dedicado es usar OneNote

Tenemos un par de opciones de instalación, con paquetería snap, estos serían los pasos, aunque no los he probado, no dudo que funcionará:

   # apt update

   # apt upgrade

   # apt install snapd

   # snap install p3x-onenote

Con paquetería de software universal AppImage, que no requiere instalación de la aplicación y además como muestran en sus funciones principales, se actualizará de forma automática. Así que esta es la opción que elegiremos.

En la propia web nos muestran el proceso de descarga y ejecución, veamos los pasos. Buscamos en el propio repositorio de GitHub las Release, vamos a la última y localizamos el paquete AppImage para amd64 y con extensión .AppImage. Ese será el enlace que vamos a utilizar en la descarga con wget.

Ejecutamos:

   # cd ~/Downloads/

   # wget https://github.com/patrikx3/onenote/releases/download/v2021.10.109/P3X-OneNote-2021.10.109.AppImage

   # mkdir -p $HOME/opt 

   # mv P3X-OneNote-2021.10.109.AppImage $HOME/opt/ 

   # chmod +x $HOME/opt/P3X-OneNote-2021.10.109.AppImage 
Ya podemos lanzar la aplicación:
   # cd $HOME/opt
   # ./P3X-OneNote-2021.10.109.AppImage 

Una vez que lanzamos la aplicación, se abre la ventana y nos solicita las credenciales de nuestra cuenta de microsoft.

Tenemos también la alternativa de instalar paquete .deb, sería aun mas sencillo, localizamos el paquete en GitHub para amd64 con extensión .deb, que es mi caso, y este enlace es el que utilizaremos para la descarga con wget

   # cd ~/Downloads/

   # wget https://github.com/patrikx3/onenote/releases/download/v2021.10.109/p3x-onenote_2021.10.109_amd64.deb

 Instalamos:

   # dpkg -i  p3x-onenote_2021.10.109_amd64.deb

Si salen errores, lanzamos:

   # apt install -f

El resultado es que ya podemos buscar en nuestras aplicaciones PS3X OneNote,  lanzarlo y utilizarlo. En el primer rato de uso, la verdad es que funciona muy muy bien.

SaluDOS


lunes, 16 de agosto de 2021

Linuxeando en Steam y probando juegos

Para tener Steam en Ubuntu 20.04 solo tenemos que instalar el repositorio:

   # add-apt-repository multiverse

   # apt update -y

Realizar la instalación de steam:

   # apt install steam -y

Al abrir steam realizará la correspondiente actualización y podremos iniciar sesión. Una vez dentro vamos a cambiar las opciones sobre su uso en Linux.

   Vamos a Menú Steam > Parámetros > Steam Play > Avanzadas

   Activamos Steam Play para los demás títulos

Dejamos Proton Experimental, pero siempre podemos cambiar la versión de Proton si no funciona el juego en Linux, aunque ir hacia atrás en este caso no tiene mucho sentido.

Al iniciar el juego, Steam realizará varias descargas, el juego por un lado y proton experimental o la versión que hayamos elegido, por otro lado aquellos complementos que necesite.

Ahora mismo todos los juegos que tengo comprados, funcionan perfectamente, algunos están marcados como compatibles sobre linux y otros no.

SaluDOS



miércoles, 11 de agosto de 2021

Instalación de Minecraft en Ubuntu 20.04

Bastante sencillo el instalar Minecraft en ubuntu.

Primero descargamos el paquete .deb

   # wget https://launcher.mojang.com/download/Minecraft.deb

Realizamos la instalación del paquete:

   # sudo dpkg -i Minecraft.deb

Es posible que nos de error de dependencias perdidas o rotas, algo así como "dependency problems". Habitualmente es que no tenemos instalado Java en nuestro equipo. Lanzamos este comando en el que le decimos que instale todas las dependencias que necesite:

   # apt -f install

Y listo, ya podemos meternos en nuestros mundos de minecraft.

En caso de necesitarlo, para desinstalarlo ejecutamos:

   # apt --purge remove minecraft-launcher

No debemos olvidar que minecraft guarda habitualmente todo en un directorio oculto dentro de nuestra carpeta personal. Así que es conveniente ejecutar:

   # rm -r ~/.minecraft/*

SaluDOS

martes, 27 de julio de 2021

Testeando un mando de PS3 directamente en web

Ya no juego tanto como antes, pero me ha surgido el reutilizar un mando que tenia con conexión USB para PS3. Es un mando de una marca de tipo "ACME", que me costó hace muchos años relativamente poco.

Si necesitamos testear algo así, es sencillo, vamos a la página web: https://gamepad-tester.com/

Si no has conectado el mando, o si lo tienes conectado y no lo detecta, la propia página de inicio mostrará un mensaje: NO GAMEPAD DETECTED

En el momento en el que conectamos el mando, en mi caso muestra: Sony PS3 Dualshock

Por debajo un esquema de botones y sensores. Cuando pulsamos algo en el mando, nos muestra la detección. Simplemente maravilloso.

Te informa de los datos que recolectan, hay que tener en cuenta que para usar esta web no hemos tenido que introducir ningún dato personal.

   - Nombre del dispositivo

   - Códigos de producto y proveedor

   - Número de ejes comunicados

   - Número de botones notificados

   - Datos de la serie temporal (frecuencia con la que se informa de los dispositivos)

   - Versiones del navegador y del sistema operativo

   - No se recogen datos personales del usuario

La recolección parece razonable.

SaluDOS

Grabando en negro en OBS Studio con Debian 10 Buster y Gnome

Cuando OBS Studio no es capaz de capturar la pantalla, muestra fondo negro y solo ves pasar el cursor de un lado para otro, habitualmente se trata de un tema de configuración y tiene solución.

En Ubuntu nunca me ha dado problemas, supongo que es parte de su magia para que todo sea sencillo. Pero en Debian 10 Buster con Gnome si que me ha dado guerra, aunque solo hay que cambiar el comentario de una línea. Cuidado, a veces es tema de drivers de gráfica, configuración de OBS, etcétera y la cosa puede complicarse.

Si OBS Studio es capaz de grabar ventanas concretas pero no toda la pantalla esta solución se prueba de forma rauda y veloz. No perdemos nada intentar trabajar en Xorg y no en Wayland para comprobar el resultado.

Vamos a desactivar el inicio de sesión de Wayland, para ello vamos a editar el siguiente archivo:

   # vim /etc/gdm3/custom.conf

Buscamos la siguiente línea:

   #WaylandEnable=false

La descomentamos y quedará así:

   WaylandEnable=false

Guardamos y cerramos el archivo de configuración y reiniciamos el equipo. Si probamos OBS debería de ser capaz de grabar toda la pantalla y no solo ventanas.

SaluDOS

miércoles, 30 de junio de 2021

Cortando videos en Linux con VidCutter

Ultimamente me toca recortar videos de forma rápida, vamos a ver una herramienta muy sencilla que podemos utilizar en linux, en este caso sobre Ubuntu 20.04

Instalamos el repositorio, actualizamos e instalamos vidcutter:

   # sudo add-apt-repository ppa:ozmartian/apps

   # sudo apt update

   # sudo apt install vidcutter

Una vez instalado podemos abrir la aplicación para arrastrar el video que queremos recortar sobre la ventana de VidCutter.

Seleccionamos el punto de inicio y hacemos clic en START CLIP, vamos hasta donde queremos que esté el final del video y hacemos clic en END CLIP. 

Comprobamos que tenemos el fragmento del video que deseamos extraer y hacemos clic en SAVE CLIP y seleccionamos la ruta y el nombre que queremos poner al archivo.

Es un programa sencillo pero cumple su función.

SaluDOS



 

miércoles, 5 de mayo de 2021

Katoolin el planeta que te instala las herramientas de kali

Si tenemos una distribución debian o derivada como ubuntu, podemos realizar la instalación de las herramientas de kali de una forma bastante sencilla.

Añadimos el repositorio universe:

    # add-apt-repository universe

Actualizamos y clonamos el repositorio de katoolin3

   # apt update -y

   # git clone https://github.com/s-h-3-l-l/katoolin3

Ponemos permiso de ejecución para el script de instalación:

   # chmod +x ./install.sh

Ejecutamos:

   # ./install.sh

Nos deberá decir que la instalación ha sido satisfactoria y ya podemos ejecutar:

   # katoolin3

Entraremos a un menú en el que nos permitirá realizar varios pasos:

   Main Menu
   0) View Categories
   1) Install All
   2) Uninstall All
   3) Search repository
   4) List installed packages
   5) List not installed packages
   6) Install Kali Menu
   7) Uninstall old katoolin
   8) Help
   9) Exit

Para mi lo mejor es la opción 0, viendo las categorías de Kali podremos elegir que aplicación instalar para así poder contar solo con las herramientas que utilicemos de verdad.

SaluDOS


miércoles, 28 de abril de 2021

Cuando al coger la jarra queremos ejecutar el archivo .jar en Debian

Hace ya muchos años que a los archivos de java que tienen extensión .jar los llamo jarras, me gusta realizar traducciones literales "al vuelo".

Para poder ejectuar un .jar en Debian, para poder realizar una instalación por ejemplo y evitar que simplemente nos muestre el contenido del archivo, tenemos que generar el siguiente fichero:

   # vim /usr/share/applications/java.desktop

Introducimos dentro el siguiente contenido:

   [Desktop Entry] 

   Name=Java 

   Comment=Java 

   GenericName=Java 

   Keywords=java 

   Exec=java -jar %f 

   Terminal=false 

   X-MultipleArgs=false 

   Type=Application 

   MimeType=application/x-java-archive 

   StartupNotify=true

Una vez generado este archivo y guardado el contenido, podremos ponernos sobre un archivo .jar y en el cuadro de diálogo abrir con... nos permitirá seleccionar Java.

SaluDOS

domingo, 28 de marzo de 2021

Perdiendo el miedo a generar archivos docker-compose.yml

Todavía hay muchisima referencia en internet a dockers en los que solo se muestra el comando largo y complejo de una línea para levantar un contenedor.

Docker-compose nos ayuda a levantar y parar los contenedores de una forma ágil, habiendo definido previamente todos los parámetros y sin tanto lio como lanzando un línea gigantesca de parámetros en la que si nos hemos confundido tenemos que andar reeditando de malas maneras.

Para instalar docker-compose lanzamos el comando:

   # apt install docker-compose -y

Con docker-compose, solo tenemos que generar un directorio, meter dentro un archivo llamado docker-compose.yml, si está bien contruido, en esa misma ruta lanzamos:

   # docker-compose up

Esto nos mostrará que hace el contenedor y sus logs. Podemos pulsar ctrl+c para parar la ejecución y el contenedor se parará, si cerramos la terminal también Si queremos que se lance en segundo plano, solo tenemos que incluir el parámetro -d

   # docker-compose up -d

Para revertir lo que acabamos de hacer lanzamos:

   # docker-compose down

Este comando detiene y elimina el contenedor, las redes, los volúmenes y las imágenes creadas por up.

El el archivo yaml tenemos que especificar la versión, para conocerla ejecutamos:

   # docker-compose version

Hay que tener en cuenta que siempre hay retrocompatibilidad, pero es importante especificar la versión correcta y seguir evolucionando con la herramienta.

Para tener mas detalles sobre que versión utilizar, tenemos la documentación oficial:

   https://docs.docker.com/compose/compose-file/

   https://docs.docker.com/compose/compose-file/compose-versioning/

Podríamos seguir revisando todos los parámetros posibles, pero según el título de esta entrada queremos perderle el miedo a generar estos archivos. El camino directo cuando nos encontramos un comando docker para levantar un contenedor, solo tenemos que ir a la siguiente página:

   https://www.composerize.com/

Solo tenemos que introducir el comando y aparecerá el archivo docker-compose definido.

SaluDOS

Doctor Jenkins y Mister Docker en uno solo

Jenkins es un servidor automatizado de integración continua de código abierto. Jenkins es capaz de automatizar y probar las compilaciones de código fuente y muestra los errores que puedan aparecer en este proceso. A través de complementos puede ser ampliado en cuanto a características y funcionalidades añadidas.

Jenkins puede ser montado sobre un docker, esto claramente aligera notablemente los pasos para desplegarlo y es lo que vamos a ver. Eso sí, elegiremos mapear volúmenes para que la instalación sea persistente.

El contenedor que mantiene la comunidad actualmente es: https://hub.docker.com/r/jenkins/jenkins

Y podemos encontrar la documentación ofician en la que nos especifican como montarlo aquí: https://github.com/jenkinsci/docker/blob/master/README.md

Algunos parámetros a tener en cuenta:

   -d --> Para que corra en segundo plano

   -v jenkins_home:/var/jenkins_home --> montamos el volumen para que los datos sean persistentes ante operaciones de parada, reinicio y borrado del docker.

   -p 8080:8080 -p 50000:50000 --> Puertos que debemos mapear entre host y contenedor. Si el puerto 8080 ya lo tenemos ocupado en nuestro host, podríamos mapearlo en otro, por ejemplo: -p 8087:8080

   jenkins/jenkins:lts --> especificamos la imagen que mantiene la comunidad.

 Así que el comando completo quedaría para ejecutarlo:

   # docker run -d -v /var/jenkins_home:/var/jenkins_home -p 8087:8080 -p 50000:50000 jenkins/jenkins:lts

DOCKER-COMPOSE

El fichero docker-compose.yml tendrá el siguiente contenido:

   version: '3.3' 

      services: 

         jenkins: 

            volumes: 

               - '/var/jenkins_home:/var/jenkins_home' 

            ports: 

               - '8087:8080' 

               - '50000:50000' 

            image: 'jenkins/jenkins:lts'

Una vez que el docker está arrancado, podremos ir a http://localhost:8087, habrá que esperar un poco hasta que jenkins esté preparado. Nos solicitará lo siguiente:

Unlock Jenkins

To ensure Jenkins is securely set up by the administrator, a password has been written to the log (not sure where to find it?) and this file on the server:

/var/jenkins_home/secrets/initialAdminPassword

Así que podemos ir a esa ruta en nuestro equipo local, copiar la contraseña e introducirla para poder continuar. Con el siguiente comando obtenemos la contraseña:

    # cat /var/jenkins_home/secrets/initialAdminPassword

Una vez que hemos confirmado que somos administradores los que estamos configurando Jenkins, ya podemos seguir con el siguiente paso, configurar los posibles complementos a instalar.

Para no complicarnos de momento la vida y probarlo, podemos instalar los plugins sugeridos entre los que a día de hoy se encuentran:

Folders
OWASP Markup Formatter
Build Timeout
Credentials Binding
Timestamper
Workspace Cleanup
Ant
Gradle
Pipeline
GitHub Branch Source
Pipeline: GitHub Groovy Libraries
Pipeline: Stage View
Git
SSH Build Agents
Matrix Authorization Strategy
PAM Authentication
LDAP
Email Extension
Mailer
 
Tendremos que definir el usuario administrador y su contraseña, después nos preguntará por la URL que queremos que tenga la instancia, esta URL es la que se ofrecerá a los usuarios de Jenkins. Exactamente dice:
 
Configuracíon de la instancia:
 
La URL de Jenkins se utiliza para proporcionar la URL raíz para los enlaces absolutos a varios recursos de Jenkins. Esto significa que este valor es necesario para el correcto funcionamiento de muchas características de Jenkins, incluyendo las notificaciones por correo electrónico, las actualizaciones de estado de PR, y la variable de entorno BUILD_URL proporcionada a los pasos de construcción.
El valor propuesto por defecto que se muestra no se guarda todavía y se genera a partir de la solicitud actual, si es posible. La mejor práctica es establecer este valor a la URL que se espera que utilicen los usuarios. Esto evitará confusiones al compartir o ver los enlaces.

Lo ideal sería generar una entrada DNS con certificado y que la llamada fuese a un subdominio concreto, de cara a los programadores quedará mucho mas profesional. Para probarlo en nuestro propio equipo lo dejamos así, sin complicaciones.
 
Listo, ya podemos comenzar a trabajar con Jenkins.

SaluDOS

sábado, 27 de marzo de 2021

Gestión de dockers con Portainer

Para la gestión de docker siempre tenemos disponible nuestra amiga la consola de comandos, pero... ¿que tal si podemos utilizar un entorno gráfico?

Portainer nos permite gestionar los dockers a través de un portal web. Se instala en forma de docker y a partir de ahí podrás gestionar todos los dockers locales y remotos. 

Algunos parámetros a especificar:

   -d --> Para que se ejecute en segundo plano (dettach)

   --name portainer --> nombre del contenedor

   --restart always

   -p 9000:9000

   -v /var/run/docker.sock:/var/run/docker.sock --> este volumen es necesario para poder gestionar los dockers locales.

 El comando completo

   # docker run -d --name portainer --restart always -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce

Al acceder a http://localhost:9000, la primera acción será configurar la contraseña de administrador de Portainer.

DOCKER-COMPOSE

El fichero docker-compose.yml tendrá el siguiente contenido:

   version: '3.3' 

   services: 

      portainer-ce: 

         container_name: portainer 

         restart: always 

         ports: 

            - '9000:9000' 

         volumes: 

            - '/var/run/docker.sock:/var/run/docker.sock' 

            - 'portainer_data:/data' 

         image: portainer/portainer-ce

SaluDOS

martes, 23 de marzo de 2021

SQL Server en Linux... tal cual lo estás leyendo!

Está claro que no hay limites cuando se trata de contenedores. Efectivamente, podemos montar un SQL Server con un contenedor en una máquina con Linux, en este caso sobre Debian 10.

Si vamos a Docker Hub, podemos encontrar esta imagen mantenida oficialmente por Microsoft:

   https://hub.docker.com/_/microsoft-mssql-server

Los requerimientos que debemos cumplir:

   - Docker Engine 1.8 o superior

   - Por lo menos 2 GB de memoria RAM

   - ACCEPT_EULA=Y, confirmamos que aceptamos estas condiciones

   - SA_PASSWORD=<contraseña robusta por lo menos 8 caracteres>

   - MSSQL_PID= ID de producto/Nombre de edición. Predeterminado el valor Developer.

Los valores aceptados para especificar la edición que desplegamos en el contenedor son:

   - Developer : Esto ejecutará el contenedor usando la Edición Developer (es el valor por defecto si no se suministra la variable de entorno MSSQL_PID) 

   - Express : Esto ejecutará el contenedor usando la Edición Express

   - Standard : Esto ejecutará el contenedor usando la Edición Standard

   - Enterprise : Esto ejecutará el contenedor usando la Edición Enterprise

   - EnterpriseCore : Esto ejecutará el contenedor usando la edición Enterprise Core 

Tenemos que tener presente que estamos aceptando el EULA al lanzar estos comandos, así que vaya por delante que tenemos que cumplir las condiciones de licenciamiento con Microsoft. Por ello podemos utilizar SQL Sever 2017 para entornos de desarrollo y SQL Server Express para entornos de producción.

Hay que tener en cuenta que la versión Express tiene varias limitaciones en la memoria máxima utilizada de 1 GB por el motor de base de datos, 1 MB de caché de buffer máximo, uso máximo de 1 socket y 4 cores de CPU y la limitación de 10 GB en el tamaño de base de datos. No tiene limite en el número de usuarios concurrentes.

Para lanzar un contenedor con una instancia de la última versión de SQL Server:

   # docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Pa$$w0RD' -p 1433:1433 -d mcr.microsoft.com/mssql/server:2017-latest

Para lanzar un contenedor con una instancia de la versión Express:

   # docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Pa$$w0RD' -e 'MSSQL_PID=Express' -p 1433:1433 -d mcr.microsoft.com/mssql/server:2017-latest-ubuntu 

Una vez lanzada la instancia, solo tenemos que abrir dbeaver, seleccionar una nueva conexión a SQL Server y rellenar los datos:

   - Servidor: localhost

   - Puerto: 1433

   - Database/Schema: Master 

   - Autenticación: SQL Server Authentication

   - Usuario: sa

   - Contraseña: Pa$$w0RD

Quizás haya que esperar un poco a que establezca la conexión y ya podemos trastear con SQL Server, crear una base de datos, tablas, etcétera. 

DOCKER-COMPOSE

Para la versión SQL Express el archivo docker-compose.yml tendría:

   version: '3.3' 

   services: 

      run: 

         environment: 

            - ACCEPT_EULA=Y 

            - SA_PASSWORD=Pa$$w0RD 

            - MSSQL_PID=Express 

         ports: 

            - '1433:1433' 

         image: run

SaluDOS

Reduciendo, recortando y rebajando la escritura de texto con MARKDOWN

Markdown es un lenguuaje de marcado ligero que trata de que sea fácil de escribir y fácil de leer.  

Este lenguaje, cada vez mas utilizado, tiene la extensión de archivo .md

Para aprender a escribir en markdown hay muchos tutoriales por internet, por ejemplo: https://www.markdownguide.org/ o también en castellano https://www.markdowntutorial.com/es

Editores hay cientos por no decir miles, pero podemos tener 2 alternativas interesantes y sobre todo sencillas:

   Editor on line:  https://stackedit.io/

   Editor instalable: https://remarkableapp.github.io/linux/download.html

Además siempre podemos escribir en formato markdown en Visual Studio Code.

Y por supuesto hay muchisimas referencias que contemplan gran parte de la sintaxis: https://markdown.es/sintaxis-markdown/

A continuación una referencia rápida, pero lo mas recomendable es seguir un tutorial y experimentar con markdown, es la única forma de aprender.

FORMATO DE FUENTE

   Cursiva:    _palabra_    _frase en cursiva_

   Negrita:    **palabra**    **frase en negrita**

   Negrita y cursiva:    **_palabra_**    **_frase en negrita y cursiva_**

   Tachado:    ~~palabra~~    ~~frase tachada~~

ENCABEZADOS

   Encabezado 1:    #Encabezado 1#

   Encabezado 2:    ##Encabezado 2##

   Encabezado 3:    ###Encabezado 3###

PARRAFOS

   Ruptura dura: [Enter] al final de cada linea, empieza un nuevo párrafo después de pulsar la tecla [Enter].

   Ruptura blanda: Introducimos 2 espacios en blanco al final de cada línea. Genera un salto de línea pero la nueva línea la mantiene en el mismo párrafo.

ENLACES

   Enlace a web:    [Visita mi web](www.gaizka.net)

   Enlace con formato:    [Visita mi **web**](www.gaizka.net)

   Enlace en encabezado:    ###Visita mi [web](www.gaizka.net)###

   Enlace referencia: Para que la referencia a una URL esté solo en un punto al que podamos referenciar en cualquier parte del documento. Si tenemos que cambiar el enlace lo hacemos solo donde realmente tenemos la referencia.

       Esto por ejemplo es una referencia a [Mi web][Enlace miweb]

       [Enlace miweb]:www.gaizka.net 

IMAGENES

   Imagen:    ![Texto alternativo opcional](URL de la imagen)

   Imagen referenciada: Es el mismo concepto de referencia a una URL mediante una etiqueta que podremos especificar mas adelante.   

       ![Texto alternativo opcional][Referencia imagen]

       [Referencia imagen]: URL de la imagen    

CITAS

   Cita:    > "Texto de la cita a una fuente" 

   Cita combinando formatos: Las citas pueden contener cursiva, negrita, imágenes, etcétera.

NOTAS AL PIE DE PÁGINA

Las notas se marcan con el símbolo ^ y el número de nota encerrados entre corchetes. Da igual donde pongamos la nota real, siempre irá al pie del documento. Veamos un ejemplo:

   De esta forma marcariamos la nota 1 [^1] y asi [^2] habríamos incluido la segunda nota al pie de página. Después en cualquier momento del documento pondriamos la nota.

   [^1]: Texto de la primera nota a pie de página. 

   [^2]: **Texto de la segunda nota de pie de página** a la que podemos aplicar *formato* como al resto del texto.

LISTAS

   Elementos de lista: Podemos utilizar guion (-), símbolo más (+) o asterisco

       * Elemento 1

       * Elemento 2 

       * Elemento 3

   Elementos de lista numerada:

       1. Elemento 1

       2. Elemento 2

       3. Elemento 3

   Listas con niveles: Solo hay que separar o tabular los asteriscos del subnivel

       * Elemento 1

          * Subelemento 1.1

          * Subelemento 1.2

       * Elemento 2 

   Listas numeradas y con subniveles. Combinando las listas anteriores podemos...

       1. Elemento 1

          * Subelemento 1.1

          * Subelemento 1.2

       2. Elemento 2

   Listas de verificación: Los elementos no seleccionados deben tener un espació en blanco entre los corchetes.

       [ ] Elemento 1

       [x] Elemento 2 seleccionado

       [ ] Elemento 3

TABLAS

Para crear tablas utilizaremos el símbolo 'tubería' (|)

   | Titulo Columna 1 | Titulo Columna 2|

   |----------------------------|---------------------------|

   | Contenido celda 1| Contenido celda 2|

   | Contenido celda 3| Contenido celda 4|

 

SaluDOS

lunes, 22 de marzo de 2021

Qucs simulando circuitos electrónicos

Quite Universal Circuit Simulator, en su abreviatura: Qucs, es un simulador integrado de circuitos que utiliza una interfaz gráfica para introducir los componentes que forman el circuito y realizar simulaciones. 

Permite la simulación: en corriente continua, alterna, análisis paramétrico, análisis de balance de armónicos, análisis de ruido, etcétera. Además presenta una interfaz sencilla y simple de manejar. 

Su página web:  http://qucs.sourceforge.net/

Para utilizarlo de forma sencilla sobre cualquier distribución linux, vamos a utilizar la opción de hacerlo a través de un contenedor.

Docker: https://hub.docker.com/r/qucs/qucs

Como especifican desde el docker oficial, para ejecutar el programa solo tenemos que ejecutar la siguiente línea:

   # docker run --rm \ --volume /tmp/.X11-unix:/tmp/.X11-unix \ --volume ~/workspace:/home/.qucs \ qucs/qucs

Automáticamente se abrirá la aplicación en una ventana con interfaz gráfica.

DOCKER-COMPOSE

El contenido del archivo docker-compose.yml será:

   version: '3.3' 

   services: 

      qucs: 

         volumes: 

            - '/tmp/.X11-unix:/tmp/.X11-unix' 

            - '~/workspace:/home/.qucs' 

         image: qucs/qucs

SaluDOS

viernes, 5 de marzo de 2021

Instalar docker-compose en CentOS 7

Para instalar docker-compose en un servidor con CentOS 7 tenemos que seguir los siguientes pasos:

Descargamos la última versión que podemos encontrar en:  https://github.com/docker/compose/releases/

En estos momentos vemos que la última versión es la 1.28.5. La descargamos introduciendo la versión adecuada que tenemos instalada mediante uname y lo llevamos a la ruta adecuada, todo en una misma línea:

   # curl -L "https://github.com/docker/compose/releases/download/1.28.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Añadimos permiso de ejecución:

   # chmod +x /usr/local/bin/docker-compose

Comprobamos $PATH, queremos poder lanzar docker-compose desde cualquier ruta en la que nos encontremos:

   # echo $PATH

Añadimos la ruta a $PATH si no contiene la ruta donde está docker-compose:

   # export PATH="/usr/local/bin:$PATH"

Comprobamos la versión:

   # docker-compose --version

SaluDOS
 

domingo, 28 de febrero de 2021

Instalar GitLab con docker

GitLab además de su versión en la nube puede ser instalado en un servidor o máquina virtual. Pero otra opción muy interesante es la de desplegarlo en un contenedor.

El docker que vamos a utilizar es el oficial de GitLab y en concreto la versión CE (Community Edition):

    https://hub.docker.com/r/gitlab/gitlab-ce/

La documentación oficial la podemos encontrar en:

   https://docs.gitlab.com/omnibus/docker/

Verás que trata sobre la versión Enterprise, pero como indican mas abajo, solo tienes que sustituir gitlab-ee por  gitlab-ce en todos los comando propuestos.

Para correr el docker de GitLab, tendremos que especificar los siguientes parámetros:

   -d --> Para ponerlo en segundo plano (dettach)

   -p 443:443 --> Puerto 443 en el docker y el correspondiente en nuestro equipo

   -p 80:80

   -p 22:22

   --name gitlab --> Nombre del docker

   --restart always --> reiniciará ante errores

   -v /srv/gitlab/config:/etc/gitlab 

   -v /srv/gitlab/logs:/var/log/gitlab

   -v /srv/gitlab/data:/var/opt/gitlab

Para desplegar este docker solo debemos lanzar este comando:

   # docker run -d -p 443:443 -p 80:80 -p 22:22 --name gitlab --restart always -v /srv/gitlab/config:/etc/gitlab -v /srv/gitlab/logs:/var/log/gitlab -v /srv/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce

Es posible que cuando vayamos a acceder a http://localhost obtengamos una respuesta similar a: 502 - Whoops, GitLab is taking too much time to respond. Debemos dejar pasar un rato, hasta que GitLab arranque completamente.

Vamos a ver como cambiar la contraseña de root, son pocos pasos y nos permite repetir la operación siempre que queramos. Lo primero nos conectamos al docker de forma interactiva:

   # docker exec -it gitlab bash

Una vez dentro del contenedor, ejecutamos:

   # gitlab-rails console -e production

Tendremos que esperar a que vuelva a aparecer el prompt y ejecutamos:

   > user = User.where(id: 1).first

   > user.password = 'ContraseñaNueva'

   > user.password_confirmation = 'ContraseñaNueva'

   > user.save

   > exit

Salimos de la consola del docker:

   # exit

Y ya podemos entrar a http://localhost de nuevo e iniciar sesión con el usuario root y la nueva contraseña que hemos especificado anteriormente. A partir de ahí pura esencia GitLab!!!

DOCKER-COMPOSE

El fichero docker-compose.yml deberá contener:

   version: '3.3' 

      services: 

         gitlab-ce: 

            ports: 

               - '443:443' 

               - '80:80' 

               - '22:22' 

            container_name: gitlab 

            restart: always 

            volumes: 

               - '/srv/gitlab/config:/etc/gitlab' 

               - '/srv/gitlab/logs:/var/log/gitlab' 

               - '/srv/gitlab/data:/var/opt/gitlab' 

            image: gitlab/gitlab-ce

SaluDOS

domingo, 21 de febrero de 2021

Sentencias útiles en MySQL

Vamos a ver varios ejemplos útiles para trabajar con MySQL, son cosas sencillas y muy básicas pero creo que interesantes y del día a día.

Empezaremos conectándonos al servidor de base de datos con usuario root:

   # mysql -u root -p 

CREAR USUARIOS, PRIVILEGIOS Y BASES DE DATOS

Para no utilizar el usuario root en labores de administración, lo ideal es crear un usuario diferente como por ejemplo adminUSER:

   > GRANT ALL PRIVILEGES ON *.* TO 'adminUSER'@'localhost' IDENTIFIED BY 'Pa$$w0rd';

Generar una base de datos es tan sencillo como lanzar la siguiente sentencia SQL especificando el nombre de la base de datos:

    CREATE DATABASE testDB;

Si vamos a crear un usuario específico para que sea administrador solo de esa base de datos podemos crear el usuario adminTEST:

   > GRANT ALL PRIVILEGES ON testDB.* TO 'adminTEST'@'localhost' IDENTIFIED BY 'Pa$$w0rd';

La próxima vez que nos conectemos al servidor de base de datos podremos iniciar sesión con este usuario, así solo tendremos privilegios sobre la nueva base de datos:

   # mysql -u adminTEST -p 

Muchas veces necesitamos un usuario que tenga privilegios de solo lectura sobre una base de datos, por ejemplo un usuario de servicio con el que vamos a monitorizar. Empecemos viendo como crear un usuario que tendrá acceso desde el mismo servidor de base de datos solo a la base de datos especificada:

   > GRANT SELECT ON testDB.* TO 'readTEST'@'localhost' IDENTIFIED BY 'Pa$$w0rd';

Si lo que deseamos es que se conecte desde cualquier equipo remoto:

   > GRANT SELECT ON testDB.* TO 'readTEST'@'%' IDENTIFIED BY 'Pa$$w0rd';

O podemos ser mas restrictivos especificando el nombre DNS o la dirección IP desde la que se conectará el usuario con acceso de lectura:

   > GRANT SELECT ON testDB.* TO 'readTEST'@'NombreServidorRemoto' IDENTIFIED BY 'Pa$$w0rd';

Siempre que cambiemos los privilegios de un usuario o lo creemos, hay que ejecutar:

   > FLUSH PRIVILEGES;

CREAR TABLAS

Cuando estamos conectados a un servidor con varias bases de datos, primero tendremos que ejecutar la sentencia para utilizar una base de datos concreta:

   > USE testDB;

Una forma rápida de generar tablas en MySQL es a través de un pequeño script, aunque siempre podemos utilizar un editor gráfico como podría ser DBeaver. Debemos especificar el nombre de la tabla, los campos que la componen y sus características. Veamos algunos ejemplos:

Creación de una tabla de usuarios: Crearemos UserID, un campo que será clave principal, autoincremental y no podrá ser null. Además crearemos una serie de campos de texto de tamaño variable para especificar los datos del usuario, alias, nombre, etcétera. Por último un campo de tipo booleano para establecer si el usuario está activo o no.

   > CREATE TABLE DBUsers (
         UserID int NOT NULL AUTO_INCREMENT,
         Alias varchar (50) NOT NULL,
         FirstName varchar(100),
         LastName varchar(100),
         Email varchar(150),
         Enabled boolean DEFAULT 1,
         PRIMARY KEY (UserID)
         );

Creación de una tabla de grupos de usuarios o roles: Crearemos GroupID, un campo que será clave principal, autoincremental y no podrá ser null. Además estableceremos el campo con el nombre del grupo y un campo booleano para establecer si el usuario está activo o no.


   > CREATE TABLE DBGroupsList (
         GroupID int NOT NULL AUTO_INCREMENT,
         GroupName varchar (50) NOT NULL,
         Enabled boolean DEFAULT 1,
         PRIMARY KEY (GroupID)
         );

Creación de una tabla en la que asignaremos usuarios a grupos especificando los identificadores de usuario y grupo. Además añadimos un campo que establezca si esa asignación está activa o no. Además estos campos tienen que estar conectados a las tablas que definen la lista de usuarios y la lista de grupos, para eso son las claves foráneas.


    > CREATE TABLE DBGroupsAssign (
         UserID int NOT NULL
         GroupID int NOT NULL,
         Enabled boolean DEFAULT 1,
         FOREIGN KEY (UserID) REFERENCES DBUsers(UserID),
         FOREIGN KEY (GroupID) REFERENCES DBGroupsList(GroupID)
         );

MODIFICAR TABLAS

Una labor muy común es modificar una tabla, vamos a ver el caso mas frecuente, por ejemplo que tenemos que añadir un campo.

En este ejemplo vamos a añadir la fecha de alta en la tabla de usuarios. Además como lo queremos en un sitio concreto, podemos especificar FIRST para ser el primer campo de la tabla o AFTER para especificar el campo detrás del que queremos insertar el nuevo.

   > ALTER TABLE DBUsers ADD StartDate DATETIME AFTER Alias;

Otro caso muy frecuente es modificar alguna característica de un campo ya existente. Por ejemplo vamos a modificar la longitud de un campo, imaginemos que el Email se nos ha quedado corto en la tabla de usuarios. Además vamos a hacer que sea un campo obligatorio, que no pueda estar vacio.

   > ALTER TABLE DBUsers MODIFY Email varchar(255) NOT NULL;

SaluDOS

Montar un docker mysql y conectarse desde dbeaver

VERSIÓN

Antes de montar el docker de mysql, es mejor revisar este enlace y decidir la versión que queremos utilizar:

https://hub.docker.com/_/mysql

Actualmente los dockers soportados son las siguientes versiones de mysql:

   8.0.23   8.0.8   latest

   5.7.33   5.7   5

   5.6.51   5.6

Además vamos a tener la precaución de que los datos sean persistentes. Una vez que se elimine el docker, podremos volver a levantarlo y tendremos nuestras bases de datos intactas.

CREACIÓN DEL DOCKER

Veamos que parámetros vamos a utilizar para levantar el docker, algunos los especificaremos pero son opcionales.

   -d --> Modo en segundo plano (detached)

   --rm --> Cuando paremos el contenedor automáticamente se eliminará

   --name mysql --> Nombre del docker

   -e --> Sirve para pasar al docker una variable de entorno, en este contenedor le vamos a especificar la contraseña del usuario root. seguido de este parámetro especificamos la variable y su valor:

   MYSQL_ROOT_PASSWORD=Pa$$w0rD

   -p 3306:3306 --> Puerto 3306 en el equipo y el correspondiente en el docker

   -v mysql_data:/var/mysql --> Ruta local del equipo y la correspondiente en el docker, esto hará que los datos se guarden en el equipo local y sean persistentes siempre  que especifiquemos la misma configuración del volumen.

   mysql:latest --> última versión del docker de mysql en el repositorio oficial Docker Hub. Si quisieramos una versión concreta, podriamos especificarla:

      mysql:5.7.33

El comando completo sería:

   # docker run -d --rm --name mysql -e MYSQL_ROOT_PASSWORD=Pa$$w0rD -p 3306:3306 -v mysql_data:/var/mysql mysql

Comprobamos que el docker está funcionando:

   # docker ps -a

DOCKER-COMPOSE 

El fichero docker-compose.yml tendría el siguiente contenido:

   version: '3.3' 

   services: 

      mysql: 

         container_name: mysql 

         environment: 

            - MYSQL_ROOT_PASSWORD=Pa$$w0rD 

         ports: 

            - '3306:3306' 

         volumes: 

            - 'mysql_data:/var/mysql' 

         image: mysql

CONEXIÓN DESDE DBEAVER

Para conectarnos a la base de datos que tenemos en un contenedor en nuestro propio equipo, creamos una nueva conexión, seleccionamos mysql y especificamos los datos básicos:

   - Server Host: localhost

   - Port: 3306

   - Nombre de usuario: root

   - Contraseña: Pa$$w0rD

Al finalizar podremos realizar la conexión. Es posible que aparezca algún error en la conexión debido a un parámetro mal configurado. Tanto al crear la conexión como al editarla, en la pestaña Driver Properties podremos reconfigurar una infinidad de parámetros y su valor en la conexión.

Si la conexión no la realizamos desde el mismo equipo que tiene el docker, hay que tener en cuenta que para conexiones remotas tendremos que abrir correctamente los puertos en el firewall del equipo que contiene el contenedor de mysql.

SaluDOS

jueves, 4 de febrero de 2021

DBeaver, el castor que te conecta a cualquier base de datos desde cualquier sistema operativo

Hay muchos programas para poder conectarnos y administrar bases de datos. Algunos son específicos y otros genéricos con compatibilidad con las principales bases de datos como mySQL, Ms SQL, PostgreSQL, Oracle, etc...

DBeaver es un proyecto libre y de código abierto.

DBeaver tiene dos versiones, la community que es la que instalaremos y una enterprise 'tope de gama' que cuesta unos 20$/mes o 200$/año aproximadamente. Se puede consultar en la web de la versión enterprise:

   https://dbeaver.com/

Es multiplataforma, por lo que algo muy atractivo es que se puede instalar en Linux, Windows y MacOS. Podemos encontrar el software y mucha mas información sobre como instalarlo o la documentación asociada en la web oficial del proyecto Community:

   https://dbeaver.io/download/

Tal y como nos indican en su web, para realizar la instalación en una distribución linux tenemos varias opciones para instalarlo, descargando el paquete de la web, paquete snap, flatpak o clonar el repositorio de github. El repositorio en github lo encontramos en: 

   https://github.com/dbeaver/dbeaver/releases

Veamos por ejemplo la instalación del paquete. Aunque podemos hacer la descarga desde la web, veamos como sería desde la consola tal y como lo indica la documentación oficial:

   # wget -O - https://dbeaver.io/debs/dbeaver.gpg.key | sudo apt-key add - 

   # echo "deb https://dbeaver.io/debs/dbeaver-ce /" | sudo tee /etc/apt/sources.list.d/dbeaver.list 

   # apt-get update && sudo apt-get install dbeaver-ce

Tras descargarlo de la web oficial, solo tenemos que posicionarnos en el directorio de descarga y ejecutar el comando correspondiente.

   Para distribuciones derivadas de Debian:

   # dpkg -i dbeaver_ce-x.x.x_amd64.deb

   Para distribuciones derivadas de Red Hat el equivalente es:

   #  rpm -ivh dbeaver_ce-x.x.x_amd64.rpm

La verdad es que se instala casi de forma instantánea y es un programa muy ligero. No te defrauda ni su logo oficial.

SaluDOS

miércoles, 3 de febrero de 2021

Instalar openVAS con docker

OpenVAS es una suite que permite realizar el escaneado y la gestión vulnerabilidades.

Está claro que podemos tenerlo integrado en una distribución tipo Kali Linux para realizar trabajos de auditorias de seguridad o utilizarlo desde un gestor de eventos de seguridad (SIEM) como OSSIM.

Pero... ¿Qué tal si lo instalamos y utilizamos desde un docker?

Parece una idea atractiva, podemos desplegarlo, utilizarlo, eliminarlo en cualquier momento sin entrar a instalaciones o parametrizaciones complicadas.

El docker que vamos a utilizar y que yo he probado está en:

    https://hub.docker.com/r/atomicorp/openvas

Para correr el docker de openVAS, tendremos que especificar los siguientes parámetros:

   -d --> Para ponerlo en segundo plano (dettach)

   -p 443:443 --> Puerto 443 en el docker y el correspondiente en nuestro equipo

   --name openvas --> Nombre del docker

Desplegar este docker es así de sencillo, solo con este comando:

   # docker run -d -p 443:443 --name openvas atomicorp/openvas

Si queremos actualizar las Network Vulnerability Tests (NVT), es decir, las pruebas de vulnerabilidades de red, podríamos lanzar:

   # docker run -d -p 443:443 -e OV_UPDATE=yes --name openvas atomicorp/openvas

Una vez que lo tengamos corriendo, solo hay que ir a un navegador e introducir la dirección web que nos conectaría a este servicio:

   https://localhost

Obviamente hay que asegurarse de que el puerto 443 está libre, si no siempre podemos elegir otro.

DOCKER-COMPOSE

El fichero docker-compose.yml deberá contener:

   version: '3.3' 

   services: 

      openvas: 

         ports: 

            - '443:443' 

         environment: 

            - OV_UPDATE=yes 

         container_name: openvas 

         image: atomicorp/openvas

SaluDOS

Análisis de los errores y logs de un sistema Linux

Cuando hay un problema en un servidor tenemos que tener un procedimiento que nos permita realizar un análisis exhaustivo de forma ordenada y sencilla.

Como ya vimos en una entrada anterior los logs se almacenan en: /var/log

Está claro que ahí tendremos que realizar un recorrido según el problema del que se trate, pero quizás sea interesante empezar por otro lado para coger perspectiva. Veamos algunos comandos que son útiles cuando analizas un sistema y comencemos por analizar a los usuarios, quien está conectado, su historial de conexión, etcétera. Dependiendo de la distribución, quizás sea necesario instalar algún paquete. Si la idea te gusta dejatelo ya instalado previamente por si un día tienes que analizar el sistema.

USUARIOS E INICIO DE SESIÓN

Obtengamos un listado de todos los usuarios del sistema:

   # cat /etc/passwd

Para saber quien está conectado actualmente:

   # who -a

Si queremos ver el historial de los inicios de sesión podemos ejecutar el comando:

   # last -a


Para ver el último inicio de sesión de los usuarios en el sistema:

   # lastlog

Para ver el último reinicio del sistema:

   # last reboot


CPU, MEMORIA, PROCESOS Y RED

Veamos un listado de los procesos del sistema, par ver uso de CPU, memoria, tamaños de cache, procesos con PID, usuarios, etcétera:

   # top

Si este comando te gusta, prueba a instalar htop, tiene caracteristicas y un interfaz mas trabajado.

   # htop

Listado de ficheros abiertos actualmente:

   # lsof

Sobre la red, puertos y paquetes de entrada y salida:

   # netstat -a

En cuanto a los procesos de entrada y salida en disco, podemos ejecutar:

   # iotop

Si quieres obtener estadisticas de utilización del ancho de banda de la red:

   # iftop

Obviamente si necesitamos tener visibilidad y exactitud sobre todo lo que pasa a nivel de paquetes en la red...wireshark es tu aliado, pero eso es otro cantar.

HARDWARE, DISCO DURO Y ESPACIO

Tabla de particiones:

   # fdisk -l

Listado de puntos de montaje con el comando mount:

   # mount -l

Listado de puntos de montaje, sistemas de archivos y su uso:

   # df -aTh

Interesante echar un vistazo a fstab:

   # cat /etc/fstab

NAVEGADOR DE LOGS

Y por último, cuando acabas en el directorio de logs y te enfrentas a tanto archivo, la forma tradicional era hacer un cat o tail por ejemplo:

   # cat /var/log/syslog

Podemos añadir filtros con grep y ver por ejemplo todo lo que contenga la palabra Network:

   # cat /var/log/syslog | grep Network

Con Tail podemos ir mas allá y mantener el fichero abierto y ver en tiempo real que pasa en el log:

   # tail -f /var/log/syslog

Otra herramienta utilizada ultimamente era journalctl del systemd, una herramienta que podemos instalar y utilizar.

Pero un programa muy interesante para tener una perspectiva global de los logs del sistema es lnav. Y creo que combina muy bien todo lo que nos puede ofrecer tail

Dependiendo del sistema debemos instalarlo:

   En distribuciones derivadas de Debian:

      # apt install lnav

   En distribuciones derivadas de Red Hat:

      # yum install epel-release

      # yum install lnav

Al lanzarlo sin especificar el archivo log que quieres consultar, verás como ha navegado en todos los logs del sistema y te presenta un resumen exhaustivo de todo lo que ha pasado, y lo mas importante, de todo lo que está pasando en vivo y en directo.

   # lnav 

Siempre puedes analizar solo una parte de los logs, por ejemplo:

   # lnav /var/log/syslog

O podemos centrarnos en syslog pero para todos los archivos de la rotación de logs:

   # lnav /var/log/syslog*

Lo bueno es que realiza resaltado de sintaxis y esto ayuda mucho a un repaso visual rápido.

Otro punto fuerte es que permite realizar búsquedas como las que realizarías en un vim, por poner un ejemplo cercano en el mundo de la consola. En este ejemplo resaltaría todo lo que contenga la palabra especificada:

   /Network

Nada mas poner el cáracter / lnav muestra una pequeña ayuda en la sintaxis:

   Syntax Help  ::
       .   Any character     a|b  a or b         ^       Start of string
       \w  Word character    a?   0 or 1 a's     $       End of string
       \d  Digit             a*   0 or more a's  (...)   Capture
       \   Escape character  a+   1 or more a's  [ab-d]  Any of a, b, c, or d
   Examples
     abc* matches 'ab', 'abc', 'abccc'
     key=(\w+) matches key=123, key=abc and captures 123 and abc
     \[abc\] matches '[abc]'

Incluso realiza una previsualización en la que puedes ver algunos resultados y como quedaría la búsqueda.

Pero lnav va mucho mas allá, permite realizar búsquedas sql. En la página oficial podemos consultar como hacer esa extracción de datos aquí. Tenemos que comenzar con el carácter ; para entrar en el modo búsqueda. Cuando introducimos el cáracter ; directamente nos muestra una pequeña ayuda:

   Query Help   ::
       SELECT  Select rows from a table       DELETE  Delete rows from a table
       INSERT  Insert rows into a table       UPDATE  Update rows in a table
       CREATE  Create a table/index           DROP    Drop a table/index
       ATTACH  Attach a SQLite database file  DETACH  Detach a SQLite database
   Examples
       SELECT * FROM syslog_log WHERE log_level >= 'warning' LIMIT 10
       UPDATE syslog_log SET log_mark = 1 WHERE log_line = log_top_line()
       SELECT * FROM logline LIMIT 10

Para ver las tablas y campos que podemos consultar debemos lanzar el siguiente comando:

    ;.schema

Ahí veremos todas las tablas virtuales que se generan y los campos a los que podríamos acudir para filtrar la búsqueda.

Por poner algún ejemplo útil, podríamos hacer una consulta sencilla tal y como marca la documentación oficial para ver el resultado:

    ;select * from logline

Herramienta sencilla, fácil de implementar, utilizar y con muchas posibilidades para consultar los logs del sistema.

SaluDOS

lunes, 25 de enero de 2021

Instalar Filebrowser con docker

Filebrowser es un proyecto muy interesante, permite mapear un directorio en un  equipo y transformarlo en una página web desde la que podremos manejar los directorios y archivos, subir, bajar, eliminar contenido, etcétera.

El proyecto se encuentra en:

   https://github.com/filebrowser/

El primer paso será crear el directorio donde trabajará Filebrowser de forma local en el equipo que contenga el docker:

   # mkdir /fbsrv 

Una alternativa interesante sería no crear un directorio específico y utilizar por ejemplo /home/nombredeusuario, la ruta de nuestro home, de esta forma accederemos directamente a todos nuestros archivos en modo web.

Podemos usar cualquier puerto, pero antes nos aseguramos de que el puerto que vamos a utilizar, en este ejemplo el 8080, está libre en el equipo que contendrá el docker, para ello ejecutamos:

   # lsof -i -P -n | grep 8080

Para correr el docker de filebrowser, tendremos que especificar los siguientes parámetros:

   --name Filebrowser --> Nombre del docker

   --restart always --> Si tiene algun error que reinicie siempre

   -p 8080:80 --> Puerto 8080 en el equipo y el correspondiente en el docker

   -v /fbsrv:/srv --> Ruta local del equipo y la correspondiente en el docker

   -e TZ="Europe/Madrid" --> En nuestro caso el huso horario es este

   filebrowser/filebrowser:latest --> última versión del docker de filebrowser 

El comando para bajar la imagen y correr el docker quedaría algo como esto, dependiendo de si necesitamos variar algún parámetro:

   # docker run -d --name Filebrowser --restart always -p 8080:80 -v /fbsrv:/srv -e TZ="Europe/Madrid" filebrowser/filebrowser:latest

El usuario administror por defecto es: 

   Usuario: admin

   Contraseña: admin

Accedemos a la página web de Filebrowser. El primer paso a realizar siempre debe ser cambiar la contraseña del usuario admin y ya de paso podemos cambiar el idioma en el punto de menú Settings.

   http://localhost:8080 

Si mapeamos una ruta del tipo /home/nombredeusuario, que contenga archivos ocultos, será conveniente en settings activar la opción: Hide dotfiles

Para parar y eliminar el docker:

   # docker stop Filebrowser

   # docker rm Filebrowser

Recuerda que aunque elimines el docker, toda la información que hayas manejado seguirá estándo en local en el equipo. Eso si, tendremos que volver a poner la contraseña de admin si volvemos a lanzarlo.

DOCKER-COMPOSE

El fichero docker-compose.yml tendrá el siguiente contenido:

   version: '3.3' 

   services: 

      filebrowser: 

         container_name: Filebrowser 

         restart: always 

         ports: 

            - '8080:80' 

         volumes: 

            - '/fbsrv:/srv' 

         environment: 

            - TZ=Europe/Madrid 

         image: 'filebrowser/filebrowser:latest'

SaluDOS

viernes, 22 de enero de 2021

Los retoques de tweaks en Ubuntu Desktop

Para instalar tweaks en Ubuntu Desktop solo nos hace falta una línea en consola:

   # apt-get install gnome-tweak-tool -y

A partir de aqui dos opciones para lanzarlo, podemos buscar en nuestro escritorio la aplicación llamada retoques o podemos ejecutar el comando:

   # gnome-tweaks

Recordad que en gnome shell se puede pulsar alt+F2 y para lanzar un comando directamente.

Ahora ya podemos realizar ciertas personalizaciones de una forma muy sencilla.

SaluDOS

lunes, 4 de enero de 2021

Instalar Powershell en Ubuntu

Vamos a instalar Powershell en nuestro Ubuntu 20.04, para ello seguiremos los pasos marcados por Microsoft en esta página.

Por si acaso revisamos la versión de Ubuntu que tenemos:

   # lsb_release -a

Según la versión que tengamos tendremos que seguir los pasos que marca Microsoft, para la 20.04, ejecutaremos los siguientes comandos:

Actualizamos la lista de paquetes:

   # sudo apt-get update

Instalamos los paquetes prerequisitos:

   # sudo apt-get install -y wget apt-transport-https software-properties-common

Descargamos la clave GPG del repositorio de Microsoft:

   # wget -q https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb

Registramos las claves GPG del repositorio de Microsoft:

   # sudo dpkg -i packages-microsoft-prod.deb

Actualizamos la lista de productos:

   # sudo apt-get update

Activamos los repositorios "Universo":

   # sudo add-apt-repository universe

Instalamos Powershell:

   # sudo apt-get install -y powershell

Una vez que ya tengamos el páquete de Powershell instalado, podremos lanzar powershell:

   # pwsh

Y ya podemos utilizar powershell.

SaluDOS