Todas las entradas de: izpu

Configuración de docker compose para wordpress con mysql y persistencia de datos.

El ejemplo para el fichero docker-compose.yaml contiene el código para crear un servidor wordpress que se conecta con su base de datos en mysql y que guarda los datos en la ruta /home/usuario/miDocker/wordpress/ de la máquina anfitrion. El acceso a wordpress se hace usando http;//127.0.0.1:8080 y pedirá los datos para la configuración de dicho servidor (idioma, usuario y contraseña para el nuevo administrador) y dirección de correo del mismo.


version: '3.1'

services:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb
    volumes:
      - type: volume
        source: wordpressHtml
        target: /var/www/html
      - type: volume
        source: wpPhp
        target: /usr/local/etc/php

  db:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - type: volume
        source: dbData
        target: /var/lib/mysql

volumes:
  wordpressHtml:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /home/usuario/miDocker/wordpress/wordpressHtml
  dbData:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /home/usuario/miDocker/wordpress/dbdata
  wpPhp:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /home/usuario/miDocker/wordpress/wpPhp

Comodines en SQL

Para realizar búsquedas en sql empleando comodines:

  • Para reemplazar una cadena cualquiera “%”:

Ejemplo:

“select * from nombreTabla where nombreCampo like ‘textoBuscado%’;

La búsqueda nos devolverá los registros de la tabla “nombreTabla” que en el campo “nombreCampo” comiencen por “textoBuscado”. Si queremos que textoBuscado pueda estar en cualquier posición podemos utilizar la cadena ‘%textoBuscado%’ en la expresión del “like”.

  • Para reemplazar un único carácter:

En lugar de “%” empleado en el ejemplo anterior lo podemos hacer usando “_”. Es el equivalente a emplear el “?” cuando reemplazamos un único carácter por ejemplo usando el “dir” o “ls”. Por ejemplo para mostrar los registros de la década de 2010 a 2019 podemos realizar la consulta con like ‘201_’ suponiendo que el campo que contiene el año sea de tipo cadena.

  • Que sucede cuando necesitamos reemplazar caracteres especiales por ejemplo ‘_’. En este caso podemos utilizar la expresión:

like ‘expresion’ escape ‘elCaracter’

siendo ‘expresion’: contiene el filtro que incluye el carácter especial y un carácter que usamos para identificarlo y que luego incluiremos en lugar de ‘elCaracter’ ejemplo:

select * from nombreTabla where nombreCampo like ‘1TB#_%’ escape ‘#’

el resultado de la consulta nos devolverá aquellos registros que en el campo nombreCampo comiencen por ‘1TB_’

Caso especial del ejemplo anterior. Si queremos buscar aquellos que contengan el carácter ‘/’ podremos hacerlo con

select * from nombreTabla where nombreCampo like ‘Z:\\1TB%’ escape ‘|’

nos devolverá los que en nombreCampo comiencen por ‘Z:\1TB’

Mostrar el mapeo de puertos en virtualbox y los snapshots en linux

Crear el script con el siguiente contenido:

for i in $(vboxmanage list runningvms | awk -F "{" '{print $2}';)
do      
maquina="$i"
maquina=$(sed 's/.$//' <<< $maquina)
echo "$maquina"
vboxmanage showvminfo $maquina | grep 'Name\|NIC' | grep 'Name\|Rule'
done

Hacer el fichero ejecutable, por ejemplo si se llamaba listarPuertos.sh

chmod u+x listarPuertos.sh
Ejecutarlo
./listarPuertos.sh

Al ejecutarlo mostrará algo así:
29831584-8637-4550-9c32-40244879a10a
Name:                        Maquina 7.4
Storage Controller Name (0):            IDE
Storage Controller Name (1):            SATA
NIC 1 Rule(0):   name = Oracle Listener, protocol = tcp, host ip = , host port = 19750, guest ip = , guest port = 9750
NIC 1 Rule(1):   name = Rule 1, protocol = tcp, host ip = , host port = 8090, guest ip = , guest port = 8080
Name: 'Shared', Host path: '/home/user/1tbMec/vms/shared' (machine mapping), writable, auto-mount, mount-point: '/apps/compartido'
   Name: Antes de Activar Alfa (UUID: d1db4ea6-c092-47fa-9129-9a92927c0f59)
      Name: Antes de Cargar entorno gráfico K Workflow (UUID: 9d13d8de-7542-46e1-add1-ddf3075c9498)

