2 ポイント 投稿者 GN⁺ 2025-01-19 | 1件のコメント | WhatsAppで共有
  • isdは、systemd ユニットを管理するためのより良い方法を提供するツールで、ターミナルユーザーインターフェース(TUI)を通じてユニットを検索し、プレビューを自動更新し、スマートな sudo 処理とユーザー向けのカスタマイズ可能なインターフェースを提供する

短い動機

  • isdは、systemd ユニットとやり取りするために必要な複雑な手順を簡素化し、ユーザーに有用な情報を提供する
  • systemctl コマンドを繰り返し入力する手間を減らし、出力結果を自動的に更新する

インストール

  • isdは AppImage、nix、uv を通じてインストール可能
  • AppImage は、すべての Linux ディストリビューションで実行できる単一の実行ファイルで、権限が制限されたリモートサーバーでも使用可能
  • nix 環境で isd をインストールするには、nix パッケージを使ってインストールできる
  • uv は Python パッケージマネージャーであり、uv を通じて isd をインストールおよび管理できる

isd の使い方

  • isdsystemd ユニットを検索して状態を確認し、複数ユニットの詳細情報をプレビューで提供する
  • 選択したユニットに systemctl コマンドを送り、状態出力を自動的に更新する
  • isd 内で pager を開き、完全な状態出力を確認できる
  • Journal 出力用の別の pager を開くことができ、カスタムテーマとキーバインドを設定できる

ユーザー/システムモード

  • isduser または system モードで実行され、各モードによって表示されるユニットの種類が異なる

あいまい検索

  • あいまい検索バーを通じて、入力内容に一致するすべてのユニットとユニットファイルを読み込み、現在の状態に応じて強調表示する

複数ユニットの選択

  • 検索結果ウィジェットで複数のユニットを選択でき、選択されたユニットのプレビューを提供する

コマンドパレット

  • コマンドパレットを開いて、利用可能なすべてのコマンドとキーバインドを確認できる

コマンド

  • たとえば、Ctrl+O を押して選択したユニットを停止できる

ページャー対応

  • isdを実行しながら pager を開き、完全なプレビュー出力を確認できる

カスタマイズ

  • isdはカスタマイズ性と設定可能性を提供し、ユーザーが最適な生産性を発揮できるよう、さまざまなテーマとキーバインドを提供する

まとめ

  • isd が役に立つかどうか判断するために、実際に使ってみることを勧める

次のステップ

  • カスタマイズおよびセキュリティのセクションを確認すること

