我负责维护计算机,编写软件来控制实验并收集我工作的研究实验室的数据。我在办公桌上的 OS X 机器上运行一个 subversion 服务器(使用 brew 安装)。这样,我就可以在任何实验室计算机上更改软件,并使所有站点保持同步。我机器上的 subversion 服务器已在 /Library/LaunchDaemons 中设置并运行多年,最初在 G5 PowerMac 上运行 10.5 以下版本,最终转移到我当前的 Intel iMac。我更新到 Yosemite 并执行了,brew upgrade
现在 svnserve 不再响应客户端。这是我当前来自 /Library/LaunchDaemons 的 org.apache.subversion.svnserve.plist 文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<true/>
<key>StandardErrorPath</key>
<string>/Users/Shared/subversion/svnserve_err.log</string>
<key>Umask</key>
<integer>2</integer>
<key>UserName</key>
<string>steve</string>
<key>GroupName</key>
<string>everyone</string>
<key>Label</key>
<string>org.apache.subversion.svnserve</string>
<key>RunAtLoad</key>
<true/>
<key>Program</key>
<string>/usr/local/bin/svnserve</string>
<key>ProgramArguments</key>
<array>
<string>svnserve</string>
<string>--inetd</string>
<string>--root=/Users/Shared/subversion</string>
<string>--log-file=/Users/Shared/subversion/svn.log</string>
</array>
<key>ServiceDescription</key>
<string>SVN Version Control System</string>
<key>Sockets</key>
<dict>
<key>Listeners</key>
<array>
<dict>
<key>Bonjour</key>
<true/>
<key>SockServiceName</key>
<string>svn</string>
</dict>
</array>
</dict>
<key>inetdCompatibility</key>
<dict>
<key>Wait</key>
<false/>
</dict>
</dict>
</plist>
它似乎在启动时运行:
/Library/LaunchDaemons 502 $ sudo launchctl list | grep svnserve
82245 0 org.apache.subversion.svnserve
如果我从客户端(包括运行 svnserve 的机器)运行需要服务器响应的 svn 命令,它会挂起。如果我sudo launchctl unload org.apache.subversion.svnserve.plist
在客户端挂起时执行此操作,客户端命令会失败,并显示以下内容:
svn: E000054: Unable to connect to a repository at URL 'svn://steveimac.local/igor/trunk'
svn: E000054: Can't read from connection: Connection reset by peer
因此看起来确实有某种通信尝试。如果我这样做sudo launchctl unload org.apache.subversion.svnserve.plist
并尝试运行 svn 客户端命令,我会得到Can't connect to host 'steveimac.local': Connection refused
预期的结果。
计算机的“安全和隐私”偏好设置中已关闭防火墙
svn.log
和文件svnserve_err.log
都是空的。
我将StandardOutPath
密钥添加到 plist 中。stdout 文件中充满了许多副本( success ( 2 2 ( ) ( edit-pipeline svndiff1 absent-entries commit-revprops depth log-revprops atomic-revprops partial-replay inherited-props ephemeral-txnprops file-revs-reverse ) ) )
。大约三十秒后,文件大小超过一兆字节。我不知道这是否正常。
svnserve 版本:
/Library/LaunchDaemons 503 $ /usr/local/bin/svnserve --version
svnserve, version 1.8.13 (r1667537)
compiled Jun 5 2015, 19:21:21 on x86_64-apple-darwin14.3.0
Copyright (C) 2014 The Apache Software Foundation.
This software consists of contributions made by many people;
see the NOTICE file for more information.
Subversion is open source software, see http://subversion.apache.org/
The following repository back-end (FS) modules are available:
* fs_fs : Module for working with a plain file (FSFS) repository.
Cyrus SASL authentication is available.
我不确定下一步该做什么来尝试排除故障。
对评论中问题的回答:
权限看起来没问题:
/Users/Shared/subversion 495 $ ls -l ig*
igor:
total 16
-rw-r--r-- 1 steve wheel 229 Dec 8 2008 README.txt
drwxr-xr-x 5 steve wheel 170 Dec 8 2008 conf
drwxr-xr-x 2 steve wheel 68 Dec 8 2008 dav
drwxr-xr-x 12 steve wheel 408 Jul 15 10:33 db
-r--r--r-- 1 steve wheel 2 Dec 8 2008 format
drwxr-xr-x 11 steve wheel 374 Dec 8 2008 hooks
drwxr-xr-x 4 steve wheel 136 Dec 8 2008 locks
igor-mike:
total 16
-rw-r--r-- 1 steve wheel 229 Jan 25 2011 README.txt
drwxr-xr-x 5 steve wheel 170 Jan 25 2011 conf
drwxr-xr-x 16 steve wheel 544 Oct 2 2013 db
-r--r--r-- 1 steve wheel 2 Jan 25 2011 format
drwxr-xr-x 11 steve wheel 374 Jan 25 2011 hooks
drwxr-xr-x 4 steve wheel 136 Jan 25 2011 locks
igorniscope:
total 16
-rw-r--r-- 1 steve wheel 229 Aug 16 2013 README.txt
drwxr-xr-x 5 steve wheel 170 Aug 16 2013 conf
drwxr-xr-x 16 steve wheel 544 Sep 13 2013 db
-r--r--r-- 1 steve wheel 2 Aug 16 2013 format
drwxr-xr-x 11 steve wheel 374 Aug 16 2013 hooks
drwxr-xr-x 4 steve wheel 136 Aug 16 2013 locks
sudo launchctl print-cache | grep svn
不返回任何内容。
我不确定launchctl plist
在这种情况下如何使用。它需要一个 Mach-O 作为参数。
使用localhost
而不是steveimac.local
会出现相同的症状。
file
通过主机上的协议访问可以正常工作:
~/Documents/deleteme 491 $ svn co file:///Users/Shared/subversion/igor/trunk igor
A igor/AcousticControl.ipf
...
A igor/AmplitudeSweep.ipf
A igor/PowerMonitor.ipf
我尝试了svn info svn://steveimac.local
并且svn info svn://localhost
它不应该访问任何特定的存储库,但它也挂起了。所以这似乎是通信问题,而不是存储库问题。端口 3690 似乎已打开。加载守护程序后,我尝试telnet localhost 3690
并能够连接。卸载守护程序后,telnet localhost 3690
返回Connection refused
。