こんにちは。2024年になりました。
今年の干支は辰ですね。辰年は変化と成長を象徴する年とされているようです。自分も何か新しいことにチャレンジして変化と成長を感じられるように頑張ってみたいなと思います。そんな辰年の1月ですがみなさんいかがお過ごしでしょうか。
今回は最近読んだ本についての読書レポートをまとめようと思います。文字多めですがお付き合い頂けると有り難いです。

書籍

今回ご紹介するのはこちらの本です。
systemdの思想と機能 Linuxを支えるシステム管理のためのソフトウェアスイート

著者:森若和雄
出版社:技術評論社
発売日:2023/12/21
ISBN-13:978-4297138936

著者はレッドハットにお勤めの森若和雄さん。Software Designでの連載もされていたようです。2020年に森若さんがまとめられた systemdエッセンシャル はこちらで公開されています。
systemd エッセンシャル

なぜこの本を読もうと思ったのか

  1. systemdについてなんとなく使って入るが勉強する機会(意志)がなかった
  2. 多くのディストリビューションで採用されるようになりサービスの起動、停止など最低限のコマンドを知っているだけでは厳しいなと感じていた
  3. そんな中、X(旧Twitter)のタイムラインでこちらの書籍が発売されることを知って冬休みに読むにはちょうどいいかなと思った

今まで仕事をする中で、FreeBSDを始めRed HatやCentOS、Amazon LinuxなどのOSを搭載したシステム構築したり運用する機会はそこそこありました。もちろんsystemdを使用したシステムも多いのでサービスの起動や停止などよく使うコマンドはmanやドキュメントなどを見ながら対応していました。ただsystemd自体についてしっかりと調べたり勉強するという機会を作ってきませんでした。そこそこ前からですがsystemdが主流になりそろそろちゃんと勉強しないといけないなと思っていた所に本書が発売される事を知り読んでみようと思ったのがきっかけです。

最初は冬休みにさらっと読もうかなってくらいの軽いノリだったんですが読み始めたら知らないことも多く、あと読んでいて面白かったのでブログの記事としてまとめてみようと思いました。

このブログで書く事

この書籍を読んで自分が感じたことや知らなかったことなどを書いていきます。あくまで自分が感じたことを書いていくので人によって感じ方は違うかもしれないです。またこの本を読んで新たに知ったことなどもメモとして書いていきます。

このブログで書かないこと

systemdの具体的な使い方や設定方法などについては基本的に記載しません。これらはぜひ書籍をご購入頂いて参照してもらうのがいいと思います。非常にわかりやすくまとまっているので。

このブログを書いている人はどんな人?

自分は40代中盤のインフラエンジニアです。
主な職歴としてはフルマネージドサービスを提供するデータセンター、Q&AやFAQを提供する事業会社などを経て現在iretでAWSシステムの設計や構築、運用に携わる仕事をしています。業務の中ではLinuxのシステムを触る機会は多いのですがsystemdの経験はまだ浅い方です。
仕事をし始めた当初はSystem Vのinitを覚えたり、xinetdの設定をしたり、daemontoolsなどを使ってメーサーバやDNSサーバなどを動かしていました。そういったシステムを長く触っていたのでsystemdが出てきたときはなんだコレ?という感じでちょっとした苦手意識のようなものがありました。
今回改めてsystemdの本を読んでみてこの仕事を続けていく上では技術やトレンドのキャッチアップは必須だなと痛感しています。

ざっくりと書籍の紹介

こちらの書籍は第1章から第16章まであり、systemdに関する思想や仕組み、利用できる機能などが紹介されています。全体的には以下のような特徴がある本だなと感じました。

  • systemdの機能や使い方だけで無く、どういう考え方でソフトウェアが開発されているのかといった内面的な部分も説明して頂いている。
  • manや参考ドキュメントなどの関連する情報が細かく記載されている。
  • 実行するコマンド、出力結果、確認方法が丁寧に記載されている。

第1章~第4章はsystemdの全体像や特徴などについて説明されています。

第1章 systemdとは
第2章 unitとunit file
第3章 unitの状態、unit間の依存関係、target unit
第4章 プロセス実行環境の用意

systemdの中心的なコンセプトであるunitやunit fileの紹介、依存関係やドロップインの解説、またsystemdがどのようにプロセス実行環境を用意するのか、などです。この章を読むとsystemdの特性や動き方のイメージがつきやすくなると思います。

第5章〜第9章まではsystemdが扱う11種類のunitをそれぞれ説明されています。

第5章 service unit
第6章 timer/path/socket unit
第7章 generator と mount/automount/swap unit
第8章 control group、sliece unit、scope unit
第9章 udev、device unit

