Buscar este blog

martes, 21 de agosto de 2018

Actualizar de Proxmox 4 a Proxmox 5, Debian 8 Jessie a Debian 9 Stretch



Si recientemente has actualizado tu Proxmox 4 habrás visto el mensaje "Support for Proxmox VE 4.4
ends on June 30, 2018". Así que ha llegado el momento de actualizar a la última versión Proxmox 5.

Este artículo está basado en la fuente principal en la web de www.proxmox.com en su wiki de soporte: https://pve.proxmox.com/wiki/Upgrade_from_4.x_to_5.0 consúltalo para más ayuda.

En términos generales, existen dos posibilidades para pasar de Proxmox 4 a Proxmox 5.
  1. La primera opción es realizar una nueva instalación en hardware nuevo para posteriormente restauración de máquinas virtuales desde la copia de seguridad. 
  2. La segunda opción es realizar una actualización en a través de apt, paso a paso.
En cualquier caso, será necesario que vacíes la memoria caché del navegador después de la actualización y vuelvas a cargar la página de la GUI o existe la posibilidad de que veas muchas fallas.

Seguramente si utilizas tu servidor de virtualización Proxmox como laboratorio de pruebas como lo hago yo, es muy probable que no tengas disponible nuevo hardware para realizar una nueva instalación y realizar una migración de todas las máquinas virtualizadas.

Así pues en nuestro caso vamos a poner en practica la opción de actualizar; nos disponemos a actualizar Proxmox desde el repositorio de APT. Vamos a aclarar que esta actualización en Debian de proxmox va asociada a la versión de Debian que corremos. Proxmox 4 está asociado a la versión Debian 8 (Jessie) mientras que Proxmox 5 está asociado a la versión Debian 9 (Stretch), por tanto principalmente lo que haremos para hacer la actualización de Proxmox es una actualización de repositorios para utilizar la última versión de Debian  9 (Stretch). 

IMPORTANTE: Tal y como especifican en el manual oficial de Proxmox; debes saber antes de comenzar si usa ceph, actualice su clúster Ceph a la versión Luminous antes de actualizar, siguiendo el artículo Ceph Jewel to Luminous.

Antes de actualizar

Principalmente nos tenemos que asegurar antes de actualizar de cumplir los siguientes puntos:
  • Tenemos copia de seguridad de todas las máquinas virtuales.
  • Todo el sistema está funcionando correctamente. 
  • Todas las máquinas virtuales están correctamente apagadas. 
  • Asegurarnos de estar en la última versión (Proxmox 4.4) antes de iniciar el proceso de actualización a Proxmox 5, para ello ejecutar: 
    • apt-get update && apt-get dist-upgrade
  • Mi ultima recomendación personal es reiniciar el sistema con todas las máquinas sin iniciar (start on boot OFF).

Comenzamos la actualización: 

Los pasos para la actualización sin pocos y simples como puedes ver. 

1. Cambiar en nuestro sources.list de nombre de versión, cambiando de jessie a stretch. Puede que no estemos utilizando el nombre de la versión en nuestro sources.list asegúrate. 
sed -i 's/jessie/stretch/g' /etc/apt/sources.list
1.1. Igualmente hay que cambiar el nombre de la versión en nuestro fichero pve-enterprise.list, en mi caso tenía el repositorio de Proxmox en el propio sources.list, puesto que este Proxmox venía de una versión anterior donde el repositorio simplemente se añadía en el sources.list principal.
sed -i 's/jessie/stretch/g' /etc/apt/sources.list.d/pve-enterprise.list
2. Actualizar nuestra lista de repositorios con la actual Stretch.
apt-get update
3. Descargar e instalar las nuevas versiones de paquetes.
apt-get dist-upgrade

Este último paso en el proceso de actualización será el más largo y también dependerá mucho de nuestra linea de acceso a internet. Puesto que tiene que descargar todos los paquetes necesarios para la actualización y posteriormente desempaquetarlos e instalarlos.

Además durante el proceso de instalación algunos paquetes requieren de la intervención del usuario, para solicitar la confirmación de reinicio de algunos servicios esenciales para el sistema (ssh, postfix, ...) o para solicitar confirmación de instalación de los ficheros de configuración del desarrollador o bien mantener los existentes. 

IMPORTANTE: Actualizar desde terminal ssh

Si pretendes hacer la actualización desde un terminal ssh no ejecutes el comando "apt-get dist-upgrade" directamente en el terminal ssh. Podrías perder la conexión por cualquier motivo y no sabrás cómo/cuando terminó el proceso de actualización o si el proceso solicita de tu intervención, el proceso de actualización quedará paralizado y puede dejar el sistema en un estado inestable. 

