Odroid-U3 es un ordenador de placa reducida tipo Raspberry Pi pero bastante más potente. Fabricado por Hardkernel cuenta con un Samsung Exynos 4412 Prime Cortex-A9 Quad Core 1.7Ghz, el mismo que monta el Samsung Galaxy S3. A esto se le suman 2 GB de memoria RAM, conector HDMI 1080p, Ethernet RJ-45 10/100 Mbit, entrada y salida de audio, 3 puertos USB, puertos GPIO, UART y SPI, y unas cuantas cosas más que os dejo que consultéis en su página web oficial. Lo que a nosotros nos importa es que tiene una CPU basada en ARM bastante potente y es compatible con cualquier distribución Linux (¡también Android 4.x!).

Apenas ocupa lo mismo que una tarjeta de crédito y su consumo es realmente bajo. Al correr sobre Linux, podemos instalar Node.js, MySQL, MongoDB (soporte ARM muy alpha), FTP, Samba y un sin fin de servicios que hacen de este Micro PC el servidor casero perfecto.
Más información sobre Odroid-U3 en su página oficial.
Sobre Gentoo
¿Porqué Gentoo para un servidor web? Muy sencillo: siempre lo he utilizado y siempre me ha gustado. Amo portage y emerge. Además, más vale lo bueno conocido... (era así, ¿no?).
Ni que decir queda que si os gusta el Odroid-U3, podéis instalar Ubuntu o lo que queráis.
Instalando Gentoo en el Odroid-U3
Necesitaremos un ordenador con Linux para instalar Gentoo en Odroid (sirve una distribución Live CD, en nuestro caso utilizamos Ubuntu).
Algunos comandos necesitan permisos de administrador, entra como root o utiliza sudo.
Por si acaso alguien se da cuenta, algunos comandos o ficheros hacen referencia al Odroid-U2. No pasa nada, sirven para el U3 también y son oficiales.
Lo primero de todo, vamos a crear una carpeta donde trabajaremos:
Descargando lo necesario
Descargamos el bootloader (podemos compilarlo nosotros mismos pero como no cambia nada usaremos uno compilado):
Descargamos mediante elinks o cualquier otro navegador el último stage 3 ARM de la siguiente dirección:
También un snapshot de Portage:
Instalamos las herramientas de u-boot para poder utilizar mkimage
y así crear el archivo boot.scr
. Podemos hacerlo mediante Ubuntu o Gentoo:
Preparando la tarjeta de memoria
Recordad cambiar /dev/sdX
por la ruta donde se encuentre vuestra tarjeta de memoria.
Formateamos nuestra tarjeta eMMC:
Descomprimimos e instalamos el bootloader:
Usaremos dos tablas de particiones, una para el kernel y la otra para rootfs. La primera es FAT32 y la segunda ext4 sin journaling y con noatime como opciones de montaje. Las creamos utilizando fdisk
:
Si no entendéis el significado de esto podéis consultar la documentación de fdisk, pero básicamente crea 2 particiones: una FAT32 de 64 MB para el kernel y otra ext4 con el resto del espacio disponible. Algo importante es dejar 3072 bytes libres antes de la primera partición, ya que este espacio lo ocupa el bootloader.
Ejecutamos el siguiente comando para que el kernel lea la nueva tabla de particiones (si tu sistema no posee dicho comando, lo encontrarás en el paquete parted
):
Recuerda que ahora tenemos /dev/sdX1
y /dev/sdX2
que debemos sustituir por nuestras particiones.
Damos formato a las particiones, cambiamos el UUID de nuestra partición rootfs y desactivamos el journaling para liberar algo de carga a la tarjeta:
Instalando el sistema base
Comenzamos montando las particiones:
Instalamos el stage 3 en nuestro rootfs:
Y después la snapshot de Portage:
Opción 1: Instalando el kernel precompilado (recomendado)
Descargamos, descomprimimos y movemos los archivos. En la carpeta boot debería haber dos ficheros tras descomprimir:
Opción 2: Compilando el kernel (para expertos)
Para compilar el kernel tenemos que instalar las toolchain para poder compilar código para ARM desde nuestra arquitectura x86:
Clonamos las fuentes del kernel:
Preparamos la compilación:
Pasamos a compilar (el número 4 es el número de núcleos de tu procesador):
Lo último es instalar el kernel y los módulos:
Creando el boot script
Si ya elegiste el kernel precompilado o lo compilaste tú mismo, el siguiente paso antes de darle vida a nuestro servidor es crear un necesario script de arranque. Lo mostramos en bloques distintos para que copies y pegues los comandos más fácilmente.
En el siguiente comando, tal vez necesites añadir sudo al comando tee (sudo tee boot.txt
), depende de si eres administrador o no. Todo el bloque en sí es el mismo comando, así que puedes copiar y pegar todo de golpe (por si no conoces la sintaxis heredoc).
Por norma general nuestra tarjeta eMMC será llamada /dev/mmcblk0p2
una vez arranque el sistema, pero si insertamos una tarjeta SD esto puede ocasionar problemas en el arranque debido al orden. En cuyo caso tendréis que volver a compilar la imagen boot.scr
y copiarla de nuevo a la tarjeta eMMC, cambiando el valor anterior por /dev/mmcblk1p2
(posiblemente, puede variar). Yo usaré una tarjeta SD desde el principio por lo tanto ya he cambiado la variable root a /dev/mmcblk1p2
.
Compilamos nuestro script y volvemos atrás:
Quien avisa no es traidor (¿opcional?)
Los primeros intentos de arranque fueron un completo dolor de cabeza ya que algunas cosas no funcionaban como esperaba y tenía que volver a conectar la tarjeta eMMC al ordenador una y otra vez para solucionarlas desde Linux. Voy a detallarlas para ahorraros tiempo, total, no hacen daño a nadie.
La contraseña de root
Yo no sabía la contraseña de root, no se vosotros. Así que esto podemos solucionarlo ahora mismo. Editamos el fichero shadow
y veremos que hay una cadena parecida a esta:
Tenemos que editarla y eliminar el segundo "parámetro" que corresponde a la contraseña, para que quede algo así:
Cuando arranquemos nuestro Odroid la próxima vez, usaremos passwd
para generar una nueva contraseña.
El servicio SSH
Aseguraos de que el servicio SSH va a funcionar al arrancar, sobre todo si no vais a conectar un teclado/pantalla. Debería existir un enlace en rootfs/etc/runlevels/default
. Si no, lo creáis:
La conexión de red
En nuestro caso utilizamos IP estática para conectar con el router, por lo que no tendremos conexión hasta que editemos el fichero net.eth0
con lo siguiente:
¡Acordaos de cambiar los datos por los vuestros! También hay que crear el script de inicio para eth0, que por defecto no suele existir:
Si usáis DHCP o Wi-Fi, ya sabéis que debéis usar otra configuración.
Y esos son los briconsejos de hoy.
Arrancando Odroid-U3 por primera vez
Salimos y nos preparamos para iniciar el sistema:
Arrancamos el Odroid y si todo ha ido bien pasamos al siguiente capítulo.
Configurando Gentoo en el Odroid-U3
Ahora es el momento de configurar el sistema base, algo que a pesar de que está en el magnífico handbook de Gentoo, haré referencia aquí.
Configuración básica
Editamos el fichero make.conf
con nuestras opciones. A modo de ejemplo y sin que sirva de precedente, comparto el mío (lo único que no debéis cambiar son las cuatro primeras variables):
Sincronizamos emerge y actualizamos si fuera necesario:
Editamos el fichero fstab
. En nuestro caso utilizamos una tarjeta SD a modo de almacenamiento extra, por lo que nuestra tarjeta SD está en /dev/mmcblk0p1
y nuestro rootfs se encuentra en /dev/mmcblk1p1
(si no utilizáis tarjeta SD tenéis que adaptar las líneas):
A continuación montamos la partición del kernel (así podremos actualizarlo en el futuro):
Configuración extendida
Los siguientes pasos son opcionales, puedes saltarte los comandos que quieras o pedir más información abajo en los comentarios. Estos son algunos de los que he usado y los comparto para facilitarlos la configuración:
Todo un éxito
Ya está, ya tenemos instalado nuestro servidor web con nginx, Node.js, PHP y MySQL funcionando. Todo en el tamaño de una tarjeta de crédito y con un consumo ridículo. Espero que os animéis y montéis un servidor casero de este tipo para desarrollo web porque merece mucho la pena todo lo que facilita el trabajo y todas las ventajas que supone tener el servidor web separado de nuestro ordenador. Más seguro y fiable.
Agradecimientos a mdrjr de la comunidad Odroid por su gran ayuda y sus grandes aportes a la comunidad.