Por ejemplo nos indica que el puerto 9750  de la máquina virtual Maquina 7.4 está publicado como 19750 o el 8080 (guest port) se mapea hacia el exterior como 8090 (host port).

Lectura de un fichero para usar su contenido como parámetro para otros comandos.

Leyendo el fichero que se indica como entrada en <soloNombres.txt:

Para cada línea la muestra en pantalla.

while read p; do echo “$p”; done <soloNombres.txt

Podemos completar el comando con un condicional del tipo, si existe el fichero haz…. Para ello reemplazamos el do echo$ del ejemplo anterior por la prueba de si existe o no un fichero.

if [ -f “nombre.CR2” ]; then echo “nombre.CR2”;fi;

El condicional if comprueba si [-f “nombre.CR2”] existe (verdadero) y en dicho caso ejecuta el “echo”

Si lo combinamos con el comando anterior y en lugar del “nombre.CR2” comprobamos si existe cada línea del fichero terminada en .CR2

while read p; do if [ -f “$p.CR2” ]; then echo “$p”;fi; done <soloNombres.txt

La ejecución imprimirá una línea por cada línea del fichero soloNombres.txt que exista en el directorio actual con la extensión .CR2

El condicional podemos completarlo para que haga más cosas, por ejemplo mover un fichero cuyo nombre coincida con la línea del fichero y que se encuentre en otra ruta al local y tenga extensión jpg al directorio actual y borre el fichero del directorio actual con extensión CR2

while read p; do if [ -f “/drives/z/otra/ruta/$p.jpg” ]; then cp “/drives/z/otra/ruta/$p.jpg” .; rm “$p.CR2”;fi; done <soloNombres.txt

En mi caso par construir el fichero soloNombres.txt he usado dos comandos en el directorio actual (donde se encuentran los CR2)

Para sacar la relación de los ficheros CR2, cada línea quedará como nombre.cr2

xxxxx.cr2

ls -lha *.cr2 |awk ‘{print $9}’ >cr2.txt

Para quedarme solamente con el nombre del fichero, sin la extensión:

cat cr2.txt |awk -F “.” ‘{print $1}’>soloNombres.txt

Localizar una clase en el disco.

Para localizar donde esta la clase en el disco.

Para saber donde está la clase llamada NombreDeLaClase en el sistema de ficheros.

System.out.println(NombreDeLaClase.class.getResource(“NombreDeLaClase.class”));

Si la clase buscada es DLFolderLocalServiceUtil y se está ejecutando en un servidor Tomcat. El resultado de ejecutar:

System.out.println(DLFolderLocalServiceUtil.class.getResource("DLFolderLocalServiceUtil.class"));

me devuelve:

jar:file:/home/liferay/liferay-workspace/bundles/tomcat-9.0.43/lib/ext/portal-kernel.jar!/com/liferay/document/library/kernel/service/DLFolderLocalServiceUtil.class

Compilación con Maven incluyendo dependencias.

<build>
    <plugins>
        <!-- any other plugins -->
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <archive>
                    <manifest>
                        <mainClass>la.clase.principal</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

Reemplazo de una cadena en todos los archivos

Reemplazo de una cadena en todos los archivos que la contienen
Po ejemplo para reemplazar /opt/bitnami/common/ por /home/cmswp/deBitnami/common/

find . -name ‘*’ -exec sed -i “s/\/opt\/bitnami\/common\//\/home\/cmswp\/deBitnami\/common\//g” {} \;

Nota es necesario sustituir el “/” por “\/” es decir incluir el carácter de escape “\”.

Para reemplazar CabeceraListado por msgEs:

find . -name ‘*’ -exec sed -i “s/CabeceraListado/msgEs/g” {} \;

La búsqueda se hará en el directorio desde el que se ejecuta y en sus subdirectorios.