dracut + systemd + LUKS + usbflash = αžŠαŸ„αŸ‡αžŸαŸ„αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·

αžšαžΏαž„αž“αŸαŸ‡αž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžαžΆαŸ†αž„αž–αžΈαž™αžΌαžšαž™αžΆαžšαžŽαžΆαžŸαŸ‹αž˜αž€αž αžΎαž™ αžαŸ’αžšαž›αž”αŸ‹αž˜αž€αžœαž·αž‰αž“αŸ…αž–αŸαž›αžŠαŸ‚αž› Centos 7 (RHEL 7) αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αŸαž‰αž•αŸ’αžŸαžΆαž™αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž”αžΆαž“αž”αŸ’αžšαžΎαž€αžΆαžšαž’αŸŠαž·αž“αž‚αŸ’αžšαžΈαž”αž“αŸ…αž›αžΎαžŠαŸ’αžšαžΆαž™αž‡αžΆαž˜αž½αž™ Centos 6 αž“αŸ„αŸ‡αž˜αž·αž“αž˜αžΆαž“αž”αž‰αŸ’αž αžΆαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαžŠαŸ„αŸ‡αžŸαŸ„αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αŸƒαžŠαŸ’αžšαžΆαž™αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž’αŸ’αž“αž€αž—αŸ’αž‡αžΆαž”αŸ‹ USB flash drive αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαŸ„αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž“αŸ„αŸ‡αž‘αŸαŸ” αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™αž“αŸ…αž–αŸαž›αžŠαŸ‚αž› 7 αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αŸαž‰αž•αŸ’αžŸαžΆαž™αž—αŸ’αž›αžΆαž˜αŸ—αž’αŸ’αžœαžΈαŸ—αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αŸ’αž›αžΆαž”αŸ‹αž’αŸ’αžœαžΎαž“αŸ„αŸ‡αž‘αŸαŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ αž‚αŸαž’αžΆαž…αžŸαŸ’αžœαŸ‚αž„αžšαž€αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž€αŸ’αž“αž»αž„αž€αžΆαžšαžαŸ’αžšαž‘αž”αŸ‹ dracut αž‘αŸ… sysvinit αžŠαŸ„αž™αž”αŸ’αžšαžΎαž”αž“αŸ’αž‘αžΆαžαŸ‹αžŸαžΆαž˜αž‰αŸ’αž‰αž€αŸ’αž“αž»αž„ configαŸ– echo 'omit_dracutmodules+=" systemd "' > /etc/dracut.conf.d/luks-workaround.conf
αžŠαŸ‚αž›αž’αŸ’αžœαžΎαž±αŸ’αž™αž™αžΎαž„αž”αžΆαžαŸ‹αž”αž„αŸ‹αž“αžΌαžœαž—αžΆαž–αžŸαŸ’αžšαžŸαŸ‹αžŸαŸ’αž’αžΆαžαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸƒ systemd αž—αŸ’αž›αžΆαž˜αŸ— - αž€αžΆαžšαž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž›αžΏαž“ αž“αž·αž„αžŸαŸ’αžšαž”αž‚αŸ’αž“αžΆ αžŠαŸ‚αž›αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž–αŸαž›αžœαŸαž›αžΆαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž™αŸ‰αžΆαž„αžαŸ’αž›αžΆαŸ†αž„αŸ”
αž’αŸ’αžœαžΈαŸ—αž“αŸ…αžαŸ‚αž˜αžΆαž“αŸ– 905683
αžŠαŸ„αž™β€‹αž˜αž·αž“β€‹αžšαž„αŸ‹αž…αžΆαŸ†β€‹αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™ αžαŸ’αž‰αž»αŸ†β€‹αž”αžΆαž“β€‹αž”αž„αŸ’αž€αžΎαžβ€‹αžœαžΆβ€‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹β€‹αžαŸ’αž›αž½αž“β€‹αžαŸ’αž‰αž»αŸ† αž αžΎαž™β€‹αž₯αž‘αžΌαžœβ€‹αž“αŸαŸ‡β€‹αžαŸ’αž‰αž»αŸ†β€‹αž€αŸ†αž–αž»αž„β€‹αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€β€‹αžœαžΆβ€‹αžŠαž›αŸ‹β€‹αžŸαžΆαž’αžΆαžšαžŽαž‡αž“β€‹αžŠαŸ‚αž›β€‹αž˜αžΆαž“β€‹αž…αŸ†αžŽαžΆαž”αŸ‹β€‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸβ€‹αž’αžΆαž“β€‹αž”αž“αŸ’αžαŸ”
dracut + systemd + LUKS + usbflash = αžŠαŸ„αŸ‡αžŸαŸ„αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·