Siempre que necesito ejecutar un proceso largo o con cierto nivel de riesgo para la estabilidad del sistema en mis sistemas, utilizo "screen". Este comando nos permite "virtualizar" un terminal que cuelga del raíz de procesos del sistema, es decir, pese a ejecutar screen desde un terminal ssh el proceso colgará fuera del proceso ssh y si perdemos la conexión nuestros procesos seguirán su curso y podremos volver a recuperarlos cuando lo necesitemos. 

Puedes visitar un artículo que escribí hace tiempo en este blog sobre screen, pero te dejo los comandos básicos de screen aquí como ayuda:
  • Crear un terminal: screen -dmS ProcesoUpgrade
  • Acceder al terminal con el nombre ProcesoUpgrade: screen -r ProcesoUpgrade
  • Atajo de teclado para salir del terminal screen sin cerrar el proceso que hemos ejecutado: ctrl+a+d

jueves, 19 de julio de 2018

Ampliar disco máquina virtual

Este es un pequeño manual que describe el procedimiento a seguir para ampliar el tamaño de un disco duro virtual. En mi caso he utilizado una máquina virtual KVM con un disco virtual de tipo ".qcow2". Depende del tipo de máquina virtual que utilices podrás aprovechar algunas partes de este manual.

1. Modificar tamaño de la imagen

En primer lugar tenemos que modificar la definición del fichero ".qcow2" para que tenga un tamaño mayor. Cuando se crea se define un tamaño y este será el tamaño máximo que tomará. Depende del sistema de virtualización que utilices te permitirá hacerlo desde el entorno de administración o no.

Por ejemplo Proxmox (versión 3.1) permite modificar el tamaño de las imágenes ".qcow2" de una forma muy sencilla; desde un botón "Resize disk", donde nos pregunta cuanto queremos ampliar el tamaño de la imagen.

Pero si no utilizas Proxmox, puedes utilizar la herramienta "qemu-img" para modificar el tamaño máximo de tu ".qcow2". Para modificar el tamaño aumentando en 10GB utiliza:
qemu-img resize fichero.qcow2 +10G
Para consultar el tamaño que tiene actualmente definido el fichero puedes utilizar el siguiente comando:
qemu-img info fichero.qcow2

2. Modificar tabla de particiones

Bien ahora nuestra máquina virtual ya tiene más capacidad, pero el sistema operativo que la gestiona aún no se ha enterado. Tenemos que modificar la tabla de particiones de nuestro disco para hacer que aumente el tamaño de la partición y así poder comenzar a utilizar este nuevo espacio.

Este tipo de operaciones sobre la tabla de particiones del disco, hay que hacerlas con el sistema de ficheros desmontado. Si estamos trabajando sobre el sistema de ficheros principal, será necesario arrancar con un CD Live (digo cd live, pero puede ser usb live) para poder trabajar con el sistema desmontado.

Existen muchas herramientas para la manipulación de tablas particiones de los discos desde sistemas "live", yo he utilizado clonezilla. Es un poco tosca y posiblemente nada amigable, pero una vez que sabes utilizar las herramientas básicas desde linea de comando no tendrás problemas con ninguna otra y podrás utilizarlas en cualquier sistema.

El disco que yo quería aumentar su tamaño era el disco principal y tenía; por un lado la partición principal del sistema y a continuación de esta una partición extendida que contenía la partición para swap. Y tras todas las particiones tenía el nuevo espacio libre sin definir.

Para aumentar el tamaño de la partición principal tenía que eliminar la partición extendida y así poder aumentar el tamaño a la partición principal sin pisar el espacio que ocupa la partición para la swap.

Con herramientas como gparted se puede directamente redimensionar el tamaño de una partición, pero en mi caso utilicé fdisk y éste no tiene un procedimiento directo para la redimensión de una partición, así que hay que hacerlo manualmente. Para hacer la redimensión de la partición principal hay que eliminarla. Sí, parece arriesgado y da algo de miedo hacerlo sobre un sistema en explotación, pero según he buscado por internet es el único modo. Así que con fdisk:

  1. Borramos la partición principal.
  2. Creamos una nueva partición que comienza donde la que hemos borrado y termina donde queramos.
  3. Creamos la partición para swap.
  4. Establecemos la marca de arranque si fuera necesario para la nueva partición principal.
  5. Escribimos los cambios y salimos de fdisk.



http://vostorga.org/?p=42
https://wiki.debian.org/Swap








