Ubuntu10.04升级glibc

  一、直接安装

     在Ubuntu10.04中编译源码,提示了LIBC之类的错误,详见《vim》,因此需要替换glibc库。然而使用apt-get install glibc,提示已经是最新版!说明在apt-get源里没有更新版本的glibc了。
    觉得直接编译glibc源码时间太长,于是根据网上一篇资料的提示,找到了参考资料[2]的地址,在其中找到glibc的 deb安装包,并且从中抽取出libc.so.xx文件,然后参考《vim》的参考资料[33]的方法,替换libc.so.6的链接。这时候,问题出现了:执行ls命令都会出现Segement fault!其他命令也出现类似的情况。因此是不能使用Ubuntu10.04自己去修复自己了。

   由于发现了Ubuntu10.04中其实不止有一个lib.so.6,在/lib/tls/i686/cmov/目录下有一个(上面修改的就是这个),在/lib目录下也有一个。我想,是不是要将/lib目录下的那个也要改呢?于是我借助Ubuntu12.04挂载Ubuntu10.04的硬盘,然后进去修改。结果,重新启动Ubuntu,发现根本进入不了系统,出现了Kernel panic错误,如下图:

    

    看来,这个/lib/libc.so.6是Ubuntu10.04根啊,出错了将导致全军覆没(Ubtuntu12.04的/lib目录下并没有libc.so.6!)。/lib/tls/i686/cmov目录下的libc.so.6还好,出错只是导致一些命令执行不了而已。

    逼不得已,安装了Ubuntu14.04,在执行apt-get upgrate时,终端是提示了很多地址,于是我敏感的觉察到这是Ubuntu14.04将要更新的内容的来源,于是复制出来,用浏览器打来,发现果然是Ubuntu的更新库!如参考资料[3]。于是在上面找到了一个glibc安装包。还是按照上面的方法,先替换/lib/tls/目录下的libc.so.6,这回ls命令没有出现上述的Segmentation fault了,很高兴,然后修改/lib目录下的libc.so.6(这个要借助Ubuntu12.04修改,同上)。这是,悲剧有又发生了,重启后又出现了Kernel panic。

二、编译glibc

    根据参考资料[6][7]的方法,编译glibc(glibc-2.20+glibc-linuxthreads-2.5,都从参考资料[2]处下载),在make时错误提示如下:

Ubuntu10.04升级glibc_第1张图片

    换一个glibc-linuxthreads的版本(glibc-2.20+glibc-linuxthreads-2.5),重试,configure是错误如下。

Ubuntu10.04升级glibc_第2张图片

    既然glibc-linuxthreads带来这么大的麻烦,那就不要它了。其实网上有人说,新版本的glibc不再使用glibc-linuxthreads了。在参考资料[4]中可以看到,glibc-linuxthreads最新的版本是glibc-linuxthreads-2.5,是2007年发布的,而新的glibc-2.20是2014年发布的。可见,glibc-linuxthreads的更新并没有跟上glibc。因此可以猜测,新版本的glibc不再使用glibc-linuxthreads了。

    既然这样,就直接编译glibc-2.20。根据参考资料[7]的设置,最后编译成功。这时如果仿照《vim》的参考资料[26]的方法来替换/lib/libc.so.6,结果还是Kernel panic!这就麻烦了,虽然编译好了,但是无法使用。

三、安装glibc

    在网上没有找到相关的资料,唯有靠自己了。阅读glibc源码包中的INSTALL文件,里面详细说明了编译和安装的方法。其中部分内容如下:

Ubuntu10.04升级glibc_第3张图片

    根据这个提示,configure是使用--prefix=/usr可以替换系统的glibc。这正是参考资料[6]中所使用的参数之一。于是,决定采用这个参数。

下面是我的configure参数(保存在一个firsh.sh脚本中):


    make install后发现(要将《vim》中修改的libstdc++.so.6先恢复原来的,否则报错),GUI界面没了,黑乎乎的。重启系统时提示如下:

Ubuntu10.04升级glibc_第4张图片

                                                                        图 31

    只好根据提示,输入密码,使用超级用户来维护了。进入系统后使用strings /lib/libc.so.6 | grep LIBC查看当前glibc的版本,发现已经是刚安装的那个版本了,这个和参考资料[6],说的一致。

    由于进入不了GUI界面,因此想重新编译glibc。但是进入后发现使用vim和gedit等工具时提示Segment fault。唯有借助Ubuntu12.04修改上面的firsh.sh脚本,然后在进入Ubuntu10.04,执行make clean时,提示:

Ubuntu10.04升级glibc_第5张图片

    可见,进入维护模式,不可以删除文件,就算是超级用户也不行!这样就没辙了,幸好做了一个系统备份,这个只好放弃了。

    出现上面的问题,猜测是configure参数的问题,因此改变configure参数如下:


    再次编译,然后make install,结果如下:

Ubuntu10.04升级glibc_第6张图片

    这时发现,ls命令可以正常使用,但是gedit就用不了了:Segmentation fault。重启后情况和图31一样。

参考资料

[1]ubuntu 10.04 glibc安装

[2]Index of /debian/pool/main/g/glibc

[3]Index of /ubuntu/pool/main/g/glibc

[4]gun_glibc

[5]【linux】提醒"libc.so.6: version `GLIBC_2.14' not found"系统的glibc版本太低

[6]glibc的安装编译

[7]解决 /lib/libc.so.6: version `GLIBC_2.11′ not found

[8]编译安装glibc

[9]自己编译 glibc 的问题?

[10]解决libc.so.6: version `GLIBC_2.14' not found问题

[11]ubuntu 10.04 glibc安装

你可能感兴趣的:(Ubuntu10.04升级glibc)