LinuxSir.Org  
| 网站首页 | 论坛帮助 |

欢迎来到LinuxSir.Org!
您还未登录,请登录后查看论坛,或者点击论坛上方的注册链接注册新账号。


发表新主题 回复
 
主题工具
旧 10-08-31, 11:26 第 1 帖
bhoppi
 
bhoppi 的头像
 
 
注册会员  
  注册日期: Dec 2009
  帖子: 184
  精华: 0
 

标题: 给Archlinux添加runlevel切换机制


如何能够让Archlinux能够根据runlevel的不同加载不同的daemon,就像其他的发行版那样

我对此问题的解决方案在8楼,大家有什么好的建议欢迎提出

此帖于 10-09-01 14:53 被 bhoppi 编辑.
  bhoppi 当前离线   回复时引用此帖
旧 10-08-31, 12:20 第 2 帖
jqxl0205 帅哥
 
 
 
注册会员  
  注册日期: Dec 2007
  帖子: 526
  精华: 0
 

grub里面好像可以指定







__________________
K.I.S.S

ArchLinux 2.6.37
  jqxl0205 当前离线   回复时引用此帖
旧 10-08-31, 12:49 第 3 帖
bhoppi
 
bhoppi 的头像
 
 
注册会员  
  注册日期: Dec 2009
  帖子: 184
  精华: 0
 

引用:
作者: jqxl0205
grub里面好像可以指定
我的意思是如何能够根据runlevel的不同加载不同的daemon,就像其他的发行版那样
  bhoppi 当前离线   回复时引用此帖
旧 10-08-31, 22:31 第 4 帖
沈觅仁
 
沈觅仁 的头像
 
 
注册会员  
  注册日期: Apr 2010
  我的住址: 江都
  帖子: 131
  精华: 0
 

估计不行。除非自己写个/etc/rc.d/runlevel 之类的脚本自己实现不同runlevel的启动。







__________________
dickeny是我的马甲。
================= 挚爱KDE4!===================
类型:Laptop
核心:T8100
硬盘:320G + LVM
显卡:ATI Radeon HD 2400 XT
系统:ArchLinux + 2.6.33.3
桌面:KDE 4.4.3

http://dickeny.com/
https://www.dropbox.com/link/21.vcFaFTBNnS
  沈觅仁 当前离线   回复时引用此帖
旧 10-08-31, 22:37 第 5 帖
hpo3
 
 
 
注册会员  
  注册日期: Jan 2006
  帖子: 141
  精华: 0
 

引用:
作者: 沈觅仁
估计不行。除非自己写个/etc/rc.d/runlevel 之类的脚本自己实现不同runlevel的启动。
不是很明白,为什么不行呢?在/etc/inittab里面不能定义运行级的daemon吗?
  hpo3 当前离线   回复时引用此帖
旧 10-09-01, 00:11 第 6 帖
bhoppi
 
bhoppi 的头像
 
 
注册会员  
  注册日期: Dec 2009
  帖子: 184
  精华: 0
 

引用:
作者: 沈觅仁
估计不行。除非自己写个/etc/rc.d/runlevel 之类的脚本自己实现不同runlevel的启动。
想了一下午,我也觉得必须得自己写个脚本。已经基本完成,正在调试Bug

引用:
作者: hpo3
不是很明白,为什么不行呢?在/etc/inittab里面不能定义运行级的daemon吗?
可以实现,但是很麻烦,会把这个最重要的配置文件改得凌乱不堪,而且不符合Kiss原则
  bhoppi 当前离线   回复时引用此帖
旧 10-09-01, 11:37 第 7 帖
bhoppi
 
bhoppi 的头像
 
 
注册会员  
  注册日期: Dec 2009
  帖子: 184
  精华: 0
 

呼呼,终于搞定了
我再优化优化,稍后分享出来。个人水平有限,见笑
  bhoppi 当前离线   回复时引用此帖
旧 10-09-01, 12:12 第 8 帖
bhoppi
 
bhoppi 的头像
 
 
注册会员  
  注册日期: Dec 2009
  帖子: 184
  精华: 0
 

三步曲,第一步,创建/etc/rc.runlevel,属性-rwxr-xr-x,内容如下:
引用:
#!/bin/bash
#
# /etc/rc.runlevel
# scripted by Bhoppi
#

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

run_hook runlevel_start

get_spec_daemons()
{
case "$1" in
2)
dmlst=(${DAEMON2[@]})
;;
3)
dmlst=(${DAEMON3[@]})
;;
4)
dmlst=(${DAEMON4[@]})
;;
5)
dmlst=(${DAEMON5[@]})
;;
*)
dmlst=()
;;
esac
}

runlvls="$(/sbin/runlevel)"
prelvl=${runlvls:0:1}
curlvl=${runlvls:2:3}

if in_array "$prelvl" 2 3 4 5; then
get_spec_daemons "$prelvl"
printhl "---- Stopping Runlevel $prelvl Daemons..."
let i=${#dmlst[@]}
while [ $i -gt 0 ]; do
let i=i-1
if [ "${dmlst[$i]#!}" = "${dmlst[$i]}" ]; then
ck_daemon ${dmlst[$i]#@} || stop_daemon ${dmlst[$i]#@}
fi
done
printhl "---- Stopping Completed"
fi

commonlvl=(35 53 23 24 25 32 34 42 43 45 52 54)
if ! in_array "$prelvl$curlvl" "${commonlvl[@]}"; then
case "$curlvl" in
[06])
. /etc/rc.shutdown
;;
[S1])
. /etc/rc.single
;;
[2345])
. /etc/rc.multi
;;
*)
;;
esac
fi

