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