LFCS認定への道　〜Linux Foundation Certified SysAdmin〜


こんにちわ。
できたときから長いこと取得したいと思っていた、Linux Foundationの認定資格であるLFCS（Linux Foundation Certified SysAdmin) の認定を取得できました。
試験の内容については書けないのですが、マシンを使ったパフォーマンス試験で楽しいものでしたので共有したいと思います。(LinkedInなどで公開可能な以下のデジタルバッジももらえます。)
![](https://training.linuxfoundation.org/wp-content/uploads/2020/11/lfcs_111820-300x300.png)
LFCSの公式サイトは、[こちら(英語）](https://training.linuxfoundation.org/certification/linux-foundation-certified-sysadmin-lfcs/)。日本語は [こちら](https://training.linuxfoundation.org/ja/certification/linux-foundation-certified-system-administrator-lfcs-jp/) 。


# モチベーション
私は、職種的には企画職で技術者ではないのですが、そうはいっても企画やPoCや商材化といった職種、活動でも技術的なスキル（知識ではなく、「手が動く」という意味でのスキルです）はもはや必須となってきています。

さらにいうと、そういう職種でもLinuxを主軸としたOSS周りのスキルってこれからすごく大事です。

- デモシステムとかMVP（Minimum Valuable Product）として、価値仮説を検証できるシステムを作れ＆**でも金銭的コストはかけるな**とか ~~（思いっきり矛盾なことを）~~ いわれると、OSS活用以外の選択肢はほぼない
- そもそもIoTも包含してDX/AIといっている時代に人に近い方のエッジ（「Far Edge」という）のOSは必然的にLinux。しかも**GUIなぞなく**リモートでゴニョゴニョするのが前提。
- 実装でエンジニアにお願いすることにはなるが、そもそもエンジニアと具体的な会話をしたい。そうしないとやりたいことも実現できない　~~（あまりナメられたくもないし）~~
- 同じように大事なのは、人前でOSSについて話すときに（マーケティング的視点というか社会的、経済的動向、企業でのOSS活用といったメタな視点で語られることが多くなりましたね）、そもそも「手が動かない」のはあまりに説得力にかける~~し情けない~~

…とこんなことから一緒に仕事をする人たちといいコラボができるように、という実務面でのモチベーションからLFCSを取りたいな、と思っていました。（趣味的にいろいろ自宅のIT環境で遊べるようにもなるので、若干よこしまな動機があることも否定しませんが＾＾；）


# LFCSとは？

- 証明されるスキル：前述の公式サイトでは以下が書かれています。（後述するように2023年1月下旬に試験内容が更新される予定ですが、この基本的レベルでは大きく変わらないと思います）
> 認定を受けたLinuxシステム管理者は、システムの設計、インストール、構成、および管理に精通しています。ネットワーキング、ストレージ、セキュリティ、メンテナンス、ロギングとモニタリング、アプリケーションのライフサイクル、トラブルシューティング、APIオブジェクトプリミティブ、およびエンドユーザーの基本的なユースケースを確立する機能などの主要な概念を理解します。
- 実機を使ったパフォーマンスベースの試験：PSIのプラットフォームを使いセキュアブラウザからリモートアクセスしてGnomeベースのデスクトップ環境で出題されたタスクをこなし、合格ライン（66）を越えるとパス、つまり認定となります。（以下のような画面で受験します。左ペインにタスクの内容が書かれていて、右ペインで実際にタスクに取り組むことになります。出典は[こちら](https://docs.linuxfoundation.org/tc-docs/certification/lf-handbook2/exam-user-interface/examui-performance-based-exams)）![](https://2145393087-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M5QaeeC1mG9VndIpgJe%2Fuploads%2F13joD9D4ULTjRYNMP1eY%2FLF%20Remote%20Desktop%20070722d.png?alt=media&token=3784c329-768e-475c-b852-88ef98c899ce)
- 受験予約：事前にLF Training/Certification（T&C）のサイト経由で日時指定で行います。
- リモートの監督官（Proctor）によって試験は監督されます。**音声会話をすることはありません**。コミュニケーションもチャット（英語）を通じた、環境チェックなど必要最低限なものです。
- 試験前のチェック：身分証明書(ID)などを試験前に提示したり、受験環境周辺に余計なもの（不正を印象づけるようなもの。腕時計やスマホは手のどかないところに置くことになります）、受験者以外の人がいないかのチェックのために周辺の映像を監督官に見てもらいます。プライバシーを気にする方などは、自宅以外で適切な場所を探したほうが良いと思います。
- その他：試験場所を自宅以外とする場合には余裕をもって現地入りした方が余裕をもって受験できます。あと、受験中に独り言を言うとリモートで注意されるので気をつけましょう（笑）
- 合格通知:受験後24時間以内にメールで通知
- 合格ラインスコア：66
- 問題数（タスク数）：20-25 
- 受験時間：120分
- 1つの受験チケットで、1回分のRetake（再受験）ができます
- 日本語版：あります（試験問題が日本語表記です。ただし監督官とのチャットについては英語で行います）
- 試験で使用するマシン ： Ubuntu20.04LTS/CentOS Stream 8 (私はUbuntu20.04で受験)
- 認定の有効期間：3年間
- 出題傾向：2023年1月時点の情報は公式サイトで確認できます。[英語](https://training.linuxfoundation.org/certification/linux-foundation-certified-sysadmin-lfcs/)はこちら。日本語は [こちら](https://training.linuxfoundation.org/ja/certification/linux-foundation-certified-system-administrator-lfcs-jp/) 。
:::note warn
<font color=red>【注】コンテンツは2023年1月下旬に更新予定です。</font>

前述のLF Trainingの公式[URL（リンクは日本語版）](https://training.linuxfoundation.org/ja/certification/linux-foundation-certified-system-administrator-lfcs-jp/)に以下にあるように出題傾向が変更される旨の記載があります。（私の受験当時と少し変わった程度という感じです）
> ご注意ください： LFCS の今後のプログラム変更は 2023年1月下旬に予定されています。最新情報については、[こちら](https://training.linuxfoundation.org/ja/lfcs2022changes/)でご確認ください。
:::
<details><summary>2023年1月予定の更新予定の出題傾向（引用、クリックして展開）</summary>

```
運用と展開 – 25%
    永続的および非永続的なカーネル パラメーターを構成する
    プロセスとサービスの診断、特定、管理、およびトラブルシューティング
    コマンドを実行するためのジョブの管理またはスケジュール
    ソフトウェア パッケージまたはリポジトリの検索、インストール、検証、および保守
    ハードウェア、オペレーティング システム、またはファイル システムの障害からの回復
    仮想マシンの管理 (libvirt)
    コンテナー エンジンの構成、コンテナーの作成と管理
    SELinux を使用して MAC を作成および適用する
    
基本コマンド – 20%
    Git の基本操作
    サービスの作成、構成、およびトラブルシューティング
    システムのパフォーマンスとサービスの監視とトラブルシューティング
    アプリケーションおよびサービス固有の制約を決定する
    ディスク容量の問題のトラブルシューティング
    SSL 証明書の操作
    
ストレージ – 20% 
    LVM ストレージの構成と管理
    仮想ファイル システムの管理と構成
    ファイルシステムの作成、管理、およびトラブルシューティング
    リモート ファイルシステムとネットワーク ブロック デバイスを使用する
    スワップ スペースを設定および管理する
    ファイルシステムのオートマウンターを構成する
    ストレージのパフォーマンスを監視する

ユーザーとグループ – 10%
    ローカル ユーザーおよびグループ アカウントの作成と管理
    個人およびシステム全体の環境プロファイルを管理する
    ユーザーのリソース制限を設定する
    ACL の構成と管理
    LDAP ユーザーおよびグループ アカウントを使用するようにシステムを構成する

ネットワーキング – 25%
    IPv4 および IPv6 ネットワーキングとホスト名解決の構成
    タイム サーバーを使用してシステム時刻を設定および同期する
    ネットワークの監視とトラブルシューティング
    OpenSSH サーバーとクライアントを構成する
    パケット フィルタリング、ポート リダイレクト、および NAT を構成する
    静的ルーティングを構成する
    ブリッジとボンディング デバイスの構成
    リバース プロキシとロード バランサーを実装する
```
</details>

# 認定取得までの履歴
英語スキルも意識してすべて英語で受験しました。

Result（合格ライン66）

| 1回目 | 2回目 | 3回目|
| :--------: | :--------: | :--------: |
| 41   | 61     | 　　77 　  　 |
| <font color="gray">パスならず</font>    | <font color="gray">パスならず</font>  | <font color="royalblue">**パス** </font>  |

コメント
1回目：**<font color="hotpink">完敗**</font>。全然できなかった＆英語のオーバーヘッドにも苦戦
2回目：**善戦**。対策打ったが、いろいろとトリックがあってことごとくハマってた
3回目：**<font color="royalblue">成就</font>**。受験後認定ゲットを確信。世界が優しく見えた。振り返りはしとこう


# 事前準備など

試験を受けるまでには、いろいろと準備しておくといろいろと良いと思います。

- 受験にあたってのガイダンスなどを確認
- 環境チェック（受験場所やPC環境）
- オンライン トレーニング
- セルフトレーニング

## 受験にあたってのガイダンスなどを確認
基本的に前述した公式ページの下部のリンクから情報を得ることができます。
[英語](https://training.linuxfoundation.org/certification/linux-foundation-certified-sysadmin-lfcs/)はこちら。日本語は [こちら](https://training.linuxfoundation.org/ja/certification/linux-foundation-certified-system-administrator-lfcs-jp/) 。

以降は比較的更新頻度が高いことから英語でのコンテンツとなります。

### 認定試験全般
まず、LFCSを含めてのCertification全般的な理解をしておくとよいでしょう。受験申込みや、受験者環境要件など、その他認定や資格（SkillCredなど）でも共通した情報を得ることができます。
https://docs.linuxfoundation.org/tc-docs/certification/lf-cert-agreement


### 認定試験全般で使われるLinux環境の一覧
LFのパフォーマンスベースのCertificationで使われるマシンOSの一覧が以下にあります。LFCSは執筆時点でUbuntu20.04/CentOS Stream 8となります。
https://docs.linuxfoundation.org/tc-docs/certification/lf-handbook2/exam-preparation-checklist

### LFCSに特化した情報
LFCSに特化した以下なども確実に目を通して置いたほうがよいでしょう。なにげに<font color=hotpink>試験本番での調べごとはインターネット経由でできない</font>といった大事な情報が書いてあります。（ドキュメント類は```man```やパッケージ付随のものしか使えません。なので```man```の活用の仕方も学べるわけです）
https://docs.linuxfoundation.org/tc-docs/certification/instructions-lfcs-and-lfce

### FAQなど
FAQなどもチェックしておきましょう。
https://training.linuxfoundation.org/about/faqs/certification-faq/


### 自習ネタ
自習作戦を立てるにあたってはに以下で実際の問題の出方のヒントとして以下なども読んでおくと良さそうです。
https://training.linuxfoundation.org/wp-content/uploads/2019/10/LFCS-Practice-Questions-v1.1.pdf


## 環境チェック（受験場所やPC環境）
受験前にPC環境、できれば受験場所の環境もチェックしておきましょう。

自分のPC環境が受験に耐えうるか、はPSIのサイトでチェックできます。
https://syscheck.bridge.psiexams.com/
LinuxOSは、WindowsやMacOSと比べるとデスクトップとしてはマイナーな環境ですので、しっかりと確認しておきましょう（私はUbuntu 20.04LTSのThinkpadで受験しました）。

受験場所として慣れていない場所（個室型のワークスペースサービスなど）を選ぶ場合には、電源、ネットワーク、騒音など事前にチェックしておくと受験当日に慌てることなく試験のタスクに集中、専念できると思います。

## オンライントレーニング
事前準備という意味だけでなく、LinuxやOSSの理解を深めるという意味でもこの機会にオンラインコンテンツで学んでおくというのもよいでしょう。私は以下の２つを修了した上で受験に臨みました。

- Introduction to Linux (LFS101x)　英語のみ（無料）
https://training.linuxfoundation.org/ja/training/introduction-to-linux/
- Essentials of Linux System Administration (LFS201) 英語と日本語あり
https://training.linuxfoundation.org/ja/training/essentials-of-linux-system-administration-lfs201-jp/


## セルフトレーニング（出題範囲以外の周辺スキル）

以下は私がやっていたセルフトレーニングの一部です。
当然出題範囲についてはしっかり自習するのですが、シェルやエディタなど周辺部分でもしっかりと準備しておきたいと思い意識しました。

もちろん試験で有効だったのは部分的でしたが、業務などで幅が広がったり作業が早くなったりしたことを考えると、やっておいて良かったなと思います。なお、試験本番では```bash```や```vim```の設定ファイルを作っておく余裕は全く無いので、デフォルト設定でどこまでやれるか、の腕試しにもなります。

### タッチタイピング
タイピングのスピードと正確さはパフォーマンスに影響します。タイピングアプリ、ゲームなどで高速・高精度のタッチタイピングスキルの獲得に努めました。

### bashのショートカットキー、シェルスクリプト
試験はすべてコマンドラインですので、シェルに慣れておくことは結果に直結しかねません。いわゆる「シェル芸」とまでは言いませんが、簡単なスクリプト（ワンライナー程度の）やショートカットでそこそこ流暢になっておきたいところです（Ctl+K、Ctl+U、Alt+Dや、Alt+Bなどは新たな発見でした）


### Vim
Vimはとっつきづらいエディタ、というのはそうでしょう。しかし慣れてしまえばパワフルなツールとも言え、いろいろなシーンで助けてくれそうです。

書籍「[実践VIM](https://www.amazon.co.jp/dp/B00HWLJI3U)」をタップり読み込み&練習しました（今でもトイレの愛読書です）。
<img width="250" src="https://m.media-amazon.com/images/I/51c5qMHV5VL.jpg">



余談：最近LFのCertification周りで「[SkillCred](https://training.linuxfoundation.org/ja/skillcred/)」という資格証明のジャンルが出てきました。この中に「Vim」や「Git」などがあり、受験チケットをCyber Mondayで割安購入しました。Gitも技術職以外の職種で必要な技術だと思ってます。


### 正規表現
正規表現は、システム管理の試験対策というよりは、基本的なITスキルの一つとして```vim```などと合わせてしっかり身につけておきたいぞ、と思います。WindowsベースのOSだとこの辺って意外と駆使してない（せいぜいExact Matchぐらいな）感じがするのは、私だけなのかもしれませんが、結局ファイルやファイル内テキストなどから一定パターンを見出すタスクってとても大事だし、人生でついて回るもののような気もして、意識して知識を広げました。

### sed, awk
```sed```を使って文字列加工するのは意外と多く（翻訳などでもよく使います）、IoTのような文脈だと、取得したセンサーデータの相関を見るためにデータ加工していくようなときに```awk```はとても便利ですよね。
そういった意味で、こちらもオプション含めてしっかり学びました。

ちなみに発見だったのは重複排除って```uniq```コマンドが頭に浮かびますが、実は```uniq```の前に```sort```を介さないといけない（例：```$cat aaa.txt | sort |uniq```) というトラップがあるのです。またこのやり方だと```sort```された順番での出力結果になってしまいます。こういったときに```awk```でやる重複排除のやり方があって、出現順に重複排除してくれます。本来の期待値は結構こちらだったりするので知っておいて良かったなと思っています。


### xargs
処理をパイプして次のコマンドに渡す```xargs```も最初はとっつきづらいですが、仕組みを理解すれば強い味方です。[この方の記事](https://techblog.kyamanak.com/entry/2018/02/12/202256)にある以下の図などはやりたいことの幅を広げてくれるヒントになりました。

<img width="450" src="https://cdn-ak.f.st-hatena.com/images/fotolife/k/kyamanak83/20180129/20180129224458.png">

この図だと、次のコマンドの最後の引数に渡すので分かりづらいですが、```xargs```を使うと、渡せる引数の場所をいろいろ変えることができるので幅が広がる、ということです。


### Tmux 
Tmuxのスキルは、試験ではあまり意味がないかもしれませんがTerminalを柔軟に使いこなす上で仕事的に良さげな気がします。デフォルトのままでは使いづらいですがカスタマイズすることでマルチウィンドウな作業ができるようになりますし、ネット越しでのターミナル共有（ペア・プログラミング的な作業をイメージ）などもケースによっては助けになってくれそうです。

### 標準出力、標準エラー出力、リダイレクト
標準出力、標準エラー出力、リダイレクトについての根本的理解は、地味に大事だなーと感じます。

特に、「2&>1」 の意味とかちゃんと理解してなかったのはなんとも恥ずかしい感じでした。

こちらのサイトがとても秀逸で、根本理解に導いていだきました。

「bash: 標準出力、標準エラー出力をファイル、画面それぞれに出力する方法」
https://qiita.com/laikuaut/items/e1cc312ffc7ec2c872fc


実はココだけの話、試験本番で「>>」のところを「>」としてしまったことに気づいたタスクがあり、上書きしたデータを元に戻せないことの悲しみを知った次第です（以前```rm -rf ./*``` の代わりに```rm -rf /*``` をやってしまった苦い経験があり、それと近い虚無感を感じた次第です...）

### Gitやコンテナ
Gitやコンテナ周りについては、LFCSの試験が占める割合は高くなかったのですが、とはいえとても大事なスキルセットになってくることは間違いありません。基本的な管理周り、トラブルシュートなどについては身につけておいた方がよいと思います。LF Trainingでもオンライコースがあるようです。（例えば、「[LFD201: Introduction to Open Source Development, GIT, and Linux](https://training.linuxfoundation.org/training/introduction-to-open-source-development-git-and-linux/)」や「[LFS253: Containers Fundamentals](https://training.linuxfoundation.org/ja/training/containers-fundamentals/)」など）


### その他偶発的な学び
セルフトレーニングをやっていくと、付随的といか偶発的な発見がたくさんあります。たとえば設定ファイルの書き方（```crontab```とか```visudo```）や反映の仕方などにクセがあったりします。こんな出会いのように新たなことを学べるのもこの試験の醍醐味みたいなところかもしれませんね。


### ラズパイをフルに活用

使えるラズパイが手元にあると、試験対策用にフル活用できます。そのまま宅内サーバーとして導入することもできます。


<img width="450" src="https://i.imgur.com/jTCgO4x.png">


私の場合は、ラズパイ4のB（4GBメモリ）にUbuntu20.04LTSをインストール、さらにWiFiドングル1本を子機にして、USBメモリ2本を外部ストレージとしてリモートアクセスしながらセルフトレーニング用にしてました（写真）。

外部ストレージが２本あれば、```fdisk```でのパーティション管理、LVMやミラーリング、暗号化パーティション作成といったディスク周りの練習が一通りできます。


KVM+libvirt周りの仮想化は流石にできませんでしたがそれ以外のことはすべてできたとおもいます。起動がSDカードからなので、（手間なnetplan周りのネットワーク設定などが終わった）初期状態のイメージを作っておくことで何度でも練習をゼロスタートでき、とっても便利です。


# 感想とか
## 自分で工夫しながら学ぶことの大切さ、楽しさ
LFCS、実際にマシンを使い自分で工夫して学びながら結果がでる感じがいいと感じます。

また自学だけでなく試験でも学びながら、という心持ちでもよいかもしれません。
言ってしまうと1回目の受験は「学ぶため」の受験にしちゃって（よい意味で）捨ててしまてってよいとすら思います。次の受験に向けた作戦のために、出題傾向や時間配分のための情報収集をする、という点でもそうですし、もっと本質的なところ、たとえば「どういうシチュエーションでどういう対応がシステム管理者として期待されるのか」みたいなところで、出題者の意図を推し量る、といった点でも実践的学びの場にもなります。

準備として学んだことが出題されないことも多いですが（そもそも試験ではいらぬ学習だった、というのもあります）、それが無駄だったというわけでは無く、どこかできっと自分や誰かを助ける糧になっていることでしょう。もっと言えば、今のVUCAな時代の課題解決は得てしてこういうもので、教科書通りに学習する前提ではなく、教科書すらない中で手探りをしながら仮説立てし**Trial and Error**を繰り返して結果に到達する、というアプローチなので、同じようなやり方で進めていくことは、その人の仕事の質を高める経験にもなると思います。

そしてなによりもOSS。「楽しむ(<font color=royalblue>Just for Fun!</font>) 」という心持ちも大事ですよね。

## 一考：OSS Wayな学び方、みたいなこと

OSSの価値には金銭的価値だけでないところにもあるわけですが、世界中で使われているOSSプロジェクトなのに、経済的苦境に苦しむ開発者やコミュニティの悲劇的なエピソードを時として耳にします。世界を支えるインターネットの時計とも言える[NTPが、たった一人の開発者にメンテされて](https://www.informationweek.com/it-life/ntp-s-fate-hinges-on-father-time-)おり、その開発者が経済的に潤沢な環境にいないという話は衝撃を受けました。少し前にOSSの[「colors.js」と「faker.js」の開発者が悪意のあるコード改変をしたという話があり、その背景としてあった、開発者（メンテナ）の自宅が火事で消失した](https://note.com/takahiroyte/n/nd6cceae3af04)（そして経済的に立ち行かなくなり自暴自棄になった）というエピソードにはとても心が痛みました。

LinuxはOSSの代表ということもあり、こういう知識を学び、資格を取得する過程でもっとOSSらしいやり方はできないものかと考えます。OSS Wayというのは要するにコラボレーション、つまり自分に向かう一方向でなく、自分からコミュニティに向かうような方向性（コントリビューション、エンゲージメント）をもたせられば素晴らしいかもしれません。

思ったのは、ベーシックな部分のLFCS学習用書籍（紙面であれ、電子であれ）を販売し、その収益の一部を金銭的にコミュニティに還元するような仕組みがあったらいいな、ということです（例えば下図イメージのような）。日本は特に寄付文化というのがそれほど根付いていないところがあり、そういうカルチャーの種のような仕組みが作れないかなと思います。そんな社会になるとよいのかもしれませんね。


<img width="650" src="https://i.imgur.com/ds7TniN.png">


以上、ありがとうございました。