Limpiar paquetes nvidia en debian


Desinstalar todo rasto de paquetes nvidia.

El primer paso es localizar los paquetes con relación nvidia he utilizado:
aptitude search nvidia | grep ^i
En la instalación de Ubuntu por defecto no está instalado el paquete aptitude. Para instalar apt-get install aptitude.

Simplemente hacemos un aptitude remove de todos los paquetes que hemos obtenido en el listado anterior.

Ahora ha llegado el momento de instalar los nuevos drivers.

Descargamos el drivers para Linux 64bit desde nvidia.com; wget http://es.download.nvidia.com/XFree86/Linux-x86_64/310.19/NVIDIA-Linux-x86_64-310.19.run

jmruiz@jmruiz-Aspire-V3-571G:~/Descargas$ wget http://es.download.nvidia.com/XFree86/Linux-x86_64/310.19/NVIDIA-Linux-x86_64-310.19.run
--2012-11-17 11:46:06--  http://es.download.nvidia.com/XFree86/Linux-x86_64/310.19/NVIDIA-Linux-x86_64-310.19.run
Resolviendo es.download.nvidia.com (es.download.nvidia.com)... 217.212.238.51, 217.212.238.64, 217.212.238.59
Conectando con es.download.nvidia.com (es.download.nvidia.com)[217.212.238.51]:80... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 68022245 (65M) [application/octet-stream]
Grabando a: “NVIDIA-Linux-x86_64-310.19.run”
100%[=======================================================================================================>] 68.022.245  3,84M/s   en 20s  
2012-11-17 11:46:26 (3,24 MB/s) - “NVIDIA-Linux-x86_64-310.19.run” guardado [68022245/68022245]

sudo stop lightdm

chmod 775 NVIDIA-Linux-x86_64-310.19.run

(sudo) ./NVIDIA-Linux-x86_64-310.19.run





miércoles, 11 de julio de 2018

Ocultar versión de PHP en cabeceras

Si eres desarrollador de PHP esto te interesa cuando pases tus aplicaciones a producción. En tu servidor de explotación es recomendable modificar el fichero php.ini u poner en off la variable "expose_php", de esta forma nadie viendo tu aplicación en ejecución podrá saber qué versión de PHP corre en tu servidor.

Esto es altamente recomendable para evitar que la publicación de una vulnerabilidad para la versión de PHP que utilizas haga que tu servidor sea el foco de todas las miradas.
php.ini
expose_php = Off
Cuando ves las cabeceas de los paquetes podrás ver algo como:
X-Powered-By: PHP/5.3.8
Y simplemente cunado cuando cambiar la variable a off desaparece esta información.

IMPORTANTE: Esto no es una solución frente a vulnerabilidades, la solución es actualizar a una versión no vulnerable. Simplemente evitaremos que "gritar" al mundo qué versión de PHP utilizamos.

martes, 10 de julio de 2018

Contar lineas desde linux en /bin/bash con el comando wc

Seguro que en muchas ocasiones has necesitado contar lineas desde la consola de linux. Yo en alguna ocasión (antes de conocer el comando wc) he copiado desde el terminal para pegar en un calc o alguna otra aplicación de más alto nivel para contar un resultado. Pero puede que esto no lo tengas siempre disponible y sabemos que siempre es mucho más rápido realizar operaciones directamente en la linea de comandos.

Contar las líneas de un fichero con el comando wc

Los usuarios de GNU/Linux disponemos del comando wc (sigla de Word Count). Este comando nos permite contar las líneas (entendiendo como tal el número de caracteres nueva línea), bytes o palabras.

Para contar las líneas, simeplemente ejecutamos:
wc -l <fichero>
En <fichero> se introduce el nombre o nombres de los archivos en los que queremos efectuar el recuento. Cuando son varios los archivos, el comando devuelve, además, una línea resumen con la suma de los conteos efectuados.

Contar palabras de un fichero con el comando wc

Podemos también utilizar el comando wc para contar palabras, en cuyo caso se consideran como tal las secuencias de longitud no-nula delimitadas por espacios o directamente caracteres. En este caso, la llamada  sería:
wc -w 1<fichero>
Otras opciones interesantes son el uso de los modificadores -c y -m, que te devuelven el número de bytes y/o caracteres del archivo, respectivamente. Hay que destacar que el carácter de fin de línea también se cuenta. Para terminar destacamos el modificador -L, que nos devuelve la longitud máxima de línea.

Contar salida de un comando con wc

