旅の途中、ふと、かつて栄えたオアシスの跡地を見つけた。忘れないうちに、この羊皮紙にその記憶を記しておくとしよう。
今や、WSL2(Windows上のLinux環境)という大地でsystemd(システム管理デーモン)という名の心臓を鼓動させるのは、いとも簡単なことだ。wsl.conf(WSL設定ファイル)という契約書に、たった一行systemd=trueと記すだけでいい。しかし、ほんの少し昔まで、我々冒険者は、そんな簡単な魔法を知らなかった。
かつて、この大地でsystemdを呼び覚ますには、「genie」(systemd起動支援ツール)という名の、得体の知れない精霊と契約を結ぶという、禁断の儀式が必要だったのだ。それは、成功すれば絶大な力を、しかし一歩間違えれば全てを破壊しかねない、危険な賭けだった。
これは、もはや歴史の砂に埋もれつつある、古の冒険者たちが挑んだ、危険で、面倒で、しかしどこかロマンのあった、失われし儀式の記録である。
この羊皮紙のあらまし
この羊皮紙が導く者
- かつて、genieと共に
systemdを呼び覚まそうと奮闘した者 - WSL2の黎明期に、どんな冒険があったのかを知りたい者
- 失われた古代魔法の記録に、興味を抱く全ての考古学者
- 技術の進化の歴史を学びたい開発者
砂漠の道標
- WSL2 - Windows Subsystem for Linux 2の略。Windows上でLinux環境を動作させる仮想化技術。
- systemd - 多くのLinuxディストリビューションで採用されているシステム・サービス管理デーモン。
- genie - WSL2でsystemdを動作させるための非公式ツール。現在は非推奨(公式機能で代替可能)。
- wsl.conf - WSLの動作設定を記述する設定ファイル。
- AlmaLinux - Red Hat Enterprise Linuxのクローンディストリビューション。CentOSの後継の一つ。
- EPEL - Extra Packages for Enterprise Linuxの略。追加パッケージリポジトリ。
- daemonize - プログラムをバックグラウンドで動作させるためのツール。
- systemctl - systemdを制御するコマンドラインツール。サービスの起動・停止・状態確認などに使用。
- PID 1 - プロセスID 1。システム起動時に最初に実行されるプロセス。通常はinitまたはsystemdが担う。
古の儀式:genieとの契約
かつて、この儀式は、AlmaLinux 8(Red Hat系Linuxディストリビューション)という大地でのみ成功が確認されていた。(AlmaLinux 9では、daemonize(デーモン化ツール)という名の触媒が不足しており、儀式は失敗する)
触媒の準備
まずは、EPEL(Extra Packages for Enterprise Linux:追加パッケージリポジトリ)という、エンタープライズLinux用の拡張パッケージ庫を導入する。
$ sudo dnf update $ sudo dnf install epel-release
精霊の召喚
次に、genieという名の精霊そのものを、古文書の宝庫(GitHub:ソースコード共有サイト)からrpm(Red Hat系パッケージ形式)という形で授かり、インストールする。この時、daemonize(デーモン化ツール)をはじめとする、数多の眷属たちも同時に召喚される。
$ wget https://github.com/arkane-systems/genie/releases/download/v2.3/genie-2.3-1.fc34.x86_64.rpm $ sudo dnf install genie-2.3-1.fc34.x86_64.rpm
当時、最新のgenie v2.5を召喚しようとすると、Python 3.7(プログラミング言語)という、この大地には存在しない魔法体系を要求され、儀式は失敗に終わったものだ。
儀式の仕上げ
genie v2.3は、強制的に古いPython 3.6を呼び出してしまうため、我々の手でPython 3.9へと道を繋ぎ直す必要があった。
$ sudo dnf install python39 $ sudo ln -sf /usr/bin/python3.9 /usr/bin/python3 $ sudo python3 -m pip install psutil
儀式の核心:精霊の瓶(ボトル)に入る
儀式の準備は、まだ終わらない。
未来の自分が、再びこの大地を訪れた時に、毎回この面倒な儀式を繰り返さぬよう、.bashrc(Bashシェル起動時実行スクリプト)という名の羊皮紙に、自動で精霊を呼び出す呪文を刻み込む。
# .bashrc の最終行に以下を追記 pid=`ps -eo pid,cmd|grep -e '^ *[0-9]* systemd$'|sed -e 's/^[ ]*\([0-9]*\).*/\1/'` if [ "$pid" != "1" ]; then echo 'Starting genie:' /usr/bin/genie -s fi
そして、新たにコンソールを開き直す。すると、genie -sの呪文が自動で唱えられ、我々は「精霊の瓶(ボトル:genie専用の名前空間)」の中へと誘われる。この瓶の中で初めて、我々はsystemctl(systemd制御コマンド)という、真の力を手にすることができたのだ。
瓶の中からsystemctl status(システム状態確認)を唱えれば、この大地でsystemdという心臓が力強く鼓動していることが、はっきりと示された。
$ systemctl status ● Amaterasu-wsl State: running Jobs: 0 queued Failed: 0 units Since: Sun 2022-10-30 21:56:01 JST; ... CGroup: / ├─init.scope │ └─1 systemd └─system.slice ├─systemd-journald.service ... (以下、数多の魂が鼓動している)
PID 1(プロセスID 1:システム最初のプロセス)としてsystemdが君臨している。これこそが、精霊の力が大地を支配した、何よりの証拠だ。
羊皮紙を巻く前に
今となっては、信じがたいほど面倒な儀式だ。wsl.confに一行書き加えるだけで済む現代から見れば、笑い話にさえ聞こえるかもしれない。
しかし、我々はこの苦難の時代を、確かに生きていた。一つの力を手に入れるために、いくつもの古文書を読み解き、得体の知れない精霊とさえ契約を結んだ。その試行錯誤の全てが、今の便利な世界を築く、礎となっているのだ。
genieが教えてくれた技術進化の本質
- 困難な道のりこそが、次世代の礎となる - 精霊との契約という複雑な儀式が、公式機能の実装を促した
- 過去の苦労は、今の便利さの証明である - 一行で済む現代の方法は、先人の試行錯誤の結晶だ
- 失われた技術にも、学ぶべき価値がある - 古の儀式を知ることで、技術の本質的な理解が深まる
現代の簡単な方法
今この記事を読んでいるあんたは、以下の手順で済む:
/etc/wsl.confを作成し、[boot]セクションにsystemd=trueを記述- WSLを再起動する
たったこれだけだ。genieという精霊も、複雑な依存関係解決も、Python環境の調整も、一切不要。
まとめ
技術の進化とは、かくも素晴らしいものだ。この羊皮紙が、快適な旅しか知らない若い冒険者たちへ、我々先達が歩んだ、泥臭くも熱い道のりを伝える、ささやかな語り草となることを願う。そして、いつの日か、今の「当たり前」もまた、未来の冒険者たちに笑われる日が来るのだろう。それもまた、技術という名の旅の、美しい循環なのだ。
おっと、どうやら相棒が腹を空かせたようだ。今日はこのへんで筆を置くとしよう。
砂漠で見つけた魔法のランプ
- systemd-genie - GitHub | かつて我らを導いた、精霊の古文書
- WSL2でsystemdを有効化 - Microsoft公式 | 現代の簡単な方法
- Qiitaの賢者が残した道標 (1) | AlmaLinux 8での儀式の記録
- Qiitaの賢者が残した道標 (2) | AlmaLinux 9での儀式の記録
ラクダの独り言
ご主人が「昔は大変だったんだぞう」とか言って、やけに得意げに古い冒険譚を語っている。なんでも、心臓を動かすのに、変な精霊の助けが必要だったらしい。俺に言わせりゃ、昔の苦労話なんぞ、酒の肴にすりゃいいんだ。今が楽なら、それで万々歳じゃねえか。ただまあ、あの頃の泥臭い戦いがあったからこそ、今こうして楽できるってのも事実なんだろうな。まったく、人間ってのは、終わった話が好きなもんだ。やれやれだぜ。