サービス(service)やディバイス(device)、マウント系(mount、automount、swap)、ファイル監視(path)、待ち受け処理(socket)、タイマー(timer)、cgroupの管理(scope、slice)、あと依存関係で使用されるターゲット(target)などです。これら各unitそれぞれについて設定方法や動かし方はもちろん、systemdのプロセスがどのように処理していうのか、また度のタイミングで何が行われるのかなど踏み込んだ所まで解説していただいています。このあたりをしっかりと理解できると細かい設計や何か問題が発生したときのトラブルシューティングなどにも役立つなと思いました。

第10章以降はsystemdが提供するいくつかの機能についての紹介です。D-BusやPolkit自体はsystemdの機能ではないのですが、systemdと関係が深いということで紹介されています。

第10章 systemd-journald
第11章 core dump管理
第12章 systemd-logind、pam_systemd
第13章 systemd-tmpfiles、systemd-sysusers
第14章 D-Bus、polkit
第15章 systemd-resolved
第16章 systemdのその他機能

第10章から第16章で紹介されている機能はどれもLinuxのシステムを運用していく中では大事な機能ばかりです。特にログ管理を行うsystemd-journaldやセッションを管理するsystemd_logind(pam_systemd)、名前解決サービスのsystemd-resolvedなどは日頃からお世話になる機会も多いです。一部のディストリビューションではまだ導入されていない機能もありますが、今後採用されたりデフォルトで動作する可能性も高いと思います。

この本1冊にsystemdの概要から細かい所までまとめられていています。また各章ではそれぞれ対象とするコンポーネントについて概要から機能、設定まで記載されています。そのため全体像を把握したい方は最初の方から、また分からない機能や気になった部分がある方は直接該当する箇所から読むということも可能です。そのため1冊あると重宝するなと思いました。

この本を読んで得た学び

“systemdの思想”

  • systemdはLinuxの中での“世界征服”を目指しているということがわかった
  • systemdはディレクトリ構造や設定ファイルなどを工夫して柔軟設定できるよう設計されている
  • systemdを使用することで効率よくまたセキュアにLinuxのシステムを設定、管理できる

“systemdの機能”

  • systemdは起動時にunit fileをロードしてメモリ上にunitを作成している
  • systemdのunitを設定するunit fileの依存関係(Before/After/Wants/Require/Conflict)とトランザクションは大事
  • systemdはtargetを利用してunitの実装を抽象化することでLinuxディストリビューションによらず共通したunit fileを扱えるようになっている
  • cloud-initはクラウド環境で動作するようなインスタンスを初期化するための業界標準で特定のクラウドベンダーに特化した仕組みでは無い
  • systemd-journaldは様々なログを構造化してインデックシングしjournalとして蓄積している
  • systemd-logindではユーザ、セッション以外にシートという概念を取り入れている
  • /etc/resolv.confはresolveの”e”が省略されているがsystemdの設定ファイルではresolved.confになり特に省略されていない
  • systemdはオフラインアップデートが可能
  • nohupの代わりにsystemd-runを使うことで実行するコマンドやスクリプトのCPU、メモリリソースを制限でき、また出力されるログをjournalに格納することができる

その他

  • /etc/passwdのコメントを登録できる5番目の項目はGECOSフィールドという名前だそうです。

実際に試してみたいこと、もう少し深掘りしてみたい事

サービスのunit fileや依存関係、トランザクションの動作など実際に設定してみて挙動を確認してみたいと思いました。systemd-resolvedやsystemd-networkdもシステムを動かす上で大事な所なので実機を使って動作や設定など確認してみたいなと思います。またログインセッションと切り離して処理を行う場合はnohupではなくsystemd-runを使ってスクリプトやコマンドを実行してみたいと思いました。

さらに勉強が必要だなと思った事

Linuxカーネルの機能であるcgroupは大事な機能だなと思いました。systemdの実行環境にも深く関わっていますしコンテナの実行環境などでも使用されているので機会をみつけてまた勉強してみようと思います。

所感

何気なく触ってる環境やコマンドも実行はできるけど背景や全体像、細かい設定まで理解していない事が多いです。特に自分はその先の調べて理解するという部分を後回しにしがちなので。今回systemdについて改めて勉強してみてもっと前に確認しておけばよかったなと痛感しました。まだまだ分からないことは多いのでテーマや時間を見つけて勉強していきたいと思います。日々勉強ですね。頑張ります。

最後に

今回読んだ『systemdの思想と機能』はAWSやクラウドサービスを触り始めたエンジニアの方やこれからLinuxを勉強しようと思っている方にはちょうどいい本だと思います。さらに自分のようにSysVinitの経験が残っていてsystemdへの切り替えがまだできていない人などにもお薦めです。細かく章立てされていて読みやすいとは思いますので気になる方、勉強したい方はぜひ読んでみてください。

最後まで読んで頂きありがとうございました。