Esta será posiblemente la opción que más utilizo personalmente cuando necesito utilizar el comando wc. Consiste en desviar la salida de un comando utilizando tuberías (pipes) a la entrada del siguiente comando, en este caso wc.

Por hacer un ejemplo muy simple, en lugar de contar las lineas de un fichero utilizando:
wc -l mifichero.txt
También podríamos utilizar:
cat mifichero.txt | wc -l
Estos dos comandos realizarán la misma operación; contar el número de lineas del fichero mifichero.txt, pero con esta funcionalidad podríamos realizar operaciones mucho más interesantes. Podríamos crearnos un script que realice distintos procesos en su interior y posteriormente contar el resultado.
./miscript.bash | wc -l

Otras opciones

Si empleamos wc sin archivos de entrada, el conteo se hará sobre la entrada estándar y se contará sobre lo que escribamos en consola. para salir de este modo, se pulsará Ctrl+D y el programa nos devuelve los valores que hemos pedido al invocar el comando.

Por último, os indico que si invocamos el comando sin opciones de conteo (contar las líneas, las palabras, etc), el comando nos devolverá directamente cuatro columnas: la cuenta de palabras, de líneas y de bytes totales del archivo.

martes, 3 de julio de 2018

Instalar tablefunc extension en PostgreSQL 9.6 para utilizar crosstab


El módulo "tablefunc" incluye varias funciones que devuelven tablas, es decir, obtendremos varias filas. En el siguiente enlace os dejo disponible la documentación para su correcto uso.

https://www.postgresql.org/docs/9.6/static/tablefunc.html

Tengo una entrada en este blog sobre como instalar PostgreSQL en un linux Debian partiendo del código fuente (tengo pendiente hacer una actualización de esta entrada) y en lugar de utilizar el repositorio de paquetes del sistema.

En esta entrada veremos como partiendo de esa instalación compilando el código fuente de PostgreSQL, incorporaremos la extensión tablefunc. Si buscas un poco encontrarás que para hacer uso de las funciones contenidas en tablefunc será necesario ejecutar como usuario administrador la sentencia "create extension tablefunc". Y posiblemente si has llegado hasta aquí, obtuviste como resultado algo parecido a "ERROR:  could not access file "$libdir/tablefunc": No existe el fichero o el directorio".
echo 'create extension tablefunc' | psql -U usuario base_de_datos
ERROR:  could not access file "$libdir/tablefunc": No existe el fichero o el directorio
Si es así está es tu solución. ¿Recuerdas cuando compilaste PostgreSql? Pues mira en aquel directorio donde encontrarás dentro de contrib al directorio contrib/tablefunc. Dirígete a ese directorio y ejecuta "make" y "make install".
root@myhost:~/descargas/postgresql-9.6.3/contrib/tablefunc# make
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -fpic -I. -I. -I../../src/include -D_GNU_SOURCE   -c -o tablefunc.o tablefunc.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -fpic -L../../src/port -L../../src/common -Wl,--as-needed -Wl,-rpath,'/opt/postgresql-9.6.3/lib',--enable-new-dtags -lm  -shared -o tablefunc.so tablefunc.o
root@myhost:~/descargas/postgresql-9.6.3/contrib/tablefunc# make install
/bin/mkdir -p '/opt/postgresql-9.6.3/share/extension'
/bin/mkdir -p '/opt/postgresql-9.6.3/share/extension'
/bin/mkdir -p '/opt/postgresql-9.6.3/lib'
/usr/bin/install -c -m 644 ./tablefunc.control '/opt/postgresql-9.6.3/share/extension/'
/usr/bin/install -c -m 644 ./tablefunc--1.0.sql ./tablefunc--unpackaged--1.0.sql  '/opt/postgresql-9.6.3/share/extension/'
/usr/bin/install -c -m 755  tablefunc.so '/opt/postgresql-9.6.3/lib/'
Ahora sí al ejecutar "CREATE EXTENSION tablefunc;" se instalará sin problemas y ya tendrás disponibles las funciones incluidas en tablefunc.

Ejemplo de utilización de crosstab

Una de las funciones más utilizadas de tablefunc es crosstab. Aquí dejo un simple ejemplo de ventas donde pivotaremos los costes de cada uno de los meses a columnas, de forma que nos quedará un registro (fila) por ejercicio.

Crearemos unos datos de prueba para trabajar

CREATE TABLE sales(year int, month int, qty int);
INSERT INTO sales VALUES(2017, 1, 1000);
INSERT INTO sales VALUES(2017, 2, 1500);
INSERT INTO sales VALUES(2017, 7, 500);
INSERT INTO sales VALUES(2017, 11, 1500);
INSERT INTO sales VALUES(2017, 12, 2000);
INSERT INTO sales VALUES(2018, 1, 1000);
INSERT INTO sales VALUES(2019, 5, 2500);
INSERT INTO sales VALUES(2019, 9, 800);

