标签: glibc

如何在不更新 GLIBC 的情况下运行新软件?

我在旧的 Red Hat Enterprise Linux AS 4 版系统上安装了 Mathematica 9。安装后,我尝试启动 Mathematica,但出现以下消息:

/home/wcbao/M/Wolfram/Mathematica/9.0/SystemFiles/FrontEnd/Binaries/Linux-x86-64/Mathematica:/lib64/tls/libc.so.6:找不到版本`GLIBC_2.4'(需要/家/wcbao/M/Wolfram/Mathematica/9.0/SystemFiles/Libraries/Linux-x86-64/libML64i3.so)

/home/wcbao/M/Wolfram/Mathematica/9.0/SystemFiles/FrontEnd/Binaries/Linux-x86-64/Mathematica:/lib64/tls/libc.so.6:找不到版本`GLIBC_2.4'(需要/家/wcbao/M/Wolfram/Mathematica/9.0/SystemFiles/Libraries/Linux-x86-64/libQtCore.so.4)

我不想更新系统 glibc,因为它有风险,而且管理员不允许我这样做。

有人建议可以在其他地方安装新版本的 glibc,然后将程序运行为

LD_LIBRARY_PATH=/lib/new your_application
Run Code Online (Sandbox Code Playgroud)

这不会影响系统。

所以我在这里问这个方法是否真的有效。如果可行,我想知道如何一步一步地进行(我现在缺乏Linux经验,想尽快在Linux上使用Mathematica)。

编辑

我注意到有一个叫做“Ermine”的软件。它似乎可以将软件部署为不依赖外部环境的独立包。不幸的是,它是一个共享软件。所以我想既然“Ermine”能做到,那么老系统上一定有新软件的办法。

rhel glibc

20
推荐指数
1
解决办法
3万
查看次数

使用备用 libc 和 ld-linux.so hacks;清洁方法?

我有一个带有非常旧 glibc 的遗留系统,如果不进行大量的测试/验证工作,我们就无法升级它。

我现在需要在该系统上多次运行较新的程序(例如 Java 1.7)。我选择了 chroot 解决方案,在那里我打包了所有需要的库,并在 chroot 中运行服务。

虽然 chroot 非常有限,我宁愿尝试用 LD_LIBRARY_PATH 解决这个问题。不幸的是,我libc.so.6: cannot handle TLS data在尝试时遇到错误。

事实证明,我也需要/lib/ld-linux.so.2来自 chroot 的 。这有效:

LD_LIBRARY_PATH=/home/chroot/lib /home/chroot/lib/ld-linux.so.2 /home/chroot/bin/program
Run Code Online (Sandbox Code Playgroud)

但是,java通过检查/proc/self/cmdline确定从何处加载其库来挫败我的伎俩,如果二进制文件未命名为“bin/java”,则失败。java 在启动期间也执行自身,使问题进一步复杂化。

在最后努力,使这项工作,我打开了Java二进制,十六进制编辑器和替换字符串/lib/ld-linux.so.2/home/chroot/ld.so(并作出一个符号链接ld-linux.so.2),和它的工作!

但我认为每个人都会同意将每个新二进制文件的路径重写为嵌套系统的绝对路径是一个巨大的麻烦。

有谁知道使用自定义库路径(包括自定义 ld-linux.so)的更简洁方法?

dynamic-linking glibc patchelf

18
推荐指数
1
解决办法
1万
查看次数

在 debian/ubuntu 中同时安装两个 glibc

是否可以在同一台机器上安装和使用两个不同的 glibc 版本。其中一个版本仅用于运行依赖旧 glibc 二进制文件的遗留软件?

是否可以在包管理器的帮助下做到这一点(例如“安装此包及其依赖项到/opt/old-glibc),而不是可怕地管理它

ubuntu debian dynamic-linking glibc

17
推荐指数
1
解决办法
1万
查看次数

为我的 ARM SoC 交叉编译 GLIBC

我在 chroot-ed Debianarmel环境中看到了一些非常奇怪的东西。

但首先,有点背景故事......这很长,但问题很复杂,任何潜在的帮助都取决于了解完整的故事。

我有一个运行 Linux 的嵌入式 ARM SoC - 更具体地说,armel是 2.6.17 内核上的Debian Lenny。Debian的发行版本身易于升级到更高版本(sudo apt-get dist-upgrade),因此可以升至速度,到armel的版本 squeeze或甚wheezy

问题是内核是自定义的......有问题的 ARM SoC 不是主线内核的一部分,所以它在 2.6.17 几乎被放弃了。

如果您知道 Linux 和 GLIBC 是如何工作的,那么您已经可以看到问题了——GLIBC 版本是用最低支持的内核版本编译的……这已经超过了 2.6.17。因此,如果我们尝试将 chroot 转换为 Debian 压缩...

$ # From inside the little ARM machine running Debian Lenny
$ sudo debootstrap --arch armel squeeze /squeeze \
     http://ftp.whateverCountry.debian.org/debian
$ sudo -i
# mount -t proc none /squeeze/proc
# mount -t sysfs none /squeeze/sys …
Run Code Online (Sandbox Code Playgroud)

arm cross-compilation glibc

14
推荐指数
1
解决办法
7203
查看次数

缺少 GNU Linux (Arch Linux) 上的 SIGINFO

我正在开发一个应用程序,我希望它根据需要将一些运行时统计信息打印到控制台。kill我立刻想到了信号。

阅读Wiki 上的Unix 信号SIGINFO似乎是要走的路,因为:

  • 旨在为这些目的
  • 如果未实现信号处理程序,则不终止进程(与SIGUSRx- 请参阅此处相反)

但是,通过检查 的输出kill -l,似乎我的服务器没有实现此信号。

