问候,
我的 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”。在它上面,您应该查找导致错误的系统调用。使用错误之前的几行输出编辑您的问题。