برنامه نویسی

استفاده از Neovim در OpenWrt – Dev Community

😀 از آنجا که من اغلب باید از طریق SSH ، از جمله پیکربندی روتر اصلی ، پیکربندی روتر جانبی (دروازه جانبی) ، OpenClash ، Adguard Home ، Mosdns و غیره ، شبکه خانگی خود را اشکال زد. jsonبا yamlوت xml پرونده های پیکربندی یا پرونده های داده ساختاری. در محیط محلی خود ، من بیشتر از Neovim استفاده می کنم ، و قبلاً مقالاتی راجع به LazyVim به اشتراک گذاشته ام. در حال حاضر ، هیچ IPK برای این نرم افزار در مخزن نرم افزار OpenWRT System وجود ندارد ، بنابراین امروز من فرآیند تهیه و نصب Neovim را در OpenWRT و مشکلات موجود در آن سازماندهی می کنم.

قبل از شروع قبل از شروع کار

برای جلوگیری از مشکلات غیرقابل کنترل در طی فرآیند تدوین و نصب ، من از یک محیط جدید ماشین مجازی برای این آموزش استفاده می کنم. این سیستم عامل از سیستم عامل ImmortalWrt ، عمومی است x86/64 معماری ، شماره نسخه 23.05.3، نسخه هسته 5.15.162، بدون هیچ بسته نرم افزاری از پیش نصب شده اضافی ، مطابق با بسته های نرم افزاری پیش فرض ارائه شده ، و فضای موجود تا حد امکان بزرگ است. فضای واقعی که من برای این عملیات استفاده کردم حدود 1.2 گرم است ، اما پس از اتمام نصب می توان آن را حذف کرد.

همچنین ، قبل از شروع عملیات زیر ، اگر از سیستم OpenWRT استفاده می کنید ، توصیه می شود تهیه نسخه پشتیبان تهیه کنید. اگر این یک سیستم ماشین مجازی است ، توصیه می شود یک پاسگاه یا نقطه پشتیبان اضافه کنید.

فرآیند گردآوری و نصب آغاز می شود و فرآیند نصب آغاز می شود

اگر نمی خواهید این روند را ببینید ، می توانید به طور مستقیم به خلاصه نگاه کنید.

ابتدا منبع مخزن نرم افزار را از طریق OPKG Package Manager به روز کنید.

opkg update
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

نتیجه بازگشت Signature check passed. و هیچ خطایی وجود ندارد ، به مرحله بعدی ادامه دهید.

از آنجا که ما نیاز به کلون کردن مخزن Neovim در GitHub از طریق GIT داریم ، به این دو بسته نرم افزاری نیاز داریم ، جایی که از GIT-HTTP برای استفاده از GIT در موقعیت های SSL استفاده می شود.

opkg install git git-http
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

در این دوره ، از جمله وابستگی ها ، در مجموع git, git-http, zlib, libcurl4, libnghttp2-14 بسته های نرم افزاری نصب شد.

مخزن neovim را از طریق کلون GIT کلون کنید و سعی کنید ساخت آن را اجرا کنید.

git clone https://github.com/neovim/neovim
cd neovim && make CMAKE_BUILD_TYPE=RelWithDebInfo
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

نتیجه خطا برگشت یافته است:

make not found
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

دلیل این امر این است که ما بسته نرم افزاری را نداریم. آن را از طریق OPKG نصب کنید و دوباره سعی کنید.

opkg install make
make CMAKE_BUILD_TYPE=RelWithDebInfo
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

نتیجه خطا برگشت یافته است:

make: cmake: No such file or directory
make: *** [Makefile:94: build/.ran-deps-cmake] Error 127
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این نشان می دهد که cmake وجود ندارد OpenWrt یک فایل نصب برای Cmake ارائه نمی دهد ، اما ما می توانیم آن را به طور غیرمستقیم نصب کنیم python-pipو نسخه اصلی Python در حال حاضر Python3 است.

opkg install python3 python3-pip
pip install cmake
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

بعد از تلاش make باز هم ، پیام خطا تغییر می کند:

- The C compiler identification is unknown
CMake Error at CMakeLists.txt:3 (project):
No CMAKE_C_COMPILER could be found.
Tell CMake where to find the compiler by setting either the environment
variable "CC" or the CMake cache entry CMAKE_C_COMPILER to the full path to
the compiler, or to the compiler name if it is in the PATH.
- Configuring incomplete, errors occurred!
make: *** [Makefile:94: build/.ran-deps-cmake] Error 1
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این بدان معنی است که کامپایلر C پیدا نشده است. ما می توانیم نصب کنیم gcc برای حل این

opkg install gcc
make CMAKE_BUILD_TYPE=RelWithDebInfo
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این تدوین مدت زمان طولانی طول کشید ، تا زمانی که خطایی در هنگام نصب رخ داد luajit:

