modules.conf - ファイルのフォーマットと規約の説明 - Linux コマンド集 一覧表
- 名前
- 説明
- 記法 (SEMANTICS)
- 文法 (SYNTAX)
- デフォルトの設定
- 別の設定ファイル
- 関連項目
- 著者
名前
modules.conf - カーネルモジュールのロードに対する設定ファイル
説明
modprobe
(8) (および
depmod
(8)) の動作は、設定ファイル
/etc/modules.conf
によって変更できる (このファイルは無くてもよい)。
設定ファイルは行単位で解釈される。
全ての空行と、'#' 文字以降の行末までは無視される。
行末が '\' になっている行は次の行に継続する。
残りは指定行 (directive) であり、
すべて以下のフォーマットのいずれかに従う:
[add] above module module_list
alias alias_name result
[add] below module module_list
define VARIABLE WORD
depfile=A_PATH
else
elseif EXPRESSION
endif
if EXPRESSION
include PATH_TO_CONFIG_FILE
insmod_opt=GENERIC_OPTIONS_TO_INSMOD
install module command ...
keep
[add] options module MODULE_SPECIFIC_OPTIONS
path=A_PATH
path[TAG]=A_PATH
generic_stringfile=A_PATH
pcimapfile=A_PATH
isapnpmapfile=A_PATH
usbmapfile=A_PATH
parportmapfile=A_PATH
ieee1394mapfile=A_PATH
pnpbiosmapfile=A_PATH
[add] probe name module_list
[add] probeall name module_list
prune filename
post-install module command ...
post-remove module command ...
pre-install module command ...
pre-remove module command ...
remove module command ...
persistdir directory_name
各指定行に与える引数の解釈では、シェルのメタキャラクタが有効になる。
すなわち、ワイルドカードやコマンドのバッククォートといった、
シェルでの技が利用できる。
path[misc]=/lib/modules/1.1.5?/local
path[net]=/lib/modules/`uname -r`/net
危険:
ユーザーが指定した入力にシェル展開を適用するのは
大きなセキュリティ上のリスクがある。
modutils は信頼できるデータに対してのみシェルコマンドのメタ展開を行う。
基本的にこれは設定ファイルのデータのみを展開することを意味する。
modutils では、ユーザーは modprobe を (自分自身の設定ファイルを指定して)
root 権限で実行することはできない、と仮定している。
ユーザーからの入力を指定して modutils を root 権限で起動するプログラム
(カーネルを含む) は、正確に一つだけのユーザー入力パラメータを渡し、
かつセーフモードに設定しないと、ローカルで root を奪取される危険がある。
セーフモードの詳細については
modprobe
を参照のこと。
各指定は複数回繰り返してもよい。
指定によっては、前に
add
を置くこともできる。これがないと、指定した module_list が以前の
module_list を置き換えるが、
これがあると module_list が以前の module_list に追加される
。
記法 (SEMANTICS)
A_PATH
はターゲットへの完全なパス名である。
uname -r
や
kernelversion.
といったシェルのメタキャラクタを
A_PATH
に用いてもよい。
これらの 2 つのコマンドは、
(
modprobe
や
depmod
のような) ユーティリティの内部でも、
現在のカーネルのリリースとバージョン (それぞれ 2.2.3 や 2.2 など)
を表すものとして認識されている。
WORD
は空白文字以外からなるシーケンスである。
もし ' や " や ` が文字列にあると、
対応する ', ", ` にマッチするまでの全ての文字 (空白文字も)
がその文字列に含まれることになる。
全ての
WORD
は、その後メタキャラクタのルールにしたがって展開される。
展開した結果が二つ以上のワードになった場合は、
結果のうち最初のワードだけが用いられる。
EXPRESSION は以下のいずれかである。
-
"WORD compare_op WORD"
-
compare_op は ==, !=, <, <=, >=, > のいずれかである。
両 WORD が文字列として比較される。
-
"-n WORD compare_op WORD"
-
compare_op は ==, !=, <, <=, >=, > のいずれかである。
両 WORD が数値として比較される。
-
WORD
-
WORD の展開に失敗するか、
展開した結果が "0" (zero), "false", "" (empty)
のいずれかであれば、展開結果の値は FALSE となる。
それ以外の場合は展開結果の値は TRUE となる。
-
"-f FILENAME"
-
FILENAME が存在するかどうかのテスト。
-
-k
-
"autoclean" が有効になっているかどうか (すなわちカーネルから呼ばれたかどうか)
のテスト。
-
"! EXPRESSION"
-
式の否定も式である。
文法 (SYNTAX)
以下に有効な指定について説明する。
-
"define VARIABLE WORD"
-
putenv("VARIABLE=WORD")
を実行する。この指定は変数の作成・変更のいずれも行える。
変数は環境に作られるので、
現在のセッションで実行される全てのコマンドから利用できる。
-
"depfile=A_PATH"
-
依存関係ファイルへのパス。
これは
depmod
によって作成され、
modprobe
によってモジュールとその依存モジュールを探すために利用される。
通常はデフォルトの値を用いるべきである。以下を参照のこと。
-
"if EXPRESSION"
-
式
EXPRESSION
が
TRUE
と解釈されたら、
else
,
elseif
,
endif
のいずれかにマッチするまでの全ての指定行が実行される。
FALSE
と解釈されたら、それらの指定行は無視される。
if
行は、内部の最大値である 20 までネストできる。
注意:
path
指定行を条件式内部で処理することは避けて欲しい。
modprobe
には「賢い頭脳」が組み込まれているので、
path
指定行の条件処理は、単に混乱を生むだけである。ほんとです。
-
"else"
-
これより前での
if
または
elseif
指定行での式の評価が
FALSE
であり、
else
があれば、ここまでの指定行は無視され、
これ以降
endif
までの指定行が処理される。
-
"elseif EXPRESSION"
-
これより前に置かれた
if
または
elseif
での式評価の結果が
FALSE
で、ここでの式評価の結果が
TRUE
であれば、次に
elseif
,
else
,
endif
のいずれかが現れるまでの指定行が処理される。
-
"endif"
-
これは設定ファイルにおける条件処理を制御する
if
,
elseif
,
else
のチェインを終了させる。
if EXPRESSION
any config lines
elseif EXPRESSION
any config lines
else
any config lines
endif
else
と
elseif
は無くてもよい。
-
"include PATH_TO_CONFIG_FILE"
-
別々のプラットフォームや設定を一つの設定ファイルで扱うのは、
非常に複雑になる場合がある。
if
の条件によって
include
指定行を用いれば、この取り扱いは簡単になる。
-
"insmod_opt=GENERIC_OPTIONS_TO_INSMOD"
-
insmod に (他では指定できないような) 特殊なオプションが必要な場合は、
このオプションで起動の度にそれらを追加することが可能である。
特殊な状況を除いて、
通常は insmod の標準的なデフォルトのオプションを変更する必要はない。
-
"keep"
-
このワードが
path
の記述を含む行の前に
置かれた場合は、
デフォルトのパスのセットは保存され、それに追加される。
これがない場合の通常の振舞いでは、
パスのセットが設定ファイルで置き換え
られる。
-
"path=A_PATH"
-
-
"path[TAG]=A_PATH"
-
A_PATH
引数はモジュールを探すディレクトリの追加分を指定する。
path
指定行は、オプションのタグをとることができる。
これはそのモジュールの目的に関する情報を多少なりとも示し、
また
modprobe
の動作をいくらか自動化する。
この "path" キーワードに追加されるタグは角括弧 [] で括られる。
タグがない場合は、 "misc" タグが指定されたかのように動作する。
非常に有用なタグとして、
boot
がある。これはブート時にロードしなければならないモジュールを
保有しているすべてのディレクトリをマークするために利用できる。
なお
keep
指定行を使えば、
path
指定行によるデフォルトのパスの置き換えを防ぐことができる。
-
"generic_stringfile=A_PATH"
-
これは generic_string ファイルへのパスである。このファイルは
depmod
によって作成され、モジュールからの文字列情報が必要な
インストールスクリプトが利用する。
通常はデフォルトの値を用いるべきである。以下を参照のこと。
-
"pcimapfile=A_PATH"
-
これは pcimap ファイルへのパスである。このファイルは
depmod
によって作成され、インストールスクリプトが
pci デバイスをサポートするモジュールを検索する際に用いられる。
通常はデフォルトの値を用いるべきである。以下を参照のこと。
-
"isapnpmapfile=A_PATH"
-
これは isapnpmap ファイルへのパスである。このファイルは
depmod
によって作成され、インストールスクリプトが
ISA PNP デバイスをサポートするモジュールを検索する際に用いられる。
通常はデフォルトの値を用いるべきである。以下を参照のこと。
-
"usbmapfile=A_PATH"
-
これは usbmap ファイルへのパスである。このファイルは
depmod
によって作成され、インストールスクリプトが
USB デバイスをサポートするモジュールを検索する際に用いられる。
通常はデフォルトの値を用いるべきである。以下を参照のこと。
-
"parportmapfile=A_PATH"
-
これは parportmap ファイルへのパスである。このファイルは
depmod
によって作成され、インストールスクリプトが
parport デバイスをサポートするモジュールを検索する際に用いられる。
通常はデフォルトの値を用いるべきである。以下を参照のこと。
-
"ieee1394mapfile=A_PATH"
-
これは ieee1394map ファイルへのパスである。このファイルは
depmod
によって作成され、インストールスクリプトが
ieee1394 デバイスをサポートするモジュールを検索する際に用いられる。
通常はデフォルトの値を用いるべきである。以下を参照のこと。
-
"pnpbiosmapfile=A_PATH"
-
これは pnpbiosmap ファイルへのパスである。このファイルは
depmod
によって作成され、インストールスクリプトが
pnpbios デバイスをサポートするモジュールを検索する際に用いられる。
通常はデフォルトの値を用いるべきである。以下を参照のこと。
-
"alias alias_name result"
-
"alias" 指定行はモジュールに別名をつけるために用いる。
/etc/modules.conf に
alias iso9660 isofs
のような行があれば、実際にはそのようなモジュールがなくても
"modprobe iso9660"
のように書くことができるようになる。
なお
alias some_module off
という行は、modprobe にそのモジュールのロード要求を無視させる。
また
alias some_module null
というエイリアスは、some_module への要求を常に成功させるが、
しかし実際にはそのモジュールはインストールされない。
これは
above
や
below
指定行で作成されるスタックのベースとして利用できる。
alias
指定のレベルは深くなっても良い
(訳注: alias の alias の alias... としてかまわない)。
全てのエイリアスは、
実際に物理的に存在しているモジュールを探すべく、再帰的に展開される。
エイリアスの実際の深さの限界は、おおよそ 1000 程度になっている。
これは以下のようなループを検知するためである。
alias a b
alias b a
alias
マッピングの最終的な結果がいずれのモジュールにもマッチしなければ、
modprobe はその結果に probe と probeall をマップする。
これらも成功しなければ、そのモジュールは見付からなかったことになる。
したがって以下のような指定は気が利いていると言える (devfs より)。
alias /dev/sg* /dev/sg
probeall /dev/sg scsi-hosts sg
モジュール A が実際に存在する場合にも、モジュール A をモジュール B への
エイリアスとしてマップすることはできる。
しかしこれは誤解の元であるので推奨できない
。
歴史的な理由から、カーネルのサウンドシステムには
sound.o というモジュールがある。しかしサウンドの開発者たちも、
sound をユーザサウンドカード用モジュールへのエイリアスとしたい、
すなわち "aliassoundsb" としたいことがあるかもしれない。
この要求をサポートし、
なおかつ「オプションをエイリアスに与えることが可能」
という定められた動作を維持するために、
modprobe はモジュール名のエイリアス展開を、
その名前が modules.dep に見付かった場合には行わない
(見付からなければ展開する)。
これはエイリアスと実際のモジュールのあり得る全ての組み合わせに対して
期待された動作をするとは限らないので、
実際に存在するモジュールと同じ名前へのエイリアスは避けるべきなのである。
-
"[add] probe name module_list"
-
-
"[add] probeall name module_list"
-
これらの指定行は
name
が
modprobe
のコマンドラインで要求されたモジュール名である場合に限って利用できる。
効果としては、
name
への要求があると、 module_list にあるモジュールが、
指定の順序で試される。二つの指定行の違いは、
probe
はモジュールの挿入が一度成功すればそこで試行を終了するのに対して、
probeall
はリストの最後まで続ける点にある。
終了ステータスは、いずれかのモジュールのインストールに
成功したかどうかを反映する。
add
が前に付加されると、新しいリストを前のリストに置き換えるのではなく追加する。
-
"prune filename"
-
インストールされているカーネルに対するモジュールディレクトリのトップには、
モジュールではないファイルがおかれている。
これらには modules.dep,
modules.generic_string, modules.pcimap, modules.isapnpmap,
modules.usbmap, modules.parportmap, modules.ieee1394map,
modules.pnpbiosmap のほか、
カーネルソースツリーへのビルド用 symlink など、インストールプロセスが
ビルドツリーから保存しておきたいと考えたファイルが含まれる。
これらに対して
depmod
が "not an ELF file" という警告を発するのをやめさせるには、
これらのモジュールでないファイルが prune リストに入っていなければならない。
depmod
は組み込みの prune リストを持っており、これにはいかなるカーネルビルドに
おいても存在するファイルが含まれているので、削除することはできない。
自分のファイルをこのモジュールディレクトリのトップに追加したら、
各
filename
に対して
prune
宣言を加えると良い。
注意
: prune リストは
path
のトップディレクトリをスキャンするとき、
かつそのディレクトリが標準的なサブディレクトリ名リスト以下、
高々一つのサブディレクトリしか含まない場合にしか
(すなわちカーネルのインストールでビルドされた
トップディレクトリのように見える場合にしか) 参照されない。
prune
リストは
path
のサブディレクトリには効力を持たない。
-
"[add] options [-k] module [MODULE_SPECIFIC_OPTIONS]"
-
エイリアスされた名前も含め、すべてのモジュール名はそれぞれ固有の
options
指定行を持つことができる。
エイリアスに対して指定されたオプションは、
より「基本的な」名前に対して指定されたオプションよりも高い優先度を持つ。
このルールは
options
指定行の衝突を解決する際に利用される。
コマンドラインで指定されたオプションは、最も高い優先度を持つ。
モジュール名の前に
-k
があると、たとえ
modprobe
が autoclean オプション
-k
で実行されていた場合でも、モジュールは autoclean されなくなる。
add
が前に付加されると、新しいリストを前のリストに置き換えるのではなく追加する。
alias
の結果が実際のモジュールでなければ、その
alias
のチェーンによって構成された
options
は、probe[all] を呼ぶ前に捨てられる。
MODULE_SPECIFIC_OPTIONS
のどれかにシェルにとって特別な文字 (スペース・コンマ・括弧)
が含まれている場合には、そのオプションは '"..."'
で括らなければならない。 '' は
modules.conf の内部でオプションを区切り、 "" は
オプションがシェルに渡されるときにそれを区切る。以下に例を示す。
abc='"def,ghi jkl (xyz)"'
-
"[add] above module module_list"
-
この指定行は、あるモジュールのモジュールスタックの上に
他のモジュールセットを "pull in" するのに利用できる。
結果は
lsmod
(8) コマンドの出力で見ることができる。
above
指定行は依存関係が
modules.dep
ファイルには記述できないほど複雑なような状況下で有用である。
これは
post-install
および
pre-remove
指定行の最適化された場合であるとみなすことができる。
モジュールのインストールに失敗しても、
modprobe
の終了ステータスには影響しないことに注意。
add
が前に付加されると、新しいリストを前のリストに置き換えるのではなく追加する。
-
"[add] below module module_list"
-
この指定行は、あるモジュールのモジュールスタックの下に
他のモジュールセットを "push" するのに利用できる。
結果は
lsmod
(8) コマンドの出力で見ることができる。
below
指定行は依存関係が
modules.dep
ファイルには記述できないほど複雑なような状況下で有用である。
これは
pre-install
および
post-remove
指定行の最適化された場合であるとみなすことができる。
モジュールのインストールに失敗しても、
modprobe
の終了ステータスには影響しないことに注意。
add
が前に付加されると、新しいリストを前のリストに置き換えるのではなく追加する。
以下の指定行はモジュールのロード・アンロードの際に
特定のコマンドを実行したい場合に利用できる (指定しなくてもよい)。
エイリアスされたモジュール名に対してもこれらの指定は可能で、
エイリアス展開後のモジュール名に対する指定が他にあれば、
それらとともに適切な順序で実行される。
-
"pre-install module command"
-
指定したモジュールをインストールする前に
command
を実行する。
below
指定行も参照のこと。
-
"install module command"
-
指定したモジュールをインストールする際に、デフォルトの
insmod
ではなく
command
を実行する。
-
"post-install module command"
-
指定したモジュールをインストールした後に
command
を実行する。
above
指定行も参照のこと。
-
"pre-remove module command"
-
指定したモジュールを削除する前に
command
を実行する。
above
指定行も参照のこと。
-
"remove module command"
-
指定したモジュールを削除する際に、デフォルト (組み込み) の
rmmod
ではなく
command
を実行する。
-
"post-remove module command"
-
指定したモジュールを削除した後に
command
を実行する。
below
指定行も参照のこと。
-
"persistdir
=directory_name"
-
rmmod
が永続モジュールパラメータを含むモジュールを削除する時、
(おそらく) 修正されたパラメータを
directory_name
の下に保存する。
modprobe
が永続モジュールパラメータを含むモジュールをロードする時、
以前の値を
directory_name
の下から探す。
persistdir
はモジュールがロードされた時に読み込み可能で、
モジュールがアンロードされた時に書き込み可能でなければならない。
デフォルト値は /var/lib/modules/persist である。
多くの Linux ディストリビューションはファイルシステムをマウントする前に
モジュールをロードするが、これは永続データに関する問題を引き起こすかもしれない。
/var が別のパーティションにあって、モジュールがロードされてからマウントされる場合、
insmod
は永続データを読み込めない。
/var が別のパーティションにある場合には、二つの選択肢がある。
1)
persistdir
にルートパーティションのディレクトリ、
例えば /lib/modules/persist を指定する。
これは
rmmod
が実行されるときにルートパーティションが書き込み可能であることを仮定している。
2)ファイルシステム関係のモジュールを全て最初にロードし、
/var パーティションをマウントし、それから残りのモジュールをロードする。
これはファイルシステムに永続データがないことを仮定している。
デフォルトの設定
設定ファイル '/etc/modules.conf' がない場合や、
あるいは指定行の上書き変更がない場合には、
以下のデフォルトが用いられる。
depfile=/lib/modules/`uname -r`/modules.dep
generic_stringfile=/lib/modules/`uname -r`/modules.generic_string
pcimapfile=/lib/modules/`uname -r`/modules.pcimap
isapnpmapfile=/lib/modules/`uname -r`/modules.isapnpmap
usbmapfile=/lib/modules/`uname -r`/modules.usbmap
parportmapfile=/lib/modules/`uname -r`/modules.parportmap
ieee1394mapfile=/lib/modules/`uname -r`/modules.ieee1394map
pnpbiosmapfile=/lib/modules/`uname -r`/modules.pnpbiosmap
path[boot]=/lib/modules/boot
path[toplevel]=/lib/modules/`uname -r`
path[toplevel]=/lib/modules/`kernelversion`
path[toplevel]=/lib/modules/default
path[toplevel]=/lib/modules
persistdir=/var/lib/modules/persist
alias
と
options
指定行に対しても一連のデフォルト設定がある。
このセットは継続的に拡張されているので、ここにはリストしない。
(現在の) デフォルトのセットは、
/etc/modules.conf
ファイルがないときに
"modprobe -c"
コマンドを実行すれば閲覧できる。
全ての
options
指定行は、以下のようにモジュールに必要なオプションを指定する。
modprobe de620 bnc=1
これらのオプションは
/etc/modules.conf
ファイルに与えられているオプションと、
modprobe
のコマンドラインによって上書きされる。
エイリアスされたモジュールにも
options
指定行は (されていないモジュールと) 同じように使うことができる。
これは例えばダミーのモジュールに便利である。
alias dummy0 dummy
options dummy0 -o dummy0
別の設定ファイル
歴史的な理由から、もし /etc/modules.conf が存在しないと、
modutils は代わりに /etc/conf.modules を読む。
しかしこの古い名前の利用は推奨できない。
/etc/modules.conf に置き換えるべきである。
このバージョンの modutils では、
/etc/conf.modules があると警告メッセージを発する。
以降のバージョンではエラーメッセージを出して
モジュールのロードを行わないことになるだろう。
関連項目
著者
Bjorn Ekwall <bj0rn@blox.se>
Keith Owens <kaos@ocs.com.au>
- Linux Tips 関連記事
- Linux Tips(目次)
- Linux ディストリビューション一覧
- rpm のファイル名にあるi386とかi686とは
- 自分のマシンの情報を調べる
- cron の設定
- ssh の root ログインを禁止する
- ssh を、ユーザ、IPでアクセス制限
- 鍵交換方式によるssh接続
- 鍵交換方式によるssh接続( windowsから )
- 複数ファイル内の文字列を置換して上書き保存する
- あるグループをイニシャルグループとするユーザー一覧出力
- 複数ファイルのファイル名を一括変換する
- 連番ファイルをコマンド一発で作成する
- 中身がランダムなファイルを任意のサイズで作成する
- Linux ユーザーアカウントをロック・アンロックする