【发布时间】:2018-05-17 22:45:45
【问题描述】:
我被这个错误困住了。无法安装任何 RPM。请帮忙
操作系统是 RHEL6.9 64 位
提前致谢。
【问题讨论】:
我被这个错误困住了。无法安装任何 RPM。请帮忙
操作系统是 RHEL6.9 64 位
提前致谢。
【问题讨论】:
当您从 RHEL(或 CentOS)7 系统上的源下载并安装 xz 时,会发生这种情况。问题是 XZ_5.1.2alpha 标签在 xz 的已发布版本中不存在,但在 RedHat 发布和编译的版本中存在。
xz 源的一个小补丁将解决问题:
https://github.com/easybuilders/easybuild-easyconfigs/issues/4036
补丁足够小,可以在这里复制和粘贴。我已经在xz-5.2.4上使用成功了。
--- src/liblzma/liblzma.map.orig 2015-09-29 12:57:36.000000000 +0200
+++ src/liblzma/liblzma.map 2017-02-22 11:10:33.432868185 +0100
@@ -95,7 +95,13 @@
lzma_vli_size;
};
-XZ_5.2 {
+XZ_5.1.2alpha {
+global:
+ lzma_stream_encoder_mt;
+ lzma_stream_encoder_mt_memusage;
+} XZ_5.0;
+
+XZ_5.2.2 {
global:
lzma_block_uncomp_encode;
lzma_cputhreads;
@@ -105,4 +111,4 @@
local:
*;
-} XZ_5.0;
+} XZ_5.1.2alpha;
(更新)
如果你尝试在 CentOS 8 上使用这个 .so,你会得到 XZ_5.2 的未解析符号(例如 librpmio.so.8 想要 lzma_stream_encoder_mt@XZ_5.2)。
这是一个修改后的补丁,用于创建可在 CentOS 7 和 8 上运行的 liblzma.so.5 库:
diff -u -r xz-5.2.5/src/liblzma/common/stream_encoder_mt.c xz-5.2.5-rhel7/src/liblzma/common/stream_encoder_mt.c
--- xz-5.2.5/src/liblzma/common/stream_encoder_mt.c 2020-03-17 07:28:50.000000000 -0700
+++ xz-5.2.5-rhel7/src/liblzma/common/stream_encoder_mt.c 2021-12-06 16:18:14.976457229 -0800
@@ -1141,3 +1141,9 @@
return total_memusage + outq_memusage;
}
+
+/* http://peeterjoot.com/2019/09/20/an-example-of-linux-glibc-symbol-versioning/ */
+__asm__(".symver lzma_stream_encoder_mt,lzma_stream_encoder_mt@XZ_5.1.2alpha");
+__asm__(".symver lzma_stream_encoder_mt,lzma_stream_encoder_mt@@XZ_5.2");
+__asm__(".symver lzma_stream_encoder_mt_memusage,lzma_stream_encoder_mt_memusage@XZ_5.1.2alpha");
+__asm__(".symver lzma_stream_encoder_mt_memusage,lzma_stream_encoder_mt_memusage@@XZ_5.2");
diff -u -r xz-5.2.5/src/liblzma/liblzma.map xz-5.2.5-rhel7/src/liblzma/liblzma.map
--- xz-5.2.5/src/liblzma/liblzma.map 2020-03-17 07:28:54.000000000 -0700
+++ xz-5.2.5-rhel7/src/liblzma/liblzma.map 2021-12-06 15:48:05.650672828 -0800
@@ -95,6 +95,12 @@
lzma_vli_size;
};
+XZ_5.1.2alpha {
+global:
+ lzma_stream_encoder_mt;
+ lzma_stream_encoder_mt_memusage;
+} XZ_5.0;
+
XZ_5.2 {
global:
lzma_block_uncomp_encode;
@@ -105,4 +111,4 @@
local:
*;
-} XZ_5.0;
+} XZ_5.1.2alpha;
【讨论】:
lzma_stream_encoder_mt@@XZ_5.2'|lzma_stream_encoder_mt@XZ_5.1.2alpha']。我做错了什么?
自 2017 年 11 月 27 日以来,当我从 CentOS 7.4 上的源安装 XZ Utils 5.2.3 并将 liblzma.so.5.2.3 从 /usr/local/lib/ 复制到 /lib64/ 时,我遇到了类似的问题。
这个问题的原因是库librpmio.so.3 需要在lzma 共享库中定义符号XZ_5.1.2alpha。 liblzma.so.5.2.2 定义了这个符号,但 liblzma.so.5.2.3 没有。
如果没有 XZ 更新,最新版本的 lzma 库是 5.2.2,我有符号链接 /lib64/liblzma.so.5 -> /lib64/liblzma.so.5.2.2。在复制liblzma.so.5.2.3 和一些进一步的更新后,链接已更改为最新文件,即/lib64/liblzma.so.5 -> /lib64/liblzma.so.5.2.3。这破坏了rpm 和yum 命令。
所以,解决办法是:
将/lib64/liblzma.so.5 链接回/lib64/liblzma.so.5.2.2:
cd /lib64
sudo ln -s -f liblzma.so.5.2.2 liblzma.so.5
删除文件/lib64/liblzma.so.5.2.3
第二个可能的原因可能是环境变量LD_LIBRARY_PATH。检查它是否包含不需要的路径并将其清除。
【讨论】:
就我而言:
将 /etc/bashr and ~/.bashrc 中包含导出到变量“LD_LIBRARY_PATH”的行标记为 cmets
【讨论】:
只需删除liblzma.so.5.2.3,yum 就会再次运行。它因为https://software.intel.com/en-us/cluster-checker-user-guide-getting-started 中的source psxevars.sh 而坏了。
【讨论】:
光环队。
我在启动 nautilus 时也遇到了同样的问题。我在 xz 5.2.4 附带的 centos 8 中
nautilus: /lib64/liblzma.so.5: version `XZ_5.2.2' not found (required by /lib/libarchive.so.13)
nautilus: /lib64/liblzma.so.5: version `XZ_5.1.2alpha' not found (required by /lib/libarchive.so.13)
下载xz-5.2.5.tar.gz 并通过 Nemo 应用补丁。我把它编译成/usr/local/lib 并做了一个模拟链接。 ln -s /usr/local/lib/liblzma.so.5.2.5 /usr/lib64/liblzma.so.5 排序鹦鹉螺但是
破坏系统。 dnf 和其他几乎所有东西都会中断。
# dnf list installed kernel
Traceback (most recent call last):
File "/usr/lib64/python3.6/site-packages/libdnf/error.py", line 14, in swig_import_helper
return importlib.import_module(mname)
File "/usr/lib64/python3.6/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 994, in _gcd_import
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 658, in _load_unlocked
File "<frozen importlib._bootstrap>", line 571, in module_from_spec
File "<frozen importlib._bootstrap_external>", line 922, in create_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
ImportError: /lib64/liblzma.so.5: version `XZ_5.2' not found (required by /lib64/librpmio.so.8)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/bin/dnf", line 57, in <module>
from dnf.cli import main
File "/usr/lib/python3.6/site-packages/dnf/__init__.py", line 30, in <module>
import dnf.base
File "/usr/lib/python3.6/site-packages/dnf/base.py", line 29, in <module>
import libdnf.transaction
File "/usr/lib64/python3.6/site-packages/libdnf/__init__.py", line 8, in <module>
from . import error
File "/usr/lib64/python3.6/site-packages/libdnf/error.py", line 17, in <module>
_error = swig_import_helper()
File "/usr/lib64/python3.6/site-packages/libdnf/error.py", line 16, in swig_import_helper
return importlib.import_module('_error')
File "/usr/lib64/python3.6/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
ModuleNotFoundError: No module named '_error'
当我执行ldconfig 时,它会返回 sim 链接以指向 5.2.4。
为了生存,我必须暂时在每次登录时循环该过程。那就是创建一个模拟链接启动鹦鹉螺然后做ldconfig。但是,如果有一个永久的解决方案,请分享。 centos8 需要 XZ_5.2 而不是 XZ_5.2.2
这是我修补的 xz-5.2.5/src/libzma.map
XZ_5.0 {
global:
lzma_alone_decoder;
lzma_alone_encoder;
lzma_auto_decoder;
lzma_block_buffer_bound;
lzma_block_buffer_decode;
lzma_block_buffer_encode;
lzma_block_compressed_size;
lzma_block_decoder;
lzma_block_encoder;
lzma_block_header_decode;
lzma_block_header_encode;
lzma_block_header_size;
lzma_block_total_size;
lzma_block_unpadded_size;
lzma_check_is_supported;
lzma_check_size;
lzma_code;
lzma_crc32;
lzma_crc64;
lzma_easy_buffer_encode;
lzma_easy_decoder_memusage;
lzma_easy_encoder;
lzma_easy_encoder_memusage;
lzma_end;
lzma_filter_decoder_is_supported;
lzma_filter_encoder_is_supported;
lzma_filter_flags_decode;
lzma_filter_flags_encode;
lzma_filter_flags_size;
lzma_filters_copy;
lzma_filters_update;
lzma_get_check;
lzma_index_append;
lzma_index_block_count;
lzma_index_buffer_decode;
lzma_index_buffer_encode;
lzma_index_cat;
lzma_index_checks;
lzma_index_decoder;
lzma_index_dup;
lzma_index_encoder;
lzma_index_end;
lzma_index_file_size;
lzma_index_hash_append;
lzma_index_hash_decode;
lzma_index_hash_end;
lzma_index_hash_init;
lzma_index_hash_size;
lzma_index_init;
lzma_index_iter_init;
lzma_index_iter_locate;
lzma_index_iter_next;
lzma_index_iter_rewind;
lzma_index_memusage;
lzma_index_memused;
lzma_index_size;
lzma_index_stream_count;
lzma_index_stream_flags;
lzma_index_stream_padding;
lzma_index_stream_size;
lzma_index_total_size;
lzma_index_uncompressed_size;
lzma_lzma_preset;
lzma_memlimit_get;
lzma_memlimit_set;
lzma_memusage;
lzma_mf_is_supported;
lzma_mode_is_supported;
lzma_physmem;
lzma_properties_decode;
lzma_properties_encode;
lzma_properties_size;
lzma_raw_buffer_decode;
lzma_raw_buffer_encode;
lzma_raw_decoder;
lzma_raw_decoder_memusage;
lzma_raw_encoder;
lzma_raw_encoder_memusage;
lzma_stream_buffer_bound;
lzma_stream_buffer_decode;
lzma_stream_buffer_encode;
lzma_stream_decoder;
lzma_stream_encoder;
lzma_stream_flags_compare;
lzma_stream_footer_decode;
lzma_stream_footer_encode;
lzma_stream_header_decode;
lzma_stream_header_encode;
lzma_version_number;
lzma_version_string;
lzma_vli_decode;
lzma_vli_encode;
lzma_vli_size;
};
XZ_5.1.2alpha {
global:
lzma_stream_encoder_mt;
lzma_stream_encoder_mt_memusage;
} XZ_5.0;
XZ_5.2.2 {
global:
lzma_block_uncomp_encode;
lzma_cputhreads;
lzma_get_progress;
lzma_stream_encoder_mt;
lzma_stream_encoder_mt_memusage;
local:
*;
} XZ_5.1.2alpha;
如何在此文件或 5.2.5 src 树中的任何其他 src 文件中修改 XZ_5.2?
【讨论】: