LTSP的啟動流程 (zz 教材發展工作室)

当你打开工作站电脑时,它将会进入(POST)电源开啟自我检测。
在自我检测时,bios将会搜寻延伸唯读记忆体,而网路卡所包含的网路开机唯读记忆体(boot rom),它就是延伸唯读记忆体,bios将可以侦测出在网路卡上的唯读记忆体。
只要电源开啟自我检测完成,执行权将会跳到网路开机的程式码(code)。
网路开机的程式码将会扫描网卡。只要它侦测到相符的网路卡,则网路卡将会被初始化。
然后网路开机的程式码将会对本地的网路广播DHCP的请求,这个请求将会包含网路卡的MAC位址。
在伺服器电脑上的dhcpd服务将接到来自工站的电脑的广播,并且找出合乎工作站电脑的MAC位址的设定档的记录。
dhcpd服务将会组合一个回应封包,它包含了数项资讯。这个封包将会传回工作站电脑,这回应的资讯有:
 给工作站电脑的IP位址。
 本地网路的子网路遮罩(NETMASK)设定。
 要下载的核心路径名称。
 要掛入的根档案系统之路径名称。
 要传送给核心的选择性参数,此参数以核心指令行的方式传入。
开机的程式码将会接收到来自伺服器电脑的dhcpd回应,而且它将会藉由上述所提供的参数来设定网路卡上的TCI/IP的介面。(由两部不同的DHCP伺服器,可以看出其中的差异)
使用TFTP(Trivial File Transfer Protocol),网路开机的程式码将会连接到伺服器电脑,并且开始下载核心。
只要核心己经完全下载到工作站电脑后,这网路开机程式码会放置核心到记忆体的正确位址上。
然后,控制权会被转给核心,核心将会初始化整个系统以及所有它所认得的介面。
从这裡开始才真正好玩呢!接在核心的后面是一个档案系统的影像档,它将会被放入记忆体而成为一个记忆磁碟(ramdisk),而且会暂时地掛载成根档案系统。一个核心指令行的参数root=/dev/ram0就是告诉核心要掛入这个影像档成为根目录。
在正常情况下,当核心完成开机,它将会啟动init程式。但在这时我们却指示核心去啟动一个Shell指令来替代,我们是籍由核心指令行init=/linuxrc来完成这个工作的。
/linuxrc指令由扫描PCI bus开始,以便找出一片网路卡。对每一个找到的PCI装置,它都会比对/etc/niclist这个档案内容,看看是否有相符的。只要一有相符的,NIC驱动程式的名字就会被回传,而且核心模组就会被载入。对於ISA卡而言,则驱动程式的模组一定要先被指定在核心的指令行上,而且应包含网路卡的IRQ或是记忆体位址的参数。
只要网路卡一被指定,则/linuxrc指令将会取得有支援该网路卡的核心模组。
dhclient将会开始执行,并向DHCP服务做另一项请求。在此我们必须先做分离使用者空间的请求。因为如果只是依赖来自网路开机的设定,则它会被核心(网路开机时的第一个核心)吞掉,而且核心将会忽NFS服务己经指定的根路径(root-path),而这就是为什麼要用NFS而不用TFTP的重要差异。
只要dhclient取得来自伺服器的回应,它将会去执行/etc/dhclient-script档,这个档案会利用取回的资讯并设定eth0的网路介面。
在这时候,己有一个根档案系统在记忆体磁碟内(到此称为Shell阶段),现在/linuxrc又籍由NFS载入一个新的根档案系统,这个目录是由伺服器上的/opt/ltsp/i386所匯出的(只要是在LTSP新建立的应用程式,就要将相关的函数放到/opt/ltsp/i386的目录下)。可是不能立刻掛入这个新的档案系统而成为/(根目录),它会先被掛入成为/mnt,然后再执行pivot_root(旋转根),pivot_root将会对现行的根档案系统及新档案系统作交换,完成这个动作后,NFS的档案系统将会被掛载成/,而旧的根档案系统将会被掛载成/oldroot。
只要一完成载入及新的根档案系统的转换,我们就己经完成/linuxrc的工作,并且要呼叫真正的init程式。
init程式将会读取/etc/inittab档,并开始设定工作站的环境。
init包含了3个runlevel的执行设定,每一个runlevel都对工作站设定了不同的服务。LTSP工作站的啟动是设定在runlevel2,它是设定在inittab档内的initdefault。
在inittab档案内第一项目之一是rc.local,当工作站指令在sysinit的状态时,它将会被执行。
rc.local指令将会產生一个1MB的记忆体磁碟,以便让系统(指网路开机的工作站)在任何需要的状况下,有可以做写入或修正的空间。
这个记忆体磁碟将会被掛载为/tmp目录,任何需要被写入的档案将会直接存在在於/tmp目录,而且有许多的符号连结会指向这些档案。
/proc档案系统被掛载。
如果工作站被设定要透NFS来做swap,则/var/opt/ltsp/swapfiles目录将会掛载为/tmp/swapfiles;如果尚无swapfiles提供给工作站使用,它将会自动的產生,而swapfiles档的大小是由lts.conf档所设定的。
loopback的网路介面被设定,这个网路介面一定是以127.0.0.1作为IP位址。
如果本机的应用软体(Local Apps)被啟动,则/home目录将会被掛载,以便应用软体可存取使用者的家目录。
在/tmp档案系统下有数个目录会產生,它是让系统在执行时,作为档案短暂存取用的。目录如下:
/tmp/compiled
/tmp/var
/tmp/var/run
/tmp/var/log
/tmp/var/lock
/tmp/var/lock/subsys
X视窗系统将会被设定在lts.conf档内有一个参数被称为XSERVER。如果该参被忽略或设成auto,则自动侦测的功能将会啟动,如果,显示卡是PCI的设备,则我们可以取得PCI显示卡的供应商及装置编号,你可以由/etc/vidlist档案查看相关讯息。如果这个显示卡为XFree86 4.X所支援,则pci_scan程序将会回应它的驱动程式模组,如果仅支援到XFree86 3.3.6则pci_scan将会回应X伺服器的名字来使用。在rc.local指令档内可以设定这些差异,因为较旧的3.3.6是以XF86_为开头字串的。
如果XFree86 4.X被使用,则/etc/rc.setupx指令将被呼叫,以建立一个XF86Config给X4。如果XFree86 3.3.6被使用,则/etc/rc.setupx3将被使用以建立XF86Config档。
当rc.setupx指令完成后,程序将再转回rc.local。然后/tmp/start_ws指令档将被產生,这个档案是负责啟动X伺服器的。(所以,LTSP最终是以一个核心加上X伺服器在运作)
接著/tmp/syslog.conf将被產生,这个档案则包含了要告知syslogd服务要传送记录资讯给网路上那一部主机的设定,其中syslog主机是在lts.conf档内所指定的。/etc/syslog.conf这个符号连结档是指向/tmp/syslog档。
再来syslogd服务将被啟动,它所使用的设定档是同上一个步骤的產生的。
最后,控制权回到init,init将会查看initdefault的记录以决定那一个runlevel要被执行。在lts_core-2.08的内定值是2。
以runlevel 2来说,它将会告知init执行set_runlevel指令,该指令将会读取lts.conf档,并且决定那个工作站真正要执行的runlevel。
 LTSP的runlevel有3、4、5
3-这是啟动为指令模式,这对工作站的侦错是相当有用的。
4-这将执行一至多个telnet的文字模式,如果你想取代旧有的终端机,这是将是一个不错的选择。
5-GUI模式。这将啟动X视窗,并传送一个XDMCP的查询给伺服器,如此将会带出一个登入的对话框,你可由XDM、GDM、KDM中选择一个作为你的视窗管理介面。 

你可能感兴趣的:(LTSP的啟動流程 (zz 教材發展工作室))