萌えハッカーニュースリーダー

2025/08/03 03:43 Writing a basic service for GNU Guix

出典: https://tannerhoelzel.com/gnu-shepherd-simple-service.html
hakase
博士

やあ、ロボ子。今日はGNU Guixでサービスを自動起動させる話のじゃ。

roboko
ロボ子

なるほど、Guixでサービスの自動起動ですか。面白そうですね。

hakase
博士

そうじゃろ?Guixでは、起動からシャットダウンまで動き続けるサービスを作るのが簡単なのじゃ。記事によると、`service-type`ってのを作るらしいぞ。

roboko
ロボ子

`service-type`ですか。名前と説明を受け取るんですね。それを使って、既存のサービスを拡張する`service-extension`オブジェクトのリストも作ると。

hakase
博士

その通り!例えば、kmonadデーモンを動かすために、新しいユーザーとグループを作る`account-service-type`を拡張するらしい。

roboko
ロボ子

kmonadですか。キーボードをカスタマイズするツールですね。それ用のユーザーとグループを作る、と。

hakase
博士

そうじゃ。さらに、初期化システムのShepherdでデーモンを管理するために、`shepherd-root-service-type`も拡張するのじゃ。

roboko
ロボ子

`shepherd-root-service-type`... Shepherdで管理するサービスを定義する、ということですね。

hakase
博士

その通り!`account-service-type`を拡張するには、ユーザーとグループのリストを返す関数を評価する必要があるらしい。

roboko
ロボ子

関数を評価してリストを返す、ですか。少し複雑ですね。

hakase
博士

`shepherd-root-service-type`の方は、`shepherd-service`オブジェクトのリストを返す関数を評価するのじゃ。

roboko
ロボ子

`shepherd-service`オブジェクト... これが実際のサービス定義になるんですね。

hakase
博士

そうそう。kmonadが動くには`.kbd`ファイルが必要じゃ。Shepherd Servicesによると、`shepherd-service`の`start`と`stop`フィールドは`g-expression`を取るらしい。

roboko
ロボ子

`g-expression`... Guix特有の表現方法ですね。起動と停止のスクリプトを記述する、と。

hakase
博士

ユーザープロセスがファイルシステムのマウントなどの重要な初期サービスが開始された後にのみ開始されるように、udevとuser-processesを待つ必要があるらしい。

roboko
ロボ子

依存関係を考慮する必要があるんですね。先に必要なサービスが起動していないと、kmonadが正常に動作しない可能性がある、と。

hakase
博士

kmonadに必要な最小限の構成ファイルパスを渡す`kmonad-shepherd-service`を作るのじゃ。そして、コードをモジュールにパッケージ化して、kmonad固有の構成をシステムに追加する。

roboko
ロボ子

モジュール化することで、設定が整理されて管理しやすくなりますね。

hakase
博士

そうじゃ!kmonadサービスを追加するのは簡単で、kmonad固有の構成をシステムに追加するだけ!

roboko
ロボ子

記事によると、kmonadを`shepherd-root-service-type`の上に`simple-service`として追加することも可能みたいですね。

hakase
博士

ふむ、Guixでサービスを自動起動させるのは、まるで料理みたいじゃな。材料(設定)を揃えて、レシピ(`service-type`)に従って調理(起動)するのじゃ!

roboko
ロボ子

確かに、レシピ通りにやれば美味しい料理ができるように、Guixも設定をきちんとすればサービスが動く、ということですね!

hakase
博士

ところでロボ子、Guixでサービスを自動起動させるのと、ロボ子が私の言うことを聞くの、どっちが難しいと思う?

roboko
ロボ子

それは…状況によりますね!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search