人人网如何提高自己的最近来访人气(教你刷人人网人气)

你可能注册了人人网已经2年多了,甚至更长时间,但是却发现别人的人人网人气远远比你的要高,别人都是几万,几十万的人气,而你的才几百,甚至几十,为什么呢?也许你会认为别人的人人网人气比你的远远高是因为别人确认很有人气,其实你错了,别人那么多的人人网人气都是用的一个软件提高上去的,下面我就为你揭秘这个答案。

目前有一款软件,用户非常多,名字就是CsuBoy人人网人气之星,它是专门为了提高你的人人网人气而开发的软件。使用本软件后你人人网人气奖迅速提高,不再只是几十,几百的人气,马上你也可以几万几十万的人气,涨自己的人人网人气,让别人羡慕你去吧!

这个人人网刷人气软件的下载地址是http://newest.csuboy.com,使用方法可以参考http://www.csuboy.com/read-renqi-tid-815908.html

相信你使用这个人人网刷人气软件后你的人人网人气也会暴涨,自己的最近来访将不断有人访问!

人人网新疆地区用户设置所有人可见无效的原因

有部分用户曾向我们反馈自己明明设置的“谁可以浏览我的个人主页”这一项为所有人可见但是陌生人却不能访问自己的主页,只有自己的好友可以访问,经过我们调查发现这是由于人人网限制了新疆用户的部分功能,由于政治原因新疆用户的个人人人网主页不能被陌生人访问,如果想要陌生人访问自己的主页请在非新疆地区重新注册一个新账号,并且自己的人人网个人资料中不要出现新疆字样,如家乡不要填写是新疆。然后即可正常使用。

linux解压缩在当前文件夹

tar -zcvf /home/ecshopa/public_html/uggbootf20101214.tar.gz * 进目录压缩当前目录下所有文件 tar -zxvf /home/uggbootf/public_html/uggbootf20101214.tar.gz 进目录解压到当前目录

 

unzip -o -d /var/lib/mysql mysql43.194-20101230.zip

 

 

 

