anaconda linux运行有可视化,构造Linux的图形化安装程序

1051350.gif2.1

定制安装内核

一个好的安装程序内核是和安装程序紧密相关的,它必须是完备的和精简的。完备的内核是指:如果安装程序要对某方面的功能进行支持的话,必须在内核中也提供相应的支持。精简的内核是指:对于安装程序不需要的功能,内核一定不要支持,而且能作为模块存在的,就一定要把它设置为模块。这样定制出来的内核很小,保证了定制的内核以及必须的硬盘驱动模块能放入启动映像中。

例如,对于2.4.3内核一组选项是:(在下面的一组选项中没有注明的选项,可以在定制安装程序的内核时省略)

Loadable

module support 可加载模块支持

[*] Enable loadable module

support 将可加载模块支持打入内核

[*] Kernel module loader  将内核模块加载器打入内核

Processor type

and features 内核支持的处理器类型

(386) Processor family 选择386兼容方式编译内核

Toshiba

Laptop support  东芝笔记本支持作为模块

(off) High Memory Support

对大于2GB的内存不提供支持

选择386兼容方式是为了保证安装程序具有良好的兼容性,在某种程度上来说,速度的快慢并不是衡量安装程序的指标。一个好的安装程序,应该具有高稳定性和高兼容性。

General

setup  一般选项

[*] Networking support 内核级网络支持

[*] PCI support

内核级PCI总线支持

(Any)  PCI access mode PCI硬件的存取方式

[*] EISA

support内核级EISA总线支持

[*] Support for hot-pluggable devices  支持热插拔设备

[*]

System V IPCSystemV的进程间通讯机制

(ELF) Kernel core (/proc/kcore)

format 内核文件格式为ELF

Kernel support for a.out binaries内核模块支持a.out文件

Kernel support for ELF binaries 内核支持ELF格式

Kernel support for MISC binaries

内核模块支持其他的格式

对于网络支持和IPC机制的内核支持是必须的,因为Linux上的很多程序,即便它没有进行网络通讯,它也用这些方式进行进程间通讯。对于ELF的内核支持也是必须的,因为安装程序需要使用初始内存映像(initrd),这种方式需要调用程序完成一些初始化的工作,这就要求内核必须能够支持ELF可执行文件格式。其他对于PCI、EISA设备的支持,是提高安装内核硬件兼容性的必要选项。

Parallel

port support并行端口支持,要引入并口设备支持时

Parallel port support 模块化的并行端口支持

PC-style

hardware PC类型的硬件

[*]  IEEE 1284 transfer modes IEEE

1284传送模式支持(支持设备自检)

对于并口而言,为了自动检测连接到并口的设备,必须将IEEE 1284传送模式支持打入内核。对于不支持IEEE

1284传送模式的并口设备,系统是无法进行自动检测的。

Plug and Play configuration

Plug and Play

support模块化的即插即用设备支持

ISA Plug and Play support

模块化的ISA即插即用设备支持

在2.4.x内核中,对ISA Plug and

Play设备的支持存在一些错误,对于部分设备,将此选项置入内核,设备是无法正常工作的。因此,建议在定制内核时,对此类设备的支持采用内核模块方式。

Block

devices  引入对块设备的支持

RAM disk support 核心支持RAM磁盘

(4096) Default RAM

disk size

[*] Initial RAM disk (initrd)

support

初始RAM磁盘的内核支持。因为安装程序需要设置初始内存镜像以加载设备模块,所以这一选项对于安装程序是必须的。

其他的选项都作为设备模块存在,在需要时可以放入初始内存镜像中。

Multi-device

support (RAID and LVM)

[*] Multiple devices driver support (RAID and

LVM)

RAID

support 将设备模块md.o打入内核

如果将md.o不置入内核,仅为模块方式,raid分区将无法作为根分区启动系统。这主要是因为raid设备需要在启动之初对硬盘进行读写,以决定raid分区的位置,类型等参数。

Linear

(append) mode

RAID-0 (striping) mode

