如何在ubuntu上恢复受损的glibc?

时间:2017-10-26 01:08:26

标签: ubuntu glibc chroot

在正在运行的Ubuntu 16.04系统上,执行了以下命令:

$ wget https://ftp.gnu.org/gnu/libc/glibc-2.26.tar.gz
$ tar -xvzf glibc-2.26.tar.gz
$ mkdir build_gcc && cd build_gcc
$ ../glibc-2.26/configure --prefix=/usr
$ make
$ sudo checkinstall

在安装过程中,生成了错误:

Makefile:106: recipe for target 'install-symbolic-link' failed

之后,没有一个命令能够运行,导致分段错误。

显然,glibc被坏二进制文件损坏/覆盖。现在尝试通过从实时Ubuntu闪存启动并尝试重新安装libc6来恢复系统。这些做法是:

  1. 降级libc6并再次升级:

    $ sudo apt-get -o Dir=<partition_path> install libc6=2.23-0ubuntu3
    $ sudo apt-get -o Dir=<partition_path> install libc6
    

    这没有用,因为尝试chroot进入分区导致segfault:

    $ chroot <partition_path>
    
  2. 使用apt-get -o RootDir

    $ sudo apt-get -o RootDir=<partition_path> install libc6=2.23-0ubuntu3
    …
    Chrooting into <partition_path>
    E: Sub-process /usr/sbin/dpkg-preconfigure —apt || true received a segmentation fault
    E: Failure running script /usr/sbin/dpkg-preconfigure —apt || true
    

    可以看出,由于chrooting进入受损环境,它也失败了。

  3. 如何恢复系统?

1 个答案:

答案 0 :(得分:2)

使用apt-get download libc6获取包,然后

dpkg -x libc6*.dpkg /partition_path

到&#34;安装&#34;它

你的断言&#34;显然,glibc被坏的二进制文件损坏/覆盖了#34;可能不正确。可能发生的事情是libc.so.6获得了新的位,而ld-linux.so没有,反之亦然。他们必须始终匹配,或者事情中断。