远程终端上的Mac OS X Sierra无法再使用CVS。

3

在升级到macOS Sierra后,我的cvs(是的,我仍在使用cvs)存储库无法从远程计算机访问。我仍然可以使用终端窗口访问本地机器上的cvs命令,使用:

CVSROOT=/usr/local/cvsrep

虽然如果我使用cvs变量定义,其语法为
export CVS_RSH=ssh
export CVSROOT=:ext:twarren@tw-imac.local/usr/local/cvsrep

它也无法正常工作,会显示错误消息:
tw-imac:testcvs twarren$ cvs version
Client: Concurrent Versions System (CVS) 1.12.13 (client/server)
Password:
bash: cvs: command not found

cvs程序安装在/usr/local/bin目录下(该目录已添加到环境变量PATH中)。这是mac OS X操作系统原有的旧版本cvs程序,一直适用于新版mac OS X,但在sierra版本中出现了问题。


我也遇到了同样的问题,我尝试使用Homebrew安装CVS,但仍然无法正常工作。 - Enrique Muñoz López
是的,问题似乎在于ssh身份验证成功后启动的bash shell不包含/usr/local/bin目录,因此会出现“找不到cvs命令”的错误。 - user2132980
2个回答

3

我刚遇到了同样的问题。

也就是说,远程cvs检出不起作用。

例如,cvs -z3 -d:ext:<user>@<cvs-server-ip>:<CVSROOT> co -P -r <REVISION> <MODULE>导致cvs:bad command

有三个问题:

  1. cvs在10.9中被删除了
  2. cvs通过ssh依赖于sshd PATH支持,这是硬编码的
  3. /usr/bin是无根的,即只读的。

通过使用homebrew安装cvs解决第一个问题

  • 安装homebrew,请参见:https://brew.sh
  • 然后运行brew install cvs

接下来的问题是,当您尝试运行cvs:ext时,您会发现PATH不正确,可以像这样测试:

ssh <user>@cvs-sever-ip env | grep PATH

您将看到PATH=/usr/bin:/bin:/usr/sbin:/sbin,这是sshd非交互式硬编码路径。对于非交互式ssh(由CVS用于访问homebrew cvs安装(安装在`/usr/local/bin/cvs)),您需要将/usr/local/bin添加到sshd路径。据我所知,这无法完成...非常困难...因此,最好的解决方案是在/usr/bin目录中创建符号链接。

sudo ln -s /usr/local/bin/cvs /usr/bin/cvs

这就引出了第三个问题。它不起作用,因为/usr/bin是无根的...因此只读。

您可以在恢复模式下禁用无根模式...然后执行它,然后重新启用它。

但最简单的解决方案是进入恢复模式,进入终端,然后cd /Volumes,然后导航到启动卷上的/usr/bin目录,即cd /Volumes/<bootvolume>/usr/bin

然后运行命令:

ln -s /usr/local/bin/cvs cvs

这将创建一个符号链接从/usr/bin/cvs->/usr/local/bin/cvs

重新启动回到您的操作系统,那应该可以解决问题。

您可以使用以下命令验证:

ssh <user>@<cvs-server-ip> which cvs

应返回:

/usr/bin/cvs

现在您的远程cvs检出应该可以正常工作了...


2

我找到了一种在macOS Sierra上使cvs工作的方法。问题似乎是由于ssh启动的shell的路径中不再包含/usr/local/bin目录。因此,解决方案就是将cvs可执行文件复制到/usr/bin目录中。

但是,在Sierra上实现这一点需要暂时禁用SIP。具体步骤如下:

  1. 进入恢复模式重新启动
  2. 运行终端工具
  3. 执行csrutil disable命令
  4. 重新启动

然后,我就可以复制cvs程序了。在确认它正常工作后,我重复了1-4步,只不过在第3步使用了csrutil enable命令。

注意:可能会有一些情况下,Sierra的更新会替换/usr/bin目录中的内容,因此可能需要在更新后再次执行此过程。为了便于操作,我复制了cvs模块而不是移动它,所以它仍然可在其旧位置使用。

注意2:我同意那些推荐使用git而不是cvs的人,并将在所有新项目中使用git。此外,我还将尽可能将现有项目转换为git,但很高兴在Sierra之前仍然可以使用cvs。


太好了!对我有用。复制文件后不要忘记重新启用SIP! - Dark.Rider

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接