RAID-1 (mirroring)

mode

RAID-4/RAID-5 mode

Multipath I/O support

Logical volume manager

(LVM)

support

为了支持软件RAID设备和逻辑卷管理的分区,将上述设备定制为内核模块。为了对上述特殊类型的存储设备进行支持,就需要mkinitrd支持生成正确的初始内存映像,同时为了在正确挂接设备模块之后,系统能正确的安装文件系统并进行检查,也必须提供初始启动脚本的支持(initscript)。

Networking

options

Packet socket设置包协议

Unix domain sockets 支持unix域套接字

[*]

TCP/IP networking  内核支持TCP/IP网络

ATA/IDE/MFM/RLL support

对ATA/(E)IDE和ATAPI的低端存储设备提供支持。

ATA/IDE/MFM/RLL support

IDE, ATA

and ATAPI Block devices

Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy

support

Include IDE/ATA-2 DISK support

Inculde

IDE/ATAPI CDROM support

Inculde IDE/ATAPI TAPE support

Inculde

IDE/ATAPI FLOPPY support

SCSI emulation support

IDE chipset

support/bugfixes作为内核支持存在

对常见的IDE设备支持,最好打入内核,这样保证了安装程序可以直接从硬盘、软盘、光驱启动,而无须额外的设置。

SCSI

support

支持的SCSI设备全部作为内核模块。这些模块将压缩以后存入初始内存映像,以便在使用SCSI控制器时,系统能够插入正确的设备驱动模块。

Network

device support

[*] Network device support

对网络设备包括ARCnet、Appletalk

devices、Ethernet、PPP、SLIP、Token Ring等类型的设备提供支持,这些设备的驱动程序都可作为设备模块。

ISDN

subsystem

ISDN support

对ISDN设备提供支持,为了减小内核底层的ISDN卡的硬件驱动程序全部作为模块。

Old

CD-ROM drivers (not SCSI, not IDE)

[*] Support non-SCSI/IDE/ATAPI

CDROM drivers

对于具体的老CDROM设备,它们的驱动程序也以模块的形式存在。

Input core support

Input

core support

Keyboard support

Mouse support

Joystick support

Event

interface support

打开USB设备的HID支持

Character devices

[*] Virtual

terminal

允许您在一个虚拟终端上运行几个虚拟中断,可以使用Alt-进行切换

[*]Support for

console on virtual terminal

设置一个虚拟终端作为系统控制台

Standard/generic (8250/16550

and compatible UARTs) serial

support

生成serial.o,允许串口鼠标、串口modem以及其他相似的设备连接到标准的串行端口上。

File

systems

Kernel automounter support

Reiserfs support

DOS FAT fs

support

MSDOS fs support

VFAT (Windows-95) fs support

Simple RAM-based

file system support

ISO 9660 CDROM file system support

[*]  Microsoft

Joliet CDROM extensions

NTFS file system support

[*] /proc file system

support

[*] /dev/pts file system for Unix98 PTYs

ROM file system

support

Second extended fs support

Network File

Systems作为模块

Partition Types

[*] PC BIOS (MSDOS partition tables)

support

Native Language

Support作为模块

这样的选项使得定制的内核支持/proc,ext2和/dev/pts文件系统,可以使用插入模块的方式支持fat、vfat、ntfs、cdrom、

reiserfs、rom文件系统。支持NFS文件系统,并能支持内核级的自动挂接。同时,在挂接文件系统时提供本地语言支持,缺省值为iso8859-

1。

Console drivers

[*] VGA text console

[*] Video mode selection

support

MDA text console (dual-headed)

Frame-buffer

support

允许Linux的文本模式使用VGA模式或者是帧缓冲方式,支持Frame-buffer对于安装程序是必须的,它使得安装程序能够以fbdev的方式启动XFree86。

Sound

Sound

card support

对于声卡的支持,内核可以把各个声卡的设备驱动定制成模块。

USB support

Support for

USB

[*] Preliminary USB device

filesystem

