eudev

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Eudev and the translation is 100% complete.
Resources
これと混同しないでください: udev.


メモ
eudev はそのメンテナを Gentoo から独立したプロジェクトへ変更しました。eudev は今も Gentoo に残っていますが、udev を使用することが推奨されます。移行は何事もなく行えるはずですが、問題を避けるために対応するニュース項目を読んでそれに従ってください

eudevsystemd の Linux カーネル用デバイスファイルマネージャーである udev の、Gentoo によるフォークです。[1] /dev のデバイスノードを管理し、デバイスが追加されたり取り外されたりした時のユーザースペースでのすべての活動を処理します。

eudev のゴールは、OpenRC init システム、Upstart init システム、古いカーネル、さまざまなツールチェーン、その他 udev が必要とする[2] (しかしあまりサポートされていない) ソフトウェアといった、既存のソフトウェアとのよりよい互換性を得ることです。

ebuild、eclass、emerge 等と同様に、eudev という名前は、Gentoo の創設者である Daniel Robbins が開始した 'E' 接頭辞規約に従っています。

systemd を実行するためのシステム構成ファイルは eudev では使用できません。

/dev ディレクトリ

多くの Linux ユーザは、/dev/sda1 はカーネルが認識した最初のディスクの最初のパーティションを指す最短の手段だということを知っています。これはとても平易でしょう。

しかし、USB や IEEE 1394、ホットスワップ可能な PCI などのホットプラグ対応デバイスを考えてみてください。最初のデバイスというのはこれらのうちどれのことでしょう? そして、いつまで最初のデバイスといえるのでしょう? 最初のデバイスが消えたとき、他のデバイスは何と名付けられるのでしょうか? それは進行中の処理に影響するでしょうか? 誰かが(たまたま最初のプリンターになっていた)レーザープリンターのプラグを引っこ抜いたというだけの理由で、印刷ジョブが高性能なレーザープリンターからほとんど壊れかけのマトリックスプリンターに突然移ってしまったとしたら、笑ってしまいませんか?

デバイスマネージャに入ってみましょう。( udeveudev のような)今どきのデバイスマネージャならば必ず:

  • ユーザスペースで動作します。
  • 動的にデバイスファイルが生成されたり削除されたりします。
  • 一貫したデバイス命名を行います。
  • ユーザスペースのアプリケーション・プログラム・インターフェイス (API) を提供します。

デバイスの構造に変化が生じるたびにカーネルは uevent を発行し、デバイスマネージャがそれを受け取ります。それから、デバイスマネージャは /etc/udev/rules.d/run/udev/rules.d および /lib/udev/rules.d ディレクトリで定義されたルールに従います。uevent 内に含まれている情報を元に実行する必要があるルール(群)を探し必要なアクションを行います。これらのアクションにはデバイスファイルの作成・削除も含まれており、また特定のファームウェアファイルのカーネルメモリへの読み込みも実行します。


インストール

USE フラグ

いくつかのパッケージは virtual/udev との統合を有効化する udev USE フラグに対応しています。

USE flags for sys-fs/eudev Linux dynamic and persistent device naming support (aka userspace devfs)

kmod enable module loading through libkmod
rule-generator install legacy rule generator rules and support scripts - note that the functionality within was dropped from sys-fs/udev as it is not stable in all cases; use at your own risk
selinux !!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur
split-usr Enable behavior to support maintaining /bin, /lib*, /sbin and /usr/sbin separately from /usr/bin and /usr/lib*
static-libs Build static versions of dynamic libraries as well
test Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently)

Emerge

world 集合へ登録されるのを防ぐため、 oneshot オプションを使用してください。

root #emerge --ask --oneshot sys-fs/eudev

設定

RC サービス

RC での名前は eudev ではなく udev です。これを sysinit ランレベルに登録する必要があります。

