slackware启动脚本详解

转载 2007年09月13日 10:58:00
当kernel启动成功之后

我们知道,kernel成功启动之后,在init/main.c中调用execve执行程序/sbin/init。init进程被称为初始化进程,因为它负责系统的启动。
我以我的slackware10为例(不光因为它是我用的套件,而且启动脚本十分清晰明了),讲一讲启动的具体过程:

(史前时期)loadlin,grub,lilo把内核参数传给kernel,如(BOOT_IMAGE=Linux ro root=307),,存储在/proc/cmdline中。
内核启动成功后,把它的参数传给1号进程(init),因为也许有一些参数应被用户程序解释。

init进程将从上到下的读取/etc/inittab文件,只要状态符合当前运行级就会去执行脚本。
inittab由几行组成,每行被三个冒号分隔成四个部分,每个部分具有不同的含义。格式如下:
行标识符:状态:动作:命令

行标识符是你的运行级脚本的名字,不能使用重复的行标识符。
状态是表示运行级脚本何时应该执行的数字。状态由0,1,2,3,4,5,6和S一个或多个数字字母组成。如果状态为空,就是系统启动必须执行的脚本。
下面是slackware的状态定义:
0 = halt
1 = single user mode
2 = unused (but configured the same as runlevel 3)
3 = multiuser mode (default Slackware runlevel)
4 = X11 with KDM/GDM/XDM (session managers)
5 = unused (but configured the same as runlevel 3)
6 = reboot
S同状态1相同。

动作有once, wait, respawn, sysinit, crtlaltdel, initdefault组成,说明了init执行脚本的方式。
once:init在进入后只执行一次。init不等待命令的结束。
wait:和once不同的是,init等待命令的结束。
respawn:命令结束后会被重起。
sysinit:init最先执行的运行级脚本,状态被忽略。说穿了就是无论何是都优先执行的脚本,应指向系统初始化脚本。
ctrlaltdel:当“三指禅”被按下时,该运行级被启动,一般是指向重启脚本。
initdefault:指定系统启动时的缺省运行级。在sysinit后执行。

对于slackware的inittab:
id:3:initdefault:
id指出缺省为多用户字符界面(3),不要把它设置成0或6!注意没有命令。

si:S:sysinit:/etc/rc.d/rc.S
si指出系统初始化运行级,其中S等同于状态1,它指向/etc/rc.d/rc.S,也就是说init第一个去执行的shell脚本。

rc:2345:wait:/etc/rc.d/rc.M
rc指出多用户启动运行级,当状态为2,3,4,5时被执行,init等待命令的结束,这也是为什么启动时没有shell可用的原因。

c1:1235:respawn:/sbin/agetty 38400 tty1 linux
c1指出控制台1,当它被杀死时init将重启它。它打开一个终端tty1供你使用。

x1:4:wait:/etc/rc.d/rc.4
x1指出多用户GUI运行级,指向脚本rc.4。

rc.S(系统初始化运行级脚本)做的事:
#安装proc文件系统。
#决定是否有需要使用Hotplug自动检测硬件。
#启动devfsd。
#安装devfs。
#为2.6内核启动udev。
#打开交换分区,其中要读取/etc/fstab中获取分区信息。
#检查根分区是否为只读,因为只有只读时才能检查硬盘。
#如有需要检查根分区。
#安装sysfs到/proc/sys。
#设置硬件时钟。
#配置isa设备。
#执行/etc/rc.d/rc.modules (这个文件将剩下的内核模块装入内核,稍后再讲)。
#初始化lvm卷,不要问我为什么。
#检查非根分区。
#安装本地硬盘分区。
#删除临时文件。
#initrd被安装在/initrd中,它用来在内核启动第一时间载入一些内核模块和必需程序(如fsck)等。现在卸载它。
#创建utmp。
#如果你是用的zipslack(一个工作在vfat上的linux套件),配置umsdos。
#把Linux 2.4.27写入你的mtod文件
#执行rc.sysvinit。(不像rh,slackware是一个“叛徒”。它的init脚本结构不像大多数linux套件(基于SVR4),而像BSD,所以只是一个假文件。)
#执行rc.serical。(串口)
#安装随机数种子

rc.modules:
#决定内核版本,到目录”/lib/modules/你的内核版本号/“去寻找模块
#更新内核模块依赖关系。
#装入APM高级管理,它被注释掉了,建议你启用它以正常关机。
#一大堆被注释掉了的硬件模块,如果hotplug找不到你的硬件就到这里来。

rc.S执行完成后,slackware将执行缺省的运行级(3),也就是先执行rc.M(多用户进程级)。
#设置黑屏时间。
#设置主机名,主机名存储在/etc/HOSTNAME里,缺省为darkstar.example.net。
#设置dmesg缓冲区的大小。越多越好。
#执行rc.syslog,打开syslog和klogd。
#执行rc.pcmcia,初始化PCMCIA卡,我不懂。
#执行rc.inet1,设置网络。重点。
#执行rc.hotplug,即插即用。
#执行rc.inet2,网络守护进程。重点。
#把所有的锁文件删掉。
#把黑洞设备和临时目录设成777。
#运行ldconfig,更新共享库,我喜欢关掉。
#更新X字体缓存,关掉吧。不过安了新字体后自己要手动运行一次”fc-cache"而已。
#执行rc.CUPS,UNIX打印守护进程。
#打开appletalk。关了吧。
#打开用户限额。请看/usr/doc/Linux-HowTOs/Quota。
#执行rc.acpid。高级能源管理。
#执行rc.alsa。alsa声音系统。
#执行rc.font。用户自己的字体。
#执行rc.keymap。用户自己的keymap。
#把你的一大堆网络standalone进程打开。
#执行rc.gpm。字符界面上用鼠标。
#又执行rc.sysinit一次。BUG?
#执行rc.local。最后,执行用户你的自己的配置文件。

