連載
» 2003年04月22日 00時00分 公開

LFSで作って学ぶLinuxの仕組み(4):LFS-3.3編完結! 設定ファイルの準備とLFSの起動 (2/3)

[一志達也,@IT]

各種設定ファイルの作成

 後は、LFSのカーネルをコンパイルするために、各種設定ファイルを作成するだけである。ファイルの作成には、次のようなフォーマットが用いられていることに気付くだろう。

cat > ファイル名 << "EOF"
  設定内容
EOF

 このような記述は、知っている人にとっては当たり前なのだが、見慣れない方にとっては理解し難いかもしれない。それほど難しくないので、ここで簡単に解説しておこう。

 catコマンドは、ファイルの内容をそのまま出力するコマンドである。「>」や「<<」はリダイレクトと呼ばれるもので、コマンドの実行結果をファイル(編注)に保存したりする目的で利用される。ちなみに、コマンドの実行結果を別のコマンドに引き渡すには、パイプ「|」が用いられる。

編注:リダイレクト先は必ずしも「ファイルシステム上のファイル」とは限らない(標準入出力など)。


 試しに、ファイル名を指定しないでcatコマンドを実行してみよう。当然何も表示されないし、それどころかプロンプトも返ってこなくなる。この状態でキーボードから何かを入力して[Enter]キーを押してみると、その内容がおうむ返しのようにそのまま返ってくる。この状態をストップするには、[Ctrl]+[C]を入力する。

 ファイル名を指定されなかったcatコマンドは、標準入力(この場合はキーボード)からの入力内容をそのまま標準出力に出力する。「cat > ファイル名」は、入力内容を指定されたファイルにそのまま書き込むということだ。そこで、入力として、さらに逆方向のリダイレクトを付ける。すなわち、「<< "EOF"」である。これは、「キーワード『EOF』が入力されるまで」を意味している。従って、「cat > ファイル名 << "EOF"」とは、「EOFが来るまでの内容を指定されたファイルに記録する」ということになる。

 この「<< "EOF"」を用いるテクニックは、オラクルのSQL*PlusやPostgreSQLのpsqlのように、対話型のプログラムに入力を渡すために用いることもある。SQL*Plusやpsqlの場合は、それに実行させたいSQLを渡すわけだ。

 ちなみに、「cat >> ファイル名」のように、「>>」と使えばファイルを上書きするのではなく、ファイルの末尾に追加するという意味になる。

/root/.vimrc

 .vimrcは、vi(実際はvim)の各種設定を保存する。例えば行番号を表示する/しない(set number)、ファイル保存時にバックアップを自動作成する/しない(set backup)といった具合である。このファイルはユーザーごとに作成されるもので、ここでは/rootに作成していることから分かるとおり、rootユーザーのための設定である。

 このファイルは必須というわけでもないし、スクリプト中でサンプルとして示している設定も深い意味はない。不要だと思えば作らなくてもよいし、取りあえずサンプルどおりに作成してもいい。設定方法を調べて、自分の好みに合わせて作成してもよいだろう。

 .vimrcに指定できる内容は豊富だし、本稿の本筋からも外れてしまうので、内容の詳細については省略する。

/etc/nsswitch.conf

 nsswitch.confの「ns」は、「name service」を意味している。このファイルには、各種の名前解決に利用する情報(例えばユーザーやホストなど)の取得先を優先順に記述する。

hosts: files dns

と指定すれば、ホスト名の名前解決時に「ファイル(/etc/hosts)を検索し、一致しない場合はDNSを利用する」という意味になる。この指定についてはあれこれ説明するより、ここに記入しようとしている内容やベース・ディストリビューションの/etc/nsswitch.confを見てみる方が、はるかに話が早いだろう。

 このファイルについても、ここでは指定していないような名前解決の設定も可能だし、NISやNIS+を参照先とすることもできるのだが、詳しいことは省略させていただく。

/etc/localtime

 localtimeは、時刻表示する際のタイムゾーンの指定に用いる。といっても、このファイル自体を編集して設定するのではなく、/usr/share/zoneinfoに格納されたファイルへのリンクを張ることで設定を行う。

 /usr/share/zoneinfoには、AsiaやAmericaなどの地域別のディレクトリがあり、その中にTokyoやNew_Yorkのような都市名のファイルが入っている。ここから自分の属する地域と都市を選び、そのファイルへのリンクとして/etc/localtimeを作成するのである。あるいは、環境変数TZに対し、Asia/Tokyoのように指定してもいい。

 実験として、ベース・ディストリビューションで、

