うちかわです。
どの辺にフォローしようかなと思いましたけど

元のたかのさんのところへ


>>>>> From: TAKANO Yuji (たかのゆ〜じ) 
>>>>> <[&#x30E1;&#x30FC;&#x30EB;&#x30A2;&#x30C9;&#x30EC;&#x30B9;&#x4FDD;&#x8B77;]>
>>>>> Date: Fri, 17 Aug 2007 15:29:16 +0900
 > 
 >   まぁ、もっと平たく言うと、/usr/local/etc/rc.d/xdm と言う rc ス
 > クリプトを書いたのですが、これを「一番最後に起動したい」と思って
 > います。REQUIRE と BEFORE はどのように書いたら一番最後に起動する
 > ようになるでしょうか?教えていただけませんでしょうか・・。

xdm等の場合だけではなくて、VPNを使っている場合にVPN経由だけで
使いたいwebアプリケーションがあったり、pppとパケットフィルタ
を使って少々細かいことをしたりする場合も結構悩むところです。

#本当は起動スクリプトの方も必要なインターフェースが生えたのを
#確認して起動するように書き換えるべきなんですけどね

 > #/etc/rc.d/LAST とか欲しいと思う今日このごろ・・。
 >   後、SystemV の init みたいに番号が欲しいぃっ!!
 > 
 >   ブートメッセージを全て確認した後に X が起動して欲しい。と言う
 > ことです。まぁ、X だけでなく、他にも一番最後に動作して欲しいもの
 > は多々あるのですが・・。
 > 
 >   また、スクリプトを rcNG では無い、以前の rc の形式にすると一番
 > 最後に起動することは確認しているのですが、これもちょっと美しくな
 > いので・・。
 > #vjed の起動スクリプトなんかも rcNG 風に書き換えたりしています;-)。
 > 

#このあたり私とたかのさんの主義の違うところで^^; 私は面倒なので
#rc.localにベタに書いて逃げたりもします。

rcorderの動作に依存しているところなのでrcorderを変更するのが筋
なんでしょう。LASTという仮想エントリを定義してやって、rcNGのそ
れぞれの設定ファイルを一つ読み込みが終わったところ(crunch_file())
でもしREQUIRE: LASTの記述が無ければBEFORE: LASTを読み込んだつ
もりになってadd_before()してやる、という改造はそんなに難しく
ないかもしれません。

# 割と面白げなプログラムなので初心者から脱したいと考える方の
# プログラミングの課題に丁度いいかも
# どうすると綺麗かという問題はありますが

という話とは別にかなり安易な解決方法があったので一応書いておきます。
主義的に「ちょっと...」と思われるようでしたら無視してください。

私はdynamic configureは嫌いな人なのでstatic configureにしてしまおう
という強引な手段です。
名前がちょっとアレですが/etc/rcorder1.confと/etc/rcorder2.conf
というファイルに起動スクリプトの実行順序が記述されます。

これらのファイルがない場合だけrcorderが実行され、上記のファイルが
自動的に作られます。自動作成された実行順序が気に入らない場合は手
で直せばいいわけです。

これだってrc.confに static_rc_order="YES"とかで制御できるように
書き直せばそれなりに使えるかも。
---
+++ rc  2007-08-23 00:13:41.000000000 +0900
@@ -83,7 +83,14 @@
 # Do a first pass to get everything up to $early_late_divider so that
 # we can do a second pass that includes $local_startup directories
 #
-files=`rcorder ${skip} /etc/rc.d/* 2>/dev/null`
+RCORDER1=/etc/rcorder1.conf
+RCORDER2=/etc/rcorder2.conf
+
+#files=`rcorder ${skip} /etc/rc.d/* 2>/dev/null`
+if [ ! -f ${RCORDER1} ] ; then
+  rcorder  ${skip} /etc/rc.d/* 2>/dev/null > ${RCORDER1}
+fi
+files=`cat ${RCORDER1}` 
 
 for _rc_elem in ${files}; do
        run_rc_script ${_rc_elem} ${_boot}
@@ -103,7 +110,12 @@
 *)     find_local_scripts_new ;;
 esac
 
-files=`rcorder ${skip} /etc/rc.d/* ${local_rc} 2>/dev/null`
+#files=`rcorder ${skip} /etc/rc.d/* ${local_rc} 2>/dev/null`
+if [ ! -f ${RCORDER2} ] ; then
+  rcorder  ${skip} /etc/rc.d/* 2>/dev/null > ${RCORDER2}
+fi
+files=`cat ${RCORDER2}` 
+
 _skip_early=1
 for _rc_elem in ${files}; do
        case "$_skip_early" in
---
yoshiaki

メールによる返信