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
Ara els paquets que hem dit abans. Al seleccionar-los amb l'espai ens surt una 'M', si tornem a pitjar espai surt '*'. Hem de posar el '*' per a que els inclogui en el firm final, en cas contrari els deixarà com a paquets que s'hauran d'instalar amb el sistema de paquets (ipkg) del OpenWRT:
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
[Nano5]
Si estas fent un firm per a una nanostation5, abans de fer el "make world", edita el fitxer "~/nano2/kamikaze/package/madwifi/Makefile". Busqueu la linea que posa "HAL_TARGET:=ap51" i la canvieu per "HAL_TARGET:=ap30"
[/Nano5]
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
[Nano5]
Si estas fent un firm per a una nanostation5, has de canviar:
cp ../mkfwimage-1.2/ls2-openwrt.txt ns2-openwrt.txt
per
cp ../mkfwimage-1.2/ls5-openwrt.txt ns5-openwrt.txt
El fitxer "ns5-openwrt.txt", ha de tenir:
kernel 0x01 0xBE030000 0x000D0000 0x80041000 0x80041000 openwrt-atheros-vmlinux.lzma
rootfs 0x02 0xBE100000 0x002C0000 0x00000000 0x00000000 openwrt-atheros-root.squashfs
I finalment, el mkfwimage seria:
./mkfwimage -v NS5.ar2313.OpenWRT-guifi -i ns5-openwrt.txt -o NS5.OpenWRT.guifi.bin
[/Nano5]
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 tcp --dport 80 -j ACCEPT
iptables -A input_wan -p tcp --dport 80 -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”
Comentaris
molt bo!!!
Genial Joan, feia falta algú que ho escrivis tot. També funciona per la nanostation5 o bé s'ha de canviar el target_hal del madwifi a ap30 (http://forum.openwrt.org/viewtopic.php?id=15039)?
Jo hi instal·lo també el webif, així hi ha una interfície gràfica bastant bona on pots tocar tots els paràmetres de configuració.
Per cert, jo he provat de compilar la versió trunk per tenir l'últim madwifi i em trobo que, l'image builder no té una imatge per defecte i no compila res:
make image
Profile not found.
Alguna idea?
Thx!
Gràcies. Ho he escrit per enrecordar-me per sempre, és el meu bloc de notes ;-) I de passada, a veure si algú s'apunta, i poguessim fer un firm per als ST. Crec que nomes caldria afeir el quagga, mirar on i com es configura. També caldria mirar com configurar els WDS a /etc/confgi/wireless.
Provaré el webif, com el poses tu? No el se trobar al 'make menuconfig'. O el poses amb el ImageBuilder? Quan ho tens tot muntat és molt fàcil (i rapid) afegir/treure paquets. El build tarda molt la primera vegada, perque s'ha de descarregar molt codi font i compilar-lo. Despres al afegir paquets (make menuconfig), només es descarrega/compila els nous.
Per al nano5, cal canviar un parametre del Makefile dels madwifi (ap51 per ap30), i també canvien un parell de coses al mkfwimage. Ho deixo per a un proper comesfa, que farem el mateix per a un Linksys, RB133 i nano5. Els canvis seran minims. I la config dels trastos és pràcticament la mateixa.
Fent-ho sobre el trunk (versio de desenvolupament), hem donava algun problema. I al final he optat per fer-ho sobre la 7.09. Sobretot perque en l'ImageBuilder (o desde ipkg) pots fer servir els paquets precompilats que estan als repositoris.
També he provat de posar el driver amb el hal propi d'ubiquity, però tampoc m'he n'he sortit ... de moment.
El webif el pots posar de
El webif el pots posar de les dues maneres. O bé l'instales després amb l'image builder o el compiles prèviament afegint-lo als packets amb el subversion:
http://svn.berlios.de/svnroot/repos/xwrt/tags/kamikaze_7.09/package/webif
make menuconfig
(http://forum.ubnt.com/forum/viewtopic.php?t=587&highlight=webif)
Jo si que vaig poder posar el hal d'ubiquity a la trunk però no vaig notar diferències en el comportament del catxarro i ho vaig deixar estar per no haver de compilar tots els paquets. Hi havia un problema amb un patch que vaig haver d'arreglar manualment però el principal inconvenient es el tema aquest de l'image builder que no anava. Crec que la versió 7.09 funciona perfectament.
I per esborrar fitxers?
Hola,
Algú sap com fer-ho per eliminar fitxers del rootfs original (per exemple per fer que per defecte no hi hagi firewall)?
Thx
/etc/init.d/firewall
Imagino que algun firewall, ni que sigui minim, hi posaras. Sino crees un fitxer buit. Amb el ImageBuilder hi poses el /etc/init.d/firewall nou que vulguis tu.
Si ho vols fer a l'hora de construir el firm, mira't:
~/nano2/kamikaze/package/iptables/files
nightwing
heu vist aixo?
http://www.lugro.org.ar/nightwing/index.html
ok...
gràcies; de moment serveix, però hi seguirem donant voltes a veure què en trèiem...
Actualització
He afegit al comesfa com posar el panell web i fer que els LEDs marquin la qualitat d'enllaç.
Nano5
Afegides les modificacions per a construir el firm per a una nano5.
Nano5 error?
Quant ja estic casi al final
kon@kon-laptop:~/nano/firm$ ./mkfwimage -v NS5.ar2313.OpenWRT-guifi -i ns5-openwrt.txt -o NS5.OpenWRT.guifi.bin
ERROR: Invalid part count '0'
ERROR: Failed validating firmware layout - error code: -1
saps que pot ser?
merci
?
Ni idea. Ja s'ha fet be el firm? Has copiat els dos fitxers generats a ~/nano/firm?
carpeta firm
aqui a dins hi ha:
mkfwimage
ns5-openwrt.txt
openwrt-atheros-2.6-root.squashfs
openwrt-atheros-2.6-vmlinux.lzma
ns2-openwrt.txt
esta be no?
tornare a provar desde el principi
i ja et dire que tal
gracies
cambi de pc
he cambiat de pc
i he modificat el
ns5-openwrt.txt
dins he posat :
kernel 0x01 0xBE030000 0x000D0000 0x80041000 0x80041000 openwrt-atheros-2.6-vmlinux.lzma
rootfs 0x02 0xBE100000 0x002C0000 0x00000000 0x00000000 openwrt-atheros-2.6-root.squashfs
i despres ja a funcionat!
el penjo a la meva pagina
http://xarxa.no-ip.org/icons/firm/
jo no le probat !!
com podria fer per provarlo de una forma virtual?
amb el Qemu?
be gracies Joan
Per provar-ho, el millor
Per provar-ho, el millor seria unananostation5. Jajaja. No crec que es pugui fer correr en res mes, ni qemus ni res.
Provar-lo
ok si flasejo al Nano5 amb aquet firm tindre acces via web?
a tinc d'efegir algun arxiu mes?soc molt pata via telnet,shh etc ..jajaja
si no le fet be podre tornar enrera?tornar a posar el propi de la Nano5?
amb el linksys ja he tingut experiencies de penjades i les he pasat canutes per
recuperar-los
make menuconfig
quant fas make menuconfig no recordo on, hi ha per escollir la administracio web, els idiomes etc...
tftp
Al final del comesfa explica com afegir l'administració web. Per canviar el firm no tindras cap problema amb el tftp.