systemd зависимость может быть применена только к действию единицы “ExecStart”?

$ echo -e "to: receiver@domain.tld\nsubject: test\n"| (cat - && uuencode /path/to/file file.name) | ssmtp sender@gmail.com

При условии, что SSMTP настроен, и Вы проверили, что сообщения без вложений достигают своего места назначения, и не зависит от дурака.

4
30.01.2015, 18:27
2 ответа

В текущем системе (218 во время написания), запись в / etc / crypttab приводит к экземпляру SystemD-CryptSetup @. Служба Блок, генерируемый SystemD-CryptSetup-генератором , что SystemD выполняет, когда система загружается.

Сгенерированный блок включает в себя зависимость на пути к ключевым файлам:

RequiresMountsFor=/path/to/key_file

Этот вид зависимости документирован в MAN Systemd.Unit , где он объясняет, что он приводит к , требует = и после = Зависимости для всех монтируемых, необходимых для доступа к указанному пути.

Требуется = Зависимость вызывает SystemD, чтобы остановить блок CryptSetup, если установочный блок деактивирован.

Это означает, что размонтируя устройство, содержащее ключевые кожуры CryptSetup, чтобы деактивировать, и он блокирует громкость, когда это так.

Единственная работа - вокруг на данный момент - это не использовать / etc / crypttab для любых томов, в которых это может быть проблемой, но вместо этого предоставляют пользовательскую единицу, которая не включает в себя = зависимость. Отказ Вот подходящая пользовательская единица, основанная на том, что выпускается генератором:

# /etc/systemd/system/systemd-cryptsetup\@.service 
[Unit]
Description=Cryptography Setup for %I
Documentation=man:crypttab(5) man:systemd-cryptsetup-generator(8) man:systemd-cryptsetup@.service(8)
DefaultDependencies=no
Conflicts=umount.target
BindsTo=dev-mapper-%i.device
IgnoreOnIsolate=true
After=cryptsetup-pre.target
Before=cryptsetup.target
BindsTo=dev-lvmvg-%i.device
After=dev-lvmvg-%i.device
Before=umount.target

[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutSec=0
ExecStart=/usr/lib/systemd/systemd-cryptsetup attach '%i' '/dev/lvmvg/%i' '/root/keyring/%i.key' 'header=/root/keyring/%i.hdr'
ExecStop=/usr/lib/systemd/systemd-cryptsetup detach '%i'

[Install]
WantedBy=dev-mapper-%i.device

Этот пример будет использоваться вместо этого / etc / crypttab в записи:

 # <name>  <device>       <password>              <options>
mail      /dev/lvmvg/mail /root/keyring/mail.key  header=/root/keyring/mail.hdr   

Эта проблема была поднята с Systemd Developers и он был добавлен в список Todo .

1
27.01.2020, 21:00

Вместо явной зависимости, возможно, вы могли бы использовать Automount .

Я помню, что SystemD рекламировал это во время начального блога PoEStering , как своего рода неявная зависимость. Это похоже на то, как (с Systemd) вы можете писать запросы на сокет, и для вас будет начаться подходящее обслуживание, AKA «Активация сокета». В этом случае доступ к файловой системе заставит его установить.

С таким подходом вы можете ожидать блокировки до тех пор, пока служба или файловая система не будет готов. ПРИМЕЧАНИЕ : Это подразумевает, что ваша система будет иметь каталог, который блокирует вас, если вы попытаетесь посмотреть на него (как только вы удалили диск «Грели») ... Может быть, если вы когда-нибудь используете / root для всего еще, было бы лучше установить его в другом месте, например, / Automount / Keyring , чтобы не отключить его. Лично я думаю, что этот вопрос делает автоматически немного запутанным - но это, кажется, делает очень быстрое решение вашему вопросу.

Если файловая система указана в / etc / fstab , просто добавьте x-systemd.automount в список параметров.

Если он описывается на родном .mount Файл вместо этого, похоже, вам нужно создать .auutomount файл того же имени. Например. root-Keyring.automount , содержащий:

[Automount]
Where=/root/keyring
1
27.01.2020, 21:00

Теги

Похожие вопросы