Rotinas de Update e Upgrade com o OpenWrt
Por Ciro Mota | 7, Maio 2023 | Tempo de leitura aproximadamente 6 minutos. Edições: Adição de bloco de anúncios Em 19, Setembro 2023.Olá pessoal, como vão?
Depois de um tempinho sem escrita lá vamos nós fazer jus a este blog compartilhando sempre novas descobertas.
Há alguns meses que aderi ao uso do OpenWrt na minha rede e há tempos eu já o admirava por ser um projeto open source em substituição aos firmwares dos fabricantes de roteadores. Eu como fã de distros Linux e o OpenWrt usa o kernel Linux em sua estrutura não poderia deixar de usá-lo. Aliás um outro fator em favor é lidar contra a obsolescência imposta por esses mesmos fabricantes onde roteadores fora de linha há anos (como o lendário WR1043NDv1) até hoje possuem suporte por lá.
Concordo que o OpenWrt possa não ser para todos os públicos, assim como o Arch Linux não é. Mas assim como o mesmo Arch Linux a sua documentação é extensa e é necessário somente um pouco de entendimento e pesquisas para fazer as coisas funcionarem.
O processo mais vital de um sistema é o seu período de atualização e com o OpenWrt isso não é diferente. Porém não é por se tratar de uma distro que o comportamento dessas atualizações seja o mesmo. Neste artigo irei tentar aplicar um pouco do meu processo de aprendizado a esse respeito.
Update
O processo de atualização do OpenWrt assim como uma distro Linux envolve duas etapas, o Update e o Upgrade. Sendo o primeiro a atualização dos pacotes assim como ocorre corriqueiramente em uma distro e o segundo o processo de atualização do próprio sistema. Por ser um sistema crítico e que envolve operações onde estabilidade é o principal ponto, você deve ponderar sempre ao realizar atualizações dos pacotes em uma instalação do OpenWrt. O processo aqui é dividido em duas etapas: Os pacotes Base
que são a estrutura do sistema e que são instalados em uma partição exclusiva de somente leitura junto com o próprio sistema e os pacotes Custom
que são instalados em outra partição com leitura e escrita.
O processo de atualização (Update) dos pacotes Base
, se houver, irá criar uma cópia de si mesmo na partição de leitura e escrita ao invés de substituí-los na partição de origem, a Base
. Desta forma mais espaço alocado em disco será necessário para tal armazenamento e sabemos que roteadores ainda possui espaço de memória limitado. O ideal aqui é que aguarde as atualizações PATCH
ou MINOR
(falaremos dela em seguida) para realizar as atualizações destes pacotes, exceto em caso de falhas graves de segurança e seu aparelho possua espaço suficiente para aplicação.
Já as atualizações Custom
funcionam como em uma distro Linux qualquer mas ainda assim nem todas as atualizações são referentes a correções de segurança ou estabilidade, aqui você também deverá ponderar sobre o que vai aplicar, já que nem sempre haverá algum ganho. A dica é estar atento aos log de alterações para embasar sua decisão. Caso haja muitos pacotes a serem atualizados você não deve executar o comando de upgrade direto sob risco de trazer problemas ao sistema com uma dessas atualizações.
Neste e neste link você encontra um pouco mais de informações a respeito do que eu cito e minha fonte de pesquisa.
Um outro fator super importante é a quantidade de escritas que você fará nas memórias do aparelho. Uma memória de roteador pode não ser tão durável quanto a de um SSD por exemplo. Quanto menos escritas por lá, melhor.
Upgrade
O processo de Upgrade e mais uma vez tomando como comparação uma distro Linux comum, é feito de tempos em tempos após disponibilizadas as novas versões. No caso do OpenWrt não há uma periodicidade exata sobre quando novas versões podem sair e em adição a isso o processo de lançamento de novas versões obedece ao Semantic Versioning, ou seja, poderão haver versões MAJOR
(22.x.x) MINOR
(22.03.x) e PATCH
(22.03.5) (exemplo da versão mais atual no momento da escrita deste texto).
Você pode livremente fazer o sysupgrade
mantendo suas configurações dentro de lançamentos PATCH
e MINOR
mas é altamente recomendável recomeçar do zero ao aplicar um lançamento MAJOR
, isso devido as diferenças de configurações do próprio sistema, modificações e implementações que possam ter sido adicionadas e poderão ocasionar conflitos com configurações antigas.
Para os outros dois lançamentos como dito, você pode manter configurações mas não é possível manter os apps que foram instalados. Comentaremos sobre isso a seguir.
Preservando os apps após o Upgrade
O OpenWrt não mantém por padrão os apps que você instala no sistema após uma rotina de upgrade de versão, sendo necessário o uso de scripts para essa operação posteriormente. O script em que para meu uso eu obtive o melhor resultado foi o desenvolvido pelo tboege. Execute linha a linha abaixo:
cat << "EOF" > /tmp/listuserpackages.awk
#!/usr/bin/awk -f
BEGIN {
ARGV[ARGC++] = "/usr/lib/opkg/status"
cmd="opkg info busybox | grep '^Installed-Time: '"
cmd | getline FLASH_TIME
close(cmd)
FLASH_TIME=substr(FLASH_TIME,17)
}
/^Package:/{PKG= $2}
/^Installed-Time:/{
INSTALLED_TIME= $2
# Find all packages installed after FLASH_TIME
if ( INSTALLED_TIME > FLASH_TIME ) {
cmd="opkg whatdepends " PKG " | wc -l"
cmd | getline WHATDEPENDS
close(cmd)
# If nothing depends on the package, it is installed by user
if ( WHATDEPENDS == 3 ) print PKG
}
}
EOF
Permissão de execução:
chmod +x /tmp/listuserpackages.awk
O comando abaixo finalmente irá salvar a lista dos apps que foram instalados por você no OpenWrt. A implementação original do script no meu caso gerou uma lista duplicada dos apps e para contornar isso nós podemos fazer o uso do comando sort -u
que além de organizar em ordem alfabética irá remover os duplicados (vide imagem).
E por fim a lista será salva no arquivo opkg-beforeupgrade
/tmp/listuserpackages.awk /usr/lib/opkg/status | sort -u > /etc/opkg-beforeupgrade
Para finalizar você deverá escrever no arquivo sysupgrade.conf
, que é um arquivo de customização de Upgrade, para que o outro arquivo opkg-beforeupgrade
seja preservado depois da atualização de versão do OpenWrt.
echo "/etc/opkg-beforeupgrade" >> /etc/sysupgrade.conf
No meu caso o arquivo restore.sh
é uma rotina automatizada que eu criei em um Shell Script
para repor esses apps após o Upgrade do sistema. Sim, é possível criar um Shell Script de automação geral por lá também. Se for muito pedido quem sabe eu não teste e publique um que possa ser de auxílio para vocês.
Após atualizada a versão e o roteador reiniciar e caso você esteja conectado à internet (deverá estar se você manteve as configurações) você deve executar:
opkg update && cat /etc/opkg-beforeupgrade | xargs opkg install
Com isso o sistema irá atualizar os repositórios e instalar os apps. Não será necessário reconfigurar, apenas reinstalar os apps que eram utilizados.
OBS: Se você usa DNSCrypt como eu você deverá alterar o DNS forwardings
para um DNS público e reiniciar o dnsmasq
para que a conexão retorne. Só a partir dai você conseguirá executar a instalação dos apps. Após reinstalar o DNSCrypt, retorne para o DNS padrão do app.
Conclusão
Em si não é difícil manter o OpenWrt conforme vimos neste artigo, a exceção de como manter os apps após o Upgrade ele vai te demandar pesquisas e tempo para se adaptar. Mas é um tempo muito bem gasto para um sistema vasto e muito gosto de usar.
Caso queira se familiarizar com ele eu tenho dois artigos criados onde você poderá emulá-lo tanto na VirtualBox quanto no QEMU:
Espero que este artigo seja útil para você.
Até mais!