第 22.13 节 安装 code-server 和 clangd(不使用 Linux 兼容层)

警告

目前似乎不可行,待删除或改进。

需要补充说明的教程目标描述:

  • 不用安装桌面环境即可获得运行在原生 FreeBSD 环境上的集成开发环境

  • 利用熟悉的 vscode 界面和强大的 clangd 插件支援 FreeBSD 内核、驱动的开发

需要补充的教程内容:

  • 如何在服务器上通过 HTTPS 来提供 code-server 服务

code-server 安装

通过 pkg 安装依赖包

# freebsd-update install fetch #nodejs 依赖特定版本的 ssl,故必须先更新系统,或者要么你使用季度分支、要么你用 ports 编译
# pkg install git npm-node20 pkgconf libsecret llvm

# cd /usr/ports/devel/git/ && make install clean
# cd /usr/ports/devel/llvm/ && make install clean
# cd /usr/ports/www/npm-node20/ && make install clean
# cd /usr/ports/devel/pkgconf/ && make install clean
# cd /usr/ports/security/libsecret/ && make install clean

注意

在 FreeBSD 上,llvm 包提供了 clangd 的可执行文件。

FreeBSD 服务器上配置 npm 源

# npm config set registry https://registry.npmmirror.com

注意

这就是原来的淘宝镜像站。见 https://npmmirror.com

服务器上通过 npm 安装 code-server

# npm install -g --unsafe-perm code-server

故障排除

时间不对:

root@ykla:~ # npm install -g --unsafe-perm code-server
npm error code CERT_NOT_YET_VALID
npm error errno CERT_NOT_YET_VALID
npm error request to https://registry.npmmirror.com/code-server failed, reason: certificate is not yet valid
npm error A complete log of this run can be found in: /root/.npm/_logs/2024-04-12T09_27_25_743Z-debug-0.log
root@ykla:~ # date
Fri Apr 12 17:29:25 CST 2024 #时间不对,还是 4 月,实际上是 9 月
root@ykla:~ # ntpdate -u pool.ntp.org #校正时间
 4 Sep 15:10:34 ntpdate[23191]: step time server 202.112.29.82 offset +12519628.278928 sec
root@ykla:~ # date #查看校正后的时间是否正确
Wed Sep  4 15:10:43 CST 2024

服务器上安装 bash,并将当前用户 shell 设置为 zsh

# pkg install zsh
$ chsh -s /usr/local/bin/zsh
$ exit

注意

安装 zsh 的原因在于 vscode 的 Terminal Shell Integration 功能仅支持 bash、fish、pwsh 和 zsh。

https://code.visualstudio.com/docs/terminal/shell-integration

客户端上通过 ssh 端口转发方式来请求服务器启动 code-server

$ ssh -o RequestTTY=yes -L 8000:127.0.0.1:8000 user@server VSCODE_APPDATA=.local/share code-server --bind-addr=127.0.0.1:8000 --auth=none

或者

$  code-server --bind-addr 0.0.0.0:8000

客户端上访问

浏览器访问 http://127.0.0.1:8000 来使用 code-server

连贯的 vscode 文本编辑体验

在服务器上编辑 .bashrc 文件并加入以下内容

$ code-server ~/.bashrc
if [[ $TERM_PROGRAM == vscode ]]; then
  export EDITOR='code-server --wait'
fi
$ exit

在活动的 code-server 会话中运行会调用文本编辑器的命令,将自动打开新的 vscode 编辑器页面。

$ git commit

在服务器上安装 sudo 并编辑 sudoers 文件

# pkg install sudo
# visudo

在活动的 code-server 会话中使用 sudoedit 在 vscode 编辑器里对系统配置文件进行编辑。

$ sudoedit /etc/rc.conf

clangd 插件侧载

部分插件可能无法通过 Extensions 自动下载安装,因此需要前往 https://open-vsx.org 自行侧载。

在服务器上侧载 clangd 插件

$ fetch https://open-vsx.org/api/llvm-vs-code-extensions/vscode-clangd/0.1.24/file/llvm-vs-code-extensions.vscode-clangd-0.1.24.vsix
$ code-server --install-extension llvm-vs-code-extensions.vscode-clangd-0.1.24.vsix

刷新客户端浏览器页面,可以看到 clangd 插件已被侧载。

延伸阅读

推荐的 settings.json 配置

关闭 Workspace Trust

{
  "security.workspace.trust.enabled": false
}

关闭遥测

{
  "telemetry.telemetryLevel": "off"
}

编辑器自动处理空行

{
  "files.insertFinalNewline": true,
  "files.trimFinalNewlines": true,
  "files.trimTrailingWhitespace": true
}

保存文件时自动格式化代码

{
  "editor.formatOnSave": true
}

当前工作区存在 git 仓库时,后台自动运行 git fetch

{
  "git.autofetch": true
}

已知问题汇总

在 Search 当中键入关键字会获得形如以下的错误

spawn /usr/local/lib/node_modules/code-server/lib/vscode/node_modules/@vscode/ripgrep/bin/rg ENOENT

那是因为 ripgrep 二进制文件在编译期下载失败了(上游根本就没有为 FreeBSD 平台准备预先编译的 ripgrep 可执行文件)。

这里我们采用制作软链接的方式用 pkg 安装的 ripgrep 来提供 code-server 的全局搜索功能:

# pkg install ripgrep
# mkdir -p /usr/local/lib/node_modules/code-server/lib/vscode/node_modules/\@vscode/ripgrep/bin
# ln -s /usr/local/bin/rg /usr/local/lib/node_modules/code-server/lib/vscode/node_modules/\@vscode/ripgrep/bin

在 code-server 当中打开一个目录,会发现控制台输出形如以下的错误

[IPC Library: File Watcher] Loading "@parcel/watcher" failed
[IPC Library: File Watcher] Error: /usr/local/lib/node_modules/code-server/lib/vscode/node_modules/@parcel/watcher/build/Release/watcher.node: Undefined symbol "_ZTV17BruteForceBackend"

这是一个上游的已知问题。作为用户只需要知道「这对日常使用不会造成体验上的影响」就可以了。

最后更新于

FreeBSD 中文社区 2024