内网开发服务器,不给root权限,不给网络权限。
网络渗透进去就不讲了,情况不一样。
记录下我的内网非root安装emacs写代码的折腾之路。
遇到了好多问题,热爱才让我坚持了下来,不然在内网里用着不顺手的工具,真的是煎熬。
linux服务器环境
Linux xxxx 3.10.0-957.axs7.x86_64 #1 SMP Sun May 24 08:42:07 CST 2020 x86_64 x86_64 x86_64 GNU/Linux
RedFlag Linux China Post Edition 7 SP6
gcc 版本 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
服务器内核版本蛮低的,一开始我还担心会编译有问题,结果也真的是哈。
emacs编译
如果不需要tree-sitter,直接用./confiugre 和make 出奇的顺利。
但是如果用tree-sitter就比较麻烦了,遇到了好几个问题。
tree-sitter
github获取代码拷贝进去,
make生成libtree-sitter.so.0.0
由于没有root权限,
在当前用户目录下生成了 $HOME/.local/lib和$HOME/.local/include
拷贝libtree-sitter.so.0.0到$HOME/.local/lib下并且软链接libtree-sitter.so和libtree-sitter.so.0
拷贝api.h到$HOME/.local/include/tree_sitter
emacs源码编译
./configure --with-tree-sitter
如果有别的包没有会有提醒,我这边是
./configure --with-tree-sitter --with-gif=ifavailable --with-png=ifavailable --with-gnutls=ifavailable
但是会报找不到tree-sitter
一开始以为lib没加正确,重新配置了export LD_LIBRARY_PATH=$HOME/.local/lib/
还是一样的错误。
google搜索下试了几种方式都不行,后来只能研究configure文件,发现$PKG_CONFIG这个导致了报treee-
sitter no的错误,就尝试下载pkg-config进行make和软链接到$PATH对应目录下。因为不是root的原因,我又加
了这个export PKG_CONFIG_PATH=$HOME/.local/lib/pkgconfig
pkgconfig目录下的tree-sitter.pc我是从自己docker的arch下拷贝过来的“pacman -S tree-sitter"会
在/usr/local/lib/生成pkgconfig,到此就可以了.
重新执行命令./configure --with-tree-sitter – with-gif=ifavailable --with-png=ifavailable --with-gnutls=ifavailable
lsp-bridge
因为我写代码用的lsp客户端是lsp-bridge
需要解决python的依赖包安装和lsp服务端安装的问题。
python依赖包
先从外网下载依赖包
pip3 download epc orjson sexpdata six setuptools paramiko rapidfuzz -d 保存的目录
但是发现内网pip没有,就下载pip源码,结果又少了什么包,问题是我pip都还没成功啊,
最后找到一个解决方案: python -m ensurepip --default-pip
安装好pip后,通过pip install *.whl安装,如果安装有问题,也可以一个个的安装。
lsp服务器安装
本地先安装好lsp服务器,以前端为例:
sudo npm install -g emmet-ls
sudo npm install -g vls
sudo ngp install -g typescript
再直接把node_modules里的安装好的拷贝到内网服务器。
lsp-bridge需要
tsc 软链接成 typescript-language-server
vls 软链接成 vue-language-server
其它
为了内网使用方便,又迁移了 the_silver_searcher,ripgrep和zellij
发现其中rust开发的小工具直接二进制拷贝进来挺方便的。
最后
开心,我自己的emacs终于可以在内网正常使用了。