Como usar Neovim no OpenWRT de forma eficiente

Para quem precisa realizar debugs frequentes em redes domésticas via SSH, editar arquivos de configuração em formatos como JSON, YAML e XML de forma eficiente é crucial. NeoVim surge como uma solução ideal, oferecendo um editor robusto e confortável. Este guia detalha o processo de Compilar Neovim no OpenWRT, um sistema que, infelizmente, não dispõe de um pacote ipk para este software em seu repositório. Abordaremos cada etapa, desde a compilação até a instalação, incluindo os desafios encontrados e como superá-los.

Preparativos para a Compilação e Instalação

Para garantir um processo limpo e evitar problemas inesperados, recomenda-se utilizar um ambiente de máquina virtual novo. A versão do firmware utilizada neste tutorial é a ImmortalWrt Firmware, com arquitetura Genérica x86/64, versão 23.05.3 e kernel 5.15.162. É importante que não haja softwares pré-instalados, mantendo a configuração padrão. O espaço disponível deve ser de aproximadamente 1.2GB, que poderá ser removido após a instalação.

Antes de iniciar, faça um backup do seu sistema OpenWRT. Se estiver utilizando uma máquina virtual, crie um checkpoint ou ponto de backup para garantir a segurança dos seus dados e configurações.

Iniciando o Processo de Compilação e Instalação

O primeiro passo é atualizar o repositório de software através do gerenciador de pacotes OPKG. Isso garante que você tenha acesso às versões mais recentes dos pacotes necessários.

Execute o seguinte comando no terminal:

opkg update

Se o resultado for Signature check passed. sem erros, pode prosseguir para a próxima etapa. Caso contrário, verifique a conexão com a internet e tente novamente.

Como precisaremos clonar o repositório do NeoVim no GitHub via git, é necessário instalar os pacotes git e git-http. O git-http é essencial para utilizar o git em situações que envolvam SSL, garantindo uma conexão segura.

Utilize o seguinte comando:

opkg install git git-http

Durante a instalação, diversos pacotes dependentes serão instalados, incluindo git, git-http, zlib, libcurl4 e libnghttp2-14.

Agora, clone o repositório do NeoVim usando o comando git clone e tente executar o comando make para iniciar a compilação:

git clone https://github.com/neovim/neovim
cd neovim && make CMAKE_BUILD_TYPE=RelWithDebInfo

Se o sistema retornar o erro make not found, significa que o pacote make não está instalado. Instale-o utilizando o OPKG e tente executar o comando make novamente:

opkg install make
make CMAKE_BUILD_TYPE=RelWithDebInfo

Caso o erro retornado seja make: cmake: No such file or directory, isso indica que o cmake não está presente no sistema. OpenWrt não oferece um arquivo de instalação direta para cmake, mas podemos instalá-lo indiretamente através do python-pip, utilizando a versão Python3:

opkg install python3 python3-pip
pip install cmake

Após instalar o cmake, tente executar o comando make novamente. Se o erro persistir, verifique se todas as dependências foram instaladas corretamente e se as versões são compatíveis.

Enfrentando Erros de Compilação e Dependências

Se após a instalação do cmake, a mensagem de erro mudar para algo como:

- The C compiler identification is unknown
CMake Error at CMakeLists.txt:3 (project):
No CMAKE_C_COMPILER could be found.

Isso significa que o compilador C não foi encontrado. Para resolver este problema, instale o gcc:

opkg install gcc
make CMAKE_BUILD_TYPE=RelWithDebInfo

A compilação pode levar um tempo considerável. Durante este processo, um erro pode ocorrer durante a instalação do luajit:

compilation terminated.
make[5]: *** [Makefile:709: lj_parse.o] Error 1

Nesse caso, instale o luajit diretamente através do OPKG:

opkg install luajit

Continue tentando executar o comando make. O próximo erro que pode surgir é:

/usr/bin/ld: cannot find -ldl: No such file or directory

Este erro indica que o comando ld não possui a opção ldl. As funções dessas bibliotecas estão incluídas diretamente na musl libc do OpenWrt. Para contornar esse problema, crie bibliotecas stub para elas.

Utilize o Vi para criar um arquivo sh chamado run.sh e insira o seguinte conteúdo:

cat <<EOF > /usr/lib/libdl.a
!<arch>
EOF
cp -a /usr/lib/libdl.a /usr/lib/librt.a
cp -a /usr/lib/libdl.a /usr/lib/libpthread.a
cp -a /usr/lib/libdl.a /usr/lib/libresolv.a

