後は、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 >> ファイル名」のように、「>>」と使えばファイルを上書きするのではなく、ファイルの末尾に追加するという意味になる。
.vimrcは、vi(実際はvim)の各種設定を保存する。例えば行番号を表示する/しない(set number)、ファイル保存時にバックアップを自動作成する/しない(set backup)といった具合である。このファイルはユーザーごとに作成されるもので、ここでは/rootに作成していることから分かるとおり、rootユーザーのための設定である。
このファイルは必須というわけでもないし、スクリプト中でサンプルとして示している設定も深い意味はない。不要だと思えば作らなくてもよいし、取りあえずサンプルどおりに作成してもいい。設定方法を調べて、自分の好みに合わせて作成してもよいだろう。
.vimrcに指定できる内容は豊富だし、本稿の本筋からも外れてしまうので、内容の詳細については省略する。
nsswitch.confの「ns」は、「name service」を意味している。このファイルには、各種の名前解決に利用する情報(例えばユーザーやホストなど)の取得先を優先順に記述する。
hosts: files dns
と指定すれば、ホスト名の名前解決時に「ファイル(/etc/hosts)を検索し、一致しない場合はDNSを利用する」という意味になる。この指定についてはあれこれ説明するより、ここに記入しようとしている内容やベース・ディストリビューションの/etc/nsswitch.confを見てみる方が、はるかに話が早いだろう。
このファイルについても、ここでは指定していないような名前解決の設定も可能だし、NISやNIS+を参照先とすることもできるのだが、詳しいことは省略させていただく。
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
このコマンドでタイムゾーンを設定してくれるわけではないが、指定すべきファイルを見つけることができる。
ld.so.confは、共有ライブラリが置かれているディレクトリを指定し、ソフトウェアのコンパイル時などにシステムにライブラリを認識させるのに利用する。ベース・ディストリビューションの同じファイルを見ると、もっとたくさんのディレクトリが指定されていると思うが、いまインストールしているLFSでは、まだそういったライブラリが存在しないはずだから、ここで指定している2つのディレクトリで十分だろう。
この先、ライブラリの置かれているディレクトリを増やす方法などについては、Linux Tips:共有ライブラリをシステムに認識させるにはが参考になる。
syslog.confは、syslogdによって記録されるシステムログ(通常は/var/log)について、そのレベルやファイル名を指定するために用いる。このファイルの設定方法の詳細は、システム管理の基礎 syslogdの設定をマスターしようを一読するのが確実だろう。
inittabは、linuxの起動をつかさどるinitの動作を定義する。LFSも、起動時に/etc/rc.dに格納されたランレベル別のディレクトリ内のスクリプトを実行する。基本的には、ここに挙げた設定で問題ないと思うが、詳しいことはLinux起動の仕組みを理解しよう[init/inittab編]が役に立つだろう。
このファイルでは、キーボードについての設定を行う。ここでは、デフォルトのキーマップファイル(defkeymap.map.gz)に対し、設定したいキーマップファイルをコピーすることで、自分の使っているキーボードに合った設定を行う。こうしておけば、カーネルをコンパイルするときに、自分に合ったキーマップでコンパイルが行われる。
キーマップファイルがどうなっているかは、
$ gunzip jp106.map.gz
のようにして圧縮ファイルを展開し、作成されたファイル(jp106.map)をcatコマンドなどで見てみるとよいだろう。よくよく見なくても、その中身が何を意味しているのかは理解できるはずだし、それを改造して[Ctrl]キーと[Shift]キーを入れ替えるのも容易だと分かるだろう。
ファイル名から想像がつくと思うが、ここに紹介した例は106キーの日本語タイプであり、ほかのタイプのキーボードを使っている場合は、それに合ったファイルを使わなければならない。もし、101キーの英語タイプのキーボードであれば、もともとのdefkeymap.map.gzで対応できるので、この作業自体が不要である。
このファイルは、ハードウェアの時刻(BIOSやCMOSクロック)が、何に設定されているかを記述する。先ほど、タイムゾーン(/etc/localtime)でも説明した協定世界時になっていれば「UTC=1」となるし、そうでないなら「UTC=0」となる。通常は協定世界時になっているはずだから、「UTC=1」としておくのが正しい。
このファイルには、ネットワーク構成について記述する。といっても、IPアドレスや参照するDNSについては別のファイルで設定する。このファイルで設定するのは、ホスト名とゲートウェイくらいである。
ベース・ディストリビューションでインターネットへのアクセスなどがうまくできているなら、こうしたネットワーク系のファイル設定については、それをコピーしてしまう方が確実といえる。
このファイルは比較的なじみ深いと思うから、あえて説明する必要もないだろう。最低限必要なのは、自分自身のホスト名とIPアドレスである。ちなみに、localhost(127.0.0.1)をローカルループバックとして指定しておく方がよい(詳しくはICD:hostsファイル参照)。
このファイルには、networkやhostsには含まれないNIC(Network Interface Card)別の情報を記述する。ここでは、NICを1つ装備したマシンを想定しているが、2枚装備しているならifconfig.eth1のように、もう1つファイルを用意する。これについては、ベース・ディストリビューションを参考にするとよいだろう。
記述する情報は、起動時に有効にするかどうか(ONBOOT)のほかに、そのNICに設定するIPアドレスやサブネットマスク、ブロードキャスト・アドレスである。
fstabは、OS起動時にどのデバイス(ハードディスク上のパーティション)をどのマウントポイント(ディレクトリ)にマウントするかを記述する。LFSを起動する場合も当然デバイスのマウントが必要になるから、ベース・ディストリビューションの同じファイルを参考に、内容を記述しなければならない。
最低限マウントするべきなのは、ルート(/)とswap領域、それに/procである。ルートは、ベース・ディストリビューション上に作成したLFS用のパーティションを指定する。そのほかの領域は、LFSのために領域を用意していないならば、ベースディストリビューションと共通のパーティションを指定しておく。
このほかにも、CD-ROMドライブやベース・ディストリビューション上のデータを置いているパーティションをマウントしたいかもしれないが、それはLFSが無事に起動してから、じっくりと行うことをお勧めする。
ファイル作成の最後に、/var/runと/var/logに最低限必要なファイルを作成する。これらがそれぞれ何を記録するものかは、各自で実際に記録される内容を確認するなり、調べてみるなりしてほしい。
Copyright © ITmedia, Inc. All Rights Reserved.