LPIC-2(201)試験受験

2/13にLPIC-2(202)試験を受験してから受験する時間を取れず、ずいぶん時間が経ってしまった。今回は勉強を十分にしないまま、先に試験日程を決めたばっかりに、当日ひたすら暗記を繰り返す羽目になりました。
教科書や問題集に出ていた類似問題が半分くらいと、全く見たことのないような問題が半分くらいあって、正直落ちたと思いました。
受験結果は、550点でなんとか合格。
Linux Kernel・・・・・・・・・・・・・・・・50%
System Startup・・・・・・・・・・・・・・50%
Filesystem and Devices・・・・・・60%
Advanced Storage Device Administration・・83%
Networking Configuration・・・・53%
System Maintenance・・・・・・・・・・85%
Domain Name Server・・・・・・・・・・83%
恥ずかしながら、wallコマンドなんて初めて知りました。
また、e2labelコマンドについても問われていました。
どの試験もすれすればかりでしたが、これでなんとかLPIC-2認定となりました。

kernelを再構築する

linux kernelの最新版は2.6.33である。
ReadHatやCentOS、Fedoraなどのディストリビューションにおいてカーネルをバージョンアップするなら間違いなく yum update kernelをするだろう。今までもそうしてきて困ったことはない。
しかしながら、LPIC試験対策ということもあり、CentOS(kernel 2.6.9)においてバニラカーネルを使って再構築をした奮闘記について記録しておきたい。今後も再構築するなんてことはほとんどないと思われるが。。。(笑
まずは、最新バージョン(2.6.33)を使っていきなり再構築してみた。
make oldconfigコマンドを実行すると新機能が多すぎるのか、やたら質問攻めにされ、すべてEnterキーで回避した。ところが、makeコマンドの結果次のようになってエラーになってしまった。

CC [M] drivers/message/fusion/mptsas.o
drivers/message/fusion/mptsas.c: In function `mptsas_port_delete’:
drivers/message/fusion/mptsas.c:106: sorry, unimplemented: inlining failed in call to ‘mptsas_set_rphy’: function body not available
drivers/message/fusion/mptsas.c:462: sorry, unimplemented: called from here
make[3]: *** [drivers/message/fusion/mptsas.o] Error 1
make[2]: *** [drivers/message/fusion] Error 2
make[1]: *** [drivers/message] Error 2
make: *** [drivers] Error 2

http://mekaananth.blogspot.com/2009/09/how-to-compile-linux-kernel-2631.htmlにあるようにどうやらmptsas.cがバグっているらしい。mptsas_set_rphy関数の実態の場所を変えて再度makeしてみたが、

LD .tmp_vmlinux1
drivers/built-in.o(.init.text+0x3bce): In function `con_init’:
include/trace/events/kmem.h:81: undefined reference to `.L1496′
make: *** [.tmp_vmlinux1] Error 1

コードを変更してもうまくいかなかったので、あきらめた。
次に2.6.30.10のソースを入手して同様にmakeしてみたが、これもうまくいかなかった。

ERROR: “.L193” [drivers/usb/serial/kl5kusb105.ko] undefined!
make[1]: *** [__modpost] Error 1
make: *** [modules] Error 2

だめもとで、2.6.10を入手して同様にやってみたところ、問題なくコンパイルできた。
make oldconfig時に聞いてくる項目がなかった。
次に2.6.20を入手して同様にやってみたところ、問題なくコンパイルでき、2.6.10と同様にmake oldconfig時に聞いてくる項目がなかった。
ただ、問題なくコンパイルできたはずだったのだが、再起動したらなぜか2.6.10が起動してしまう。調べてみたら、/etc/grub.confには設定がされていたもののdefaultが0から1に変更されており2.6.10が起動してしまうことが分かった。
default設定を変更して、2.6.20を起動させたが、pcnet32がないので、eth0の起動に失敗していた。
lsmodをしても一切モジュールがロードされておらず、
/lib/modules/2.6.20/kernel/
の中身は空っぽだった。
どうやら make oldconfigをすると
.configファイルが
CONFIG_PCNET32=m
から
CONFIG_PCNET32 is not set
に変更されてしまうなどモジュール設定が正しく引き継がれない(理由はよくわからないが)ようだったので、2.6.10の.configファイルをコピーしてきて、make menuconfigからGUI画面を呼び出したうえで、.configファイルを読み込ませてそのまま保存した。
その上で、
make
make modules_install
として /lib/modules/2.6.20/kernel/ をみると
正しくモジュールが入っているようだったので、
make install
を実行して、再起動して、2.6.20まで構築することができた。
カーネルをコンパイルするのに仮想環境ということもあり1時間程度かかってしまう。次の機会に 2.6.20 から 2.6.33 まであげてみたいと思う。

LPI問題集

LPIC Level2が2009年4月より改訂されてRelease2となったものに対応した問題集
電車で持ち運べる薄さなので、まとまった試験勉強の時間が取れない場合でも利用できる本。
また、問題のページと答えのページがまとまって別々の場所にあるので、答えを隠さないでもよい点が工夫されていると思う。

sysctlコマンド

/proc/sys/ 配下のパラメータを表示したり、変更したりすることができるコマンド
sysctl -w net.ipv4.ip_forward = 1
→ echo 1 > /proc/sys/net/ipv4/ip_forward と同じ
IPパケット転送を有効にする
sysctl -w net.ipv4.icmp_echo_ignore_all = 1
→echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all と同じ
ICMP Echo Replyを応答しない
sysctl -w net.ipv4.icmp_echo_ignore_broadcasts = 1
ブロードキャスト宛ICMP Echo Requestに応答しない(Smurf攻撃を回避)
sysctl -w net.ipv4.tcp_syncookies = 1
SYN flood攻撃を回避
いずれも再起動すると無効となるため、継続的に利用する場合には、 /etc/sysctl.conf に記述が必要。

logrotate

ログを出力するプログラムはたくさんあるが、1ファイルに書き出し続けると不要な過去のログを保持し続けて容量不足になってしまったりすることがある。
logrotateを使えば、出力側のプログラムを変更することなく、きめられたタイミングで現在のファイルをリネームしたうえで、新しいログファイルを作成してくれる。
Fedora Coreであれば、
/etc/logrotate.d/ の下にファイルを作成して、
/var/www/XXX/logs/*log {
daily
missingok
}
とすれば、cakePHPで出力されるdebug_logとerror_logを1日単位でローテートしてくれる。
create (パーミッション) (ユーザー名) (グループ名)のオプションを付ければ、空のファイルを作成してくれるし、apacheプロセスのようにログ出力プログラムがログファイルが無くなってしまうとそれ以降ログを書き出さないような仕組みなのであれば、postrotateオプションをつかってプロセスを再起動させることもできる。
詳しいオプションは@ITが参考になる。

ゾーン転送のチェック

@ITに記載があるが、Windowsのクライアント端末からもゾーン情報の内容をチェックしたり、転送が正しく行えるかをチェックすることが出来る。
nslookupコマンドでインタラクティブモードに入った後
server (プライマリDNS)
ls -d (ゾーン情報を転送したいドメイン)
で調べることが出来る。
なお、Linuxの場合には、
dig @(ネームサーバー) (ゾーン情報を転送したいドメイン) axfr