SELECT * FROM sales;
 year | month | qty 
------+-------+------
 2017 |     1 | 1000
 2017 |     2 | 1500
 2017 |     7 |  500
 2017 |    11 | 1500
 2017 |    12 | 2000
 2018 |     1 | 1000
 2019 |     5 | 2500
 2019 |     9 |  800
(8 rows)

Uso de crosstab

SELECT * FROM crosstab(
  $$ SELECT year, month, qty FROM sales ORDER BY 1 $$,
  $$ SELECT m FROM generate_series(1,12) m $$
) AS (
  year int, "Jan" int, "Feb" int, "Mar" int, "Apr" int, "May" int, "Jun" int, "Jul" int, "Aug" int, "Sep" int, "Oct" int, "Nov" int, "Dec" int
);

 year | Jan  | Feb  | Mar | Apr | May  | Jun | Jul | Aug | Sep | Oct | Nov  | Dec 
------+------+------+-----+-----+------+-----+-----+-----+-----+-----+------+------
 2017 | 1000 | 1500 |     |     |      |     | 500 |     |     |     | 1500 | 2000
 2018 | 1000 |      |     |     |      |     |     |     |     |     |      |   
 2019 |          |      |     |     | 2500 |     |     |     | 800 |     |      |   
(3 rows)

martes, 26 de junio de 2018

Instalar SQL Developer 18.1 en Linux

Esta entrada corresponde a una actualización de la entrada correspondiente a Instalar SQL Developer 4.0.1.14.18 en Ubuntu 14.04, está muy anticuada y ya era hora de actualizarla.

En la anterior entrada fue una instalación específica para Ubuntu por ser el sistema operativo que utilizaba en aquel momento. Ahora he vuelto a Debian y por eso esta entrada no es específica para Ubuntu, no obstante debería funcionar en casi cualquier GNU/Linux.

SQL Developer me sigue pareciendo una solución muy cómoda y rápida de acceder a los objetos de una instancia Oracle BD. Es una herramienta gráfica gratuita que simplifica las tareas de desarrollo de bases de datos. Puede explorar objetos de base de datos, ejecutar sentencias de SQL y script SQL, editar y depurar declaraciones de PL/SQL, manipular y exportar datos, y ver y crear informes. Puede conectarse a bases de datos Oracle, y puede conectarse a bases de datos seleccionadas de terceros (que no sean de Oracle), ver metadatos y datos, y migrar estas bases de datos a Oracle.

Requisitos para la instalación de SQL Developer 18.1

Tanto para descargar SQL Developer como JDK necesitaréis un usuario de Oracle que podréis obtener rápidamente si os registráis en www.oracle.com

Descargar SQL Developer 18.1

En primer lugar hay que descargar el zip correspondiente a SQL Developer 18.1 para otras plataformas, que encontrarás al final del siguiente enlace.

http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html

sqldeveloper-18.1.0.095.1630-no-jre.zip

Para descomprimir ejecutar los siguientes comandos:
unzip sqldeveloper-18.1.0.095.1630-no-jre.zip
mv sqldeveloper /opt/sqldeveloper-18.1

Descargar jdk8 

Por otro lado necesitamos jdk8, podemos descargarlo de la página oficial en el siguiente enlace.

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Yo prefiero instalar desde tgz para así utilizar en cada momento el jdk que necesite, en mi caso he descargado jdk-8u171-linux-x64.tar.gz, para descomprimirlo simplemente ejecuta el siguiente comando:
tar xvzf jdk-8u171-linux-x64.tar.gz -C /opt/
De esta forma tendremos disponible en /opt/jdk1.8.0_171/ la jdk8 lista para funcionar.

Ejecutar SQL Developer 18.1

Tras intentar ejecutar SQL Developer 18.1 si no tenéis configurado el JDK8 por defecto como vuestro JDK por defecto obtendréis el siente error.
/opt/sqldeveloper-18.1/sqldeveloper.sh
 Oracle SQL Developer
 Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved.
Found ../../jdk/bin/java to run this product, and the major version of this Java is 1.7.
The mandatory minimum major version to run this product is 1.8.
This product cannot run with this Java.
Type the full pathname of a JDK installation (or Ctrl-C to quit), the path will be stored in /home/jmruiz/.sqldeveloper/18.1.0/product.conf
El problema es que SQL Developer 18.1 necesita de JDK8 y tenemos configurado JDK7 para utilizar por defecto en nuestro sistema. Pero SQL Developer está preparado (como vimos en la entrada anterior) para funcionar con un JDK definido en su fichero de configuración.

