Chuletillas (y XXXXV) – Integrar comandos MySQL en un shell script

chuletaExisten diversas formas de integrar comandos de MySQL dentro de un shell script de linux. La más cómoda, creo, es utilizar el parámetro -e del cliente en línea de myql. Por ejemplo, así:

#!/bin/sh
# comandos bash...
mysql -u usuario -p -e "CREATE DATABASE ejemplo;"
#comandos bash...

Lo que pasa es que así puesto sirve de bien poco porque nos va a pedir el password de forma interactiva. Para evitarlo podemos poner la password en el propio archivo del script. No es un método elegante ni especialmente seguro, pero en entornos poco críticos sirve perfectamente:

#!/bin/sh
PASSWORD=mipassword
# comandos bash...
mysql -u usuario --password=$PASSWORD -e "CREATE DATABASE ejemplo;"
#comandos bash...

Por último, si tenemos que ejecutar varios comandos, lo más cómodo es escribirlos uno a continuación de otro en un archivo independiente (con extensión sql por claridad) y ejecutarlos usando el comando source de mysql:

#!/bin/sh
PASSWORD=mipassword
# comandos bash...
mysql -u usuario --password=$PASSWORD -e "source /opt/sripts/imysql/importar_databases.sql"
#comandos bash...
NOTA: Todo lo dicho aquí sirve igualmente para MariaDB

Chuletillas (y XXXXIV) – Liberar espacio en un servidor FTP lleno

chuleta ¿Te has quedado sin espacio alguna vez en un servidor FTP? Si te ha pasado te habrás llevado la sorpresa de que no puedes eliminar ningún archivo para liberar espacio porque si el servidor FTP está completamente lleno no es posible. Si, si, parece de broma pero así es:

mdelete *.tar.gz
550 Could not mdelete *.tar.gz: No space left on device

La solución es sencilla, pero hay que saberla 😉 . Basta con enviar al servidor FTP un fichero vacío con 0 bytes con el mismo nombre que uno de los que queremos eliminar para liberar espacio. La operación de sustitución si se llevará a cabo correctamente y a partir de ahí tendremos ya espacio para hacer un borrado convencional.

Chuletillas (y XXXXIII) – Extraer el audio a un vídeo usando ffmpeg o mencoder

chuleta Extraer el audio de un vídeo es otra de esas tareas que realizo de vez en cuando y que siempre tengo que buscar para recordar. Aquí queda la chuletilla de rigor para quién le sirva:

ffmpeg -i video_origen.avi -ab 128000 -ar 44100 audio_destino.mp3

Los dos argumentos usados (-ab y -ar) definen el audio bit rate (Tasa de bits) en bits por segundo y el audio sampling rate (Tasa de muestreo) en Herzios respectivamente y son los que van a definir la calidad del audio (y el tamaño del archivo) de salida. Ten en cuenta que si usas valores más altos de los que trae el audio del vídeo original ffmpeg lo que hará será interpolar los datos necesarios y puede que obtengamos peor calidad que en el original. No se puede sacar de donde no hay, que dice el refran 😉 El comando es válido con cualquier formato origen y/o destino cuyos codecs reconozca nuestro sistema: mkv, avi, mp4, mp3, ogg, wav, etc.

Y si prefieres usar mencoder tienes este otro comando que hace lo mismo:

mencoder video_origen.avi -of rawaudio -oac mp3lame -ovc copy -o audio_destino.mp3
NOTA: El segundo comando está sacado de Commandline Fu, un recurso inestimable para todos aquellos que apreciamos las virtudes de la línea de comandos.

Chuletillas (y XXXXII) – Eliminar paquetes huérfanos y dependencias no utilizadas en Archlinux y derivadas

chuleta Hace ya años que sólo uso Archlinux o derivadas en mis equipos de escritorio, ya sean estos portátiles o equipos de sobremesa. Empecé con la propia Archlinux para luego pasar a Chakra y, por último, a Manjaro que es actualmente mi favorita.
El siguiente comando nos permite eliminar todos los paquetes huérfanos y dependencias no utilizadas de forma equivalente a como haríamos en una Debian o derivada con apt-get autoremove:

pacman -Rcns $(pacman -Qdtq)

La segunda parte del comando (pacman -Qdtq) es la que realiza el listado de dependencias inútiles mientras que la primera (pacman -Rcns) las recibe y elimina después de mostrárnos la lista en pantalla y pedirnos confirmación.