αžŸαŸαž…αž€αŸ’αžαžΈαžŽαŸ‚αž“αžΆαŸ†

Systemd αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ Centos 7 αž‡αžΆαž›αžΎαž€αžŠαŸ†αž”αžΌαž„ αž˜αž·αž“αž”αžΆαž“αž”αž„αŸ’αž€αž±αŸ’αž™αž˜αžΆαž“αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαžŽαžΆαž˜αž½αž™αž‘αžΎαž™ αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž€αŸ’αžšαŸ…αž–αžΈαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž”αž“αŸ’αžαž·αž…αž”αž“αŸ’αžαž½αž…αž“αŸ…αž€αŸ’αž“αž»αž„αžœαžΆαž€αŸ’αž™αžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αž˜αžΆαž“αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαžαž»αžŸαž‚αŸ’αž“αžΆαž…αŸ’αžšαžΎαž“αž‘αŸαž“αŸ…αž–αŸαž›αžŠαŸ†αž”αžΌαž„αŸ” αž€αŸ’αžšαŸ„αž™αž˜αž€ αžαŸ’αž‰αž»αŸ†αž…αžΌαž›αž…αž·αžαŸ’αž systemd αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž…αŸ†αžŽαžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαžŠαŸ†αž”αžΌαž„αž‚αžΊαžαžΌαž…αž”αž“αŸ’αžαž·αž… αžŠαŸ„αž™αžŸαžΆαžšαž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ dracut αž˜αž·αž“αž…αŸ†αžŽαžΆαž™αž–αŸαž›αž…αŸ’αžšαžΎαž“αž›αžΎαž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžŠαžΎαž˜αžŠαŸ„αž™αž”αŸ’αžšαžΎ systemd αžŠαŸ„αž™αž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™αž€αžΆαžšαž’αŸŠαž·αž“αž‚αŸ’αžšαžΈαž”αžαžΆαžŸαŸ” αž‡αžΆαž‘αžΌαž‘αŸ…αžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž›αž–αžΆαž€αŸ’αž™αžŸαž˜αŸ’αž„αžΆαžαŸ‹αžαžΆαžŸαžšαžΆαž›αŸ‹αž–αŸαž›αžŠαŸ‚αž›αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαžšαžΏαž„αž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž”αŸ†αž•αž»αžαž“αŸ„αŸ‡αž‘αŸαŸ”
αžŠαŸ„αž™αž”αžΆαž“αžŸαžΆαž€αž›αŸ’αž”αž„αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž‡αžΆαž…αŸ’αžšαžΎαž“ αž“αž·αž„αžŸαž·αž€αŸ’αžŸαžΆαžŸαŸ€αžœαž—αŸ…αžŠαŸƒ αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŠαžΉαž„αžαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžšαž”αŸ€αž”αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‡αžΆαž˜αž½αž™ USB αž‚αžΊαž’αžΆαž…αž’αŸ’αžœαžΎαž‘αŸ…αž”αžΆαž“ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αžΆαž“αžαŸ‚αž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹αžŠαŸ„αž™αžŠαŸƒαž“αŸƒαžαžΆαžŸαž“αžΈαž˜αž½αž™αŸ—αžŠαŸ‚αž›αž˜αžΆαž“αž€αžΌαž“αžŸαŸ„αž“αŸ…αž›αžΎαžŒαžΈαžŸ USB αž αžΎαž™αžαžΆαžŸ USB αžαŸ’αž›αž½αž“αž―αž„αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αžŠαŸ„αž™αžœαžΆαžαŸ‚αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” UUID, LABEL αž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αŸαŸ” αžœαžΆαž˜αž·αž“αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž‘αŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαžαŸ‚αžšαž€αŸ’αžŸαžΆαžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž‘αŸ‡αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ† αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž“αŸ…αž‘αžΈαž”αŸ†αž•αž»αžαžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž’αŸ’αž›αžΆαž€αŸ‹αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαž„αŸ‹αž…αžΆαŸ† αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαžšαž„αŸ‹αž…αžΆαŸ†αž’αžŸαŸ‹αžšαž™αŸˆαž–αŸαž›αž‡αž·αž 7 αž†αŸ’αž“αžΆαŸ† αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŠαžΉαž„αžαžΆαž‚αŸ’αž˜αžΆαž“αž“αžšαžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹αž“αžΉαž„αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž“αŸ„αŸ‡αž‘αŸαŸ”