Para realizar esta configuración editaremos el fichero /home/<usuario>/.sqldeveloper/18.1.0/product.conf y añadiremos la siguiente linea:
SetJavaHome /opt/jdk1.8.0_171
De esta forma SQL Developer sabrá cuál es la ubicación del JDK necesario para su inicio.

Y ahora sí al ejecutar /opt/sqldeveloper-18.1/sqldeveloper.sh podremos ver la pantalla de carga...


Y tras unos instantes, podremos comenzar a trabajar con SQL Developer 18.1


En la entrada anterior hice referencia a un error para GNOME que lamentablemente no puedo verificar si sucede en esta versión porque me he pasado a XFCE que me parece un entorno de escritorio mucho más rápido y estable.

Para terminar os dejo un enlace a la guía de usuario de Oracle SQL Developer 18.1 en PDF.

martes, 19 de junio de 2018

Buscar y reemplazar texto en bash

En muchas ocasiones me he encontrado con la necesidad de hacer un buscar reemplazar en el bash de linux. Hay muchas opciones para hacerlo, comentaré aquí algunas de las que yo utilizo por si a alguien la es de utilidad.

Utilizar editor nano desde bash para buscar y reemplazar un texto

La primera opción es utilizar un editor de texto cualquiera para hacer un buscar y reemplazar, yo utilizo nano por lo fácil y rápido que es. Te permite abrir fichero de texto muy pesados sin cargar demasiado tu equipo.

Una vez estas en nano simplemente presionas la combinación de teclas ctrl + w para buscar y después ctrl + r para reemplazar, esto te pedirá primero el texto a buscar, después el texto a reemplazar y para terminar preguntará si quieres reemplazar todas las coincidencias o únicamente la primera.





Una buena opción; crear un script /bin/bash para buscar y reemplazar un texto

Esta opción es muy útil cuando necesitamos hacer un buscar y reemplazar automatizado por ejemplo en un fichero de configuración. Yo lo utilizo en ficheros de configuración de apache para virtualhost, tengo una plantilla y cuando tengo que crear un nuevo virtualhost lo creo con un script automatizado de este estilo.
#!/bin/bash
primeraCadena="Amo con locura a mi hijo y a mi mujer."
segundaCadena="familia"
echo "${primeraCadena/hijo y a mi mujer/$segundaCadena}" 
Este script buscará en la cadena base "Amo con locura a mi hijo y a mi mujer." el texto "hijo y a mi mujer" y lo reemplazará por "familia", para después imprimir el resultado "Amo con locura a mi familia".

Esto puede ser útil pero cuando queremos hacer un buscar reemplazar en un fichero de configuración normalmente tenemos el mismo nombre en muchos sitios que tenemos que reemplazar (ficheros de configuración, ruta de directorios, nombre de dominios...). Para esto dejo aquí este pequeños script:
#!/bin/bash
apache=`cat apache.conf`
echo "${apache//instancia/$1}"
En primer lugar cargamos el fichero apache.conf en una variable, hay que destacar que las comillas utilizas son las comillas de ejecución y no las comillas de cadena de texto.

Después procedemos a reemplazar todas las palabras "instancia" por el primer parámetro que le pasamos en la ejecución del fichero.

El script tendríamos que ejecutarlo de la siguiente forma:
./buscar_reemplazar.bash nuevaInstancia
Su ejecución nos devolverá el contenido del fichero que necesitaremos para apache reemplazando la palabra "instancia" del fichero plantilla por "nuevaInstancia".

La opción más rápida; utiliza el comando sed para buscar y reemplazar textos

El comando sed es ampliamente utilizado en linux y lo puedes utilizar para escribir de forma sencilla y rápida una linea de comando para hacer un buscar y reemplazar en un fichero de texto.
sed -i 's/antigua/nueva/g' prueba.txt
Directamente con este simple comando buscará en el fichero prueba.txt todas las coincidencias con "antigua" y las reemplazará por "nueva". El resultado quedará guardado en el mismo fichero gracias al modificador " -i ".

Si prescindimos de este modificador obtendremos el resultado por la salida estandar de la consola. Y podemos desviar éste resultado a un fichero.
sed 's/antigua/nueva/g' prueba.txt > resultado.txt

viernes, 17 de octubre de 2014

Proxmox 3.1 vncproxy [2/2]


