mdev

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Mdev and the translation is 100% complete.

この記事は、 initramfs なしで、分離された /usr パーティションを作成できるよう、Linux の udev を mdev に置換する方法に関する文書です。記事の執筆者は、IceWM をウィンドウマネージャとして利用し、Gentoo Linux を使用しています。ここにある設定方法は、少し調整をすることで他のディストリビューションでも適用できるはずです。

mdev Busybox による udev の代替で、 /dev の内容を作成および更新します ( 公式ドキュメント ) 。 eudev または udev を置き換えることは単純ではありませんが、おそらく組み込みシステムには最適なものでしょう。

mdevは私のシステムで動作しますか?

mdev アプリケーションは、システムが本格的なデスクトップ環境を使用していない限り、絶対適しています。デスクトップ環境が AbiWord、Firefox、GIMP、Gnumeric などの実行を必要としないことに注意してください。しかしながら、KMail のような KOffice アプリケーションは、ほとんどの KDE アプリケーションを依存関係として必要とするようです。一般的には、KDE や GNOME を使用する場合、 mdev は適していません。また、 LVM を使用すると問題を引き起こすかもしれません。

デフォルトのGentooプロファイルを使用している場合、mdevは非常によく動作します:

  • default/linux/x86/13.0
  • default/linux/amd64/13.0

次のコマンドを使用して、現在使用されているプロファイルを一覧表示します:

user $ eselect profile list
Current /etc/portage/make.profile symlink:
  default/linux/amd64/13.0
メモ
最近のバージョンのevdev( x11-drivers/xf86-input-evdev www-client/chromium を通して提供される)はudevを必要とします。これらはudevなしではビルド出来ません。

udevの依存関係を確かめるためにGentooのユーザが実行できるサニティチェックがもう一つあります。

サニティチェック

どのパッケージがudevに依存しているかの概要を取得します。出力は以下のような感じでしょう:

user $ equery d udev
 * These packages depend on udev:
media-libs/mesa-9.0.1 (gbm ? virtual/udev)
sys-apps/hwids-20130329 (udev ? >=virtual/udev-197-r1)
sys-apps/util-linux-2.22.2 (udev ? virtual/udev)
virtual/dev-manager-0 (virtual/udev)
x11-base/xorg-server-1.13.4 (udev ? >=virtual/udev-150)
x11-drivers/xf86-video-intel-2.20.13 (udev ? virtual/udev)
x11-libs/cairo-1.10.2-r3 (drm ? >=virtual/udev-136)

以下の行を /etc/portage/package.mask または /etc/portage/package.mask/mdev ファイルに追加してください (もしまだファイルが存在していなければ作成してください):

ファイル /etc/portage/package.mask/mdev udevをマスクする
sys-fs/udev

/etc/portage/make.conf udev のUSEフラグをシステム全体で無効にします:

root # euse -D udev

すべてのパッケージを -udev USE フラグ付きでリビルドします:

root # emerge -uDNvp @world

もし発生する唯一のエラーが、 virtual/dev-manager がudevを必要とするためにPortageがudevを再インストール出来ないというものならば、次のステージに進んでください。そうでなければ、 sys-fs/udev は、システムにインストールされているパッケージ(群)の、難しい依存関係に含まれているかもしれません。

追加の段階を必要とするソフトウェア

ATI/AMD バイナリブロブ

ATI/AMD Radeonカードの中にはバイナリブロブを必要とするものがあります。Gentooの sys-firmware/radeon-ucode パッケージは、多くの異なったモデルに対応するため、 http://people.freedesktop.org/~ag5f/radeon_ucode/ で利用できるすべてのバイナリブロブを取得します。

libraryディレクトリにあるすべてのバイナリブロブに対し、カーネルは多くのバイナリブロブの中からどれをロードするかを決定するためにudevを必要とします。もし、libraryディレクトリにある正しいバイナリブロブを残し、それ以外をすべて削除すると、バイナリブロブは自動的にロードされます。

udevをmdevに置き換える

警告
これは非常に重要な段階で、結果的にLinuxシステムが起動不可能になるかもしれません。上記の方法でいかなるudevの依存関係も見つからなかった時だけ実行してください。

devtmpfs用にカーネルを設定する

カーネルが devtmpfs ファイルシステム をサポートし、また /dev に自動的にマウントするように設定します:

カーネル devtmpfsを有効にする
Device Drivers --->
    Generic Driver Options --->
        [*] Maintain a devtmpfs filesystem to mount at /dev
        [*] Automount devtmpfs at /dev, after the kernel mounted the rootfs

変更したらカーネルを再ビルドします。絶対に再起動 しないでください

busyboxのemerge

sys-apps/busybox で、 mdev USE フラグが設定されていることを確かめてください。 static USE フラグを設定することも多分良い考えでしょう。 /etc/portage/package.use または /etc/portage/package.use/mdev ファイルに以下の行を追加してください:

ファイル /etc/portage/package.use/mdev
sys-apps/busybox static mdev

それでは、busyboxを(再)インストールしましょう:

root # emerge --ask --oneshot busybox

devptsのマウント

devpts ファイルシステムは普通ではない振る舞いをします。このファイルシステムは、起動時や mount -a では自動的にマウントされません。明示的に mount devpts コマンドを実行することが必要です。udev ベースのシステムの標準的な解決策は、 rc-update add udev-mount sysinit をルートで実行し、開始時に udev-mount スクリプトにマウントを行わせることです。mdev ベースのシステムでは、udev は多分インストールされていないでしょう。起動時にマウントさせる他の方法は、 mount devpts コマンドを /etc/local.d/ 内のシェルスクリプトに含めることです。以下の例では、ファイルの名前は /etc/local.d/000.start です。

