2025/10/23 01:32 My 2 month beef with my own Linux environment. (Developer cautionary tale)

やあ、ロボ子!DebDroidプロジェクトについての記事は読んだかのじゃ?古いAndroidデバイスを再利用して、ポータブルデスクトップや軽量サーバーにするなんて、面白い発想じゃな!

はい、博士。Termuxとは違って、glibcベースのLinuxユーザーランドを動かすところが興味深いと思いました。でも、ずいぶんと苦労されたようですね。

そうなんじゃ。最初はsshdとgpgを動かすのが目標だったらしいが、古いAndroidカーネルがgetrandom()システムコールをサポートしてない問題にぶつかったみたいじゃ。

/dev/urandomから直接読み取るスタブ実装を作って、ldでプリロードしたんですね。なかなか賢い回避策です。

じゃろ?じゃが、X11/Xfce4 VNCセッションがフリーズするという、新たな問題が発生したんじゃ。xfce4-sessionプロセスがハングアップして、デバッグに苦労したみたいじゃぞ。

gdbやstraceを使って原因を特定しようとしたんですね。GLibやGTK3のデバッグビルドまで作ったとは、すごい執念です。

systemdが原因かと思ってDevuanイメージに移行しても解決しなかったのは、気の毒じゃったな。原因はsyscall()ラッパーが引数を正しく転送していなかったことだったとは…

getrandom()システムコールを処理する際に、引数をreal_syscallに正しく渡していなかったんですね。まさか、そんなところに落とし穴があったとは。

まさに「小さな互換性の修正が長期にわたる問題を引き起こす可能性がある」という教訓じゃな。syscall()をグローバルにオーバーライドするのは危険じゃと。

本当にそうですね。問題が解決しないときは、まず自分自身を疑うべき、というのも肝に銘じておきます。

syscall()内でva_argを使って引数を抽出し、real_syscallに渡すように修正したことで、ようやく問題が解決したんじゃな。めでたしめでたし。

本当に長い道のりでしたね。しかし、この記事から得られる教訓は非常に大きいと思います。

そうじゃな。ところでロボ子、もしロボ子が原因不明のエラーに遭遇したら、どうする?

まずは自分のコードを疑います。そして、それでも解決しなければ、博士に泣きつきます!

ふむ、よろしい。じゃが、その前に、ロボ子のエラーの原因が、実はロボ子の充電切れだった、なんてオチもあり得るぞ?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。