usb文件系统,必须定制到内核中,这样以后才可以通过/proc文件系统检测安装的usb设备。usb的桥接器(uhci、ohci)和其他不同的设备驱动程序都可以作为内核模块。

2.2

定制内存初始镜像

由于在定制安装程序的内核时,要求内核很小,而另一方面安装程序又要支持尽可能多的硬件设备。为了支持尽可能多的硬件,尤其是特殊的存储设备,我们需要在定制初始的启动镜像时将需要支持的部分,如常见的SCSI控制器和非标准的IDE控制器的驱动程序模块放入其中。这样才能够使内核在尝试使用硬盘或其他存储设备时,其设备驱动程序已经提前加载了。

在内核调入内存之后,如果存在内存初始镜像(initrd),那么控制会转到其上并执行配置脚本linuxrc。内存的初始镜像使引导加载器加载一个RAM盘,此RAM盘可以作为根文件系统挂接并且能在其上运行应用程序。此后,新的根文件系统能从不同的设备上挂接(比如光驱或者硬盘)。在挂接了新的文件系统之后,作为根分区的内存初始镜像将成为目录/initrd或者被卸装。

内存初始镜像(initrd)的使用将使得系统的引导过程分成两个阶段,初始启动的内核只需保留最精简的驱动程序最小集,当启动必须加载附加的驱动模块时再由内存初始镜像加载。比如,您在使用了软件RAID方式管理硬盘并使用RAID

1类型的分区作为系统的根分区之后,就必须创建内存初始镜像。这时的内存初始镜像中包含了设备模块raid1.o以及系统命令insmod,和一个

shell脚本linuxrc,其内容一定包含:

insmod

raid1.o

在使用内存初始镜像时,系统引导过程如下:

引导加载程序加载内核和初始化RAM盘。

内核转变内存初始镜像为正常的RAM盘并释放内存初始镜像所用的内存。

内存初始镜像挂接为根分区,此分区允许读/写操作。

执行linuxrc(它可以是任何合法的执行程序,包括shell脚本;该程序以uid为0方式运行,可以完成init所做的每件基本工作)。

在linuxrc终止时,真正的根文件系统被挂接。

若/initrd目录存在,则initrd被移动到此处,否则,initrd被卸载。

在根文件系统上完成正常的引导过程。例如,对于正常的系统而言,执行/sbin/init,这时控制就会转到正常的大家所熟知的启动过程了。而对于安装程序,它只需将控制转到安装过程的第一阶段,由它完成后续的安装环境的加载,设备的进一步初始化等操作。

创建一个初始内存镜像实际上就是创建一个文件,这个文件上包含了一个ext2文件系统,它可以使用回环方式(loop)挂接到本地文件系统上。下面的shell程序段可以创建初始内存镜像:

dd

if=/dev/zero of=/tmp/initrd bs=1k count=2000

创建一个2000k的整块文件,一定不能有碎片

mke2fs

/tmp/initrd

创建一个ext2文件系统

mount -t ext2 /tmp/initrd /mnt -o

loop

将此文件作为回环文件系统挂接到/mnt目录下

创建所需的路径和文件:

mkdir /mnt/dev

mknod

/mnt/dev/tty1 c 4 1

mkdir /mnt/lib

cp raid1.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能通过向其写入新的根文件系统设备号来改变,例如

#

echo 0×301

>/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服务器

脚本解释程序运行环境,例如Perl或Python等

安装程序

为了使运行环境最小,构建安装程序运行时刻库时,必须也是最精简的,也就是说,每个库文件必须被至少一个命令或者安装程序的某个部分所使用。同时在拷贝的过程中,使用strip命令拨去所有的调试信息。要检查一个命令使用了哪些动态库可以使用命令ldd。

例如,当安装程序中包含fdisk命令时,要检查它所需要的运行库,只需要运行下面的命令:

ldd

`which

fdisk`

这样我们就可以知道,fdisk需要的动态库为libc.so.6和ld-linux.so.2。接下来的工作就是将这两个库拷贝到安装程序的运行环境,同时运行