我的问题是:

  1. 为什么SIGINFO我的系统上没有?它在所有 GNU Linux 系统上都不存在吗?
  2. 有没有一种简单的(即没有内核/glibc 重新编译)方法来启用这个信号?如果没有,那么困难的方法是什么?
  3. 如果目标进程不处理,我可以使用哪些替代信号用于我的目的,不会引起任何副作用?(我已经假设没有,因为我在glibc的手册上找不到任何其他合适的信号)

Linux元信息:

Linux whatever 3.18.2-2-ARCH #1 SMP PREEMPT Fri Jan 9 07:37:51 CET 2015 x86_64 GNU/Linux

更新:我仍在寻找有关为什么此信号被有条件地排除在 BSD 之外的其他系统之外的更多信息(请参阅下面的评论)。该信号似乎对许多用途都非常有用,所以我很难相信这只是一个心血来潮的问题 - 那么这个信号在 Linux 上的真正表现是什么?

linux signals glibc

14
推荐指数
1
解决办法
5143
查看次数

如何修复“跳过不兼容的 /usr/lib/libc.a”

当我尝试在 64 位 Fedora 16 (Verne) 上构建嵌入式 Linux 目标时出现以下错误:

make[3]: Entering directory `/export/home/git/minerva-5.x/third_party/multifiles'
mips-linux-gnu-gcc -EL -O -D_GNU_SOURCE -Wall -isystem /export/home/git/minerva-5.x/cs_rootfs_1.2.15/cross_rootfs/include   -c -o md5.o md5.c
mips-linux-gnu-gcc -EL -O -D_GNU_SOURCE -Wall -isystem /export/home/git/minerva-5.x/cs_rootfs_1.2.15/cross_rootfs/include   -c -o bitmapfs.o bitmapfs.c
mips-linux-gnu-gcc -EL -O -D_GNU_SOURCE -Wall -isystem /export/home/git/minerva-5.x/cs_rootfs_1.2.15/cross_rootfs/include   -c -o mfcln.o mfcln.c
mips-linux-gnu-gcc -EL -Wl,-rpath /export/home/git/minerva-5.x/cs_rootfs_1.2.15/cross_rootfs/lib -L/export/home/git/minerva-5.x/cs_rootfs_1.2.15/cross_rootfs/lib -o mfcln md5.o bitmapfs.o mfcln.o mulfiles.h mulfiles_msg.h md5.h bitmapfs.h
gcc -O -Wall -m32 -c -o md5_x86_32.o md5.c
gcc -O -Wall -m32 -c -o mfsrv_x86_32.o mfsrv.c
gcc -O -m32 -o …
Run Code Online (Sandbox Code Playgroud)

fedora make glibc

14
推荐指数
1
解决办法
4万
查看次数

如何使 linux 'perf record' 适用于 libc 和 libstdc++ 符号?

perf record -g在 x86-64 Linux 上使用来分析程序。libc 或 libstdc++ 中的几个符号0作为父符号:例如__GI___strcmp_ssse3(libc) 和strcmp@plt(libstdc++)。(我实际上可以在调试器中打破这些符号并获得回溯。)

我很想知道这些函数的主要调用者是什么,以及为什么没有记录它们。这是因为 libc 和 libstdc++ 在 x86_64 上没有帧指针吗?而且,更实际的是,有没有办法解决这个问题?

glibc profiling perf

13
推荐指数
2
解决办法
3711
查看次数

有没有一种简单的方法来安装 glibc 的二进制版本?

我一次又一次地看到这样的问题:

这些是我们通常推动的解决方案类型:

这真的是我们能做的最好的吗?难道没有 GLIBC 的二进制版本,我们可以简单地将其解压缩到一个目录中,例如/opt/myglibc,然后设置$LD_LIBRARY_PATH或运行我们想要的任何应用程序,而不会出现任何问题?

似乎需要 GLIBC 2.14 的应用程序,例如较新版本的 Chrome (28+)?

注意:这个主题为:Google Chrome 29 Released – Install on RHEL/CentOS 6 and Fedora 19/15 on tecmint.com 最终让我想到了这个。

参考

libraries glibc

13
推荐指数
1
解决办法
4147
查看次数

Ghost 漏洞 - CVE-2015-0235

Ghost 漏洞是否需要访问(如作为登录用户)访问受影响的操作系统?有人可以澄清“能够进行应用程序调用的远程攻击者”吗?我似乎只找到直接在本地系统上运行的测试,而不是从远程主机上运行的测试。

到目前为止,我从多个来源收集的有关Ghost 漏洞的所有信息(归功于这些来源),我已在下面发布了答案,以防其他人感到好奇。

编辑,我找到了我的答案

在代码审计期间,Qualys 研究人员发现 glibc 的 __nss_hostname_digits_dots() 函数中存在缓冲区溢出。此错误可以通过所有 gethostbyname*() 函数在本地和远程触发。应用程序主要通过 gethostbyname*() 函数集访问 DNS 解析器。这些函数将主机名转换为 IP 地址。

linux security glibc vulnerability distributions

13
推荐指数
1
解决办法
7013
查看次数

uname 已损坏:如何确定当前正在运行的内核?

> uname -r
FATAL: kernel too old
> cat /proc/cmdline
FATAL: kernel too old
Run Code Online (Sandbox Code Playgroud)

/boot 中有 3 个 *.vmlinuz-linux 文件。如何确定当前正在运行哪个内核?

请注意,我在有限的环境中运行,使用的外壳最少。我也试过:

> sh -c 'read l < /proc/version; echo $l'
FATAL: kernel too old
> dd if=/proc/version
FATAL: kernel too old
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

linux glibc

13
推荐指数
3
解决办法
1907
查看次数