MODPROBE
Section: Linux Module Support (8)
Updated: February 4, 2002
Index
JM Home Page
roff page
名前
modprobe - ローダブルモジュールの高レベル管理
書式
modprobe
[-adnqv] [-C config] module [symbol=value ...]
modprobe
[-adnqv] [-C config] [-t type] pattern
modprobe
-l [-C config] [-t type] pattern
modprobe
-c [-C config]
modprobe
-r [-dnv] [-C config] [module ...]
modprobe
-Vh
このマニュアルについて
このマニュアルは、Linux Kernel 2.4 の時代に使われていた modutils
パッケージの modprobe の説明で、古いものです。現在ではたいていの場合、
kmod パッケージの modprobe が使われています。(2022/12/02,
Linux JM Project)
オプション
- -a, --all
-
最初にロードに成功した後に停止するのではなく、
マッチしたモジュールをすべてロードする。
- -c, --showconfig
-
現在用いられている設定を表示する。
- -C, --config config
-
設定ファイルを /etc/modules.conf ではなく config にする。
(/etc/modules.conf
はなくてもよい)。
環境変数 MODULECONF でも設定ファイルを /etc/modules.conf
(あるいは推奨しないが /etc/conf.modules) から変更できる。
- 環境変数
-
UNAME_MACHINE
をセットすると、modutils は uname() システムコールの machine フィールドの
代わりにこの変数の値を用いる。
これは主に 32 ビットユーザー空間で 64 ビットモジュールをコンパイルする
(またはその逆)場合に用いる。
現在の modutils はモジュールに対する完全なクロスビルドモードに対応しておらず、
ホストアーキテクチャの 32 ビット版と 64 ビット版を選択できるだけである。
- -d, --debug
-
モジュールのスタックの内部表現に関する情報を表示する。
- -h, --help
-
オプションの一覧を表示して直ちに終了する。
- -k, --autoclean
-
ロード済みのモジュールに "autoclean" を設定する。
カーネルが
modprobe
に足りない機能をモジュールとして提供するよう依頼するときに用いられる。
-k オプションを指定すると、自動的に -q オプションも有効になる。
これらのオプションは自動的に insmod に送られる。
- -l, --list
-
マッチするモジュールをリストする。
- -n, --show
-
実際には動作を行わず、何が行われるかを表示する。
- -q, --quiet
-
insmod がモジュールのインストールに失敗しても報告しない。
黙って他の可能性を試しながら通常のように継続する。
このオプションは自動的に insmod に送られる。
- -r, --remove
-
コマンドラインでモジュールが指定されればモジュール (のスタック) を削除する。
されなければ autoclean を実行する。
- -s, --syslog
-
標準エラー出力にではなく syslog を経由してレポートする。
このオプションは自動的に insmod に送られる。
- -t moduletype; --type moduletype
-
指定したタイプのモジュールだけを扱う。
modprobe は、ディレクトリパスに "/moduletype/"
をこの形で含むモジュールだけしか対象にしない。
moduletype にはディレクトリを複数の階層で指定しても良い。例えば
"-t drivers/net" とすれば、
xxx/drivers/net/ およびそのサブディレクトリにあるモジュールだけを
対象にする。
- -v, --verbose
-
すべてのコマンドを、実行される通りに表示する。
- -V, --version
-
modprobe のバージョンを表示する。
- 注意:
-
モジュール名にはパス ('/') や末尾の '.o' を含めてはならない。
例えば、 'slip' は
modprobe
に対する正当なモジュール名だが、
これはコマンドラインと設定ファイルの両方に適用されるルールである。
説明
modprobe と depmodは、Linux のモジュール化されたカーネルを、
あらゆるユーザー、管理者、ディストリビューションの作成者にとって
より管理しやすいものにするために作成された。
modprobe は Makefile に似た形式で依存関係を記述したファイルを用いる。
これは depmod によって作成されるもので、
あらかじめ定められたディレクトリツリーに置かれたモジュールのセットから、
関連するファイル (群) を自動的にロードするためのものである。
modprobeはモジュールのセット (単一のモジュールであることも、
依存関係にあるモジュールのスタックであることもある) のロードに用いられる。
また、特定のタグがつけられたすべてのモジュールをロードするのにも用いられる。
modprobeはモジュールスタックに必要とされるベースモジュールを、
依存関係を記述したファイル modules.dep の記述にしたがって
すべてロードする。これらのモジュールのどれかをロードできないと、
現在のセッションでロードされたモジュールスタックの全体が
自動的にアンロードされることになる。
modprobeがモジュールをロードするやりかたは 2 種類ある。
ひとつめ (プローブモード) は、
(pattern で定義された) リストからモジュールをロードしようとする。
モジュールがひとつロードできると、modprobeはただちに停止する。
これはイーサネットドライバのリストから
モジュールをひとつロードするような場合に利用できるだろう。
もうひとつの方では、modprobeはリストのすべてのモジュールを
ロードする。以下の「例」の記述を参照のこと。
-rオプションをつけると、 modprobe は自動的にモジュールのスタックを
アンロードする("rmmod -r"と同様)。
"modprobe -r"とだけすると、
使われていない autoload されたモジュールを削除すると同時に、
設定ファイル /etc/modules.conf の記述にしたがって
削除の前処理・後処理用のコマンドを実行する。
-l オプションと-tオプションを同時に指定すると、
利用可能なすべてのモジュールのうち、特定のタイプのものだけが表示される。
-cオプションを指定すると、
現在用いられている設定が表示される (デフォルト + 設定ファイル)。
設定
modprobe(とdepmod)の動作は、設定ファイル
/etc/modules.confによって変更できる (このファイルはなくてもよい)。
このファイルに記述できる内容の詳細や、depmodと
modprobeが用いるデフォルトの設定に関しては
modules.conf(5)を参照のこと。
モジュールがカーネルによって "autoload" された場合は、
削除の前処理・後処理のコマンドは実行されないことに注意。
将来サポートされる予定の「永続型モジュール保存 (persistent module storage)」
に期待して欲しい。
削除の前後処理の機能を用いたい場合は、
kerneld の autoload を使わないようにして、
以下のような行を crontab に書きこむ必要がある
(これは kmod システムによっても用いられる)。
以下では autoclean を 2 分おきに行っている。
*/2 * * * * test -f /proc/modules && /sbin/modprobe -r
動作ルール
modprobeは、現在のカーネルリリース向けにコンパイルされたモジュールを
含むディレクトリをまず最初に見る。
そこにモジュールがなければ、modprobeはカーネルバージョンに共通の
ディレクトリ (2.0, 2.2 など) を見る。
そこにもモジュールがなければ、
デフォルトのリリース以外のモジュールを含むディレクトリを見る。
新しい Linux をインストールしたときは、モジュールをそのカーネルのリリース
(とバージョン) に対応したディレクトリに移動すべきである。
そしてこのディレクトリから「デフォルト」のディレクトリに
シンボリックリンクをはるようにする。
新しいカーネルをコンパイルして"make modules_install"
コマンドを実行すると、新しいディレクトリは作成するが、
「デフォルト」のリンクは変更しない。
カーネルの配布に含まれないモジュールを入手したら、
それは /lib/modules 以下のバージョンには依存しないディレクトリに
配置するとよい。
以上がデフォルトの動作であるが、これは
/etc/modules.conf の記述によって変更できる。
例
- modprobe -t net
-
"net" という名前のディレクトリにあるモジュールのどれかひとつをロードする。
どれかのモジュールのロードに成功するまで、各モジュールがひとつづつ試みられる。
- modprobe -a -t boot
-
"boot"という名前のディレクトリにあるすべてのモジュールがロードされる。
- modprobe slip
-
これを実行すると、
s1hc.o というモジュールがまだロードされていなければロードしようとする。
slip モジュールには s1hc モジュールの機能が必要だからである。
この依存関係は、depmodによって (これ以前に) 自動的に生成された
modules.dep というファイルに記述されている。
- modprobe -r slip
-
slip モジュールをアンロードする。
s1hc モジュールも自動的にアンロードする
(ただし ppp のような他のモジュールによって利用されていない場合)。
ファイル
/etc/modules.conf(/etc/conf.modulesも使えるが推奨しない)
/lib/modules/*/modules.dep,
/lib/modules/*
関連項目
depmod(8), lsmod(8), kerneld(8), ksyms(8), rmmod(8)
セーフモード
実効 UID が 実 UID と異なる場合、 modprobe は入力を非常に慎重に扱う。
最後のパラメータは(たとえ'-'で始まっていても)モジュール名として扱われる。
一つのモジュール名だけが指定でき、"変数=値"の形のオプション指定は禁止される。
モジュール名は常に文字列として扱われ、セーフモードではメタ展開は行われない。
しかし、設定ファイルから読み込んだデータはメタ展開を行う。
modprobe がカーネルから起動された場合、実効 UID は実 UID と異なるかもしれない。
これはカーネルが 2.4.0-test11 以上の時に真となる。
理想的な世界では modprobe は
カーネルが正しいパラメータだけを modprobe に渡すと信用することが出来た。
しかし高レベルカーネルコードは未検証のパラメータを直接ユーザーから modprobe に渡すので、
少なくとも一つのローカル root exploit が発生する。
それで、もはや modprobe はカーネルからの入力を信用しない。
modprobe は環境変数が以下の文字列しか含まない場合、
自動的にセーフモードとなる。
HOME=/
TERM=linux
PATH=/sbin:/usr/sbin:/bin:/usr/bin
これは昔のカーネルのように実 UID と実効 UID が同じであっても、
カーネル 2.2 から 2.4.0-test11 までの カーネルから modprobe が起動されたことを検出する。
ログ記録コマンド
/var/log/ksymoops ディレクトリが存在し、modprobe がモジュールを
読み込み・削除できるようなオプションを付けて起動されていた場合、
modprobe は実行したコマンドと返り値を
/var/log/ksymoops/`date +%Y%m%d.log` のファイル名で記録する。
この自動ログ記録を停止するオプションはない。
もしこのような記録をさせたくなければ、
/var/log/ksymoops ディレクトリを作らなければよい。
もしディレクトリを作るなら、root が所有してモードは 644 か 600 にし、
毎日ぐらいのペースで insmod_ksymoops_clean を実行するべきである。
必要なユーティリティ
depmod(8), insmod(8)
注意
modprobe に与えるパターンが (シェルによって解釈されずに)
意図通りに解釈されるようにするには、
パターンにエスケープが必要となることが多いだろう。
バグ
modprobe [ -V | --version ] は直ちに終了するべきである。
しかしながら、現在はバージョン情報を表示した後、
何もオプションが指定されなかったかのように振舞う。
著者
Jacques Gelinas (jack@solucorp.qc.ca)
Bjorn Ekwall (bj0rn@blox.se)
Index
- 名前
-
- 書式
-
- このマニュアルについて
-
- オプション
-
- 説明
-
- 設定
-
- 動作ルール
-
- 例
-
- ファイル
-
- 関連項目
-
- セーフモード
-
- ログ記録コマンド
-
- 必要なユーティリティ
-
- 注意
-
- バグ
-
- 著者
-
This document was created by
man2html,
using the manual pages.
Time: 03:33:39 GMT, December 05, 2022