QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3506|回复: 13

建议:xdm 的启动放到 rc.X 里面,作为一个服务管理。

[复制链接]
发表于 2007-2-4 10:19:40 | 显示全部楼层 |阅读模式
类似 gentoo 的效果,从 inittab 里挪到 /etc/init.d/ 之后让 rc 来启动他。同时设定他最后一个启动。

当然,我的建议还是重写 /etc/rc ,现在 ML 的 rc 太简单了。不适合制作、定制一个系统了。

所以我建议参考 gentoo 的 rc ,所有的开机启动的程序都作为服务,统一管理。
也可以参考 gentoo 的运行级别方式,分段启动服务。
进而可以设计为任何一个程序,都可以放到开机自启动里。




当然,还有一个原因是因为 gentoo 和 ML  的 rc 差别太大,我看不懂 gentoo 的 rc ………………
 楼主| 发表于 2007-2-4 12:34:10 | 显示全部楼层
初步想法:

把绝对的最底层服务,或者通用的服务,放到一个目录中,rc 首先启动这个目录,而且没有必要,不建议用户修改。
允许用户修改,或者新添加的服务,根据需要,放到不同的 rc.X 目录里。
学习 gentoo 的环境变量设置,把 conf 放到一个目录中,rc 读取进行预设置。(对一些特殊环境变量要求的软件很管用,而且修改环境变量也方便,一个软件更新了,把他的 conf 一起更新不影响别的软件)
再增加一个目录,允许用户方上软件的启动程序的 ln 或者 script,rc 最后启动它。

顺序:
1、先取得所有的配置文件,让系统变量变成设定好的值。
2、启动基本服务
3、启动一般服务
4、启动用户程序(其实这个基本算是没什么)

切换 init 只处理一般服务,当然会出现管理基本服务存在问题,可以以后考虑。
回复

使用道具 举报

发表于 2007-2-4 12:53:25 | 显示全部楼层
xdm 在各大 distro 基本都是 在 rc.5 里的。

ml 不是吗?
回复

使用道具 举报

 楼主| 发表于 2007-2-4 13:30:16 | 显示全部楼层
看样子 ML 在 inittab 里

x:5nce:/etc/X11/prefdm -nodaemon
回复

使用道具 举报

 楼主| 发表于 2007-2-4 13:34:34 | 显示全部楼层
我狂晕。
/etc/rc.d/rc.sysinit 里面还有那么多东西………………
回复

使用道具 举报

 楼主| 发表于 2007-2-4 13:35:42 | 显示全部楼层

强烈要求 ML 把 /etc/rc.d/rc.sysinit 和 /etc/rc 合并……………………
  
回复

使用道具 举报

发表于 2007-2-4 16:05:13 | 显示全部楼层
可是这样做的话, 我们就不能在 grub 中控制 X 的启动了。

在 Gentoo 中,一般都是使用 init 3 的,然后把 xdm 作为服务启动。这样如果 X 配置出错了的话很烦人,特别是 X-Server 不停重启的时候。

我试过一次,X 配错了,X-Server 不停地重启,当时手头上没有引导光盘(不记得扔哪了 ) 。只能在 root 用户下使用 /etc/init.d/xdm stop 命令。想想当时按一个命令字母就要按一下 CTRL+ALT+F1,就郁闷了。

不过没试过在 grub 中加入 init 1,不知道能不能取消服务启动的。要是能,我那时就真是傻B了  
回复

使用道具 举报

发表于 2007-2-4 19:40:14 | 显示全部楼层
heyuqi,

如果是 SYSTEM V 的启动方式

放到 rc.5就只有在init 5下才会被运行。
从init 5切换到init 3会被关闭
启动到init 3不会被运行
回复

使用道具 举报

发表于 2007-2-4 20:00:17 | 显示全部楼层
Gentoo太复杂了,看看Arch的:

我的系统的启动进程的设计:

init 5:
http://zinczombie.spaces.live.com/blog/cns!9175AA0F213BAB7C!159.entry
init 3:
http://zinczombie.spaces.live.com/blog/cns!9175AA0F213BAB7C!158.entry

[lanzinc@206studio etc]$ ls  rc.*
rc.conf         rc.local           rc.multi     rc.single
rc.conf.pacnew  rc.local.shutdown  rc.shutdown  rc.sysinit

