達人が語る,インフラエンジニアの心得

第5回 エンジニアとしてやっていくための勉強法

この記事を読むのに必要な時間:およそ 3 分

これまでは,もうエンジニアになっているケースでの心得について書いてきましたが,前回の「エンジニア不足を解消しよう」からの流れとして,インフラエンジニアになるにはなにを学べばいいのか,という点に焦点を当ててみたいと思います。

もちろん以前に書いたように,トラブルが一番成長の糧になるのは間違いないのですが,ただ必要最低限のスキルというか体力が必要なのもまた事実です。まったく何もカケラも知らない状態では,トラブルに遭遇しても成長も何もなく,もしかしたらトラウマだけが残るかもしれません。

ステップ1:OSインストール

筆者が,まず最初にやると良いと思うのは(おもにUNIX系の)OSインストールです。

はあ?と思うかもしれませんが,OSインストールにはシステム管理のツボとも言うべきものが多く含まれています。そのためには,OSを入れて「できた」と思うのではなく,何度もいろいろなパターンでOSインストールしてみることが大事です。

最初はあまり何もわからないので,推奨設定のまま進んで,とりあえずOSが起動するだけでも十分だと思います。そのときは,IPもDHCPからもらっていて,各種ソフトウェアも標準で推奨されるものがインストール,起動設定され,HDDのパーティションも典型的なものになっていることでしょう。

そしてうまく起動までこぎつけたら,それで満足せず,いろいろなことを試してみてください。いろいろいじってうまくいかなくても誰も困らない,というかそもそもそれが勉強なので,臆せずチャレンジしてみてほしいと思います。

繰り返しになりますが,OSインストールには実にいろいろな要素が入っています。staticにIPを振るのであれば,IPアドレスの体系やnetmask,broadcast,network adressやdefault routeなどの知識が必要です。それに各種ソフトウェアについても,各カテゴリを全部,端から端まで見てみると,それだけで数百(数千?)のソフトウェアの存在を知ることができます。

これを何度も繰り返していると,それまでは特に気にとめていなかった設定項目についても「そういえば何故これはこうなんだ?」といった疑問を持つようになると思います。筆者がnewbie(初心者)のころは,Linuxはあまり普及していなかった,というか業務で使われることはなかったので,SunOSやSolarisのインストールばかりしていましたが,そこからもいろいろなことを学びました。

少なくとも10回くらいは(できればもっと)OSインストールはしてみるといいと思います。また,いまはほとんどLinux(クライアントだとUbuntuでしょうが,サーバだとだいたいCentOS)だと思いますが,せっかくなのでFreeBSDやOpenSolarisなども試してみると良いかもしれません。複数のOSを知り,比較することでわかることもあるものです。

ステップ2:ネットワークの基礎

次にチャレンジして欲しいのは,ネットワークの基礎知識です。インフラというかサーバ管理者の勉強というのは,基本実践が一番だと思いますが,ネットワークだけは必要最低限,理屈を知っていたほうが良いです。とはいっても,Etherパケットを読めるようになれ,とかそこまではいらないので,いわゆるOSI 7層で言うところの2,3,4層あたりについて,一通りの概要がわかるくらいで良いと思います。IPアドレスとはなにか,Macアドレスとはなにか,なんでわかれているのか,ルーティングとは,サブネットとブロードキャストドメインとは,TCPとUDPとは,ICMPとは,MTUとは,あとそもそもレイヤーという考え方とは,くらいで十分でしょう(いま思いついていないだけで,もっとあるかもしれませんが)。

正直,ダイナミックルーティングはこの時点ではあまりいらないでしょう。ネットワークの勉強を実践で試すには,マシンが複数あると良いですが,そうもいかないケースも多いので,まあそれは可能な範囲でという感じです。

ステップ3:OSSのインストール/セットアップ

次はやはり各種ソフトウェアです。それも,オープンソースのものですね。OSインストールを何回もやるのは基礎体力をつけるようなものですが,OSSをいろいろ試すのは応用体力を付けるようなものです。

そしてそのときは,かならずソースからmakeするようにしましょう。こういうことを書くと「MySQLはバイナリのほうがパフォーマンスが出る」とか「FreeBSDのportsはすばらしい文化だ」とか「yumはシステム管理のひとつだ」とか言われる気がしますが,いま話しているのはどう各種アプリケーションを管理するかの方針について議論したいのではなくて,「サーバエンジニアとして基礎的なものを学ぶには何をするのがいいか」です。

それには,configureしてmakeしたりxmkmfしたりとか(これはあまりしないか…),Makefileを手直ししたり,ヘッダファイルを直したりとか,ldconfigを使えるようになったり,.aと.soってなによ,っていう疑問を持ったりとか,そういう試行錯誤が重要で,それらの過程で体力が付いていくものだと思います。

まあ筆者くらい年寄りになると「昔はconfigureなんてなかったんだ。そもそもMakefileは」とか言う人もいるかと思いますが,configureくらいは別にいいじゃん,と思います。ただ,configureのオプションは必ず全部見るようにしましょう。オプションなしでだいたいOKなものも結構ありますが,ApacheやMySQLなどのサーバ系ソフトはconfigureのオプションを使いこなせることが必須です。学習過程では使いこなせる必要はないですが,「なんでこういうオプションがあるんだろう」と思うことが重要です。

また,メンテナがたくさんいるメジャーなソフトはだいたい一発でうまくいきますが,マイナーなものやメンテされてないものはconfigure && makeではうまくいかないケースもままあります。よくあるところでは,djb系だとerror.hを修正しないとmakeできなかったりします(そもそもconfigureがないですが)。

そういう問題に遭遇して解決していくうちに,応用的な体力が付いていきます。今はどの関数がどのライブラリに入ってるか知らないと困るケースなどはほとんどないので,nmといったコマンドを使うケースはないと思いますが,lddはいまでもかなりの頻度で使うと思うので,ライブラリ関連の知識は多いに越したことはありません。

著者プロフィール

山崎徳之(やまざきのりゆき)

青山学院大学卒業後,アスキー,So-netなどでネットワーク,サーバエンジニアを経験。オン・ザ・エッヂ(現ライブドア)のデータセンターである「データホテル」を構築,運営。2003年にベイエリアにおいてVoIPベンチャーであるRedSIP Inc.を創業。2006年6月に株式会社ゼロスタートコミュニケーションズ(現 株式会社ゼロスタート)を設立,代表取締役就任(現任)。ECソリューションの「ZERO-ZONE」シリーズとして検索エンジンやレコメンドエンジンを開発,販売している。

blog:http://blog.zaki.jp/
Twitter:http://twitter.com/zaki/

コメント

コメントの記入