En comptes de partir d'una versió precompilada per a un model de router, veurem, pas a pas, com construir un firmware OpenWRT Kamikaze 7.09 compilant-lo des de zero, farem un build a partir del codi font del programari, afegint alguns paquets extres. També veurem com construir imatges a mida.
L'OpenWRT és un conjunt d'scripts i makefiles, que apliquen pegats al codi font del kernel i a la resta de programari que necessitem per al tipus de router que tinguem. Està inspirat en Debian i te un sistema de repositoris de paquets. Hi ha diverses versions, la última “estable” és la Kamikaze 7.09.
1. Construim un Kamikaze !
cd ~
mkdir nano
cd nano
svn checkout https://svn.openwrt.org/openwrt/tags/kamikaze_7.09/ kamikaze
Anem a veure si a la distribució linux que estem fent servir li cal instalar res per a poder compilar el kamikaze (el comesfa l'he fet en un Debian Etch):
cd kamikaze
make prereq
Hem surt una llista de paquets que falten, potser ja els teniu, o potser us en faltaran d'altres. En el meu cas:
apt-get install libncurses5-dev gawk bison flex unzip bzip2 autoconf
Torno a comprovar si falta res:
make prereq
... i si ja hi es tot entrarem directament al menu de configuració del kamikaze. No hi hem de fer res encara, sortim i quan pregunti si ha de guardar la configuració li diem que SI, en cas contrari el seguent pas no funcionarà. Li diem que baixi la configuració dels paquets extres que podem compilar/instalar:
make package/symlinks
Tornem a la configuració del firm, ara hi tindrem moltes més opcions:
make menuconfig
Farem un firm base per a la nanostation2, però hi afegirem el dimoni snmpd, un client per posar l'hora del sistema (ntpclient), i el openvpn. Afegiu/treieu el que us calgui. Primer li diem que el firm és per a una atheros (nanostation2):
Target System -> Atheros [2.6]
Li diem que també volem el Imagebuilder, per despres poder construir, de forma rapida, firms amb algunes modificacions als fitxers de configuració:
[*] Build the OpenWrt Image Builder
Network -> snmpd-static [*]
Network -> Time Synchronitzation -> ntpclient [*]
Network -> VPN -> openvpn [*]
Libraries->libelf [*]
En teoria, el menuconfig resol les dependencies. Es a dir, que quan seleccionem el OpenVPN, automaticament queden seleccionades les llibreries que necessita per a funcionar (kmod-tun, libopenssl, etc.). En el cas del snmpd-static s'han oblidat de que falta el 'libelf', i ho fem manualment.
Sortim i guardem la configuració, la guarda en el fitxer '.config'. Ja podem compilar el firm. Aquest proces és llarg, aneu a esmorçar, dinar o sopar mentrestant. El que fa es baixar-se el codi font de tot el que li cal, hi aplica els pegats i els compila. He afegit 'V=99' a la comanda, així es veu el que esta fent:
make world V=99
2. Instal·lant-lo a la nanostation2
Quan acabi (paciencia!) tindrem el firm i el ImageBuilder a '~/nano/kamikaze/bin'. Ara ens cal preparar el firm per a que la nanostation2 el sapiga instalar:
cd ~/nano
wget http://www.ubnt.com/downloads/mkfwimage-1.2.tar.gz
tar xvzf mkkfwimage-1.2.tar.gz
cd mkfwimage-1.2
make
Podria ser que us faltes alguna cosa per a copilar-lo, a mi hem va donar error a 'zlib.h', hem faltava el 'zlib dev':
apt-get install zlib1g-dev
Anem a 'empaquetar' el firm que hem fet de manera que la nanostation2 el sapiga instalar, ho farem en un direcotri nou:
cd ~/nano
mkdir firm
cd firm
ln -s ../mkfwimage-1.2/src/mkfwimage .
cp ../mkfwimage-1.2/ls2-openwrt.txt ns2-openwrt.txt
cp ../kamikaze/bin/openwrt-atheros-2.6-vmlinux.lzma .
cp ../kamikaze/bin/openwrt-atheros-2.6-root.squashfs .
Editem el fitxer 'ns2-openwrt.txt' i corregim els noms dels fitxers que ha d'empaquetar, hauria de quedar aixi:
kernel 0x01 0xBFC30000 0x000D0000 0x80041000 0x80041000 openwrt-atheros-2.6-vmlinux.lzma
rootfs 0x02 0xBFD00000 0x002C0000 0x00000000 0x00000000 openwrt-atheros-2.6-root.squashfs
A l'hora d'empaquetar-lo, la versió que li posem al paquet ha de començar amb la cadena 'NS2.ar2316.', en cas contrari la nanostation2 no l'instalarà. Som'hi:
./mkfwimage -v NS2.ar2316.OpenWRT-guifi -i ns2-openwrt.txt -o NS2.OpenWRT.guifi.bin
Ja el tenim preparat. El podem instal·lar amb el panell web de la nanostation2, o via tftp. El tftp ens caldrà per si despres volem tornar a posar el firmware original (http://www.ubnt.com/downloads/NS2.v2.2.bin). Amb el tftp:
cd ~/nano/firm
tftp 192.168.1.20
binary
trace
put NS2.OpenWRT.guifi.bin
Apaguem la nanostation2, mantenim apretat el boto de reset que hi ha al costat del port ethernet, endollem de nou ... i el firmware pujara. Tarda una bona estona en instalar-se, veureu que les llumetes que indiquen la qualitat d'enllaç es van encenent i apagant ... de nou, paciencia.
3. Configurant el Kamikaze
3.1. Radio
Per defecte te la 192.168.1.1, hi hem d'entrar via telnet, no te contrasenya. La configuració es tota per UCI, editant un parell de fitxers, l'editor que hi ha per defecte és el 'vi', en podeu instalar qualsevol altre al menuconfig (Utilities->Editors).
Poseu-hi una contrasenya amb la comanda 'passwd'. Una vegada l'hagueu posada, no podreu tornar a entrar per telnet, ho tindreu que fer per ssh.
La config de la ràdio esta a '/etc/conf/wireless', aqui us poso un exemple:
config wifi-device wifi0
option type atheros
# option channel 5
option diversity 0 # 0 disables diversity, 1 enables diversity (default)
option txantenna 1 # 0 for auto (default), 1 for antenna 1, and 2 for antenna 2
option rxantenna 1 # 0 for auto (default), 1 for antenna 1, and 2 for antenna 2
# option distance 1000 # The distance between the ap and the furthest client in meters.
# REMOVE THIS LINE TO ENABLE WIFI:
# option disabled 1
config wifi-iface
option device wifi0
option network wan
option mode sta
option ssid guifi.net-proves
option encryption none
Es prou entenedor com configurar-la. No he fet proves 'de camp' amb la radio, no he provat si l'antena que porta incorporada és la 1 o la 2, no he provat el parametre 'distance'. Aquests parametres estan a '/proc/sys/dev/wifi0', i es poden modificar des la linea de comandes, per exemple:
sysctl -w dev.wifi0.diversity=0
sysctl -w dev.wifi0.txantenna=1
sysctl -w dev.wifi0.rxantenna=1
3.2. Interficies
Les interficies de xarxa es configuren a '/etc/conf/network', per exemple:
config interface loopback
option ifname lo
option proto static
option ipaddr 127.0.0.1
option netmask 255.0.0.0
config interface lan
option ifname eth0
option proto static
option ipaddr 192.168.1.1
option netmask 255.255.255.0
config interface wan
option ifname ath0
option proto static
option ipaddr 10.138.75.5
option netmask 255.255.255.224
#option gateway 10.138.75.1
option dns "10.138.75.98 10.138.87.2"
config route guifi
option interface wan
option target 10.0.0.0
option netmask 255.0.0.0
option gateway 10.138.75.1
També és prou entenedor. Com podeu veure no activo el gateway a la 'wan', li marco una ruta 10.0.0.0/8 cap al AP ('config route guifi'), seria l'equivalent a fer un 'route add -net 10.0.0.0 netmask 255.0.0.0 gw 10.138.75.1', però al kamikaze es defineix així. Això seria el correcte, ja que a guifi no hi ha gateways 
3.3. Firewall
El firewall ja ve configurat per defecte, està força bé. La wan ho te tot tancat, anem a configurar-lo pero poder accedir des de la wan (10.0.0.0/8) via ssh, i que el snmpd respongui al servidor de grafiques. Afegiu al final del fitxer '/etc/firewall.user':
iptables -t nat -A prerouting_wan -p tcp --dport 22 -j ACCEPT
iptables -A input_wan -p tcp --dport 22 -j ACCEPT
iptables -t nat -A prerouting_wan -p udp --dport 161 -j ACCEPT
iptables -A input_wan -p udp --dport 161 -j ACCEPT
4. Construint amb l'ImageBuilder
Anem a veure com crear un firm amb fitxers de configuració modificats. Al construir el firmware també li hem dit que ens fagi el Imagebuilder. El descomprimim:
cd ~/nano
tar xvjf kamikaze/bin/OpenWrt-ImageBuilder-atheros-2.6-for-Linux-x86_64.tar.bz2
mv OpenWrt-ImageBuilder-atheros-2.6-for-Linux-x86_64 ImageBuilder
cd ImageBuilder
Per a construir un firm base, nomes cal fer: 'make image'. Els paquets extres que hem compilat abans (ntpclient, snmpd, etc.) no s'instal·len per defecte. Hem de dir-li, i també TOTS els paquets que en depenen. En el nostre cas:
make image PACKAGES="ntpclient snmpd-static libelf openvpn kmod-tun liblzo libopenssl zlib"
En cas de que volguem modificar o afegir algun fitxer del kamikaze, ho podem fer creant una estructura del sistema de fitxers del firm, i posant els que volem modificar. Per exemple anem a fer que el firm incorpori la radio i la xarxa configurats com hem fet abans:
cd ~/nano
mkdir files
mkdir files/etc
mkdir files/etc/config
A ~/nano/files/etc/config i creem el fitxer 'wireless', amb el contingut que he posat abans d'exemple de configuració de la radio. El mateix per al fitxer 'network', hi posem el de l'exemple anterior. Construim amb el Imagebuilder:
cd ~/nano/ImageBuilder
make image PACKAGES="ntpclient snmpd-static libelf openvpn kmod-tun liblzo libopenssl zlib" FILES=”~/nano/files”
A' ~/nano/ImageBuilder/bin' hi tindrem el parell de fitxers (root i squashfs) que hem d'empaquetar amb el mkfwimage per a poder instal·lar el firm a la nanostation2.
5. Update(s)
Gràcies a en Xavier Martinez volia afegir un parell de coses: com posar el panell d'administració web, i com fer que les llumetes marquin la qualitat d'enllaç.
5.1 X-WRT
Ja ho ha explicat el Xavier. Una vegada hem baixat amb svn el kamikaze, fem:
cd ~/nano/kamikaze/package
svn co http://svn.berlios.de/svnroot/repos/xwrt/tags/kamikaze_7.09/package/webif webif
cd ~/nano/kamikaze
make menuconfig
A 'Administration -> Webif' seleccioneu (*) el paquet 'webif' i el 'webif-lang-ca'. Sortiu i guardeu la config, i torneu a fer un 'make world'.
5.2 Llumetes (LEDs)
Per a fer-les anar caldria posar un altre paquet que no esta inclos en el kamikzae, com hem fet amb el X-WRT, però ho farem amb un paquet ja fet. En aquest cas és més fàcil, i tornarem a fer anar el ImageBuilder del punt 4. Ens caldrà aquest fitxer, conté el ipkg i un script per encendre els LEDs que he fet basant-me amb un del Xavier Martinez.
cd ~/nano
wget http://guifi.net/files/llumetes.tar.gz
tar xvzf llumetes.tar.gz
mkdir ./files/bin
mv quality-LEDs.sh ./files.bin
chmod +x ./files/bin/quality-LEDs.sh
mkdir ./files/etc/init.d
mv custom-user-startup ./files/etc/init.d
chmod +x ./files/etc/init.d/custom-user-startup
mv kmod-gpio_2.6.21.5-atheros-1_mips.ipk ./ImageBuilder/packages
Hem posat el paquet que guarda el mòdul de control dels LEDs a on te els paquets el ImnageBuilder. Hem posat l'script dels LEDs de manera que surti al /bin del firm, i també fem que es carregui aquest script cada vegada que s'enjegui el router. Nomes ens caldrà generar un nou firm, afegint el paquet nou, també hi he afegit el webif:
cd ~/nano/ImageBuilder
make image PACKAGES="ntpclient snmpd-static libelf openvpn kmod-tun liblzo libopenssl zlib webif webif-lang-ca kmod-gpio" FILES=”~/nano/files”
| Attachment | Size |
|---|---|
| llumetes.tar.gz | 4.11 KB |

