Archive for the 'Tutorial' Category

[Tutorial] Emular Raspbian en MacOS Sierra utilizando Qemu

Aunque soy un fanático de Apple, el Raspberry Pi siempre ha tenido un lugar especial en mi corazón principalmente por la posibilidad de realizar proyectos de demótica doméstica, servidores de medios, NAS caseros, etc.

En ocasiones puede ser necesario disponer de una emulación de la Raspberry Pi en nuestro Mac para poder probar programas, scripts, etc sin necesidad de encender dicho dispositivo.

Mi primera intención fue virtualizarlo utilizando VirtualBox, sin embargo dicho software no funciona con sistemas operativos basados en ARM como por ejemplo Raspbian.

Por lo tanto fue necesario buscar otra opción cuya única alternativa es utilizar un emulador. En internet es posible encontrar numerosas guías de cómo emular Raspbian en MacOS, pero varias de ellas tenían errores y me costó bastante lograr el objetivo.

Por esta razón, creí necesario publicar cómo logre emular Raspian en MacOS exitosamente utilizando para ello el software Qemu.

1. Descargar e instalar Homebrew y Qemu

Algunas guías indican que es necesario tener instalado Xcode para poder instalar Qemu, sin embrago este es un requerimiento innecesario. Basta instalar Homebrew tras lo cual podremos instalar Qemu sin necesidad de instalar Xcode, y por lo demás Homebrew nos permitirá instalar muchas otras cosas que Apple no nos entrega en MacOS, que pueden ser interesantes para quienes gustan de usar el Terminal y que veremos más adelante. Además, si no eres desarrollador de aplicaciones para iOS o MacOS, no volverás a utilizar Xcode nunca más y sólo ocupará espacio en disco.

Lo primero es abrir un ventana de Terminal, y escribir el siguiente comando el cual permitirá la instalación de Homebrew

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Una vez instalado Hombre podremos instalar Qemu, escribiendo el siguiente comando

brew install qemu

Con esto ya tendremos instalado Qemu, listo para poder emular Raspbian en nuestro Mac

2. Descargar Raspbian y el Kernel para emularlo en Qemu

En este punto encontré varios problemas, algunas guías no eran lo suficientemente claras, o asumían que quien estaba instalando Qemu para emular Raspbian tenían un conocimiento avanzado, y otros eran demasiado antiguos los cuales si bien funcionaban corrían versiones antiguas de Raspbian, o ejecutaban comandos “deprecados” que hacían que la emulación “crasheara”. Encontré incluso algunos scripts sh que me ayudaron a entender qué errores estaba cometiendo porque justamente tenían errores.

Para emular Raspbian en Qemu es necesario 2 archivos. Primero una versión de Raspbian y segundo un kernel el cual permite que Raspbian corra emulado dentro de Qemu. Sin embargo, el kernel es específico para cada versión de Raspbian. La última versión de Raspbian disponible en el sitio de la Raspberry Pi Foundation es Raspbian Jessie 2017-02-27. La última versión del kernel para Rapbian en Quemu es compatible con Rsapbian Jessie 2016-11-25, por lo tanto es necesario descargar esa versión específica para tener éxito en su emulación.

El kernel para correr Raspbian en Qemu no e mantenido por Raspberry Pi Foundation ni por Qemu, sino por un usuario de Github llamado dhruvvyas90.

Los links para la descarga de ambos son los siguientes

https://github.com/dhruvvyas90/qemu-rpi-kernel/raw/master/kernel-qemu-4.4.34-jessie

http://downloads.raspberrypi.org/raspbian/images/raspbian-2016-11-29/2016-11-25-raspbian-jessie.zip

Es recomendable descargar ambos archivos en una carpeta creada específicamente para dicho efecto. En mi caso los descargué en ~/Mis Programas/Raspberry Pi/

Personalmente, cuando estoy usando el Terminal, prefiero utilizar comandos de Terminal, y por lo tanto obviamente la creación de las carpetas y descarga de dichos archivos también lo hice en el Terminal

cd ~
mkdir Mis\ Programas
mkdir Mis\ Programas/Raspberry\ Pi