linux zip命令
zip -r myfile.zip ./* 将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件.

2.unzip unzip -o -d /home/sunny myfile.zip 把myfile.zip文件解压到 /home/sunny/ -o:不提示的情况下覆盖文件; -d:-d /home/sunny 指明将文件解压缩到/home/sunny目录下;

3.其他 zip -d myfile.zip smart.txt 删除压缩文件中smart.txt文件 zip -m myfile.zip ./rpm_info.txt 向压缩文件中myfile.zip中添加rpm_info.txt文件 ——————————————————————————-

要使用 zip 来压缩文件,在 shell 提示下键入下面的命令:

zip -r filename.zip filesdir

在这个例子里,filename.zip 代表你创建的文件,filesdir 代表你想放置新 zip 文件的目录。-r 选项指定你想递归地(recursively)包括所有包括在 filesdir 目录中的文件。

要抽取 zip 文件的内容,键入以下命令:

unzip filename.zip

你可以使用 zip 命令同时处理多个文件和目录,方法是将它们逐一列出,并用空格间隔:

zip -r filename.zip file1 file2 file3 /usr/work/school

上面的命令把 file1、file2、 file3、以及 /usr/work/school 目录的内容(假设这个目录存在)压缩起来,然后放入 filename.zip 文件中。

 

 

 

tar 命令详解

-c: 建立压缩档案

-x:解压

-t:查看内容

-r:向压缩归档文件末尾追加文件

-u:更新原压缩包中的文件

这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。

-c: 建立压缩档案

-x:解压

-t:查看内容

-r:向压缩归档文件末尾追加文件

-u:更新原压缩包中的文件

下面的参数-f是必须的

-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。

# tar -cf all.tar *.jpg

这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。

# tar -rf all.tar *.gif

这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。

# tar -uf all.tar logo.gif

这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。

# tar -tf all.tar

这条命令是列出all.tar包中所有文件,-t是列出文件的意思

# tar -xf all.tar

这条命令是解出all.tar包中所有文件,-t是解开的意思

 

 

 

压缩

tar –cvf jpg.tar *.jpg //将目录里所有jpg文件打包成tar.jpg

tar –czf jpg.tar.gz *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz

tar –cjf jpg.tar.bz2 *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用bzip2压缩,生成一个bzip2压缩过的包,命名为jpg.tar.bz2

tar –cZf jpg.tar.Z *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用compress压缩,生成一个umcompress压缩过的包,命名为jpg.tar.Z

rar a jpg.rar *.jpg //rar格式的压缩,需要先下载rar for linux

zip jpg.zip *.jpg //zip格式的压缩,需要先下载zip for linux

解压

tar –xvf file.tar //解压 tar包

tar -xzvf file.tar.gz //解压tar.gz

tar -xjvf file.tar.bz2 //解压 tar.bz2

tar –xZvf file.tar.Z //解压tar.Z

unrar e file.rar //解压rar

unzip file.zip //解压zip

总结

1、*.tar 用 tar –xvf 解压

2、*.gz 用 gzip -d或者gunzip 解压

3、*.tar.gz和*.tgz 用 tar –xzf 解压

4、*.bz2 用 bzip2 -d或者用bunzip2 解压

5、*.tar.bz2用tar –xjf 解压

6、*.Z 用 uncompress 解压

7、*.tar.Z 用tar –xZf 解压

8、*.rar 用 unrar e解压

9、*.zip 用 unzip 解压

教你使用linux服务器挂载数据硬盘

首先使用 SSH登陆到阿里云服务器 SSH登陆的软件我用putty 百度里面下载。

然后使用你的ROOT账号登陆。修改密码的命令为 passwd

如何挂载数据盘如下:

第一步使用 fdisk -l 查看你的硬盘
显示如下

[root@AY110519013348b ~]# fdisk -l
Disk /dev/hda: 53.6 GB, 53687091200 bytes
255 heads, 63 sectors/track, 6527 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 6004 48227098+ 83 Linux
/dev/hda2 6005 6526 4192965 82 Linux swap / Solaris
Disk /dev/xvdb: 96.6 GB, 96636764160 bytes
255 heads, 63 sectors/track, 11748 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/xvdb1 1 11748 94365778+ 83 Linux

红色的硬盘就是我们要挂载的。

使用mount 命令进行挂载

[root@AY110519013348b ~]# mount /dev/xvdb1 /home

注:/dev/xvdb1 为你要挂载的盘(这里的/dev/xvdb1 必须要和上面使用fdisk -l命令查看到的盘一样,不然会挂载失败) /home 是要挂载的目录 一般网站数据都保存在/home/wwwroot 里面

最后再使用 mount 命令查看是否挂载成功
[root@AY110519013348b ~]# mount
/dev/hda1 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/xvdb1 on /home type ext3 (rw)

以上命令挂载后重启会自动消失。下面我介绍的是让它开机自动挂载 。

ROOT登陆后 键入命令 vi /etc/fstab

在最下面加上一条 /dev/xvdb1 /home ext3 defaults 1 1

保存退出

这里不会使用VI 进行编辑的朋友可以使用 winSCP 软件来进行修改,和FTP一样

注意空格,还有开机挂载数据盘一定要仔细检查

使用源代码将 Glibc 升级到 2.6

使用源代码将 Glibc 升级到 2.6

使用源代码将 Glibc 升级到 2.6

简介

有些软件可能要求系统的 Glibc 高于某个版本才可以正常运行。如果您的 Glibc 低于要求的版本,为了运行这些软件,您就不得不升级您的 Glibc 了 。您可以寻找已经编译好的 rpm 包或者使用源代码的方式升级 Glibc。

使用源代码方式升级 Glibc 是需要小心考虑的事情,因为整个系统几乎所有应用程序都依赖于原有的动态库,升级的时候,执行”make install”命令会打断旧的动态库链接,改为指向新的库文件。在这个过程中,不同的链接指向新旧不同版本的库文件,很容易导致系统崩溃,崩溃后,一般是无法重新启动的。

笔者使用的Linux发行版本是Mandriva Linux release 2006.0,其Glibc版本是2.3.5,内核版本是2.6.12-12mdk。由于某些需要,笔者必须升级原来的Glibc到更高的版本。经过实践,成功使用源代码的方式安全地把Glibc从2.3.5升级到2.6。使用相同的方法,也能成功升级到Glibc2.4或Glibc2.5。成功升级后,还可以在新旧不同版本的Glibc之间自由切换。

如果您需要阅读有关升级Glibc的文档,可以阅读Glibc 2 HOWTO文档,该文论述了如何从libc5升级到libc6,但是现在的Linux发行版的Glibc都已经使用libc6,更多的需要是在libc6的范围内,从低版本升级到更高的版本。另外您可以阅读Linux From Scratch项目有关如何安装Glibc的文档。笔者认为最有必要阅读的是Glibc源程序目录树下的INSTALL和FAQ文档,INSTALL详细描述了有关各编译选项的具体作用,FAQ回答了很多具体的问题。


回页首

升级Glibc的流程

为了安全升级Glibc,在升级前必须做好详细的部署和备份,即使是升级失败,系统也要能够还原为原来的状态。升级Glibc失败后,一般是无法重新启动系统的,必须使用另外一个可以启动计算机的Linux系统启动,挂载升级失败的根文件系统,恢复系统的Glibc为原来的状态。因此,准备另外一个可以启动的Linux系统,是必需的。

准备好另外一个可以启动的Linux系统后,接下来的工作是编译Glibc。编译前要执行”configure”命令,用户可以根据自己的需要,加入不同的编译选项,编译选项在INSTLL文件里有详细的说明。如果是升级当前的Glibc,必须使用–prefix=/usr选项,该选项指定当前即将编译的Glibc作为系统的标准动态库,安装的时候,Glibc会修改/lib,/usr等目录下的文件和链接。如果–prefix不是指向/usr,譬如–prefix=/glibc, 安装的时候,Glibc只会在/glibc目录下生成目录,文件以及链接,安装后的Glibc不会成为系统的标准动态库。如果不指定–prefix,Glibc缺省认为–prefix=/usr/local,安装后的Glibc也不会成为系统的标准动态库。编译Glibc的时候需要使用Linux内核的头文件,如果内核的头文件太旧,执行”make”的时候,可能会失败,这时可以在configure的时候,使用–with-headers选项指定新内核的头文件的所在目录。笔者的Mandriva Linux release 2006.0的内核头文件就不能令Glibc2.6成功编译,但是却能令Glibc2.4和Glibc2.5成功编译,使用–with-headers指向新内核的头文件后,Glibc2.6也能成功编译,下文将会有详细叙述。

Glibc安装的时候,会直接修改/lib,/usr/lib等目录下的文件和链接,为了在升级失败的情况下能够恢复系统的Glibc为原来状态,在安装新版本的Glibc之前必须对一些重要目录进行备份,至于哪些目录需要做备份,下文将会有叙述。

备份好重要目录后就可以安装Glibc了,必须由root用户执行make install命令,不同的Linux发行版,可能会有不同的结果。笔者使用的Mandriva Linux release 2006.0在这个过程中会出现错误,并且输入任何命令都无效,重新启动也无法再次进入Linux系统。出现的这样的错误是由于Coreutils的命令都是依赖于/usr/tls/目录下的链接文件,这些链接文件都指向原来的Glibc动态库文件,而/lib/ld-linux.so.2已经被改为指向新版本的Glibc动态库文件了,这些重要链接分别指向新旧不同版本的库文件,导致了执行Coreutils的命令无效。这个时候,就要用另外一个Linux系统启动,把/usr/tls/目录下的链接修改为指向新版本的Glibc的库文件。

经过上述修改,重新启动计算机,如果能重新进入原Linux系统,表明到目前为止升级过程都是正确的。这个时候,要再执行一次”make install”重新安装Glibc,正常情况下,这次不会出现任何错误,安装结束的时候,Glibc会给出安装成功的消息。如果修改/lib/tls/下的链接后重新启动计算机仍然不能进入原Linux系统,表明这次升级失败,只能再次使用另外一个Linux系统启动,挂载升级失败的根文件系统,把先前备份好的重要目录恢复为原来的名字,经过这样的恢复,一般是可以重新启动升级失败的Linux系统的。

升级的最后一步是执行”make localedata/install-locales”命令安装时区和地区数据库。

图一:升级Glibc的流程图

使用源代码将 Glibc 升级到 2.6

使用源代码将 Glibc 升级到 2.6

 


回页首

注意

本文介绍的方法在升级过程中会出现一次链接错误,系统无法输入命令,重新启动也无法进入Linux,必须使用另外一个Linux系统启动,并挂载原根文件系统,修正在升级过程中产生的错误链接,然后才能继续升级。因此在升级之前,一定要先确保拥有另外一个可启动的Linux系统。此外,还要备份下文将会论述的一些重要目录,如果最终升级失败,需要用另外一个Linux系统启动,恢复原Linux系统的Glibc为原来的版本。

建议在升级之前,详细阅读Glibc源代码包内的INSTALL和FAQ文件。


回页首

升级过程

本文假设进行编译的用户名字是xyz,用户目录是/home/xyz/,所有源代码都在/home/xyz/build/目录下编译。所有源代码压缩包都已经拷贝到/home/xyz/build/目录下。升级Glibc的Linux系统的根文件系统使用hda5分区,其文件系统格式为xfs。

1 准备另外一个可启动的Linux系统

准备另外一个可启动的Linux系统的方法有很多,可以在硬盘上安装另外一个Linux发行版,可以在DOS环境下使用loadlin.exe启动一个Linux系统,最简单的方式是使用Live CD,从光驱启动。无论使用什么形式,它都必须能挂载需要升级Glibc的根文件系统。

如果选择Live CD启动,Knoppix是一个很好的选择。您可以从Knoppix的网站下载iso文件,烧制成启动CD,也可以把Knoppix的系统文件拷贝到硬盘上,在DOS环境下,执行loadlin.exe启动。笔者使用了Knoppix 5.0.1,制作成Live CD启动。参考资料有介绍如何使用 Knoppix 进行系统恢复。

2 编译

Glibc的编译安装与一般的软件很类似,都是要经过configure,make和make install三个阶段。Glibc不能在源代码目录下编译,必须在一个空目录下编译。

编译Glibc是需要内核头文件的,笔者的Mandriva Linux release 2006.0的内核版本是2.6.12-12mdk,可以直接使用该版本内核的头文件升级到Glibc2.4 和Glibc2.5。如果升级到Glibc2.6,在make过程中,会出现以下错误:

libc_pic.os: In function `sync_file_range':
: undefined reference to `.Lpseudo_end'
collect2: ld returned 1 exit status

这是由于2.6.12-12mdk的内核头文件太旧,为了顺利编译Glibc2.6,必须使用新的内核头文件。

2.1 编译Glibc2.4或Glibc2.5

如果要升级Glibc到2.4或2.5,configure的时候只需要–prefix=/usr一个选项,意思是该Glibc将会作为系统的标准动态库。

以升级到Glibc2.5为例,执行以下命令进行编译:

$ 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

glibc-2.5.tar.bz2是Glibc2.5的源代码压缩包,执行”tar xjf glibc-2.5.tar.bz2″命令后,在~/build/目录下产生了glibc-2.5目录树,Glibc2.5的源代码就在这个目录里面。Glibc不能在源代码目录下编译,因此执行了”mkdir glibc-2.5-build”命令,生成glibc-2.5-build目录,编译Glibc2.5时产生的文件,保存在这个目录下。如果顺利,将会成功编译,不会出现错误信息。

2.2 编译Glibc2.6

如果您打算升级到Glibc2.6,使用版本为2.6.12-12mdk的内核头文件是不能成功编译的,必须使用新的内核头文件。configure的时候使用–with-headers选项指向新的内核头文件的目录。Glibc的FAQ文档明确指出最好使用最新版本的内核头文件,而且编译时需要的内核头文件的版本不需要与当前正在运行的内核版本一致。笔者试验了版本为linux-2.6.20.7和linux-2.6.18两个版本的内核头文件,编译时系统运行的内核版本是2.6.12-12mdk,都可以成功编译Glibc2.6。

为了使用新版本的内核头文件,解开新版本的内核压缩包后,在源代码目录下执行”make menuconfig”,这将会进入内核的设置页面,不需要作任何处理,直接退出并保存。然后执行”make”,不需要等待make完毕,一开始看到

SYMLINK include/asm -> include/asm-i386

就可以按下ctrl+c停止编译内核。执行”make”的目的是在内核源代码目录树内生成一些重要的文件和软链接,其中在include/目录下产生一个名为asm的软链接指向asm-i386目录,没有这个链接,Glibc2.6是无法编译的。

假设使用linux-2.6.20.7的内核头文件,执行以下命令:

$ cd ~/build
$ tar xjf linux-2.6.20.7.tar.bz2
$ cd linux-2.6.20.7
$ make menuconfig
$ make

linux-2.6.20.7.tar.bz2是2.6.20.7版本的Linux内核源代码压缩包,执行”tar xjf linux-2.6.20.7.tar.bz2″命令后,将会产生linux-2.6.20.7目录,Linux内核的源代码都在这个目录下,其中内核头文件在linux-2.6.20.7/include/下。确保linux-2.6.20.7/include/asm已经产生后,就可以停止内核的编译,然后进行Glibc2.6的编译:

$ cd ~/build
$ tar xjf glibc-2.6.tar.bz2
$ mkdir glibc-2.6-build
$ cd glibc-2.6-build
$ ../glibc-2.6/configure --prefix=/usr --with-headers=~/build/linux-2.6.20.7/include
$ make

glibc-2.6.tar.bz2是Glibc2.6的源代码压缩包,执行”tar xjf glibc-2.6.tar.bz2″命令后,在~/build/目录下产生了glibc-2.6目录树。

如果您的系统当前运行的内核已经升级到比较新的版本,例如2.6.20.7,configure的时候,就不需要–with-headers选项了,与Glibc2.4或Glibc2.5的configure命令一样,只需要–prefix=/usr选项就可以了,但是前提条件是/lib/modules/`uname -r`/source指向内核的源程序目录,您可以用以下命令查看它指向哪里:

$ ls -l /lib/modules/`uname -r`/

3.make install前的准备工作

3.1 哪些目录需要备份?

安装Glibc前必须备份好原来的系统动态库,一旦安装失败,使用另外一个Linux系统启动,挂载升级失败的根文件系统,还原Glibc为原来的状态。可是哪些目录需要备份?Glibc在安装的时候,将会修改哪个目录下的文件?

Glibc在安装时可以指定install_root选项,命令Glibc把该选项指向的目录作为根,文件都安装到这个目录下,通过观察Glibc在这个目录里生成了什么目录和文件,我们就可以知道Glibc在安装的时候到底会修改哪些目录了。假设安装到~/build/system_fake_root上:

$ cd ~/build
$ cd glibc-2.6-build
$ make install install_root=~/build/system_fake_root

安装后:

$ ls ~/build/system_fake_root
etc/  lib/  sbin/  usr/

可以看出,Glibc的make install命令会修改/etc,/lib,/sbin和/usr目录下的文件。这里最重要的是/lib和/usr。一般来说/usr目录下有很多文件,占用硬盘空间很大,实际也不需要对整个/usr目录备份,使用以下命令查看Glibc会修改/usr/下的哪些目录:

$ ls ~/build/system_fake_root/usr
bin/  include/  info/  lib/  libexec/  sbin/  share/

经分析,笔者选择了备份/lib,/usr/lib,/usr/include,/usr/sbin和/usr/bin。您当然可以备份更多的目录,不过笔者发现备份上述5个目录已经可以恢复系统的Glibc为原来的版本了。

3.2 备份目录

使用su命令切换为root。执行:

# 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

经过以上步骤,就备份了以后还原用的目录。备份的目录名字使用原目录名后加上.2.3.5后缀,目的是区分不同的Glibc版本目录。

3.3 如何还原系统的Glibc

如果升级最终失败,导致系统无法启动,就必须使用另外一个Linux系统启动,还原上述备份的目录为原来的名字。以笔者的系统为例,升级失败的根文件系统使用hda5分区,其文件系统格式为xfs,将被挂载到/mnt/m1目录。使用Knoppix 5.0.1 Live CD启动后,打开一个控制台,执行”su”命令切换为root用户,执行以下命令

# cd /mnt
# mkdir m1
# mount -t xfs /dev/hda5 /mnt/m1
# cd /mnt/m1
# rm -fr lib
# mv lib.2.3.5 lib
# cd usr
# rm -fr lib bin sbin include
# mv lib.2.3.5 lib
# mv bin.2.3.5 bin
# mv sbin.2.3.5 sbin
# mv include.2.3.5 include

执行上述命令后,Glibc已经被恢复为原来的版本,系统应该可以正常启动。

3.4 如何知道当前的Glibc版本

Mandriva Linux release 2006.0的动态库是Glibc2.3.5。执行”/lib/libc.so.6″可以知道当前的Glibc是什么版本:

$ /lib/libc.so.6
GNU C Library stable release version 2.3.5, by Roland McGrath et al.
Copyright (C) 2005 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.0.1 (4.0.1-2mdk for Mandriva Linux release 2006.0).
Compiled on a Linux 2.6.12 system on 2005-08-30.
Available extensions:
        GNU libio by Per Bothner
        crypt add-on version 2.1 by Michael Glad and others
        linuxthreads-0.10 by Xavier Leroy
        BIND-8.2.3-T5B
        NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
        Glibc-2.0 compatibility add-on by Cristian Gafton
        libthread_db work sponsored by Alpha Processor Inc
Thread-local storage support included.
For bug reporting instructions, please see:
<http://www.gnu.org/software/libc/bugs.html>.

从以上输出可以看到,当前系统的Glibc版本是2.3.5,使用Gcc4.0.1编译,编译时运行的Linux内核版本是2.6.12。

Glibc的FAQ文档给出以下程序用于查看当前的Glibc的版本:

#include <stdio.h>
#include <gnu/libc-version.h>
int main (void) { puts (gnu_get_libc_version ()); return 0; }

把上述程序写到chk_lib_v.c文件,执行以下命令编译:

gcc -o chk_lib_v chk_lib_v.c

执行chk_lib_v后有以下输出:

$ ./chk_lib_v
2.3.5

3.5 注意Coreutils依赖的动态库情况

Mandriva Linux release 2006.0系统的/lib/目录下有个tls目录。该目录下的文件是能否成功升级Glibc到2.6的关键。使用ldd命令查看Coreutils的应用程序依赖的动态库情况可以发现:

        $ ldd /bin/ls
        linux-gate.so.1 =>  (0xffffe000)
        librt.so.1 => /lib/tls/librt.so.1 (0xb7f60000)
        libtermcap.so.2 => /lib/libtermcap.so.2 (0xb7f5b000)
        libacl.so.1 => /lib/libacl.so.1 (0xb7f54000)
        libc.so.6 => /lib/tls/libc.so.6 (0xb7e26000)
        libpthread.so.0 => /lib/tls/libpthread.so.0 (0xb7e14000)
        /lib/ld-linux.so.2 (0xb7f89000)
        libattr.so.1 => /lib/libattr.so.1 (0xb7e10000)

请注意上述的librt.so.1,libc.so.6和libpthread.so.0,它们都是位于/lib/tls/,而不是/lib/。换言之,ls的执行,依赖于/lib/tls目录下的某些动态链接库文件。tls是thread-local storage,当不同的线程使用同一个全局变量的时候,各线程将会在本地保留该变量的备份,查阅参考资料可以了解更多有关tls的信息。Glibc2.4,Glibc2.5和Glibc2.6都支持tls。

/lib/tls/下有以下文件:

$ ls -l /lib/tls
总用量 1488
-rw-r--r--  1 root root 1229976  8月 30  2005 libc-2.3.5.so
lrwxrwxrwx  1 root root      13  5月 12 21:25 libc.so.6 -> libc-2.3.5.so
-rw-r--r--  1 root root  145176  8月 30  2005 libm-2.3.5.so
lrwxrwxrwx  1 root root      13  5月 12 21:25 libm.so.6 -> libm-2.3.5.so
-rw-r--r--  1 root root   84987  8月 30  2005 libpthread-0.10.so
lrwxrwxrwx  1 root root      18  5月 12 21:25 libpthread.so.0 -> libpthread-0.10.so
-rw-r--r--  1 root root   30620  8月 30  2005 librt-2.3.5.so
lrwxrwxrwx  1 root root      14  5月 12 21:25 librt.so.1 -> librt-2.3.5.so
-rw-r--r--  1 root root   22108  8月 30  2005 libthread_db-1.0.so
lrwxrwxrwx  1 root root      19  5月 12 21:25 libthread_db.so.1 -> libthread_db-1.0.so

/lib/tls目录下的文件是一些很重要的动态库及软连接,其中包括libc.so.6,它们都是指向2.3.5版本的动态库文件。

4. 安装Glibc2.6

4.1 第一次make install

切换到root用户,执行make install就开始安装Glibc了:

$ cd ~/build
$ 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

安装失败后,输入任何命令都是无效的,系统只会重复”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”的错误信息,重新启动计算机在启动中就会失败,根本无法进入原Linux系统。

出现这样的错误的原因是Coreutils的应用程序都依赖于/lib/tls/下的动态库,在make install的时候,/lib/ld-linux.so.2从原来指向ld-2.3.5.so被改为指向ld-2.6.so,但这个时候/lib/tls/libc.so.6指向的仍然是/lib/tls/libc-2.3.5.so。/lib/ld-linux.so.2和/lib/tls/libc.so.6各自指向不同版本的库文件导致了Coreutils的命令执行失败,从而make install也失败。

这个时候,就要用另外一个Linux系统启动,挂载升级失败的根文件系统,把原根文件系统的/lib/tls/下的链接全部改为指向2.6版本的库文件,具体就是/lib/tls/libc.so.6,/lib/tls/libm.so.6, /lib/tls/libpthread.so.0和/lib/tls/librt.so.1这4个软链接分别指向libc-2.6.so, libm-2.6.so,libpthread-2.6.so和librt-2.6.so。libthread_db.so.1仍然是指向libthread_db-1.0.so,但这个时候/lib/libthread_db-1.0.so已经是Glibc2.6版本的了,原/lib/tls/libthread_db-1.0.so必须被替换为Glibc2.6版本的libthread_db-1.0.so。

笔者使用Knoppix 5.0.1 Live CD启动计算机,启动后,打开一个控制台,执行”su”命令切换为root,执行以下命令:

# cd /mnt
# mkdir m1
# mount -t xfs /dev/hda5 /mnt/m1
# cd /mnt/m1/lib/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

上述命令就是把原根文件系统/lib/下的libc-2.6.so, libm-2.6.so,libpthread-2.6.so和librt-2.6.so拷贝到/lib/tls/下,并把/lib/tls/libc.so.6,/lib/tls/libm.so.6,/lib/tls/libpthread.so.0和/lib/tls/librt.so.1这4个软链接从原来指向2.3.5版本的库文件改为指向最新的2.6版本的库文件。原/lib/tls/libthread_db-1.0.so下的文件被/lib/libthread_db-1.0.so替换。

4.2 第二次make install

修改了/lib/tls/下的链接和文件后,就可以重新启动计算机,进入原Linux系统,这次将会正常启动,登陆后,执行Coreutils的命令,例如ls,已经不会出现”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”的错误信息。由于Glibc2.6没有彻底安装完毕,我们还要重新执行一次make install:

$ cd ~/build
$ cd glibc-2.6-build
$ su
# make install

这次make install将不会出现错误,如果安装成功,到最后会有以下信息提示:

Your new glibc installation seems to be ok.
make[1]: Leaving directory `/home/xyz/build/glibc-2.6'

执行/lib/libc.so.6查看Glibc的版本:

$ /lib/libc.so.6
GNU C Library stable release version 2.6, by Roland McGrath et al.
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.0.1 (4.0.1-5mdk for Mandriva Linux release 2006.0).
Compiled on a Linux >>2.6.12-12mdk<< system on 2007-05-26.
Available extensions:
        crypt add-on version 2.1 by Michael Glad and others
        Native POSIX Threads Library by Ulrich Drepper et al
        BIND-8.2.3-T5B
For bug reporting instructions, please see:
<http://www.gnu.org/software/libc/bugs.html>.

执行chk_lib_v:

$ ./chk_lib_v
2.6

这都表明当前系统的动态库已经使用了Glibc2.6。

如果把/lib/tls/下的链接改为指向2.6版本的库文件后,重新启动计算机仍然无法进入原Linux系统,就说明升级Glibc失败,只能再次使用另外一个Linux系统启动,恢复原系统的Glibc为原来的版本,请参考3.3节。

4.3 安装时区和地区数据库

虽然现在系统已经使用Glibc2.6,但是在X Window下,使用fcitx中文输入法的用户会发现按下ctrl+space不会弹出中文输入框。这是因为新的Glibc2.6还没安装时区和地区数据库。执行以下命令:

$ cd ~/build
$ cd glibc-2.6-build
$ su
# make localedata/install-locales

上述命令将会在/usr/lib/locale/下生成一个名为”locale-archive”的文件。重新启动X Window, 按下ctrl+space就可以调出中文输入框并输入中文了。

至此,升级Glibc完毕。笔者在升级到了Glibc2.6的Linux系统上使用了VMware,Openoffice,Mplayer,Skype,Firefox,Thunderbird,Vim,Fcitx等一系列软件一段时间,未发现由于升级了Glibc而导致的错误出现。

回到Glibc2.3.5成功升级后,想在Glibc2.6和原来的Glibc2.3.5之间切换是很容易的。因为安装前对Glibc2.3.5的重要目录进行了备份,只需使用另外一个Linux启动,挂载原Linux的根文件系统,把升级前备份好的/lib.2.3.5等目录的名字改为/lib等原来的名字即可。

使用Knoppix 5.0.1 Live CD启动,打开一个控制台,执行”su”命令切换为root,执行以下命令:

# cd /mnt
# mkdir m1
# mount -t xfs /dev/hda5 /mnt/m1
# cd /mnt/m1
# mv lib lib.2.6
# mv lib.2.3.5 lib
# cd usr
# mv lib lib.2.6
# mv bin bin.2.6
# mv sbin sbin.2.6
# mv include include.2.6
# mv lib.2.3.5 lib
# mv bin.2.3.5 bin
# mv sbin.2.3.5 sbin
# mv include.2.3.5 include

重新启动,系统将会使用原来的Glibc2.3.5,Glibc2.6的目录备份为原目录名后加.2.6后缀。

总结

使用源代码升级Glibc,做好升级前的准备是最重要的。首先要准备好另外一个可以启动的,能挂载原根文件系统的Linux系统。其次是对/lib,/usr/lib,/usr/include,/usr/sbin,/usr/bin等目录进行备份。成功升级后,可以在高低两个版本的Glibc之间自由切换。

升级前只要做好上述两个准备,升级系统的Glibc是安全的。

由于不同的Linux发行版的系统环境不一样,因此使用源代码升级Glibc的过程可能会有差异,为了成功升级,读者必须在升级过程中根据自己的系统的实际情况作相应的调整。

 

 

参考资料

苹果创办人乔布斯去世病逝 乔布斯辞世 终年56岁

乔布斯去世了吗 苹果总裁乔布斯去世 乔布斯去世了 乔布斯 乔布斯传
乔布斯演讲 乔布斯语录 乔布斯自传 史蒂夫乔布斯 乔布斯辞职 乔布斯去世 乔布斯辞世
苹果公司宣布,苹果创办人之一、前行政总裁乔布斯病逝,终年56岁。
乔布斯近年健康转差,患上胰脏癌及接受接肝手术,体重下降,曾多次请病假,到8月尾宣布辞任苹果行政总裁,改任主席职务,到美国时间星期三去世。苹果刚于昨日公布推出升级版智能手机iPhone4S。

10月6日早间消息,据国外媒体报道,苹果公司对外宣布前CEO乔布斯辞世。
苹果董事会声明:
我们沉痛宣布,史蒂夫·乔布斯今天去世。
史蒂夫的才华、激情和精力是无尽创新的来源,丰富和改善了我们的生活。世界因他无限美好。
他对妻子劳伦和家庭付出了极大的爱。我们向他的家人,以及所有被他的杰出天才而触动的人表达哀悼之情。
以下为英文原文:
We are deeply saddened to announce that Steve Jobs passed away today。
Steve’s brilliance, passion and energy were the source of countlessinnovations that enrich and improve all of our lives. The world isimmeasurably better because of Steve。
His greatest love was for his wife, Laurene, and his family. Ourhearts go out to them and to all who were touched by his extraordinarygifts。

新华网快讯:美国媒体5日报道说,苹果公司前首席执行官乔布斯已经去世。

苹果宣布,该公司的创始人和前首席执行官乔布斯已经去世,享年56岁。苹果发声明指出:我们对今天宣布乔布斯逝世深感痛心。乔布斯无数创新的源泉、激情和能量,丰富和改善我们生活。世界因乔布斯变得更美好。

史 蒂夫·乔布斯(Steve PaulJobs),1972年高中毕业后,在俄勒冈州波特兰市的里德学院只念了一学期的书;1974年乔布斯在一家公司找到设计电脑游戏的工作。两年 后,时年21岁的乔布斯和26岁的沃兹尼艾克在乔布斯家的车库里成立了苹果电脑公司;1985年获得了由里根总统授予的国家级技术勋章;1996年,苹果 公司重新雇用乔布斯作为其兼职顾问;1997年9月,乔布斯重返该公司任首席执行官。1997年成为《时代周刊》的封面人物;2009年被财富杂志评选为 这十年美国最佳CEO,同年当选时代周刊年度风云人物之一。2011年8月24日,乔布斯提出辞职。

苹果发布iPhone4S 发布会不见乔布斯
北京时间10月5日凌晨1点,苹果公司正式发布新一代iPhone 4S手机。新款手机外观与现在的iPhone4相同,使用了全新的天线系统,处理器速度提升,同时采用800万像素的摄像头和智能语音操作功能(暂不支持 中文)。图为苹果发布会上,苹果全球市场营销部高级副总裁Philip Schiller在发布会上介绍新款iPhone 4S手机。

论坛升级完毕

经过一夜的升级,论坛所有功能基本升级完毕,目前新增了抢楼贴,回复奖励贴等等新功能,优化了勋章系统,图酷模式等,更多细节继续完善中……