Esta es la segunda parte de un articulo (Proxmox 3.1 vncproxy [1/2]) que he publicado para conectar con un cliente vnc a las pantallas de las máquinas virtuales que corren bajo proxmox.

Es posible que no sepas como publicar la pantalla de la máquina virtual desde linea de comandos. Si lo haces desde el cliente web, este se encarga de levantar el demonio vnc para que puedas ver la pantalla. Pero si queremos evitar utilizar el cliente web, tendremos que levantar nosotros el demonio para poder conectarnos.

Tenemos dos opciones. Vamos a ver en primer lugar la más simple, que únicamente necesitamos el ejecutar el comando:
nc -l -p 5900 -c "/usr/sbin/qm vncproxy 101"
Donde 5900 es el puerto donde se publicará el servidor de vnc (5900 es el puerto por defecto de vnc) y 101 es el identificador de la máquina virtual en proxmox.

Éste método es muy cómodo pero implica tener que ejecutar el comando cada vez que queramos hacer uso de la pantalla de la máquina virtual. Creo que esto debería ser lo más correcto y no dejar publicada la pantalla de la máquina virtual, porque pese a que este demonio de vnc nos solicita las credenciales del sistema para acceder a la máquina virtual, no deja de ser una vulnerabilidad dejar publicado un servicio que utilizaremos puntualmente.

La segunda opción está orientada a dejar publicado el servicio siempre en nuestro sistema. Pero para esto tendremos que instalar un servicio si no lo tenemos instalado. Para sistemas Debian el paquete se llama "openbsd-inetd", lo instalaremos con:
apt-get install openbsd-inetd 
Una vez instalado editaremos el fichero /etc/inetd.conf para añadir la linea:
5900 stream tcp nowait root /usr/sbin/qm qm vncproxy 101
Y solo nos falta reiniciar el servicio "/etc/init.d/openbsd-inetd restart" para poder disfrutar de la pantalla de nuestra máquina virtual siembre que queramos.

IMPORTANTE: Los clientes VNC tradicionales NO funcionan con este sistema. Lee el artículo Proxmox 3.1 vncproxy [1/2] para ver como conectar correctamente con la pantalla de la máquina virtual.


Proxmox 3.1 vncproxy [1/2]


Me he encontrado un el siguiente problema cuando intento conectar con las pantallas de máquinas virtuales de Proxmox sin utilizar su cliente web. El cliente web es muy cómodo, pero un poco molesto cuando quieres hacer una conexión rápida y no tienes el navegador correctamente configurado (plugin de java y java correctamente configurado).

Por esto estaba buscando la forma de establecer conexiones vnc con el demonio que levanta proxmox sin necesidad de utilizar el cliente web.

El primer problema que me encontré fue que los clientes vncviewer y  xtightvncviewer me devolvían el mismo error...
jmruiz@jmruizhome :~/$ vncviewer 192.168.1.1:5900
Connected to RFB server, using protocol version 3.8
Server did not offer supported security type
jmruiz@jmruizhome :~/$ xtightvncviewer 192.168.1.1:5900
Connected to RFB server, using protocol version 3.8
Server did not offer supported security type
Pero encontré un cliente que permitía conectar sin problemas http://tigervnc.org/.

Si tus problemas simplemente eran solucionar el error "Connected to RFB server, using protocol version 3.8" y "Server did not offer supported security type" ya has encotrado la solución. Descarga he instala tigervnc https://bintray.com/tigervnc/stable/tigervnc/1.3.1 y podrás conectar sin problemas.

Para la versión de linux ten cuidado donde lo descomprimes; el fichero contiene dos directorios "/etc" y "/usr", está preparado para instalar en la raíz del sistema y sobrescribir vncviewer y vncserver. Pero si únicamente vas a utilizar el cliente puedes descomprimir el contenido del fichero en un directorio (tar xvzf fichero.tgz -C directoriodestino) y ejecutar usr/bin/vncviewer y el cliente te solicitará el host para conectarse o bien pasar como argumento directamente el host "usr/bin/vncviewer 192.168.1.1:5900".

Una vez que establece la conexión el servidor nos solicita que confirmemos el certificado ssl (esto es lo que no tienen implementado los clientes vncviewer y  xtightvncviewer ) y nos solicita las credenciales de acceso.


Es muy importante que pongamos usuario@pam en lugar de usuario únicamente, hay que decirle al demonio vnc donde ha de buscar los usuarios para la autenticación. En caso de tener un LDAP con dominio, obviamente pondremos el dominio.