Para la descarga de los archivos fue necesario instalar un programa que existe en Linux pero que MacOS no no entrega que es wget, pero gracias a Hombres es tremendamente fácil de instalar

brew install wget

Ahora solo basta descargar los archivos utilizando los siguientes comandos

wget https://github.com/dhruvvyas90/qemu-rpi-kernel/raw/master/kernel-qemu-4.4.34-jessie

wget http://downloads.raspberrypi.org/raspbian/images/raspbian-2016-11-29/2016-11-25-raspbian-jessie.zip

Una vez descargados los archivos tenemos que descomprimir el archivo zip que contiene a Raspbian con el siguiente comando

unzip 2016-11-25-raspbian-jessie.zip

Esto generará el archivo 2016-11-25-raspbian-jessie.img el cual utilizaremos para emular Raspbian utilizando Qemu.

3. Configurar y emular Raspbian en MacOS Sierra utilizando Qemu

Finalente, ya tenemos todo lo necesario para emular Raspbian en MacOS Sierra utilizando Qemu. Ahora solo tenemos que configurar la emulación para que corra adecuadamente en nuestro Mac, lo cual requiere un primer booteo, luego la modificación de algunos archivos del sistema dentro de la emulación, para que todo quede correctamente configurado y después poder bootear Raspbian todas las veces que necesitemos.

3.1 Primer booteo

Es necesario hacer un primer booteo tras el cual tendremos que hacer algunas modificaciones a un par de archivos estando dentro de la emulación en Qemu. Para esto utilizaremos el siguiente comando

qemu-system-arm -kernel kernel-qemu-4.4.34-jessie -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 elevator=deadline rw init=/bin/bash" -drive "file=2016-11-25-raspbian-jessie.img,index=0,media=disk,format=raw"

Esto iniciará Raspbian y después de menos de un minuto veremos la consola Shell en la ventana en que se está emulando Raspbian

3.2 Modificación de los archivos ./etc/ld.so.preload y ./etc/fstab

Ahora, dentro de la ventana de Qemu en que se está emulando Raspbian, es necesario modificar un par de archivos. Se trata de los archivos ./etc/ld.so.preload y ./etc/fstab.

En el caso de ./etc/ld.so.preload es necesario “comentar” cada una de sus lineas y en el caso de ./etc/fstab es necesario “comentar” todas las entradas que contengan el texto “/dev/mmcblk”. Para “comentar” las lineas basta con insertar el texto “# ” al principio de cada una de las líneas.

Los comandos para realizar esto son

nano /etc/ld.so.preload
nano /etc/fstab

Recordemos que para salir y grabar los cambios en el editor de textos Nano, es necesario presionar las teclas Ctrl-X y luego Y para confirmar que los cambios sean grabados.

3.3 Segundo booteo

Ahora realizaremos el segundo booteo de Raspbian con lo cual el emulador después de un par de minutos nos mostrará el entorno gráfico de Raspbian. Más adelante veremos cómo se modifica la configuración para bootear sin cargar el entorno gráfico, ya que esto es más adecuado para proyectos de demótica doméstica o de internet de las cosas.

qemu-system-arm -kernel kernel-qemu-4.4.34-jessie -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 elevator=deadline rw" -drive "file=2016-11-25-raspbian-jessie.img,index=0,media=disk,format=raw" -net user,hostfwd=tcp::5022-:22

Este es el comando que tendremos que utilizar de ahora en adelante cada vez que deseemos correr nuestra emulación de Raspbian en MacOS Sierra, ya que las modificaciones a los archivos realizadas en el paso anterior son permanentes.

Debido a que es muy fácil cometer un error cuando se escribe un comando demasiado largo con demasiadas opciones, preferí transformarlo en un script sh, el cual me permite ejecutar la emulación con un comando más sencillo. Abrí un archivo nuevo utilizando el editor nano, copié el texto siguiente y luego guardé el archivo con el nombre “qemu-raspbian.sh” en la misma carpeta donde están los archivos de imagen de Raspbian y el kernel.

# Define variables
export QEMU=$(which qemu-system-arm)
export RPI_KERNEL=./kernel-qemu-4.4.34-jessie
export RPI_FS=./2016-11-25-raspbian-jessie.img

