红联Linux门户
Linux帮助

装完二个Linux发行版LFS和Gentoo后的感想

发布时间:2007-07-17 22:17:56来源:红联作者:HioDxm
  第一,支撑linux操作系统基本运行的是linux的kernel,就是内核----这好像是废话。kernel作为系统中用户程序和底层硬件间的中间层,起的是个桥梁作用,对上提供API,对下管理各种硬件设备。然而,对于构建一个linux系统来说,kernel的工作可能只占很小的部分,花费的时间也不多,我的机器(在虚拟机中)大概要1个多小时吧,原因是维护kernel的人把编译内核做的太人性化了,只用几句命令(make menuconfig(或make xconfig等等)、make、make modules_install),即配置,编译,编译内核模块,就可以搞定了。但这里面难的是配置内核部分,不光要求你对自己主机硬件情况了解,而且对于配置选项也要有基本的认识,常常会出现编好的内核不能在自己机器上正常启动的情况,也有启动后部分硬件不能正常运行或识别的。

  当然,也有偷懒的办法,你可以找一个现有linux发行版,直接拷贝它的内核用吧(一般它都在/boot目录下),如果你没有储存空间的顾虑的话;还有,比如在gentoo中,它直接提供你一个配置内核的命令,实际上可能是个配好的运行脚本,你可以用它配置编译内核----和直接借用发行版内核类似,它基本把可能涉及到的硬件的配置选项全部选上,不过,各自发行版对自己的系统有着不同考虑(比如说优化)。

  第二,linux系统中除了kernel的部分。linux系统中除了kernel之外呢,主要就是两个部分了,一个是用户应用程序/软件,一个是支持这些程序/软件运行的库。应用程序一般是些可执行文件,主要存放在/bin,/sbin,/usr/bin,/usr/sbin及其他一些用户目录里,支持库则主要在/lib及/usr/lib里,分别为系统软件运行支持库和用户软件运行支持库。我曾一度把linux除内核以外的部分看作是一个大编译/运行环境----以binutils和gcc为核心的编译器,以及其他必要系统操作命令(实际上也由编译器编译生成)。这也许是受到LFS的影响,LFS在构建系统之初就先装好binutils和gcc,然后的东西,包括系统命令,基本操作工具,及用户应用程序都是用它们编译生成的(当然源代码需要从网上下)。

  但是,将其称为编译环境或许并不准确,因为很多linux的发行版默认并不装gcc,它们只是把已经编译生成的可执行文件和支持库直接拷贝到用户机,并构成系统的运行环境而已----不过,没有gcc编译器的系统在用户需要安装新的软件时将会遭遇很大困难,因为不少软件的发布是以源码包的形式,这就意味着:如果你不在自己的系统上将它们编译一遍的话,是不能使用的。

  第三,关于包管理。正如前面提到的,在linux系统下安装新软件有时候不得不自己编译,原因有如没有针对你linux系统的软件打包(rpm包、deb包等);或者有对应的包,但不能正常运行,因为你的系统上的依赖支持库的目录目录不对,或你曾改动过等等......关键是,linux的发行版简直太多了,它们又各有自己的特点,目录结构也不太一样,比如以前的发行版喜欢把光驱挂接到/mnt目录下,而如今很多发行版更倾向于把它挂到/media里;有些把某些支持库放在/lib下,有些则将其放到/usr/lib下。这些情况都可以是你必须自己编译安装的原因。然而,并不是说长时间的等待就是自己编译安装软件唯一需要忍受的问题。实际上,最让人头疼的问题是软件的依赖问题,这个问题常常会很打击linux的初学者,在编译安装时,系统可能提示“此软件要求gcc4.0或者更高版本”,或者“此软件依赖gtk,而系统并没有安装”,亦或“在/lib下没有找到所依赖的XX”,实际的情况也许比这还要复杂的多。这时候,人们往往非常怀念在windows系统中鼠标双击安装软件的经历。正是因为大家使用的linux系统情况各异,所以想办法帮助用户实现软件包的依赖安装无疑比研究出一套统一的软件安装包要容易很多。

  这时,包管理的概念便渐渐流行起来了。包管理,依我的理解,就是把软件及它的依赖包当作一个整体来管理,如果你要安装一个软件,通过包管理指令,它就会帮你找到该软件所依赖的所有包,并判断你的系统中缺少哪些,然后帮你从网络下载(个人认为这是最好的方式对于linux)并安装到你系统对应目录里,最终将该软件安装到系统中。这样,你几乎就不需要自己干预了。

  当然,不同发行版的包管理也不尽一样,有些是从网络下载源码包,然后自动编译、安装,比如gentoo的portage;还有,就是从网络上下的就是编译好并打的包,这样的好处是显而易见的,安装速度非常快(几乎只是个向不同目录拷贝不同文件的过程),比如ubuntu的apt-get(新立得)。gentoo的包管理的主要缺点就是需要再编译,所以安装某些软件的时间是很多人难以忍受的(我装kde,几乎用掉了30个小时)。当然,LFS是没有包管理的,所以,你可以想象一下,我手指的劳动强度。

  第四,关于安装的基本顺序。如果,你希望了解一个linux系统如何从无到有,再到可以基本运行,那么我推荐你去试一下LFS(Linux From Scratch),正如它所宣扬的那样,让你知道“它(linux)是怎么工作的”。

  为了说明的方便,我先总结一下LFS的主要过程:

  1. 在主机系统(可以是某个发行版或LFS的livecd)的硬盘中划分一块区域,格式化,用于安装/构建新的linux系统。

  2. 利用主机上的编译器(主要gcc)编译,在目标分区里生成新linux系统的编译环境(多被称作工具链)。

  3. 用新生成的编译环境编译安装基本系统下的必要软件。

  4. 编译内核,安装系统引导程序,编写引导文件。

  5. 重启,进入新的linux系统。至于gentoo,在stage3安装方式中,除了上面的2、3步骤之外,其他类似;而它的基本系统是直接通过把编好的文件包解压到目标分区后就ok了,据说gentoo的stage1、stage2安装方式与LFS类似,不过我没试过,gentoo现在也已不再支持stage1和stage2安装了,所以具体情况不知。
文章评论

共有 0 条评论