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

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


いますぐ実践! 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.conf の hosts の設定方法を確認し、host.conf の order と
  設定を合わせましょう。

でした。

/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 システム管理」の解除は、以下からできます。
http://www.usupi.org/sysad/ (まぐまぐ ID:149633)

バックナンバーは、こちらにほぼ全部そろっています。
http://www.usupi.org/sysad/backno.html

「栗日記」−ウィークリーまぐまぐエンタメ版で紹介してもらえました!
http://www.usupi.org/kuri/ (まぐまぐ ID:126454)
http://usupi.seesaa.net/ (栗日記ブログ)


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

トップ

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

プロフィール

▼ リンク

独学Linux
Linuxデスクトップ環境に関する情報が満載です。 メルマガもありますよ。
Server World
CentOS 6をサーバとしたときの設定例が、これでもかというくらいたくさん載っています。 CentOS以外のディストリビューション(Fedora, Ubuntu)も充実しています。
LINUXで自宅サーバーを構築・導入(Fedora9)
Fedora9のインストールの仕方から管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
マロンくん.NET
〜サーバ管理者への道〜
Linuxをサーバとして使用するための、いろいろな設定方法が載っています。 マロンくんもかわいいです。 なんといっても、マロンくんという名前がいいですね!!
日経Linux
今や数少なくなってしまったLinuxの雑誌。ニュースやガイドもあります。
Linux Square − @IT
@ITが提供する、Linux の情報が満載。 載っていない設定方法はないんじゃないでしょうか。
gihyo.jp…技術評論社
Linuxに限らず様々な技術情報が満載のサイト。 SoftwareDesign誌も、 ソフトウェア技術者は必見です。
SourceForge.JP Magazine
Linux に限らず、オープンソース関連の記事が網羅されています。
ITmediaエンタープライズ:Linux Tips 一覧
Tips というより FAQ 集でしょうか。わからないことがあれば覗きましょう。
IBM developerWorks : Linux
開発者向けですが、勉強になりますよ。
Yahoo!ニュース - Linux
Yahoo!のLinuxに関するニュース一覧です。
栗日記
システム管理とかと全然関係ありませんが、毎日栗の絵を描いています。
システム管理につかれちゃったとき、癒されたいときに、ご覧ください。:-)
WEB RANKING - PC関連
ランキングに参加してみました。押してやってください。

▼ 作ってみました

Add to Google

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本