でびあんの initrd (3)

昨晩、render() 手続きが若干微妙、と言いつつクタバッている。今日も機械的にナニ。
ええと、以下の手続きは一旦スルーします。

  • render
  • set_initlist
  • reduce_satisfied
  • get_prereqs
  • count_unsatisfied
  • pop_list_item
  • reduce_prereqs

とりあえず使われていないみたいなんですが、何をしようとしているのかが分からん、とゆーのも微妙。と思ったら使ってるし。ちょっと call graph 作ってみる。

run_scripts -+- get_prereqs    -+- set_initlist
             |
             +- reduce_prereqs -+- set_initlist
             |                  |
             |                  +- reduce_satisfied  -+- render
             |                  |                     |
             |                  |                     +- pop_list_item
             |                  |
             |                  +- render
             |                  |
             |                  +- count_unsatisfied
             |                  |
             |                  +- pop_list_item
             |
             +- call_scripts

とほほ。使われてないって大ウソじゃん。トップダウンで読む、にトライ。

トップダウンで読んでみる

まず、run_scripts() 手続きの定義が以下。

run_scripts()
{
	initdir=${1}
	get_prereqs
	reduce_prereqs
	call_scripts
}

第一引数を initdir に代入している。呼び出し例が以下。

run_scripts /scripts/init-top

引数一つは仕様。基本的にヤる事は書いてある通り。トップダウンって言いつつ、いっちゃんケツの手続きから読んでみたり。

call_scripts()
{
	for cs_x in ${runlist}; do
		# mkinitramfs verbose output
		if [ "${verbose}" = "y" ]; then
			echo "Calling hook ${cs_x}"
		fi
		${initdir}/${cs_x}
		# allow boot scripts to modify exported boot paramaters
		if [ -e /conf/param.conf ]; then
			. /conf/param.conf
		fi
	done
}

この手続き、run_scripts 手続きの直前で定義されてるんですが、シェルって変数のスコープってグローバルなんでしたっけ?
# スコープもクソも変数定義自体が無いのか ...
ええと、そりゃ良いとして日本語化してみると以下?

  • runlist なリストから要素を取り出して cs_x に格納しつつ以下
    • $verbose が "y" なら
      • "Calling hook ${cs_x}" を echo
    • ${initdir} の中にある (はずの) ${cs_x} を実行
    • /conf/param.conf が存在するなら
      • source /conf/param.conf する

というカンジになりますでしょうか。てーコトは

  • runlist には initdir の中にある実行可能なファイルのリストが入っている (はず)

という事なのかな。ちなみにデフォルトでは /conf/param.conf は存在しません。コメントも微妙だなぁ。

とりあえず

一旦、エントリ投入します。余力があれば続行予定。