尝试签出 CIFS 共享上的 Subversion 存储库时出现权限错误

尝试签出 CIFS 共享上的 Subversion 存储库时出现权限错误

问候,

我的 Linux 机器 (Fedora 11) 上安装了一个 CIFS 共享。此共享包含一个 Subversion 工作副本,我在远程机器上本地使用它。远程机器是运行 Samba 的 Linux 机器。

我现在想使用我机器上的存储库,这样我就不必登录远程机器进行签入和更新。但是,svn在尝试对共享执行文件操作时似乎遇到了权限问题。

例如(在我的计算机上)

$ svn update
svn: Can't open file '.svn/tempfile.tmp': Permission denied

但是,当我尝试在命令行上编辑同一个文件(例如使用vi)时,它运行良好,并且我似乎对该文件拥有完全的读/写权限。

我还尝试在我的计算机上对共享进行新的结帐:

$ svn co svn://10.212.52.226/project/trunk project
svn: Can't create directory 'project/.svn': Permission denied

但我可以手动完成:

$ mkdir project/.svn

...并且它有效。

我像这样挂载共享:

mount.cifs //10.212.52.240/myname /mnt/mdev -o "uid=myname,gid=myname,password=mypass

因此我是挂载共享上所有文件的所有者。

目前,我可以继续在远程系统上使用 subversion,它仍然运行良好。但我希望它能正常工作。我很感激您提出任何想法。

谢谢

编辑

感谢 JohnnyLambada 建议使用。以下是尝试进行颠覆性检查的输出strace的相关部分:strace

open("test/.svn/entries", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
lstat64("test", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
mkdir("test/.svn", 0777)                = -1 EACCES (Permission denied)
write(2, "svn: Can't create directory 'test"..., 59svn: Can't create directory 'test/.svn': Permission denied

这仍然令人困惑,因为我可以在命令行上创建目录(使用相同模式)。

但是,我注意到使用touch创建临时文件会导致错误:

$ touch foo
touch: setting times of `foo': Permission denied

虽然它无法重置时间戳,但它确实创建了该文件。

答案1

我在使用 D-Link DNS 323 的 CIFS 共享时也遇到了类似的问题。我尝试了各种mount.cifs选项(手册页) 直到找到nounix对我有用的方法。

nounix:禁用此挂载的 CIFS Unix 扩展。这对于一次关闭多个设置很有用。这包括 POSIX acls、POSIX 锁、POSIX 路径、符号链接支持以及从服务器检索 uids/gids/mode。这对于解决支持 Unix 扩展的服务器中的错误也很有用。

因此,就我而言,我的/etc/fstab现在看起来像这样:

//192.168.100.101/Volume_1  /nas    cifs    rw,nounix,user=,password=,uid=1000,gid=1000    0   0

我的问题和你的不太一样——我正在将 svn 存储库重新签出到新目录:

$ svn co https://example.com/project/trunk /nas/project
svn: Can't change perms of file '/nas/project/.svn/entries': Permission denied

答案2

很难知道到底出了什么问题。我会尝试在 strace 下运行命令,看看哪个系统调用出错了,错误是什么。像这样:

strace svn update >/tmp/strace.out 2>&1

您将得到一个很大的“/tmp/strace.out”文件。查看其中的文本“Permission denied”。在它上面,您应该查找导致错误的系统调用。使用错误之前的几行输出编辑您的问题。

相关内容