Solución al error E_FAIL(0x80004005) de Virtual Box

Hoy me encontraba con un problema con VirtualBox, en un equipo no me arrancaba ninguna máquina. Daba igual que fuera una máquina importada desde otro ordenador que que se tratara de una máquina creada desde 0. Al ejecutarla saltaba el error E_FAIL(0x80004005) . Intenté ojear los logs para ver si veía algo claro, pero el tamaño del mismo no lo hacía muy práctico ¿por qué fallaba? Pues no tengo ni idea. ¿Solución? Encontré varias:

Encontré un blog donde se afirma que se arregla desmontando la unidad de cd, pero no me funcionó tras hacerlo.

Encontré otro enlace donde decían que bastaba con ir a C:\Users\COMPUTER_NAME\.VirtualBox\Machines\VM_NAME y allí buscar el archivo VM_NAME.xml-prev para editar su nombre y quitarle el sufijo -prev. Lo probé pero tampoco funcionó.

Finalmente este vídeo me trajo la solución: en lugar de pulsar en la flecha inicio para arrancar la máquina hay que darle al botón que tiene al lado para desplegar el menú y allí elegir Inicio Desacoplable.

¿Por qué funcionó esta y el resto no? Bueno, a estas alturas no conozco todavía la causa del error, pero mirando con detenimiento el mensaje de error veo que en la solución que me funcionó el fallo era en el componente Machine Wrap. Asumo que el código de error puede ser el mismo para diversos componentes y que cada uno tiene una solución. Fíjate en el ejemplo que viene en el blog donde recomiendan desmontar la unidad de cd, podrás ver que el componente que falla simplemente es descrito como Machine mientras que en el que implica modificar el nombre del fichero de configuración xml el fallo era en el componente VirtualBox. Por tanto no hay una única solución a este error, todo depende de qué componente sea el afectado.

Usando el comando find para encontrar varias extensiones de archivo en Linux

Vamos con una entradilla sobre comandos en Linux para celebrar que hoy Microsoft se ha unido a la Linux Foundation. Sabemos que con el comando find seguido de una cadena de caracteres podemos encontrar todos los ficheros con esa extensión dentro de un directorio, veamos cómo sería la sintaxis más simplificada:

# find *.zip

La instrucción de arriba nos mostraría todos los ficheros cuyo nombre termine en .zip que estén situados en la carpeta en la que nos encontremos.

Ok, ¿y si quiero buscar varias extensiones?. Veamos ¿cómo sería el comando para buscar tanto los zip como los txt?

# find . -type f \( -name "*.zip" -o -name "*.txt" \)

Aquí ya tenemos una sintaxis un pelín más compleja, expliquemos paso a paso todo:

El . indica que queremos buscar en el directorio actual. Con -type f decimos que queremos buscar por tipo de fichero y que queremos archivos simples, no carpetas u ocultos. Entre paréntesis metemos la condición de lo que queremos buscar: con el -name indicamos que queremos buscar un patrón, que lo definimos a continuación entre comillas (el “*.zip” y el “*.txt”, que vendrían a decir que queremos todo lo que acabe en esas extensiones) y el -o nos serviría como un operador lógico or. Si te fijas antes de cada paréntesis se ha introducido el carácter de escape \ para evitar posibles problemas de sintaxis.

Es decir, toda la clave es usar el -o para añadir más condiciones a la función de búsqueda, pudiendo así definir varios patrones.

Cerrar un terminal en Linux sin matar el proceso en ejecución

La idea es clara: ejecutamos un comando en segundo plano y queremos cerrar el terminal pero no matar el proceso ¿cómo lo hacemos?

Pongamos un ejemplo: queremos ejecutar rsync para copiar un volumen grande de ficheros de una carpeta a otra y queremos luego poder cerrar el terminal sin que se corte el proceso.

Lo primero es lanzar en segundo plano el rsync, para ello lo ejecutaremos añadiendo la instrucción & al final, que lo envía directamente a segundo plano (también se podría hacer con el comando bg, pero con & es más directo)

