勇者パーティ、現地サーバ障害対応にて
勇者一行は酒場の奥で杯を交わしていた。
勇者は豪快にエールを煽り、ドワーフはテーブルを叩きながら「ビルドが通った!」と叫ぶ。
ホビットはチーズを齧り、ソーサレスは退屈そうに爪先で魔法陣を描いて遊ぶ。
モンクはただ静かに瞑想し、エルフは耳を澄まして酒場のざわめきを BGM に変えていた。
バードは羽ペンでその様子を歌に残そうとしていたが、みなに邪魔だと笑われていた。
突如のアラート
そのときだ――酒場の壁に掛けられた「監視の水晶球(Nagios石)」が赤く点滅し、轟音を響かせた。
[ALERT] Demon process not responding. Status: ZOMBIE
場の空気が一瞬で凍る。
ソーサレスは椅子からゆっくり立ち上がり、冷ややかに指を動かした。
「ふん……ssh root@dungeon-rack01」
しかし石盤に現れた文字は無情だった。
Permission denied (publickey).
ソーサレスの目が細くなる。
「……なに? 鍵が……? いや、鍵は合ってるはずよ」
勇者:「入れぬのか?」
ソーサレス:「静かに! 今、再試行するから……」
彼女は呪文のように再び指を動かす。
ssh -i id_rsa root@dungeon-rack01
Connection timed out
テーブルの空気が凍った。
ドワーフが呻く。
「おい……これ、もう“現地対応”案件じゃねぇか」
ホビット:「え、えぇ!? でも僕まだパイ焼けてないのに!」
勇者は剣を手に取り、低く言った。
「……仕方ない。行くぞ。現地で直す。」
バードは即座に書き残す。
「記す――ソーサレスのリモートは封じられ、勇者たちは現地へ赴くしかなくなった。」
ドワーフが笑う。
「あとで make pie してやるよ!」
こうして勇者一行は酒場を飛び出し、ダンジョン=データセンターへと足を踏み入れるのだった。
ダンジョン入り口 ― ギルド受付
勇者一行は酒場を後にし、鉄の門の前に立った。
そこは「ギルドのダンジョン管理部」、すなわち我らがデータセンターの玄関。
勇者は腰の鞄から「ギルドカード(入館証)」を取り出し、
魔力を帯びた石板にかざす――ピッ、と澄んだ音が響く。
すると窓口に座る受付嬢が、マニュアル通りの笑顔で言った。
「いってらっしゃいませ。ご安全に。」
勇者:「……毎回思うが、この笑顔の裏には俺たちが帰ってこないかもしれぬことを承知している目があるな」
ドワーフ:「いやいや、あれはマニュアル通りだ。smile.c に実装されてる」
ホビット:「わあ! 本当に言ってくれるんだね! デザートみたいに甘い声だ!」
ソーサレス(小さく微笑み):「皮肉なものね。地獄に行く前に微笑まれるなんて」
モンク:「その一言こそ、心を守るヒール呪文なのだ」
冷気が白い息を奪い、轟音が鼓膜を揺さぶる。
勇者一行は長い回廊を進む。
床下から這い上がる風は、まるで迷宮そのものが呼吸をしているかのようだった。
その時、前方から影が揺れた。
撤退してくる別の勇者パーティだ。
彼らの顔は疲労と恐怖に塗れ、隊列は乱れ、武具は損なわれていた。
先頭の戦士は手を押さえ、指の間から赤い血が滴っていた。
「ラックの角で……切ったんだ……。
あれは鋼鉄の刃と変わらん……!」
傷ついたパーティの僧侶が布を巻きつけながらも首を振っていた。
「今日は撤退だ。」
彼らは足早に背を向け、闇に飲まれていった。
勇者一行が撤退パーティとすれ違い、その血に胸を熱くした直後、
回廊に足音が響いた。
それは実戦に臨む者の響きではなく、
カツン、カツンと小気味よい革靴の音――まるで舞踏会にでも向かうかのよう。
現れたのは、SIerと呼ばれる一団。
磨き上げられた鎧(=スーツ)に身を包み、胸には華美な紋章。
腰には剣の代わりに巻物を差し、手には羽根ペンならぬパワポ用の棒。
彼らは勇者一行を見下ろすように視線を流し、言葉すら交わさぬ。
しかしその態度が雄弁に物語る。
「我らは戦わぬ。だが金は受け取る。
血は流さぬ。だが成果は頂く。」
撤退者の血痕がまだ乾かぬ床を、
涼しい顔で踏みしめながら通り過ぎていくその姿は、
まさしく貴族層の行軍に他ならなかった。
勇者は奥歯を噛みしめ、
ドワーフは低く唸り、
ホビットはぽつりと呟いた。
「いるよねぇ……こういうの」
ラック到着
黒き巨塔の列が、闇の中にそびえ立つ。
青と緑の小さな光が瞬き、まるで星々が並んでいるようだ。
だがそのすべては勇者一行が借り受けたもの――
いわば 自らの領土にして、戦場でもあった。
ラック一つひとつには、魔法の錠前がかけられている。
勇者は腰の袋から大量の鍵束を取り出した。
ジャラジャラと響く音は、この迷宮でしか聞けぬ儀式の始まり。
「ローグ、お前の出番だ。」
影から一歩踏み出したローグは、唇の端を吊り上げ、鍵束を受け取る。
その指先は蜘蛛のように軽やかで、耳は錠前の「カチリ」という囁きを逃さない。
ひとつ、またひとつ。
錠が解けるたび、冷たい風が漏れ出し、
まるで眠っていた魔物が目覚めを予告するかのように空気がざわつく。
ドワーフ:「これだけの鍵を一度に扱える奴はそうおらん。ローグ、お前に感謝だな。」
エルフ:「待て……奥のラックから、異様なWARNの匂いがする。」
ソーサレス:「光を隠しなさい。ゾンビデーモンはもう気づいている。」
ホビット:「僕、鍵開ける音って、なんかドキドキするんだよなぁ……」
ローグが最後の錠を外し、重たい音を立ててラックの扉を開いた。
冷気が押し寄せ、ファンの唸りとともに闇が広がる。
だが、目に飛び込んできたのは整然とした機器列ではなかった。
ケーブルは蛇のように脈動し、LEDは不規則に赤と緑を点滅させる。
まるで心臓の鼓動が乱れているかのように、ラック全体が不気味に震えていた。
ソーサレスが端末石に手をかざし、低く呟く。
「top……システムの鼓動を示せ」
しかし石は沈黙。代わりに、不気味な文字列が浮かぶ。
unable to fork new task
眉をひそめ、彼女は次の呪文を放った。
「――uptime!」
石板に刻まれた数字に、一行の顔色が変わる。
23:59:59 up 666 days, load average: 128.73, 256.01, 249.99
ドワーフ:「桁が振り切れてやがる……」
ホビット:「これ、パイどころかオーブン爆発してるよ!」
最後の詠唱が響く。
ソーサレスが端末石を撫で、低く詠唱した。
「ps aux……正体を示せ」
浮かび上がった一行は異様だった。
root 6666 6666 6666 ... ... ? Z ??? ??? [demon_process]
ラック全体が震え、ケーブルが蠢く。
LEDの赤が鋭い眼光のように灯り、闇の中に巨大な影が形を成していく。
勇者は剣を抜き、仲間に鋭く叫んだ。
勇者:「――くるぞ!!」
その瞬間、黒煙が吹き出し、ゾンビデーモンの巨体がラックの奥から這い出す。
口からは人語ではなく、呪いのログが吐き出された。
[OOM-KILLER] Out of memory: Kill process 1234 (sorceress) score 999 or sacrifice child
赤黒い文字列がソーサレスの胸に刻まれ、彼女は悲鳴を上げて崩れ落ちる。
皮膚には エラーメッセージが焼き付いたような痕 が浮かんでいた。
ソーサレス:「あぁ……っ、私の中のプロセスが……削られていく……!」
仲間たちが息を呑む中、モンクが駆け寄り、K&R本を彼女の傷に押し当てた。
祈りのようにコードを唱える。
「int heal(void) { return 1; }」
柔らかな光が溢れ、焼き付いたログは煙のように消えていく。
ソーサレスは荒い息を整え、モンクに小さく微笑んだ。
「……助かったわ」
そして、勇者の肩に手を置く。
冷たい指先が、戦場のバトンを渡す合図となる。
「ここからは、あなたの番よ」
勇者は頷き、剣を抜き放つ。
刀身にログの光が流れ込み、ルーンのように刻まれていく。
勇者:「――kill -9 PID!!」
銀の閃光が走り、ゾンビデーモンへと斬撃が放たれた。
勇者は叫びとともに剣を振り下ろした。
銀の刃は確かにゾンビデーモンを貫いた――だが、ログは沈黙したまま。
次の瞬間、端末石に冷たい一文が浮かび上がる。
bash: kill: command not found
勇者:「……な、何も起こらん!?」
ソーサレス(顔を蒼白にして):「……このシステムには、そもそも殺す術が実装されていないのよ!」
ゾンビデーモンが黒煙を吐き、嗤う。
「……おまえたちには、そもそも武器が存在せぬ……」
仲間たちに絶望が走る中、ドワーフが拳を叩きつけて立ち上がった。
「チッ、仕方ねぇ……俺が鍛えてやる!」
彼は腰の袋から古びた石板を取り出し、呪文を唱える。
「curl -O ftp://mirror.oldunix.org/pub/libsigterm-0.9.tar.Z!」
埃をかぶった圧縮ファイルが虚空から落ち、床を鳴らす。
モンクが静かに詠唱する。
「uncompress libsigterm-0.9.tar.Z」
――次の瞬間。
x README
x Makefile
x src/sigterm.c
x bin/testkill
x core
x tmp/
勇者:「なっ……床に……ぶちまけられていく!?」
ホビット(泣きそう):「やめてよ! 僕の ~/work がゴミまみれだぁぁ!」
ソーサレス(額を押さえ):「……これが .tar.Z の呪い……」
ドワーフ(絶叫):「クソッ! なんで -C を唱えなかったんだよォ!」
散乱するファイル群の中に、埃まみれの Makefile が横たわっていた。
ドワーフはそれを拾い上げ、汗だくになりながら朽ちかけたソースコードと README に書かれた偽りの言葉を読む。
This library tested on SunOS 4.1.3_U1
ドワーフ:「こんなもん……誰が信用するかッ!」
彼は Makefile を開き、額に汗を浮かべながら叫んだ。
「タブがスペースに化けてやがる! しかもCC=ccだと!? ふざけんな!」
槌を握りしめるようにvi を叩き、必死に修復するドワーフ。
そして、吠えた。
「make!」
轟音と火花が走り、古代のコードが光に変わっていく。
無数の WARNING が呪詛のように流れるが、やがて成功の鐘が鳴った。
cc: warning: implicit declaration of function ‘kill’
Build finished (with deprecation warnings)
Binary created: /usr/local/bin/kill
ドワーフは汗だくの顔に笑みを浮かべ、光るバイナリを勇者に差し出した。
「ほらよ! 呪われた tar.Z の底から鍛え直した剣だ!
警告まみれだが……動けば正義だッ!」
ドワーフは剣を勇者に投げ渡す。
勇者は空中でそれを受け取り、振りかざした。
「――これで……終わりだッ!」
渾身の一撃が放たれ、ゾンビデーモンの胸を真っ二つに裂く。
黒煙が吹き出し、エラーメッセージが虚空に散る。
[SIGKILL] process terminated.
その場に響く断末魔。
ゾンビの身体は完全に霧散し、沈黙が訪れた。
勇者(荒い息を吐きながら):「……終わった、のか……?」
ソーサレス(にやりと笑う):「フッ、ようやく眠れるわね」
ホビット(小躍りしながら):「やったか!!!」
ドワーフ(天を仰ぎ):「今度こそビールが飲める!」
──その刹那。
ラック前のコンソールが真紅に染まり、
強制的に文字が流れ出す。
[ 9284.223001] Out of memory: Killed process 2022 (httpd) total-vm:456789kB, anon-rss:12345kB
[ 9284.223018] oom_reaper: reaped process 2022 (httpd), now anon-rss:0kB
全員:「……なにッ!?」
突如として現れたのは、漆黒のローブをまとった骸骨のような影。
その大鎌には「OOM Reaper」と刻まれていた。
彼は仲間でも敵でもなく、ただ容赦なく刈り取る。
モンク(震える声で):「なぜだ……デーモンは消えたはず……なのに……!」
勇者(剣を握り直し):「これは……システムそのものが呼び覚ました死神か……!?」
コンソールの奥で、光なき声が響いた。
「リソース不足……選ばれしプロセスを……刈り取る……」
コンソールに血文字のようなログが次々と刻まれていく。
[ 9321.551283] Out of memory: Killed process 3157 (sshd) total-vm:12345kB, anon-rss:678kB
[ 9321.551299] oom_reaper: reaped process 3157 (sshd), now anon-rss:0kB
勇者:「なっ……! sshd を刈っただと!? これで外から誰も入れん!」
ソーサレス(悲鳴混じりに):「やめなさいッ! それじゃ修復もできないじゃない!」
次の瞬間、さらに一行。
[ 9322.004812] Out of memory: Killed process 4210 (syslogd) total-vm:5432kB
モンク(膝をつきながら):「……ログ……われらの記録まで……!」
ホビット(涙目で):「や、やめてよ! ぼくらの大事な cron まで……!」
[ 9322.445187] Out of memory: Killed process 5021 (crond) total-vm:2048kB
ドワーフ(槌を叩きつけて):「馬鹿なッ! なんでよりによって crond なんだ! もっと肥え太ったデーモンが他にいるだろうがッ!」
だが OOM Reaper は答えない。
その目は虚無、ただ淡々と鎌を振るい続ける。
バード(絶望の詩を綴りながら):「記す……死神は選ばぬ。味方も敵も、無差別に……」
勇者は剣を握りしめ、叫んだ。
「ふざけるなッ! これではデーモンを倒しても……システムそのものが崩壊する!」
OOM Reaper が無差別に刈り取り、システムが混沌に沈む。
その時だった。
[10000.000001] kernel: Summoning kernel spirit... Linus awakened.
轟音と閃光。
髭を蓄えた光の精霊が現れる。
リーナス精霊:「……くだらん。」
一瞥だけで OOM Reaper を吹き飛ばした。
[10000.000002] oom_reaper: process killed by kernel spirit
死神は霧散し、広間は静寂に包まれた。
リーナス精霊の説教
勇者(剣を構えつつ):「あなたは……!」
モンク(震えながら):「……カーネルの深層に宿る精霊……リーナス……!」
リーナス精霊は冷たい眼差しで一行を睨む。
「kill -9? それしか知らんのか?
お前らの戦いはただの力任せ。調べもせずに叩きつけるだけ。
まったく……愚かだ。」
勇者(悔しげに):「だが、他に方法は……!」
リーナス精霊:「言い訳するな。コードを読め。man を読め。 blame をしろ。
それをせずに剣を振るうから、ゾンビもリーパーも生まれるんだ。」
ドワーフ(怒り混じりに):「俺はビルドして剣を渡したぞ!」
リーナス精霊(鼻で笑い):「汚いソースを混ぜ込んだな。BSDから借りただろう?
そんなものは設計ではない。ゴミだ。」
一行は言葉を失う。
ソーサレスは目を逸らし、モンクは沈黙し、勇者は剣を下ろした。
リーナス精霊は言い放つ。
「Linux は民主主義ではない。
ここでの決定権は俺だ。従えぬなら、このプロセスごと消す。」
そして背を向けると、地下室へと歩み去った。
[10001.999999] kernel: Linus spirit has left the system.
Result: all participants LOST.
勇者たちはよろめきながらデータセンターを出る。
冷気混じりの外気を吸い込み、肩を落とす。
勇者(虚ろな目で):「……これで、よかったんだよな」
ソーサレス(苦笑して):「街は救われた……でも私たちは救われなかったわね」
ホビット(涙目で):「cron……もうどうでもいいや……」
ドワーフ(うなだれ):「ビルドも無駄か……」
だが外はさらに騒然としていた。
そこでは――リーナス精霊とSIer貴族が激突していた。
リーナス精霊:「コードを読め!」
SIer貴族(鼻で笑って):「ハッ、読む必要などない!
PowerPoint こそ剣! Excel こそ盾!
Linuxなんぞクソだ、俺たちはMSの加護で動いている!」
勇者一行はげんなりと顔を見合わせ、
ただひとこと。
「……地獄は、まだ終わらない。」
---EOF