警告
目前似乎不可行,待删除或改进。
需要补充说明的教程目标描述:
不用安装桌面环境即可获得运行在原生 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 编辑器页面。
在服务器上安装 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"
这是一个上游的已知问题 。作为用户只需要知道「这对日常使用不会造成体验上的影响」就可以了。