为了能运行公司的客户端程序,提示需要升级glibc,为了成功升级glibc,先把内核从2.6.9 升级到了2.6.16。因为弄了两三天。还是记之。
1. 升级内核 http://www.docin.com/p-384415357.html
可以通过如下网站下载源码包,这里下载linux-2.6.36.tar.gz http://www.kernel.org/pub/linux/kernel/v2.6/
内核的编译安装
# tar -zxf linux-2.6.36.tar.gz -C /usr/src/ //解压到该目录/usr/src/
# cd /usr/src/linux-2.6.36/ #进入目录
# make mrproper //去除内核的依赖关系以及编译后的垃圾信息
# make menuconfig //进入菜单方式界面配置内核
如果General Setup下有如下选项 “enable deprecated sysfs features to support old userspace tools”,就勾选,不然编译安装之后会找不到原来的挂载点。
# make;make modules;make modules_install;make install //分别是编译内核、编译模块、安装模块、安装内核,注意是在linux-2.6.36/这目录下编译
内核编译中遇到的错误以及解决之道
错误一:
错误提示:Kernel panic—not syncing :vfs:unable to mount root fs on unkown—block (0,0)
错误分析:initrd-*.*.img文件有问题;未能成功挂载真正的根文件系统。
解决方法:请你确认执行了make install 命令,我就因为没有执行这条命令而浪费了一周时间(后面专门详细说明)
错误二:
错误提示:Create root device
mkrootdev: label / not found
Mounting root filesystem
mount :error 2 mounting ext3
mount :error 2 mounting none
switchroot mount failed:22
umount /initrd/dev failed :2
kernel panic-not synicncing :Attempted to kill init .
(错误提示是不是有点长,貌似错误很多哦,其实可能就一个原因导致)
错误分析:1、根文件系统找不到挂载点 ,修改grub.conf文件为 root=/dev/ *
2、硬盘驱动未能找到,请看看你机器的硬盘是都是 SATA盘,是的话同样恭喜你本文对你有帮助。
解决方法:
1.、修改grub.conf文件试试,具体修改点 root=/dev/* * 指的是原系统中/分区的挂载点。修改后,重启进入新内核系统,估计十有八九又会遇到如下错误提示:
Mounting root filesystem
mount :error 6 mounting ext3
mount :error 2 mounting none
switchroot mount failed:22
umount /initrd/dev failed :2
kernel panic-not synicncing :Attempted to kill init .
2、硬盘驱动未能成功找到,SCSI驱动有问题。我在内核编译升级中遇到这个问题,对内核选项选了又选,方法试了很多种,总经理都亲自来做了几次,错误依旧。最终让我无意中选正确选项,成功升级内核。
具体选项是:Device Drivers--------SCSI device support------SCSI low-level drivers----Serial ATA(SATA)support 选为 M,然后再选择相应的子选项,我选择了Intel PIIX/ICH SATA support (new)后机器就成功启动了。
错误三:
错误提示:Enforcing mode requested but no policy loaded. Halting now.
kernel panic - not syncing: Attenpted to kill init!
错误分析:原内核中启用了selinux,新内核未选择selinux的选项,不能成功启动。
解决方法:修改grub.conf文件,在root=LABEL=/ 后加入 enforcing=0
2. 升级glibhttp://www.ibm.com/developerworks/cn/linux/l-cn-glibc-upd/
config 和 make
$ cd ~/build
$ tar xjf glibc-2.5.tar.bz2
$ mkdir glibc-2.5-build
$ cd glibc-2.5-build
$ ../glibc-2.5/configure --prefix=/usr
$ make
makeinstall 前的备份(64位也备份下lib64)
# cp -a /lib /lib.2.3.5
# cd /usr# cp -a lib lib.2.3.5# cp -a bin bin.2.3.5# cp -a sbin sbin.2.3.5# cp -a include include.2.3.5
第一次make install
$ cd glibc-2.6-build
$ su# make install
出现如下错误:
/home/xyz/build/glibc-2.6-build/elf/sln
/home/xyz/build/glibc-2.6-build/elf/symlink.list
rm -f /home/xyz/build/glibc-2.6-build/elf/symlink.list
rm: relocation error: /lib/tls/libc.so.6: symbol _dl_out_of_memory, \
version GLIBC_PRIVATE not defined in file ld-linux.so.2 with link time reference
make[1]: *** [install-symbolic-link] Error 127
make[1]: Leaving directory `/home/xyz/build/glibc-2.6'
make: *** [install] Error 2
用另一个linux系统启动
# cd /mnt
# mkdir m1
# mount -t xfs /dev/mapper/vg0-lv0 /mnt/m1
# cd /mnt/m1/lib64/tls
# cp -f ../libthread_db-1.0.so .
# cp ../libc-2.6.so .
# cp ../libm-2.6.so .# cp ../libpthread-2.6.so .# cp ../librt-2.6.so .# ln -sf libc-2.6.so libc.so.6# ln -sf libm-2.6.so libm.so.6# ln -sf libpthread-2.6.so libpthread.so.0# ln -sf librt-2.6.so librt.so.1
重启,进入原系统,第二次make install
安装成功:
Your new glibc installation seems to be ok.make[1]: Leaving directory `/home/xyz/build/glibc-2.6'
查看glibc的版本:
/lib64/libc.so.6
安装时区和地区数据库(不要忘了这一步)
$ cd ~/build
$ cd glibc-2.6-build
$ su
# make localedata/install-locales
3. 安装yum http://nigelzeng.iteye.com/blog/1522554
1.下载软件包:
wget http://yum.baseurl.org/download/2.0/yum-2.0.8-1.src.rpm
2.安装(由于是RPM源码包所以安装比较特殊)
#rpmbuild --rebuild yum-2.0.8-1.src.rpm
3.进入到:/usr/src/redhat/RPMS/noarch/
4.使用rpm -ivh yum-2.0.8-1.noarch.rpm 安装
5.配置文件/etc/yum.conf
主要修改[base]和[updates]下的内容,这里我们使用centos的源:
改成这样就可用了:
yum.conf 写道
[base]
name=Red Hat Linux $releasever - $basearch - Base
baseurl=http://vault.centos.org/4.4/os/i386/
[updates]
name=Red Hat Linux $releasever - Updates
baseurl=http://vault.centos.org/4.4/updates/i386/
使用 yum update命令试试
后台更新,记录log,可以用这条命令:
yum update >> yumUpdate.log 2>&1 &