Fedora 和 Ubuntu 上的段错误

LilyBBS discussion: Segmentation Fault on Fedora and Ubuntu

昨天和别人在小百合 LinuxUnix 版发帖讨论 Segmentation Fault 的问题,整理如下:

flyDutchMan 根据自己存在段错误的程序在 Fedora 和 Ubuntu 上的运行结果,认为 Fedora 和 Ubuntu 对段错误的处理方式不同,他的观点是(原文链接:[href: http://bbs.nju.edu.cn/vd83468/bbscon?board=LinuxUnix&file=M.1185514732.A&num=6528 ] ):

“Ubuntu认为段错误是很严重的错误,它的做法是当即中断程序。而Fedora对待段错误是比较宽容的,在Fedora中即使检测到某个进程正在对不属于它的地址空间进行操作,他仍然会完成这次“非法”的操作,并且继续执行后面的操作,只是在终端上打印出“Segment Fault”的错误。所以在这个程序中,虽然发生了段错误,Fedora仍然能运行到connect(),是整个程序顺利跑起来。”

并给出了一个 demo:

#include <stdio.h>

#define IP_ADDR_LENGTH 16
#define UMP_FUNC_NUM 6

int main() {
  char addr[IP_ADDR_LENGTH];
  addr[0] = '';
  strcat(addr, "172.16.64.181" );

  char (*taskpath)[IP_ADDR_LENGTH];

  printf("the address is %dn", &amp;taskpath[0]);

  int a;
  int b;

  sprintf(taskpath[0], "%s", addr);

  printf("taskpath[0]: %sn", taskpath[0]);
  printf("finish!n");
  fflush(stdout);

  return 0;
}

“在Ubuntu下运行,系统不会输出“ finish! ”这句,而是在输出taskpath[0]的地址后直接终止程序。注意,上面的int a; int b;声明不能省略,也不能赋值!因为如果省略或赋值,就不会产生Segment Fault!(赋值的话系统就会把这两个变量分配到Stack中,这就与对Heap操作的taskpath没有冲突了)”

我的回复是(原文链接:[href: http://bbs.nju.edu.cn/vd83468/bbscon?board=LinuxUnix&file=M.1185532985.A&num=6538 ]):

首先,我的观点,没有所谓 Fedora 和 Ubuntu 对段错误处理的不同。因为它们都是使用 Linux kernel,而内存管理只要 Kernel 的版本一样,我认为不会有不同的处理方式。

其次,我想纠正上文中的一个说法(可能有些讨人嫌哈,不过一些东西还是说清楚点儿好,因为 ls 用这个来解释自己的程序):

> 赋值的话系统就会把这两个变量分配到Stack中,这就与对Heap操作的taskpath没有冲突了

无论你赋值与否,这两个变量都是存在在 stack 中的; taskpath 也不是对 heap 进行操作,它只是存在于 stack 上的一个指针变量。

> 因为如果省略或赋值,就不会产生Segment Fault!

在我的系统中,都会产生段错误。

最后,我来给出我对这个问题的解释:

就上文的 demo 程序来说, a, b, addr, taskpath 都是存在于 stack 上的,这个很清楚,调试过 C 语言程序的人应该都知道,我就不解释了。

1. 为什么会出现段错误?

因为 taskpath 是一个野指针,在使用之前没有被赋值,所以 taskpath 会指向任何位置,对一个随机的位置进行写操作,显然会出现段错误。

2. 为什么同一个程序,定义不定义 a, b 会影响段错误出来的时间点?

虽然上面说 taskpath 会指向任何位置,但是这个说法并不完全正确。因为大家知道,taskpath 是在 stack 上的一个变量,而 stack 呢,是一直在重复使用的一个区域。要明确这一个概念,在操作系统中执行一个可执行文件,程序并不是从 main 开始的,它要先执行一段代码,也就是平常所说的 crt(c runtime)。这个一般是由 lib 提供的,其中要调用一些库函数,所以呢,在 main 执行之前, stack 被 crt 用过(这是最关键的一点)。

因为 stack 使用完是会被释放的,这也就是在调用函数时 function prologue 和 epilogue 所干的事情,开辟栈空间和恢复栈空间,主要动作就是移动栈指针。那么 taskpath 所占的位置很有可能被 crt 用过(不是一定),那么如果被 crt 写过,比如被 crt 用做保留 ebp 或者什么其他的寄存器,它的值就是确定的(在一定程度上说)。

如果 crt 在 taskpath 这个位置上保存过寄存器的值,尤其是 ebp 或者 esp,那么很有可能 taskpath 就指向此程序栈空间的某个位置。那么写 taskpath 指向的内存产生的段错误就没那么 critical,或者说操作系统对它的指针在自己栈空间中的操作比较容忍,就不会立即停止程序的运行。但是如果 crt 没有在这个位置上进行操作,那么这个位置就可能是某个垃圾地址,比如说操作系统自己的内存空间,那么写 taskpath 指向的内存就会造成很严重的后果,操作系统会立马检查出来终止它的运行。

我在 Ubuntu 7.04 下使用 gcc 4.1.2 编译、调试并反汇编的结果显示:两个程序唯一的不同是 taskpath 在堆栈上的位置,当定义 int a, b; 时,taskpath 是 $ebp -40 而这个地址没有被操作过;当不定义 int a, b; 时, taskpath 是 $ebp - 32,这个地址曾经被 crt 使用过。所以按照上面的解释,系统报段错误的时间不一样。

如果熟悉 GDB 的话,可以很容易的用调试证明这一点。计算出 crt 入口的 $ebp 和 main 中 $ebp 的差,以此计算出 taskpath 保存的位置,在上面设置 watch point,从 _init 执行到 main,看其中有没有对 taskpath 所在位置进行写操作。

3. 为什么不同的操作系统,结果不一样?
这个就比较简单了。kernel 不一样,可能内存管理的方式不一样。使用的 lib 或者 gcc 不一样,可能引起 crt 的汇编结果不一样。这两个都能导致同样的程序报错的时间不一样。

所以,不是 Fedora 或者 Ubuntu 能不能容忍段错误,没有 OS 容忍段错误,不同只是在产生段错误够不够 crucial 需要得到立即处理。

Ubuntu is so cool

上次用Breezy,还没有体验到Ubuntu的好处,这次装上Dapper,才发现Ubuntu用起来那么爽,真是很酷,怨不得有那么多FANS。

1.免费的光盘派送

虽然说这个不是起决定作用,但是能有正版的无差错的安装光盘,谁愿意去下载那些很难保证质量的光盘镜像呀,就像上次下的FedoraCore5,更新安装时候还好,起码剩个系统用,全新安装时候根本无法成功安装。

2.方便的软件安装,丰富的更新源

这也是那么多人喜欢Debian的原因,可以很方便的管理软件,而且,apt-get命令简化了很多麻烦的操作,避免了编译软件包或者直接安装时候出来的某个某个库找不到的罗嗦,直接apt-get就能把所有需要安装的部分自动下载安装好。况且,Ubuntu的更新源也很多,国内国外教育网都有,速度也还可以。

3.全面的使用和配置文档,尤其是中文文档

Ubuntu Wiki涵盖的范围非常广泛,包含了许多可能遇到的问题和解决方案,尤其是中文方面,比其他版本的要好很多,遇到问题再也不用Google半天了。

4.简单快速的系统

显然,只有一张CD,安装速度也很快,半个小时左右,比起5张CD的FC5,4张CD的RedFlag,DVD的SUSE是方便多了。启动速度也很快,配置好以后启动不超过1分钟。简单并不代表不好,基本功能已经很全了,需要什么更多的软件apt-get一下就行。而且桌面也很漂亮,GNOME桌面能做成这个效果,真的很不错了。

总之,作为桌面使用来说,Ubuntu绝对是相当相当的优秀。到现在为止发现它唯一不爽的地方就是,它不带金山词霸,这也是垃圾RedFlag为数不多能让我赞一下的地方:),BTW,RedFlag自带的应用软件真的是很丰富。

P.S. 贴一下速度比较快的源,sources.list For Dapper(6.06),系统自带的那些个不是很好,比较难连上,速度也不行。
# http://www.ubuntulinux.nl/source-o-matic
#
# If you get errors about missing keys, lookup the key in this file
# and run these commands (replace KEY with the key number)
#
# gpg --keyserver subkeys.pgp.net --recv KEY
# gpg --export --armor KEY | sudo apt-key add -

# Ubuntu supported packages (packages, GPG key: 437D05B5)
deb http://de.archive.ubuntu.com/ubuntu dapper main restricted
deb http://de.archive.ubuntu.com/ubuntu dapper-updates main restricted
deb http://security.ubuntu.com/ubuntu dapper-security main restricted universe multiverse

# Ubuntu community supported packages (packages, GPG key: 437D05B5)
deb http://de.archive.ubuntu.com/ubuntu dapper universe multiverse
deb http://de.archive.ubuntu.com/ubuntu dapper-updates universe multiverse

# CN99
deb http://ubuntu.cn99.com/ubuntu/ dapper main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ dapper-updates main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ dapper-security main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ dapper-backports main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu-cn/ dapper main restricted universe multiverse

# LUPA浙江
deb http://mirror.lupaworld.com/ubuntu/archive/ dapper main restricted universe multiverse
deb http://mirror.lupaworld.com/ubuntu/archive/ dapper-security main restricted universe multiverse
deb http://mirror.lupaworld.com/ubuntu/archive/ dapper-updates main restricted universe multiverse
deb http://mirror.lupaworld.com/ubuntu/archive/ dapper-backports main restricted universe multiverse
deb http://mirror.lupaworld.com/ubuntu/ubuntu-cn/ dapper main restricted universe multiverse

# Ubuntu官方
deb http://archive.ubuntu.com/ubuntu/ dapper main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ dapper-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ dapper-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ dapper-backports main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu-cn/ dapper main restricted universe multiverse

# 上海交通大学
# deb http://ftp.sjtu.edu.cn/ubuntu/ dapper main multiverse restricted universe
# deb http://ftp.sjtu.edu.cn/ubuntu/ dapper-backports main multiverse restricted universe
# deb http://ftp.sjtu.edu.cn/ubuntu/ dapper-proposed main multiverse restricted universe
# deb http://ftp.sjtu.edu.cn/ubuntu/ dapper-security main multiverse restricted universe
# deb http://ftp.sjtu.edu.cn/ubuntu/ dapper-updates main multiverse restricted universe
# deb http://ftp.sjtu.edu.cn/ubuntu-cn/ dapper bleeding main multiverse restricted universe

# 清华大学
# deb http://mirror.net9.org/ubuntu/ dapper main multiverse restricted universe
# deb http://mirror.net9.org/ubuntu/ dapper-backports main multiverse restricted universe
# deb http://mirror.net9.org/ubuntu/ dapper-proposed main multiverse restricted universe
# deb http://mirror.net9.org/ubuntu/ dapper-security main multiverse restricted universe
# deb http://mirror.net9.org/ubuntu/ dapper-updates main multiverse restricted universe
# deb http://mirror.net9.org/ubuntu-cn/ dapper main multiverse restricted universe

Copyright © 2005-2006 Solrex Yang. All rights reserved.

Linux学习笔记(3)

关于GRUB的一些记录

鉴于最近RP的一些危机,电脑也一直在欺负我,就写下了一些遭遇。下面的Linux和GRUB版本以FC4,FC5及其附带的GRUB为例,GRUB大概是0.95版本。

2000重装以后的GRUB恢复:

重装Windows会把MBR(Main Boot Record)覆盖掉,这时候就进不了Linux系统了,可以用很多方法进行GRUB的恢复,我用的可以说是最简单的方式,因为我有FC4的第一张安装盘。
光盘启动,按F5(FC默认,其他版本大概是F4)->
在boot:下输入命令:linux rescue->
出现#提示符后输入命令:chroot /mnt/sysimage 注:意思大概是把内核改为硬盘上的而不是光盘->
在#后输入:grub-install /dev/hda 注:该是把grub重装到第一块硬盘->
重新启动

这里install大概就是把GRUB重装到MBR里,而因为GRUB的引导配置是在/boot扇区下面放着的,所以原来的引导配置都还在,一般情况下不需要更改。可,不幸的是,我恰恰碰到了该修改的情况。

重建GRUB后的Windows系统寻找:

我不知道安装盘为什么会把2000安到第二个区,其实我也不知道这个第二个区是什么意思,大概似乎不是分区。
由于原来的GRUB引导配置对XP的默认是:
rootnoverify (hd0,0) //启动XP系统的扇区
chainloader +1

而现在却启动不了,可以用下面的方法一个一个尝试:
启动后按任意键,出现GRUB引导选择界面->
光标移动到Windows项上,按’e’,就是edit的意思->
将光标移动到第一项启动的分区选择上,再按’e’->
修改(hd0,0),其中前面的0代表是第几块硬盘,默认0为第一块,后面的0代表第几个扇区。->
一般情况下修改后面一个扇区,一个一个的试,改了以后按’b’,就是boot的意思,如果启动不了,按’Esc’,再加1,然后boot.
我是试到了2,才成功的。

修改GRUB的引导配置:

上面的介绍是在启动时候人工修改,但是每次改也是很麻烦的事情(除非你想藉此来增加别人进入你系统的难度),可以到/boot扇区中修改掉GRUB的配置。
用root用户进入Linux,在/boot/grub/目录下找到grub.conf文件,打开,会看到下面的东西(唉,我还是记不住vi怎么用,只好用emacs打开):
default=0 //缺省启动系统标号,0表示FC5,1表示XP
timeout=3 //GRUB启动界面等待时间
splashimage=(hd0,7)/grub/splash.xpm.gz //GRUB默认的背景文件
hiddenmenu //大概是要不要显示选择界面,这个意思是如果不按任意键就直接进入默认系统
title Solrex’s Fedora Core 5(2.6.15-1.2054_FC5) //GRUB选择菜单的选项标题
root (hd0,7) //boot所在扇区
kernel /vmlinuz-2.6.15-1.2054_FC5 ro root=LABEL=/ rhgb quiet //Linux内核所在位置
initrd /initrd-2.6.15-1.2054_FC5.img
title Solrex’s Windows XP professional
rootnoverify (hd0,0) //启动XP系统的扇区
chainloader +1
显然修改一下rootnoverify (hd0,0)后面那个0就行了。


Copyright © 2005-2006 Solrex Yang. All rights reserved.

Fedora Core 5下载地址

今天早上把FC5下完了,链接不太好找,这里把自己找到的链接贴一下,要是有感兴趣的兄弟可以去下。是清华的FTP站,晚上下的速度在200k左右,要是早上起来下能达到1M,当然得是在教育网。这个站上别的资源也挺多的。ftp://166.111.72.5:21
匿名访问
站点名: ASTAFTP
端口: 21
站点总容量: 601878191 千字节
总文件数: 462742 个
站点说明: 清华大学自动化系科协服务器

还有咱们数学系FTP上有《Friends》全集下,还是中英双语的,蛮清晰的。也给个地址:
ftp://maths:maths@210.29.249.7:8021

Copyright © 2005-2006 Solrex Yang. All rights reserved.

SCI

这个标题可能会让人很惊讶,可不是说我有那个能力去发表SCI论文,只是有幸认识了一个强人。

也是前天才听到的,在这以前我实在是想不到我认识的人里居然能有那么牛的,人和人是不能比啊!

朋友是物理系的,也是老乡,刚上大学第一次来学校的时候和他睡对铺,也就认识了,还挺聊得来。郑州一高的,开封人,脾气很好的一个小孩,当初人家也是不得志,物理竞赛考到了全省第八还是第九名,差点没被北大录取,而且据他说还是我的一个初中同学比他考得高了一名,把他争取来的名额给顶了。

结果来到南大物理系后也是奋发图强,再加上是自己喜欢的东西,就专心钻研到物理里面,大一时候就开始写论文,好像还拿了全校基础学科论坛的几等奖,大二就带着一帮兄弟做实验。前天碰到他的时候,说开始几篇文章投出去以为没多大希望了,没想到一下子录用了两篇,还都是在SCI里的杂志,还都是他第一作者。在全国的重点高校里我们这一届好像是唯一的一个。

当时真是让我觉得有点,震惊,虽然我知道他很厉害,但是没想到有那么厉害。看来这小子的出国之路是一片光明了,咱们学校又要流传一个牛人的故事了。

刚在上篇文章中说到身边很多其貌不扬的牛人,瞬间就又给我来了一个例子。

可以说每个人都有自己的命运吧,羡慕归羡慕,假如让我再重新来一遍的话,我可能还是愿意没什么改变。好多事情后悔归后悔,但是真正让你再重新选择,怕你还是舍不得曾经有过的精彩或者落寞。《Jane Eyre》里Helen Burns说的一句话很好:Life appears to me too short to be spent in nursing animosity or registering wrongs.

今天在机房里花了一晚上去下Friends和Fedora Core 5,找了半天才在清华机电系的FTP上找到有FC5下载,速度还行,但也是只下了一张盘,明天早上还得继续下。

回来就被Yutian给逼着去录像,要留给数学系文化节闭幕晚会上做一个告别浦园的花絮。本来是觉得多此一举的,但是想想以后有这么一段记录,回头看看还是蛮有意思的。然后把男生宿舍跑了一圈,以我那一般的口才说服大家每个留下来一个镜头。后来他让我说几句话,也说了几句,但是想想真正的把录像放到晚会上看,可能会觉得有点傻。但如果真让我说,怕是最想说的一句话是:“好好学习吧,兄弟们!”现在看着不重要的东西,可能以后会觉得并不如此,同样,现在看着重得不得了的,也未必有很大意义。最重要的是,引用一段CET6的阅读(2001.1):

If you are happy, if you live each moment for everything it is worth, then you are an intelligent person. Those who recognize problems as a human condition and do not measure happiness by an absence of problems are the most intelligent kind of humans we know; also, the most rare.
Copyright © 2005-2006 Solrex Yang. All rights reserved.

Linux学习笔记(2)

ADSL拨号:

本来以为是很难的一件事情,还专门去下什么modem的驱动和PPPOE的拨号软件。安装软件时提示与系统某个文件有冲突。

就想,系统是不是自带有软件啊!才发现原来Fedora自己带一个网络配置软件system-config-network,有字符和图形界面。在X Window下可以从程序里面直接找到。打开以后就直接发现有个xDSL选项,类似与Win下面的设置,不过更简单。然后有一个控制软件,从那里面把ADSL激活就行了。还发现Linux下的ADSL连接可比Win下快多了,基本一激活就能用了。

播放媒体文件:

有几个软件,Mplayer,RealPlayer,Xmms。主要是Mplayer,安上它之后,基本所有的格式都能播放,但是我发现它还是不能播DVD,不知道是哪个解码器没安。

安装Mplayer比较麻烦,到它的官方网站上下载MPlayer-1.0pre7.tar.tar主程序,essential-20050412.tar.bz2编码包,Blue-1.5.tar.bz2皮肤。

先将编码包解压缩,拷贝到/usr/local/lib/codecs/下面,必须放到这个目录下。

然后解压缩主程序。在编译主程序之前,要确定已经安装了gtk+-1.2.10,gtk+-1.2.10-devel,glib-1.2.10,glib-1.2.10-devel,compat-gcc-32,compat-gcc-32-c++。都能在Fedora光盘里面找到。不知道安gtk是要干吗的,大概是需要它的库吧,安装gcc3.2是因为MPlayer只能由gcc3.2编译。

确认已经安装这几个包后,就可以开始配置编译了,进入到解压主程序的目录,执行下面命令配置:

[root @ ****** Mplayer-1.0pre7]#./configure –enable-gui –enable-largefiles –enable-menu –prefix=/usr –confdir=/etc/mplayer –cc=gcc32

然后再执行:

[root @ ****** Mplayer-1.0pre7]#make

这个得等好长时间,等编译完了以后执行:

[root @ ****** Mplayer-1.0pre7]#make install

然后就完成了主程序安装。再把皮肤解压到/usr/share/mplayer/Skin/default/目录里,就完成了。还可以下载更多皮肤,放到Skin目录下面就行了。

我也下了rpm包,但是怎么就是安装不上去,只好用源代码安装。

因为对Linux的命令还不熟悉,我的解压都是在X Window下完成的,这样比较不容易搞错。

RealPlayer是下的一个RPM包,直接就安装了。

Xmms不懂怎么回事,下了好多RPM安装包,也安了,但是怎么就是不能用。后来发现RealPlayer能播MP3,就懒得再找安装方法了。

用Real播放rmvb文件有时候会比较卡,但Mplayer没问题。

Web浏览器:

Fedora自己带的Firefox是1.0版的,比较老的版本。其实也没什么,但是最不爽的就是它不能支持点击打开新窗口链接从标签页打开,这样看着下面的一排打开的新窗口,点来点去累死了。就到它的官方主页上下了一个新的1.5,顺便把thunderbird1.5也下了。这些包直接解压以后就可以使用,不用编译。但搞了半天也没弄明白怎么更新老版,先把老版的文件夹备份了一下,把新版的文件拷贝进去,但这样就是启动不了。只好再把备份拷回去,把新版的放到用户文件夹里,然后再从桌面建一个启动器。反正放着两个版本的Firefox至少没坏处。

QQMSN

QQ就是LumaQQ2005了,直接解压就可以使用,不过最好打上最新的补丁,直接覆盖安装的目录就行了。最近的补丁支持自动登录了,也改了前面版本的一些BUG。

MSN直接就有个软件叫gaim的可以直接用,里面有MSN,ICQ,AOL,YAHOO等好多选项,一看就知道怎么用了,而且还可以存储用户名和密码。

暂时不知道怎样处理的难题:

Firefox下无法登录SPACES,这样写BLOG就只能进Windows了。

Linux下的双拼和我平常用的智能ABC的双拼键位不一样,不知道能不能像紫光一样能更改。

不知道Linux下有没有高效率的下载程序。像迅雷一样,能达到很高的下载速度。因为迅雷是一个P2SP软件,用户下载软件的地址可以共享,这样就可以找到很多地址,而不只是下载的源地址。可这样也有一个问题,下载的版本容易搞错,上次下载Microsoft Antispyware时候就能用,就算设定成只从源地址下载,下的还是旧版本,只能用IE下载。

千万不要在Linux下删除Win下面的文件,这样再进入Win后就会出现磁盘错误。在Linux下不能将文件保存到Win的分区里,文件不能双向共享。

基本完成上面的配置以后,发现X Window对我来说已经近似于Windows了。现在知道为什么有那么多人推崇Linux。在Linux下也可以做很多原来在Windows下做的事情,而且最重要的一点是所有都是免费的,我们不用背着叫做cheat的道德包袱和pirate的恶名。中国真应该推广Linux,不要再被Microsoft指责知识产权和盗版的问题,不要在安装系统以后还需要一个一个安装盗版应用软件。使用Linux最有趣的一件事是我们可以自由配置系统,而不是非得去找一个一个技巧,进一个一个窗口去完成修改,也不用担心注册表的乱七八糟的问题。

这几天注重的是怎么把Linux设定成易于日常使用,控制台命令没有太操心,太多了,比较难记。

很佩服Linux的用户管理方法和多用户登录的处理。在普通用户条件下基本不能对系统做什么改动,但可以通过获得超级用户权限来执行一些命令。可以多用户同时登录,按"Ctrl"+"Alt"+"F1~F6"可以进行另外几个用户的登录,不过是字符界面。"Ctrl"+"Alt"+"F7"是图形界面,但在图形界面里也可以挂起当前用户,然后由另一个用户登陆,这时候他的位置是"Ctrl"+"Alt"+"F9",可以按"Ctrl"+"Alt"+"F7"切换回去。这让对系统的操作变得太方便了。

PS:发现识别Windows里的中文文件名的关键在设定系统语言的文件里改为:Zh-CN.GB18030,默认的UTF8格式是繁体字的编码。
Copyright © 2005-2006 Solrex Yang. All rights reserved.

Linux学习笔记(1)

装完了Linux,吃了个小亏,由于从硬盘安装时候选择安装语言的地方和光盘安装不一样,结果只是装了一个英文版的系统,没有安装中文支持。于是麻烦就来了:

挂载Windows下的分区,不能识别中文文件名。打开网页文件,不能显示中文。

后来从Windows的字体库里拷贝出来一个SimSum字体,放到/usr/share/fonts/chinese/TrueType里,修改/etc/fonts/fonts.conf,添加SimSum到中文字体的前面。这个是添加新的字体,不过我似乎看到也有几个好像是中文的字体,不过我没找到字体文件在哪儿。然后把/etc/sysconfig/i18n改为LANG="zh_CN.GB18030"。这个是让系统显示中文界面。

到现在我也不知道这两个是哪个在起作用,这样搞过以后,Firefox能显示中文的网页了,这样我就能看到下载下来的有关Linux配置的文件了,不用再启动Windows了。但是中文的TXT文件和中文文件名还不能正常显示。

然后就设定开机自动挂载Win下面的硬盘分区。先在/mnt/目录下建立c,d……文件夹。在/etc/fstab里添加:

/dev/hda1 /mnt/c vfat codepage=936,iocharset=cp936 0 0

/dev/hda5 /mnt/d vfat codepage=936,iocharset=cp936 0 0

……

/dev/hda[1] /mnt/[2] [3] codepage=[4],iocharset=[5] 0 0,[1]是指分区,hda1指C盘,然后D,E,F依次是hda5,hda6…;[2]是指要把[1]分区挂载的位置,可以不在/mnt/目录下;[3]是指分区格式,vfat表示fat格式的分区,ntfs表示NTFS分区,不过NTFS分区要是想挂载的话,需要先安装kernel-ntfs-2.6.11-1.i686.rpm,其中2.6.11指的是Linux的内核版本,必须与系统的相同;[4]不知道什么意思;[5]大概是指的打开此分区文件需要用的字符集,2.6内核以上用cp936表示中文的似乎;后面两个0不知道什么意思。重新启动,就能直接开机挂载。

挂U盘可以用mount –t vfat /dev/sda1 /mnt/usb,需要先建立好目录。卸载是umount。

在系统下安装软件,只会用rpm一个命令:rpm –ivh rpm文件名。-ivh是参数,以前看过,意思忘了,不过一般用这个参数。

文件名后来可以用中文显示了,但是文件仍然不能显示中文,就从桌面环境里找,找到了一个添加删除程序,然后在多语言支持里找到中文,让它更新,却提示要插入光盘3。正好看到有显示细节,就看到实际装5个包就行了。就到D盘里面找到光盘3的镜像,把那5个文件解压缩出来,用rpm安装。果然重新启动之后就可以显示中文了。

本来这样已经算完了,但是怎么就是调不出来中文输入法,再加上后来才发现没有装eclipse,这一饱受赞誉的IDE,很想试试用用。如果再用rpm装的话,加上JAVA的开发环境,有100多个文件。算了,干脆重装得了。就只好重装了一遍,唉,都怪当初安装时候没有设定好。

还发现几个问题,Fedora的update好像不能选择增加软件,只是在原来安装的软件基础上的更新;安装的时候一定要安装中文支持,不然好多文档显示都有问题;其实在xwindow下就可以配置好多东西,不一定非得直接去改文件;安装时候的定制选项一定要考虑好,不然再安装软件会很麻烦。

下一步要搞清楚Linux怎么用ADSL拨号上网,怎么下载文件,怎么上QQ、MSN,再安装上Mplayer和xmms。搞懂了以后我就可以基本离开Windows了。
Copyright © 2005-2006 Solrex Yang. All rights reserved.

Fedora Core 4

上次重装Windows系统,直接把硬盘全部格式化,那个最小化的Redhat 9.0也给格掉了。这个学期想学一下Linux下的服务器配置和应用软件的使用,只好再安。不过这次安装的是Fedora Core 4核心的Linux,上次从同学那拷的光盘镜像。

我原以为刻录好第一张光盘做引导,安装第二张的时候会让你选择从硬盘还是从光盘安装,谁知道安到一半还是和Redhat一样,让插入第二张光盘。我只刻了一张,有什么用啊!唉,Linux还是太不人性化了,只好上网查查怎么从硬盘安装。

从硬盘安装的方法有好几种,我试验了多次,重启了N次电脑,都是碰到错误了,就再进Windows上网查。最后使用的是我认为最简单的方法,把四个iso安装光盘镜像放到一个FAT 32格式的分区里,要直接放到主目录下,就是分区盘符下。然后从Fedora的第一张光盘的isolinux目录里拷贝出vmlinuz和initrd.img,也放到同样位置。再从Radhat第一张光盘里拷贝出loadlin.exe,放到同样位置。然后自己编写一个批处理文件autoboot.bat,里面内容是“loadlin vmlinuz initrd=initrd.img ramdisk_size=9216”,保存到同样位置。这里loadlin [1] initrd=[2] ramdisk_size=[3],[1]、[2]就是指的那两个文件的位置,似乎是相对路径,相对于loadlin.exe所在目录的位置,一般放到一层里面比较方便。没有搞懂[3]是什么意思。其实也可以进入DOS以后直接输入命令,不过命令稍微难记了点,做成一个批处理较为方便。

这样,在这个分区里就有了八个文件:

FC4-i386-disc1.iso
FC4-i386-disc2.iso
FC4-i386-disc3.iso
FC4-i386-disc4.iso
vmlinuz
initrd.img
loadlin.exe
autoboot.bat
用光盘或者U盘启动到DOS系统,找到loadlin.exe所在的目录,运行autoboot,这样就能进入Fedora的引导了,系统会问你用哪种方式安装,是光盘、硬盘、FTP等等,选择硬盘安装,然后再选光盘镜像所在的分区,剩下的就和安装其它Linux一样的步骤了,而且更简单,不用更换光盘。

这种方法有几个缺点:

一是得有Fedora和Redhat的第一张光盘,拷贝出来那三个文件。不过那几个文件不大,网上也许可以找到,当然也可以下载好iso以后解压缩再提取;
二是得有DOS启动盘,光盘或者U盘。U盘不太好做,我就没做成功,还好有几张杂志送的光盘是带启动功能的。
三是得懂DOS命令,这个倒还好,其实用不到几条。

不过它也有几个优点:简单,清晰,不存在版本问题。

有介绍用Grub For Dos来安装的,我到现在也没看懂。我不知道它要修改的boot.ini到底在什么地方,而且不同的人用的方法还有些不一样。我也试了几次,因为我的Windows系统盘是用NTFS格式化的,就在D盘上试了几次,总是提示找不到/boot/grub/menu.lst,但是这个文件明明就在那个位置。我怀疑是不是用的版本问题或者是查找路径的方法问题。

方法有好多种,目的是相同的,就是要启动以后执行对Linux硬盘文件的引导读取,难就难在这个过程。对那些老手来说情况分好多种,有各种处理办法。像我这种刚接触的实在是头大啊!只好给自己找最简单的情况来处理了。

还发现了电脑的几个问题,DOS系统果然不能识别NTFS分区,它把我的D盘认成C盘。分区的时候还发现我的电脑似乎有一个3G多的隐藏分区,还是空闲的,不知道怎么搞上去的。唉,本来空间就不够用,不过也没敢动那个分区,恐怕安装不上就麻烦,反正就放那吧,有空了再用分区工具给剥出来。

整整化了我五个小时时间,最后总算搞定了,看着Fedora的界面,就是舒服啊。
Copyright © 2005-2006 Solrex Yang. All rights reserved.