# Emulate Raspberry Pi
$QEMU -kernel $RPI_KERNEL \
-cpu arm1176 -m 256 \
-M versatilepb -no-reboot -serial stdio \
-append "root=/dev/sda2 panic=1 rootfstype=ext4 elevator=deadline rw" \
-drive "file=$RPI_FS,index=0,media=disk,format=raw" \
-net user,hostfwd=tcp::5022-:22

De esta manera cada vez que quiero emular Raspbian en MacOS con Qemu utilizo el siguiente comando en Terminal

sh qemu-raspbian.sh

Además esto permite que cada vez que aparezca una nueva versión de kernel, basta que modifique la variable asociada al nombre de kernel dentro del script sh.

Por cierto, al emular Raspbian no es posible acceder a la utilización del conector GPIO ya que es un entorno emulado, no es un Raspberry Pi real, pero sirve al menos para probar scripts, programas, compilaciones, etc, cuando no tenemos a mano nuestra Raspberry Pi o simplemente cuando no queremos malograr todo lo que ya hemos hecho con una linea de código mal escrita.

Espero que este tutorial sea de ayuda para quienes como yo, gustan de realizar proyectos con la Raspberry Pi, y en la medida que vayan apareciendo nuevas versiones tanto de Raspbian como del kernel, la iré actualizando. Saludos.

Links:

[Tutorial] Cómo arreglar el funcionamiento del widget de Clima del Dashboard en macOS 10.12 Sierra

Hace un par de días me di cuenta que el widget de Clima del Dashboard dejó de funcionar en mi MacBook Pro Mid 2012 con macOS 10.12 Sierra. Probablemente esto ocurrió hace bastante tiempo pero no me había dado cuenta. Dicho widget no solo no mostraba la información del clima, sino que al intentar cambiar la ciudad, no encontraba ninguna coincidencia.

Extrañamente, el widget de Clima que se puede agregar al Notification Center, funciona a la perfección, y aunque podría prescindir del widget de Clima del Dashboard y utilizar el del Notification Center, soy un usuario de Mac de hace bastante tiempo y ya estoy demasiado acostumbrado a utilizar el widget del Dashboard.

Busqué una solución durante muchas horas, y finalmente en los foros de Apple Support, y foros de MacRumors encontré la respuesta, aunque es algo compleja y requiere del uso del Modo de Recuperación y del Terminal.

El funcionamiento del widget de Clima recae en un archivo localizado en /System/ Library/WidgetResources/.parsers/ llamado weatherParser.js, el cual no ha sido actualizado por Apple siguiendo nuevas directrices de uso de Yahoo Weather.

Un desarrollador llamado Gonzalo Rodrigo encontró la solución y la publicó en GitHub, y creí que era necesario publicarlo paso a paso para que quien quiera solucionarlo no pierda todo el tiempo que yo perdí, ya que por cierto cometí algunos errores cuando lo intenté.

¡¡ADVERTENCIA!!:

La desactivación del Control de Integridad puede romper la instalación de macOS si no eres pulcro y haces exactamente lo que indica el tutorial. De todas maneras si sigues las instrucciones de este tutorial, lo haces bajo tu PROPIO RIESGO.

Paso 1: Reiniciar en Modo de Recuperación y desactivar el Control de Integridad

Lo primero que debemos hacer es desactivar el Control de Integridad, puesto que si se mantiene activado no podremos modificar el archivo en cuestión. Para esto es necesario reiniciar en Modo de Recuperación lo cual se logra manteniendo presionadas las teclas Cmd-R hasta que escuchemos el clásico sonido de inicio del Mac, el mismo que hace wall-E en la película de Pixar.

Una vez iniciado el Modo de recuperación, abrimos la aplicación Terminal para lo cual vamos al menú y seleccionamos Utilidades – Terminal. Con el Terminal abierto, desactivamos el Control de Integridad con el siguiente comando

csrutil disable

Finalmente reiniciamos, para lo cual podemos escribir reboot en la misma ventana de Terminal.

Paso 2: Copiar el archivo weatherParser.js en /System/Library/WidgetResources/.parsers/

