以 FreeBSD 作为远程主机的 CLion 完全远程模式

CLion Full Remote Mode with FreeBSD as the remote host

目前CLion的Full Remote Mode只支持Linux作为远程主机OS。有没有可能有一个 FreeBSD 远程主机?

是的,你可以!

但是请注意,我是回顾性地回忆这些步骤,所以我可能错过了一两步。如果您遇到任何问题,请随时在下方留言。

  1. 当然是租FreeBSD服务器:)

  2. 将您的系统更新到最新版本。否则,您可能会在安装软件包时遇到类似 "libdl.so.1" not found 的奇怪错误。我使用的是 FreeBSD 12.0-RELEASE-p3.

  3. 创建一个用户帐户。不要忘记使其成为 wheel 的成员,并取消注释 /usr/local/etc/sudoers.

  4. 中的 %wheel ALL=(ALL) ALL
  5. 设置SSH。这一步特别棘手,因为我们需要同时使用public-key和password认证。

    1. 由于known bug,在某些情况下,远程主机必须使用密码身份验证,否则在设置工具链时会出现错误。您可以通过在 /etc/ssh/sshd_config 中设置 PasswordAuthentication yes,然后设置 sudo /etc/rc.d/sshd restart.
    2. 来启用密码验证
    3. 看来 CLion 使用 rsync 和 SSH 在本地和远程主机之间同步文件。由于某些我无法解释的原因,如果主机服务器不支持无密码 SSH 密钥登录,此过程将永远挂起。按照 this answer 创建 SSH 密钥作为额外的身份验证方式。
  6. CLion 假定远程主机 OS 为 Linux,因此我们必须修复 GNU/Linux 和 FreeBSD 之间的一些不兼容问题。

    1. 使用 sudo pkg install coreutils 安装 GNU 实用程序。
    2. 将 BSD 实用程序 stat 重命名为 sudo mv /usr/bin/stat /usr/bin/_stat
    3. 使用 代码段 1 中的内容创建 "new" 文件 /usr/bin/stat。此黑客利用了以下事实:CLion 在远程服务器上的 运行 命令之前将环境变量 JETBRAINS_REMOTE_RUN 设置为 1
    4. 执行 sudo chmod a+x /usr/bin/stat 使其可执行。
    5. 再次将 BSD 实用程序 ls 重命名为 sudo mv /bin/ls /bin/_ls
    6. 使用 代码段 2 中的内容创建一个 "new" 文件 /bin/ls,与之前一样。
    7. 最后,sudo chmod a+x /bin/ls.
  7. 使用sudo pkg install rsync cmake gcc gdb gmake安装依赖项。

  8. 现在您可以关注 official instructions,并连接到您闪亮的 FreeBSD 主机!


片段 1

#!/bin/sh
if [ -z "$JETBRAINS_REMOTE_RUN" ]
then
        exec "/usr/bin/_stat" "$@"
else
        exec "/usr/local/bin/gnustat" "$@"
fi

片段 2

#!/bin/sh
if [ -z "$JETBRAINS_REMOTE_RUN" ]
then
        exec "/bin/_ls" "$@"
else
        exec "/usr/local/bin/gls" "$@"
fi

此外,您还需要修复 GNU/Linux 和 FreeBSD 之间的另一个不兼容问题。

  1. 检查 gtar 是否安装 pkg install gtar
  2. 将 BSD 实用程序 tar 重命名为 mv /usr/bin/tar /usr/bin/_tar
  3. 使用代码段 3 中的内容创建一个 "new" 文件 /usr/bin/tar,就像以前一样。
  4. 最后,sudo chmod a+x /usr/bin/tar

片段 3

#!/bin/sh
if [ -z "$JETBRAINS_REMOTE_RUN" ]
then
        exec "/usr/bin/_tar" "$@"
else
        exec "/usr/local/bin/gtar" "$@"
fi
  1. Starting CLion 2020.1 有关 gnustat 和“ls”的说明不再相关。因为 CLion 2020.1 在 jsch-nio 库 (https://github.com/lucastheisen/jsch-nio/commit/410cf5cbb489114b5da38c7c05237f6417b9125b)

    中包含适当的修复
  2. Starting CLion 2020.2 不使用 tar --dereference 选项,因此有关 gtar 的说明 (gnutar) 也不再相关了。