Cambiar contraseña de usuario de WordPress por línea de comandos

A veces, o tal vez regularmente, me ocurre que olvido la contraseña del usuario de WordPress de un sitio web, ya sea porque no la añado al gestor de contraseñas o en el momento invento una tan complicada que solo la recuerdo los días siguientes y luego la olvido para siempre. Ante esta situación siempre termino conectándome al servidor, luego a MariaDB/MySQL y luego cambio la contraseña insertando un hash al campo de contraseña del usuario al que quiero acceder.

Lo primero será conectarnos como usuario a MariaDB/MySQL, ya sea usando el todopoderoso usuario root o el mismo usuario de la base de datos que queremos editar.

# mysql -u root -p

Ahora seleccionamos la base de datos que queremos emplear y listamos las tablas, ya que en la instalación se puede emplear un prefijo diferente. De no haber hecho esto, la tabla en cuestión será wp_users

mysql> SHOW DATABASES;
mysql> USE basededatoswp;
mysql> SHOW TABLES;

Ahora buscamos el ID del usuario que deseamos cambiar:

mysql> SELECT ID, user_login, user_pass FROM wp_users;
+----+----------------------------+------------------------------------+
| ID | user_login                 | user_pass                          |
+----+----------------------------+------------------------------------+
|  1 | administrador              | $P$BdrP021yzdWQCN4Bm0u0jIESEq4Owr/ |
|  2 | usuario1                   | $P$B05MBOShAJwRrK4kSmbaEhk1WPWQ4O0 |
+----+----------------------------+------------------------------------+

Ahora actualizaremos la contraseña nueva

mysql> UPDATE wp_users SET user_pass = MD5('contraseña') WHERE ID = 1;

Existe una sintaxis alternativa, donde solo necesitamos conocer el nombre de usuario; sin embargo, no he logrado que esta actualice la contraseña a pesar que su sintaxis es correcta

mysql> UPDATE wp_users SET user_pass = MD5('contraseña') WHERE 'user_login' = 'administrador';

Podremos verificar así

mysql> SELECT ID, user_login, user_pass FROM wp_users;
+----+----------------------------+------------------------------------+
| ID | user_login                 | user_pass                          |
+----+----------------------------+------------------------------------+
|  1 | administrador              | 890bec3121ae0e73d2a22e3dd333ae5f   |
|  2 | usuario1                   | $P$B05MBOShAJwRrK4kSmbaEhk1WPWQ4O0 |
+----+----------------------------+------------------------------------+

Como se ve, el nuevo hash de la contraseña del usuario esta en formato MD5. Ahora podremos ingresar vía wp-login.php al tablero de WordPress. Una vez ingresemos, WordPress actualizará el hash una vez más en su mezcla propia de MD5 y PHPass.

Convertir videos a formatos compatibles con HTML5

Muchas veces me he encontrado en la situación de necesitar colocar un video en un sitio web y no contar con el mismo en un formato adecuado. Afortunadamente en cualquier distro GNU/Linux contamos con la navaja Suiza de la multimedia, ffmpeg.

En este artículo de MDN encontramos una revisión muy completa sobre este tema y cuáles son los contenedores compatibles con HTML5, se reducen a 3. El formato MP4, que aunque propietario es el más difundido y soportado; el WEBM, completamente libre menos conocido; y el OGG también libre pero menos utilizado.

Sobre el contenedor MP4, tampoco es cualquiera, tiene que tener los streams en códecs específicos. El vídeo debe estar en H.264 baseline profile ya que le exige menos capacidad de procesamiento a la máquina del usuario. Un vídeo en H.264 High profile probablemente también podrá ser visualizado, pero en un dispositivo con baja capacidad de procesamiento, un teléfono de gama baja o incluso una laptop con un procesador atom por ejemplo podrán empezar a visualizarlo y luego de algunos minutos no podrán continuar la reproducción del vídeo o se ralentizará el dispositivo. El audio debe estar en formato AAC. También alguno navegadores soportan que el audio este en MP3, pero no son todos.

En esta tabla se resume los formatos de video compatibles con HTML5.

Contenedor (video codec / audio codec)ChromeFirefox (Gecko)Internet ExplorerOperaSafari
WebM (VP8 / vorbis)6.04.09.010.63.1
WebM (VP9 / theora)29.028.0??
OGG (Theora / vorbis)3.5Sin soporte10.50Sin soporte
MP4 (H.264 / AAC)9.0
MP4 (H.264 / MP3)9.03.1

Para convertir un vídeo a MP4 con H.264 baseline tomando como base un MP4 con video H.264 en otro perfil y optimizado para reproducir vía web.

$ ffmpeg -i input-mp4-highprofile.mp4 -movflags faststart -vcodec libx264 -vprofile baseline -crf 18 -acodec copy output-mp4-baselineprofile.mp4

Para convertir un video a WEBM tomando como base un video MP4 (aunque puede ser cualquier tipo).

$ ffmpeg -i input.mp4 -vcodec libvpx -crf 10 -b:v 0 -acodec libvorbis -threads 4 output.webm

La velocidad de encoding es extremadamente lenta, entre 8-10 frames por segundo.

VirtualBox en modo headless

Es altamente común que se utilicen máquinas virtuales para el desarrollo de software, regularmente uso VirtualBox desde el entorno gráfico en Arch Linux para hacer estas cosas, pero muchas veces solo necesito que este corriendo una distro con ciertos servicios sin necesidad de usar entorno gráfico alguno y aquí es donde entra el modo headless. Para esto tenemos la aplicación VBoxManage.

# Listar máquinas virtuales
$ VBoxManage list vms
"experiment-1" {fdb95c20-45c8-4811-8ee6-3fabdd5bd969}
"mysql" {31355c2b-ec28-4392-929e-094b288aa002}
"mongodb" {4934f61c-b007-44b0-b730-a450e885a616}

# Arrancar máquina virtual en modo headless
$ VBoxManage startvm experiment-1 --type headless

# Apagar máquina virtual
$ VBoxManage controlvm experiment-1 poweroff