eudev
eudev はそのメンテナを Gentoo から独立したプロジェクトへ変更しました。eudev は今も Gentoo に残っていますが、udev を使用することが推奨されます。移行は何事もなく行えるはずですが、問題を避けるために対応するニュース項目を読んでそれに従ってください。
eudev は systemd の 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 などのホットプラグ対応デバイスを考えてみてください。最初のデバイスというのはこれらのうちどれのことでしょう? そして、いつまで最初のデバイスといえるのでしょう? 最初のデバイスが消えたとき、他のデバイスは何と名付けられるのでしょうか? それは進行中の処理に影響するでしょうか? 誰かが(たまたま最初のプリンターになっていた)レーザープリンターのプラグを引っこ抜いたというだけの理由で、印刷ジョブが高性能なレーザープリンターからほとんど壊れかけのマトリックスプリンターに突然移ってしまったとしたら、笑ってしまいませんか?
デバイスマネージャに入ってみましょう。( udev や eudev のような)今どきのデバイスマネージャならば必ず:
- ユーザスペースで動作します。
- 動的にデバイスファイルが生成されたり削除されたりします。
- 一貫したデバイス命名を行います。
- ユーザスペースのアプリケーション・プログラム・インターフェイス (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-trigger
も sysinit ランレベルに追加してください。
選択可能: 伝統的なネットワークインターフェース命名法を維持する
カーネルによって提供される 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.use
package.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.use
package.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 の この投稿を参照してください。
関連項目
- Udev — systemd の Linux カーネルのためのデバイスマネージャです。
- Gentoo eudev Project — udev をフォークする Gentoo の公式プロジェクト。
- Allow only known usb devices — describes how to protect a GNU/Linux system against rogue USB devices via a white listing policy.
- Google Summer of Code/2016/Ideas/Eudev
外部の情報
- Gentoo Forums の Moving from udev (171-r10) to eudev (1.2-r1)
- K1SS — replace eudev with the device manager of your choosing
参照
- ↑ 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.
- ↑ Project:Eudev, Gentoo Wiki, (Last modified) November 12th, 2015. Retrieved on March 11th, 2016.