rc.d:
acpid           gpm                        kpasswd  saslauthd
adsl            hal                        lisa     sensors
alsa            heimdal-kdc                motion   slapd
avahi-daemon    httpd                      mysqld   slpd
avahi-dnsconfd  hwd                        netfs    snmpd
crond           iptables                   network  svnserve
cups            jack-audio-connection-kit  nscd     syslog-ng
dbus            kadmind                    portmap  tor
esd             kdm                        postfix  virtualbox
fam             kmyfirewall                ppp
functions       kmyfirewall.bak            privoxy

[lanzinc@206studio etc]$ cat rc.conf.pacnew (rc.conf的一个备份,启动过程配置文件。相当于原始的rc.conf,未被我修改过的)
#
# /etc/rc.conf - Main Configuration for Arch Linux
#

#
# -----------------------------------------------------------------------
# LOCALIZATION
# -----------------------------------------------------------------------
#
# LOCALE: available languages can be listed with the 'locale -a' command
# HARDWARECLOCK: set to "UTC" or "localtime"
# TIMEZONE: timezones are found in /usr/share/zoneinfo
# KEYMAP: keymaps are found in /usr/share/kbd/keymaps
# CONSOLEFONT: found in /usr/share/kbd/consolefonts (only needed for non-US)
# CONSOLEMAP: found in /usr/share/kbd/consoletrans
# USECOLOR: use ANSI color sequences in startup messages
#
LOCALE="en_US.utf8"
HARDWARECLOCK="localtime"
TIMEZONE="Canada/Pacific"
KEYMAP="us"
CONSOLEFONT=
CONSOLEMAP=
USECOLOR="yes"

#
# -----------------------------------------------------------------------
# HARDWARE
# -----------------------------------------------------------------------
#
# Scan hardware and load required modules at bootup
MOD_AUTOLOAD="yes"
# Module Blacklist - modules in this list will never be loaded by udev
MOD_BLACKLIST=()
#
# Modules to load at boot-up (in this order)
#   - prefix a module with a ! to blacklist it
#
MODULES=()
# Scan for LVM volume groups at startup, required if you use LVM
USELVM="no"

#
# -----------------------------------------------------------------------
# NETWORKING
# -----------------------------------------------------------------------
#
HOSTNAME="myhost"
#
# Use 'ifconfig -a' or 'ls /sys/class/net/' to see all available
# interfaces.
#
# Interfaces to start at boot-up (in this order)
# Declare each interface then list in INTERFACES
#   - prefix an entry in INTERFACES with a ! to disable it
#   - no hyphens in your interface names - Bash doesn't like it
#
# Note: to use DHCP, set your interface to be "dhcp" (eth0="dhcp")
#
lo="lo 127.0.0.1"
eth0="eth0 192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255"
INTERFACES=(lo eth0)
#
# Routes to start at boot-up (in this order)
# Declare each route then list in ROUTES
#   - prefix an entry in ROUTES with a ! to disable it
#
gateway="default gw 192.168.0.1"
ROUTES=(!gateway)
#
# Enable these network profiles at boot-up.  These are only useful
# if you happen to need multiple network configurations (ie, laptop users)
#   - set to 'menu' to present a menu during boot-up (dialog package required)
#   - prefix an entry with a ! to disable it
#
# Network profiles are found in /etc/network-profiles
#
#NET_PROFILES=(main)

#
# -----------------------------------------------------------------------
# DAEMONS
# -----------------------------------------------------------------------
#
# Daemons to start at boot-up (in this order)
#   - prefix a daemon with a ! to disable it
#   - prefix a daemon with a @ to start it up in the background
#
DAEMONS=(syslog-ng network netfs crond)


# End of file
[lanzinc@206studio etc]$  


[lanzinc@206studio etc]$ pacman -Qs init
local/gen-init-cpio 2.6.17-1
    Program to compress initramfs images
local/initscripts 0.8-6
    System initialization/bootup scripts
local/mkinitcpio 0.5.13-1
    Advanced, modular initramfs image creation utility
local/module-init-tools 3.2.2-3
    Utilities for inserting and removing modules from the Linux kernel
local/mozilla-common 1.1-1
    Common Initialization Profile for Mozilla.org products
local/sysvinit 2.86-2
    Linux System V Init
local/xorg-xinit 1.0.3-1
    X.Org initialisation program