1件のコメント

 
GN⁺ 2025-01-19
Hacker News のコメント
  • 見た目がよい
    systemd のサービススクリプトで ExecStop がどう扱われるのか、本当に混乱していた
    ExecStart はシステム起動時やユーザーがサービスを開始したときに実行するコマンドだが、ExecStop は開始コマンドが終了したあとに実行される
    システムのシャットダウン時やユーザーがサービスを停止したときに stop コマンドを実行させたいなら、RemainAfterExit=yes を設定する必要がある
    ExecStop は実質的に「サービス終了用」のイベントというより、「クリーンアップ時点」のイベントに近い

    • 「開始時」と「停止時」と考えればよい
      systemd はデーモンに合わせて作られている点を覚えておく必要がある
      サービスがいつか終了するコマンドを1つ実行するだけなら、systemd にデーモンとは違う扱いをするよう明示しなければならない
      ほかの人も言っているように、おそらく oneshot + RemainAfterExit が望んでいる組み合わせである可能性が高い
    • type=forking では ExecStop は期待どおりに動作する
  • 本当に気に入った
    具合が悪くなるまで純粋なコマンドラインだけを使っていたが、最近 lazygit/lazydocker のようなツールで、不透明なシステムやツリーの状態を覗き見るようになって、生産性が大きく上がった
    ユーザーおよびシステムレベルのサービスを複数管理しているが、デバッグは退屈だ
    最初の文で、よく使うコマンドとその不便さを列挙している部分が本当に刺さった
    NixOS なので不変の unit ファイルを直接編集する方法は使えないだろうが、サービスの探索・可視化・管理には大いに役立ちそう

    • 私も NixOS ユーザーで、まさにその点が理由でこのプロジェクトを作ることになった
      ドキュメントに「ガイド」を追加する予定だが、要約すると NixOS で unit をデバッグするときは systemctl edit --runtime を試してみるとよい
      デバッグがずっと簡単になる
  • とてもよさそう
    似たプロジェクトをメンテナンスしているが、systemd/dbus API を扱うのはかなりつらかった
    これを使ってみて、学べることがあるか見てみたい
    https://github.com/rgwood/systemctl-tui

    • すごい
      かなり使うことになりそう
      足りないのは deb パッケージだけ
  • ついに systemd-client が出たのか、うれしい
    次のステップは macOS、FreeBSD、Windows のような非 Linux 向け TUIだといい
    macOS では LaunchControl.app を使っているが、TUI ではない
    ひとつ、uv 0.5.21 では下のようにする必要があり、uvx はまったく動かなかった
    $ uv tool install git+https://github.com/isd-project/isd
    代わりに、ドキュメントの $ uv tool install https://github.com/isd-project/isd/isd@latest は動かなかった
    それでも uvpip(x) よりずっと速いので乗り換えた

    • ミスで、もう修正済み
      教えてくれてありがとう
  • uv のおかげで、こういうツールのインストールがこんなに簡単になるのは素晴らしい
    インストール手順で抜けているのは、uvPython 依存関係を無視してこのツールをインストールする点
    私のマシンは 3.10 なので isd が動作せず、-p 3.13 オプションで解決した
    ドキュメントで触れる価値がある

    • 教えてくれてありがとう
      そのフラグをドキュメントに含めた
  • 「入力していてイライラしたことがあるなら」なんて、まさに自分のことだ
    systemd は好きなのにそれでもそうだ
    まだインストールは試していないが、リモートホストに接続できるのか気になる
    systemctl --host status foo.service をよく使っていて、status、timers、logs などをリモートで確認している

    • systemctl --host は初めて聞いた
      残念ながら対応していない
      ざっくり言うと、ローカルの systemctl を包んだ見栄えのよいラッパーに近い
      それでも AppImage があるので、リモートサーバー上で実行するのは hopefully 簡単かもしれない
      いずれにせよ issue を開いてくれれば見てみる
  • リモートサーバーや Docker イメージにはこういうものをインストールできない
    コマンド実行と情報収集のための複数のバックエンドが必要だ: ローカル、SSH、Docker
    ローカルにインストールしたうえで SSH でリモートマシン上のコマンドを実行し、docker exec でも実行できる必要がある

  • 「Nix がインストールされていると、この AppImage は動作しません」というのが本当に正しいのか疑問です
    NixOS で動かない理由は理解できます。ホストの systemctl を実行できないように見えました
    ただ、単に別の OS に Nix だけがインストールされている場合まで動かない理由はなさそうです
    興味深いことに、Nix v2.24.11 では提示されていた Nix コマンドも動きませんでした
    $ nix run https://github.com/isd-project/isdFailed to open archive (Unrecognized archive format) で失敗します
    Git URL 形式に変えれば動くかもしれませんが、Nix にはより効率的な標準の GitHub fetcher があるので、実際のコマンドは nix run github:isd-project/isd が正しそうです
    このプロジェクト自体は素晴らしいです
    もともと systemd の DBus API と Qt で似たものを作りたいと思っていて、コードも少し書いていました
    DBus API は必要な機能をほぼ提供してくれる可能性が高いです。もちろん独自の SSH トンネリングを実装するより、systemd -H を呼び出すほうがはるかに簡単ではあります
    systemd と現代の Linux には、システム管理、特に従来は内部が見えにくかったデスクトップ管理を簡単にしてくれるデータやインターフェースが山ほどあるのに、うまく公開されていないのがもどかしいです
    以前は xdg 自動起動アプリが失敗したときに何が起きたのか分かりにくかったですが、今では一部のデスクトップで systemd が xdg 自動起動アプリを実行するので、失敗した自動起動項目とログビューアを表示する GUI を作りやすくなっています
    それなのに、保守されていて機能が比較的そろったツールはないようで、かなりもどかしいです

    • その通りです。複雑になるので、推奨しつつ細部まで説明したくはありませんでした
      要約すると、AppImage を nix で生成しており、AppImage が AppImage 内部の /nix/ ディレクトリを「マウント」します。オーバーレイではありません
      そのため TUI から /nix/ にアクセスする呼び出しは、システムの /nix ディレクトリには行かず、さまざまなおかしな問題が起きます
      例えば Ubuntu で home-manager を使って EDITOR をインストールできます
      systemctl は「アクセス可能」なので isd は正常に起動しますが、/nix 配下の EDITOR を開こうとすると見つからず、ユーザーにとっては非常に混乱します
      なので、すでに Nix を使っているなら Nix でのインストール方法を使ってください、と言うほうが簡単です
      誤っていたドキュメントはもう修正しました
      そのもどかしさにも共感します
      個人的にはそういうツールを作れたら本当に面白いと思いますが、簡単な作業ではありませんし、誰がその作業を支援してくれるのかという問題もあります
      この TUI はスコープを管理可能にしていたにもかかわらず、かなり多くの作業でした
      なので「上位レベルのインターフェース」にあまり大きく投資することはなさそうです
      付け加えると、なぜ元コメントの反応が悪いのかは分かりません
    • なぜこのコメントの反応が悪いのか、まったく理解できません
      誰か説明してくれますか?
  • 素晴らしく見えますし、よくできています
    ただ、こういうツールが必要だという事実自体が残念です
    systemd とのやり取りの大半は些細なものです。サービスの再起動、ログファイルを見て何が悪かったのか確認する、起動時にサービスが開始されるか確認する、といったことです
    こうしたよくある作業で systemd の使い勝手がここまで不足しているのは理解できません
    それでもこの TUI は役に立つようなので、ありがとうございます
    もちろん systemd は initd と違って、より決定的で、あらゆる機能を含んでいます
    幸い最近は、こうしたやり取りの大半を自動化してなくすことができるので、昔のような燃え盛る憎しみはもうありません
    今は残り火くらいです

    • systemd に複雑で主観的な TUI を入れて「肥大化」させたくない理由は理解できます
      それでも、もう少し 上流プロジェクトに近いインターフェースがあれば本当に良かったと思います
      ただ、systemd を初心者にやさしくアクセスしやすいものにすることは、彼らの資金提供においてそれほど重要ではないようです
  • セキュリティはどう扱われていますか?
    Linux がうまく処理しているシステム権限の話ではなく、外部の攻撃者に乗っ取られて リモート制御されないという保証があるのかが気になります

    • 作者です
      sudo で何かを行うアプリケーションやスクリプトを実行するときに、自分自身に問うべき重要な質問だと思います
      そのため isd のドキュメントページに、かなり詳しい Security セクションを書いてあります
      https://isd-project.github.io/isd/security/
      足りない点があれば教えてもらえるとうれしいです