この演習の目的は通りです。
これまでは、Linuxの設定を毎回、手動で新規に行なって来ましたが、これらの設定は、特定な設定ファイルに保存することによって、電源on時等に、自動的に行なうことができます。
unix ( linuxもunixの一つです.. )での設定方法の特徴は、設定ファイルがあり、それが人間にも読める(と、普通は書くこともできます)ことです。
したがって、問題があれば、「見て直す」ことができますし、また、他の設定を「見る」ことにより、仮に、あまり内容が解らなくても、自分用に「めのこ」で直すこともできます。
一つのアプリケーションに関しては、原則として、一つのファイルが対応しているので、一つのファイルを変更しただけで、他のシステムが変になることもない(これをモジュラリティと呼びます.. )ので、安心して試すことも可能です。
唯一、難点を言えば、「必要な設定ファイルがどこにあるかが解らない」点でしょうか。最近は、ある程度、ルール化されてきているのですが、なかなか統一とは行かないようです。
今回の実習では、この様な設定ファイルの変更を行なうことにより、設定を保存することができることを学びます。
まず、Linux PCの電源をいれましょう。そして、実験結果を明確にするために、まず、既存の設定ファイルの存在を確認します。
次のように、lsコマンドを実行しましょう。
[root@Linux-X /root]# ls -al \ /etc/sysconfig/network-scripts/ifcfg-eth0 -rwxr-xr-x 1 root root 38 Dec 27 2001 /etc/sysconfig/network-s cripts/ifcfg-eth0 [root@Linux-X /root]#
このような表示(1)がされる場合は、既に、設定ファイル( /etc/sysconfig/network-scripts/ifcfg-eth0 )が存在するので、次のようなcatコマンドで、この内容を確認してみましょう
[root@Linux-X /root]# cat \ /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 IPADDR=192.168.99.1 NETMASK=255.255.255.0 NETWORK=192.168.99.0 BROADCAST=192.168.99.255 ONBOOT=yes [root@Linux-X /root]#
この例では、次のような設定になっていることを表しています。
内容を確認したら、思い切って、次のrmコマンドで、この設定ファイルを削除しましょう。
[root@Linux-X /root]# rm \ /etc/sysconfig/network-scripts/ifcfg-eth0 [root@Linux-X /root]#
削除が終ったら、lsコマンドを使って、本当になくなったかどうかを確認しましょう。
[root@Linux-X /root]# ls -al \ /etc/sysconfig/network-scripts/ifcfg-eth0 ls: /etc/sysconfig/network-scripts/ifcfg-eth0: No such file or \ directory [root@Linux-X /root]#
もちろん、最初から設定ファイルが無かった場合も、この結果と同じになります。
次にNetwork CardをPCMCIA Slotに挿入し(2)、ifconfigを利用して、Network interface eth0に何も設定されていないことを確認(3)してください(4)。
[root@Linux-X /root]# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:D0:68:00:02:32 UP BROADCAST RUNNING MTU:1500 Metric:1 RX packets:137743 errors:0 dropped:0 overruns:0 frame:1 TX packets:110621 errors:5 dropped:0 overruns:0 carrier:1 collisions:19704 txqueuelen:100 Interrupt:5 Base address:0xd000 [root@Linux-X /root]#
そして、最後に、ケーブルを既存のNetworkに接続し、dhcpcd (または、dhcpclient )コマンドを実行し、DHCP経由で、IP Addressが取得されることを確認してください。
[root@Linux-X /root]# dhcpcd [root@Linux-X /root]# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:D0:68:00:02:32 inet addr:192.168.3.43 Bcast:192.168.3.63 Mask:255.255.255.192 UP BROADCAST RUNNING MTU:1500 Metric:1 RX packets:140922 errors:0 dropped:0 overruns:0 frame:1 TX packets:112763 errors:5 dropped:0 overruns:0 carrier:1 collisions:19836 txqueuelen:100 Interrupt:5 Base address:0xd000 [root@Linux-X /root]#
上記の例では、192.168.3.43というip addressが取得できています。
次に、設定ファイルを利用して、Linux PCの設定を行ないますが、いきなり設定ファイルを作成するのは大変なので、既存の設定ファイルを転用します。
その設定ファイルをftpコマンドを利用して、取得します。
まず、ftpコマンドを利用して、ftpサーバと接続します。
するとNameとPasswordを要求されますので、Nameには、ftpを、Passwordは、礼儀のため(5)に、自分のe-mail addressを入力しましょう(6)。
[root@Linux-X /root]# ftp 192.168.3.49 Connected to 192.168.3.49 (192.168.3.49). 220 h31.private.media.cst.nihon-u.ac.jp FTP server (Version \ wu-2.6.1-18) ready. Name (192.168.3.49:root): ftp 331 Guest login ok, send your complete e-mail address as \ password. Password: 230 Guest login ok, access restrictions apply. Remote system type is UNIX. Using binary mode to transfer files. ftp>
接続に失敗したら、一旦、quitコマンドで、ftpを終了し、もう一度、やり直して下さい。
ftp接続に成功したら、早速、設定ファイルを取り寄せましょう。
まず、おまじないのbinコマンドを実行します。そして、ファイルのある場所に移動するためにcdコマンドを実行します。次に、最初の設定ファイルであるifcfg-eth0.DHCPというファイルがあるかどうかlsコマンドで確認します。
ftp> bin 200 Type set to I. ftp> cd pub 250 CWD command successful. ftp> ls ifcfg* 227 Entering Passive Mode (127,0,0,1,52,113) 150 Opening ASCII mode data connection for directory listing. -rwxr-xr-x 1 root 50 38 Nov 28 18:53 ifcfg-eth0 -rw-r--r-- 1 root 50 111 Nov 28 18:57 ifcfg-eth0.192.168.99.1 -rwxr-xr-x 1 root 50 38 Nov 28 18:56 ifcfg-eth0.DHCP 226 Transfer complete. ftp>
みつかったら、早速getコマンドを利用して取り寄せます。
ftp> get ifcfg-eth0.DHCP local: ifcfg-eth0.DHCP remote: ifcfg-eth0.DHCP 227 Entering Passive Mode (127,0,0,1,182,28) 150 Opening BINARY mode data connection for ifcfg-eth0.DHCP (38 \ bytes). 226 Transfer complete. 38 bytes received in 0.00857 secs (4.3 Kbytes/sec) ftp>
取り寄せに、成功したら、quitで、ftpを終了し、再度、本当にとれているかをlsコマンドで確認しましょう。
ftp> quit 221-You have transferred 38 bytes in 1 files. 221-Total traffic for this session was 1292 bytes in 1 transfers. 221 Thank you for using the FTP service on \ h31.private.media.cst.nihon-u.ac.jp. [root@Linux-X /root]# ls -l ifcfg-eth0.DHCP -rw-r--r-- 1 root root 38 11 29 05:15 ifcfg-eth0.DHCP [root@Linux-X /root]#
この設定ファイルは、DHCPを利用して、Network Cardを動的に自動設定を行ないます。一応、catコマンドで、内容を確認してみましょう。
[root@Linux-X /root]# cat ifcfg-eth0.DHCP DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp [root@Linux-X /root]#
これで、内容は問題ないのですが、これがちゃんと設定ファイルとして、働くには、この内容が、実験1で触れたように/etc/sysconfig/network-scripts/ifcfg-eth0に入っていなければなりません。そこで、cpコマンドを利用して、このDHCPを利用する設定を、/etc/sysconfig/network-scripts/ifcfg-eth0に書き込みます。
[root@Linux-X /root]# cp ifcfg-eth0.DHCP \ /etc/sysconfig/network-scripts/ifcfg-eth0 [root@Linux-X /root]#
これで、DHCP Serverを利用して、自動的にIP Addressを取る設定が可能になったので、早速、rebootして、確認してみましょう。
[root@Linux-X /root]# shutdown -r now
Linux起動後loginしなおして、確かに、ip addressを取得していることを確認してみてください。
今度は、実験2と同様にして、ifcfg-eth0.192.168.99.1を入手し、それを設定ファイルとして設定してみましょう。
そして、rebootする(7)と、確かにeth0に192.168.99.1が設定されることも確認してください。
実験3では、設定が、電源off後も有効である( rebootしても設定が生き残る)ことを確認するためにrebootを繰り返しましたが、実際は、rebootしなくても、設定の内容を変更した後に、その変更を反映させることが可能です。
そのためのコマンドがifup/ifdownコマンドです。
再び、設定をDHCP経由で入手できるようにするために、次のようにコマンドを実行してみてください。
なお、ifdown後にケーブルをつなぎましょう。
[root@Linux-X /root]# cp ifcfg-eth0.DHCP \ /etc/sysconfig/network-scripts/ifcfg-eth0 [root@Linux-X /root]# ifdown eth0 [root@Linux-X /root]# ifup eth0
そして、確かに、設定が変更されていることを確認しましょう。
このままでは、あらかじめ決められた内容にしか変更できません。できれば、直接設定ファイルの内容が変更したいものです。
このために、利用するコマンドがファイル編集コマンドviです。
viコマンドは、起動時に、編集対象とするファイルの名前を指定します。すると、そのファイルの内容が表示されます。
この状態で、h [左], j [下], k [上], l [右]のキーを押すと、それぞれの方向にカーソルが移動します。
この状態で、x [文字削除]を押すと、カーソルのある場所の文字が消えます。
また、i [挿入]を押し、追加したい文字を入力後にESCキーを押すと、文字を追加することが可能です。
なお、最後にZZ [終了]を押せば(8)viを終了することができます。
また、同時変更内容を反映させることができます。
なお、編集内容をキャンセルして、終了するには、:q!の三文字を入力後[Enter]キーを入力します。
実際に、viを起動し、IP Addressの設定を変更し、更に、ifup/ifdownを利用して、その設定が、実際に反映されることを確認しましょう。
[root@Linux-X /root]# vi \ /etc/sysconfig/network-scripts/ifcfg-eth0
DHCP Serverは、DHCP ( Dynamic Host Configration Protocol :動的なホストの設定手順)を利用して、Client Hostに、Netowrk設定に必要な情報を提供するServiceを行なうServerです。
DHCP ServerのようなNetwork Serverを構築する手順は、既に、Network設定の終ったLinux PCがあれば、ほぼ、次のような感じになります。
Serverは、特殊なProgram ( Server Program )が動いているHostというだけです。
これが、あらかじめHost上に用意されていれば、問題ありませんが、そうでなければ、ftp等を利用して、Network経由で、入手します。
Serverは、Linux上のServer Program ( Server Software )として実現されています。したがって、そのProgram ( Soft )を、まず、Linux PCに、Installする必要があります。
RedHat系のLinuxでは、そのために、rpm形式のファイルが提供されており、rpmコマンドを実行することにより、簡単にinstallできます。
Serverは、どれも同じ機能を持ちますが、どれも同じ振舞をさせるわけではありません。むしろ、そのServerが設置されているNetworkによって、異なる振舞が要求されるのが普通(9)です。
その振舞を変更するには、そのServer Programに対応した、設定ファイルを、望みの振舞になるように作成する必要があります。
この作業は、やはり、vi等を利用して、行ないますが、ほとんどの場合は、一から作成するのではなく、あらかじめ用意されている雛型ファイルに自分なりの変更を行なうことで、実現できます。
InstallとConfigurationができたら、後は、Serviceを開始するだけです。
RedHat系では、開始や終了にも、一応の規則がありますので、その規則を学びましょう。
結論から言えば、「Serverを作る」事自身は、あまり難しいことはありません。実際、この演習で学ぶように、「Serverを作る」ということは単に、「Serverとして動くプログラムを実行する」だけのことであり、これは、普通に動くプログラムを実行するとのあまり違いはないからです。
それでは、単純に「そんなの簡単さ」と言えるのでしょうか?実は、Serverの問題は、Server開始して、Serviceを始めることよりもむしろ、Serviceを始めた後のServer運用にあるのです。
確かに、Serverの作成は技術的な要素が強く、敷居が高いのは事実なのですが、この演習で学ぶように定型的な要素が強く、一旦慣れてしまえば、それほど難しいものではありません。
逆に、運用は、目的意識がハッキリしていれば、技術的な要素が薄い分、解り易いのですが、それだけに、目的意識がないと、どう手をつけてよいかわからず、途方に暮れてしまうことになやすいのです。
「Serverを運用してみたい」ならば、次のように考えてください。
まずは、DHCP Server Programを入手しましょう。方法は、ifcfg-eth0と全く同じです。
違いは、入手するファイルの名前だけで、その名前は、dhcp-2.0-4.i386.rpmです。
rpmファイルが入手できれば、それのInstallはrpmコマンドで簡単に実行できます。
[root@Linux-X /root]# rpm -Uhv dhcp-2.0-4.i386.rpm ############################################# [root@Linux-X /root]#
なお、既に、install済の場合は、Errorになりますので、あらかじめ、installされているかどうかを確認することもでいます。
[root@Linux-X /root]# rpm -qa | grep dhcp- dhcp-2.0-4 [root@Linux-X /root]#
また、古い版のものが入っている場合は、(自動的に上書き[update]されますが敢えて行なうなら.. )次のようにして、削除することも可能です。
[root@Linux-X /root]# rpm -e dhcp-2.0-4 [root@Linux-X /root]#
このDHCP Server Program(10)の設定ファイルは、/etc/dhcpd.confであり、また、これとは別にdhcpd.leasesというファイルも必要です。
本来ならば、/etc/dhcpd.confの作成方法を説明するところですが、今回は、ftp server上にあるdhcpd.confをそのまま利用しましょう。
rpmファイルと同様ftpで入手し、cpコマンドで上書きします。
[root@Linux-X /root]# cp dhcpd.conf /etc [root@Linux-X /root]#
dhcpd.leasesは、DHCP Serverが、どのIP Addressを割り当てているかの記録を残すためのファイルです。DHCP Serverが何らかの理由で、再始動するときに、過去の履歴を、このdhcpd.leasesによって確認することができます。
始めて、dhcpdを起動する場合は、当然、過去の履歴はないので、このファイルは空っぽで構いません。
そこで、次のtouchコマンドで、空のdhcpd.leasesを作成します。
[root@Linux-X /root]# touch /var/state/dhcp/dhcpd.leases [root@Linux-X /root]#
dhcpのstartupは、/etc/rc.d/init.d/dhcpd startでおこないます。また、そのshutdownは、/etc/rc.d/init.d/dhcpd stopでおこないます。
[root@Linux-X /root]# /etc/rc.d/init.d/dhcpd start
DHCP ServerとDHCP ClinetからなるNetworkを一つ作り、DHCP Clinetが、DHCP Serverから確かに、IP Address等を得ることができることを確認しなさい。
DHCP Server | >-------+---------------+------------------< | DHCP Client (ie. Windows-PC)
また、dhcpd.leasesの内容を確認し、割り当てがうまくいっていることを確認しましょう。
[root@Linux-X /root]# cat /var/state/dhcp/dhcpd.leases
このままでは、Linuxを起動する度に、手動で、dhcpdを起動しなければなりません。
そこで、次動的にdhcpdが起動するように設定を変更してみましょう。
実は、linux(11)はdhcpdを起動するかどうかを/etc/rc.d/rc3.d/にあるXYYdhcpdというファイルの名前で判断しています(12)。
[root@Linux-X /root]# cd /etc/rc.d/rc3.d [root@Linux-X /etc/rc.d/rc3.d]# ls *dhcpd* K35dhcpd@ [root@Linux-X /etc/rc.d/rc3.d]#
ここで、Xの1文字は、KかSで、もしSならStart (実行を行う)で、KならばKilled (実行しない)を意味します。YYの部分には、数字がはいっており、この数字で、dhcpdを何時(他のServiceと比較して、どの順番で.. )実行するかを判断します。
ここでは、K35dhcpdという名前(つまり先頭の1文字がK )なので、自動的に実行していないわけです。
これを( boot時に.. )自動実行するようにするには単にmvコマンドを利用して名前を変更するだけです。
[root@Linux-X /etc/rc.d/rc3.d]# mv K35dhcpd S35dhcpd [root@Linux-X /etc/rc.d/rc3.d]# ls *dhcpd* S35dhcpd@ [root@Linux-X /etc/rc.d/rc3.d]#
この状態で、再起動し、自動的にdhcpdが起動されることを確認してみましょう。
[root@Linux-X /root]# ps auxww | grep dhcpd root 15014 0.0 0.8 2500 1076 ? S Sep30 0:28 /usr/sbin/dhcpd root 26743 0.0 0.5 3628 644 pts/2 S 15:52 0:00 grep dhcpd [root@Linux-X /root]#
なお、実験が終ったら、後かたづけとして、dhcpdが自動的に起動しないようにしておきましょう。