以 FreeBSD 作为远程主机的 CLion 完全远程模式
CLion Full Remote Mode with FreeBSD as the remote host
目前CLion的Full Remote Mode只支持Linux作为远程主机OS。有没有可能有一个 FreeBSD 远程主机?
是的,你可以!
但是请注意,我是回顾性地回忆这些步骤,所以我可能错过了一两步。如果您遇到任何问题,请随时在下方留言。
当然是租FreeBSD服务器:)
将您的系统更新到最新版本。否则,您可能会在安装软件包时遇到类似 "libdl.so.1" not found
的奇怪错误。我使用的是 FreeBSD 12.0-RELEASE-p3.
创建一个用户帐户。不要忘记使其成为 wheel
的成员,并取消注释 /usr/local/etc/sudoers
.
中的 %wheel ALL=(ALL) ALL
行
设置SSH。这一步特别棘手,因为我们需要同时使用public-key和password认证。
- 由于known bug,在某些情况下,远程主机必须使用密码身份验证,否则在设置工具链时会出现错误。您可以通过在
/etc/ssh/sshd_config
中设置 PasswordAuthentication yes
,然后设置 sudo /etc/rc.d/sshd restart
. 来启用密码验证
- 看来 CLion 使用
rsync
和 SSH 在本地和远程主机之间同步文件。由于某些我无法解释的原因,如果主机服务器不支持无密码 SSH 密钥登录,此过程将永远挂起。按照 this answer 创建 SSH 密钥作为额外的身份验证方式。
CLion 假定远程主机 OS 为 Linux,因此我们必须修复 GNU/Linux 和 FreeBSD 之间的一些不兼容问题。
- 使用
sudo pkg install coreutils
安装 GNU 实用程序。
- 将 BSD 实用程序
stat
重命名为 sudo mv /usr/bin/stat /usr/bin/_stat
。
- 使用 代码段 1 中的内容创建 "new" 文件
/usr/bin/stat
。此黑客利用了以下事实:CLion 在远程服务器上的 运行 命令之前将环境变量 JETBRAINS_REMOTE_RUN
设置为 1
。
- 执行
sudo chmod a+x /usr/bin/stat
使其可执行。
- 再次将 BSD 实用程序
ls
重命名为 sudo mv /bin/ls /bin/_ls
。
- 使用 代码段 2 中的内容创建一个 "new" 文件
/bin/ls
,与之前一样。
- 最后,
sudo chmod a+x /bin/ls
.
使用sudo pkg install rsync cmake gcc gdb gmake
安装依赖项。
- 现在您可以关注 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 之间的另一个不兼容问题。
- 检查
gtar
是否安装 pkg install gtar
- 将 BSD 实用程序
tar
重命名为 mv /usr/bin/tar /usr/bin/_tar
- 使用代码段 3 中的内容创建一个 "new" 文件
/usr/bin/tar
,就像以前一样。
- 最后,
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
Starting CLion 2020.1 有关 gnustat 和“ls”的说明不再相关。因为 CLion 2020.1 在 jsch-nio 库 (https://github.com/lucastheisen/jsch-nio/commit/410cf5cbb489114b5da38c7c05237f6417b9125b)
中包含适当的修复
Starting CLion 2020.2 不使用 tar --dereference
选项,因此有关 gtar 的说明 (gnutar) 也不再相关了。
目前CLion的Full Remote Mode只支持Linux作为远程主机OS。有没有可能有一个 FreeBSD 远程主机?
是的,你可以!
但是请注意,我是回顾性地回忆这些步骤,所以我可能错过了一两步。如果您遇到任何问题,请随时在下方留言。
当然是租FreeBSD服务器:)
将您的系统更新到最新版本。否则,您可能会在安装软件包时遇到类似
"libdl.so.1" not found
的奇怪错误。我使用的是 FreeBSD 12.0-RELEASE-p3.创建一个用户帐户。不要忘记使其成为
wheel
的成员,并取消注释/usr/local/etc/sudoers
. 中的 设置SSH。这一步特别棘手,因为我们需要同时使用public-key和password认证。
- 由于known bug,在某些情况下,远程主机必须使用密码身份验证,否则在设置工具链时会出现错误。您可以通过在
/etc/ssh/sshd_config
中设置PasswordAuthentication yes
,然后设置sudo /etc/rc.d/sshd restart
. 来启用密码验证
- 看来 CLion 使用
rsync
和 SSH 在本地和远程主机之间同步文件。由于某些我无法解释的原因,如果主机服务器不支持无密码 SSH 密钥登录,此过程将永远挂起。按照 this answer 创建 SSH 密钥作为额外的身份验证方式。
- 由于known bug,在某些情况下,远程主机必须使用密码身份验证,否则在设置工具链时会出现错误。您可以通过在
CLion 假定远程主机 OS 为 Linux,因此我们必须修复 GNU/Linux 和 FreeBSD 之间的一些不兼容问题。
- 使用
sudo pkg install coreutils
安装 GNU 实用程序。 - 将 BSD 实用程序
stat
重命名为sudo mv /usr/bin/stat /usr/bin/_stat
。 - 使用 代码段 1 中的内容创建 "new" 文件
/usr/bin/stat
。此黑客利用了以下事实:CLion 在远程服务器上的 运行 命令之前将环境变量JETBRAINS_REMOTE_RUN
设置为1
。 - 执行
sudo chmod a+x /usr/bin/stat
使其可执行。 - 再次将 BSD 实用程序
ls
重命名为sudo mv /bin/ls /bin/_ls
。 - 使用 代码段 2 中的内容创建一个 "new" 文件
/bin/ls
,与之前一样。 - 最后,
sudo chmod a+x /bin/ls
.
- 使用
使用
sudo pkg install rsync cmake gcc gdb gmake
安装依赖项。- 现在您可以关注 official instructions,并连接到您闪亮的 FreeBSD 主机!
%wheel ALL=(ALL) ALL
行
片段 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 之间的另一个不兼容问题。
- 检查
gtar
是否安装pkg install gtar
- 将 BSD 实用程序
tar
重命名为mv /usr/bin/tar /usr/bin/_tar
- 使用代码段 3 中的内容创建一个 "new" 文件
/usr/bin/tar
,就像以前一样。 - 最后,
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
Starting CLion 2020.1 有关 gnustat 和“ls”的说明不再相关。因为 CLion 2020.1 在 jsch-nio 库 (https://github.com/lucastheisen/jsch-nio/commit/410cf5cbb489114b5da38c7c05237f6417b9125b)
中包含适当的修复Starting CLion 2020.2 不使用 tar
--dereference
选项,因此有关 gtar 的说明 (gnutar) 也不再相关了。