[lanzinc@206studio etc]$ pacman -Ql sysvinit
sysvinit /bin/
sysvinit /bin/mountpoint
sysvinit /bin/pidof
sysvinit /sbin/
sysvinit /sbin/bootlogd
sysvinit /sbin/halt
sysvinit /sbin/init
sysvinit /sbin/killall5
sysvinit /sbin/poweroff
sysvinit /sbin/reboot
sysvinit /sbin/runlevel
sysvinit /sbin/shutdown
sysvinit /sbin/sulogin
sysvinit /sbin/telinit
sysvinit /usr/
sysvinit /usr/bin/
sysvinit /usr/bin/last
sysvinit /usr/bin/lastb
sysvinit /usr/bin/mesg
sysvinit /usr/bin/utmpdump
sysvinit /usr/bin/wall
sysvinit /usr/include/
sysvinit /usr/include/initreq.h
sysvinit /usr/man/
sysvinit /usr/man/man1/
sysvinit /usr/man/man1/last.1.gz
sysvinit /usr/man/man1/lastb.1.gz
sysvinit /usr/man/man1/mesg.1.gz
sysvinit /usr/man/man1/mountpoint.1.gz
sysvinit /usr/man/man1/wall.1.gz
sysvinit /usr/man/man5/
sysvinit /usr/man/man5/initscript.5.gz
sysvinit /usr/man/man5/inittab.5.gz
sysvinit /usr/man/man8/
sysvinit /usr/man/man8/bootlogd.8.gz
sysvinit /usr/man/man8/halt.8.gz
sysvinit /usr/man/man8/init.8.gz
sysvinit /usr/man/man8/killall5.8.gz
sysvinit /usr/man/man8/pidof.8.gz
sysvinit /usr/man/man8/poweroff.8.gz
sysvinit /usr/man/man8/reboot.8.gz
sysvinit /usr/man/man8/runlevel.8.gz
sysvinit /usr/man/man8/shutdown.8.gz
sysvinit /usr/man/man8/sulogin.8.gz
sysvinit /usr/man/man8/telinit.8.gz
[lanzinc@206studio etc]$  

[lanzinc@206studio etc]$ pacman -Ql initscripts
initscripts /bin/
initscripts /bin/isatty
initscripts /etc/
initscripts /etc/conf.d/
initscripts /etc/inittab
initscripts /etc/network-profiles/
initscripts /etc/network-profiles/template
initscripts /etc/rc.conf
initscripts /etc/rc.d/
initscripts /etc/rc.d/functions
initscripts /etc/rc.d/netfs
initscripts /etc/rc.d/network
initscripts /etc/rc.local
initscripts /etc/rc.local.shutdown
initscripts /etc/rc.multi
initscripts /etc/rc.shutdown
initscripts /etc/rc.single
initscripts /etc/rc.sysinit
initscripts /sbin/
initscripts /sbin/makedevs
initscripts /sbin/minilogd
initscripts /usr/
initscripts /usr/bin/
initscripts /usr/bin/netcfg
[lanzinc@206studio etc]$            

如果需要我可以把相应的 脚本也贴出来。
希望有用。

主要的是进程的启动顺序,及以那个身份运行。以用户身份还是root身份,或进程独有的用户身份运行。
登录后运行还是登录前运行。
回复

使用道具 举报

发表于 2007-2-4 21:23:46 | 显示全部楼层
Arch启动分析表格

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

 楼主| 发表于 2007-2-4 21:41:14 | 显示全部楼层
gentoo 也是可以区分 init 3 到 5 的,只不过他的 rc 并不处理 123456
对于 gentoo 的 rc 看看 inittab 就知道 rc 脚本获得的不是级别,而是 initsystem ,singal ,boot 和 default 。
rc 根据这几个参数,确定运行级别。

至于 X 启动失败的处理,RH 很早就实现了 5 次失败后使用一个字符界面显示错误的解决方式了。

至于lanzinc的,我已经看晕了,arch  的 rc 有那么多文件??
回复

使用道具 举报

发表于 2007-2-4 22:07:52 | 显示全部楼层
不多关键的就是
initscripts /etc/rc.conf
initscripts /etc/rc.d/
initscripts /etc/rc.d/functions
initscripts /etc/rc.d/netfs
initscripts /etc/rc.d/network
initscripts /etc/rc.local
initscripts /etc/rc.local.shutdown
initscripts /etc/rc.multi
initscripts /etc/rc.shutdown
initscripts /etc/rc.single
initscripts /etc/rc.sysinit