Y por fin tendremos conexión con la pantalla de nuestra máquina virtual. Yo no soy partidario de utilizar VNC para el trabajo diario, pero en ocasiones es necesario ver qué está pasando en la pantalla de la máquina virtual y es complicado verla de forma remota.

Por si alguien no sabe como publicar con vnc la pantalla de una máquina virtual proxmox os dejo el siguiente artículo donde explico como hacerlo. Proxmox 3.1 vncproxy [2/2]


lunes, 5 de mayo de 2014

Instalar SQL Developer 4.0.1.14.18 en Ubuntu 14.04


Lo primero que tenemos que hacer para instalar SQL Developer 4.0.1 en nuestro recién actualizado Ubuntu 14.04 es descargar tanto el paquete de instalación para otras plataformas como el requisito JDK7 definido por el fabricante.

Los dos ficheros los puedes descargar desde los enlaces:

JDK7
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html


SQL Developer 4.0.1
http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/

En mi caso guardo todo este tipo de aplicaciones en un directorio Aplicaciones dentro del home de mi usuario (/home/jmruiz/Aplicaciones), pero lo pueden guardar donde queráis:

Tras descargar y descomprimir en el directorio "Aplicaciones" los dos ficheros que hemos descargados tenemos que darle permisos de ejecución al fichero "sqldeveliper.sh" que está en el directorio descomprimido de "sqldeveloper". Ejecutaremos: "chmod 775 sqldeveloper.sh"


jmruiz@portatil:~/Aplicaciones/sqldeveloper4.0.1.14.18$ chmod 775 sqldeveloper.sh 

Ahora tenemos que decir a sqldeveloper dónde está el jdk7, para ello tendremos que editar el fichero "/home/jmruiz/.sqldeveloper/4.0.0/product.conf" (nano /home/jmruiz/.sqldeveloper/4.0.0/product.conf) y añadir la línea:

SetJavaHome /home/jmruiz/Aplicaciones/jdk1.7.0_55


Es muy posible que el fichero no exista, ejecutad "./sqldeveloper.sh" y os devolverá un error de ejecución por no encontrar el jdk, pero os creará la estructura "/home/user/.sqldeveloper/*".

Tabién hay que aladir la siguiente linea en el mismo fichero "sqldeveloper.sh":  "unset GNOME_DESKTOP_SESSION_ID" (nano /home/jmruiz/Aplicaciones/sqldeveloper4.0.1.14.18/sqldeveloper.sh)


Y ya estamos preparados para ejecutar SQL Developer sin problemas:




Error GNOME_DESKTOP_SESSION_ID

Si no se añade "unset GNOME_DESKTOP_SESSION_ID" en sqldeveloper.sh, obtendrás el siguiente error:


./sqldeveloper.sh 
 Oracle SQL Developer
 Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.

 LOAD TIME : 941#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x69d66be0, pid=22665, tid=1836993344
#
# JRE version: Java(TM) SE Runtime Environment (7.0_55-b13) (build 1.7.0_55-b13)
# Java VM: Java HotSpot(TM) Server VM (24.55-b03 mixed mode linux-x86 )
# Problematic frame:
# C  0x69d66be0
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# An error report file with more information is saved as:
# /home/jmruiz/Aplicaciones/sqldeveloper4.0.1.14.18/sqldeveloper/bin/hs_err_pid22665.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.sun.com/bugreport/crash.jsp
#
/home/jmruiz/Aplicaciones/sqldeveloper4.0.1.14.18/sqldeveloper/bin/../../ide/bin/launcher.sh: línea 1193: 22665 Abortado                (`core' generado) ${JAVA} "${APP_VM_OPTS[@]}" ${APP_ENV_VARS} -classpath ${APP_CLASSPATH} ${APP_MAIN_CLASS} "${APP_APP_OPTS[@]}"


Error JDK7

Y si no añades "SetJavaHome /home/jmruiz/Aplicaciones/jdk1.7.0_55" en "/home/jmruiz/.sqldeveloper/4.0.0/product.conf" obtendrás el siguiente error.

jmruiz@portatil:~/Aplicaciones/sqldeveloper4.0.1.14.18$ ./sqldeveloper.sh

 Oracle SQL Developer
 Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.

Type the full pathname of a JDK installation (or Ctrl-C to quit), the path will be stored in /home/jmruiz/.sqldeveloper/4.0.0/product.conf

DynDns OVH Sincronización de IP pública dinámica

  Si tienes un servidor en casa o detrás de una conexión con IP dinámica, sabes que tarde o temprano tu dirección IP pública cambia y tu dom...