В FreeBSD 12.0-STABLE r345345, когда я экспортирую репозиторий SVN через NFS, у меня появляется тот же симптом, что и этот вопрос :
svn: E155016: The working copy database at '/usr/src' is corrupt.
Репозиторий SVN выглядит нормально:
$ svnlite info /usr/src-12.0
Path: /usr/src-12.0
Working Copy Root Path: /usr/src-12.0
URL: svn://svn.example.com/base/stable/12
Relative URL: ^/stable/12
Repository Root: svn://svn.example.com/base
Repository UUID: ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
Revision: 341836
Node Kind: directory
Schedule: normal
Last Changed Author: zeising
Last Changed Rev: 341831
Last Changed Date: 2018-12-11 13:01:38 -0800 (Tue, 11 Dec 2018)
И я экспортирую это довольно типично, но поправьте меня, если я ошибаюсь:
$ cat /etc/exports
/usr/src-12.0 -ro -maproot=root -network 127.0.0.0/8
/usr/obj-12.0 -ro -maproot=root -network 127.0.0.0/8
$ showmount -e
Exports list on localhost:
/usr/src-12.0 127.0.0.0
/usr/obj-12.0 127.0.0.0
Первоначально я обнаружил эту проблему между двумя разными хостами, но обнаружил, что экспорта и монтирования локального хоста было достаточно, чтобы воспроизвести проблему.
Если я смонтирую этот общий ресурс NFS и осмотрю копию хранилища, смонтированную в NFS, svnlite
сообщает, что она повреждена:
# mount localhost:/usr/src-12.0 /mnt
# svnlite info /mnt
svn: E155016: The working copy database at '/mnt' is corrupt.
Копирование репо с помощью rsync
или nullfs, монтирование репо на клиенте работает нормально.
Я проверил все файлы и каталоги в дереве, выполнив проверку sha256 с помощью mtree(8)
:
# mtree -K sha256 -cp /usr/src-12.0 > mtree.out
# mount localhost:/usr/src-12.0 /mnt
# mtree -p /mnt < mtree.out
.: flags ("uarch" is not "none")
# echo $?
2
Единственное отличие, которое обнаруживает mtree, заключается в том, что в каталоге / mnt не установлен флаг uarch
:
# ls -lod /mnt /usr/src-12.0
drwxr-xr-x 25 root wheel - 40 Apr 12 14:53 /mnt/
drwxr-xr-x 25 root wheel uarch 40 Apr 12 14:53 /usr/src-12.0/
Похоже, что сам экспорт NFS создает какую-то поломку с SVN. Как я могу найти и исправить проблему?
Редактировать: После добавления:
rpc_lockd_enable="YES"
rpc_statd_enable="YES"
на сервер /etc/rc.conf
и перезагрузка сервера, sockstat показывает:
# sockstat | grep rpc
root rpc.lockd 1051 3 dgram -> /var/run/logpriv
root rpc.statd 1043 4 udp6 *:611 *:*
root rpc.statd 1043 5 tcp6 *:611 *:*
root rpc.statd 1043 6 udp4 *:611 *:*
root rpc.statd 1043 7 tcp4 *:611 *:*
root rpc.statd 1043 9 dgram -> /var/run/logpriv
root rpcbind 1019 5 stream /var/run/rpcbind.sock
root rpcbind 1019 6 udp6 *:111 *:*
root rpcbind 1019 7 udp6 *:901 *:*
root rpcbind 1019 8 tcp6 *:111 *:*
root rpcbind 1019 9 udp4 *:111 *:*
root rpcbind 1019 10 udp4 *:681 *:*
root rpcbind 1019 11 tcp4 *:111 *:*
root rpcbind 1019 13 udp6 *:* *:*
И все же клиент все еще жалуется:
# umount /mnt
# mount localhost:/usr/src-12.0 /mnt
# svnlite info /mnt
svn: E155016: The working copy database at '/mnt' is corrupt.