αž”αž‰αŸ’αž αžΆ

αž‡αžΆαž€αžΆαžšαž–αž·αžαžŽαžΆαžŸαŸ‹ αžŸαŸ’αž‘αžΎαžšαžαŸ‚αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αž“αžΆαž’αžΆαž…αžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ dracut αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αžΆαžšαž’αŸ’αžœαžΎαž±αŸ’αž™αžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‚αžΊαž˜αž·αž“αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž‘αŸ€αžαž‘αŸαŸ” αžœαžΆαž”αŸ’αžšαŸ‚αžαžΆαžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž›αž€αŸ’αžαžŽαŸˆαžŸαŸ’αžšαž”αž‚αŸ’αž“αžΆαž“αŸƒαž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž”αŸ’αžšαž–αŸαž“αŸ’αž’ αžœαžΆαž˜αž·αž“αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž‘αŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž›αž›αŸαžαž€αžΌαžŠαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž“αž·αž„αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž•αŸ’αž‘αž»αž€αŸ” αž―αž€αžŸαžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ dracut αž˜αž·αž“αž”αžΆαž“αž–αž“αŸ’αž™αž›αŸ‹αž’αŸ’αžœαžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ” αž™αŸ‰αžΆαž„β€‹αžŽαžΆβ€‹αž€αŸβ€‹αžŠαŸ„αž™ αž”αž“αŸ’αž‘αžΆαž”αŸ‹β€‹αž–αžΈβ€‹αž€αžΆαžšβ€‹αž–αž·αžŸαŸ„αž’αž“αŸβ€‹αž™αŸ‰αžΆαž„β€‹αž™αžΌαžš αžαŸ’αž‰αž»αŸ†β€‹αž’αžΆαž…β€‹αžŠαŸ„αŸ‡β€‹αžŸαŸ’αžšαžΆαž™β€‹αž”αž‰αŸ’αž αžΆβ€‹αž”αžΆαž“αŸ”

αžαžΎβ€‹αžœαžΆβ€‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšβ€‹αž™αŸ‰αžΆαž„β€‹αžŠαžΌαž…αž˜αŸ’αžαŸαž…

αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž’αŸ‚αž€αž›αžΎαž”αžΈαž―αž€αžαžΆαŸ–

  1. luks-auto-key.service - αžŸαŸ’αžœαŸ‚αž„αžšαž€αžŠαŸ’αžšαžΆαž™αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ LUKS
  2. luks-auto.target - αžŠαžΎαžšαžαž½αž“αžΆαž‘αžΈαž‡αžΆαž€αžΆαžšαž–αžΉαž„αž•αŸ’αž’αŸ‚αž€αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž―αž€αžαžΆαžŠαŸ†αž‘αžΎαž„ systemd-cryptsetup αžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž€αž‡αžΆαž˜αž½αž™
  3. luks-auto-clean.service - αžŸαž˜αŸ’αž’αžΆαžαž―αž€αžŸαžΆαžšαž”αžŽαŸ’αžαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αžŠαŸ‚αž›αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžŠαŸ„αž™ luks-auto-key.service

