怎样编译安装glibc

2016年8月23日 | 分类: 【技术】

参考:http://www.cnblogs.com/gtarcoder/p/6015486.html

怎样更新系统的glibc:

error: Failed dependencies:
        glibc = 2.17 is needed by elrepo-release-7.0-3.el7.elrepo.noarch

参考:https://gist.github.com/harv/f86690fcad94f655906ee9e37c85b174

wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-2.17-55.el6.x86_64.rpm && wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-common-2.17-55.el6.x86_64.rpm && wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-devel-2.17-55.el6.x86_64.rpm && wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-headers-2.17-55.el6.x86_64.rpm
sudo rpm -Uvh glibc-2.17-55.el6.x86_64.rpm glibc-common-2.17-55.el6.x86_64.rpm glibc-devel-2.17-55.el6.x86_64.rpm glibc-headers-2.17-55.el6.x86_64.rpm

===============================

实证未遂!

因为发现gnutls配置过程中产生的关于glibc版本问题的报错,实际上是gnutls编译方法不对导致。所以这里仅仅是对glibc升级的一个探讨记录。窃以为除非必要,不需要对系统的glibc进行升级操作。

参考:http://www.linuxfromscratch.org/lfs/view/6.2/chapter06/glibc.html
参考:http://man.chinaunix.net/linux/lfs/htmlbook/chapter06/glibc
参考:https://kernelnewbies.org/KernelHeaders
参考:http://www.oschina.net/question/256028_235238

下载:https://www.gnu.org/software/libc/download

参考:http://blog.csdn.net/johnnywww/article/details/7623703
参考:http://liuzhigong.blog.163.com/blog/static/178272375201333155126/
参考:http://www.cnblogs.com/maydow/p/5295065
参考:http://blog.163.com/qiukl1987@126/blog/static/98095849201472011149535/
参考:https://github.com/rbenv/ruby-build/issues/914
参考:http://www.spinics.net/lists/newbies/msg57917
参考:http://blog.csdn.net/fjhyy/article/details/18960899
参考:http://www.xuebuyuan.com/1799099

参考:http://www.oschina.net/p/glibc
参考:http://bbs.chinaunix.net/thread-3595325-1-1

http://ftp.gnu.org/gnu/glibc/ 下载两个文件:
glibc-2.19.tar.gz
glibc-linuxthreads-2.5.tar.bz2
将2个文件放在桌面

git clone git://sourceware.org/git/glibc.git && cd glibc
git checkout --track -b local_glibc-2.24 origin/release/2.24/master
mkdir -v build && cd build
../configure --prefix=/usr --enable-kernel=2.6.32 --enable-obsolete-rpc
make && make check
touch /etc/ld.so.conf
make install
cp -v ../nscd/nscd.conf /etc/nscd.conf
mkdir -pv /var/cache/nscd

创建文件 /etc/nsswitch.conf :

# Begin /etc/nsswitch.conf

passwd: files
group: files
shadow: files

hosts: files dns
networks: files

protocols: files
services: files
ethers: files
rpc: files

# End /etc/nsswitch.conf
EOF

configure一节没跑通,慢慢研究。

因由:以为glibc的版本问题是gnutls编译失败的拦路虎

当启动httpd时:

service httpd stop

报错:

httpd: Syntax error on line 35 of /usr/local/apache2/conf/httpd.conf: Cannot load modules/mod_gnutls.so into server: /usr/local/apache2/modules/mod_gnutls.so: symbol gnutls_srp_set_server_credentials_file, version GNUTLS_1_4 not defined in file libgnutls.so.28 with link time reference

参考:

dbaccess: relocation error: dbaccess: symbol errno, version GLIBC_2.0 not defined in file libc.so.6 with link time reference

这个错误信息就是说,informix需要的一个glibc函数,在libc.so.6中找不到2.0版本的,估计libc.so.6中只有高版本的这个函数。libc.so.6是GLIBC的最基础的一个so,你可以用nm /lib/libc.so.6看到大量的symbol。你可以看看你的informix版本是不是太老,不行就换个版本装,要不就换OS,反正GLIBC和应用程序不匹配是相当麻烦的事。

