内网非root用户使用emacs写代码的折腾之路

223 阅读2分钟

内网开发服务器,不给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

a.jpg

一开始以为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终于可以在内网正常使用了。