rc.d下都是同一格式的脚本


根据rc.conf的配置决定是否启动时载入.

很多都是,需要时再用 /etc/rc.d/servername start 加载的

比如上面的rc.conf.pacnew(默认配置) 就只是 载入 很少的几个:syslog-ng network netfs crond
在:

DAEMONS=(syslog-ng network netfs crond)
定义的
这些是由init进程 调用的脚本加载的。

而我自己的
[lanzinc@206studio ~]$ cat /etc/rc.conf | grep DAEMONS
# DAEMONS
DAEMONS=(syslog-ng acpid !hotplug  !pcmcia network  !netfs crond  hal adsl  cups !gpm
postfix privoxy kmyfirewall )
[lanzinc@206studio ~]$

只在启动时由init加载 syslog-ng acpid  network   crond  hal adsl  cups postfix privoxy kmyfirewall



其他一些的则是由login ,bash或kdm调用的。

但是所有的后台程序都可以有一个rc.d下的脚本文件,可以在任何需要的地方使用
/etc/rc.d/xxxx start | stop | restart 命令来管理。

----------------------------
#
# /etc/inittab
#

#  Runlevels:
#    0    Halt
#    1(S)       Single-user
#    2    Not used
#    3    Multi-user
#    4    Not used
#    5    X11
#    6    Reboot

id:5:initdefault:             (默认是 init 5 )

rc::sysinit:/etc/rc.sysinit   ( init all)
rs:S1:wait:/etc/rc.single   (init 1 or s)
rm:2345:wait:/etc/rc.multi  (init 2~5)
rh:06:wait:/etc/rc.shutdown (init 0 or  6)
su:S:wait:/sbin/sulogin -p    (init s )

c1:2345:respawn:/sbin/agetty 38400 vc/1 linux  (init 2~5 open a console at vc/1)
c2:2345:respawn:/sbin/agetty 38400 vc/2 linux   (init 2~5 open a console at vc/2)

ca::ctrlaltdel:/sbin/shutdown -t3 -r now  (when catraldel is push run /sbin/shutdown -t3 -r now)

x:5:respawn:/opt/kde/bin/kdm   #-nodaemon  (init 5 ,start KDM)


# End of file
--------------------------

[lanzinc@206studio ~]$ cat /etc/rc.multi
#!/bin/bash
#
# /etc/rc.multi
#

. /etc/rc.conf
. /etc/rc.d/functions

# Load sysctl variables if sysctl.conf is present
[ -r /etc/sysctl.conf ] && /sbin/sysctl -q -p &>/dev/null

# Start daemons
for daemon in "${DAEMONS[@]}"; do
        if [ "$daemon" = "${daemon#!}" ]; then
                if [ "$daemon" = "${daemon#@}" ]; then
                        /etc/rc.d/$daemon start
                else
                        stat_bkgd "Starting ${daemon:1}"
                        (/etc/rc.d/${daemon:1} start) &>/dev/null &
                fi
        fi
done

if [ -x /etc/rc.local ]; then
        /etc/rc.local
fi

# vim: set ts=2 noet:
[lanzinc@206studio ~]$
回复

使用道具 举报

 楼主| 发表于 2007-2-4 22:12:51 | 显示全部楼层
DAEMONS=(syslog-ng network netfs crond)

那我更倾向于 rc.X 的 K* 和 S*
回复

使用道具 举报

发表于 2007-2-4 22:40:11 | 显示全部楼层
那我更倾向于 rc.X 的 K* 和 S*


K*
S*
是标准的System V 的作法

需要一个脚本来解析rc.x中的符号连接的文件名。

一般是在rc.d里面放脚本
然后在rc.x中放符号连接,用一定的规则来命名。


Arch的理念是"简单易懂“
因此脚本都很简单,并很有可读性。

上次看 ubuntu 最新一版(好像是6.10)的启动流程,发现他居然没有 inittab这个文件。 看了半天不知到从那里开始的(难道内核加载完成后,不是启动init作为第一个进程???!!!)

狂晕。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-4-19 07:35 , Processed in 0.117228 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表