NOTA: Por aquí dejé hace algún tiempo una chuleta con los primeros pasos a dar con pacman y ccr que sigue siendo válida. ccr es el gestor de paquetes realizados por la comunidad de usuarios (no oficiales, por tanto) de Chakra. En Archlinux y Manjaro se usa yaourt en lugar de ccr pero el funcionamiento de ambas es bastante similar.

Chuletillas (y XXXXI) – Instalar Vmware Player en Manjaro (u otro derivado de ArchLinux)

chuletaHace unos meses contamos por aquí la forma de instalar Virtualbox en Manjaro, Archlinux o cualquier otra distribución derivada de esta. Hoy contaremos lo mismo para Vmware Player, su competencia mas directa.

Antes de empezar, lo primero que te sueles plantear cuando vas a trabajar con virtualización de Vmware es si necesitas usar la versión Worstation o te vale con el Player Plus. Hace unos años la versión Player ni siquiera permitía crear máquinas virtuales y había que recurrir para ello a servicios web (como el que ofrecían en easyvmx.com, ya desaparecido) o a crear los ficheros vmx a mano mediante un editor de texto (lo cual era en realidad bastante fácil si disponías de una plantilla base para hacerlo). Ahora la versión Player Plus ya permite crear máquinas virtuales sin ningún tipo de problemas y, aunque las diferencias con la versión workstation siguen siendo bien grandes, en la mayoría de las situaciones podemos pasar sin ellas. Y ya sabes que Player Plus es gratuita para uso doméstico, no comercial y actividades académicas mientras que la versión workstation sólo dispone de una evaluación gratuita que expira a los 30 días.

Vamos ahora ya a la instalación. Las dependencias previas que deberías de tener instaladas son fuse, gtkmm y linux-headers. Opcionalmente también podrías querer instalar el paquete open-vm-tools.

sudo pacman -S fuse gtkmm linux-headers open-vm-tools

El paso siguiente sería descargar el paquete de instalación desde esta página (correspondiente a la versión 6, la última disponible en el momento de escribir esto) adecuado para la arquitectura que estés usando (32 o 64 bits). Una vez descargado ejecutamos el instalador:

sudo sh VMware-Player-6.0.3-1895310.x86_64.bundle

Al principio de la instalación se nos preguntará en algún momento el directorio donde se guardan los scripts mediante los que se inician y detienen los servicios del sistema (system service scripts directory). Las distribuciones basadas en Archlinux usan systemd y por tanto el directorio /etc/init.d no existe, pero si lo creas antes de arrancar la instalación del vmware player esta advertencia no te aparecerá.

system service scripts directory error durante la instalación de vmware player en una derivada de Archlinux

Si olvidaste hacerlo basta con que escribas este path en la ventana que aparece y listo. Aún así nos aparecerá una nueva advertencia acerca de esto al finalizar la instalación (“No rc*.d style init script directories were given to the installer”). La ignoramos y listos.

La configuración final es bastante complicada. Afortunadamente la comunidad de usuarios de Archlinux ha preparado un paquete que la realiza de forma automática. Para instalarlo y ejecutarlo basta con esto:

yaourt -S vmware-patch

Recuerda que cada vez que actualices el kernel tendrás que volver a ejecutar este parche pero ya no hace falta que vuelvas a descargarlo:

sudo vmware-patch

Si prefieres hacer esta configuración a mano basta con que sigas las detalladas instrucciones que aparecen en la wiki de ArchLinux.

NOTA: Para desinstalar vmware player plus es necesario conservar el instalador (o volver a descargarlo) y ejecutar lo siguiente:

sudo sh VMware-Player-6.0.3-1895310.x86_64.bundle --uninstall-product vmware-player

Chuletillas (y XXXX) – Cortar un fragmento de un vídeo con ffmpeg

chuleta Si quieres extraer una secuencia o fragmento de un vídeo, dividirlo en trozos, etc. sin pérdida alguna de calidad y conservando el mismo formato del original, tanto de audio como de imagen, puedes hacerlo de forma sencilla con ffmpeg y desde línea de comando con la siguiente instrucción:

ffmpeg -i video_original.avi -vcodec copy -acodec copy -ss 00:30:00 -t 00:30:40 fragmento.avi