αž αžΎαž™ luks-auto-generator.sh αž‚αžΊαž‡αžΆαžŸαŸ’αž‚αŸ’αžšαžΈαž”αžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™ systemd αž“αž·αž„αž”αž„αŸ’αž€αžΎαžαž―αž€αžαžΆαžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžαžΊαžŽαŸ‚αž›αŸ” αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž›αžΎαž„αžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžŠαŸ„αž™αž―αž€αžαžΆ fstab αŸ”αž›αŸ”

luks-auto-generator.sh

αžŠαŸ„αž™αž”αŸ’αžšαžΎ drop-in.conf αž₯αžšαž·αž™αžΆαž”αžαž“αŸƒαžŸαŸ’αžαž„αŸ‹αžŠαžΆαžš systemd-cryptsetup αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžŠαŸ„αž™αž”αž“αŸ’αžαŸ‚αž˜ luks-auto.target αž‘αŸ…αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαŸ”

luks-auto-key.service αž“αž·αž„ luks-auto-key.sh

αž―αž€αžαžΆαž“αŸαŸ‡αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαŸ’αž‚αŸ’αžšαžΈαž” luks-auto-key.sh αžŠαŸ‚αž›αž•αŸ’αž’αŸ‚αž€αž›αžΎαž‚αŸ’αžšαžΆαž”αŸ‹αž…αž»αž… rd.luks.* αžŸαŸ’αžœαŸ‚αž„αžšαž€αž˜αŸαžŒαŸ€αžŠαŸ„αž™αž”αŸ’αžšαžΎαžŸαŸ„ αž αžΎαž™αž…αž˜αŸ’αž›αž„αž–αž½αž€αžœαžΆαž‘αŸ…αžαžαž”αžŽαŸ’αžŠαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž”αž“αŸ’αžαŸ‚αž˜αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹ αžŸαŸ„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αž»αž”αž…αŸαž‰αž–αžΈαžαžαž”αžŽαŸ’αžαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αžŠαŸ„αž™ luks-auto-clean.service αŸ”

αž”αŸ’αžšαž—αž–αŸ–

/usr/lib/dracut/modules.d/99luks-auto/module-setup.sh

#!/bin/bash

check () {
        if ! dracut_module_included "systemd"; then
                "luks-auto needs systemd in the initramfs"
                return 1
        fi
        return 255
}

depends () {
        echo "systemd"
        return 0
}

install () {
        inst "$systemdutildir/systemd-cryptsetup"
		inst_script "$moddir/luks-auto-generator.sh" "$systemdutildir/system-generators/luks-auto-generator.sh"
		inst_script "$moddir/luks-auto-key.sh" "/etc/systemd/system/luks-auto-key.sh"
		inst_script "$moddir/luks-auto.sh" "/etc/systemd/system/luks-auto.sh"
		inst "$moddir/luks-auto.target" "${systemdsystemunitdir}/luks-auto.target"
		inst "$moddir/luks-auto-key.service" "${systemdsystemunitdir}/luks-auto-key.service"
		inst "$moddir/luks-auto-clean.service" "${systemdsystemunitdir}/luks-auto-clean.service"
		ln_r "${systemdsystemunitdir}/luks-auto.target" "${systemdsystemunitdir}/initrd.target.wants/luks-auto.target"
		ln_r "${systemdsystemunitdir}/luks-auto-key.service" "${systemdsystemunitdir}/initrd.target.wants/luks-auto-key.service"
		ln_r "${systemdsystemunitdir}/luks-auto-clean.service" "${systemdsystemunitdir}/initrd.target.wants/luks-auto-clean.service"
}

/usr/lib/dracut/modules.d/99luks-auto/luks-auto-generator.sh


#!/bin/sh
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh

. /lib/dracut-lib.sh

SYSTEMD_RUN='/run/systemd/system'
CRYPTSETUP='/usr/lib/systemd/systemd-cryptsetup'
TOUT=$(getargs rd.luks.key.tout)
if [ ! -z "$TOUT" ]; then
	mkdir -p "${SYSTEMD_RUN}/luks-auto-key.service.d"
	cat > "${SYSTEMD_RUN}/luks-auto-key.service.d/drop-in.conf"  <<EOF
[Service]
Type=oneshot
ExecStartPre=/usr/bin/sleep $TOUT