rc.inet1:
#读入另一个脚本文件rc.inet1.conf的变量,里面有网络的基本配置。
#打开lo环回接口。
#打开eth0 eth1 eth3 eth4, 请看eth_up函数,很长。
#如有需要使用无线网卡。
#如有需要使用DHCP。

rc.inet2
#启动rc.portmap,准备安装NFS文件系统
#安装所有smb文件系统
#执行rc.firewall,防火墙脚本。
#执行rc.ip_forward,IP转发脚本,如果你要共享上网,改它。
#一大堆网络服务程序(NFS,BIND,SSH,INETD)

rc.M执行完了,init按照inittab的配置打开终端,它创建若干个agetty进程,这些进程通过系统调用执行login程序,用户密码验证成功后,再执行shell。一天的工作开始了。在这之后,init除了监视运行级的改变外,还干一些副业:收养孤儿进程。

如果你是用的运行级4(多用户GUI运行级),init就会去执行rc.4,并打开gdm或kdm(Gnome和Kde的登录界面)。

经验:
1。init脚本里面请使用绝对路径,且限制PATH。
2。可以适当增减脚本的内容来充实功能或加快启动速度。不过你一旦挂了的话,请用init=/bin/sh或single模式开机。
3。就像看Linux内核源代码能增强C语言功底一样,看init脚本能提高Bash功底。
4。一个清晰明了的结构胜过一切描述,这也是我选择Slackware的原因。
5。如果说Windows是所见即所得的操作系统,那么说Unix/Linux是所要即所得的操作系统。(因为Unix/Linux在能彻底定制系统,要什么有什么)
 

并不神秘的 Slackware

并不神秘的 Slackware作者:windrose 来自:LinuxSir.Org 简介:本文较为全面地介绍了Slackware设计思想及其显著特色,力图吸引更多人来了解和尝试这个优秀的发行版。本次...
  • goodboy1881
  • goodboy1881
  • 2006年03月30日 06:01
  • 2227

slackware的一些常用配置

花了点时间在本子上装了slackware14 x86_64的,感觉还行。这次没有装linux和win的双系统,单跑slackware,然后在虚拟机中跑个xp,主要是为了网银的使用和解决office的兼...
  • dndxhej
  • dndxhej
  • 2013年03月08日 13:26
  • 7066

深入研究 - Slackware的启动(init)过程

  这是在自己学习linux from scratch时就mingetty的疑问在网上查到的一篇文章,受益不少,转载过来。原文链接:http://www.linuxsir.org/bbs/showth...
  • jcwKyl
  • jcwKyl
  • 2009年08月07日 15:33
  • 1746

slackware中Samba服务器配置

由于在安装时选择了full,所以Samba服务器已经安装了,不过要启动Samba,先要修改/etc/rc.d/rc.samba的权限,因为默认它不可以执行。1、如果直接输入/etc/rc.d/rc.s...
  • ballzb
  • ballzb
  • 2008年03月24日 07:06
  • 622

slackware包的管理机制

一.简介包管理机制是Slackware区别于其他Linux 发行版的重要的甚至是本质的区别。Slackware的包管理机制简单、灵活、高效、安全,用户透明性大,可定制程度高。因为Slackware的标...
  • eroswang
  • eroswang
  • 2007年08月11日 21:27
  • 3071

slackware的安装和配置

很多Linux的老用户肯定不会忘记slackware的。slackware的简单和稳定众所周知,但是这个“简单”并非是使用起来简单。在slackware中,没有多余的软件管理器和不必要的库等等,所有的...
  • xuzhigang_China
  • xuzhigang_China
  • 2012年11月11日 21:29
  • 2054

Slackware 14.1 安装后记

MD,我只想说现在windows下的安装软件太TM流氓了!!! “免费安装百度工具条” “免费安装OOXX杀毒工具” "亲,您的电脑正在受到威胁,让OOXX来保护您的电脑" ... ... ...
  • dark_fire
  • dark_fire
  • 2014年12月06日 12:03
  • 800

Slackware从网络安装第三方软件

前一阵子,使用Archlinux时,在usr目录下用root误操作,把/user/bin目录都删了,系统起不来了,惨痛教训。 无奈,重新安装了个Slackware,与Archlinux类似,...
  • topgun38
  • topgun38
  • 2013年04月14日 21:58
  • 1917

SlackWare 13上安装scim输入法!

1.安装输入法如果,在安装系统的时候选择的全部安装并且选择国际化包选项的话,那么scim已经安装好了。关于scim的结构有几点需要介绍:1.启动X系统之前我们就需要启动scim进程2.保证所有的应用程...
  • rainbowbaby
  • rainbowbaby
  • 2009年08月29日 21:56
  • 3632

slackware软件的安装和卸载

1.我们如何安装单个软件包? 方面主要有以下几种: 我们可以通过installpkg来安装,但软件包的文件格式必须是tgz的,比如下面: [root@sir wally]#ins...
  • cogent2001
  • cogent2001
  • 2007年05月17日 22:53
  • 2262
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:slackware启动脚本详解
举报原因:
原因补充:

(最多只允许输入30个字)