Italiano English
Modifica History Actions

CompilareAirOS

Introduzione

Dato che nella nostra rete stiamo deployando alcuni links con apparati Ubiquiti con AirOS spesso c'è la necessità di aggiungere "funzionalità" a questo Firmware. AirOs non è altro che un "OpenWRT" opportunamente modificato dagli sviluppatori Ubiquiti che hanno aggiunto dei propri pacchetti. Quindi per compilare e generare un nuovo firmware adatto alle nostre esigenze è semplicemente necessario aggiungere i pacchetti all'SDK e ricompilare. :-)

SDK (Software Development Kit)

Ubiquiti mette a disposizione di chi vuole compilarsi la proria versione di AirOS il proprio SDK.

Per ogni apparato ci sarà un SDK differente, ma in genere gli apparati Ubnt della stessa "serie" utilizzano lo stesso SDK.

In questa guida utilizzeremo l'SDK per gli apparati "M" (Nanostation M5, Rocket M, NanoBridge M, etc..) scaricabile da http://www.ubnt.com/downloads/firmwares/XN-fw/v5.3/SDK.UBNT.v5.3.tar.bz2

Compilazione Firmware

Creiamo una cartella adhoc per la compilazione

mkdir ubnt

cd ubnt

scarichiamo l'SDK e scompattiamolo nella cartella appena creata :

wget http://www.ubnt.com/downloads/firmwares/XN-fw/v5.3/SDK.UBNT.v5.3.tar.bz2

una volta scompattato verrà creata una cartella con il nome del file scaricato (SDK.ubnt.v53 nel nostro caso) con all'intero la cartella openwrt.

OpenWrt (e di conseguenza AirOS) adotta un'architettura per la compilazione del software simile a quella di Gentoo. Per ogni pacchetto c'è un Makefile ed eventuali patch da applicare.

Dopo aver selezionato il nostro target, se si compilasse senza selezionare altri pacchetti si otterrebbe un sistema minimale. Di solito però si ha bisogno di altro software non contenuto nell'ambiente di default (come nel caso dell'AirOS per tinc, ip, opkg e IPv6). Per questo motivo si scaricano i feeds dei pacchetti extra.

Quindi per creare un nuovo firmware con i feeds dei pacchetti già presenti in !AirOS è semplicemente necessario accedere alla cartella openwrt e dare il comando make menuconfig e selezionare i pacchetti necessari. Quindi:

cd SDK.UBNT.v5.3

cd openwrt

make menuconfig

Dopo aver controllato tutte le dipendenze dovreste ritrovarvi in una schermata come questa

N.B. se siete root vi verrà fuori questo errore:

Build dependency: Please do not compile as root.
Prerequisite check failed. Use FORCE=1 to override.

make: *** [tmp/.prereq-build] Error 1

per forzare la compilazione date:

make menuconfig FORCE=1

A questo punto basterà selezionare i pacchetti da includere nel nuovo firmware e salvare semplicemente uscendo con il tasto ESC e confermando di voler salvare il nuovo file di configurazione.

Come per il kernel, i pacchetti si possono trovare in tre stati [*/M/N]:

  • <*>, il pacchetto viene incluso nell'immagine, ma viene creato in formato opkg e posto nel repository;

  • <M>, il pacchetto non è inserito nel firmware: è un modulo, cioè viene creato solo in formato opkg;

  • <N>, il pacchetto non verrà compilato;

Aggiungere nuovi pacchetti

Se volessimo invece aggiungere nuovi pacchetti selezionabili al nostro firmware dobbiamo procedere in questo modo:

Se ad esempio volessimo aggiungere al nostro menu tutti i pacchetti disponibili in OpenWRT Backfire basta procedere in questo modo aggiungendo il repository dei package di openwrt backfire com src-svn:

cd openwrt
echo "src-svn packages svn://svn.openwrt.org/openwrt/packages" > feeds.conf.default
./scripts/feeds update
./scripts/feeds install -a
make menuconfig

ATTENZIONE:
IN QUESTO MODO SI CANCELLA IL CONTENUTO DEL FILE FEEDS.CONF.DEFAULT SE SI VOLESSE FARE UN APPEND BASTA INSERIRE UN ">>" AL POSTO DEL ">" NEL SECONDO COMANDO!!

Come possiamo vedere adesso i pacchetti selezionabili sono tutti quelli presenti in OpenWRT.

Una volta selezionati i pacchetti e salvato il nuovo file di configurazione è sufficiente dare

make

per compilare tutto.

N.B. Anche in questo caso potreste riscontrare l'errore:

Build dependency: Please do not compile as root.

Prerequisite check failed. Use FORCE=1 to override.

make: *** [tmp/.prereq-build] Error 1

in questo caso, per un piccolo bug (in effetti non si dovrebbe compilare da root!! ;-) ), non è possibile forzare la compilazione. Per bypassare tutto questo basta procedere in questo modo:

vi include/prereq-build.mk

e commentare la riga 15:

#        [ "$$(shell whoami)" != "root" ]

salvate e rilanciate la compilazione.

Se volete ignorare gli errori che vi vengono fuori per i moduli (quelli selezionati con <M>) durante la compilazione basta dare:

$ make IGNORE_ERRORS=m

Invece per compilare il pacchetto selezionato con <M> poi basta lanciare (sempre dalla directory principale) il comando

make package/NOMEPACCHETTO-compile

Quando la compilazione sarà terminata verrà creata una cartela bin/ dove saranno presente il binario (e la cartella packages) necessario per il nostro apparato.

Installare singoli pacchetti

Come detto in precedenza per compilare un pacchetto che il feed del pacchetto sia presente e che sia stato selezionato con Y o M

Se queste due condizioni sono verificate basta procedere in questo modo:

Aggiornate l'indice dei pacchetti con:

  • $ ./scripts/feeds update
    • cercate il pacchetto con
    $ ./scripts/feeds search [nome_pacchetto]

Installatelo con:

  • $ ./scripts/feeds install [nome_pacchetto]
  • Qualora ci fosse la necessità di includere i pacchetti nell'immagine (come se fossero stati selezionati con <Y> con make menuconfig) si deve ridare il make nella cartella principale per rigenerare il nuovo firmware.

Se non si ha questa necessità è sufficiente dare

  • $ make package/<nome_pacchetto>-clean V=99
    $ make package/<nome_pacchetto>-compile V=99