Con el anterior comando, extraemos a un archivo llamado fragmento.avi 40 segundos de vídeo a partir del minuto 30 del original que se llama video_original.avi

Chuletillas (y XXXIX) – Instalar VirtualBox en Manjaro (u otro derivado de ArchLinux)

chuleta Los derivados de ArchLinux (Manjaro, Chakra, etc.) suelen ser bastante más fáciles de manejar que la distribución matriz, pero aún así no es nada anormal que la instalación de ciertos paquetes sea ligeramente más dificultosa de lo que estamos acostumbrados en un Linux de escritorio y que requieran de nosotros alguna que otra intervención manual más allá de un simple pacman -S. Virtualbox es uno de estos casos y, aunque todas las posibles situaciones están perfectamente explicadas en esta página de la wiki de ArchLinux, vamos a dejar aquí una chuleta que debería de funcionar en la gran mayoría de los casos.

  • Los paquetes a instalar son virtualbox, dkms, virtualbox-host-dkms, virtualbox-guest-iso, net-tools y linux-headers.
    sudo pacman -S virtualbox virtualbox-host-dkms virtualbox-guest-iso linux-headers dkms net-tools
  • Puede que el procedimiento de instalación compile los módulos necesarios o puede que no. Si no lo hace se nos mostrará un error advirtiéndonos de ello la primera vez que tratemos de ejecutar cualquier máquina virtual. El procedimiento manual para compilar los módulos consiste en ejecutar lo siguiente:
    sudo dkms install vboxhost/4.3.10

    Donde tendremos que sustituir 4.3.10 por la versión de virtualbox que hayamos instalado. Cada vez que nuestra versión del kernel y/o de virtualbox cambien tendremos que repetir el comando anterior. Una alternativa a esto es habilitar como servicio en el arranque el daemon de dkms:

    sudo systemctl enable dkms
  • Puede que se haya configurado la carga de los módulos correspondientes de forma automática durante el arranque. Si es así, debería de haberse creado un archivo dentro del directorio /etc/modules-load.d (en mi caso se llama linux310-virtualbox-host-modules.conf) con el siguiente contenido:
    vboxdrv
    vboxnetadp
    vboxnetflt
    vboxpci

    Si no se ha creado podemos hacerlo nosotros mismos. También podemos borrar ese archivo (o no crearlo) y cargar manualmente los módulos cuando lo necesitemos mediante el comando modprobe:

    sudo modprobe vboxdrv vboxnetadp vboxnetflt vboxpci
  • Deberías de añadir los usuarios que van a usar virtualbox al grupo vboxusers. El siguiente comando añadiría al usuario josemaria a este grupo:
    sudo gpasswd -a josemaria vboxusers
  • No olvides que para habilitar ciertas funcionalidades extras deberás de instalar adicionalmente el Extension Pack que puedes descargar desde aquí y que es gratuito para evaluación y/o uso personal.

Chuletillas (y XXXVIII) – Cambiar la resolución de un vídeo con ffmpeg

chuleta Y otra chuletilla más sobre formatos de vídeo. Si quieres cambiar de tamaño un archivo de vídeo (por ejemplo de FullHD 1280×720 a HD 1080×608) con ffmpeg y desde línea de comando, basta con ejecutar esto:

ffmpeg -i input.avi -filter:v scale=1080:-1 -acodec copy output.avi

Se llevará su ratito (entre una y cuatro horas dependiendo del procesador que tengas, claro) pero al final el resultado es impecable. Además, si así lo deseas, puedes cambiar el formato del vídeo de salida simplemente cambiando la extensión (por ejemplo, output.mkv te dará un archivo de salida en ese formato).

El valor -1 que acompaña a la escala horizontal le indica a ffmpeg que calcule el número de píxeles de la vertical para que el vídeo mantenga la proporcionalidad adecuada. Si queremos especificarlo manualmente o romper la proporcionalidad para crear un vídeo anamófico usamos este otro formato:

ffmpeg -i input.avi -filter:v scale=1080x500 -acodec copy output.avi