if in_array "$curlvl" 2 3 4 5; then
get_spec_daemons "$curlvl"
printhl "---- Starting Runlevel $curlvl Daemons..."
for daem in "${dmlst[@]}"; do
if [ "${daem#!}" = "${daem}" ]; then
if [ "${daem#@}" = "${daem}" ]; then
start_daemon ${daem}
else
start_daemon_bkgd ${daem#@}
fi
fi
done
printhl "---- Starting Completed"
run_hook runlevel_end
fi

# End of file
第二步,对/etc/inittab作少许变动,将原来的
引用:
rs:S1:wait:/etc/rc.single
rm:2345:wait:/etc/rc.multi
rh:06:wait:/etc/rc.shutdown
改为
引用:
rs:S1:wait:/etc/rc.runlevel
r2:2:wait:/etc/rc.runlevel
r3:3:wait:/etc/rc.runlevel
r4:4:wait:/etc/rc.runlevel
r5:5:wait:/etc/rc.runlevel
rh:06:wait:/etc/rc.runlevel
第三步,对/etc/rc.conf作少许改动,在原"DAEMONS=..."行的下面添加:
引用:
DAEMON2=()
DAEMON3=(@laptop-mode @gpm)
DAEMON4=(network iptables dhcpd named postgresql samba httpd vsftpd postfix sshd)
DAEMON5=(dbus @hal networkmanager kdm)
各行的意思相信不用解释了,里边的内容要根据个人需要设定
而DAEMONS中只需保留各个Runlevel共同需要的daemon

最后重启或运行init q使设置生效

此帖于 10-09-03 12:13 被 bhoppi 编辑.
  bhoppi 当前离线   回复时引用此帖
旧 10-09-01, 13:00 第 9 帖
liwangli
 
 
 
注册会员  
  注册日期: Sep 2006
  帖子: 243
  精华: 0
 

可以考虑做成BSD风格或SYSV风格的
  liwangli 当前离线   回复时引用此帖
旧 10-09-01, 18:21 第 10 帖
kevinlei
 
kevinlei 的头像
 
 
注册会员  
  注册日期: Sep 2003
  帖子: 454
  精华: 0
 

arch本来就是bsd风格的启动脚本,本就没有这一套。

你要的是SYS V风格的启动脚本。
  kevinlei 当前离线   回复时引用此帖
旧 10-09-01, 22:46 第 11 帖
bhoppi
 
bhoppi 的头像
 
 
注册会员  
  注册日期: Dec 2009
  帖子: 184
  精华: 0
 

引用:
作者: kevinlei
arch本来就是bsd风格的启动脚本,本就没有这一套。

你要的是SYS V风格的启动脚本。
我不要SysV风格,我要的是BSD风格+Runlevel切换+Kiss
  bhoppi 当前离线   回复时引用此帖
旧 10-09-01, 23:13 第 12 帖
sanyork 帅哥
 
sanyork 的头像
 
 
注册会员  
  注册日期: Sep 2004
  我的住址: 杭州
  帖子: 146
  精华: 0
 

还不如换成别的发行版本。







__________________
CPU: Intel Core Duo E6550
内存: 1G DDR2
主板: Intel Q33
显卡: Intel Integration
硬盘: WD 500G 16M Cache
显示器: Philips 21.5" LCD
  sanyork 当前离线   回复时引用此帖
旧 10-09-02, 01:12 第 13 帖
kenzhong 帅哥
 
 
 
注册会员  
  注册日期: May 2005
  我的住址: Guang Zhou
  帖子: 44
  精华: 0
 

引用:
作者: sanyork
还不如换成别的发行版本。
可不是...







__________________
Samsung R70
-----------------------------------------------------------------------------
Intel(Merom)T7300 / DDR 2G / 160G 5400
nVidia 8600M GS / Realtek ALC262
DVD-SuperMulti / 15.4 WXGA 1280x800
-----------------------------------------------------------------------------
Linux arch x86_64 (Core+Extra+Comm)
Openbox
  kenzhong 当前离线   回复时引用此帖
旧 10-09-02, 11:47 第 14 帖
alpha.gu
 
 
 
注册会员  
  注册日期: Oct 2006
  帖子: 675
  精华: 0
 

引用:
作者: kevinlei
arch本来就是bsd风格的启动脚本,本就没有这一套。

你要的是SYS V风格的启动脚本。
我也想这么说,也许楼主是有实际的用处,但是我觉得作为一般用户,我更喜欢BSD风格,因为反正一般都是进5嘛,有需要什么维护一类的动作,就进3嘛,也没有别的太多的要求啊。
  alpha.gu 当前离线   回复时引用此帖
旧 10-09-02, 12:59 第 15 帖
carbonjiao
 
carbonjiao 的头像
 
 
注册会员  
  注册日期: Mar 2004
  我的住址: 广州番禺
  帖子: 915
  精华: 5
 

我是直接写个脚本放在/etc/rc.d/下, 在rc.conf 中调用,
该脚本通过判断启动参数(grub 或者 syslinux 启动参数) 来启动相应服务。。。

编辑快, 对Arch原本的味道改变小。。。


archlive就是采用此办法







__________________
Archlive <http://archlive.googlecode.com>
Archlive-pkg <http://archlive-pkg.googlecode.com>
Acer TravelMate 3282WXMI
Asus A8Tc
ntldr (Win2003) --> Grub4dos --> bootmgr (Win7 U32 VHD + Win7 U64 VHD)
--> Arch x86_64
--> Arch i686
--> ...

此帖于 10-09-02 13:03 被 carbonjiao 编辑.
  carbonjiao 当前离线   回复时引用此帖
发表新主题 回复


主题工具

发帖规则
您 [不可以] 发表新主题
您 [不可以] 回复主题
您 [不可以] 上传附件
您 [不可以] 编辑您的帖子

已 [启用] BB 代码
已 [启用] 表情符号
已 [启用] IMG 代码
已 [禁用] HTML 代码
[论坛跳转…]


所有时间均为[北京时间]。现在的时间是 11:41


Powered by vBulletin 版本 3.6.8
版权所有 ©2000 - 2012, Jelsoft Enterprises Ltd.
官方中文技术支持: vBulletin 中文
版权所有 ©2002 - 2011, LinuxSir.Org