LFSをやってみたので振り返る
長期休暇を利用してLFSをやってみたので振り返ってみたいと思います。
きっかけ
日頃から業務でLinuxを使ってサービスを運用していますが、最近はクラウドやコンテナなどを使うことがほとんどでLinuxのほんの一部だけを知っていれば運用できています。
しかし、何らかの障害が発生したときの調査は平常時に使う一部の知識だけでは難しいことが多いです。
そんな状態から脱出すべく、以下の書籍を読みました。
これらを読んでいるとLinuxの仕組みがわかってきますが、ただテキストを読んでいるだけだとどうしても印象が薄くなってしまい忘れてしまうことが目立ってきました。
そこで何か手を動かしてできることがないか調べてみるとLFS(Linux From Scratch)を見つけたので、やってみることにしました。
期待したこと
LFSをやることで以下の内容を取得できることを期待して手を動かしてみました。
- Linuxの基盤となる部分を知る
- サービスを運用するときの障害対応力を上げる
構築中に感じたこと
Linuxで使われるファイルやディレクトリを手作業で作成する
LinuxをインストールするとFHSに即したディレクトリが構築され、/etc/passwd
や/etc/group
には初期のユーザー情報が記述されています。
LFSで1から構築する場合はこれらのファイルやディレクトリも自分で作成することになります。
当たり前だと言えばそうかもしれませんが、なかなか新鮮な感覚でした。
ソフトウェアのバージョンを合わせることの重要性
LFSは構築に使うパッケージを全て自前でビルドします。
その関係上、まずはホストシステムでLFSの構築に使う環境の構築を行います。この環境の構築はホストにインストールされているソフトウェアを使うため、このバージョンが異なっていると予期せぬエラーに遭遇することもあります。
Linux KernelやGlibcなど、変更するのが大変なものもありますが、ホストのOSを変えるなどして、できる限り合わせる必要があります。
最低でもマイナーバージョンまでは揃えるべきです。
ホスト環境をチェックするスクリプトが載っているので、よくチェックすることをオススメします。
クラウドでは使用頻度が少ないコマンドを実行する
LFSを始めると最初に専用のパーティションを作成することになります。
パーティションを作成するためにfdisk
コマンドを実行したり、それをマウントするためのmount
コマンド、/ets/fstab
への記述、そして構築が進んでいくと作り途中のLFS環境に入るためのchroot
コマンド、デバイスノードを作成するmknod
コマンドなど、クラウドでサービスを運用しているとあまり使わないコマンドを実行します。
クラウド以外で運用する場合やLinuxに関連する開発を行う場合、これらのコマンドは定期的に使うことになるので久しぶりに実行して思い出すことができたのは良い機会だったと思います。
知らないこと、忘れていることはその場で調べる
これが今回の構築で一番良かったところです。
LFSのドキュメントはとてもよくできており、ほぼ全ての作業をコピペするだけで構築できます。
そのコピペするコマンドの中には上記の本で触れられているがあまり使わないコマンドや、そのそも出てこないものなどもあります。
それらのコマンドを知らないままでもコピペで実行すれば構築できてしまいますが、コマンドのオプションも含め、知らないものは全て調べます。
時間はかかりますが勉強になります。
また、LFSでは全てのパッケージをビルドするため、インストールする全てのライブラリに触れます。
その中には知らないパッケージや生成されるコマンドがあると思います。
LFSのドキュメントに簡単には説明が書いてありますが、これも調べるととても勉強になります。
期待したものは得られたか
構築が完了した時点で期待した成果が得られたのか振り返ります。
Linuxの基盤となる部分を知る
これに関しては十分に達成できたと思います。
ただ、ライブラリやコマンドはビルドしただけなので、ふつうのLinuxプログラミングで書かれている内容をもう一度やってみるとさらなる理解が得られそうな気がしています。
サービスを運用するときの障害対応力を上げる
障害対応力は構築が完了した段階だとまだ上がった実感はありません。
少なからず関連はしていると思うので、実際に対応を行ってみて変化を感じるかどうか様子を見てみたいと思います。
今後にむけて
サービスをLinuxの上で運用していくことはまだしばらく続くと思うので、さらなる理解と障害対応力を磨いて行きたいと思います。
そのために次はこれらの書籍をよんでみようかと思っています。