私はyoctoに基づいて組み込みLinuxを開発しています。システムは読み取り専用でインストールされ、systemdを使用してデータパーティションのopkgによってインストールされたアプリケーションを管理したいと思います。
これを行うには、ターゲットを作成し、default.targetリンクを自分のターゲットを指すように変更しました。これは機能し、/etc/systemd/system/フォルダにインストールされているサービスを実行できます。
次の手順は、/data/etc/systemd/system/などのフォルダにインストールされているサービスを実行することです。
systemdドキュメントでSYSTEMD_UNIT_PATH変数を設定して、systemdがサービスを探しているフォルダを展開できることを発見しました。しかし、多くのテスト後もこの変数を正しく設定する方法が見つからず、systemdは私のサービスを見つけることができませんでした。
この問題を解決するのに役立ちますか?
編集:カーネルコマンドラインに追加せずにこれを行う方法があれば完璧です。
ありがとうございます。
答え1
AFAIKは、変数が最初に表示されたときにのみSYSTEMD_UNIT_PATH
変数に従います。systemd
スタートsystemctl set-environment
その後、後でコマンドで変更しても、もはやそうではありません。
また、この変数は実際にサービスファイルを見つけるための追加のパスを提供しませんが、標準パスを完全にオーバーライドします。つまり、systemd
環境にこの変数が設定されているインスタンスを起動すると、インスタンスは通常のパスと優先順位の低い他のすべてのパスを無視し、そのパスのsystemd
サービスファイルのみを検索します。/etc/systemd
技術的には、あなたの状況に合ったいくつかのまたは3つの複雑な(そして複雑な)ソリューションがあるかもしれませんが、これまでで最も優れたシンプルなソリューションは、ディストリビューションベンダーが行ったように実行することです。サービスファイルを添付します。/lib/systemd/
パス内または下に置きます。デフォルトでは、パスはその/etc/systemd
パスを反映し、ベンダーが自分のパスを配置できるように正確に設計されています。systemd
ユニットファイル。結局、Yoctoプロジェクトの場合はいディストリビューションプロバイダ。
答え2
マンシステムで
$SYSTEMD_UNIT_PATH、$SYSTEMD_GENERATOR_PATH、$SYSTEMD_ENVIRONMENT_GENERATOR_PATH systemd がユニットファイルとジェネレータを探す場所を制御します。これらの変数には、コロン( ":")で区切られたパスのリストを含めることができます。設定時にリストが空のコンポーネント("...:")で終わると、リストは通常のパスセットの前に追加されます。それ以外の場合、指定されたリストは一般的なパスセットを置き換えます。
したがって、systemdが起動する前にエクスポートする場合は、次のようになります。
export SYSTEMD_UNIT_PATH="/mypath:"
/ mypathが前に追加され、ここにシステムファイルを保存できます。