Chuletillas (y XXXXVII) – Instalar un programa de debian Stretch mientras que usas debian stable (Jessie)

chuletaSi quieres instalar un determinado programa (y sus dependencias obligatorias) incluido en la próxima versión de Debian (Stretch) mientras continuas usando la versión stable (Jessie) puedes hacerlo de la siguiente forma:

En primer lugar edita tu fichero sources.list (en el directorio /etc/apt) e incluye al final las direcciones de los repositorios de Stretch pero sin eliminar ni modificar los que ya usas de Jessie. Por ejemplo así:

# Repositorios de Jessie
deb http://http.debian.net/debian/ jessie main contrib non-free
deb-src http://http.debian.net/debian/ jessie main contrib non-free
deb http://security.debian.org/ jessie/updates main contrib non-free
deb-src http://security.debian.org/ jessie/updates main contrib non-free

# Updates de Jessie, antes conocidos como 'volatile'
deb http://http.debian.net/debian/ jessie-updates main contrib non-free
deb-src http://http.debian.net/debian/ jessie-updates main contrib non-free

# Backports de Jessie
deb http://http.debian.net/debian jessie-backports main contrib non-free

#Repositorios de Stretch
deb http://http.debian.net/debian/ stretch main contrib non-free
deb-src http://http.debian.net/debian/ stretch main contrib non-free
deb http://security.debian.org/ stretch/updates main contrib non-free
deb-src http://security.debian.org/ stretch/updates main contrib non-free

# Updates de Stretch
deb http://http.debian.net/debian/ stretch-updates main contrib non-free
deb-src http://http.debian.net/debian/ stretch-updates main contrib non-free

A continuación creamos un fichero llamado stretch en el directorio /etc/apt/preferences.d y escribimos en el lo siguiente:

Package: *
Pin: release n=jessie
Pin-Priority: 900

Package: *
Pin: release n=stretch
Pin-Priority: 100

Con esto estamos modificando la prioridad con la que Debian actualizará nuestros paquetes. Por defecto instala siempre la versión más moderna de todas las que tenga disponibles en sus repositorios. Con este fichero le dará preferencia a cualquier paquete de jessie frente a uno de stretch aunque tenga una versión menor. Es decir, mantendremos nuestro sistema con las versiones de jessie salvo que un paquete no exista en esta y si en stretch… O se lo indiquemos manualmente durante la instalación que es lo que vamos a ver a continuación. Si quieres maś información sobre la forma de establecer preferencia para apt puedes echarle un vistazo a esta página.

Y ya lo tenemos todo listo. Ahora, tenemos que actualizar nuestros repositorios (apt update) y cuando queramos instalar un paquete directamente de stretch lo especificamos manualmente en el comando apt. Por ejemplo, si quisiéramos instalar la versión de apache de stretch lo haríamos así:

apt-get install -t stretch apache2

Chuletillas (y XXXXVI) – Solventar el error de wordpress que lo deja bloqueado en modo de mantenimiento

chuleta Si trabajas habitualmente con wordpress te habrá pasado montones de veces. Tras actualizar un plugin, un tema o el propio wordpress la instancia web se queda “eternamente” mostrando un mensaje como el que sigue a pesar de que debería (y lo ha hecho) haber concluido ya la actualización en cuestión.

Briefly unavailable for scheduled maintenance. Check back in a minute.

En esos casos recurres a buscar en google un blog (como este) donde te cuentan la solución o le pides a algún amigo (que hará o habrá hecho lo mismo en alguna ocasión) que te lo solucione. En el peor de los casos le pagas a alguien para que te solucione el problema o recurres a la empresa que te lleva el mantenimiento.

La solución es muy sencilla. wordpress “detecta” que debe de mostrar el mensaje de mantenimiento porque en el directorio raiz de la instancia web existe un archivo llamado .maintenance En algunas ocasiones el borrado de ese fichero falla una vez concluida la actualización y wordpress se queda ahí encallado. Para solucionarlo basta con borrar manualmente ese fichero desde el panel web que usemos para acceder a nuestro servidor (si somos novatos) o desde la consola si nos manejamos un poco mejor. Fácil, eh?

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