compilation terminated.
make[5]: *** [Makefile:709: lj_parse.o] Error 1
make[4]: *** [Makefile:126: src/luajit] Error 2
make[3]: *** [CMakeFiles/luajit.dir/build.make:106: build/src/luajit-stamp/luajit-install] Error 2
make[2]: *** [CMakeFiles/Makefile2:161: CMakeFiles/luajit.dir/all] Error 2
make[1]: *** [Makefile:91: all] Error 2
make[1]: Leaving directory '/root/neovim/.deps'
make: *** [Makefile:87: deps] Error 2
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

ما می توانیم مستقیماً آن را از طریق نصب کنیم opkgبشر

opkg install luajit
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

سپس به تلاش خود ادامه دهید make، و این بار خطا تغییر می کند:

/usr/bin/ld: cannot find -ldl: No such file or directory
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این نشان می دهد که ld فرمان ندارد ldl گزینه با بررسی اسناد OpenWRT ، می توان دریافت که کارکردهای موجود در این کتابخانه ها در واقع به طور مستقیم در MUSL LIBC گنجانده شده است. با این حال ، از آنجا که برخی از ابزارها سعی می کنند صریح این کتابخانه ها را پیوند دهند ، ممکن است با یک خطای “چنین پرونده یا دایرکتوری” روبرو شوید. برای حل این مشکل ، فقط کتابخانه های خرد را برای آنها ایجاد کنید.

برای ایجاد یک فایل SH از VI استفاده کنید vi run.sh، و محتوای زیر را در پرونده وارد کنید.

cat <<EOF > /usr/lib/libdl.a
!
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
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

chmod +x run.sh
./run.sh
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

سپس ادامه دهید make CMAKE_BUILD_TYPE=RelWithDebInfo، و این بار محتوای خطا به:

/bin/sh: install: not found
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این نشان می دهد که دستور نصب یافت نمی شود. راه حل این کار نصب بسته کامل دستور نصب است:

opkg install coreutils-install
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

محتوای خطا به:

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)
Call Stack (most recent call first):
/usr/lib/python3.11/site-packages/cmake/data/share/cmake-3.30/Modules/FindPackageHandleStandardArgs.cmake:603 (_FPHSA_FAILURE_MESSAGE)
/usr/lib/python3.11/site-packages/cmake/data/share/cmake-3.30/Modules/FindGettext.cmake:81 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
src/nvim/po/CMakeLists.txt:1 (find_package)
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این نشان می دهد که GetText پیدا نشده است. در حال حاضر هیچ روش نصب سریع برای بسته های GetText وجود ندارد و ما باید با تهیه آن ، آن را نصب کنیم.

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
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

سپس به تلاش برای تهیه Neovim ادامه دهید و خطای برگشت داده شده است:

/usr/bin/ld: cannot find -lutil: No such file or directory
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

ما می توانیم با ایجاد کتابخانه های خرد ، آن را دور بزنیم:

echo "int main() { return 0; }" > dummy.c
gcc -shared -o /usr/lib/libutil.so dummy.c
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

در این مرحله ، این مجموعه اساساً کامل است و ما می توانیم با نصب ادامه دهیم.

make install
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

پرونده اجرایی باینری در واقع است /usr/local/bin، و ما می توانیم مستقیماً آن را به /usr/bin یا یک پیوند نرم در آنجا ایجاد کنید. پس از آن ، اگر می خواهید Astrovim یا LazyVim را نصب کنید ، می توانید مستقیماً آن را اجرا کنید.

وابستگی های نصب OPKG وابستگی های نصب

opkg update
opkg install git git-http python3 python3-pip make luajit gcc coreutils-install
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

وابستگی های نصب پیپ وابستگی نصب

pip install cmake 
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

کامپایل و نصب GetText را کامپایل و نصب کنید

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
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

کتابخانه های خرد ایجاد کنید که کتابخانه های خرد ایجاد کنید

vi run.sh
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

cat <<EOF > /usr/lib/libdl.a
!
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
chmod +x run.sh
./run.sh
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

echo "int main() { return 0; }" > dummy.c
gcc -shared -o /usr/lib/libutil.so dummy.c
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

مخزن کلون neovim و کامپایل و نصب مخزن کلون neovim و کامپایل و نصب و نصب

git clone https://github.com/neovim/neovim
cd neovim && make CMAKE_BUILD_TYPE=RelWithDebInfo
make install
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

پس از اتمام ، nvim پرونده باینری در /usr/local/binاگر به نسخه پایدار Neovim نیاز دارید ، اصلاح کنید CMAKE_BUILD_TYPE=Release

مستقیماً فایل باینری را بارگیری کنید مستقیماً فایل باینری را بارگیری کنید

اگر نمی خواهید خودتان آنرا کامپایل کنید و اتفاقاً یک معماری X86_64 OpenWRT دارید ، می توانید مستقیماً پرونده باینری را که برای استفاده تهیه کردم ، بارگیری کنید.

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

💡 اگر در مورد نصب یا استفاده از OpenWRT سؤالی دارید ، لطفاً در پایین نظر خود را بگذارید و بیایید با هم ارتباط برقرار کنیم

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا