rsync 错误未定义符号“locale_charset”

rsync 错误未定义符号“locale_charset”

当我尝试同步时,Rsync 给出了这个奇怪的错误。我认为这个错误是在升级到 Ubuntu 14.04 后开始的。

root@****:~# rsync -avvv --exclude-from '/root/rsync/exclude_nas' -e "ssh -i /root/rsync/rsync-key -p 369" /srv/nas/home/ martin@*******:/backup/martin/nas/
opening connection using: ssh -i /root/rsync/rsync-key -p 369 -l martin ****** rsync --server -******* . /backup/martin/nas/  (13 args)
/usr/local/bin/rsync: Undefined symbol "locale_charset"
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.0]
[sender] _exit_cleanup(code=12, file=io.c, line=226): about to call exit(12)

答案1

问题解决了。显然,接收服务器(FreeBSD 服务器)安装了有故障的 rsync 3.0.9 版本。将 rsync 升级到 3.1.0 后,它就可以正常工作了。

正如之前文章中提到的那样,这可能是 iconv 编译错误。

答案2

您缺少此功能,可能是因为您在编译时没有iconv支持:

$ rsync --version
rsync  version 3.1.0  protocol version 31
Copyright (C) 1996-2013 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
    append, ACLs, xattrs, iconv, symtimes, prealloc

您可以使用以下标志来测试这种功能的存在--iconv

$ touch leão

$ rsync -av --iconv=UTF-8,ISO-8859-1 leão .
sending incremental file list
leão

sent 112 bytes  received 35 bytes  294.00 bytes/sec
total size is 0  speedup is 0.00

$ ls
leão  le?o

答案3

在我们的例子中,我们使用的是本地编译的 rsync,并且库路径没有正确设置:

$ /usr/local/bin/rsync -av source dest
ld.so.1: rsync: fatal: relocation error: file /usr/local/bin/rsync: symbol locale_charset: referenced symbol not found

临时的解决方法是设置$LD_LIBRARY_PATH

$ LD_LIBRARY_PATH=/usr/local/lib /usr/local/bin/rsync -av source dest
sending incremental file list
...

正确的解决方法是使用 ldconfig 将 /usr/local/lib 添加到系统路径,但这是 Solaris 系统。我认为 Solaris 上的等效项是 crle,但不确定,我们只是坚持使用$LD_LIBRARY_PATH

答案4

我也遇到过这个未定义符号。我的解决方案是从 1.16 升级到 libiconv 1.17。尽管 libiconv.so.2.6.1 处于同一修订级别,但大小和可用功能不同(在 FreeBSD 12.3 上)。从 rsync 调用 iconv 提供了线索。谢谢

相关内容