EOF
fi
mkdir -p "$SYSTEMD_RUN/luks-auto.target.wants"
for argv in $(getargs rd.luks.uuid -d rd_LUKS_UUID); do
	_UUID=${argv#luks-}
	_UUID_ESC=$(systemd-escape -p $_UUID)
	mkdir -p "${SYSTEMD_RUN}/systemd-cryptsetup@luksx2d${_UUID_ESC}.service.d"
	cat > "${SYSTEMD_RUN}/systemd-cryptsetup@luksx2d${_UUID_ESC}.service.d/drop-in.conf"  <<EOF
[Unit]
After=luks-auto.target
ConditionPathExists=!/dev/mapper/luks-${_UUID}

EOF
	cat > "${SYSTEMD_RUN}/luks-auto@${_UUID_ESC}.service"  <<EOF
[Unit]
Description=luks-auto Cryptography Setup for %I
DefaultDependencies=no
Conflicts=umount.target
IgnoreOnIsolate=true
Before=luks-auto.target
BindsTo=dev-disk-byx2duuid-${_UUID_ESC}.device
After=dev-disk-byx2duuid-${_UUID_ESC}.device luks-auto-key.service
Before=umount.target

[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutSec=0
ExecStart=/etc/systemd/system/luks-auto.sh ${_UUID}
ExecStop=$CRYPTSETUP detach 'luks-${_UUID}'
Environment=DRACUT_SYSTEMD=1
StandardInput=null
StandardOutput=syslog
StandardError=syslog+console

EOF
ln -fs ${SYSTEMD_RUN}/luks-auto@${_UUID_ESC}.service $SYSTEMD_RUN/luks-auto.target.wants/luks-auto@${_UUID_ESC}.service
done

/usr/lib/dracut/modules.d/99luks-auto/luks-auto-key.service


[Unit]
Description=LUKS AUTO key searcher
After=cryptsetup-pre.target
Before=luks-auto.target
DefaultDependencies=no

[Service]
Environment=DRACUT_SYSTEMD=1
Type=oneshot
ExecStartPre=/usr/bin/sleep 1
ExecStart=/etc/systemd/system/luks-auto-key.sh
RemainAfterExit=true
StandardInput=null
StandardOutput=syslog
StandardError=syslog+console

/usr/lib/dracut/modules.d/99luks-auto/luks-auto-key.sh


#!/bin/sh
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh
export DRACUT_SYSTEMD=1

. /lib/dracut-lib.sh
MNT_B="/tmp/luks-auto"
ARG=$(getargs rd.luks.key)
IFS=$':' _t=(${ARG})
KEY=${_t[0]}
F_FIELD=''
F_VALUE=''
if [ ! -z $KEY ] && [ ! -z ${_t[1]} ];then
	IFS=$'=' _t=(${_t[1]})
	F_FIELD=${_t[0]}
	F_VALUE=${_t[1]}
	F_VALUE="${F_VALUE%"}"
	F_VALUE="${F_VALUE#"}"
fi
mkdir -p $MNT_B

