lunes, 22 de junio de 2009

Installing OpenBSD on Eee PC 1000H

Fig 1. ASUS EEE PC 1000H

Hoy quise instalar OpenBSD 4.5 en el Asus para verificar que el reconocimiento de las interfaces de red si se habia hecho en esta versión. Aquí está un recuento rápido del procedimiento:

1. ¿Donde instalarlo?

Lo primero era pensar en donde instalar el sistema operativo?, si usaba una partición, o usaba todo el disco duro o ...
recordé que tenia una micro SD de 2GB disponibles, entonces decidí montarlo allí.

Fig 2. micro/mini SD de 2GB (1826MB exactly)

2. ¿Cómo lo instalo?

Recordé que mi ASUS no tiene unidad de CDROM entonces solo quedaba la alternativa de instalarlo por disco o por red, entonces mejor opte por instalarlo por red. Para esto necesitaba un servidor DHCP y un servidor TFTP corriendo en algún lado. Mi maquina Desktop es un iMAC, cual podría ser el problema al tratar de instalar estos servicios ahí?, go ahead!

3. Instalando el servicio DHCP en el iMAC

Como ya todos saben, el iMAC tiene un sistema operativo llamado Leopard (por debajo Darwin) que no es un Linux ni un BSD, es una mezcla de BSD y mach.

#uname -a
Darwin Kernel Version 9.5.0: Wed Sep 3 11:29:43 PDT 2008; root:xnu-1228.7.58~1/RELEASE_I386 i386


Estos iMAC son x86 así que no hay problema por la compatibilidad de paquetes o cosas así.

Lo que hice fue descargar el tarball del dhcp del sitio oficial ISC:

ftp://ftp.isc.org/isc/dhcp/dhcp-4.1.0.tar.gz

Desde estas fuentes compilé el software:

bash-3.2# pwd
/Users/nonroot/dhcp-4.1.0
bash-3.2# ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
checking whether make sets $(MAKE)... yes
checking for gcc... gcc
...
bash-3.2# make
Making all in includes
make all-am
make[2]: Nothing to be done for `all-am'.
Making all in tests
make[1]: Nothing to be done for `all'.
...
Una vez compilado y como es algo temporal no lo voy a instalar en el sistema, sino que lo voy a usar del directorio compilado:

bash-3.2# pwd
/Users/nonroot/dhcp-4.1.0/server
bash-3.2# ./dhcpd
Internet Systems Consortium DHCP Server 4.1.0
Copyright 2004-2008 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/
Can't open /etc/dhcpd.conf: No such file or directory
...
Me sale un error relacionado con el archivo de configuración, entonces le digo a mi madre que por favor me dicte las líneas del archivo de configuración que no me acuerdo (fake):

option domain-name-servers 192.168.0.100; ddns-update-style ad-hoc; subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.150 192.168.0.200; filename "pxeboot"; next-server 192.168.0.4; default-lease-time 300000; max-lease-time 350000; option routers 192.168.0.100; }
Estas líneas las almaceno en el archivo /etc/dhcpd.conf, en este punto es importante recordar que la variable next-server debe apuntar a la maquina donde estoy instalando el servidor dhcp y que tendrá tambien el servidor tftp.

Una vez creado el archivo puedo ejecutar el binario:

bash-3.2# pwd
/Users/nonroot/dhcp-4.1.0/server
bash-3.2# ./dhcpd
Al parecer saca un error, pero comprobamos que este corriendo:

bash-3.2# ps aux | grep -i dhcpd
root 8475 0.0 0.1 77832 768 ?? Ss 5:59PM 0:00.02 ./dhcpd
...
4. Instalando el servicio TFTP en el iMAC

Uhmm como hacemos?, toca buscar un poco en Internet y me encuentro lo siguiente:

http://www.macosxhints.com/article.php?story=20070218233806794

Allí explican muy bien, dicen que Leopard no usa el famoso inetd sino un demonio llamado launchd, este demonio carga configuraciones en xml que se encuentran en la ruta de servicios del S.O.:

bash-3.2# ls /System/Library/LaunchDaemons/ | more
bootps.plist
com.apple.AOSHelper.plist
com.apple.ATSServer.plist
com.apple.AppleFileServer.plist
com.apple.CoreRAID.plist
com.apple.DirectoryServices.plist
com.apple.DirectoryServicesLocal.plist
...
Entonces seguimos los pasos que allí nos indican:

Subimos el servicio:
bash-3.2# launchctl load -w /System/Library/LaunchDaemons/tftp.plist
Bajamos el servicio:
bash-3.2# launchctl unload -w /System/Library/LaunchDaemons/tftp.plist

El directorio raiz para el TFTP esta en:

bash-3.2# pwd
/private/tftpboot
bash-3.2#
Donde obviamente al principio no hay nada, entonces debemos entrar al ftp de OpenBSD y descargar 2 archivos:

ftp://ftp.openbsd.org.ar/pub/OpenBSD/4.5/i386/pxeboot
ftp://ftp.openbsd.org.ar/pub/OpenBSD/4.5/i386/bsd.rd

Estos dos archivos son suficientes para arrancar el sistema de instalación.
Una vez descargados los dos archivos los copio al directorio /private/tftpboot y como el archivo pxeboot buscará un archivo llamado bsd, entonces renombro el archivo bsd.rd a bsd.

bash-3.2# pwd /private/tftpboot bash-3.2# mv bsd.rd bsd
Listo, cargo nuevamente el servicio tftp y ahora configuro el ASUS para que arranque por red.

5. Arranque por red del ASUS