Una vez que nuestro Mac se ha reiniciado en Modo Normal, abrimos una ventana de Terminal y procedemos a copiar el archivo weatherParser.js que descargamos al directorio /System/Library/WidgetResources/.parsers/ utilizando el siguiente comando de Terminal. En el ejemplo yo tengo dicho archivo en un subdirectorio del directorio Descargas.

sudo cp ~/Downloads/osxcalendarwidget-master/weatherParser.js /System/Library/WidgetResources/.parsers/

El sistema nos pedirá que ingresemos nuestra clave de administrador, y listo. Ahora basta ir al Dashboard y presionar Cmd-R en nuestro teclado para que el widget de Clima vuelva a funcionar correctamente.

Es importante copiar el archivo utilizando el Terminal puesto que en mi caso inicialmente lo copié utilizando el entorno gráfico del Finder moviendo el archivo de una carpeta a otra, con el consiguiente problema que el widget seguía sin funcionar, y no volvió a funcionar sino hasta que hice la copia del archivo a través del Terminal.

Finalmente, es necesario volver a reiniciar el Mac en Modo Recuperación para volver a activar el Control de Integridad con el comando

csrutil enable

Reiniciamos en Modo Normal, ya todo habrá vuelto a la normalidad y habremos desactivado la posibilidad de malograr el sistema operativo de nuestro Mac ante cualquier descuido de nuestra parte en alguna otra ocasión.

Links:

[Tutorial] Cómo solucionar problemas de conectividad WiFi en tu Mac

Hace unos días realicé algunos cambios en la organización de la red de AirPorts que tengo la cual me permite tener una cobertura WiFi completa en todos los rincones de la casa. Vivo en una casa de 2 pisos, antigua con paredes muy gruesas y por esta razón, un solo AirPort no es suficiente para que toda la casa quede “iluminada”.

Este cambio implicó dejar el Time Capsule en modo puente conectado a un AirPort Extreme el cual funciona como router principal. Previamente el Time Capsule funcionaba como router principal, y el AirPort Extreme extendía la red Wifi para darle conexión a la impresora HP LaserJet CM1415fn que tenemos en casa, pero extrañamente el Time Capsule, a pesar que también es un router, cada cierto tiempo presentaba intermitencias de conectividad, una velocidad de transferencia más lenta, etc.

El cambio provocó que algunos MacBook Pro de la familia tuvieran problemas de conectividad WiFi, los cuales a pesar de seguir todos los pasos de la página de soporte de Apple, no se solucionaron.

Afortunadamente internet está lleno de casos de personas que ya han tenido un problema similar al tuyo cuya información permite solucionarlo, solución que encontré en DescubreApple.

Antes de aplicar la solución es importante verificar que tengan instalada la última versión de MacOS, en mi caso MacOS Sierra 10.12.2, y también asegurarse que la estación AirPort (si es que tienen una) también tenga instalada la última actualización, que en mi caso es 7.6.8.

La solución es un tanto radical y consiste en borrar los archivos de Preferencia de WiFi, reiniciar el ordenador y de esta forma forzar a que el sistema los vuelva a generar al detectar que están ausentes.

Para esto en el Finder buscamos nuestro disco duro, navegamos a la carpeta Biblioteca – Preferences – SystemConfiguration y borramos los siguientes archivos

  • com.apple.airport.preferences.plist
  • com.apple.wifi.message-tracer.plist
  • NetworkInterfaces.plist
  • preferences.plist

Antes de borrarlos es recomendable crear una copia de seguridad de ellos, como por ejemplo, copiarlos al Escritorio, de tal forma de poder restablecerlos si por alguna razón el sistema de genera en forma automática dichos archivos.

Una vez borrados, reiniciamos el ordenador, y ya debiera ser posible conectarnos vía WiFi a nuestra red o a cualquiera que deseemos.

Si por alguna razón no logran encontrar la carpeta antes mencionada, en el Finder basta con ir al menú superior y seleccionar Ir – Ordenador o utilizar el atajo de teclado Mayus-Command-C, luego de lo cual visualizarán el disco duro de su Mac el cual habitualmente se llama Macintosh HD en el cual encontrarán la carpeta Biblioteca y las subcarpetas antes mencionadas.

Links: