いますぐ実践! Linuxシステム管理

Last-Modified: 2007/8/5

いますぐ実践! Linux システム管理 / Vol.114 / 読者数:1125名

ご無沙汰いたしております、うすだです。

1週間お休みをいただきましたが、ずいぶん間があいてしまったような気 がします。そのくらい、この2週間の時間の流れが遅く感じられました。

それはつまり、苦手なお仕事が続いてテンションが低かった、ということ だと思います。(おっと、テンションが低いのは、現在進行形でした。)

しかし、結局、やらなければいけないことに変わりはないわけで、後回し にすればするほど、自分の首を締めることになりますよね。

「どちらにしてもやらなければいけないなら、今すぐにやりなさい!」と いつも息子に言っている以上、親の私がまず実践すべきだということに、 (いまさらですが)気づき、(重い腰を上げて)がんばろうと思いました。

子どもを見ていると、自分のよくないところが、いやでも目につきます。
子どもが、ダイレクトに直球で指摘してくれることもあります。
結婚せずひとりでいたら、その分自由ではありますが、自分の欠点を知る 機会が格段に減っていたと思います。
ですので、ここはひとつ、その気づきや指摘を、素直に受け入れるところ から始めようと思っている次第です。

…と、微妙な宣言をしたところで、今週も、はりきってまいりましょう!

今週のお題 - udev の仕組みを理解する

みなさんは、新しいデバイスを接続しても、デバイスファイルがないため に、そのデバイスが使えない、という経験をしたことがないでしょうか?

Linux が 2.4 カーネル以前の場合、/dev の下には、使用される可能性の あるデバイスファイルが、あらかじめごっそりと作成されていました。

新たにデバイスを追加したとき、デバイスファイルがすでに存在すれば、 そのデバイスを使うことができます。
ですが、デバイスファイルが存在しないと、メジャー番号やマイナー番号 を調べて、手動で作成しなければなりません。
ですので、メジャー番号やマイナー番号がわからないとき、途方に暮れる こともあったように記憶しております。

そんな迷える仔羊のために、2.6 カーネル以降では、udev というものが 登場しました。udev を使えば、上記の問題が、一気に解消されます。

じゃあ、そういうことがもうないなら、知らなくてもいいじゃん、という ことになりそうですが、それでは、当メルマガの存在意義(あるいはネタ) がなくなってしまいます。

…じゃなくて、Linux で飯を食うひとは、そのくらい知ってないと、後輩 に聞かれたときなどに、気まずい思いをする可能性があります。

ですので、今週は、udev の仕組みを追いかけてみたいと思います。
udev のことを知らなくて、後輩やお客さまに聞かれる可能性のある貴兄 は、念のため一読されることをお勧めします。

− − − − − − − − − − − − − − − − − −

…いやもうほんとに、前置きを短く書くコツを知りたいものです。

という反省は置いておきまして、本題に入りたいと思います。
以降では、Linux カーネル 2.6 の最新に近いやつを対象に、話を進めて いこうと思います。

その比較的新しめの 2.6 カーネルでは、デバイスの存在を認識したり、 デバイスがなくなったりしたときに、netlink を介して、ユーザにその旨 を通知してくれるようになりました。

udev は、そのカーネルからのメッセージを受けて、デバイスファイルを 作成したり消去したりします。ですので、手動で作成する必要がなくなる わけですね。ああ、便利です。

今までは、使用する可能性のあるデバイスファイルが、/dev の下に全部 存在していましたが、udev が導入されてからは、実在するデバイスだけ が /dev の下に存在します。
今存在するデバイスがわかるという点でも、便利ではないかと思います。

ちなみに、これらの処理を、udevd というデーモンが行います。

% ps -C udevd   
PID TTY          TIME CMD   
358 ?        00:00:00 udevd   

udevd は、/etc/udev/rules.d/ の下にある設定ファイルにしたがって、 デバイスファイルを作成したり、何らかのコマンドを実行したりします。
…が、このあたりは、深追いすると出てこられなくなりますので、今回は 説明を割愛させていただきます。
(説明できるほどには知らない、というだけだったりもします。)

− − − − − − − − − − − − − − − − − −

では、カーネルが送信するメッセージを、観察してみましょう。

といっても、udevmonitor というコマンドを実行するだけです。
実行すると、以下のメッセージが出力されます。(root権限が必要です。)

# udevmonitor    
udevmonitor prints the received event from the kernel [UEVENT]   
and the event which udev sends out after rule processing [UDEV]   

カーネルから受け取ったイベントが UEVENT で、udevd が処理して返事を 返したものが UDEV だ、というようなことをおっしゃっていますね。

ここで、USB カメラを差しますと、以下のメッセージが出力されました。
(行末が \ の行は、実際には改行せずに、次の行が続きます。)

UEVENT[1186251356.080090] add@/devices/pci0000:00/0000:00:1d.1/\   
usb2/2-1   
UDEV  [1186251356.081721] add@/devices/pci0000:00/0000:00:1d.1/\   
usb2/2-1   
UEVENT[1186251356.096690] add@/devices/pci0000:00/0000:00:1d.1/\   
usb2/2-1/2-1:1.0   
UEVENT[1186251356.096745] add@/class/video4linux/video0   
UEVENT[1186251356.096764] add@/class/usb_device/usbdev2.14   
UDEV  [1186251356.185101] add@/devices/pci0000:00/0000:00:1d.1/\   
usb2/2-1/2-1:1.0   
UDEV  [1186251356.210017] add@/class/video4linux/video0   
UDEV  [1186251356.245688] add@/class/usb_device/usbdev2.14   

USB のポートに video0 が挿入された的なことをおっしゃっているのが、 それとなくわかると思います。(あいまいですみません。)

実際、/dev/video0 と、そのシンボリックリンクである /dev/video が、 自動的に作成されていました。

次に、USB カメラを抜くと、以下が出力されました。

UEVENT[1186251396.659816] remove@/class/video4linux/video0   
UEVENT[1186251396.660819] remove@/devices/pci0000:00/0000:00:1d.1/\   
usb2/2-1/2-1:1.0   
UEVENT[1186251396.660847] remove@/class/usb_device/usbdev2.14   
UEVENT[1186251396.660865] remove@/devices/pci0000:00/0000:00:1d.1/\   
usb2/2-1   
UDEV  [1186251396.663174] remove@/class/video4linux/video0   
UDEV  [1186251396.669726] remove@/devices/pci0000:00/0000:00:1d.1/\   
usb2/2-1/2-1:1.0   
UDEV  [1186251396.676687] remove@/class/usb_device/usbdev2.14   
UDEV  [1186251396.683526] remove@/devices/pci0000:00/0000:00:1d.1/\   
usb2/2-1   

/dev/video0 と /dev/video は、きれいさっぱりなくなっていました。

− − − − − − − − − − − − − − − − − −

上記のように、あとから認識されるデバイスはいいのですが、カーネルの 立上り時に認識されたデバイスは、どうすればいいでしょうか。
netlink を介してメッセージを送られても、それが udevd の起動前だと、 受け取ることができません。

実は、sysfs 上の uevent というファイルをつっつくと、カーネルが再度 メッセージを送ってくれるようになっています。

ですので、udevd は、起動時に、/sys/block と /sys/class 以下にある uevent というファイルを探し、それをつっつくことで、udevd 起動前に 認識されたデバイスの処理を行います。

このあたりを、実際に確かめてみたいと思います。
/sys/class/input/misc/ の下にある uevent で、試してみましょう。

まず、メッセージを確認するため、udevmonitor を起動しておきます。
そして、別の端末から、以下を実行します。(root権限が必要です。)

# echo > /sys/class/input/mice/uevent   

すると、udevmonitor が以下を出力します。

UEVENT[1186033694.276923] add@/class/input/mice   
UDEV  [1186033694.366521] add@/class/input/mice   

uevent ファイルをつっつくことで、メッセージを再送信してくれている ことがわかります。

ちなみに、唐突に話はそれますが、udevmonitor を、--env オプション付 で実行すると、詳細(環境変数一式)を出力してくれます。

# udevmonitor --env:   
...中略...   
UEVENT[1186033967.674478] add@/class/input/mice   
ACTION=add   
DEVPATH=/class/input/mice   
SUBSYSTEM=input   
SEQNUM=713   
MAJOR=13   
MINOR=63   
...後略... 

− − − − − − − − − − − − − − − − − −

以上、udev の動きを、さらっと追いかけてみました。

あまり「実践」という感じではありませんでしたが、どのような仕組みで 動いているのか、大まかにでも知ることは大事だと思います。
udevmonitor などを実際に動かして、ああなるほどと思っていただけます と、幸いです。

宿題の答え

先週の宿題は、

nsswitch.confhosts の設定方法を確認し、host.conforder と 
設定を合わせましょう。   

でした。

/etc/nsswitch.conf の hosts は、

hosts: files dns   

のように、検索してほしい順に、スペースで区切って指定します。
指定できるのは、files, dns, nis と nisplus です。

ですので、たとえば、host.conf の order の指定が、

order bind,hosts   

となっていて、これと同じ設定にしたいなら、nsswitch.conf は、

hosts: dns files   

と記述します。

ちなみに、確認方法ですが、hosts にしか存在しないエントリと、DNS に しか存在しないエントリを作っておき、どちらかを問い合わせることで、 どちらで解決しているのかを確認することができます。

今週の宿題

今週の宿題は、

デバイスを挿入するなどしたときに、デバイスファイルが自動的に作成 
されることを確認しましょう。   

です。

デバイスの挿入前と挿入後の状態を比較すれば、わかりますよね。
比較するのは簡単だと思いますので、是非やってみてください。

あとがき

スラッシュドットなどでも話題になっていましたので、ご存じの方も多い のではないかと思いますが、あまりにも私の心に響くものがありましたの で、あえてご紹介させていただきます。

インターネットサービスプロバイダー相互接続マップ http://i.impressrd.jp/e/2007/07/30/19

かつて、インターネットマガジンに毎月付録としてついてきた、ISP相互 接続マップの一部が、上記で公開されています。

この時代に、会社のインターネットサーバなどを管理していましたので、 私にとっては、非常に感慨深いものがあります。

上記で一番古い、1995年6月のマップを見ますと、Spin の直下に、64kbps で、「東海地域インターネット」がぶら下がっていると思います。当時は この下に、アナログ専用回線で、つながせてもらっていました。

これが、次の年の1996年2月のマップになりますと、一瞬どこにあるのか わからないくらい密集しています。同年10月のマップは、さらに密集して いて、えらいことになっています。(ちなみに、IIJ名古屋の下の TCP と いうやつです。このころは、すでにデジタル専用回線 64kbps でした。)

当時は、インターネットが広まってきたなあ、くらいにしか思ってません でしたが、こうやって図で見ると、ものすごい勢いで広まっていたのだと いうことがわかり、今さらながらびっくりさせられます。

今でも、インターネットは、Web2.0 などでまだまだ熱いと思いますが、 上記のように、その熱気がビジュアルでわかると面白いのになあ、と思い ました。(強引に結論)

さて、またまた申し訳ないのですが、苦手なお仕事とかお盆とかがどっと 押し寄せてきますので、来週はお休みにさせていただきたいと存じます。
おそらく、それなりな会社にお勤めの、せっぱ詰まっていない貴兄なら、 お休みを満喫していて、実践する暇も気力もないですよね。ね。ね。

…すみません。今後は休み癖がつかないよう、努力させていただきます。

今週も、ここまで読んでいただき、ありがとうございました。
それでは、また再来週…す、すみません…に、お会いしましょう!

 

「いますぐ実践! Linux システム管理」はこちらです。
メルマガの解除、バックナンバーなども、以下からどうぞ。
https://www.usupi.org/sysad/ (まぐまぐ ID:149633)

その他、作者に関するページは、概ね以下にございます。
https://www.usupi.org/kuri/ (まぐまぐ ID:126454)
http://usupi.seesaa.net/ (栗日記ブログ)
https://twitter.com/kuriking/ (twitter)
https://facebook.com/kuriking3 (facebook)
https://jp.pinterest.com/kuriking/pinterest)
https://www.instagram.com/kuri_king_/ (instagram)


[バックナンバーのトップへ] [Linux システム管理のトップへ]


トップ

バックナンバー
    [日付順] [目的別]

プロフィール

▼ 本が出ますよ(栗イラストも!)
   

▼ リンク

Server World
各種ディストリビューションの設定例がてんこ盛りです。
日経Linux
今や数少なくなってしまったLinuxの雑誌。
Linux & OSS − @IT
@ITが提供する、Linux の情報が満載。 載っていない設定方法はないんじゃないでしょうか。
gihyo.jp…技術評論社
Linuxに限らず様々な技術情報が満載のサイト。 SoftwareDesign誌も、 ソフトウェア技術者は必見です。
OSDN Magazine
Linux に限らず、オープンソース関連の記事が網羅されています。
ITmediaエンタープライズ:Linux Tips 一覧
Tips というより FAQ 集でしょうか。わからないことがあれば覗きましょう。
Linux Development - IBM Developer
開発者向けですが、勉強になりますよ。
栗日記
システム管理とかと全然関係ありませんが、毎日栗の絵を描いています。
システム管理につかれちゃったとき、癒されたいときに、ご覧ください。:-)

▼ 作ってみました

▼ 最近読んだ本

位置情報の基本と技術
谷口功
  わかりやすかったです。ちょい古いけど。
 
はじめてのバイクメンテナンス
?
  ざっくり理解できました。
 
仕事の思想
田坂広志
  再び。大事だと思います。
 
ドロヘドロ本
林田球
  作者の考えとかわかって面白い!
 
認知症の介護と手続き
遠藤英俊
  理解が深まりました。
 
くらべてわかる航空管制
園山耕司
  素人には難しかった…。
 
旅客機が飛ぶしくみ
チームFL370
  わかりやすくておもしろい。
 
リーダブルコード
Dustin Boswell,Trevor Foucher
  意識してコードを書いています。
 
介護の現場と業界のしくみ
高山善文
  介護する側の視点ですが参考になりました。
 
図解でわかるISO9001のすべて
大浜庄司
  一つ古いけど概要はわかりました。
 

▼ 気に入ってる本

Ship It! ソフトウェアプロジェクト成功のための達人式ガイドブック
Jared Richardson, William Gwaltney Jr.
  いろんな分野に適用したい
 
Java並行処理プログラミング
Brian Goetz, Joshua Bloch, Doug Lea
  Javaや並行処理を甘く見てました
 
ビジュアライジング・データ - Processingによる情報視覚化手法
Ben Fry
  Processingすごくよいです
 
センネン画報その2
今日マチ子
  前作もよいがもっといい!
 
出現する未来
Peter Senge, C. Otto Scharmer, Joseph Jaworski, Betty Sue Flowers
  難しいけど到達したいです
 
図解 実戦マーケティング戦略
佐藤 義典
  栗日記も戦略的に行こう!
 
百日紅(上)(下)
杉浦日向子
  どう書けばいいかわからないけどすばらしい!
 
アルケミスト
パウロ・コエーリョ
  擦り切れるほど読んでます
 
X51.ORG THE ODYSSEY
佐藤 健寿
  X51.ORGの集大成
 
影響力の武器
ロバート・B・チャルディーニ
  思わず納得します
 

▼ せんでん