システムインストールユニット構成で変数を使用できますか?

システムインストールユニット構成で変数を使用できますか?

systemdマウント設定ファイルフィールドでwhat=絶対パス文字列の代わりに変数を使用できますか?

たとえば、

[Unit]
Before=local-fs.target

[Mount]
What=/dev/disk/by-partlabel/${part_variable}
Where=/mnt/optional/config/

カスタムカーネルコマンドラインbootparamを使用し、そのbootparamによって提供されるパーティションをマウントする方法を見つけたいと思います。

答え1

参考までに:

systemdマウント設定ファイルフィールドでWhat=絶対パス文字列の代わりに変数を使用できますか?

はい、可能です。たとえば(テストしたばかりですsystemd v.238):

mnt-data.mountコンテンツ:

[Unit]
Description=Mount System Backups Directory

[Mount]
What=${SOMEPATH}
Where=/mnt/data
Type=ext4
Options=defaults

走れば

systemctl set-environment SOMEPATH=/dev/disk/by-label/DATA

それから

systemctl start mnt-date.mount

/dev/disk/by-label/DATAにインストールされます。/mnt/data

またはenvファイルを介して:

mnt-data.mountコンテンツ:

[Unit]
Description=Mount System Backups Directory

[Mount]
EnvironmentFile=/path/to/env_file
What=${SOMEPATH}
Where=/mnt/data
Type=ext4
Options=defaults

/path/to/env_fileコンテンツ:

SOMEPATH=/dev/disk/by-uuid/1b5a38ca-9f0d-4f1a-8fc1-7c418e79bf07

役に立たないかもしれません

カスタムカーネルコマンドラインブートパラメータを使用し、そのブートパラメータによって提供されるパーティションをマウントする方法を見つけます。

しかし、それは間違いなく使用することができますWhat=${SOMEVAR}

答え2

によると、man systemd.mount変数置換はサポートされていません。

私は、起動プロセスの初期に実行され、動的に生成されたファイルを作成するsystemdサービスを作成することがまだ可能であると信じています.mount

答え3

いいえ。

あなたが説明するのはまさにジェネレータの用途ですman systemd.generators。を参照してください。比較はman systemd-fstab-generatorインストール単位で生成され、カーネルコマンドラインからも読み取られます/etc/fstab。つまり、カーネルコマンドラインオプションのみをサポートし、設定ファイルはサポートしていない場合は、そのためのearlystart()サービスユニットを作成してroot=もよいでしょう。DefaultDependencies=no

関連情報