finding_luks_keys(){
	local _DEVNAME=''
	local _UUID=''
	local _TYPE=''
	local _LABEL=''
	local _MNT=''
	local _KEY="$1"
	local _F_FIELD="$2"
	local _F_VALUE="$3"
	local _RET=0	
	blkid -s TYPE -s UUID -s LABEL -u filesystem | grep -v -E -e "TYPE=".*_member"" -e "TYPE="crypto_.*"" -e "TYPE="swap"" | while IFS=$'' read -r _line; do
		IFS=$':' _t=($_line);
		_DEVNAME=${_t[0]}
		_UUID=''
		_TYPE=''
		_LABEL=''
		_MNT=''
		IFS=$' ' _t=(${_t[1]});
		for _a in "${_t[@]}"; do
			IFS=$'=' _v=(${_a});
			temp="${_v[1]%"}"
			temp="${temp#"}"
			case ${_v[0]} in
				'UUID')
					_UUID=$temp
				;;
				'TYPE')
					_TYPE=$temp
				;;
				'LABEL')
					_LABEL=$temp
				;;
			esac
		done
		if [ ! -z "$_F_FIELD" ];then
			case $_F_FIELD in
				'UUID')
					[ ! -z "$_F_VALUE" ] && [ "$_UUID" != "$_F_VALUE" ] && continue
				;;
				'LABEL')
					[ ! -z "$_F_VALUE" ] && [ "$_LABEL" != "$_F_VALUE" ] && continue
				;;
				*)
					[ "$_DEVNAME" != "$_F_FIELD" ] && continue
				;;
			esac
		fi
		_MNT=$(findmnt -n -o TARGET $_DEVNAME)
		if [ -z "$_MNT" ]; then
			_MNT=${MNT_B}/KEY-${_UUID}
			mkdir -p "$_MNT" && mount -o ro "$_DEVNAME" "$_MNT"
			_RET=$?
		else
			_RET=0
		fi
		if [ "${_RET}" -eq 0 ] && [ -f "${_MNT}/${_KEY}" ]; then
			cp "${_MNT}/${_KEY}" "$MNT_B/${_UUID}.key"
			info "Found ${_MNT}/${_KEY} on ${_UUID}"
		fi
		if [[ "${_MNT}" =~ "${MNT_B}" ]]; then
			umount "$_MNT" && rm -rfd --one-file-system "$_MNT"						
		fi
	done
	return 0
}
finding_luks_keys $KEY $F_FIELD $F_VALUE

/usr/lib/dracut/modules.d/99luks-auto/luks-auto.target


[Unit]
Description=LUKS AUTO target
After=systemd-readahead-collect.service systemd-readahead-replay.service
After=cryptsetup-pre.target luks-auto-key.service
Before=cryptsetup.target

/usr/lib/dracut/modules.d/99luks-auto/luks-auto.sh


#!/bin/sh
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
# ex: ts=8 sw=4 sts=4 et filetype=sh
export DRACUT_SYSTEMD=1
. /lib/dracut-lib.sh

MNT_B="/tmp/luks-auto"
CRYPTSETUP='/usr/lib/systemd/systemd-cryptsetup'

for i in $(ls -p $MNT_B | grep -v /);do
	info "Trying $i on $1..."
	$CRYPTSETUP attach "luks-$1" "/dev/disk/by-uuid/$1" $MNT_B/$i 'tries=1'
	if [ "$?" -eq "0" ]; then
		info "Found $i for $1"
		exit 0
	fi
done
warn "No key found for $1.  Fallback to passphrase mode."

/usr/lib/dracut/modules.d/99luks-auto/luks-auto-clean.service

[Unit]
Description=LUKS AUTO key cleaner
After=cryptsetup.target
DefaultDependencies=no

[Service]
Type=oneshot
ExecStart=/usr/bin/rm -rfd --one-file-system /tmp/luks-auto

/etc/dracut.conf.d/luks-auto.conf

add_dracutmodules+=" luks-auto "

αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹


mkdir -p /usr/lib/dracut/modules.d/99luks-auto/
# Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅ΠΌ Ρ‚ΡƒΡ‚ ΠΏΠΎΡ‡Ρ‚ΠΈ всС Ρ„Π°ΠΉΠ»Ρ‹
chmod +x /usr/lib/dracut/modules.d/99luks-auto/*.sh
# создаСм Ρ„Π°ΠΉΠ» /etc/dracut.conf.d/luks-auto.conf
# И Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ Π½ΠΎΠ²Ρ‹ΠΉ initramfs
dracut -f

αžŸαŸαž…αž€αŸ’αžαžΈαžŸαž“αŸ’αž“αž·αžŠαŸ’αž‹αžΆαž“

αžŠαžΎαž˜αŸ’αž”αžΈαž—αžΆαž–αž„αžΆαž™αžŸαŸ’αžšαž½αž› αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž—αžΆαž–αž†αž”αž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™αž‡αž˜αŸ’αžšαžΎαžŸαž”αž“αŸ’αž‘αžΆαžαŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ αžαžΊαžŽαŸ‚αž› αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαž”αŸ€αž” sysvinit αžŠαŸ‚αž›αž’αŸ’αžœαžΎαž±αŸ’αž™αžœαžΆαž€αžΆαž“αŸ‹αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž”αŸ’αžšαžΎαž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž…αžΆαžŸαŸ‹αŸ—αŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