mdev/ja

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

Other languages:
English • ‎русский • ‎中文(中国大陆)‎ • ‎日本語 • ‎한국어

Warning: Display title "mdev/ja" overrides earlier display title "Mdev".

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

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-evdevwww-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/mdevファイルに追加してください(もしまだファイルが存在していなければ作成することが出来ます):

FILE /etc/portage/package.mask/mdevudevをマスクする
sys-fs/udev

/etc/portage/make.confudevの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に自動的にマウントするように設定します:

KERNEL 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/mdevファイルに以下の行を追加してください:

FILE /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コマンドが必要です。このコマンドは開始時にスクリプトから実行させることが出来ます。

FILE /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 --unmerge sys-fs/udev

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

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

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

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

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

カーネルの再ビルド

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

KERNEL 起動時に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カーネルにコンパイルします。必要に応じてロードする必要はありません。
  • カスタムモジュールローダを書きます:
FILE /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に伝えます。

参考

外部資料