解释:需要一个GNUTLS函数 gnutls_srp_set_server_credentials_file ,在mod_gnutls.so中找不到GNUTLS_1_4版本的,估计只有高版本的。

原因:SRP is removed from gnutls due to potential patent issues.

参考:https://bugzilla.redhat.com/show_bug.cgi?id=164148

方法:

确定问题所在:

A. 可能是GNUTLS3.3.8低版本所导致,使用高版本GNUTLS 3.3.24。
B. 可能是Mod_GNUTLS0.6低版本所导致,使用高版本Mod_GNUTLS 0.7.5。

使用命令查看:

nm /usr/local/apache2/modules/mod_gnutls.so

发现使用 GLIBC_2.2.5,而系统中版本是 glibc-2.17。

是不是因为glibc版本过低导致问题?

尝试升级:

参考:http://blog.chinaunix.net/uid-223060-id-2215317

参考:http://man.chinaunix.net/linux/lfs/htmlbook/chapter05/glibc (Glibc-2.3.2)
参考:http://docs.huihoo.com/lfs/lfs-4.0/chapter06/glibc (GLIBC_2.2.5)
参考:http://archive.linuxfromscratch.org/lfs-museum/3.2/LFS-BOOK-3.2-HTML/chapter06/glibc (GLIBC_2.2.5)
参考:http://www.linuxfromscratch.org/lfs/view/6.3/chapter06/glibc (Glibc-2.5.1)

参考:http://www.phpfans.net/ask/fansa1/5659863105
参考:http://liuzhigong.blog.163.com/blog/static/178272375201333155126/

下载:https://dev.gentoo.org/~vapier/dist/
下载:ftp://ftp.gnu.org/gnu/glibc/

依赖:

wget ftp://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.2.5.tar.gz && tar zxvf glibc-linuxthreads-2.2.5.tar.gz
wget ftp://ftp.gnu.org/gnu/glibc/glibc-crypt-2.1.tar.gz && tar zxvf glibc-crypt-2.1.tar.gz

Crypt:UFC-crypt 加密套件。 由于出口限制所以要分离出来。
LinuxThreads:Posix 1003.1c “pthread” 界面的实作。

wget https://dev.gentoo.org/~vapier/dist/glibc-2.2.5-patches-1.0.tar.bz2 && tar -xjf glibc-2.2.5-patches-1.0.tar.bz2
wget ftp://ftp.gnu.org/gnu/glibc/glibc-2.2.5.tar.gz && tar zxvf glibc-2.2.5.tar.gz && cd glibc-2.2.5
dos2unix /usr/src/glibc-2.2.5-2.patch
patch -Np1 -i ../glibc-2.2.5-2.patch &&
touch /etc/ld.so.conf &&
mkdir ../glibc-build &&
cd ../glibc-build &&
../glibc-2.2.5/configure –prefix=/usr –disable-profile \
–enable-add-ons –libexecdir=/usr/bin &&
echo “cross-compiling = no” > configparms &&
make &&
make install &&
make localedata/install-locales &&
exec /static/bin/bash –login

安装Glibc-2.3.6

下载:ftp://ftp.gnu.org/gnu/glibc/
下载:http://download.chinaunix.net/download/0004000/3823.shtml

参考:http://www.jinbuguo.com/lfs/lfs62/chapter06/glibc (Glibc-2.3.6)
参考:http://www.linuxfromscratch.org/lfs/view/6.2/chapter06/glibc (Glibc-2.3.6)

cd /usr/src
wget ftp://ftp.gnu.org/gnu/glibc/glibc-2.3.6.tar.gz && tar zxvf glibc-2.3.6.tar.gz && cd glibc-2.3.6
wget ftp://ftp.gnu.org/gnu/glibc/glibc-libidn-2.3.6.tar.gz && tar zxvf glibc-libidn-2.3.6.tar.gz