fix(nix-on-droid): proot-termux修正版を参照してインストールの権限エラーを解消#1217
Conversation
`26.05`へ移行して`glibc`が`2.42`になって以降、 Nix-on-Droidでのインストールが以下の権限エラーで失敗するようになっていました。 ``` error: getting pseudoterminal attributes: Permission denied ``` 原因は`glibc 2.42`が`isatty`や`tcgetattr`で`TCGETS2` ioctlを使うようになったのに対し、 Nix-on-Droidが同梱する古いproot-termuxが`TCGETS2`を処理できないことです。 ビルダー起動時の`tcgetattr`が`EPERM`を返してインストールが中断していました。 当初は`nixpkgs`と`home-manager`をNix-on-Droid専用に`glibc 2.40`の`25.11`へ固定する案を検討しました。 しかし共有のhome設定が`programs.claude-code`や`programs.ssh.settings`など、 `26.05`専用のhome-managerオプションを多用しており、 `25.11`では評価が壊れて二重保守のコストが大きいため断念しました。 代わりに根本原因のproot-termuxを直接修正します。 proot-termuxを`TCGETS2`対応版へ更新するPRが、 nix-community/nix-on-droid#529 で提出されていますがまだ未マージなので、 暫定でそのブランチ(masterベース)を直接参照します。 これで全体を`26.05`のまま維持でき、 home設定の互換対応も不要になります。 なお参照先がPRのベースである`master`系になるため、 `release-24.05`固有ではないmaster側の挙動差が出る可能性があります。 評価が通ることはローカルで確認済みですが、 実機での最終確認はこれからです。 上流にマージされたら公式の正式リリースへ戻します。 close #1205
There was a problem hiding this comment.
概要
Nix-on-Droidのglibc 2.42移行に伴うTCGETS2 ioctl非対応によるproot-termuxの権限エラー(error: getting pseudoterminal attributes: Permission denied)を解消するため、nix-on-droid flake inputを公式のnix-community/nix-on-droid release-24.05から、未マージPR nix-community/nix-on-droid#529 のブランチnewAM/nix-on-droid/update-prootへ暫定的に切り替える変更です。
根本原因の特定が的確で、25.11への固定案を検討した上で二重保守コストを避けて根本修正を選んだ判断、コメントとコミットメッセージへの経緯記載、flake.lockでのrev固定(d0e14fad...はPRのheadと一致)、上流マージ後に正式参照へ戻す計画の明記と、全体として丁寧で妥当な暫定対応です。
調査した事実として、PR nix-community/nix-on-droid#529 は実在し現在もopenかつ未マージ、修正対象はまさに本件のpseudoterminal権限エラーです。フォーク所有者newAMはnix-on-droidの実質的なコントリビュータで、proot-termuxのパッチ自体はtermux/proot公式コミット由来であり、信頼性は比較的高いと評価できます。
ブロッカーはありません。サプライチェーン上の残存リスクと、コメントの補足について改善提案を残します。
nvd diff: seminar (base: master)Version changesClosure size: 4975 -> 4975 (3 paths added, 3 paths removed, delta +0, disk usage +0B). |
|
単純にこれをinstallするだけだと解決しなかったな |
|
手順に従ってbootstrapのビルドは出来たっぽい? |
There was a problem hiding this comment.
概要
前回レビュー(commit c13c20f)以降の増分は1コミット build(deps): nix flake update nix-on-droid のみで、nix-on-droid flake inputのrevが d0e14fad... から dff2d1eb9b40d88c523a62252d899219105c5517 へ更新され、あわせて nmd inputが rycee/nmd(gitlab固定)から nix-on-droid 追従のnmdへ統合されました。
検証結果
増分の安全性を確認しました。
- 新rev
dff2d1ebはPR nix-community/nix-on-droid#529 のブランチnewAM/nix-on-droidupdate-prootの現HEADと一致し、proot-termuxのTCGETS2/TCSETS2 ioctl対応(本PRが依存するPermission deniedエラーの修正)を保持しています。 - 新旧revは同一の親
55b6449b...・同一メッセージ・同一author(newAM)を持つため、ブランチ先頭コミットがamend(force-push)され、nix flake updateがその書き換え後コミットを取り込んだ形です。これは前回レビューで指摘し著者が了承済み(flake.lockが再現性を保証)のブランチ参照=moving-target挙動が実際に発現したものですが、取り込まれた新revは正当でリスクのある内容変更はありません。 - 変更点はproot-termuxのバージョンbump(unstable-2024-05-04 -> unstable-2026-02-20、参照先は公式 termux/proot rev
ab2e3464...)のみで、悪意あるコード・不審なURL・fetch-and-execの追加はありません。
判定
新規の指摘はありません。前回の指摘(依存・セキュリティ観点のmoving-targetリスク、コメント文言)はいずれも著者が意図的と回答しスレッドがresolved済みです。増分は健全な依存更新であり、APPROVEとします。
26.05へ移行してglibcが2.42になって以降、Nix-on-Droidでのインストールが以下の権限エラーで失敗するようになっていました。
原因は
glibc 2.42がisattyやtcgetattrでTCGETS2ioctlを使うようになったのに対し、Nix-on-Droidが同梱する古いproot-termuxが
TCGETS2を処理できないことです。ビルダー起動時の
tcgetattrがEPERMを返してインストールが中断していました。当初は
nixpkgsとhome-managerをNix-on-Droid専用にglibc 2.40の25.11へ固定する案を検討しました。しかし共有のhome設定が
programs.claude-codeやprograms.ssh.settingsなど、26.05専用のhome-managerオプションを多用しており、25.11では評価が壊れて二重保守のコストが大きいため断念しました。代わりに根本原因のproot-termuxを直接修正します。
proot-termuxを
TCGETS2対応版へ更新するPRが、nix-community/nix-on-droid#529
で提出されていますがまだ未マージなので、
暫定でそのブランチ(masterベース)を直接参照します。
これで全体を
26.05のまま維持でき、home設定の互換対応も不要になります。
なお参照先がPRのベースである
master系になるため、release-24.05固有ではないmaster側の挙動差が出る可能性があります。評価が通ることはローカルで確認済みですが、
実機での最終確認はこれからです。
上流にマージされたら公式の正式リリースへ戻します。
close #1205