未找到 svnserve 命令

未找到 svnserve 命令

我的 svn 设置已经运行多年了,现在突然就不行了。我正在使用 svn+ssh。我可以直接通过 ssh 进入服务器,然后就可以运行,type svnserve这样就可以了svnserve is /usr/local/bin/svnserve,我也可以从客户端执行以下操作:

ssh -p 1234 user@myserver "sh -l -c 'type svnserve'" 

并得到与上面相同的响应。但是当我运行

svn list -v svn+ssh://user@myserver/my_repo

SSH 身份验证成功后,它会给我sh: svnserve: command not found。如果我直接在服务器上执行此操作而不使用 ssh,我可以正常列出 repo。有人可以帮忙吗?谢谢

ps 我是唯一使用这个 svn 服务器的用户。

答案1

我想到了

  1. 创建 svnwrapper.sh(vi svnwrapper.sh

    /bin/sh #!/bin/sh 复制代码

    #设置 umask,使文件为组可写 umask 002

    #调用‘真正的’ svnserve,同时传递默认的 repo 位置 exec /usr/local/bin/svnserve "$@" -r /

  2. 将其保存在用户目录中,例如/var/services/homes/my_user - 这是在 synolgy NAS 上

  3. chmod 755 svnwrapper.sh

  4. cd /usr/bin

  5. ln -s /var/services/homes/my_user/svnwrapper.sh svnserve

  6. vi .bashrc在 /var/services/homes/my_user 中创建 .bashrc( ) chmod 755 .bashrc ,.bashrc 的内容为

    /bin/sh #!/bin/sh 复制代码

    导出 PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin:$PATH"

请注意exec /usr/local/bin/svnserve "$@" -r /,在 svnwrapper 中,这将允许您在客户端的 repo 中使用完整路径,将最后一个/路径替换为您想要启动 repos 的路径。

答案2

在我们的例子中,运行

ln -s /var/packages/SVN/target/bin/svnserve /usr/bin/svnserve

在 Synology 上。

答案3

非常感谢!<3这拯救了我们公司的 SVN!:)

看起来最近的 DSM 和 SVN 更新组合一定在深层次上造成了一些问题。通过终端跟踪 SSH 和 SVN 错误消息,似乎罪魁祸首是启动 SH 进程并尝试运行 svnserve 的计算机用户找不到的 svnserve 二进制文件。

但是,对于该问题还有一个更简单(并且理所当然的,粗暴)的解决方案,不需要任何包装器或脚本或 BASH 配置文件:只需在其 Synology 包路径中创建一个全局可用的 SymLink 到 svnserve 二进制文件的实际位置。

Synology SVN 包中的 svnserve 位于此处:/var/packages/SVN/target/bin/svnserve

我最终要做的就是在 /usr/bin/ 文件夹中创建指向该文件的 SymLink,现在一切都可以按预期工作了。

然后通过 SSH 登录

cd /usr/bin
ln -s /var/packages/SVN/target/bin/svnserve svnserve

这应该可以解决问题。“在这里有效。” :)

如果没有您的指导,我们可能仍然会惊慌失措并寻找解决方案,所以再次感谢您解决这个问题!

相关内容