Entro con la opción F2 a la BIOS del sistema y busco la sección Boot, una vez allí habilito la opción "OnBoard LAN Boot ROM" y en la prioridad de boot dejo como primera opción:
"Network:Atheros Boot Agent". Aún queda faltando una cosa, debemos grabar los cambios y entrar con Shift+F10, una vez en la pantalla de boot de Atheros, debemos configurar dos campos:

Network Boot Protocol = PXE
Boot Order = Int 19H (que significa que primero intente el arranque por red y luego por el disco)

Una vez realizado estos cambios podemos reiniciar el sistema y esperar a que cargue el asistente de instalación de OpenBSD.

Fig 3. Arranque por PXE desde el ASUS

6. Instalación de OpenBSD 4.5


Seguimos el proceso tradicional de instalación de OpenBSD y cuando nos pregunte por el disco raiz en donde se va a instalar el sistema, seleccionamos sd0, OpenBSD reconoce la microSD como dispositivo sd0. Cuidado con seleccionar el wd0 porque puede borrar el disco duro (Ojo, esto es en mi 1000H, verifique su versión de asus porque algunas versiones de ASUS usan discos SD que OBSD los puede reconocer con los mismos nombres).

Cuando llegamos al punto donde nos piden los paquetes podemos hacerlo desde un mirror local o usar alguno de los sugeridos (esta fue mi opción) de esta forma el instalador se conecta a un servidor http remoto y descarga todos los .tgz necesarios para instalar el sistema (opción muuuyyy lenta).

Durante la creación de dispositivos finalizando la instalación, el sistema tomo mas tiempo del normal, pero finalmente se instaló, por favor sea paciente, estamos instalando en una microSD de mala calidad :p.

La parte simpatica del asunto es que efectivamente se nos reconocieron los dos dispositivos de red con los drivers ale y ral (así llamaré a mis dos primeros hijos), por lo tanto debemos tener dos dispositivos llamados:

ale0 y ral0

# ifconfig
lo0: flags=8049 mtu 33204
priority: 0
groups: lo
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
inet 127.0.0.1 netmask 0xff000000

ale0: flags=8843 mtu 1500
lladdr 00:22:15:6d:59:73
priority: 0
groups: egress
media: Ethernet 1000baseT full-duplex (100baseTX full-duplex)
status: active
inet6 fe80::222:15ff:fe6d:5973%ale0 prefixlen 64 scopeid 0x1
inet 192.168.0.150 netmask 0xffffff00 broadcast 192.168.0.255

ral
0: flags=8843 mtu 1500

lladdr 00:15:af:bc:fc:4d
priority: 0
groups: wlan
media: IEEE802.11 autoselect (DS2 mode 11g)
status: active
ieee80211: nwid hack chan 11 bssid 00:0f:66:0c:7b:9d 13dB wpapsk 0xd93fc0f93a9ca36ef3cd4e5e1c51700ee80c97331f42de28bd42beadc41ed4f4 wpaprotos wpa1,wpa2 wpaakms psk wpaciphers tkip,ccmp wpagroupcipher tkip
inet6 fe80::215:afff:febc:fc4d%ral0 prefixlen 64 scopeid 0x2
inet 192.168.0.151 netmask 0xffffff00 broadcast 192.168.0.255

Para configurar la tarjeta ale0 se hace del modo tradicional (ifconfig), para configurar la ral0 y conectarme a la red inalambrica, lo que hago es pasar al siguiente paso.

7. Configuración de la tarjeta inalambrica del ASUS con OpenBSD 4.5

Cuando el AP no tiene seguridad de ningún tipo, solo basta con hacer:

#ifconfig ral0 nwid hack

donde "hack" es el ESSID de la red inalambrica.

Cuando el AP tiene seguridad es necesario configurar algo más:

Si la seguridad es WPA/WPA2 PERSONAL/ENTERPRISE TKIP


# ifconfig ral0 nwid hack wpa wpapsk `wpa-psk hack hacking123`
# dhclient ral0
DHCPREQUEST on ral0 to 255.255.255.255 port 67
DHCPACK from 192.168.0.4
bound to 192.168.0.151 -- renewal in 150000 seconds.
#
Para este caso el ESSID es: "hack" y la palabra de paso (la clave) es: "hacking123"
Lo que hicimos es meter dentro del mismo comando el cifrado que genera el comando wpa-psk.
Tambien lo podemos sacar por aparte y luego "pegarlo" en la línea de comando:

# wpa-psk hack hacking123
0x3cb27ebe4a27cf8e81bb4f81c8a72828bde42d7ba1738227494d67f3fad17b00
#

# ifconfig ral0 nwid hack wpa wpapsk \ 0x3cb27ebe4a27cf8e81bb4f81c8a72828bde42d7ba1738227494d67f3fad17b00

Funciona exactamente igual, para mas información leer el manual de wpa-psk.

Verifique que usa TKIP, si usa AES no funcionará., las pruebas las hice con PERSONAL y ENTERPRISE configurando un servidor radius aparte.

Si quieren dejar la configuración de forma permanente en el sistema, deben editar el archivo /etc/hostname.ral0

# cat /etc/hostname.ral0
dhcp NONE NONE NONE nwid hack wpa wpapsk `wpa-psk hack hacking123`
#

De esta forma cada vez que arranque el sistema pedirá una IP por dhcp.

Nota: Cada vez que quieras arrancar el asus por el SD, debes decirle en la BIOS que haga boot por el dispositivo USB, de lo contrario te dará problemas para arracar OpenBSD.

Esto es todo amigos, recuerden asistir a las charlas programadas sobre OpenBSD en la Campus ;)

Entradas populares