root #rc-update add udev sysinit
 * rc-update: udev already installed in runlevel `sysinit'; skipping

sys-fs/udev-init-scripts バージョン 29 以降では、 udev-triggersysinit ランレベルに追加してください

選択可能: 伝統的なネットワークインターフェース命名法を維持する

カーネルによって提供される eth0 や wlan0 のようなネットワークデバイス名は、通常は /lib/udev/rules.d/80-net-name-slot.rules での udev ルールによってシステムの起動時に変更されます (dmesg 参照)。

旧来の命名ルールを維持するには、/etc/udev/rules.d ディレクトリ内に、同じ名称のファイルを空で作成することで上書きします:

root #touch /etc/udev/rules.d/80-net-name-slot.rules

上述の手順の代わりに、net.ifnames=0 をカーネルコマンドラインに追加したり、デフォルトのポリシーを変更したり、新しいポリシーを作成することもできます。

ネットワークの命名についての興味深い資料が Freedesktop wiki の I don't like this, how do I disable this にあります。

udev から eudev への移行

udev から eudev への移行は簡単です。

まず systemd-utils の udev USE フラグを無効化してください:

ファイル /etc/portage/package.usepackage.use の udev を eudev に変更する
sys-apps/systemd-utils -udev

そして、eudev を emerge してください:

root #emerge --ask --oneshot sys-fs/eudev

システムが multilib を使っており、例えば abi_x86_32 USE フラグを以前の udev パッケージに対して有効化している場合には、それも変更することを忘れないようにしてください:

ファイル /etc/portage/package.usepackage.use の udev を eudev に変更する
# sys-apps/systemd-utils abi_x86_32
sys-fs/eudev abi_x86_32

新しい予測可能なネットワークインターフェース命名法を使用する

新しいネットワークインターフェイスへの命名規約が変更されているので、netifrc が使用するシンボリックリンクを再度リンクする必要があります。追加する必要があるインターフェイスの名前が何であれ、/etc/init.d/net.lo をリンク先として使用してください。以下のコマンドでは、<interface_name> を システムで提供されるイーサネットインターフェイスの名前に必ず置き換えてください。ip link コマンドを実行することでどのようなインターフェイスが存在するか知ることができます:

user $ip link

存在するインターフェイスについて、/etc/init.d//etc/conf.d/ の中にシンボリックリンクを作成します:

root #ln -s /etc/init.d/net.lo /etc/init.d/net.<interface_name>
root #ln -s /etc/conf.d/net.lo /etc/conf.d/net.<interface_name>

インターフェイスを自動的に開始するには、スクリプトを default ランレベルに追加します:

root #rc-update add net.<interface_name> default

伝統的なネットワークインターフェース命名法を維持する

eudev から udev に移行すると、伝統的なネットワークインターフェース命名法を強制するために /etc/udev/rules.d/80-net-name-slot.rules に空ファイルを置く方法は機能しなくなるでしょう。udev での手順については省略可能: 予測可能なネットワークインターフェース名を無効化または上書きするを参照してください。

トラブルシューティング

udevadm の使用

udevadm monitor 実行してみましょう:

user $udevadm monitor

udevadm info に続いてデバイスパスを指定すると、デバイスの情報を取得できます:

user $udevadm info -p /devices/pci0000:00/0000:00:1d.7

デバイスの名前を使用してパスを取得します:

user $udevadm info -q path -n input/mouse1
/devices/pci0000:00/0000:00:1d.7/usb1/1-3/1-3.4/1-3.4:1.0/0003:046D:C404.0006/input/input24/mouse1

udevadm test に続いてイベントをテストするデバイスのパスを使用すると、イベントの実行をテストすることができます:

user $udevadm test /devices/pci0000:00/0000:00:1d.7

すべての udevadm におけるコマンドのリストを得るには:

user $udevadm -h

古いリリースから移行する

udev 171-r10 から eudev 1.2-r1

Gentoo forums のこの投稿を参照してください。

udev から eudev への移行中に壊れたシステム

Gentoo forums の この投稿を参照してください。

関連項目

外部の情報

参照

  1. Bug 575718 - Request for council decision RE virtual/udev default provider, Gentoo's Bugzilla Main Page, (Last modified) February 27th, 2016. Retrieved on March 1st, 2016.
  2. Project:Eudev, Gentoo Wiki, (Last modified) November 12th, 2015. Retrieved on March 11th, 2016.