Em seguida, execute o arquivo:

chmod +x run.sh
./run.sh

Após criar as bibliotecas stub, tente executar make CMAKE_BUILD_TYPE=RelWithDebInfo novamente. O próximo erro pode ser:

/bin/sh: install: not found

Isso indica que o comando install não foi encontrado. Instale o pacote completo para o comando install:

opkg install coreutils-install

O próximo erro que pode aparecer é:

CMake Error at /usr/lib/python3.11/site-packages/cmake/data/share/cmake-3.30/Modules/FindPackageHandleStandardArgs.cmake:233 (message):
Could NOT find Gettext (missing: GETTEXT_MSGMERGE_EXECUTABLE GETTEXT_MSGFMT_EXECUTABLE)

Isso indica que o Gettext não foi encontrado. Como não há um método de instalação rápida para os pacotes Gettext, será necessário instalá-lo através da compilação:

wget -c https://ftp.gnu.org/pub/gnu/gettext/gettext-0.22.5.tar.gz
tar zxvf gettext-0.22.5.tar.gz
cd gettext-0.22.5
./configure
make && make install

Após a instalação do Gettext, tente compilar o NeoVim novamente. O erro retornado pode ser:

/usr/bin/ld: cannot find -lutil: No such file or directory

Para contornar este problema, crie bibliotecas stub:

echo "int main() { return 0; }" > dummy.c
gcc -shared -o /usr/lib/libutil.so dummy.c

Neste ponto, a compilação estará praticamente completa e você poderá prosseguir com a instalação:

make install

O arquivo executável binário estará localizado em /usr/local/bin. Você pode movê-lo diretamente para /usr/bin ou criar um link simbólico para lá. Após isso, você poderá instalar o Astrovim ou Lazyvim, executando-o diretamente.

Resumo do Processo de Instalação

Instalação de Dependências via OPKG

Primeiro, atualize a lista de pacotes e instale as dependências necessárias para a compilação do NeoVim.

opkg update
opkg install git git-http python3 python3-pip make luajit gcc coreutils-install

Instalação de Dependências via PIP

Utilize o pip, gerenciador de pacotes do Python, para instalar o cmake, que é essencial para o processo de compilação.

pip install cmake

Compilação e Instalação do Gettext

O Gettext é necessário para o suporte à internacionalização. Compile e instale o Gettext a partir do código fonte.

wget -c https://ftp.gnu.org/pub/gnu/gettext/gettext-0.22.5.tar.gz
tar zxvf gettext-0.22.5.tar.gz
cd gettext-0.22.5
./configure
make && make install

Criação de Bibliotecas Stub

Crie bibliotecas stub para contornar a falta de algumas bibliotecas no sistema OpenWRT.

vi run.sh

Adicione o seguinte conteúdo ao arquivo run.sh:

cat <<EOF > /usr/lib/libdl.a
!<arch>
EOF

Execute os seguintes comandos para criar as bibliotecas:

cp -a /usr/lib/libdl.a /usr/lib/librt.a
cp -a /usr/lib/libdl.a /usr/lib/libpthread.a
cp -a /usr/lib/libdl.a /usr/lib/libresolv.a
chmod +x run.sh
./run.sh

Crie também a biblioteca stub para libutil:

echo "int main() { return 0; }" > dummy.c
gcc -shared -o /usr/lib/libutil.so dummy.c

Clonagem, Compilação e Instalação do NeoVim

Clone o repositório do NeoVim, compile e instale o software no sistema OpenWRT.

git clone https://github.com/neovim/neovim
cd neovim && make CMAKE_BUILD_TYPE=RelWithDebInfo
make install

Após a conclusão, o arquivo binário nvim estará localizado em /usr/local/bin. Se você precisar da versão estável do NeoVim, modifique CMAKE_BUILD_TYPE=Release.

Download Direto do Arquivo Binário

Se você não quiser compilar o NeoVim e tiver uma arquitetura X86_64 OpenWRT, pode baixar diretamente o arquivo binário pré-compilado.

init.vim/neovim.7z at main · moreoronce/init.vim

Este conteúdo foi auxiliado por Inteligência Artificiado, mas escrito e revisado por um humano.
Via Dev.to

Leave a Comment

Exit mobile version