Y una nota: he tenido problemas cuando uso estos comandos con un vídeo en formato .mkv con pistas de subtítulos. El vídeo y el audio no presentan problemas pero las pistas de subtítulos no se codifican correctamente en el vídeo final. La solución más rápida y sencilla que he encontrado es usar mkvmerge (una utilidad gráfica para manipular las pistas de un archivo mkv) de la siguiente forma: antes de reescalar extraigo las pistas de subtítulos y las borro del original; a continuación ejecuto el comando anterior para realizar el reescalado y, por último, vuelvo a usar mkvmerge para reintegrar los subtítulos en el vídeo final. Son apenas 5 minutos mas que no se notan frente al total del proceso.

ACTUALIZACIÓN: Y otro método más:

ffmpeg -i input.avi -filter:v scale=720:-1 -c:a copy output.avi

Chuletillas (y XXXVII) – Aumentar el tamaño de los discos VDI en VirtualBox

chuleta¿Te has quedado corto en el disco duro de esa máquina virtual que usas para evaluar las aplicaciones de Windows Server y ahora no te llega para instalar la última barbaridad de Giga y pico que ha lanzado Microsoft? Si usas VirtualBox puedes aumentar el tamaño de tus discos duros en formato VDI en segundos con un sencillo comando. Por ejemplo, si queremos que el disco duro que se guarda en el archivo w2008r2.vdi pase a tener 25 GBytes, escribimos lo siguiente:

VBoxManage modifyhd w2008r2.vdi --resize 25600

Este comando sólo sirve para aumentar el tamaño de los discos y no para reducirlos (aunque el mensaje de error que nos da hace suponer que se implementará en una versión futura). Además, la máquina debe de estar apagada y debes que tener en cuenta que estamos modificando el tamaño del disco pero no el de la partición que usa tu máquina virtual. El espacio adicional aparecerá como espacio libre a continuación de la partición o particiones que estés usando. Si vas a crear nuevas particiones para usar ese espacio no tendrás ninguna complicación. Pero si lo que quieres es aumentar el tamaño de alguna de las ya existentes y el sistema operativo que contiene la máquina no puede extenderlas en caliente (como hace el windows 2008 que tomamos como ejemplo), tendrás luego que arrancar la máquina con algún sistema externo y realizar estas operaciones (cualquier Live de Linux te proporcionará una herramienta válida para esto como, por ejemplo, gparted)

Chuletillas (y XXXVI) – Rotar vídeos con mencoder o con ffmpeg

chuleta Y otra receta simplota de comandos útiles para hacer modificaciones sencillas a un vídeo. Cuando queremos rotar un vídeo (ya sabéis, aquello de que habéis cogido la cámara en vertical y ahora cada vez que queréis ver al niño hacer sus monerías cogéis tortícolis) podemos usar mencoder. El comando base es el siguiente:

mencoder -vf rotate=1 -oac copy -ovc lavc original.avi -o resultado.avi

El tipo de rotación se selecciona con el argumento -vf rotate=1. El anterior gira el vídeo 90 grados en el sentido de las agujas del reloj, mientras que si lo sustituimos por -vf rotate=2 lo hará en sentido antihorario. Mediante el argumento -oac copy definimos como se trasladará el audio del vídeo y con -ovc lavc especificamos el tipo de codec que usaremos en el vídeo final. Podemos ver las opciones disponibles que tenemos en nuestro sistema mediante el siguiente comando:

mencoder -oac help -ovc help

El argumento -vf, que es el que nos permite realizar transformaciones sobre el vídeo, tiene muchas otras opciones disponibles que también podemos consultar ejecutando:

mencoder -vf help

La opción copy siempre está disponible pero no funcionará con el argumento -ovc (¡si copiamos el original no rotamos!) y algunas de las opciones disponibles puede que nos obliguen a especificar parámetros adicionales (bitrate, fixed_quant, pass, etc.).

Por último, original.avi es el nombre del vídeo a rotar y con el argumento -o resultado.avi definimos como se llamará el vídeo resultante.

Si prefieres usar ffmpeg puedes hacerlo así:

ffmpeg -i original.avi -vf "transpose=1" resultado.avi

El valor del parámetro transpose indica el tipo de transformación, siendo 1 una rotación de 90 grados en el sentido de las agujas del reloj. El valor 2 giraría 90 grados en sentido contrario.

ACTUALIZACIÓN: Otras dos transformaciones interesantes en esta misma línea que podemos aplicar mediante el argumento -vf son mirror y flip. Si queremos girar el vídeo 180 grados podemos aplicarlas ambas de modo conjunto (-vf mirror,flip).