$ date

とコマンドを入力してみよう。コンピュータの時計が狂っていなければ、現在の時刻が表示される。では、/etc/localtimeを移動(または削除)して、同じくdateコマンドを実行してみよう。おそらくは9時間前の時刻が表示される。これは、Linux内部には協定世界時(Coordinated Universal Time:UTC)が格納されており、UTCと日本標準時との時差が9時間だからである。

# date
金  4月 11 04:28:58 JST 2003
# rm /etc/localtime
rm: remove `localtime'? y
# date
木  4月 10 19:29:09 UTC 2003 ←/etc/localtimeを削除すると9時間前の時刻になる
# export TZ=Asia/Tokyo
# date
金  4月 11 04:29:22 JST 2003 ←環境変数TZを指定すると日本標準時になる
# unset TZ
# date
木  4月 10 19:29:28 UTC 2003
# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime ←リンクを作成して元に戻す
# date
金  4月 11 04:29:32 JST 2003

 LFSでもこの仕組みは同じだから、指定すべきタイムゾーンがAsia/Tokyoであると分かっていれば、特に調べる必要もなく/etc/localtimeを作成できる。指定すべきタイムゾーンが分からない場合は、tzselectというコマンドを実行してみよう。このコマンドを実行すると、地方と都市の選択肢が表示される。

Please identify a location so that time zone rules can be set
 correctly.
Please select a continent or ocean.
 1) Africa
 2) Americas
 3) Antarctica
 4) Arctic Ocean
 5) Asia
 6) Atlantic Ocean
 7) Australia
 8) Europe
 9) Indian Ocean
10) Pacific Ocean
11) none - I want to specify the time zone using the Posix TZ format.
#? 5
Please select a country.
 1) Afghanistan       18) Israel             35) Palestine
 2) Armenia           19) Japan              36) Philippines
 3) Azerbaijan        20) Jordan             37) Qatar
 4) Bahrain           21) Kazakhstan         38) Russia
 5) Bangladesh        22) Korea (North)      39) Saudi Arabia
 6) Bhutan            23) Korea (South)      40) Singapore
 7) Brunei            24) Kuwait             41) Sri Lanka
 8) Cambodia          25) Kyrgyzstan         42) Syria
 9) China             26) Laos               43) Taiwan
10) Cyprus            27) Lebanon            44) Tajikistan
11) East Timor        28) Macao              45) Thailand
12) Georgia           29) Malaysia           46) Turkmenistan
13) Hong Kong         30) Mongolia           47) United Arab Emirates
14) India             31) Myanmar (Burma)    48) Uzbekistan
15) Indonesia         32) Nepal              49) Vietnam
16) Iran              33) Oman               50) Yemen
17) Iraq              34) Pakistan
#? 19
The following information has been given:
        Japan
Therefore TZ='Asia/Tokyo' will be used.
Local time is now:      Mon Mar 17 00:58:59 JST 2003.
Universal Time is now:  Sun Mar 16 15:58:59 UTC 2003.
Is the above information OK?
1) Yes
2) No
#? 1
You can make this change permanent for yourself by appending the line
        TZ='Asia/Tokyo'; export TZ
to the file '.profile' in your home directory; then log out and
 log in again.
Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in shell scripts:
Asia/Tokyo

 このコマンドでタイムゾーンを設定してくれるわけではないが、指定すべきファイルを見つけることができる。

/etc/ld.so.conf

 ld.so.confは、共有ライブラリが置かれているディレクトリを指定し、ソフトウェアのコンパイル時などにシステムにライブラリを認識させるのに利用する。ベース・ディストリビューションの同じファイルを見ると、もっとたくさんのディレクトリが指定されていると思うが、いまインストールしているLFSでは、まだそういったライブラリが存在しないはずだから、ここで指定している2つのディレクトリで十分だろう。

 この先、ライブラリの置かれているディレクトリを増やす方法などについては、Linux Tips:共有ライブラリをシステムに認識させるにはが参考になる。

/etc/syslog.conf

 syslog.confは、syslogdによって記録されるシステムログ(通常は/var/log)について、そのレベルやファイル名を指定するために用いる。このファイルの設定方法の詳細は、システム管理の基礎 syslogdの設定をマスターしようを一読するのが確実だろう。

/etc/inittab

 inittabは、linuxの起動をつかさどるinitの動作を定義する。LFSも、起動時に/etc/rc.dに格納されたランレベル別のディレクトリ内のスクリプトを実行する。基本的には、ここに挙げた設定で問題ないと思うが、詳しいことはLinux起動の仕組みを理解しよう[init/inittab編]が役に立つだろう。

/usr/share/kbd/keymaps/defkeymap.map.gz

 このファイルでは、キーボードについての設定を行う。ここでは、デフォルトのキーマップファイル(defkeymap.map.gz)に対し、設定したいキーマップファイルをコピーすることで、自分の使っているキーボードに合った設定を行う。こうしておけば、カーネルをコンパイルするときに、自分に合ったキーマップでコンパイルが行われる。

 キーマップファイルがどうなっているかは、

$ gunzip jp106.map.gz

のようにして圧縮ファイルを展開し、作成されたファイル(jp106.map)をcatコマンドなどで見てみるとよいだろう。よくよく見なくても、その中身が何を意味しているのかは理解できるはずだし、それを改造して[Ctrl]キーと[Shift]キーを入れ替えるのも容易だと分かるだろう。

 ファイル名から想像がつくと思うが、ここに紹介した例は106キーの日本語タイプであり、ほかのタイプのキーボードを使っている場合は、それに合ったファイルを使わなければならない。もし、101キーの英語タイプのキーボードであれば、もともとのdefkeymap.map.gzで対応できるので、この作業自体が不要である。

/etc/sysconfig/clock

 このファイルは、ハードウェアの時刻(BIOSやCMOSクロック)が、何に設定されているかを記述する。先ほど、タイムゾーン(/etc/localtime)でも説明した協定世界時になっていれば「UTC=1」となるし、そうでないなら「UTC=0」となる。通常は協定世界時になっているはずだから、「UTC=1」としておくのが正しい。

/etc/sysconfig/network

 このファイルには、ネットワーク構成について記述する。といっても、IPアドレスや参照するDNSについては別のファイルで設定する。このファイルで設定するのは、ホスト名とゲートウェイくらいである。

 ベース・ディストリビューションでインターネットへのアクセスなどがうまくできているなら、こうしたネットワーク系のファイル設定については、それをコピーしてしまう方が確実といえる。

/etc/hosts

 このファイルは比較的なじみ深いと思うから、あえて説明する必要もないだろう。最低限必要なのは、自分自身のホスト名とIPアドレスである。ちなみに、localhost(127.0.0.1)をローカルループバックとして指定しておく方がよい(詳しくはICD:hostsファイル参照)。

/etc/sysconfig/network-devices/ifconfig.eth0

 このファイルには、networkやhostsには含まれないNIC(Network Interface Card)別の情報を記述する。ここでは、NICを1つ装備したマシンを想定しているが、2枚装備しているならifconfig.eth1のように、もう1つファイルを用意する。これについては、ベース・ディストリビューションを参考にするとよいだろう。

 記述する情報は、起動時に有効にするかどうか(ONBOOT)のほかに、そのNICに設定するIPアドレスやサブネットマスク、ブロードキャスト・アドレスである。

/etc/fstab

 fstabは、OS起動時にどのデバイス(ハードディスク上のパーティション)をどのマウントポイント(ディレクトリ)にマウントするかを記述する。LFSを起動する場合も当然デバイスのマウントが必要になるから、ベース・ディストリビューションの同じファイルを参考に、内容を記述しなければならない。

 最低限マウントするべきなのは、ルート(/)とswap領域、それに/procである。ルートは、ベース・ディストリビューション上に作成したLFS用のパーティションを指定する。そのほかの領域は、LFSのために領域を用意していないならば、ベースディストリビューションと共通のパーティションを指定しておく。

 このほかにも、CD-ROMドライブやベース・ディストリビューション上のデータを置いているパーティションをマウントしたいかもしれないが、それはLFSが無事に起動してから、じっくりと行うことをお勧めする。

/varでのファイル作成

 ファイル作成の最後に、/var/runと/var/logに最低限必要なファイルを作成する。これらがそれぞれ何を記録するものかは、各自で実際に記録される内容を確認するなり、調べてみるなりしてほしい。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。