これはオペレーティングシステムの検出と関係があるかもしれませんが、特にシステムで現在使用されているinitシステムが必要です。
Fedora 15とUbuntuは現在systemdを使用しており、UbuntuはUpstart(15.04までの長いデフォルト)を使用していましたが、その他はSystemVのバリエーションを使用しています。
クロスプラットフォームデーモンとして作成しているアプリケーションがあります。 initスクリプトは、configureで渡すことができるパラメーターに基づいて動的に生成されています。
私がやりたいのは、彼らが使用している特定のinitシステムのスクリプトを生成することだけです。このようにして、rootとしてパラメータなしでインストールスクリプトを合理的に実行でき、デーモンを自動的に「インストール」できます。
これが私が思いついたものです:
- / binでsystemd、upstartなどを検索します
- / proc / 1 / commをsystemd、upstartなどと比較します
- ユーザーに尋ねる
これを行うための最良のクロス/プラットフォームの方法は何でしょうか?
関連する種類の*nixの大部分をbashに依存できますか、それともディストリビューション/ OSに依存しますか?
ターゲットプラットフォーム:
- Mac OS
- Linux(すべてのディストリビューション)
- BSD(すべてのバージョン)
- Solaris、Minix、およびその他の* nix
承認された回答:
2番目の質問の答えは、いいえです。 ポータブルシェルプログラミングのリソースをご覧ください。
最初の部分に関しては–まず第一に、あなたは確かに注意しなければなりません。 確認のためにいくつかのテストを実行します –誰かが持っているという事実のため systemd(例)がインストールされていても、実際にデフォルトのinit
として使用されているわけではありません。 。また、/proc/1/comm
を見てください さまざまなinitプログラムをインストールすると、自動的に/sbin/init
が作成されるため、誤解を招く可能性があります。 シンボリックリンクのハードリンク、またはメインプログラムの名前が変更されたバージョンです。
おそらく最も便利なのは、initスクリプトの種類を調べることかもしれません。なぜなら、それらは、実行するものに関係なく、実際に作成するものだからです。
ちなみに、LinuxとBSDシステムの両方と互換性のあるinitスクリプトの構造を提供することを目的としたOpenRCもご覧になるかもしれません。