#!/bin/sh
# La otra mitad del archivo del WordPress de cmox.es: el volcado de la base de
# datos y los 2 GB de subidas.
#
#   ssh ... 'sh -s' < despliegue/archivar-wp-cmox.sh
#
# Va aparte de `archivar-wp-cmox.php` porque son gigas y eso no se hace desde
# PHP: `mysqldump` y `tar` lo hacen en streaming, sin cargar nada en memoria.
#
# El CSV de aquel es lo que se va a leer dentro de diez anos. Esto de aqui es
# la copia fiel, la que permite volver a levantar el WordPress entero si un dia
# hiciera falta. Las dos cosas, porque no sirven para lo mismo: un volcado de
# MySQL solo vale si alguien monta otra vez WordPress con sus plugins.
#
# No borra ni modifica nada.
set -e

RAIZ=/homez.1008/arfrgig/www

# Se escribe en el archivo mas reciente que creo el PHP, para que las dos
# mitades acaben juntas y no en dos carpetas distintas.
DESTINO=$(ls -dt /homez.1008/arfrgig/archivo-wp-cmox-* 2>/dev/null | head -1)
[ -n "$DESTINO" ] || { echo "No hay carpeta de archivo. Pasa antes el .php"; exit 1; }
echo "destino: $DESTINO"

saca() {
  grep -oE "define\( *'$1', *'[^']*'" "$RAIZ/wp-config.php" | sed "s/.*, *'//;s/'$//"
}

CNF=$(mktemp); chmod 600 "$CNF"
trap 'rm -f "$CNF"' EXIT
printf '[client]\nuser=%s\npassword=%s\nhost=%s\n' \
  "$(saca DB_USER)" "$(saca DB_PASSWORD)" "$(saca DB_HOST)" > "$CNF"

echo "1. Volcando la base de datos..."
# --no-tablespaces: la cuenta de la aplicacion no tiene el privilegio PROCESS
# --ni debe tenerlo-- y sin esta opcion mysqldump escupe un «Access denied» que
# NO es un fallo: el volcado sale entero igual.
mysqldump --defaults-extra-file="$CNF" --single-transaction --no-tablespaces \
  --default-character-set=utf8mb4 "$(saca DB_NAME)" | gzip > "$DESTINO/base-de-datos.sql.gz"
echo "   $(du -h "$DESTINO/base-de-datos.sql.gz" | cut -f1)"

echo "2. Empaquetando las subidas (2 GB, tarda)..."
# Sin comprimir a proposito: son JPG, PNG y WEBP, que ya estan comprimidos.
# Gzip sobre eso gasta minutos de CPU para ahorrar un 2 %.
tar -cf "$DESTINO/uploads.tar" -C "$RAIZ/wp-content" uploads
echo "   $(du -h "$DESTINO/uploads.tar" | cut -f1)"

echo "3. Y la configuracion, que lleva las claves de la base de datos."
cp "$RAIZ/wp-config.php" "$DESTINO/wp-config.php.txt"
chmod 600 "$DESTINO/wp-config.php.txt"

echo ""
echo "ARCHIVO COMPLETO en $DESTINO"
ls -la "$DESTINO" | awk 'NR>3 {printf "   %8s  %s\n", $5, $9}'
echo ""
echo "total: $(du -sh "$DESTINO" | cut -f1)"
