构造Linux的图形化安装程序1.docx
- 文档编号:30313770
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:15
- 大小:25.70KB
构造Linux的图形化安装程序1.docx
《构造Linux的图形化安装程序1.docx》由会员分享,可在线阅读,更多相关《构造Linux的图形化安装程序1.docx(15页珍藏版)》请在冰豆网上搜索。
构造Linux的图形化安装程序1
构造Linux的图形化安装程序
(1)
这是一个向用户介绍如何构造Linux的图形化安装程序的专栏。
介绍的内容包括:
安装环境的定制,图形化启动,本地化支持,分区功能,如何支持reiserfs、raid、lvm,rpm包的安装,定制各种启动配置脚本等等。
本文是这个系列文章的第一篇,主要是向您介绍如何定制系统安装环境,包括生成安装内核,初始Ram盘的生成,最小化安装环境的定制。
自从Caldera推出了第一个Linux系统下的图形化安装程序以来,现在的主流Linux发布大多都使用图形化的安装程序进行系统环境的安装,比如SPGLinux的安装程序anaconda,Suse的安装程序yast2,Caldera的安装程序lizard,以及Mandrake的安装程序gi。
这些主流厂商的安装程序都有一个共同的特点,就是它们都是先构造一个完备的最小化的Linux运行环境,定制Linux的启动过程,使得系统内核启动后,加载一个系统装载程序,这个程序将定制好的Linux运行环境部分或者全部加载进入内存,然后将控制转移到图形化安装程序。
最后再由此程序启动的图形环境(XFree86),设置对应的语言环境,启动对应的系统安装过程。
主流安装程序简介
Caldera的安装程序lizard是Linux世界的第一个图形化安装程序,它的全部程序使用c++语言编制,图形化的风格是基于kde和qt的。
值得一提的是,caldera在定制图形化安装时,修改了内核,实现了内核的图形化启动,同时其安装程序的硬件检测功能很强大,可以检测到部分非即插即用的isa设备,而且还提供了类似html风格的帮助系统。
因为安装程序要求精炼的环境,而此时通用的XWindows窗口管理器是无法满足需求的(太大而且占用资源太多),所以caldera中还提供了一个最小化的窗口管理器lwm。
在caldera安装系统包的过程中,您还可以玩吃豆子游戏,这也是lizard的一大创意。
SPGLinux的安装程序anaconda可能是大家最熟悉的安装程序之一。
它的全部程序都是由Python完成。
Python是一种面向对象的脚本语言,您可以在http:
//www.python.org获得它的相关资料。
SPGLinux使用PythonGtk作为图形界面的开发工具。
在您解开anaconda的源码包之后,您会发现一个anaconda的文件,这是程序执行的主文件。
它提供了一个最小化的slang库以支持文本方式的安装。
SPGLinux的安装程序最大的特点就是很稳健,支持的驱动程序较多,对硬件的支持很强(这说明SPGLinux安装内核定制得非常好,而且得到了相当多的厂商支持)。
但是SPGLinux安装程序的功能不是特别强,比如对于reiserfs、lvm不提供支持,不支持中文安装(7.2可能会推出中文版)。
也有很多厂商的安装程序是稍微修改了SPGLinux源码构成的,比如VALinux、中科红旗等。
对于Mandrake的安装程序gi,它的全部程序都是使用Perl编制,您可以从Mandrake的CVS服务器上下载最新的安装程序。
Perl是一种功能强大的脚本语言,可以非常方便的处理Linux上的各种配置脚本,它的图形界面使用Perl-GTK编制。
Mandrake的安装程序是第一种提供中文安装的主流发布。
它的安装程序的特点是新,支持的功能相当多,包括配置复杂的文件系统,支持无线通讯设备,多种打印机支持等等。
SPGLinux和Mandrake的安装程序都是由脚本构成的,它们虽然速度稍慢,但是其构成的安装程序一般都比较稳定,而且便于移植到其他平台上。
SPGLinux的整个安装环境是保存在一个stage2.img的文件里。
您可用命令:
mount-oloopstage2.img/mnt/tmp
将其挂接到指定的目录下,察看SPGLinux安装程序的结构。
Mandrake的安装环境保存在mdkinst的目录下。
安装环境的构成
一个图形化的安装环境实际上就是一个最小化的Linux运行环境。
一般由如下几部分构成:
Linux系统安装内核,Linux系统的初始Ram磁盘,系统运行所需的一些shell命令和程序所必需的系统库,初始化程序,系统运行时必须的外部命令,XFree86子系统,字体集和本地化的环境设置,系统的桌面风格和贴图,键盘映射,设备配置数据库,系统安装程序等部分。
系统内核vmlinuz存在系统的启动映像之中,在系统启动时调入,然后Linux调入初始Ram磁盘,由此Ram磁盘上的程序加载运行安装程序的第一阶段加载程序。
这是个可执行程序,它一般执行加载硬盘驱动模块,将磁盘上的整个安装环境调入内存,并作为根分区挂接。
这时就有一个在内存中的最小化的Linux系统了,一段映像程序结束运行,释放自己所占的内存,并将控制转移到真正的系统安装程序。
这时系统安装程序开始启动XFree86子系统,设置正确的本地化环境,包括本地化环境变量,字体集,正确的键盘映射等,这时就允许用户进行交互,从而在用户的干预下,完成整个系统的安装过程。
2.1定制安装内核
一个好的安装程序内核是和安装程序紧密相关的,它必须是完备的和精简的。
完备的内核是指:
如果安装程序要对某方面的功能进行支持的话,必须在内核中也提供相应的支持。
精简的内核是指:
对于安装程序不需要的功能,内核一定不要支持,而且能作为模块存在的,就一定要把它设置为模块。
这样定制出来的内核很小,保证了定制的内核以及必须的硬盘驱动模块能放入启动映像中。
例如,对于2.4.3内核一组选项是:
(在下面的一组选项中没有注明的选项,可以在定制安装程序的内核时省略)
Loadablemodulesupport可加载模块支持
[*]Enableloadablemodulesupport将可加载模块支持打入内核
[*]Kernelmoduleloader将内核模块加载器打入内核
Processortypeandfeatures内核支持的处理器类型
(386)Processorfamily选择386兼容方式编译内核
(off)HighMemorySupport对大于2GB的内存不提供支持
选择386兼容方式是为了保证安装程序具有良好的兼容性,在某种程度上来说,速度的快慢并不是衡量安装程序的指标。
一个好的安装程序,应该具有高稳定性和高兼容性。
Generalsetup一般选项
[*]Networkingsupport内核级网络支持
[*]PCIsupport内核级PCI总线支持
(Any)PCIaccessmodePCI硬件的存取方式
[*]EISAsupport内核级EISA总线支持
[*]Supportforhot-pluggabledevices支持热插拔设备
[*]SystemVIPCSystemV的进程间通讯机制
(ELF)Kernelcore(/proc/kcore)format内核文件格式为ELF
<*>KernelsupportforELFbinaries内核支持ELF格式
对于网络支持和IPC机制的内核支持是必须的,因为Linux上的很多程序,即便它没有进行网络通讯,它也用这些方式进行进程间通讯。
对于ELF的内核支持也是必须的,因为安装程序需要使用初始内存映像(initrd),这种方式需要调用程序完成一些初始化的工作,这就要求内核必须能够支持ELF可执行文件格式。
其他对于PCI、EISA设备的支持,是提高安装内核硬件兼容性的必要选项。
Parallelportsupport并行端口支持,要引入并口设备支持时
[*]IEEE1284transfermodesIEEE1284传送模式支持(支持设备自检)
对于并口而言,为了自动检测连接到并口的设备,必须将IEEE1284传送模式支持打入内核。
对于不支持IEEE1284传送模式的并口设备,系统是无法进行自动检测的。
PlugandPlayconfiguration
在2.4.x内核中,对ISAPlugandPlay设备的支持存在一些错误,对于部分设备,将此选项置入内核,设备是无法正常工作的。
因此,建议在定制内核时,对此类设备的支持采用内核模块方式。
Blockdevices引入对块设备的支持
<*>RAMdisksupport核心支持RAM磁盘
(4096)DefaultRAMdisksize
[*]InitialRAMdisk(initrd)support
初始RAM磁盘的内核支持。
因为安装程序需要设置初始内存镜像以加载设备模块,所以这一选项对于安装程序是必须的。
其他的选项都作为设备模块存在,在需要时可以放入初始内存镜像中。
Multi-devicesupport(RAIDandLVM)
[*]Multipledevicesdriversupport(RAIDandLVM)
<*>RAIDsupport将设备模块md.o打入内核
如果将md.o不置入内核,仅为模块方式,raid分区将无法作为根分区启动系统。
这主要是因为raid设备需要在启动之初对硬盘进行读写,以决定raid分区的位置,类型等参数。
为了支持软件RAID设备和逻辑卷管理的分区,将上述设备定制为内核模块。
为了对上述特殊类型的存储设备进行支持,就需要mkinitrd支持生成正确的初始内存映像,同时为了在正确挂接设备模块之后,系统能正确的安装文件系统并进行检查,也必须提供初始启动脚本的支持(initscript)。
Networkingoptions
<*>Unixdomainsockets支持unix域套接字
[*]TCP/IPnetworking内核支持TCP/IP网络
ATA/IDE/MFM/RLLsupport对ATA/(E)IDE和ATAPI的低端存储设备提供支持。
<*>ATA/IDE/MFM/RLLsupport
IDE,ATAandATAPIBlockdevices
<*>EnhancedIDE/MFM/RLLdisk/cdrom/tape/floppysupport
<*>IncludeIDE/ATA-2DISKsupport
<*>InculdeIDE/ATAPICDROMsupport
<*>InculdeIDE/ATAPIFLOPPYsupport
IDEchipsetsupport/bugfixes作为内核支持存在对常见的IDE设备支持,最好打入内核,这样保证了安装程序可以直接从硬盘、软盘、光驱启动,而无须额外的设置。
SCSIsupport
支持的SCSI设备全部作为内核模块。
这些模块将压缩以后存入初始内存映像,以便在使用SCSI控制器时,系统能够插入正确的设备驱动模块。
Networkdevicesupport
[*]Networkdevicesupport
对网络设备包括ARCnet、Appletalkdevices、Ethernet、PPP、SLIP、TokenRing等类型的设备提供支持,这些设备的驱动程序都可作为设备模块。
ISDNsubsystem
对ISDN设备提供支持,为了减小内核底层的ISDN卡的硬件驱动程序全部作为模块。
OldCD-ROMdrivers(notSCSI,notIDE)
[*]Supportnon-SCSI/IDE/ATAPICDROM drivers
对于具体的老CDROM设备,它们的驱动程序也以模块的形式存在。
Inputcoresupport
打开USB设备的HID支持
Characterdevices
[*]Virtualterminal
允许您在一个虚拟终端上运行几个虚拟中断,可以使用Alt-<功能键>进行切换
[*]Supportforconsoleonvirtualterminal
设置一个虚拟终端作为系统控制台
生成serial.o,允许串口鼠标、串口modem以及其他相似的设备连接到标准的串行端口上。
Filesystems
[*]MicrosoftJolietCDROMextensions
[*]/procfilesystemsupport
[*]/dev/ptsfilesystemforUnix98PTYs
<*>Secondextendedfssupport
NetworkFileSystems作为模块
PartitionTypes
[*]PCBIOS(MSDOSpartitiontables)support
NativeLanguageSupport作为模块
这样的选项使得定制的内核支持/proc,ext2和/dev/pts文件系统,可以使用插入模块的方式支持fat、vfat、ntfs、cdrom、reiserfs、rom文件系统。
支持NFS文件系统,并能支持内核级的自动挂接。
同时,在挂接文件系统时提供本地语言支持,缺省值为iso8859-1。
Consoledrivers
[*]VGAtextconsole
[*]Videomodeselectionsupport
Frame-buffersupport
允许Linux的文本模式使用VGA模式或者是帧缓冲方式,支持Frame-buffer对于安装程序是必须的,它使得安装程序能够以fbdev的方式启动XFree86。
Sound
对于声卡的支持,内核可以把各个声卡的设备驱动定制成模块。
USBsupport
[*]PreliminaryUSBdevicefilesystem
usb文件系统,必须定制到内核中,这样以后才可以通过/proc文件系统检测安装的usb设备。
usb的桥接器(uhci、ohci)和其他不同的设备驱动程序都可以作为内核模块。
2.2定制内存初始镜像
由于在定制安装程序的内核时,要求内核很小,而另一方面安装程序又要支持尽可能多的硬件设备。
为了支持尽可能多的硬件,尤其是特殊的存储设备,我们需要在定制初始的启动镜像时将需要支持的部分,如常见的SCSI控制器和非标准的IDE控制器的驱动程序模块放入其中。
这样才能够使内核在尝试使用硬盘或其他存储设备时,其设备驱动程序已经提前加载了。
在内核调入内存之后,如果存在内存初始镜像(initrd),那么控制会转到其上并执行配置脚本linuxrc。
内存的初始镜像使引导加载器加载一个RAM盘,此RAM盘可以作为根文件系统挂接并且能在其上运行应用程序。
此后,新的根文件系统能从不同的设备上挂接(比如光驱或者硬盘)。
在挂接了新的文件系统之后,作为根分区的内存初始镜像将成为目录/initrd或者被卸装。
内存初始镜像(initrd)的使用将使得系统的引导过程分成两个阶段,初始启动的内核只需保留最精简的驱动程序最小集,当启动必须加载附加的驱动模块时再由内存初始镜像加载。
比如,您在使用了软件RAID方式管理硬盘并使用RAID1类型的分区作为系统的根分区之后,就必须创建内存初始镜像。
这时的内存初始镜像中包含了设备模块raid1.o以及系统命令insmod,和一个shell脚本linuxrc,其内容一定包含:
insmodraid1.o
在使用内存初始镜像时,系统引导过程如下:
引导加载程序加载内核和初始化RAM盘。
内核转变内存初始镜像为正常的RAM盘并释放内存初始镜像所用的内存。
内存初始镜像挂接为根分区,此分区允许读/写操作。
执行linuxrc(它可以是任何合法的执行程序,包括shell脚本;该程序以uid为0方式运行,可以完成init所做的每件基本工作)。
在linuxrc终止时,真正的根文件系统被挂接。
若/initrd目录存在,则initrd被移动到此处,否则,initrd被卸载。
在根文件系统上完成正常的引导过程。
例如,对于正常的系统而言,执行/sbin/init,这时控制就会转到正常的大家所熟知的启动过程了。
而对于安装程序,它只需将控制转到安装过程的第一阶段,由它完成后续的安装环境的加载,设备的进一步初始化等操作。
创建一个初始内存镜像实际上就是创建一个文件,这个文件上包含了一个ext2文件系统,它可以使用回环方式(loop)挂接到本地文件系统上。
下面的shell程序段可以创建初始内存镜像:
ddif=/dev/zeroof=/tmp/initrdbs=1kcount=2000
创建一个2000k的整块文件,一定不能有碎片
mke2fs/tmp/initrd
创建一个ext2文件系统
mount-text2/tmp/initrd/mnt-oloop
将此文件作为回环文件系统挂接到/mnt目录下
创建所需的路径和文件:
mkdir/mnt/dev
mknod/mnt/dev/tty1c41
mkdir/mnt/lib
cpraid1.o/mnt/lib/
mkdir/mnt/sbin
cp/sbin/insmod/mnt/sbin/
cp/sbin/ash/mnt/sbin/
......
umount/mnt
卸载此文件系统
gzip-9/tmp/initrd
cp-f/tmp/initrd.gz/boot/initrd.img
rm-f/tmp/initrd.gz
这样一个内存映像文件就生成了。
为了生成内存映像文件,内核在编译时必须打开ramdisk支持并且支持初始RAM盘,initrd中执行程序的所有对象(例如,可执行文件格式ELF和文件系统EXT2)必须编入内核,这样您生成的内存映像文件才是正常可用的。
缺省条件下,内核的标准设置指定了根设备,另外还可以由rdev设置,或者由命令行传递参数root=xxx指定。
在initrd环境下也可以改变根设备。
首先,系统要挂接/proc,然后使下列文件可用:
/proc/sys/kernel/real-root-dev
/proc/sys/kernel/nfs-root-name
/proc/sys/kernel/nfs-root-addrs
real-root-dev能通过向其写入新的根文件系统设备号来改变,例如
#echo0x301>/proc/sys/kernel/real-root-dev
总而言之,创建初始内存映像文件的主要目的是为了在系统安装(启动)时配置内核模块。
这时整个安装过程的最初阶段会按如下方式工作:
系统由软盘或其它介质以最小内核启动(必须支持RAM盘,初始内存镜像,ELF类型的可执行文件,ext2类型的文件系统)并加载初始内存镜像。
/linuxrc决定下一步的工作:
挂接真正的根文件系统,包括对设备类型,设备驱动程序,文件系统等信息的处理。
安装程序的发布介质(例如,CDROM,网络,磁带…)。
这可以通过询问用户,自动探测,或混合的方法完成。
/linuxrc加载必须的设备驱动程序模块。
/linuxrc创建和管理根文件系统。
/linuxrc写在根文件系统和任何已经挂接的其它文件系统,设置/proc/sys/kernel/...,终止。
挂接根文件系统。
引导加载程序被读入内存。
引导加载程序配置带有模块集的初始内存镜像(/initrd能被修改,卸载)。
完成系统引导时附加的安装任务。
2.3定制最小化的运行环境
安装程序的运行环境是整个安装过程第二阶段,它是在内核以及初始内存映像运行之后,由第一阶段的安装程序装入内存的。
在此之后,安装程序才正式从其上开始运行。
定制最小化的安装程序运行环境也就是定制最小化的Linux系统运行环境。
定制怎样的安装程序运行环境和安装程序所提供的功能密切相关。
一般而言,安装程序都要打开多个控制终端,所以为了便于调试,安装环境中应该具备完整的shell命令环境。
同时,为了支持图形化显示,那么安装环境还需要XFree86系统,Gtk(Qt)库环境,可能还需要gtk-engine以支持贴图的显示方式。
而对于要提供多语言支持的安装程序,这就需要提供glibc的本地化环境,多种字体集,不同的键盘映射方式。
另外对于安装程序提供支持的硬件设备,也应该将其驱动程序模块放入安装程序的运行环境中。
安装程序运行环境一般应包括如下内容:
运行时刻库,包括运行程序必须的动态库
驱动程序模块文件,包括安装程序需要支持的设备和服务模块
系统命令,包括各种系统命令
多语言环境,包括键盘映射、本地化环境、字体
XFree86系统,包括XFree86
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 构造 Linux 图形 安装 程序