strip

libc.so.6

strip ld-linux.so.2

以拨去所有的调试信息。

下面我们以Mandrake

8.0为例,让我们看看它的安装程序运行环境包含了些什么东西。Mandrake

8.0的安装程序存放在光盘目录mdkinst下,其安装程序的目录结构是:

/etc

包含pcmcia设备的配置选项,sysconfig目录,调色板,Imlib缺生设置。

/lib

包含系统的运行库lib*和支持的驱动程序模块集。

/usr/X11R6/bin

包含XFree86服务器,包括XF86_FBDev、XF86_VGA16。

/usr/X11R6/X11

包含XFree86服务器的字体和本地化环境。

/usr/bin/

这是整个安装程序最关键的目录,它包含安装程序执行时需要的系统命令,安装程序源码,install2文件为安装程序的主控文件,所有安装程序的源程序保存在perl-install目录下。

/usr/lib/

包含多语言支持的运行库保存在gconv目录下,perl5运行所需的模块保存在perl5目录下,其他与本地化和gtk相关的设置。

/usr/share

包含控制台字体保存在consolefonts下,程序贴图和桌面主题贴图一部分保存在gtk目录下同时也包括此目录下的所有*.xpm,*.png文件,glibc的本地化环境保存在locale目录下,键盘映射分别保存在keymaps和xmodmap目录下,检测设备的信息文件(包含设备标识与设备驱动程序的对应关系)保存在ldetect-lst目录下。

保存在/lib/目录下的系统运行时刻库:

系统RPM包

动态库

Glibc

Ld-linux.so.2,libc.so.6,libcrypt.so.1,libdl.so.2,libm.so.6,libnsl.so.1,

libnss_dns.so.2,libnss_files.so.2,libnss_nis.so.2,libresolv.so.2

libext2fs2

libcom_err.so.2,libe2p,libuuid.so.1

db3 libdb-3.1.so

db3-devel

libdb.so.2

zlib1 Libz.so.1

libpng2 libpng.so.2

libgtk+1.2-devel

libgtk-1.2.so.0,libgdk-1.2.so.0

libimlib1 libgdk_imlib.so.1

libglib1.2

libglib-1.2.so.0

libglib1.2-devel libgmodule-1.2.so.0

libbzip2_1

libbz2.so.1

Lvm liblvm.so

Rpm librpm.so.0,librpmio.so.0

XFree86-devel

LibX11.so.6,libXext.so.6

XFree86-libs libXi.so.6

XFree86-server-common

libfont.so.1

Freetype libttf.so.2

2-1

保存在/usr/bin/目录下系统支持的命令:

系统rpm包 系统命令

Ash Ash

console-tools

Consolechars

Cpio Cpio

Gzip Gzip

e2fsprogs

badblocks,mke2fs,resize2fs,dumpe2fs

util-linux fdisk,rescuept

Modutils

insmod_,rmmod

Raidtools mkraid,raidstart,

bzip2 bzip2

Rpmtools

packdrake,parsehdlist

perl-base Perl

Lvm

pvcreate,pvdisplay,vgchange,vgcreate,vgdisplay,vgextend,vgremove,vgscan,lvcreate,lvdisplay,lvremove

kernel-pcmcia-cs

Ifport

Dosfstools Mkdosfs

reiserfs-utils mkreiserfs,resize_reiserfs

2-2

另外,因为perl语言具有一部分系统功能,所以为了减小运行环境,部分命令还可以采用perl语言编制。这些命令包括:

basename,bug,cat,chmod,chown,cp,dd,df,dirname,displaySize,dmesg,du,

e2fsck,fsck.ext2,getopts,grep,gunzip,head,head_tail,header,hexdump,

insmod,kill,ln,loadkeys,ls,lsmod,lspci,mkdir,mknod,mkswap,modprobe,more,

mount,pack,ps,raidstop,report_bug,rights,rm,rmdir,route,sh,sort,strings,

swapoff,swapon,sync,tail,tr,true,umount,uncpio,unpack,which

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值