$ sudo rsync home/music/* usr/otro/home/music/ &

Y vamos con lo siguiente ¿cómo disociamos este proceso del terminal para poder cerrarlo? Pues basta con ejecutar disown

$ disown

Este comando básicamente lo que hace es impedir que el terminal envíe una orden de finalización al proceso cuando se cierra.

Otra opción es utilizar nohup, que ya lo ejecutaría disociado del terminal:

$ sudo nohup rsync home/music/* usr/otro/home/music/ &

Añadiendo una capa extra de seguridad al login de PHPMyAdmin

He visto este artículo en Tecmint esta semana y he pensado que no estaría de más comentarlo por aquí, por aquello de que muchos de los que llegáis a este blog es porque buscáis una solución que no esté en inglés sino en castellano.

En fin, la idea es poner protección con contraseña a la propia página de login de PHPMyAdmin, esto nos obliga a poner dos contraseñas para entrar en lugar de una. Puede paracer paranoico, pero recuerda que es el corazón y el cerebro de vuestro servidor web. Como es habitual nos centraremos en la versión para Debian/Ubuntu. Los ejemplos los copio y pego del artículo original.

Bueno, lo primero es añadir estas líneas al fichero /etc/apache2/sites-available/000-default.conf

<Directory /usr/share/phpmyadmin>
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>

Lo siguiente será usar htpasswd para generar un fichero de contraseña para una cuenta que tendrá el acceso autorizado a la página de login. Usaremos el parámetro -c para que cree la cuente o, en caso de que exista, se la cargue y genere una nueva. En el ejemplo usan tecmint como  usuario, así que copio tal cual:

# htpasswd -c /etc/apache2/.htpasswd tecmint

Tras eso nos pedirá que insertemos la nueva contraseña dos veces. El siguiente paso nos lleva  a modificar los permisos sobre el fichero para que ningún usuario indeseado pueda leerlo:

# chmod 640 /etc/apache2/.htpasswd
# chgrp www-data /etc/apache2/.htpasswd

De esta forma si intentamos acceder a nuestro PHPMyAdmin nos encontraremos con lo comentado: nos pide una contraseña para poder acceder al login, donde tendremos que meter otra para entrar. Como recomendación, para que esto sea útil no uséis el mismo usuario y contraseña para las dos.

Copiar ficheros a una carpeta propiedad de root en el entorno gráfico de Ubuntu o Elementary OS

El título es largo, sí, pero era lo que quería intentar en mi equipo: copiar unos ficheros de la carpeta Home a la carpeta /usr/share/games. Ok, podría hacerlo por línea de comandos, pero entonces no estaría escribiendo aquí. ¿Se puede hacer desde el entorno gráfico? Pues sí. Pulsas Alt+F2 para abrir el lanzador y allí tecleas gksu nautilus. Tan simple como eso, lanzas gksu nautilus, te pedirá contraseña, y tras insertarla ya puedes crear, mover o borrar ficheros de ahí en el entorno gráfico. Como siempre en estos casos hazlo con precaución, no borres lo que no debes.

Crear un código QR para que el móvil conecte directamente a una wifi.

código qr

Supongamos que tienes un local con WIFI, o que a tu casa suelen ir invitados y les dejas conectarse a tu red. En esos casos puede resultar un poco coñazo andar diciéndoles la contraseña cada dos por tres, sobre todo si como yo eres de los que usan una contraseña fuerte. De hecho el otro día me comentaba el dueño de un bar que estaba harto de repetir la contraseña de 19 dígitos de su establecimiento. Una solución rápida es imprimir un código QR que la persona pueda enfocar con su cámara y leer y que le conecte a la wifi automáticamente.

 

Tanto la web Zxing como qr4 nos ofrecen unas herramientas que generarán este código QR. Tenemos que pasarle el SSID de la red, la contraseña y el tipo de encriptación, y nos devolverán un código que pueda ser escaneado por cualquier app gratuita para leer códigos QR.

Lo he testeado con Android, pero no os puedo garantizar si en Windows o iOS funciona correctamente.

Recuperando datos en Ubuntu con foremost

Una potente herramienta en línea de comandos para recuperar ficheros desde distintos sistemas: NTFS, fat, ext3, ext4, etc. Así podemos describir en una frase a foremost.

El primer paso con este software sería instalarlo mediante vía de comandos, por ejemplo mediante apt:

sudo apt-get install foremost

Una vez instalado nos toca proceder. Un punto a tener en cuenta es que no podemos recuperar los datos en el mismo dispositivo del que los estamos intentando recuperar, así que lo mejor será crear una carpeta en otro disco duro para volcar lo recuperado. Vamos a suponer, para nuestro ejemplo, que recuperamos datos de un USB llamado sdb y los guardaremos en el disco duro del equipo, que será el sda. En sda crearemos una carpeta que se llamará recuperado. Veamos ejemplos:

#El comando más básico es así:
sudo foremost -i /dev/sdb -o /sda/recuperado
#Tras el -i ponemos el dispositivo a recuperar.
#Tras el -o ponemos el destino de los archivos.
#Es posible recuperar datos también desde una imagen
#de disco.
#### Veamos más opciones ####
sudo foremost -w -i /dev/sdb -o /sda/recuperado
#Esta no recupera ficheros
#sino que extrae un listado de
#todo lo recuperable.
sudo foremost -t pdf -i /dev/sdb -o /sda/recuperado
#El parámetro -t permite
#definir un tipo de fichero
#y sólo recuperará los de ese tipo,
#en el ejmplo le pasamos pdf.

Como os decía arriba en los ejemplos, se puede recuperar sólo ficheros de un tipo concreto con -t. El listado de formatos de archivo recuperables es el siguiente: avi, bmp, cpp, doc, exe, gif, htm, jpg, mov, mpg, ole, pdf, png, rar, riff, wav, wmv o zip.