ÍNDICE DE CONTEÚDO
Historia
O projeto OpenWRT (Open Wireless RouTer), surgiu porque a Linksys construiu o firmware para seu roteador sem fio WRT54G (um clássico dos roteadores quem nunca viu um?) a partir de um código disponível publicamente licenciado sob a GPL. Sob os termos desta licença, a Linksys foi obrigada a disponibilizar o código-fonte de sua versão modificada sob a mesma licença, o que, por sua vez, permitiu que desenvolvedores independentes criassem versões derivadas. O suporte foi originalmente limitado à série WRT54G, a partir deste marco os desenvolvedores derivaram trabalhos e suporte a novos roteadores e dispositivos.
Os nomes dos releases OpenWrt são nomes de bebidas alcoólicas, geralmente incluindo suas receitas no MOTD, a primeira versão foi White Russian e outras surgiram como Kamikaze, Backfire, Attitude Adjustment, Barrier Breaker, até em meados de 2016 uma reformulação na comunidade e novas regras surgiu o OpenWRT/LEDE (Linux Embedded Development Environment).
Por dentro do OpenWRT
OpenWrt é uma distribuição GNU/Linux altamente utilizado em dispositivos embarcados (normalmente roteadores, gateway e dispositivos de rede). Ao contrário de muitas outras distribuições para esses roteadores, o OpenWrt é construído desde o início para ser um sistema operacional completo e facilmente modificável para o seu roteador. Na prática, isso significa que você pode ter todos os recursos necessários sem exagero de um SO, e sempre com um kernel Linux mais recente.
Os principais componentes são Linux, util-linux, musl e Busybox, além de componentes próprios do OpenWRT com foco em dispositivos de armazenamento e memória limitadas como procd, ubus, opkg, rpcd e libubox.
Em vez de ser um firmware estático, o OpenWrt fornece um sistema de arquivos totalmente gravável com gerenciamento de pacotes opcional, então, além da versão de fábrica gerada pode-se estender recursos e funcionalidades via instalação de pacotes em CLI ou Web, hoje existem cerca de 3500 pacotes de software opcionais.
A versão atual até a escrita deste artigo é 21.02 com destaque para:
- Kernel Linux 5.4
- Introdução WPA3
- Melhorias e Bugfixes
Componentes OpenWRT
busybox
Não específico do OpenWRT mas assim como maioria dos SO Linux Embarcado que utilizam Busybox como uma caixa de ferramentas para os principais comandos visando praticidade, o mesmo está presente no OpenWRT para comandos como cp, mv, ls, top entre diversos outros.
opkg
O gerenciador de pacotes do OpenWRT, assim como temos o dpkg para Debian/Ubuntu temos opkg para OpenWRT que processa os arquivo .ipk.
ubus
É o principal IPC(Inter-Process Communication) utilizado pelo OpenWRT, escrito em C o ubus(micro bus) um projeto/ideia derivado de DBUS para comunicar entre processos e recursos do sistema, essa interface é implementada usando soquetes Unix e usa mensagens TLV, o coração de todo funcionamento é o ubusd e para facilitar desenvolvimento em aplicações existe a biblioteca libubus, e ainda binario ubus para administração via CLI.
Mais Informações: https://openwrt.org/docs/techref/ubus
procd
É a versão otimizada e enxuta do popular init, podemos dizer ser o PID1 do OpenWRT, além de diversas outras funcionalidades como gerenciar inicialização dos init-scripts(com algumas particularidades OpenWRT), mesclando as funcionalidade de componentes como busybox-init, busybox-klogd, busybox-syslogd, hotplug2(versão mais leve de udev) e busybox-crond.
Mais Informações: https://openwrt.org/docs/techref/procd
rpcd
Toda comunicação entre processos se dá via ubus, mas nem todas as partes do OpenWrt possuem um daemon que pode se registrar usando o ubus, como uci e opkg.
Escrever um daemon para cada um não seria “produtivo” ao OpenWRT. É por isso que o rpcd foi desenvolvido. É um pequeno daemon com suporte para plugins usando API, onde ele carrega os arquivos .so da biblioteca e chama a função init de cada um deles.
Mais Informações: https://openwrt.org/docs/techref/rpcd
libubox
É uma das principais bibliotecas usadas no openwrt porque é um conjunto de utilitários, principalmente wrappers, que geralmente estão presentes em programas e que foram codificados de maneira flexível e reutilizável, pode-se dizer o libubox uma versão enxuta e simples do GLib.
Mais Informações: https://openwrt.org/docs/techref/libubox
uci
O principal utilitário que centraliza toda configuração do OpenWRT via CLI, UCI(https://git.openwrt.org/project/uci.git)(Unified Configuration Interface) é escrito em C, com binário uci e uma biblioteca em C chamada libuci.
O diretório que centraliza as configuração fica em /etc/config/
Mais Informações: https://openwrt.org/docs/techref/uci
luci
Uma versão do UCI para utilizar via acesso web do openwrt, LUCI é a versão UCI escrita em Lua através do libuci-plugin, permite uma administração via web de configuração.
Mais Informações: https://openwrt.org/docs/techref/luci
netifd
Éum daemon escrito em C para melhor acesso às APIs do kernel com a capacidade de escutar eventos netlink, o netifd substituiu os antigos scripts de configuração da rede OpenWrt.
Uma maneira direta pode-se dizer que netifd é uma versão customizada/simples/enxuta dos populares NetworkManager e Connman, mas de uso exclusivo do OpenWRT e seus componentes.
Mais informações: https://openwrt.org/docs/techref/netifd
É nítido que é o mesmo Kernel Linux de outros projetos, mas há customizações do projeto OpenWRT para algo mais simples e enxuto, e com um foco extra em prover um grande aparato para um dispositivo de rede.
Distribuição Linux Desktop e OpenWRT
De uma forma direta e resumida podesse comparar entre uma Distribuição Linux Desktop e OpenWRT que enquanto no Desktop utilizam glib+dbus+udev+systemd+networkmanager no lado do OpenWRT seria libubox+ubus+procd+netifd.
Dispositivos Suportados
Quer saber se seu roteadores, gateway, dispositivo de rede tem suporte a alguma versão do OpenWRT? Então acesse:
Há uma lista de mais de 1500 dispositivos suportados!
Caso seu roteador esteja na lista de marca/modelo/revisão suportada, pode estudar e por sua conta em risco atualizar para utilizar OpenWRT, digamos que estaria trocando um Piper Cheyenne II por um Embraer Praetor 600.
Um exemplo ao pesquisar por RaspberryPI, e o link com informações e procedimentos:
https://openwrt.org/toh/raspberry_pi_foundation/raspberry_pi
Buildsystem
Há ainda a possibilidade de baixar o código-fonte do OpenWRT e gerar sua própria Distribuição Linux OpenWRT para uma placa alvo já suportada e customizar a instalação de pacotes e sistema de arquivos root.
O buildsystem do OpenWRT é derivado do famoso Buildroot então utilizar e customizar o OpenWRT consiste em Makefiles, patches e uso de Kconfig, ele irá gerar um cross-toolchain e um root filesystem para uma placa previamente configurada.
Um exemplo da tela de configuração do OpenWRT ao chamar make menuconfig
(Figura1):
Foi realizada uma abordagem sobre OpenWRT, sua historia, alguns componentes próprios que o caracterizam e o seu proprio buildsystem. Próxima abordagem será utilizado o seu buildsystem e geração de uma imagem OpenWRT para uma placa já suportada.
Até mais!
Bom trabalho!
Mais alguma informações em Português:
http://www.c2o.pro.br/proj/openwrt/index.html
Que legal Markos, não conhecia este site, quando alguém solicitar material em português irei indicar.