udev-mountを使用しない他の副作用は、 /dev/shm がルートにのみ書き込み可能になるということです。通常の振る舞いをさせるために、 chmod 1777 /dev/shm コマンドが必要です。このコマンドは開始時にスクリプトから実行させることが出来ます。

ファイル /etc/local.d/000.start 起動時にdevptsをマウントし、/dev/shmのパーミッションを変更する
#!/bin/bash
mount devpts
chmod 1777 /dev/shm
メモ
/etc/local.d/ で使用されるスクリプトは
  • 実行可能ファイルでなければなりません
  • スタートアップ時に実行する場合は".start"拡張子でなければなりません
  • シャットダウン時に実行する場合は".stop"拡張子でなければなりません

udevサービスの置換

サービス一覧からudevを削除し、mdevに置き換えます:

root # rc-update del udev sysinit
root # rc-update add mdev sysinit

再起動

新しいカーネルを使用するために再起動します。これでシステムはmdevを使用し実行されているはずです。

後片付け

udevをシステムから削除します:

root # emerge --ask --depclean --verbose sys-fs/udev sys-fs/eudev

/etc/portage/package.mask ファイル (あるいはこのディレクトリ内にあるファイル) に、 sys-fs/udev および sys-fs/eudev を追加します。

これで完全にudevを使用しないマシンが完成します。

CUPSの下で動作しているUSBプリンタの設定

起動時早期に'find'を利用可能にする

root # cd /bin
root # ln -s /bin/busybox find

カーネルの再ビルド

libusb(そしてCUPS)がUSBポートを確認するために、カーネル設定の CONFIG_USB_DEVICE_CLASS=y CONFIG_USB_DEVICEFS=y を設定してください。そして、cups-1.5.2のebuildが無効にしているのを無視して、 CONFIG_USB_PRINTER=y を有効にしてください。 make menuconfig を使用しているなら、これらはここで見つかります:

カーネル 起動時にUSBデバイスの生成を有効にする
Device Drivers --->
    [*] Support for Host-side USB
      [*] USB device filesystem [DEPRECATED]
      [*] USB device class-devices [DEPRECATED]
    [*] USB Printer support
メモ
DEPRECATEDの警告については心配しないでください。

新しいカーネルをブートローダに設定し再起動する

新しいデバイスノードの存在を確かめる

デバイスノードの階層は /dev/bus/usb/ 以下にあるはずです。プリンタを起動すると、プリンタへのノードは /dev/lp0 に出現するはずです。 lsusb の実行は成功し、そしてプリンタの詳細を表示するはずです。

CUPSでプリンタの設定をする

通常の方法で CUPS を設定してください。CUPS はプリンタを検出するはずで、 parallel:/dev/lp0 のような URI を与えるはずです。

トラブルシューティング

起動シーケンスでLinuxモジュールが見つからない

もしLinuxモジュールが必要で、mdevへの移行後、起動時にロードされない場合、以下の解決策を実行してください:

  • Linuxモジュールを /etc/modules-load.d/ ファイルの *.conf ファイルに追加する
  • モジュールをLinuxカーネルにコンパイルします。必要に応じてロードする必要はありません。
  • カスタムモジュールローダを書きます:
ファイル /sbin/hotplug
#!/bin/sh
test -n "$MODALIAS" && modprobe "$MODALIAS";
exec /sbin/mdev

これを、mdevの代わりにホットプラグハンドラとしてインストールしてください。より早く実行させるとより良いことに注意してください。このスクリプト /sbin/hotplug の名前を考慮してください、これは /proc/sys/kernel/hotplug の既定値です(あるいはカーネル設定で既定値を変更してください)。

その他

メモ
これらのインストラクションは、元々Walter Dnesによって書かれ、彼の個人的なウェブサイトで紹介されていたものです。これらは、gentoo-userメーリングリストでの議論の度に、 Michael Mol による少しの編集ののちGentoo wikiに取り込まれました。
  • udevと異なり、mdevは自動モジュールロードに対応していません。 .conf で終わるファイルを /etc/modules-load.d/ に作成し、各行にロードされるべきモジュール(nvidia、wlなど)を1つずつファイルに書いてください。 /etc/modprobe.d 内の .conf で終わるファイルを利用してオプションを変更してください(文法については man 5 modprobe.d を確認してください)。モジュール設定をこの場所に移す必要があるかもしれません。
  • mdev -s /dev/mapper ノードを作成しません。手動でこれを作成するか、lvm2から dmsetup mknodes を使用してください。初期スクリプトの中で、 mdev -s のあとにそれを追加するのはいい考えです。
  • xorgインプットのためにマウスとキーボードのドライバを使用してください。Evdevはビルドするためにudevを必要とします。(マウスドライバのための)Mousedrvとsynapticドライバは、両方がロードされた時に衝突するかもしれません。
  • カーネル設定オプションの CONFIG_INPUT_EVDEV は、入力デバイスイベントとしてキーボードとマウスだけではなく、蓋とボタンもacpidに伝えます。

関連項目

  • Mdev/Automount USB‎ — describes how to implement automounting of USB devices on a machine using mdev as the device manager.

外部資料