通常、マウントしたくないファイルシステムにアクセスする必要があるsystemdサービスを設定しようとしています(該当する場合はbtrfsにSnapperを設定しますが、使用したい)。フラットサブボリュームレイアウト様々な場所で述べたように、例えば。ここ.snapshots
、他のすべての項目についてはディレクトリをアンロードしようとします)。
サービスに独自のマウントネームスペースを提供することは可能ですが、ほとんどのドキュメントではこれについて説明します。限界代わりに、一般的に利用可能なデータにアクセスします。承認する一般的にアクセスできないコンテンツにアクセスしてください。システムの残りの部分はインストールせずにSnapperのみがインストールされているかどうかを確認しますか?
編集:もちろんできる値を変更してメインExec=
タスクを実行しますが、これは多くの点でエレガントではありません。これ)いいえデフォルトサービスをrootとして実行するには、を使用するのではなく手動で変更する必要がありますUser=
。しかし、この方法を使用しても、ファイルシステムをアンマウントするためのスクリプトはまだ必要ですか、それともシステムは自動的にクリーンアップしますか?
編集2:確実な解決策は、次のようにインストールExecStartPre=
することです。文書、この場合は適用されません。
ファイルシステムの名前空間は、サービス管理者が分岐した各プロセスに対して個別に設定されます。
ExecStartPre=
したがって、プロセスが終了すると、プロセスの名前空間に設定されたマウントが自動的に消去され、分岐した後続のプロセスでは使用できなくなりますExecStart=
(同様の状況がデバイスに設定されているさまざまな他のコマンドに適用されます)。同様にJoinsNamespaceOf=
、ユニット間でカーネルインストール名前空間を共有することは許可されず、共有とディレクトリのみが/tmp/
許可/var/tmp/
されます。
答え1
一般的に言って、あなたが探しているものは次unshare -m
のとおりですPrivateMounts
。
PrivateMounts=true
group=xxx
where xxx
is the user's group オプションを使用して、そのパスのエントリを fstab に追加することもできます。これにより、ユーザーはルートでなくてもインストールを実行できます。
その後、通常はサービスファイルの作成を続けて次のコンテンツを追加できます。
ExecStartPre=mount ....
マウントは、プロセスの残りの部分と共有されず、サービスが終了したときに自動的にアンマウントされる別のマウントネームスペースで実行する必要があります。唯一の問題は、ユーザーがルートマウントネームスペースでもマウントを実行できることです。