systemdでパイプ/stdin/stdoutを使用する

systemdでパイプ/stdin/stdoutを使用する

ワンタイムスクリプトを実行するために「ExecStart」ディレクティブを使用するシステムサービスがあります。このスクリプトは、ZFS暗号化キーのロード時に起動プロセスの初期(ファイルシステムがマウントされる前)に実行されます。

私が行う方法(ディスクにキーを保存せずにTPMでキーを復号化する方法)のため、あるコマンドの出力を別のコマンドにパイプする必要があります。失敗の原因を特定しようとしていますが、/dev/stdoutに書き込む必要があるコマンドを実行すると、「出力ファイルを開けません」というエラーが発生することがわかります。

コンピュータの起動後、「systemd start <servicename>」を使用して同じサービスを実行すると、エラーなしで成功します。だから私はそれが単位依存性の問題だと思います。どのユニットを見逃すのかわかりません。

(私は暗号化されたルートファイルシステムを使用していないので、これはルートファイルシステムの起動の問題ではありません。)

ベストアンサー1

これは、tpm_unsealdataによる誤解を招くエラーメッセージであることがわかりました。実際の問題は、tcsdがロードされないことです。元のユニットファイルにあります

Requires=trousers

ユニットスクリプトを実行する前に前提条件はロードされません。

After=trousers

また必要です。

(はい、TPM1 tcsdデーモンは「trousers」というパッケージの一部です。)

おすすめ記事