2.0.x kernels
どのディストリビューションを使っている場合でも、 Linux 用の DHCP クライアントデーモンをダウンロードして 自前でビルドすることは可能です。 パッケージの名前は dhcpcd で、現在のバージョンは 0.70 です。
訳注: 最近は 0.70 の版が置いてあるところはあまりないようです.. 以下にある神戸大のサイトから入手すると良いでしょう。
2.1.x kernels
訳注: この節のことは 2.2 系カーネルにも当てはまります。
2.1.x カーネルでは ipv4 ネットワークのパッケージが変更された
(いくつかのフィールドにデフォルトを設定するやり方が変わりました)
ので、dhcpcd は正しく動作しません。
ほとんどの人は開発版のカーネルは使わないでしょうから、
これはあまり問題にはならないでしょう。
これが問題になる人は、 dhcpcd 1.3.16 を使いましょう。これは
Sergei Viznyuk sergei@phystech.com
によって上記の問題を
回避するように修正された版です。以下にあります。
翻訳の時点 (1999/6) では、1.3.17pl5 が最新になっています。 また 2.2 カーネルの Changes 文書によれば、 ISC 版の DHCP クライアント も 2.2 カーネルで動作するそうです。
最新版の DHCPcd は metalab のミラーから、あるいは以下から ダウンロードできます。
最新版の dhcpcd.tar.gz をダウンロードしましょう。
tar -zxvf dhcpcd-0.70.tar.gz
cd dhcpcd-0.70
make
make install
/etc/dhcpc というディレクトリができます。 DHCPcd はここに DHCP 情報を保存します。 dhcpcd は /usr/sbin にコピーされます。
ブート時に DHCP を利用してシステムの初期化を行うには、 以下のように入力します。
cd /etc/rc.d
mv rc.inet1 rc.inet1.OLD
古いネットワーク初期化スクリプトを rc.inet1.OLD に移動します。 ここで新しい rc.inet1 スクリプトを作成する必要があります。 以下のコードで OK でしょう。
#!/bin/sh # # rc.inet1 This shell script boots up the base INET system. HOSTNAME=`cat /etc/HOSTNAME` #This is probably not necessary but I #will leave it in anyways # Attach the loopback device. /sbin/ifconfig lo 127.0.0.1 /sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo # IF YOU HAVE AN ETHERNET CONNECTION, use these lines below to configure the # eth0 interface. If you're only using loopback or SLIP, don't include the # rest of the lines in this file. /usr/sbin/dhcpcd
保存してコンピュータを再起動しましょう。
終わったら 最終設定に進みましょう。
RedHat 5.0+ における DHCPcd の設定はとても簡単です。 まず以下のコマンドでコントロールパネルを起動します。
control-panel
終わったら 最終設定に進みましょう。
DHCPcd は RedHat の標準ディストリビューションに RPM として入っています。 ディストリビューション CD-ROM の RPMS ディレクトリにあるでしょう。 以下からダウンロードしてもいいでしょう。
ftp://ftp.redhat.com/pub/redhat/old-releases/redhat-4.2/i386/RedHat/RPMS/dhcpcd-0.6-2.i386.rpm
以下のコマンドでインストールしましょう。
rpm -i dhcpcd-0.6-2.i386.rpm
あるいは自分の好きなバージョンを取ってきて、 Slackware の 部分で説明したやり方でコンパイルしてもかまいません。
以下の情報は nothing nothing@cc.gatech.edu
から
寄せられました。
静的な IP アドレスと名前を /etc/resolv.conf から取り除きました。
しかし search 行と二つの nameserver 行は残しました
(なぜか私の dhcpcd は /etc/dhcpc/resolv.conf を生成してくれないので、
静的な /etc/resolv.conf を使わなければなりませんでした)。
/etc/sysconfig.network からは HOSTNAME, GATEWAY のエントリを
削除しました。その他のエントリ (NETWORKING, DOMAINNAME, GATEWAYDEV)
はそのまま残しました。
/etc/sysconfig/network-scripts/ifcfg-eth0 からは IPADDR,
NETMASK, NETWORK, BROADCAST のエントリを削除しました。
DEVICE と ONBOOT はそのまま残しました。
BOOTPROTO 行は BOOTPROTO=dhcp と変更しました。
ファイルをセーブし、コンピュータをリブートしましょう。
終わったら 最終設定に進みましょう。
DHCPcd の deb パッケージは以下にあります。
ftp://ftp.debian.org/debian/dists/slink/main/binary-i386/net/dhcpcd_0.70-5.deb
あるいは Slackware のように自分でインストールしてもいいでしょう。 deb パッケージを展開するには以下のコマンドを入力します。
dpkg -i /where/ever/your/debian/packages/are/dhcpd*deb
DHCPcd 用の設定は特に必要ないようです。なぜなら
Heiko Schlittermann heiko@osinf.tu-dresden.de
から
寄せられた情報によりますと:
dhcpcd パッケージも、他の debian パッケージと同じように
スタートアップスクリプトを /etc/init.d/<package_name> に
インストールしてくれます (ここでは /etc/init.d/dhcpcd です)。
そしてそれぞれの /etc/rc?.d/ ディレクトリにリンクを配置します。
したがって /etc/rc?.d/ ディレクトリの内容がブート時に実行されます。
インストールしてからコンピュータを再起動しない場合は、
以下のコマンドによって手動でデーモンを起動してみてください。
/etc/init.d/dhcpcd start
終わったら 最終設定に進みましょう。
以下の内容は R. Shapiro によるものです。
Yoichi Hariguchi (播口陽一さん) の dhcpcd 0.65 と 0.70 は MkLinux と linuxppc kernel 2.1.24 で正しく動作します。 ただし以下の点に注意してください。
最近の linuxppc カーネルでは、Hariguchi の dhcpcd はどの版も 動作しません。かわりに Sergei Viznyuk のものを使う必要があります (現在のバージョンは 1.3.9: 上記の URL をみてください)。 残念ながら Viznyuk の dhcpcd は glibc2 用に書かれているのですが、 linuxppc 2.1.1xx は違うのです。したがってコンパイルには少々 技が必要になります。詳細は私に連絡してください。一度コンパイルしてしま えば、最近のカーネルでうまく動作します (でも MkLinux や linuxppc 2.1.24 では動作しません)。
Viznyuk の dhcpcd については、私も v1.3.7 の Viznyuk 版 dhcpcd を使っていますが、最近の linuxppc カーネルでうまく動いています。 2.1.102, 103, 115, 119 ではテスト済みです。これをソースから ビルドすることも可能ですが、私は詳細は知りません。 Viznyuk dhcpcd は 2.1.24 では動きませんが、そのカーネルでは パッチを当てた Hariguchi dhcpcd が動作します。 Hariguchi dhcpcd はソースから簡単にビルドできます。
まとめますと、以下のようになります。
MkLinux: Hariguchi: yes; Viznyuk, no 2.1.24: Hariguchi: yes if patched (easy to build); Viznyuk: no 2.1.102+: Hariguchi: no; Viznyuk: yes (tricky to build)
Viznyuk dhcpcd は /etc/resolv.conf に直接書き込むことに注意して ください (すでにあったものは rename されます)。したがって /etc/dhcpc からコピーしたりリンクしたりする必要はありません。 また Viznyuk dhcpcd は /usr/sbin ではなく /sbin にインストールされます し、コマンドラインオプションも Hariguchi のものと少し違います。 このため ifup に少々修正が必要かもしれません。
linuxppc 用のコンパイル済み dhcpcd バイナリが必要な方は、 reshapiro@mediaone.net. までメールをください。
また ftp://ftp.linuxppc.org//pub/linuxppc/contrib/linuxppc-R4/RPMS/ にはバイナリの RPM を置いてあります。 このディレクトリの dhcpcd-1.3.8-2.ppc.rpm は使わないように してください。壊れています。信頼してよいバージョンは dhcpcd-0.70-0.ppc.rpm (linuxppc 2.1.24 用) と dhcpcd-1.3.8-3.ppc.rpm (linuxppc 2.1.102 以降用) です。 1.3.9 の rpm も近いうちに置くつもりです。 また 1.3.9 に少々修正を加えて、 0.65 や 0.70 にあった -c コマンドラインオプション (標準の Viznyuk dhcpcd には 含まれていません) を追加したものも手元にはあります。
dhcpcd は Token Ring ネットワークで用いようとしても動作しません。
以下は Henrik Stoerner henrik_stoerner@olicom.dk
から
寄せられたコメントです。
問題は dhcpcd が Ethernet カードしか扱えないという点にあります。
dhcpcd は Token-Ring のカードを見付けると、それについて何らかの
扱いをすることをせず、「インターフェースが Ethernet ではない」
と報告してきます。
解決策は dhcpcd のソースにシンプルなパッチを当てることです。
<http://eolicom.olicom.dk/~storner/dhcp/>
に簡単な web ページを用意して、パッチと RPM ファイル、
コンパイル済みバイナリを置きました。
(訳注: リンク切れです...)
パッチは dhcpcd のメンテナにも送付しましたので、
dhcpcd の将来のリリースでは取り込んでもらえると思います。
マシンを再起動したら、ネットワークインターフェースは 設定されているはずです。
ifconfig
と入力すれば、以下のような表示が出るでしょう。
lo Link encap:Local Loopback inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0 UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1 RX packets:302 errors:0 dropped:0 overruns:0 frame:0 TX packets:302 errors:0 dropped:0 overruns:0 carrier:0 coll:0 eth0 Link encap:Ethernet HWaddr 00:20:AF:EE:05:45 inet addr:24.128.53.102 Bcast:24.128.53.255 Mask:255.255.254.0 ^^^^^^^^^^^^^^^^^^^^^^^ UP BROADCAST NOTRAILERS RUNNING MULTICAST MTU:1500 Metric:1 RX packets:24783 errors:1 dropped:1 overruns:0 frame:1 TX packets:11598 errors:0 dropped:0 overruns:0 carrier:0 coll:96 Interrupt:10 Base address:0x300
inet. addr のあとに通常の番号が出ていれば OK です。 0.0.0.0 が出てもがっかりしないでください、これは dhcpcd が IP アドレスを取得する前の一時的な状態です。数分経っても 0.0.0.0 のままでしたら、 トラブルシュート をチェックしてください。 DHCPcd はデーモンですから、マシンの電源が入っている限り居続けます。 DHCPcd は 3 時間おきに DHCP サーバに接続し、新たな IP アドレスを 貸し出してもらおうとします。メッセージはすべて syslog に 保存されます (Slackware なら /var/adm/syslog, Redhat/OpenLinux なら /var/log/syslog です)。
最後にもう一つ。ネームサーバを指定しなければなりません。 これには二つのやり方があります。一つはプロバイダに、使ってもかまわない ネームサーバのアドレスを教えてもらい、それを /etc/resolv.conf に書く方法、もう一つは DHCPcd に DHCP サーバから リストを取得させ、 /etc/dhcpc に resolv.conf を作成させる方法です。 私は DHCPcd の resolv.conf を使うことにしました。やり方は以下です。
古い /etc/resolv.conf をバックアップします。
mv /etc/resolv.conf /etc/resolv.conf.OLD
/etc/dhcpc ディレクトリがなければ作ります。
mkdir /etc/dhcpc
/etc/dhcpc/resolv.conf から /etc/resolv.conf へのリンクを作ります。
ln -s /etc/dhcpc/resolv.conf /etc/resolv.conf
上記でうまく行かない場合は以下を試してください (nothing@cc.gatech.edu の指摘を受けて修正しました。また Henrik Stoerner からも改善提案を いただきました)。
この最終ステップを行わなければならなかったのは、 私の dhcpcd が /etc/dhcpc/resolv.conf を作成しなかったからでした。 私は /etc/sysconfig/network-scripts/ifup に以下の修正を行いました (非常に情けないハックですが、私のところではうまく動いています)。
elif [ "$BOOTPROTO" = dhcp -a "$ISALIAS" = no ]; then echo -n "Using DHCP for ${DEVICE}... " /sbin/dhcpcd -c /etc/sysconfig/network-scripts/ifdhcpc-done ${DEVICE} echo "echo \$$ > /var/run/dhcp-wait-${DEVICE}.pid; exec sleep 30" | sh if [ -f /var/run/dhcp-wait-${DEVICE}.pid ]; then ^^^^ echo "failed." exit 1
これを以下のように変更しました。
elif [ "$BOOTPROTO" = dhcp -a "$ISALIAS" = no ]; then echo -n "Using DHCP for ${DEVICE}... " /sbin/dhcpcd echo "echo \$$ > /var/run/dhcp-wait-${DEVICE}.pid; exec sleep 30" | sh if [ ! -f /var/run/dhcp-wait-${DEVICE}.pid ]; then ^^^^^^ echo "failed." exit 1
注意すべきは
if [ ! -f /var/run/dhcp-wait-${DEVICE}.pid ];
の部分の ! (エクスクラメーション) です。
さあ、では席に戻って楽しみましょう :-)
以下のステップは本来不要ですが、多くの人にとって便利でしょう。
a) ネットワーク接続を時々しか必要としないなら、 dhcpcd をコマンドラインから起動する事もできます (root 権限が必要です)。
/usr/sbin/dhcpcd
ネットワークを切断するときには以下を実行します。
/usr/sbin/dhcpcd -k
これまで述べてきたステップを正しくたどってもネットワークアクセスが できない場合には、いくつかの理由が考えられます。
ブートアップのプロセスで、 Linux はネットワークカードを プローブして以下のような行を出力するはずです。
eth0: 3c509 at 0x300 tag 1, 10baseT port, address 00 20 af ee 11 11, IRQ 10. 3c509.c:1.07 6/15/95 becker@cesdis.gsfc.nasa.gov
このようなメッセージが現れない場合は、あなたの Linux システムでは Ethernet カードが認識されていません。一般的な Ethernet カード (NE2000 クローンなど) を使っている場合は、カード設定用の DOS ユーティリティの入ったディスクがあるはずです。 Linux がカードを認識するまで、IRQ を考慮しましょう (IRQ 9, 10, 12 などなら通常は良いはずです)。
dhcpcd を以下のように実行してみましょう。
dhcpcd -r
ifconfig を用いてネットワークインターフェースが正しく設定されたか チェックしてみましょう (設定のプロセスには数秒かかります。 最初は Inet.addr=0.0.0.0 と言ってきます)。
これで解決したら、ブートアップスクリプトにも "-r" フラグを
加えましょう。つまり /sbin/dhcpcd
のかわりに
/sbin/dhcpcd -r
のようにしましょう。
例えば RedHat なら、 /etc/sysconfig/netrowk-scripts/ifup スクリプトを 編集して以下のようにしましょう。
IFNAME=$[ {DEVICE} \ "/sbin/dhcpcd -r -c /etc/"- etc etc.
おそらく RedHat をお使いで、説明を注意深くたどって来ませんでしたね :-)。 if 文の ! (エクスクラメーション) が抜けているのでしょう。 ここに戻って修正方法をチェックすること。
gated (ゲートウェイデーモン) が Linux マシンのルーティングを 壊してしまい、このような問題を引き起こすことがあるそうです。 gated が起動していないかどうかを
ps -auxww | grep gate
でチェックし、あった場合は RedHat の RPM マネージャで削除するか、 /etc/rc.d/ のエントリを削除しましょう。
ネットワークカードの 10BaseT ポート (電話プラグみたいなやつです) が使われる設定になっているかを確認する必要があります。 調べるのに一番いい方法は、カードのどのコネクタが使われるように なっているのかをブートアップ時に確認することです。すなわち以下。
eth0: 3c509 at 0x300 tag 1, 10baseT port, address 00 20 af ee 11 11, IRQ 10. ^^^^^^^^^^^^ 3c509.c:1.07 6/15/95 becker@cesdis.gsfc.nasa.gov
ラップトップ型のユーザから、このような問題が PCMCIA ユーティリティ (特に ifport) のせいで生じるという報告をもらっています。 これがコネクタのタイプを 10Base2 (同軸ケーブル) に設定して しまうのです。 10BaseT になっていることを確認してください。 そうなっていなければカードを再設定してコンピュータを再起動してください。
システムによってはリクエストの一部にホストの名前を含めなければ ならない場合があります。 dhcpcd でこれを行うには 'dhcpcd -h foohost' とします。そのネットワークに対するあなたのアカウント名を 指定するのがおそらく望ましいでしょう。
ケーブルモデムは、ネットワークカードの Ethernet アドレスを 記憶してしまうので、新しいコンピュータを接続したり ネットワークカードを交換したときには何とかしてケーブルモデムに 新しいコンピュータとカードを教えてやらなければなりません。 通常はコンピュータの電源を入れたままモデムの電源を一度切って 入れ直せばいいはずです。だめな場合はテクニカルサポートに電話して、 コンピュータのネットワークカードを交換した旨を伝えてください。
ファイアウォールのルール (ipfwadm rule) によって、 DHCP が設定情報を流すポート 67/68 がふさがれているのかもしれません。 ファイアウォールのルールを注意して調べてください。
MediaOne は DHCP に付加すべきでない情報を加えてしまっています。 おそらくこれはもう問題ではないのでしょうが、うまく行かない場合は これらを確認してみてください。もし幸運 (不運?) にも同じマシンに Windows NT が載っている場合は、イベントビューアを起動すると 以下のような警告が出ているはずです。
DHCP received an unknown option 067 of length 005. The raw option data is given below.
0000: 62 61 73 69 63 basic
訳注: 訳者は NT を使っていませんので、 日本語版のメッセージはわかりません(^_^;
これが原因だった場合は ftp://vanbuer.ddns.org/pub/ に行ってバイナリをダウンロードするか、 ソースを入手して入れ替えてください。