diff --git a/content/post/Desatendida/featured.png b/content/post/2022-10-06_Desatendida/featured.png
similarity index 100%
rename from content/post/Desatendida/featured.png
rename to content/post/2022-10-06_Desatendida/featured.png
diff --git a/content/post/Desatendida/index.md b/content/post/2022-10-06_Desatendida/index.md
similarity index 99%
rename from content/post/Desatendida/index.md
rename to content/post/2022-10-06_Desatendida/index.md
index af3d689..35a89bb 100644
--- a/content/post/Desatendida/index.md
+++ b/content/post/2022-10-06_Desatendida/index.md
@@ -2,7 +2,6 @@
title: "Instalación de Debian desatendida"
date: 2022-10-06T7:00:09+02:00
draft: false
-tags: ["Debian","preseed"]
image: featured.png
categories:
- documentación
diff --git a/content/post/snort/Introducción/estructuraregla.png b/content/post/2022-10-14_snort/Introducción/estructuraregla.png
similarity index 100%
rename from content/post/snort/Introducción/estructuraregla.png
rename to content/post/2022-10-14_snort/Introducción/estructuraregla.png
diff --git a/content/post/snort/Introducción/featured.jpg b/content/post/2022-10-14_snort/Introducción/featured.jpg
similarity index 100%
rename from content/post/snort/Introducción/featured.jpg
rename to content/post/2022-10-14_snort/Introducción/featured.jpg
diff --git a/content/post/snort/Introducción/index.md b/content/post/2022-10-14_snort/Introducción/index.md
similarity index 100%
rename from content/post/snort/Introducción/index.md
rename to content/post/2022-10-14_snort/Introducción/index.md
diff --git a/content/post/snort/Introducción/instalacion.png b/content/post/2022-10-14_snort/Introducción/instalacion.png
similarity index 100%
rename from content/post/snort/Introducción/instalacion.png
rename to content/post/2022-10-14_snort/Introducción/instalacion.png
diff --git a/content/post/snort/Introducción/pruebainstalacion.png b/content/post/2022-10-14_snort/Introducción/pruebainstalacion.png
similarity index 100%
rename from content/post/snort/Introducción/pruebainstalacion.png
rename to content/post/2022-10-14_snort/Introducción/pruebainstalacion.png
diff --git a/content/post/snort/Introducción/pruebaping.png b/content/post/2022-10-14_snort/Introducción/pruebaping.png
similarity index 100%
rename from content/post/snort/Introducción/pruebaping.png
rename to content/post/2022-10-14_snort/Introducción/pruebaping.png
diff --git a/content/post/snort/Introducción/rutasreglas.png b/content/post/2022-10-14_snort/Introducción/rutasreglas.png
similarity index 100%
rename from content/post/snort/Introducción/rutasreglas.png
rename to content/post/2022-10-14_snort/Introducción/rutasreglas.png
diff --git a/content/post/snort/Introducción/snorter1.png b/content/post/2022-10-14_snort/Introducción/snorter1.png
similarity index 100%
rename from content/post/snort/Introducción/snorter1.png
rename to content/post/2022-10-14_snort/Introducción/snorter1.png
diff --git a/content/post/snort/_index.md b/content/post/2022-10-14_snort/_index.md
similarity index 100%
rename from content/post/snort/_index.md
rename to content/post/2022-10-14_snort/_index.md
diff --git a/content/post/snort/correo_alertas/featured.png b/content/post/2022-10-14_snort/correo_alertas/featured.png
similarity index 100%
rename from content/post/snort/correo_alertas/featured.png
rename to content/post/2022-10-14_snort/correo_alertas/featured.png
diff --git a/content/post/snort/correo_alertas/index.md b/content/post/2022-10-14_snort/correo_alertas/index.md
similarity index 100%
rename from content/post/snort/correo_alertas/index.md
rename to content/post/2022-10-14_snort/correo_alertas/index.md
diff --git a/content/post/snort/correo_alertas/prueba_correo.png b/content/post/2022-10-14_snort/correo_alertas/prueba_correo.png
similarity index 100%
rename from content/post/snort/correo_alertas/prueba_correo.png
rename to content/post/2022-10-14_snort/correo_alertas/prueba_correo.png
diff --git a/content/post/compilacion_makefile/autogen.png b/content/post/2022-10-16_compilacion_makefile/autogen.png
similarity index 100%
rename from content/post/compilacion_makefile/autogen.png
rename to content/post/2022-10-16_compilacion_makefile/autogen.png
diff --git a/content/post/compilacion_makefile/configure.png b/content/post/2022-10-16_compilacion_makefile/configure.png
similarity index 100%
rename from content/post/compilacion_makefile/configure.png
rename to content/post/2022-10-16_compilacion_makefile/configure.png
diff --git a/content/post/compilacion_makefile/desinstalar.png b/content/post/2022-10-16_compilacion_makefile/desinstalar.png
similarity index 100%
rename from content/post/compilacion_makefile/desinstalar.png
rename to content/post/2022-10-16_compilacion_makefile/desinstalar.png
diff --git a/content/post/compilacion_makefile/estructura.png b/content/post/2022-10-16_compilacion_makefile/estructura.png
similarity index 100%
rename from content/post/compilacion_makefile/estructura.png
rename to content/post/2022-10-16_compilacion_makefile/estructura.png
diff --git a/content/post/compilacion_makefile/featured.png b/content/post/2022-10-16_compilacion_makefile/featured.png
similarity index 100%
rename from content/post/compilacion_makefile/featured.png
rename to content/post/2022-10-16_compilacion_makefile/featured.png
diff --git a/content/post/compilacion_makefile/index.md b/content/post/2022-10-16_compilacion_makefile/index.md
similarity index 100%
rename from content/post/compilacion_makefile/index.md
rename to content/post/2022-10-16_compilacion_makefile/index.md
diff --git a/content/post/compilacion_makefile/ls-directorio.png b/content/post/2022-10-16_compilacion_makefile/ls-directorio.png
similarity index 100%
rename from content/post/compilacion_makefile/ls-directorio.png
rename to content/post/2022-10-16_compilacion_makefile/ls-directorio.png
diff --git a/content/post/compilacion_makefile/make.png b/content/post/2022-10-16_compilacion_makefile/make.png
similarity index 100%
rename from content/post/compilacion_makefile/make.png
rename to content/post/2022-10-16_compilacion_makefile/make.png
diff --git a/content/post/compilacion_makefile/tree-htop.png b/content/post/2022-10-16_compilacion_makefile/tree-htop.png
similarity index 100%
rename from content/post/compilacion_makefile/tree-htop.png
rename to content/post/2022-10-16_compilacion_makefile/tree-htop.png
diff --git a/content/post/ansible_router_nat/ansible.png b/content/post/2022-10-18_ansible_router_nat/ansible.png
similarity index 100%
rename from content/post/ansible_router_nat/ansible.png
rename to content/post/2022-10-18_ansible_router_nat/ansible.png
diff --git a/content/post/ansible_router_nat/escenario.png b/content/post/2022-10-18_ansible_router_nat/escenario.png
similarity index 100%
rename from content/post/ansible_router_nat/escenario.png
rename to content/post/2022-10-18_ansible_router_nat/escenario.png
diff --git a/content/post/ansible_router_nat/featured.png b/content/post/2022-10-18_ansible_router_nat/featured.png
similarity index 100%
rename from content/post/ansible_router_nat/featured.png
rename to content/post/2022-10-18_ansible_router_nat/featured.png
diff --git a/content/post/ansible_router_nat/index.md b/content/post/2022-10-18_ansible_router_nat/index.md
similarity index 100%
rename from content/post/ansible_router_nat/index.md
rename to content/post/2022-10-18_ansible_router_nat/index.md
diff --git a/content/post/ansible_router_nat/vagrant.png b/content/post/2022-10-18_ansible_router_nat/vagrant.png
similarity index 100%
rename from content/post/ansible_router_nat/vagrant.png
rename to content/post/2022-10-18_ansible_router_nat/vagrant.png
diff --git a/content/post/practica1_abd/_index.md b/content/post/2022-10-31_practica1_abd/_index.md
similarity index 100%
rename from content/post/practica1_abd/_index.md
rename to content/post/2022-10-31_practica1_abd/_index.md
diff --git a/content/post/practica1_abd/aplicacion_web_mysql/featured.png b/content/post/2022-10-31_practica1_abd/aplicacion_web_mysql/featured.png
similarity index 100%
rename from content/post/practica1_abd/aplicacion_web_mysql/featured.png
rename to content/post/2022-10-31_practica1_abd/aplicacion_web_mysql/featured.png
diff --git a/content/post/practica1_abd/aplicacion_web_mysql/fichero_conf.png b/content/post/2022-10-31_practica1_abd/aplicacion_web_mysql/fichero_conf.png
similarity index 100%
rename from content/post/practica1_abd/aplicacion_web_mysql/fichero_conf.png
rename to content/post/2022-10-31_practica1_abd/aplicacion_web_mysql/fichero_conf.png
diff --git a/content/post/practica1_abd/aplicacion_web_mysql/home.png b/content/post/2022-10-31_practica1_abd/aplicacion_web_mysql/home.png
similarity index 100%
rename from content/post/practica1_abd/aplicacion_web_mysql/home.png
rename to content/post/2022-10-31_practica1_abd/aplicacion_web_mysql/home.png
diff --git a/content/post/practica1_abd/aplicacion_web_mysql/index.md b/content/post/2022-10-31_practica1_abd/aplicacion_web_mysql/index.md
similarity index 100%
rename from content/post/practica1_abd/aplicacion_web_mysql/index.md
rename to content/post/2022-10-31_practica1_abd/aplicacion_web_mysql/index.md
diff --git a/content/post/practica1_abd/aplicacion_web_mysql/login.png b/content/post/2022-10-31_practica1_abd/aplicacion_web_mysql/login.png
similarity index 100%
rename from content/post/practica1_abd/aplicacion_web_mysql/login.png
rename to content/post/2022-10-31_practica1_abd/aplicacion_web_mysql/login.png
diff --git a/content/post/practica1_abd/aplicacion_web_mysql/tablas.png b/content/post/2022-10-31_practica1_abd/aplicacion_web_mysql/tablas.png
similarity index 100%
rename from content/post/practica1_abd/aplicacion_web_mysql/tablas.png
rename to content/post/2022-10-31_practica1_abd/aplicacion_web_mysql/tablas.png
diff --git a/content/post/2022-10-31_practica1_abd/aplicacion_web_oracle/featured.png b/content/post/2022-10-31_practica1_abd/aplicacion_web_oracle/featured.png
new file mode 100644
index 0000000..3ff8f90
Binary files /dev/null and b/content/post/2022-10-31_practica1_abd/aplicacion_web_oracle/featured.png differ
diff --git a/content/post/practica1_abd/aplicacion_web_oracle/index.md b/content/post/2022-10-31_practica1_abd/aplicacion_web_oracle/index.md
similarity index 94%
rename from content/post/practica1_abd/aplicacion_web_oracle/index.md
rename to content/post/2022-10-31_practica1_abd/aplicacion_web_oracle/index.md
index 5bd0888..ee77a3c 100644
--- a/content/post/practica1_abd/aplicacion_web_oracle/index.md
+++ b/content/post/2022-10-31_practica1_abd/aplicacion_web_oracle/index.md
@@ -2,6 +2,15 @@
title: "Aplicacion web Oracle"
date: 2022-10-30T17:08:54+01:00
draft: false
+image: featured.png
+categories:
+ - práctica
+ - Administración de Bases de Datos
+tags:
+ - Oracle
+ - apache
+ - python
+ - Práctica 1 ABD
---
Aplicación web Oracle programada en python.
diff --git a/content/post/practica1_abd/aplicacion_web_oracle/prueba1.png b/content/post/2022-10-31_practica1_abd/aplicacion_web_oracle/prueba1.png
similarity index 100%
rename from content/post/practica1_abd/aplicacion_web_oracle/prueba1.png
rename to content/post/2022-10-31_practica1_abd/aplicacion_web_oracle/prueba1.png
diff --git a/content/post/practica1_abd/aplicacion_web_oracle/prueba2.png b/content/post/2022-10-31_practica1_abd/aplicacion_web_oracle/prueba2.png
similarity index 100%
rename from content/post/practica1_abd/aplicacion_web_oracle/prueba2.png
rename to content/post/2022-10-31_practica1_abd/aplicacion_web_oracle/prueba2.png
diff --git a/content/post/practica1_abd/conexiones_bd/featured.png b/content/post/2022-10-31_practica1_abd/conexiones_bd/featured.png
similarity index 100%
rename from content/post/practica1_abd/conexiones_bd/featured.png
rename to content/post/2022-10-31_practica1_abd/conexiones_bd/featured.png
diff --git a/content/post/practica1_abd/conexiones_bd/index.md b/content/post/2022-10-31_practica1_abd/conexiones_bd/index.md
similarity index 98%
rename from content/post/practica1_abd/conexiones_bd/index.md
rename to content/post/2022-10-31_practica1_abd/conexiones_bd/index.md
index 512a484..d8f39ff 100644
--- a/content/post/practica1_abd/conexiones_bd/index.md
+++ b/content/post/2022-10-31_practica1_abd/conexiones_bd/index.md
@@ -10,6 +10,7 @@ tags:
- MariaDB
- Oracle
- PostgreSQL
+ - Práctica 1 ABD
---
Vamos a realizar conexiones desde los clientes de BBDD a sus respectivos servidores.
diff --git a/content/post/practica1_abd/conexiones_bd/mariadb.png b/content/post/2022-10-31_practica1_abd/conexiones_bd/mariadb.png
similarity index 100%
rename from content/post/practica1_abd/conexiones_bd/mariadb.png
rename to content/post/2022-10-31_practica1_abd/conexiones_bd/mariadb.png
diff --git a/content/post/practica1_abd/conexiones_bd/oracle.png b/content/post/2022-10-31_practica1_abd/conexiones_bd/oracle.png
similarity index 100%
rename from content/post/practica1_abd/conexiones_bd/oracle.png
rename to content/post/2022-10-31_practica1_abd/conexiones_bd/oracle.png
diff --git a/content/post/practica1_abd/conexiones_bd/postgre.png b/content/post/2022-10-31_practica1_abd/conexiones_bd/postgre.png
similarity index 100%
rename from content/post/practica1_abd/conexiones_bd/postgre.png
rename to content/post/2022-10-31_practica1_abd/conexiones_bd/postgre.png
diff --git a/content/post/2022-10-31_practica1_abd/instalacion_mariadb_postgresql/featured.png b/content/post/2022-10-31_practica1_abd/instalacion_mariadb_postgresql/featured.png
new file mode 100644
index 0000000..3ff8f90
Binary files /dev/null and b/content/post/2022-10-31_practica1_abd/instalacion_mariadb_postgresql/featured.png differ
diff --git a/content/post/practica1_abd/instalacion_mariadb_postgresql/index.md b/content/post/2022-10-31_practica1_abd/instalacion_mariadb_postgresql/index.md
similarity index 99%
rename from content/post/practica1_abd/instalacion_mariadb_postgresql/index.md
rename to content/post/2022-10-31_practica1_abd/instalacion_mariadb_postgresql/index.md
index b966795..9c9b6a1 100644
--- a/content/post/practica1_abd/instalacion_mariadb_postgresql/index.md
+++ b/content/post/2022-10-31_practica1_abd/instalacion_mariadb_postgresql/index.md
@@ -2,6 +2,7 @@
title: "Instalación de MariaDB y PostgreSQL en Debian"
date: 2022-10-26T09:32:09+02:00
draft: false
+image: featured.png
categories:
- práctica
- Administración de Bases de Datos
diff --git a/content/post/practica1_abd/instalacion_mariadb_postgresql/mongo.png b/content/post/2022-10-31_practica1_abd/instalacion_mariadb_postgresql/mongo.png
similarity index 100%
rename from content/post/practica1_abd/instalacion_mariadb_postgresql/mongo.png
rename to content/post/2022-10-31_practica1_abd/instalacion_mariadb_postgresql/mongo.png
diff --git a/content/post/practica1_abd/instalacion_oracle/capturas/consulta.png b/content/post/2022-10-31_practica1_abd/instalacion_oracle/capturas/consulta.png
similarity index 100%
rename from content/post/practica1_abd/instalacion_oracle/capturas/consulta.png
rename to content/post/2022-10-31_practica1_abd/instalacion_oracle/capturas/consulta.png
diff --git a/content/post/practica1_abd/instalacion_oracle/capturas/creacionbd.png b/content/post/2022-10-31_practica1_abd/instalacion_oracle/capturas/creacionbd.png
similarity index 100%
rename from content/post/practica1_abd/instalacion_oracle/capturas/creacionbd.png
rename to content/post/2022-10-31_practica1_abd/instalacion_oracle/capturas/creacionbd.png
diff --git a/content/post/practica1_abd/instalacion_oracle/capturas/descarga.png b/content/post/2022-10-31_practica1_abd/instalacion_oracle/capturas/descarga.png
similarity index 100%
rename from content/post/practica1_abd/instalacion_oracle/capturas/descarga.png
rename to content/post/2022-10-31_practica1_abd/instalacion_oracle/capturas/descarga.png
diff --git a/content/post/practica1_abd/instalacion_oracle/capturas/instalacion.png b/content/post/2022-10-31_practica1_abd/instalacion_oracle/capturas/instalacion.png
similarity index 100%
rename from content/post/practica1_abd/instalacion_oracle/capturas/instalacion.png
rename to content/post/2022-10-31_practica1_abd/instalacion_oracle/capturas/instalacion.png
diff --git a/content/post/practica1_abd/instalacion_oracle/capturas/versionora.png b/content/post/2022-10-31_practica1_abd/instalacion_oracle/capturas/versionora.png
similarity index 100%
rename from content/post/practica1_abd/instalacion_oracle/capturas/versionora.png
rename to content/post/2022-10-31_practica1_abd/instalacion_oracle/capturas/versionora.png
diff --git a/content/post/practica1_abd/instalacion_oracle/consulta.png b/content/post/2022-10-31_practica1_abd/instalacion_oracle/consulta.png
similarity index 100%
rename from content/post/practica1_abd/instalacion_oracle/consulta.png
rename to content/post/2022-10-31_practica1_abd/instalacion_oracle/consulta.png
diff --git a/content/post/practica1_abd/instalacion_oracle/descarga.png b/content/post/2022-10-31_practica1_abd/instalacion_oracle/descarga.png
similarity index 100%
rename from content/post/practica1_abd/instalacion_oracle/descarga.png
rename to content/post/2022-10-31_practica1_abd/instalacion_oracle/descarga.png
diff --git a/content/post/practica1_abd/instalacion_oracle/featured.png b/content/post/2022-10-31_practica1_abd/instalacion_oracle/featured.png
similarity index 100%
rename from content/post/practica1_abd/instalacion_oracle/featured.png
rename to content/post/2022-10-31_practica1_abd/instalacion_oracle/featured.png
diff --git a/content/post/practica1_abd/instalacion_oracle/index.md b/content/post/2022-10-31_practica1_abd/instalacion_oracle/index.md
similarity index 100%
rename from content/post/practica1_abd/instalacion_oracle/index.md
rename to content/post/2022-10-31_practica1_abd/instalacion_oracle/index.md
diff --git a/content/post/practica1_abd/instalacion_oracle/index.pdf b/content/post/2022-10-31_practica1_abd/instalacion_oracle/index.pdf
similarity index 100%
rename from content/post/practica1_abd/instalacion_oracle/index.pdf
rename to content/post/2022-10-31_practica1_abd/instalacion_oracle/index.pdf
diff --git a/content/post/practica1_abd/instalacion_oracle/instalacion.png b/content/post/2022-10-31_practica1_abd/instalacion_oracle/instalacion.png
similarity index 100%
rename from content/post/practica1_abd/instalacion_oracle/instalacion.png
rename to content/post/2022-10-31_practica1_abd/instalacion_oracle/instalacion.png
diff --git a/content/post/practica1_abd/instalacion_oracle/script.png b/content/post/2022-10-31_practica1_abd/instalacion_oracle/script.png
similarity index 100%
rename from content/post/practica1_abd/instalacion_oracle/script.png
rename to content/post/2022-10-31_practica1_abd/instalacion_oracle/script.png
diff --git a/content/post/practica1_abd/instalacion_oracle/versionora.png b/content/post/2022-10-31_practica1_abd/instalacion_oracle/versionora.png
similarity index 100%
rename from content/post/practica1_abd/instalacion_oracle/versionora.png
rename to content/post/2022-10-31_practica1_abd/instalacion_oracle/versionora.png
diff --git a/content/post/2022-11-27_practica2_abd/featured.png b/content/post/2022-11-27_practica2_abd/featured.png
new file mode 100644
index 0000000..3ff8f90
Binary files /dev/null and b/content/post/2022-11-27_practica2_abd/featured.png differ
diff --git a/content/post/2022-11-27_practica2_abd/index.md b/content/post/2022-11-27_practica2_abd/index.md
new file mode 100644
index 0000000..98cd502
--- /dev/null
+++ b/content/post/2022-11-27_practica2_abd/index.md
@@ -0,0 +1,303 @@
+---
+title: "Práctica 2: Interconexión de Servidores de Bases de Datos"
+date: 2022-11-27T14:23:15+01:00
+draft: false
+image: featured.png
+categories:
+ - práctica
+ - Administración de Bases de Datos
+tags:
+ - Oracle
+ - Práctica 2 ABD
+---
+
+Las interconexiones de servidores de bases de datos son operaciones que pueden ser muy útiles en
+diferentes contextos. Básicamente, se trata de acceder a datos que no están almacenados en nuestra base
+de datos, pudiendo combinarlos con los que ya tenemos.
+En esta práctica veremos varias formas de crear un enlace entre distintos servidores de bases de datos.
+Se pide:
+
+* Realizar un enlace entre dos servidores de bases de datos ORACLE, explicando la configuración
+necesaria en ambos extremos y demostrando su funcionamiento.
+* Realizar un enlace entre dos servidores de bases de datos Postgres, explicando la configuración
+necesaria en ambos extremos y demostrando su funcionamiento.
+* Realizar un enlace entre un servidor ORACLE y otro Postgres o MySQL empleando Heterogeneus
+Services
+
+## Enlace entre dos servidores ORACLE
+
+En mi caso, las dos máquinas tienen la configuración siguiente; Tienen instalado Rocky 8 Oracle Database 19c Enterprise Edition, y tienen los siguientes nombres e IPs:
+
+* oracle-maquina1: 192.168.122.204
+* oracle-maquina2: 192.168.122.80
+
+En ambas bases de datos existe el usuario roberto y están configuradas para el acceso remoto. Para comprobar que pueden acceder se utiliza el comando tnsping:
+
+![1](https://i.imgur.com/gbnsKsB.png)
+
+Ahora, para que los servidores puedan conectarse entre ellos, tenemos que añadir los datos de las máquinas al fichero `/opt/oracle/product/19c/dbhome_1/network/admin/tnsnames.ora`, dejándolos de la siguiente manera:
+
+* En el fichero dentro de la máquina 1:
+
+```ora
+MAQUINA2 =
+ (DESCRIPTION =
+ (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.122.80)(PORT = 1521))
+ (CONNECT_DATA =
+ (SERVER = DEDICATED)
+ (SERVICE_NAME = ORCLCDB)
+ )
+ )
+```
+
+* En el fichero dentro de la máquina 2:
+
+```ora
+MAQUINA1 =
+ (DESCRIPTION =
+ (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.122.80)(PORT = 1521))
+ (CONNECT_DATA =
+ (SERVER = DEDICATED)
+ (SERVICE_NAME = ORCLCDB)
+ )
+ )
+```
+
+Tras eso hay que crear los enlaces haciendo referencia al usuario (roberto). los comandos se ejecutan dentro de oracle:
+
+* En la máquina 1:
+
+```sql
+create database link enlace2 connect to roberto identified by roberto using 'maquina2';
+```
+
+* En la máquina 2:
+
+```sql
+create database link enlace1 connect to roberto identified by roberto using 'maquina1';
+```
+
+Podemos comprobar que se puede acceder remotamente a las tablas:
+
+![2](https://i.imgur.com/iYYIaiL.png)
+![3](https://i.imgur.com/2Cu5V0W.png)
+
+## Enlace entre dos servidores Postgres
+
+En mi caso, las dos máquinas tienen la configuración siguiente; Tienen instalado Debian 11,MariaDB y PostgreSQL, y tienen los siguientes nombres e IPs:
+
+* mariadb-maquina1: 192.168.122.97
+* mariadb-maquina2: 192.168.122.90
+
+En ambas bases de datos existe el usuario roberto y están configuradas para el acceso remoto.
+
+Ahora vamos a crear el enlace:
+
+```bash
+apt install postgresql-contrib
+psql -d scott
+create extension dblink;
+```
+
+Una vez hecho eso, tenemos que ejecutar los siguientes comandos:
+
+* Máquina 1:
+
+```sql
+SELECT dblink_connect('dblink2','dbname=scott host=192.168.122.90 user=roberto password=roberto');
+```
+
+* Máquina 2:
+
+```sql
+SELECT dblink_connect('dblink1','dbname=scott host=192.168.122.97 user=roberto password=roberto');
+```
+
+Tras eso, podemos realizar consultas entre máquinas:
+
+![4](https://i.imgur.com/qzn6uGb.png)
+
+---
+
+## Enlace entre un servidor ORACLE y uno Postgres
+
+En este caso las máquinas que voy a conectar son oracle-maquina1 y mariadb-maquina2, por lo que las direcciones IP son las siguientes:
+
+* oracle-maquina1: 192.168.122.204
+* mariadb-maquina2: 192.168.122.90
+
+### Conexión desde Postgres a ORACLE
+
+Primero descargamos los siguientes paquetes:
+
+```bash
+apt install libaio1 postgresql-server-dev-all build-essential git alien -y
+```
+
+Ahora tenemos que descargar el instantclient de oracle, se hace con los siguientes comandos:
+
+```bash
+wget https://download.oracle.com/otn_software/linux/instantclient/218000/oracle-instantclient-basic-21.8.0.0.0-1.el8.x86_64.rpm
+wget https://download.oracle.com/otn_software/linux/instantclient/218000/oracle-instantclient-devel-21.8.0.0.0-1.el8.x86_64.rpm
+wget https://download.oracle.com/otn_software/linux/instantclient/218000/oracle-instantclient-sqlplus-21.8.0.0.0-1.el8.x86_64.rpm
+
+sudo alien -i --scripts oracle-instantclient-*
+```
+
+Una vez instalado, con el siguiente comando podemos conectarnos a la base de datos de oracle-maquina1:
+
+```bash
+sqlplus roberto/roberto@192.168.122.204:1521/ORCLCDB
+```
+
+Ahora tenemos que descargar y compilar `oracle_fdw`:
+
+```bash
+wget https://github.com/laurenz/oracle_fdw/archive/refs/tags/ORACLE_FDW_2_5_0.zip
+unzip ORACLE_FDW_2_5_0.zip
+```
+
+Renombramos la carpeta:
+
+```bash
+mv oracle_fdw-ORACLE_FDW_2_5_0/ oracle_fdw
+```
+
+Finalmente compilamos el programa:
+
+```bash
+cd oracle_fdw
+make
+make install
+```
+
+Ahora, dentro de psql (y de la base de datos scott) creamos el enlace. Podemos comprobar que se ha creado con \dx:
+
+```sql
+CREATE EXTENSION oracle_fdw;
+```
+
+Creamos el schema en el que se van a importar las bases de datos de Oracle:
+
+```sql
+create schema oracle;
+```
+
+Configuramos un servidor foráneo que haga referencia a la base de datos Oracle en la otra máquina:
+
+```sql
+create server oracle foreign data wrapper oracle_fdw options (dbserver '//192.168.122.204/ORCLCDB');
+```
+
+Ahora creamos una equivalencia entre un usuario local y el del servidor (aunque en este caso se llaman igual):
+
+```bash
+create user mapping for roberto server oracle options (user 'roberto', password 'roberto');
+```
+
+Le damos permisos al usuario local sobre el schema de oracle:
+
+```bash
+grant all privileges on schema oracle to roberto;
+grant all privileges on foreign server oracle to roberto;
+```
+
+Iniciamos sesión en psql con el usuario que hemos indicado en los pasos anteriores, e importamos el esquema remoto:
+
+```bash
+psql -U roberto -W -d scott
+```
+
+```bash
+import foreign schema "ROBERTO" from server oracle into oracle;
+```
+
+![5](https://i.imgur.com/EypaWU0.png)
+
+### Conexión desde Oracle a Postgres
+
+Para realizar la conexión vamos a utilizar ODBC (Open Database Conectivity); y en este caso ya que vamos a realizar la conexión con PostgreSQL, también tenemos que descargar el paquete específico:
+
+```bash
+dnf install unixODBC postgresql-odbc
+```
+
+Ahora en el fichero de configuración `/etc/odbcinst.ini` comentamos todas las líneas menos las referentes a postgresql, quedando el fichero de la siguiente manera:
+
+```bash
+[PostgreSQL]
+Description = ODBC for PostgreSQL
+Driver = /usr/lib/psqlodbcw.so
+Setup = /usr/lib/libodbcpsqlS.so
+Driver64 = /usr/lib64/psqlodbcw.so
+Setup64 = /usr/lib64/libodbcpsqlS.so
+FileUsage = 1
+```
+
+Para configurar el acceso a la máquina con postgres tenemos que crear en el fichero `/etc/odbc.ini` la siguiente entrada:
+
+```bash
+[PSQLU]
+
+Debug = 0
+CommLog = 0
+ReadOnly = 0
+Driver = PostgreSQL
+Servername = 192.168.122.90
+Username = roberto
+Password = roberto
+Port = 5432
+Database = scott
+Trace = 0
+TraceFile = /tmp/sql.log
+```
+
+Podemos comprobar que funciona con isql PSQLU.
+
+Ahora hay que crear la configuración para que Oracle pueda hacer uso del driver. Para ello tenemos que crear el fichero `/opt/oracle/product/19c/dbhome_1/hs/admin/initPSQLU.ora` con el siguiente contenido:
+
+```bash
+HS_FDS_CONNECT_INFO = PSQLU
+HS_FDS_TRACE_LEVEL = DEBUG
+HS_FDS_SHAREABLE_NAME = /usr/lib64/psqlodbcw.so
+HS_LANGUAGE = AMERICAN_AMERICA.WE8ISO8859P1
+set ODBCINI=/etc/odbc.ini
+```
+
+También hay que configurar el listener `/opt/oracle/product/19c/dbhome_1/network/admin/listener.ora`, añadiendo lo siguiente al final:
+
+```bash
+SID_LIST_LISTENER =
+ (SID_LIST =
+ (SID_DESC =
+ (SID_NAME = PSQLU)
+ (ORACLE_HOME=/opt/oracle/product/19c/dbhome_1)
+ (PROGRAM=dg4odbc)
+ )
+ )
+```
+
+Y añadimos una entrada de conexión a `/opt/oracle/product/19c/dbhome_1/network/admin/tnsnames.ora`:
+
+```bash
+PSQLU =
+ (DESCRIPTION=
+ (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))
+ (CONNECT_DATA=(SID=PSQLU))
+ (HS=OK)
+ )
+```
+
+Ahora reiniciamos el listener y creamos el enlace dentro de oracle.
+
+```sql
+create database link postgreslink connect to "roberto" identified by"roberto" using 'PSQLU';
+```
+
+Ya está creado el enlace. Ahora para comprobar que funciona, podemos hacer una consulta:
+
+```sql
+SELECT "ename" FROM "emp"@postgreslink;
+```
+
+![6](https://i.imgur.com/rSga9bn.png)
\ No newline at end of file
diff --git a/content/post/2022-12-07_compilacion-kernel/featured.png b/content/post/2022-12-07_compilacion-kernel/featured.png
new file mode 100644
index 0000000..2ff3ec1
Binary files /dev/null and b/content/post/2022-12-07_compilacion-kernel/featured.png differ
diff --git a/content/post/2022-12-07_compilacion-kernel/index.md b/content/post/2022-12-07_compilacion-kernel/index.md
new file mode 100644
index 0000000..4d5c699
--- /dev/null
+++ b/content/post/2022-12-07_compilacion-kernel/index.md
@@ -0,0 +1,64 @@
+---
+title: "Compilación Kernel"
+date: 2022-12-07T21:18:17+01:00
+draft: false
+image: featured.png
+categories:
+ - documentación
+ - Administración de Sistemas Operativos
+tags:
+ - Compilación
+ - Debian
+---
+
+## Compilación de un Kernel linux a medida
+
+Al ser linux un kérnel libre, es posible descargar el código fuente, configurarlo y comprimirlo. Además, esta tarea a priori compleja, es más sencilla de lo que parece gracias a las herramientas disponibles.
+En esta tarea debes tratar de compilar un kérnel completamente funcional que reconozca todo el hardware básico de tu equipo y que sea a la vez lo más pequeño posible, es decir que incluya un vmlinuz lo más pequeño posible y que incorpore sólo los módulos imprescindibles. Para ello utiliza el método explicado en clase y entrega finalmente el fichero deb con el kérnel compilado por ti.
+El hardware básico incluye como mínimo el teclado, la interfaz de red y la consola gráfica (texto).
+
+## Descarga
+
+En este caso vamos a descargar el último kernel de linux de la [página oficial](https://kernel.org/):
+
+```bash
+wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.0.7.tar.xz
+tar xf linux-6.0.7.tar.xz
+cd linux-6.0.7
+```
+
+## Compilación del kernel
+
+Para configurar los módulos que tenemos cargados actualmente en el sistema tenemos que introducir losa siguientes comandos:
+
+```bash
+make oldconfig
+make localyesconfig
+```
+
+Con lo siguiente podemos comprobar el número de módulos estáticos y dinámicos que tenemos actualmente:
+
+```bash
+egrep '=y' .config | wc -l
+egrep '=m' .config | wc -l
+```
+
+Para compilar el kernel, tenemos que ejecutar el siguiente comando, que aprovecha el número de núcleos que tenemos para reducir al máximo el tiempo de compilación:
+
+```bash
+time make -j $(nproc) bindeb-pkg
+```
+
+## Reducir el kernel
+
+Para reducir el tamaño del kernel tenemos que desactivar módulos. Éstos se desactivan ejecutando el siguiente comando:
+
+```bash
+make clean
+make xconfig
+```
+
+que abre una interfaz gráfica en la que podemos seleccionar los módulos quq queremos activar o desactivar:
+
+![https://i.imgur.com/cndWKk6.png](https://i.imgur.com/cndWKk6.png)
+
diff --git a/content/post/2022-12-07_migracion_php/featured.png b/content/post/2022-12-07_migracion_php/featured.png
new file mode 100644
index 0000000..4958593
Binary files /dev/null and b/content/post/2022-12-07_migracion_php/featured.png differ
diff --git a/content/post/2022-12-07_migracion_php/index.md b/content/post/2022-12-07_migracion_php/index.md
new file mode 100644
index 0000000..25deaba
--- /dev/null
+++ b/content/post/2022-12-07_migracion_php/index.md
@@ -0,0 +1,610 @@
+---
+title: "Instalación/migración de aplicaciones web PHP"
+date: 2022-12-07T18:15:43+01:00
+draft: false
+image: featured.png
+categories:
+ - práctica
+ - Implantación de Aplicaciones Web
+tags:
+ - php
+ - vagrant
+ - cms
+ - mediawiki
+ - apache
+ - nginx
+ - vps
+---
+
+## Escenario
+
+Vamos a hacer un escenario de vagrant utilizando el siguiente `Vagrantfile`:
+
+```ruby
+Vagrant.configure("2") do |config|
+
+config.vm.define :web do |web|
+ web.vm.box = "debian/bullseye64"
+ web.vm.hostname = "servidor-web-roberto"
+ web.vm.synced_folder ".", "/vagrant", disabled: true
+ web.vm.network :public_network,
+ :dev => "bridge0",
+ :mode => "bridge",
+ :type => "bridge",
+ use_dhcp_assigned_default_route: true
+ web.vm.network :private_network,
+ :libvirt__network_name => "net1",
+ :libvirt__dhcp_enabled => false,
+ :ip => "10.0.0.1",
+ :libvirt__forward_mode => "veryisolated"
+ end
+ config.vm.define :bd do |bd|
+ bd.vm.box = "debian/bullseye64"
+ bd.vm.hostname = "servidor-bd-roberto"
+ bd.vm.synced_folder ".", "/vagrant", disabled: true
+ bd.vm.network :private_network,
+ :libvirt__network_name => "net1",
+ :libvirt__dhcp_enabled => false,
+ :ip => "10.0.0.2",
+ :libvirt__forward_mode => "veryisolated"
+ end
+end
+```
+
+## Configuración de resolución estática
+
+Vamos a configurar la resolución estática de las páginas utilizando la IP pública de la máquina web:
+
+![resolucion](https://i.imgur.com/n78aYSy.png)
+
+## Instalación de un CMS PHP en mi servidor local
+
+En este caso el CMS que vamos a instalar es [Media Wiki](https://www.mediawiki.org/wiki/Manual:Installing_MediaWiki). Ahora vamos a configurar el servidor y la base de datos.
+
+En el servidor web instalamos apache con php:
+
+```bash
+apt update
+apt install apache2 libapache2-mod-php php php-mysql
+```
+
+### Configuración del VirtualHost
+
+Vamos a instalar el cms en `/var/www/mediawiki`, por lo configuramos el vhost en el fichero `etc/apache2/sites-available/mediawiki.conf`:
+
+```apache2
+
+ ServerName www.roberto.org
+
+ ServerAdmin webmaster@localhost
+ DocumentRoot /var/www/mediawiki
+
+ ErrorLog ${APACHE_LOG_DIR}/error.log
+ CustomLog ${APACHE_LOG_DIR}/access.log combined
+
+
+# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
+```
+
+Ahora activamos el VirtualHost
+
+```bash
+a2ensite mediawiki
+systemctl reload apache2
+```
+
+### Configuración de la base de datos
+
+En el servidor que va a tener la base de datos, instalamos mariadb:
+
+```bash
+apt update
+apt install mariadb-server
+mariadb -u root
+```
+
+Dentro vamos a crear una base de datos para el CMS y un usuario con permisos:
+
+```sql
+GRANT ALL PRIVILEGES ON *.* TO 'remoto'@'%'
+IDENTIFIED BY 'remoto' WITH GRANT OPTION;
+
+create database mediawiki;
+```
+
+Para configurar el acceso remoto, tenemos que modificar en fichero `/etc/mysql/mariadb.conf.d/50-server.cnf`, la siguiente línea:
+
+```bash
+bind-address = 0.0.0.0
+```
+
+Y reiniciamos el servicio.
+
+Ahora desde el cliente creamos el siguiente usuario:
+
+```sql
+GRANT ALL PRIVILEGES ON *.* TO 'remoto'@'10.0.0.2' IDENTIFIED BY 'remoto' WITH GRANT OPTION;
+```
+
+y podemos conectarnos a la base de datos remota con el siguiente comando:
+
+```bash
+mysql -u remoto -h 10.0.0.2 --password=remoto
+```
+
+### Instalación MediaWiki
+
+Para instalar media wiki, tenemos que descargar la última versión de la página oficial:
+
+```bash
+wget https://releases.wikimedia.org/mediawiki/1.38/mediawiki-1.38.4.tar.gz
+tar -xf mediawiki-1.38.4.tar.gz
+cp -r mediawiki-1.38.4/* /var/www/mediawiki/
+chown -R www-data:www-data /var/www/mediawiki/
+```
+
+Antes de iniciar la instalación tenemos que instalar los siguientes paquetes:
+
+```bash
+apt install php-mbstring php-xml php-intl -y
+systemctl restart apache2.service
+```
+
+Ahora seguimos la instalación normalmente, pero en la configuración de la base de datos es importante especificar la IP:
+
+![p2-1](https://i.imgur.com/lUVzDxN.png)
+
+Una vez finalizada la configuración inicial, se descarga el fichero `LocalSettings.php`:
+
+![p2-2](https://i.imgur.com/Ecn7gng.png)
+
+Tenemos que moverlo al Document Root de MediaWiki:
+
+```bash
+chown www-data:www-data LocalSettings.php
+mv LocalSettings.php /var/www/mediawiki/
+```
+
+Una vez realizada la configuración, accediendo a `www.roberto.org` aparece la wiki:
+
+![p2-3](https://i.imgur.com/mT4mBno.png)
+
+#### Instalación de un módulo
+
+Tras configurar el tema, vamos a instalar un módulo: [SimpleCalendar](https://www.mediawiki.org/wiki/Extension:SimpleCalendar):
+
+```bash
+wget https://extdist.wmflabs.org/dist/extensions/SimpleCalendar-REL1_38-b7a2f05.tar.gz
+tar -xf SimpleCalendar-REL1_38-b7a2f05.tar.gz
+mv SimpleCalendar /var/www/mediawiki/extensions/
+```
+
+Ahora añadimos la siguiente línea al final de `LocalSettings.php`:
+
+```bash
+echo "wfLoadExtension( 'SimpleCalendar' );" >> /var/www/mediawiki/LocalSettings.php
+```
+
+Una vez hecho, podemos comprobar que está correctamente instalado accediendo a [http://www.roberto.org/index.php/Especial:Versión](http://www.roberto.org/index.php/Especial:Versi%C3%B3n)
+
+![p2-4](https://i.imgur.com/GYSoi3r.png)
+
+Ya instalado, podemos añadir calendarios a las páginas de la wiki con el siguiente bloque:
+
+```php
+{{#calendar: year=2022 | month=nov | title="calendario" }}
+```
+
+Y quedaría de la siguiente forma:
+
+![p2-5](https://i.imgur.com/bNKXNG6.png)
+
+## Instalación del CMS PHP NextCloud
+
+Primero descargamos la última versión y lo movemos al directorio de apache:
+
+```bash
+wget https://download.nextcloud.com/server/releases/latest.zip
+unzip latest.zip
+cp -r nextcloud/ /var/www/
+chown -R www-data:www-data /var/www/nextcloud/
+```
+
+Ahora configuramos el vhost en el fichero `etc/apache2/sites-available/nextcloud.conf`:
+
+```bash
+
+ ServerName www.cloud.roberto.org
+ ServerAdmin webmaster@localhost
+ DocumentRoot /var/www/nextcloud
+ ErrorLog ${APACHE_LOG_DIR}/error.log
+ CustomLog ${APACHE_LOG_DIR}/access.log combined
+
+```
+
+```bash
+a2ensite nextcloud.conf
+systemctl reload apache2.service
+```
+
+E instalamos los módulos de php necesarios:
+
+```bash
+ apt install php-zip php-gd php-curl -y
+systemctl reload apache2.service
+```
+
+Ahora en la máquina con la base de datos creamos la base de datos para nextcloud:
+
+```bash
+create database nextcloud;
+```
+
+Tras este paso, podemos acceder a `cloud.roberto.org` para iniciar la instalación, es importante que en la base de datos especifiquemos la ip y el puerto de la máquina con la base de datos:
+
+![p2-6](https://i.imgur.com/dSKyF4C.png)
+
+Una vez finalizada la instalación, ya podremos utilizar nextcloud:
+
+![p2-7](https://i.imgur.com/LKyMGco.png)
+
+
+---
+
+
+## DNS del dominio
+
+Para configurar el dns tenemos que mirar la dirección en la configuración del VPS:
+
+![p2-8](https://i.imgur.com/MZtPIqH.png)
+
+y añadir un registro CNAME en la dirección [www.admichin.es](www.admichin.es) que lleve a esa dirección:
+
+![p2-9](https://i.imgur.com/hnTB39X.png)
+
+## Configuración del servidor LEMP
+
+Para instalar el servidor lemp tenemos que instalar los siguientes paquetes:
+
+```bash
+apt install
+apt install nginx php php-mysql mariadb-server -y
+```
+
+Ahora, en la máquina con la base de datos, creamos un fichero con la copia de seguridad y lo enviamos a la vps:
+
+```bash
+mysqldump -u remoto -p -x -A > dbs.sql
+scp dbs.sql calcetines@nodriza.admichin.es:/home/calcetines
+```
+
+Ahora creamos en la base de datos un usuario con permisos y restauramos las bases de datos:
+
+```sql
+GRANT ALL PRIVILEGES ON *.* TO 'admin'@localhost IDENTIFIED BY 'contraseña' WITH GRANT OPTION;
+```
+
+```bash
+mysql --user admin --password < dbs.sql
+```
+
+## Migración de las aplicaciones
+
+Para migrar las aplicaciones, tenemos que moverlas al servidor. En este caso utilizaré rsync ya que permite reanudar la transmisión si se interrumpe, además de ser más rápido que scp:
+
+```bash
+rsync -avP /var/www/mediawiki/ calcetines@nodriza.admichin.es:/home/calcetines/mediawiki
+rsync -avP /var/www/nextcloud/ calcetines@nodriza.admichin.es:/home/calcetines/nextcloud
+```
+
+Una vez finalizado, en este caso vamos a utilizar un solo virtualhost, por lo que los directorios de ambas aplicaciones deben estar en `/var/www/html/nombreaplicacion`:
+
+```bash
+upstream php-handler {
+ #server 127.0.0.1:9000;
+ server unix:/var/run/php/php7.4-fpm.sock;
+}
+
+# Set the `immutable` cache control options only for assets with a cache busting `v` argument
+map $arg_v $asset_immutable {
+ "" "";
+ default "immutable";
+}
+
+server {
+ listen 80;
+ listen [::]:80;
+ server_name www.admichin.es;
+
+ # Prevent nginx HTTP Server Detection
+ #server_tokens off;
+ rewrite ^/$ /portal;
+
+ # Path to the root of the domain
+ root /var/www/html;
+
+ location = /robots.txt {
+ allow all;
+ log_not_found off;
+ access_log off;
+ }
+
+ location ^~ /.well-known {
+ # The rules in this block are an adaptation of the rules
+ # in the cloud `.htaccess` that concern `/.well-known`.
+
+ location = /.well-known/carddav { return 301 /cloud/remote.php/dav/; }
+ location = /.well-known/caldav { return 301 /cloud/remote.php/dav/; }
+
+ location /.well-known/acme-challenge { try_files $uri $uri/ =404; }
+ location /.well-known/pki-validation { try_files $uri $uri/ =404; }
+
+ # Let cloud's API for `/.well-known` URIs handle all other
+ # requests by passing them to the front-end controller.
+ return 301 /cloud/index.php$request_uri;
+ }
+ location ^~ /portal {
+ # set max upload size and increase upload timeout:
+ client_max_body_size 512M;
+ client_body_timeout 300s;
+ fastcgi_buffers 64 4K;
+
+ gzip on;
+ gzip_vary on;
+ gzip_comp_level 4;
+ gzip_min_length 256;
+ gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
+ gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/wasm application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;
+
+
+ client_body_buffer_size 512k;
+
+ # HTTP response headers borrowed from cloud `.htaccess`
+ add_header Referrer-Policy "no-referrer" always;
+ add_header X-Content-Type-Options "nosniff" always;
+ add_header X-Download-Options "noopen" always;
+ add_header X-Frame-Options "SAMEORIGIN" always;
+ add_header X-Permitted-Cross-Domain-Policies "none" always;
+ add_header X-Robots-Tag "none" always;
+ add_header X-XSS-Protection "1; mode=block" always;
+
+ fastcgi_hide_header X-Powered-By;
+
+ index index.php index.html /portal/index.php$request_uri;
+
+ location ~ \.php(?:$|/) {
+
+ fastcgi_split_path_info ^(.+?\.php)(/.*)$;
+ set $path_info $fastcgi_path_info;
+
+ try_files $fastcgi_script_name =404;
+
+ include fastcgi_params;
+ fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+ fastcgi_param PATH_INFO $path_info;
+
+ fastcgi_param modHeadersAvailable true; # Avoid sending the security headers twice
+ fastcgi_param front_controller_active true; # Enable pretty urls
+ fastcgi_pass php-handler;
+
+ fastcgi_intercept_errors on;
+ fastcgi_request_buffering off;
+
+ fastcgi_max_temp_file_size 0;
+ }
+
+ location /portal {
+ try_files $uri $uri/ /portal/index.php$request_uri;
+ }
+ }
+ location ~ /\.ht {
+ deny all;
+ }
+
+ location ^~ /cloud {
+ # set max upload size and increase upload timeout:
+ client_max_body_size 512M;
+ client_body_timeout 300s;
+ fastcgi_buffers 64 4K;
+ # Enable gzip but do not remove ETag headers
+ gzip on;
+ gzip_vary on;
+ gzip_comp_level 4;
+ gzip_min_length 256;
+ gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
+ gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/wasm application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;
+ # HTTP response headers borrowed from cloud `.htaccess`
+ add_header Referrer-Policy "no-referrer" always;
+ add_header X-Content-Type-Options "nosniff" always;
+ add_header X-Download-Options "noopen" always;
+ add_header X-Frame-Options "SAMEORIGIN" always;
+ add_header X-Permitted-Cross-Domain-Policies "none" always;
+ add_header X-Robots-Tag "none" always;
+ add_header X-XSS-Protection "1; mode=block" always;
+
+ # Remove X-Powered-By, which is an information leak
+ fastcgi_hide_header X-Powered-By;
+ index index.php index.html /cloud/index.php$request_uri;
+
+ # Rule borrowed from `.htaccess` to handle Microsoft DAV clients
+ location = /cloud {
+ if ( $http_user_agent ~ ^DavClnt ) {
+ return 302 /cloud/remote.php/webdav/$is_args$args;
+ }
+ }
+
+ # Rules borrowed from `.htaccess` to hide certain paths from clients
+ location ~ ^/cloud/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/) { return 404; }
+ location ~ ^/cloud/(?:\.|autotest|occ|issue|indie|db_|console) { return 404; }
+ location ~ \.php(?:$|/) {
+ # Required for legacy support
+ rewrite ^/cloud/(?!index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+|.+\/richdocumentscode\/proxy) /cloud/index.php$request_uri;
+
+ fastcgi_split_path_info ^(.+?\.php)(/.*)$;
+ set $path_info $fastcgi_path_info;
+
+ try_files $fastcgi_script_name =404;
+
+ include fastcgi_params;
+ fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+ fastcgi_param PATH_INFO $path_info;
+ # fastcgi_param HTTPS on;
+
+ fastcgi_param modHeadersAvailable true; # Avoid sending the security headers twice
+ fastcgi_param front_controller_active true; # Enable pretty urls
+ fastcgi_pass php-handler;
+
+ fastcgi_intercept_errors on;
+ fastcgi_request_buffering off;
+
+ fastcgi_max_temp_file_size 0;
+ }
+ location ~ \.(?:css|js|svg|gif|png|jpg|ico|wasm|tflite|map)$ {
+ try_files $uri /cloud/index.php$request_uri;
+ add_header Cache-Control "public, max-age=15778463, $asset_immutable";
+ access_log off; # Optional: Don't log access to assets
+
+ location ~ \.wasm$ {
+ default_type application/wasm;
+ }
+ }
+ location ~ \.woff2?$ {
+ try_files $uri /cloud/index.php$request_uri;
+ expires 7d; # Cache-Control policy borrowed from `.htaccess`
+ access_log off; # Optional: Don't log access to assets
+ }
+ # Rule borrowed from `.htaccess`
+ location /cloud/remote {
+ return 301 /cloud/remote.php$request_uri;
+ }
+ location /cloud {
+ try_files $uri $uri/ /cloud/index.php$request_uri;
+ }
+ }
+}
+```
+
+### MediaWiki
+
+para migrar la aplicación de mediawiki tenemos que realizar los siguientes pasos:
+
+* Primero tenemos que transferir los ficheros que se encuentren en el document root de mediawiki a la vps, en este caso con rsync:
+
+```bash
+rsync -avP /var/www/mediawiki/ calcetines@nodriza.admichin.es:/home/calcetines/mediawiki
+```
+
+* dentro de la vps lo movemos a su nueva ubicación:
+
+```bash
+mv mediawiki /var/www/html/portal
+```
+
+* El último paso, es configurar el fichero `LocalSettings.php` (he quitado los comentarios para que sea menos largo):
+
+```php
+ "https://i.imgur.com/KqnlgCE.png",
+
+
+ 'icon' => "https://i.imgur.com/KqnlgCE.png", ];
+$wgEnableEmail = true; $wgEnableUserEmail = true; # UPO $wgEmergencyContact = "apache@������.invalid"; $wgPasswordSender =
+"apache@������.invalid"; $wgEnotifUserTalk = false; # UPO $wgEnotifWatchlist = false; # UPO $wgEmailAuthentication = true;
+$wgDBtype = "mysql"; $wgDBserver = "localhost"; $wgDBname = "mediawiki"; $wgDBuser = "admin"; $wgDBpassword =
+"contraseña";
+$wgDBprefix = "";
+$wgDBTableOptions = "ENGINE=InnoDB, DEFAULT CHARSET=binary";
+$wgSharedTables[] = "actor";
+$wgMainCacheType = CACHE_NONE; $wgMemCachedServers = [];
+$wgEnableUploads = false;
+$wgUseInstantCommons = false;
+$wgPingback = true;
+$wgLanguageCode = "es";
+$wgLocaltimezone = "UTC";
+$wgSecretKey = "61c7675d604b7bd8b0b434dd7c53d6470ff8797636136e4ef7ade0e08cdaba14";
+$wgAuthenticationTokenVersion = "1";
+$wgUpgradeKey = "696787eac8f24d0f";
+$wgRightsPage = ""; # Set to the title of a wiki page that describes your license/copyright $wgRightsUrl = ""; $wgRightsText =
+""; $wgRightsIcon = "";
+$wgDiff3 = "/usr/bin/diff3";
+$wgDefaultSkin = "MonoBook";
+wfLoadSkin( 'MinervaNeue' ); wfLoadSkin( 'MonoBook' ); wfLoadSkin( 'Timeless' ); wfLoadSkin( 'Vector' );
+wfLoadExtension( 'SimpleCalendar' );
+$wgUsePathInfo = TRUE;
+```
+
+Tras eso mediaWiki estaría totalmente configurado y podremos acceder con: [http://www.admichin.es](http://www.admichin.es)
+
+![m1](https://i.imgur.com/3BgNcj6.png)
+
+### NextCloud
+
+Para migrar nextcloud, el método es diferente. Siguiendo [guía oficial](https://docs.nextcloud.com/server/latest/admin_manual/maintenance/migrating.html) hay que seguir los siguientes pasos:
+
+* En la vps, tenemos que instalar los requisitos previos de nextcloud
+
+```bash
+pt install php-zip php-gd php-curl -y
+```
+
+* En la máquina original, hay que activar el modo mantenimiento del Nextcloud (desde el document root de nextcloud) y apagar el servidor tras 6-7 minutos:
+
+```bash
+sudo -u www-data php occ maintenance:mode --on
+systemctl stop apache2
+```
+
+![m2](https://i.imgur.com/gFqYaJ9.png)
+
+* Cuando termine copiamos los ficheros de nextcloud a la vps:
+
+```bash
+rsync -avP /var/www/nextcloud/ calcetines@nodriza.admichin.es:/home/calcetines/nextcloud
+```
+
+* Dentro de la vps lo movemos a su nueva ubicación:
+
+```bash
+mv nextcloud /var/www/html/cloud
+```
+
+* en el fichero config.php tenemos que adaptar las opciones:
+
+```php
+ 'oct5tjcnoj2h',
+ 'passwordsalt' => 'uz7Kh0ZsihYsbbhIhL/HojMYSVc20y',
+ 'secret' => 'NxO/97NF1AoG+oCMrY3ryaefvSGO6SHczYjoc5x8NvsLZ1ma',
+ 'trusted_domains' =>
+ array (
+ 0 => 'www.admichin.es',
+ ),
+ 'datadirectory' => '/var/www/html/cloud/data',
+ 'dbtype' => 'mysql',
+ 'version' => '25.0.1.1',
+ 'overwrite.cli.url' => 'http://www.admichin.es/cloud',
+ 'dbname' => 'nextcloud',
+ 'dbhost' => 'localhost',
+ 'dbport' => '',
+ 'dbtableprefix' => 'oc_',
+ 'mysql.utf8mb4' => true,
+ 'dbuser' => 'oc_roberto',
+ 'dbpassword' => '}QR947P6^,vV%K$ATu]$W~%)AUhj6X',
+ 'installed' => true,
+ 'maintenance' => true,
+);
+```
+
+* Ahora, teniendo en cuenta que el serverblock de nginx está configurado, comprobamos que al acceder a [http://www.admichin.es/cloud](http://www.admichin.es/cloud) aparece el modo mantenimiento.
+
+* Si aparecece la misma imagen que en el caso anterior, entonces podemos cambiar el valor de configuración de `mainteinance` a false, y recargamos la página:
+
+![m3](https://i.imgur.com/7jYwYOI.png)
+![m4](https://i.imgur.com/06VeYQ7.png)
\ No newline at end of file
diff --git a/content/post/2022-12-07_plsqlindiv/featured.png b/content/post/2022-12-07_plsqlindiv/featured.png
new file mode 100644
index 0000000..3ff8f90
Binary files /dev/null and b/content/post/2022-12-07_plsqlindiv/featured.png differ
diff --git a/content/post/2022-12-07_plsqlindiv/index.md b/content/post/2022-12-07_plsqlindiv/index.md
new file mode 100644
index 0000000..4d22a22
--- /dev/null
+++ b/content/post/2022-12-07_plsqlindiv/index.md
@@ -0,0 +1,421 @@
+---
+title: "Práctica PL/SQL individual"
+date: 2022-12-07T13:37:02+01:00
+draft: false
+image: featured.png
+categories:
+ - documentación
+ - Administración de Bases de Datos
+tags:
+ - Oracle
+ - PL/SQL
+---
+
+## Hacer un procedimiento que muestre el nombre y el salario del empleado cuyo código es 7782
+
+```sql
+CREATE OR REPLACE PROCEDURE mostrarnombresalario
+is
+ v_nombre emp.ename%type;
+ v_salario emp.sal%type;
+begin
+ select ename,sal into v_nombre,v_salario from emp where empno=7782;
+ dbms_output.put_line('El nombre del empleado es ' || v_nombre || ' y su salario es: ' || v_salario);
+end;
+/
+```
+
+![p1](https://i.imgur.com/CscMTfL.png)
+
+## Hacer un procedimiento que reciba como parámetro un código de empleado y devuelva su nombre
+
+```sql
+CREATE OR REPLACE PROCEDURE mostrarnombresalario2 (p_empno emp.empno%TYPE)
+is
+ v_nombre emp.ename%type;
+ v_salario emp.sal%type;
+begin
+ select ename,sal into v_nombre,v_salario from emp where empno=p_empno;
+ dbms_output.put_line('El nombre del empleado es ' || v_nombre || ' y su salario es: ' || v_salario);
+end;
+/
+```
+
+![p2](https://i.imgur.com/o2tqMaP.png)
+
+## Hacer un procedimiento que devuelva los nombres de los tres empleados más antiguos
+
+```sql
+CREATE OR REPLACE PROCEDURE topantiguos
+is
+ cursor c_top is
+ select ename
+ from emp
+ order by hiredate asc
+ fetch first 3 rows only;
+begin
+ dbms_output.put_line('Los 3 empleados mas antiguos son: ');
+ for v_empleado in c_top loop
+ dbms_output.put_line(v_empleado.ename);
+ end loop;
+end;
+/
+```
+
+![p3](https://i.imgur.com/FOSjg5a.png)
+
+## Hacer un procedimiento que reciba el nombre de un tablespace y muestre los nombres de los usuarios que lo tienen como tablespace por defecto (Vista DBA_USERS)
+
+```sql
+CREATE OR REPLACE PROCEDURE verusuarios (p_tablespace dba_users.default_tablespace%type)
+is
+ cursor c_usuarios is
+ SELECT username
+ from dba_users
+ where default_tablespace=p_tablespace;
+begin
+ dbms_output.put_line('El tablespace ' || p_tablespace || ' es el predeterminado de los siguientes usuarios:');
+ for v_usuario in c_usuarios loop
+ dbms_output.put_line(v_usuario.username);
+ end loop;
+end;
+/
+```
+
+![p4](https://i.imgur.com/U3oRByX.png)
+
+## Modificar el procedimiento anterior para que haga lo mismo pero devolviendo el número de usuarios que tienen ese tablespace como tablespace por defecto. Nota: Hay que convertir el procedimiento en función
+
+```sql
+CREATE OR REPLACE function f_numusuarios (p_tablespace dba_users.default_tablespace%type)
+return number
+is
+ v_num number;
+begin
+ select count(username) into v_num from dba_users where default_tablespace=p_tablespace;
+ return v_num;
+end;
+/
+```
+
+## Hacer un procedimiento llamado mostrar_usuarios_por_tablespace que muestre por pantalla un listado de los tablespaces existentes con la lista de usuarios de cada uno y el número de los mismos, así: (Vistas DBA_TABLESPACES y DBA_USERS)
+
+```sql
+Tablespace xxxx:
+
+ Usr1
+ Usr2
+ ...
+
+Total Usuarios Tablespace xxxx: n1
+
+Tablespace yyyy:
+
+ Usr1
+ Usr2
+ ...
+
+Total Usuarios Tablespace yyyy: n2
+....
+Total Usuarios BD: nn
+```
+
+He modificado el procedimiento del ejercicio 4:
+
+```sql
+CREATE OR REPLACE PROCEDURE verusuarios (p_tablespace dba_users.default_tablespace%type)
+is
+ cursor c_usuarios is
+ SELECT username
+ from dba_users
+ where default_tablespace=p_tablespace;
+begin
+ for v_usuario in c_usuarios loop
+ dbms_output.put_line(CHR(9)|| v_usuario.username);
+ end loop;
+end;
+/
+```
+
+Y el procedimiento nuevo es:
+
+```sql
+CREATE OR REPLACE PROCEDURE mostrar_usuarios_por_tablespace
+is
+ cursor c_tablespaces is
+ SELECT tablespace_name
+ from dba_tablespaces;
+ v_total_usuario number;
+ v_total number:=0;
+begin
+ for v_tablespace in c_tablespaces loop
+ dbms_output.put_line('Tablespace ' || v_tablespace.tablespace_name);
+ verusuarios(v_tablespace.tablespace_name);
+ v_total_usuario:=f_numusuarios(v_tablespace.tablespace_name);
+ v_total:=v_total+v_total_usuario;
+ dbms_output.put_line('Total Usuarios tablespace ' || v_tablespace.tablespace_name || ': ' || v_total_usuario);
+ end loop;
+ dbms_output.put_line('Total Usuarios BD : ' || v_total);
+end;
+/
+```
+
+![p5](https://i.imgur.com/1sCHBpU.png)
+
+[...]
+
+![p6](https://i.imgur.com/pbjFtsP.png)
+
+## Hacer un procedimiento llamado mostrar_codigo_fuente que reciba el nombre de otro procedimiento y muestre su código fuente. (DBA_SOURCE)
+
+```sql
+CREATE OR REPLACE PROCEDURE mostrar_codigo_fuente (p_nombre dba_source.name%type)
+is
+ cursor c_codigo is
+ SELECT text
+ from dba_source
+ where name=p_nombre;
+begin
+ for v_codigo in c_codigo loop
+ dbms_output.put_line(v_codigo.text);
+ end loop;
+end;
+/
+```
+
+![p7](https://i.imgur.com/zx9BQyp.png)
+
+## Hacer un procedimiento llamado mostrar_privilegios_usuario que reciba el nombre de un usuario y muestre sus privilegios de sistema y sus privilegios sobre objetos. (DBA_SYS_PRIVS y DBA_TAB_PRIVS)
+
+```sql
+CREATE OR REPLACE PROCEDURE mostrar_privilegios_usuario (p_nombre dba_source.name%type)
+is
+ cursor c_sistema is
+ SELECT privilege
+ from dba_sys_privs
+ where grantee=p_nombre
+ and ADMIN_OPTION='YES'
+ OR INHERITED='YES';
+ cursor c_objetos is
+ SELECT privilege,table_name
+ from dba_tab_privs
+ where grantee=p_nombre;
+begin
+ dbms_output.put_line('Privilegios del usuario '|| p_nombre || ' de sistema');
+ for v_sistema in c_sistema loop
+ dbms_output.put_line(CHR(9)||v_sistema.privilege);
+ end loop;
+ dbms_output.put_line('Privilegios del usuario '|| p_nombre || ' sobre objetos');
+ for v_objeto in c_objetos loop
+ dbms_output.put_line(CHR(9)||v_objeto.privilege || '---' || v_objeto.table_name);
+ end loop;
+end;
+/
+```
+
+![p8](https://i.imgur.com/V9bkArM.png)
+
+## Realiza un procedimiento llamado listar_comisiones que nos muestre por pantalla un listado de las comisiones de los empleados agrupados según la localidad donde está ubicado su departamento con el siguiente formato:
+
+```sql
+Localidad NombreLocalidad
+
+ Departamento: NombreDepartamento
+
+ Empleado1 ……. Comisión 1
+ Empleado2 ……. Comisión 2
+ .
+ .
+ .
+ Empleadon ……. Comision n
+
+ Total Comisiones en el Departamento NombreDepartamento: SumaComisiones
+
+ Departamento: NombreDepartamento
+
+ Empleado1 ……. Comisión 1
+ Empleado2 ……. Comisión 2
+ .
+ .
+ .
+ Empleadon ……. Comision n
+
+ Total Comisiones en el Departamento NombreDepartamento: SumaComisiones
+ .
+ .
+Total Comisiones en la Localidad NombreLocalidad: SumaComisionesLocalidad
+
+Localidad NombreLocalidad
+.
+.
+
+Total Comisiones en la Empresa: TotalComisiones
+```
+
+Nota: Los nombres de localidades, departamentos y empleados deben aparecer por orden alfabético.
+
+Si alguno de los departamentos no tiene ningún empleado con comisiones, aparecerá un mensaje informando de ello en lugar de la lista de empleados.
+
+El procedimiento debe gestionar adecuadamente las siguientes excepciones:
+
+ a) La tabla Empleados está vacía.
+ b) Alguna comisión es mayor que 10000.
+
+He creado dos funciones y un procedimiento:
+
+```sql
+CREATE OR REPLACE FUNCTION listar_empleados(p_deptno dept.deptno%type)
+return number
+is
+ cursor c_empleados is
+ SELECT ename,comm
+ from emp
+ where deptno=p_deptno
+ order by ename;
+ v_vacio number;
+ v_suma number:=0;
+ v_valor number;
+begin
+ select sum(comm) into v_vacio from emp where deptno=p_deptno;
+ if v_vacio>0 then
+ for v_empleado in c_empleados loop
+ IF v_empleado.comm is NULL THEN
+ v_valor:=0;
+ ELSE
+ v_suma:=v_suma+v_empleado.comm;
+ v_valor:=v_empleado.comm;
+ END IF;
+ dbms_output.put_line(CHR(9)||CHR(9)|| v_empleado.ename || ' ... ' || v_valor);
+ end loop;
+ else
+ dbms_output.put_line(CHR(9)||CHR(9)|| 'El departamento no tiene comisiones');
+ end if;
+ return v_suma;
+EXCEPTION
+ WHEN NO_DATA_FOUND then
+ dbms_output.put_line('La tabla empleados está vacía');
+ return 0;
+end;
+/
+
+CREATE OR REPLACE FUNCTION listar_departamentos(p_loc dept.loc%type)
+return number
+is
+ cursor c_departamentos is
+ SELECT dname,deptno
+ from dept
+ where loc=p_loc
+ order by dname;
+ v_total number;
+ v_suma number:=0;
+begin
+ for v_departamento in c_departamentos loop
+ dbms_output.put_line(CHR(9)|| 'Departamento: ' || v_departamento.dname);
+ v_total:=listar_empleados(v_departamento.deptno);
+ dbms_output.put_line(CHR(9)|| 'Total Comisiones en el Departamento ' || v_departamento.dname || ': ' || v_total);
+ v_suma:=v_suma+v_total;
+ end loop;
+ return v_suma;
+end;
+/
+
+CREATE OR REPLACE PROCEDURE listar_comisiones
+is
+ cursor c_localidades is
+ SELECT loc
+ from dept
+ order by loc;
+ v_total number;
+ v_suma number:=0;
+begin
+ for v_localidad in c_localidades loop
+ dbms_output.put_line('Localidad ' || v_localidad.loc);
+ v_total:=listar_departamentos(v_localidad.loc);
+ dbms_output.put_line('Total Comisiones en la Localidad ' || v_localidad.loc || ': ' || v_total);
+ v_suma:=v_suma+v_total;
+ end loop;
+ dbms_output.put_line('Total Comisiones de la Empresa ' || v_suma);
+end;
+/
+```
+
+![p9](https://i.imgur.com/DGWQS1b.png)
+
+## . Realiza un procedimiento que reciba el nombre de una tabla y muestre los nombres de las restricciones que tiene, a qué columna afectan y en qué consisten exactamente. (DBA_TABLES, DBA_CONSTRAINTS, DBA_CONS_COLUMNS)
+
+He realizado los siguientes procedimientos:
+
+```sql
+CREATE OR REPLACE PROCEDURE listar_restriccion(p_nombre user_constraints.table_name%type,p_tabla user_constraints.table_name%type)
+is
+ v_tipo user_constraints.constraint_type%type;
+ v_nombre user_constraints.constraint_name%type;
+ v_referencia user_constraints.r_constraint_name%type;
+ v_condicion user_constraints.search_condition%type;
+begin
+ select constraint_name,constraint_type,r_constraint_name,search_condition into v_nombre,v_tipo,v_referencia,v_condicion
+ from user_constraints
+ where table_name = p_tabla
+ and constraint_name=p_nombre;
+ if v_tipo='P' then
+ dbms_output.put_line(p_nombre || ' ... es de tipo CLAVE PRIMARIA');
+ elsif v_tipo='R' then
+ dbms_output.put_line(p_nombre || ' ... es de tipo CLAVE EXTERNA y hace referencia a: ' || v_nombre);
+ elsif v_tipo='C' then
+ dbms_output.put_line(p_nombre || ' ... es de tipo CHECK y contiene la siguiente comprobacion: ' || v_condicion);
+ end if;
+end;
+/
+
+CREATE OR REPLACE PROCEDURE listar_restricciones(p_tabla user_constraints.table_name%type)
+is
+ cursor c_columnas is
+ SELECT constraint_name,column_name
+ from user_cons_columns
+ where table_name=p_tabla;
+begin
+ dbms_output.put_line('Restricciones de la tabla ' || p_tabla);
+ for v_columna in c_columnas loop
+ listar_restriccion(v_columna.constraint_name,p_tabla);
+ dbms_output.put_line(CHR(9)||'Hace referencia a la columna -> ' || v_columna.column_name);
+ end loop;
+end;
+/
+```
+
+En la comprobación introduzco una tabla diferente al esquema SCOTT ya que tiene más restricciones:
+
+![p10](https://i.imgur.com/OMoSRQz.png)
+
+## Realiza al menos dos de los ejercicios anteriores en Postgres usando PL/pgSQL.
+
+## Ejercicio 1
+
+```sql
+CREATE or replace PROCEDURE mostrarnombresalario() AS $$
+DECLARE
+ v_nombre emp.ename%type;
+ v_salario emp.sal%type;
+BEGIN
+ select ename,sal into v_nombre,v_salario from emp where empno=7782;
+ RAISE NOTICE 'El nombre del empleado es %, y su salario es %', v_nombre,v_salario;
+END;
+$$ LANGUAGE plpgsql;
+```
+
+![p11](https://i.imgur.com/GifaOGt.png)
+
+## Ejercicio 2
+
+```sql
+CREATE or replace PROCEDURE mostrarnombresalario2(p_empno emp.empno%type) AS $$
+DECLARE
+ v_nombre emp.ename%type;
+BEGIN
+ select ename into v_nombre from emp where empno=7782;
+ RAISE NOTICE 'El nombre del empleado cuyo codigo es %, es %', p_empno,v_nombre;
+END;
+$$ LANGUAGE plpgsql;
+```
+
+![p12](https://i.imgur.com/OKfLC2X.png)
\ No newline at end of file
diff --git a/content/post/2022-12-15_nfs/featured.png b/content/post/2022-12-15_nfs/featured.png
new file mode 100644
index 0000000..2ff3ec1
Binary files /dev/null and b/content/post/2022-12-15_nfs/featured.png differ
diff --git a/content/post/2022-12-15_nfs/index.md b/content/post/2022-12-15_nfs/index.md
new file mode 100644
index 0000000..599332d
--- /dev/null
+++ b/content/post/2022-12-15_nfs/index.md
@@ -0,0 +1,122 @@
+---
+title: "Montaje NFS mediante systemd"
+date: 2022-12-15T13:24:40+01:00
+draft: false
+image: featured.png
+categories:
+ - documentación
+ - Administración de Sistemas Operativos
+tags:
+ - NFS
+ - Openstack
+ - Debian
+---
+
+En una instancia del cloud, basada en la distribución de tu elección, anexa un volumen de 2GB. En dicha instancia deberás configurar el servicio nfs de exportación y en el volumen un punto de montaje de la exportación mediante systemd.
+
+
+
+### Escenario
+
+El escenario se compone de dos máquinas, alfa, con debian 11 y que será el servidor nfs; y bravo, con rocky linux 8 y que será el cliente nfs.
+
+## Servidor NFS
+
+Instalamos los paquetes necesarios para el servicio nfs:
+
+```bash
+apt install nfs-kernel-server nfs-common
+```
+
+Creamos el fichero `/etc/systemd/system/mnt-carpeta.mount` con el siguiente contenido. El nombre del fichero, tiene que ser el mismo que el del punto de montaje en el que vamos a montar el dispositivo, además de sustituyendo las "/" por "-" (menos la primera):
+
+```bash
+[Unit]
+Description=Montaje de disco para compartir
+
+[Mount]
+What= /dev/vdb
+Where= /mnt/carpeta/
+Type=ext4
+Options=defaults
+
+[Install]
+WantedBy=multi-user.target
+```
+
+Activamos el servicio:
+
+```bash
+systemctl enable mnt-carpeta.mount
+systemctl start mnt-carpeta.mount
+```
+
+
+Si no funciona el montaje de la unidad, podemos comprobar os errores con `journalctl -xe`
+
+Tras el montaje podemos comprobar que el disco se ha montado correctamente:
+
+![Montaje de disco](https://i.imgur.com/8cUkODO.png)
+
+Finalmente, añadimos la siguiente línea al fichero `/etc/exports`:
+
+```bash
+/mnt/carpeta 172.16.0.0/16(rw,no_all_squash,no_subtree_check)
+```
+
+Y reiniciamos el servicio:
+
+```bash
+systemctl restart nfs-server
+```
+
+
+## Cliente NFS
+
+Instalamos los paquetes necesarios para el servicio nfs:
+
+```bash
+dnf install nfs-utils
+```
+
+Podemos ver los dispositivos de bloques que se están compartiendo por nfs (la ip del servidor nfs es `172.16.0.1`):
+
+```bash
+showmount -e 172.16.0.1
+```
+
+![Dispositivos compartidos](https://i.imgur.com/oaYEhYA.png)
+
+Creamos el fichero `/etc/systemd/system/mnt-carpetaNFS.mount` con el siguiente contenido:
+
+```bash
+[Unit]
+Description=Montaje del disco compartido por red usando NFS
+
+[Mount]
+What=172.16.0.1:/mnt/carpeta
+Where=/mnt/carpetaNFS
+Type=nfs
+Options=defaults
+
+[Install]
+WantedBy=multi-user.target
+```
+
+Activamos el servicio:
+
+```bash
+systemctl enable mnt-carpetaNFS.mount
+systemctl start mnt-carpetaNFS.mount
+```
+
+Podemos comprobar que el disco se ha montado correctamente:
+
+![Montaje de disco 2](https://i.imgur.com/l4fEpSh.png)
+
+## Comprobación
+
+Comprobamos que el dispositivo de bloques se está compartiendo por nfs:
+
+![Comprobación](https://i.imgur.com/16NCruU.png)
+
diff --git a/content/post/2022-12-19_escenario-dns/featured.png b/content/post/2022-12-19_escenario-dns/featured.png
new file mode 100644
index 0000000..8f46b32
Binary files /dev/null and b/content/post/2022-12-19_escenario-dns/featured.png differ
diff --git a/content/post/2022-12-19_escenario-dns/index.md b/content/post/2022-12-19_escenario-dns/index.md
new file mode 100644
index 0000000..24dd875
--- /dev/null
+++ b/content/post/2022-12-19_escenario-dns/index.md
@@ -0,0 +1,213 @@
+---
+title: "Escenario Dns"
+date: 2022-12-19T14:01:03+01:00
+draft: false
+image: featured.png
+categories:
+ - práctica
+ - Servicios de Red e Internet
+tags:
+ - DNS
+ - Openstack
+ - bind9
+---
+
+El enunciado de la prácica se encuentra en el siguiente [enlace](https://fp.josedomingo.org/sri2223/5_dns/practica.html)
+
+## 1. Configuración DNS de cada máquina
+
+Para no tocar la configuración de los servidores DHCP de **OpenStack**, cambiamos manualmente la configuración de las máquinas **Alfa, Bravo y Delta** para que tengan como servidor DNS el servidor **bind9** en **Charlie**, así como el dns del centro (Babuino). Para ello, editamos el fichero `/etc/resolv.conf` y añadimos las siguientes líneas:
+
+```bash
+nameserver 192.168.0.2
+nameserver 192.168.202.2
+```
+
+Para hacer los cambios persistentes en debian/ubuntu, instalamos el paquete `resolvconf`y añadimos los dns al final del fichero `/etc/resolvconf/resolv.conf.d/head`. Para aplicar los cambios sin tener que reiniciar tenemos que ejecutar el comando `resolvconf -u`.
+
+#### VISTAS
+
+```bash
+view interna {
+ match-clients { 192.168.0.0/24; 127.0.0.1; };
+ allow-recursion { any; };
+ zone "roberto.gonzalonazareno.org"
+ {
+ type master;
+ file "db.interna.roberto.gonzalonazareno.org";
+ };
+ zone "0.168.192.in-addr.arpa"
+ {
+ type master;
+ file "db.0.168.192";
+ };
+ zone "16.172.in-addr.arpa"
+ {
+ type master;
+ file "db.0.16.172";
+ };
+ include "/etc/bind/zones.rfc1918";
+ include "/etc/bind/named.conf.default-zones";
+ };
+
+view dmz {
+ match-clients { 172.16.0/16;};
+ allow-recursion { any; };
+ zone "roberto.gonzalonazareno.org"
+ {
+ type master;
+ file "db.dmz.roberto.gonzalonazareno.org";
+ };
+ zone "16.172.in-addr.arpa"
+ {
+ type master;
+ file "db.16.172";
+ };
+ include "/etc/bind/zones.rfc1918";
+ include "/etc/bind/named.conf.default-zones";
+ };
+
+view externa {
+ match-clients { 172.22.0.0/16; 172.29.0.0/16; 192.168.202.2; };
+ allow-recursion { any; };
+ zone "roberto.gonzalonazareno.org"
+ {
+ type master;
+ file "db.externa.roberto.gonzalonazareno.org";
+ };
+ include "/etc/bind/zones.rfc1918";
+ include "/etc/bind/named.conf.default-zones";
+};
+```
+
+## Definición de las zonas
+
+### INTERNA /var/cache/bind/db.interna.roberto.gonzalonazareno.org
+
+```bash
+$TTL 86400
+@ IN SOA charlie.roberto.gonzalonazareno.org. root.roberto.gonzalonazareno.org. (
+ 1 ; Serial
+ 604800 ; Refresh
+ 86400 ; Retry
+ 2419200 ; Expire
+ 86400 ) ; Negative Cache TTL
+;
+@ IN NS charlie.roberto.gonzalonazareno.org.
+@ IN MX 10 mail.roberto.gonzalonazareno.org.
+
+$ORIGIN roberto.gonzalonazareno.org.
+
+alfa IN A 192.168.0.1
+bravo IN A 172.16.0.200
+charlie IN A 192.168.0.2
+delta IN A 192.168.0.3
+www IN CNAME bravo
+bd IN CNAME delta
+```
+
+
+### INTERNA INVERSA /var/cache/bind/db.0.168.192
+
+```bash
+$TTL 86400
+@ IN SOA charlie.roberto.gonzalonazareno.org. root.roberto.gonzalonazareno.org. (
+ 1 ; Serial
+ 604800 ; Refresh
+ 86400 ; Retry
+ 2419200 ; Expire
+ 86400 ) ; Negative Cache TTL
+;
+@ IN NS charlie.roberto.gonzalonazareno.org.
+
+$ORIGIN 0.168.192.in-addr.arpa.
+
+1 IN PTR alfa.roberto.gonzalonazareno.org.
+2 IN PTR charlie.roberto.gonzalonazareno.org.
+3 IN PTR delta.roberto.gonzalonazareno.org.
+```
+
+### INTERNA INVERSA /var/cache/bind/db.16.172
+
+```bash
+$TTL 86400
+@ IN SOA charlie.roberto.gonzalonazareno.org. root.roberto.gonzalonazareno.org. (
+ 1 ; Serial
+ 604800 ; Refresh
+ 86400 ; Retry
+ 2419200 ; Expire
+ 86400 ) ; Negative Cache TTL
+;
+@ IN NS charlie.roberto.gonzalonazareno.org.
+
+$ORIGIN 16.172.in-addr.arpa.
+
+1.0 IN PTR alfa.roberto.gonzalonazareno.org.
+200.0 IN PTR bravo.roberto.gonzalonazareno.org.
+```
+
+### DMZ /var/cache/bind/db.dmz.roberto.gonzalonazareno.org
+
+```bash
+$TTL 86400
+@ IN SOA charlie.roberto.gonzalonazareno.org. root.roberto.gonzalonazareno.org. (
+ 1 ; Serial
+ 604800 ; Refresh
+ 86400 ; Retry
+ 2419200 ; Expire
+ 86400 ) ; Negative Cache TTL
+;
+@ IN NS charlie.roberto.gonzalonazareno.org.
+
+$ORIGIN roberto.gonzalonazareno.org.
+
+alfa IN A 172.16.0.1
+bravo IN A 172.16.0.200
+charlie IN A 192.168.0.2
+delta IN A 192.168.0.3
+www IN CNAME bravo
+bd IN CNAME delta
+```
+
+### EXTERNA /var/cache/bind/db.externa.roberto.gonzalonazareno.org
+
+```bash
+$TTL 86400
+@ IN SOA alfa.roberto.gonzalonazareno.org. root.roberto.gonzalonazareno.org. (
+ 1 ; Serial
+ 604800 ; Refresh
+ 86400 ; Retry
+ 2419200 ; Expire
+ 86400 ) ; Negative Cache TTL
+;
+@ IN NS alfa.roberto.gonzalonazareno.org.
+
+$ORIGIN roberto.gonzalonazareno.org.
+
+alfa IN A 172.22.200.218
+www IN CNAME alfa
+```
+
+
+## Configuración de los servidores web
+
+```bash
+
+ ServerName www.roberto.gonzalonazareno.org
+
+ ServerAdmin webmaster@localhost
+
+ DocumentRoot /var/www/html
+
+ ErrorLog ${APACHE_LOG_DIR}/error.log
+ CustomLog ${APACHE_LOG_DIR}/access.log combined
+
+
+ SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://127.0.0.1/"
+ SetHandler "proxy:fcgi://127.0.0.1:9000"
+
+
+
+
+
+```
diff --git a/content/post/2022-12-19_tabla-mutante/featured.png b/content/post/2022-12-19_tabla-mutante/featured.png
new file mode 100644
index 0000000..3ff8f90
Binary files /dev/null and b/content/post/2022-12-19_tabla-mutante/featured.png differ
diff --git a/content/post/2022-12-19_tabla-mutante/index.md b/content/post/2022-12-19_tabla-mutante/index.md
new file mode 100644
index 0000000..79b5a66
--- /dev/null
+++ b/content/post/2022-12-19_tabla-mutante/index.md
@@ -0,0 +1,177 @@
+---
+title: "Resolución de problemas de
+tablas mutantes"
+date: 2022-12-19T00:51:41+01:00
+draft: false
+image: featured.png
+categories:
+ - documentación
+ - Administración de Bases de Datos
+tags:
+ - tablas mutantes
+ - Oracle
+ - PL/SQL
+---
+
+El enunciado a resolver y que contiene una tabla mutante es el siguiente:
+
+**6 - Realiza los módulos de programación necesarios para evitar que un catador puntue más de tres aspectos de una misma versión de un experimento.**
+
+En este caso, el trigger principal sería sobre la tabla puntuaciones, y dentro, para comprobar que se cumple la condición de que un catador no puntúa más de 3 aspectos, se tendría que hacer una consulta a la misma tabla puntuaciones, que en ese caso estaría mutando. Para resolver el problema vamos a realizar los siguientes pasos:
+
+1. Leer bien los requisitos del problema e identificar la
+información de la tabla que debo guardar en variables
+persistentes.
+2. Crear el paquete declarando los tipos de datos y las variables
+necesarias para guardar dicha información.
+3. Hacer un trigger before por sentencia que rellene dichas
+variables consultando la tabla mutante.
+4. Hacer un trigger before por fila que compruebe si el registro
+que se está manejando cumple la condición especificada
+consultando las variables persistentes.
+
+## Leer bien los requisitos del problema e identificar la información de la tabla que debo guardar en variables persistentes
+
+El contenido de la tabla de puntuaciones es el siguiente:
+
+![Tabla puntuaciones](https://i.imgur.com/wMxNzMj.png)
+
+En este caso, tendríamos que almacenar en variables persistentes los datos de la consulta, que en este caso son los siguientes campos:
+
+* NIFCatador
+* CodigoAspecto
+* CodigoExperimento
+* CodigoVersion
+
+## Crear el paquete declarando los tipos de datos y las variables necesarias para guardar dicha información
+
+```sql
+CREATE OR REPLACE PACKAGE ControlPuntuaciones
+AS
+TYPE tRegistroTablaPuntuaciones IS RECORD --defino el tipo de datos registro
+(
+NIFCatador Puntuaciones.NIFCatador%TYPE,
+CodigoAspecto Puntuaciones.CodigoAspecto%TYPE,
+CodigoExperimento Puntuaciones.CodigoExperimento%TYPE,
+CodigoVersion Puntuaciones.CodigoVersion%TYPE
+);
+
+TYPE tTablasPuntuaciones IS TABLE OF tRegistroTablaPuntuaciones -- defino el tipo de datos tabla
+INDEX BY BINARY_INTEGER;
+PuntuacionesCatador tTablasPuntuaciones;
+-- declaro una variable del tipo tabla antes creado
+END ControlPuntuaciones;
+/
+```
+
+## Hacer un trigger before por sentencia que rellene dichas variables consultando la tabla mutante
+
+```sql
+CREATE OR REPLACE TRIGGER RELLENARPUNTUACIONES
+BEFORE INSERT OR UPDATE ON Puntuaciones
+FOR EACH ROW
+DECLARE
+CURSOR c_puntuaciones IS SELECT NIFCatador,CodigoAspecto,CodigoExperimento,CodigoVersion
+FROM Puntuaciones;
+INDICE NUMBER:=0;
+indice_u number;
+BEGIN
+
+-- vacio el contenido de la tabla
+ControlPuntuaciones.PuntuacionesCatador.DELETE;
+-- relleno la tabla de puntuaciones los datos que me interesan
+FOR v_puntuacion IN c_puntuaciones LOOP
+ControlPuntuaciones.PuntuacionesCatador(INDICE).NIFCatador := v_puntuacion.NIFCatador;
+ControlPuntuaciones.PuntuacionesCatador(INDICE).CodigoAspecto := v_puntuacion.CodigoAspecto;
+ControlPuntuaciones.PuntuacionesCatador(INDICE).CodigoExperimento := v_puntuacion.CodigoExperimento;
+ControlPuntuaciones.PuntuacionesCatador(INDICE).CodigoVersion := v_puntuacion.CodigoVersion;
+INDICE := INDICE + 1;
+END LOOP;
+if inserting then
+indice_u := ControlPuntuaciones.PuntuacionesCatador.LAST + 1;
+ControlPuntuaciones.PuntuacionesCatador(indice_u).NIFCatador := :NEW.NIFCatador;
+ControlPuntuaciones.PuntuacionesCatador(indice_u).CodigoAspecto := :NEW.CodigoAspecto;
+ControlPuntuaciones.PuntuacionesCatador(indice_u).CodigoExperimento := :NEW.CodigoExperimento;
+ControlPuntuaciones.PuntuacionesCatador(indice_u).CodigoVersion := :NEW.CodigoVersion;
+end if;
+
+END RELLENARPUNTUACIONES;
+/
+```
+
+## Hacer un trigger before por fila que compruebe si el registro que se está manejando cumple la condición especificada consultando las variables persistentes
+
+```sql
+CREATE OR REPLACE TRIGGER ControlarPuntuaciones
+BEFORE INSERT OR UPDATE ON Puntuaciones
+FOR EACH ROW
+DECLARE
+BEGIN
+-- compruebo que el catador no haya puntuado más de 3 aspectos
+IF (NumeroPuntuacionesCatador(:NEW.NIFCatador,:NEW.CodigoExperimento,:NEW.CodigoVersion) > 3) THEN
+RAISE_APPLICATION_ERROR(-20001,'El catador no puede puntuar mas de 3 aspectos');
+end if;
+END;
+/
+```
+
+Voy a crear una funcion para comprobar el numero de puntuaciones que tiene un catador en una versión de un experimento:
+
+```sql
+CREATE OR REPLACE FUNCTION NumeroPuntuacionesCatador
+( p_NIFCatador Puntuaciones.NIFCatador%TYPE, p_CodigoExperimento Puntuaciones.CodigoExperimento%TYPE, p_CodigoVersion Puntuaciones.CodigoVersion%TYPE)
+RETURN NUMBER
+IS
+ v_NumeroPuntuaciones NUMBER:= 1;
+ v_cantidad NUMBER;
+BEGIN
+ for i in ControlPuntuaciones.PuntuacionesCatador.FIRST..ControlPuntuaciones.PuntuacionesCatador.LAST
+ LOOP
+ if (ControlPuntuaciones.PuntuacionesCatador(i).NIFCatador = p_NIFCatador) and (ControlPuntuaciones.PuntuacionesCatador(i).CodigoExperimento = p_CodigoExperimento) and (ControlPuntuaciones.PuntuacionesCatador(i).CodigoVersion = p_CodigoVersion) then
+ v_NumeroPuntuaciones := v_NumeroPuntuaciones + 1;
+ end if;
+ END LOOP;
+ return v_NumeroPuntuaciones;
+end;
+/
+
+--- prueba
+
+create or replace procedure prueba
+is
+numero number;
+begin
+numero:=NumeroPuntuacionesCatador('14425879A','A0003-A','0.0.2');
+dbms_output.put_line(numero);
+end;
+/
+insert into puntuaciones values('14425879A','0004','A0003-A','0.0.2',7.5);
+
+
+create or replace procedure imprimirtabla
+is
+begin
+ for i in ControlPuntuaciones.PuntuacionesCatador.FIRST..ControlPuntuaciones.PuntuacionesCatador.LAST
+ LOOP
+ dbms_output.put_line('Registro numero '|| i);
+ dbms_output.put_line('NIFCatador: '|| ControlPuntuaciones.PuntuacionesCatador(i).NIFCatador);
+ dbms_output.put_line('CodigoAspecto: '|| ControlPuntuaciones.PuntuacionesCatador(i).CodigoAspecto);
+ dbms_output.put_line('CodigoExperimento: '|| ControlPuntuaciones.PuntuacionesCatador(i).CodigoExperimento);
+ dbms_output.put_line('CodigoVersion: '|| ControlPuntuaciones.PuntuacionesCatador(i).CodigoVersion);
+
+
+ end loop;
+end;
+/
+```
+
+
+
+```sql
+insert into puntuaciones values('14425879A','0004','A0003-A','0.0.2',7.5);
+insert into puntuaciones values('14425879A','0005','A0003-A','0.0.2',7.5);
+insert into puntuaciones values('14425879A','0006','A0003-A','0.0.2',7.5);
+insert into puntuaciones values('14425879A','0007','A0003-A','0.0.2',7.5);
+select * from puntuaciones where nifcatador='14425879A' and codigoexperimento='A0003-A' and codigoversion='0.0.2';
+insert into puntuaciones values('14425879A','0005','A0003-A','0.0.1',7.5);
+```
\ No newline at end of file
diff --git a/content/post/journald/featured.png b/content/post/2023-01-15_journald/featured.png
similarity index 100%
rename from content/post/journald/featured.png
rename to content/post/2023-01-15_journald/featured.png
diff --git a/content/post/journald/index.md b/content/post/2023-01-15_journald/index.md
similarity index 100%
rename from content/post/journald/index.md
rename to content/post/2023-01-15_journald/index.md
diff --git a/content/post/despliegue_django/featured.png b/content/post/2023-01-23_despliegue_django/featured.png
similarity index 100%
rename from content/post/despliegue_django/featured.png
rename to content/post/2023-01-23_despliegue_django/featured.png
diff --git a/content/post/despliegue_django/index.md b/content/post/2023-01-23_despliegue_django/index.md
similarity index 100%
rename from content/post/despliegue_django/index.md
rename to content/post/2023-01-23_despliegue_django/index.md
diff --git a/content/post/despliegue_java/featured.png b/content/post/2023-01-24_despliegue_java/featured.png
similarity index 100%
rename from content/post/despliegue_java/featured.png
rename to content/post/2023-01-24_despliegue_java/featured.png
diff --git a/content/post/despliegue_java/index.md b/content/post/2023-01-24_despliegue_java/index.md
similarity index 100%
rename from content/post/despliegue_java/index.md
rename to content/post/2023-01-24_despliegue_java/index.md
diff --git a/content/post/introduccion_ldap/featured.png b/content/post/2023-01-25_introduccion_ldap/featured.png
similarity index 100%
rename from content/post/introduccion_ldap/featured.png
rename to content/post/2023-01-25_introduccion_ldap/featured.png
diff --git a/content/post/introduccion_ldap/index.md b/content/post/2023-01-25_introduccion_ldap/index.md
similarity index 100%
rename from content/post/introduccion_ldap/index.md
rename to content/post/2023-01-25_introduccion_ldap/index.md
diff --git a/content/post/vpn/featured.png b/content/post/2023-01-25_vpn/featured.png
similarity index 100%
rename from content/post/vpn/featured.png
rename to content/post/2023-01-25_vpn/featured.png
diff --git a/content/post/vpn/index.md b/content/post/2023-01-25_vpn/index.md
similarity index 100%
rename from content/post/vpn/index.md
rename to content/post/2023-01-25_vpn/index.md
diff --git a/content/post/vpn_wireguard/featured.png b/content/post/2023-01-26_vpn_wireguard/featured.png
similarity index 100%
rename from content/post/vpn_wireguard/featured.png
rename to content/post/2023-01-26_vpn_wireguard/featured.png
diff --git a/content/post/vpn_wireguard/index.md b/content/post/2023-01-26_vpn_wireguard/index.md
similarity index 100%
rename from content/post/vpn_wireguard/index.md
rename to content/post/2023-01-26_vpn_wireguard/index.md
diff --git a/content/post/integridad_firmas/featured.png b/content/post/2023-01-30_integridad_firmas/featured.png
similarity index 100%
rename from content/post/integridad_firmas/featured.png
rename to content/post/2023-01-30_integridad_firmas/featured.png
diff --git a/content/post/integridad_firmas/index.md b/content/post/2023-01-30_integridad_firmas/index.md
similarity index 100%
rename from content/post/integridad_firmas/index.md
rename to content/post/2023-01-30_integridad_firmas/index.md
diff --git a/content/post/servidor_correo/featured.png b/content/post/2023-02-07_servidor_correo/featured.png
similarity index 100%
rename from content/post/servidor_correo/featured.png
rename to content/post/2023-02-07_servidor_correo/featured.png
diff --git a/content/post/servidor_correo/index.md b/content/post/2023-02-07_servidor_correo/index.md
similarity index 100%
rename from content/post/servidor_correo/index.md
rename to content/post/2023-02-07_servidor_correo/index.md
diff --git a/content/post/informatica_forense/featured.png b/content/post/2023-02-08_informatica_forense/featured.png
similarity index 100%
rename from content/post/informatica_forense/featured.png
rename to content/post/2023-02-08_informatica_forense/featured.png
diff --git a/content/post/informatica_forense/index.md b/content/post/2023-02-08_informatica_forense/index.md
similarity index 100%
rename from content/post/informatica_forense/index.md
rename to content/post/2023-02-08_informatica_forense/index.md
diff --git a/content/post/cortafuegos1/featured.png b/content/post/2023-02-15_cortafuegos1/featured.png
similarity index 100%
rename from content/post/cortafuegos1/featured.png
rename to content/post/2023-02-15_cortafuegos1/featured.png
diff --git a/content/post/cortafuegos1/index.md b/content/post/2023-02-15_cortafuegos1/index.md
similarity index 100%
rename from content/post/cortafuegos1/index.md
rename to content/post/2023-02-15_cortafuegos1/index.md
diff --git a/content/post/cortafuegos2/featured.png b/content/post/2023-02-17_cortafuegos2/featured.png
similarity index 100%
rename from content/post/cortafuegos2/featured.png
rename to content/post/2023-02-17_cortafuegos2/featured.png
diff --git a/content/post/cortafuegos2/index.md b/content/post/2023-02-17_cortafuegos2/index.md
similarity index 100%
rename from content/post/cortafuegos2/index.md
rename to content/post/2023-02-17_cortafuegos2/index.md
diff --git a/content/post/auditoria/featured.png b/content/post/2023-02-21_auditoria/featured.png
similarity index 100%
rename from content/post/auditoria/featured.png
rename to content/post/2023-02-21_auditoria/featured.png
diff --git a/content/post/auditoria/index.md b/content/post/2023-02-21_auditoria/index.md
similarity index 100%
rename from content/post/auditoria/index.md
rename to content/post/2023-02-21_auditoria/index.md
diff --git a/content/post/LDAP_CSV/featured.png b/content/post/2023-02-22_LDAP_CSV/featured.png
similarity index 100%
rename from content/post/LDAP_CSV/featured.png
rename to content/post/2023-02-22_LDAP_CSV/featured.png
diff --git a/content/post/LDAP_CSV/index.md b/content/post/2023-02-22_LDAP_CSV/index.md
similarity index 100%
rename from content/post/LDAP_CSV/index.md
rename to content/post/2023-02-22_LDAP_CSV/index.md
diff --git a/content/post/cortafuegos3/featured.png b/content/post/2023-03-02_cortafuegos3/featured.png
similarity index 100%
rename from content/post/cortafuegos3/featured.png
rename to content/post/2023-03-02_cortafuegos3/featured.png
diff --git a/content/post/cortafuegos3/index.md b/content/post/2023-03-02_cortafuegos3/index.md
similarity index 100%
rename from content/post/cortafuegos3/index.md
rename to content/post/2023-03-02_cortafuegos3/index.md
diff --git a/content/post/copias_seguridad/featured.png b/content/post/2023-03-07_copias_seguridad/featured.png
similarity index 100%
rename from content/post/copias_seguridad/featured.png
rename to content/post/2023-03-07_copias_seguridad/featured.png
diff --git a/content/post/copias_seguridad/index.md b/content/post/2023-03-07_copias_seguridad/index.md
similarity index 100%
rename from content/post/copias_seguridad/index.md
rename to content/post/2023-03-07_copias_seguridad/index.md
diff --git a/content/post/despliegue-crossplane-eks/featured.png b/content/post/2023-06-01_despliegue-crossplane-eks/featured.png
similarity index 100%
rename from content/post/despliegue-crossplane-eks/featured.png
rename to content/post/2023-06-01_despliegue-crossplane-eks/featured.png
diff --git a/content/post/despliegue-crossplane-eks/featured.png:Zone.Identifier b/content/post/2023-06-01_despliegue-crossplane-eks/featured.png:Zone.Identifier
similarity index 100%
rename from content/post/despliegue-crossplane-eks/featured.png:Zone.Identifier
rename to content/post/2023-06-01_despliegue-crossplane-eks/featured.png:Zone.Identifier
diff --git a/content/post/despliegue-crossplane-eks/index.md b/content/post/2023-06-01_despliegue-crossplane-eks/index.md
similarity index 99%
rename from content/post/despliegue-crossplane-eks/index.md
rename to content/post/2023-06-01_despliegue-crossplane-eks/index.md
index 88448b5..24b499a 100644
--- a/content/post/despliegue-crossplane-eks/index.md
+++ b/content/post/2023-06-01_despliegue-crossplane-eks/index.md
@@ -28,7 +28,7 @@ También en la página de los proyectos integrados se pueden encontrar la docume
https://dit.gonzalonazareno.org/gestiona/proyectos/
-
+---
## Objetivos que se quieren conseguir
diff --git a/content/post/instalacion-gitea/cover.png b/content/post/2023-06-14_instalacion-gitea/cover.png
similarity index 100%
rename from content/post/instalacion-gitea/cover.png
rename to content/post/2023-06-14_instalacion-gitea/cover.png
diff --git a/content/post/instalacion-gitea/index.md b/content/post/2023-06-14_instalacion-gitea/index.md
similarity index 100%
rename from content/post/instalacion-gitea/index.md
rename to content/post/2023-06-14_instalacion-gitea/index.md
diff --git a/content/post/docker_implantacion_web/featured.png b/content/post/docker_implantacion_web/featured.png
deleted file mode 100644
index 4503893..0000000
Binary files a/content/post/docker_implantacion_web/featured.png and /dev/null differ
diff --git a/content/post/docker_implantacion_web/index.md b/content/post/docker_implantacion_web/index.md
deleted file mode 100644
index f4cf774..0000000
--- a/content/post/docker_implantacion_web/index.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: "Implantación de aplicaciones web PHP en docker"
-date: 2023-02-06T13:41:58+01:00
-draft: true
----
-
-
-Imaginemos que el equipo de desarrollo de nuestra empresa ha desarrollado una aplicación PHP que se llama BookMedik (https://github.com/evilnapsis/bookmedik).
-
-Queremos crear una imagen Docker para implantar dicha aplicación.
-
-
-## Tarea 1: Creación de una imagen docker con una aplicación web desde una imagen base
-
-```bash
-docker run -d --name bd_mariadb -v bookmedik_vol:/var/lib/mysql --network red_bookmedik -e MARIADB_ROOT_PASSWORD=root -e MARIADB_DATABASE=bookmedik -e MARIADB_USER=bookmedik -e MARIADB_PASSWORD=bookmedik mariadb
-
-```
-
-* Entrega la url del repositorio GitHub donde tengas los ficheros necesarios para hacer la construcción de la imagen.
-* Entrega una captura de pantalla donde se vea la imagen en el registro de tu entorno de desarrollo.
diff --git a/content/post/escenario_ansible/index.md b/content/post/escenario_ansible/index.md
deleted file mode 100644
index 6818f34..0000000
--- a/content/post/escenario_ansible/index.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: "Escenario ansible y vagrant"
-date: 2022-10-13T09:09:04+02:00
-draft: true
----
-Para hacer el `SNAT` aplicamos la siguiente regla de iptables:
-```bash
-sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o eth1 -j MASQUERADE
-sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth1 -j DNAT --to 10.0.0.0:80
-iptables -t nat -A PREROUTING -p tcp --dport 80 -i ens4 -j DNAT --to 10.0.0.2:80
-```
-
-```bash
-sudo ip route delete default
-sudo ip route add default via 192.168.0.1
-```
\ No newline at end of file
diff --git a/content/post/taller1/index.md b/content/post/taller1/index.md
index 7e3dc85..86c0c36 100644
--- a/content/post/taller1/index.md
+++ b/content/post/taller1/index.md
@@ -1,7 +1,7 @@
---
title: "Taller 1"
date: 2022-10-03T12:56:47+02:00
-draft: false
+draft: true
---
# Taller 1:Introducción a git y GitHub