рдбреНрд░реИрдХрдЯ + рд╕рд┐рд╕реНрдЯрдордбреА + рдПрд▓рдпреВрдХреЗрдПрд╕ + рдпреВрдПрд╕рдмреАрдлреНрд▓реИрд╢ = рдСрдЯреЛ рдЕрдирд▓реЙрдХ

рдХрд╣рд╛рдиреА рдмрд╣реБрдд рд╕рдордп рдкрд╣рд▓реЗ рд╢реБрд░реВ рд╣реБрдИ рдереА, рдЬрдм рд╕реЗрдВрдЯреЛрд╕ 7 (рдЖрд░рдПрдЪрдИрдПрд▓ 7) рд░рд┐рд▓реАрдЬрд╝ рд╣реБрдЖ рдерд╛ред рдпрджрд┐ рдЖрдкрдиреЗ Centos 6 рдХреЗ рд╕рд╛рде рдбреНрд░рд╛рдЗрд╡ рдкрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрд╡рд╢реНрдпрдХ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде USB рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдкрд░ рдбреНрд░рд╛рдЗрд╡ рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрдирд▓реЙрдХрд┐рдВрдЧ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереАред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрдм 7 рд░рд┐рд▓реАрдЬрд╝ рд╣реБрдИ, рддреЛ рдЕрдЪрд╛рдирдХ рд╕рдм рдХреБрдЫ рд╡реИрд╕рд╛ рдХрд╛рдо рдирд╣реАрдВ рд╣реБрдЖ рдЬреИрд╕рд╛ рдЖрдк рдХрд░рддреЗ рдереЗред рддрдм рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдПрдХ рд╕рд░рд▓ рд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ sysvinit рдореЗрдВ рдбреНрд░реЗрдХрдЯ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдвреВрдВрдврдирд╛ рд╕рдВрднрд╡ рдерд╛: echo 'omit_dracutmodules+=' systemd ''' > /etc/dracut.conf.d/luks-workround.conf
рдЬрд┐рд╕рдиреЗ рд╣рдореЗрдВ рддреБрд░рдВрдд рд╕рд┐рд╕реНрдЯрдордбреА рдХреА рд╕рд╛рд░реА рд╕реБрдВрджрд░рддрд╛ рд╕реЗ рд╡рдВрдЪрд┐рдд рдХрд░ рджрд┐рдпрд╛ - рд╕рд┐рд╕реНрдЯрдо рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рддреЗрдЬрд╝ рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рд▓реЙрдиреНрдЪ, рдЬрд┐рд╕рдиреЗ рд╕рд┐рд╕реНрдЯрдо рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕рдордп рдХреЛ рдХрд╛рдлреА рдХрдо рдХрд░ рджрд┐рдпрд╛ред
рдЪреАрдЬрд╝реЗрдВ рдЕрднреА рднреА рд╡рд╣реАрдВ рд╣реИрдВ: 905683
рдХрд┐рд╕реА рд╕рдорд╛рдзрд╛рди рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд┐рдП рдмрд┐рдирд╛, рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛, рдФрд░ рдЕрдм рдореИрдВ рдЗрд╕реЗ рдЬрдирддрд╛ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЖрдЧреЗ рдкрдврд╝реЗрдВред
рдбреНрд░реИрдХрдЯ + рд╕рд┐рд╕реНрдЯрдордбреА + рдПрд▓рдпреВрдХреЗрдПрд╕ + рдпреВрдПрд╕рдмреАрдлреНрд▓реИрд╢ = рдСрдЯреЛ рдЕрдирд▓реЙрдХ

рдкрд░рд┐рдЪрдп

рд╕рд┐рд╕реНрдЯрдордбреА, рдЬрдм рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рд╕реЗрдВрдЯреЛрд╕ 7 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рддреЛ рдореЗрд░реЗ рдорди рдореЗрдВ рдХреЛрдИ рднрд╛рд╡рдирд╛ рдирд╣реАрдВ рдЖрдИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реЗрд╡рд╛ рдкреНрд░рдмрдВрдзрди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдорд╛рдореВрд▓реА рдмрджрд▓рд╛рд╡ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рдкрд╣рд▓реЗ рддреЛ рдЬреНрдпрд╛рджрд╛ рдЕрдВрддрд░ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рд╣реБрдЖред рдЗрд╕рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рд╕рд┐рд╕реНрдЯрдордбреА рдкрд╕рдВрдж рдЖрдпрд╛, рд▓реЗрдХрд┐рди рдкрд╣рд▓реА рдзрд╛рд░рдгрд╛ рдереЛрдбрд╝реА рдЦрд░рд╛рдм рд╣реЛ рдЧрдИ, рдХреНрдпреЛрдВрдХрд┐ рдбреНрд░реЗрдХрдЯ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдбрд┐рд╕реНрдХ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд╕рд╛рде рд╕рд┐рд╕реНрдЯрдордбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреВрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдореЗрдВ рдЬреНрдпрд╛рджрд╛ рд╕рдордп рдирд╣реАрдВ рдмрд┐рддрд╛рдпрд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рд░ рдмрд╛рд░ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рдбрд┐рд╕реНрдХ рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдирд╣реАрдВ рд╣реИред
рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдЖрдЬрд╝рдорд╛рдиреЗ рдФрд░ рдореИрдиреБрдЕрд▓ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рд╕рд┐рд╕реНрдЯрдордбреА рдореЛрдб рдореЗрдВ рдпреВрдПрд╕рдмреА рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдпреВрдПрд╕рдмреА рдбрд┐рд╕реНрдХ рдкрд░ рдПрдХ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рдбрд┐рд╕реНрдХ рдХреЗ рдореИрдиреНрдпреБрдЕрд▓ рдПрд╕реЛрд╕рд┐рдПрд╢рди рдХреЗ рд╕рд╛рде, рдФрд░ рдпреВрдПрд╕рдмреА рдбрд┐рд╕реНрдХ рдХреЛ рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣реА рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпреВрдпреВрдЖрдИрдбреА, рд▓реЗрдмрд▓ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдЗрд╕реЗ рдШрд░ рдкрд░ рдмрдирд╛рдП рд░рдЦрдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЕрдВрдд рдореЗрдВ рдореИрдВ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдиреЗ рд▓рдЧрд╛ рдФрд░ рд▓рдЧрднрдЧ 7 рд╡рд░реНрд╖реЛрдВ рдХреЗ рдЗрдВрддрдЬрд╛рд░ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдХреЛрдИ рднреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдерд╛ред

рд╕рдорд╕реНрдпрд╛рдУрдВ

рдмреЗрд╢рдХ, рд▓рдЧрднрдЧ рдХреЛрдИ рднреА 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 рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ рдЬреЛ рд╕рд┐рд╕реНрдЯрдордб рджреНрд╡рд╛рд░рд╛ рд▓реЙрдиреНрдЪ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдХрд░реНрдиреЗрд▓ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрдХрд╛рдЗрдпрд╛рдВ рдЙрддреНрдкрдиреНрди рдХрд░рддреА рд╣реИред рдЗрд╕реА рддрд░рд╣ рдХреЗ рдЬрдирд░реЗрдЯрд░ fstab рдЗрдХрд╛рдЗрдпреЛрдВ рдЖрджрд┐ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред

luks-auto-generator.sh

рдбреНрд░реЙрдк-рдЗрди.рдХреЙрдиреНрдл рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдорд╛рдирдХ рд╕рд┐рд╕реНрдЯрдордб-рдХреНрд░рд┐рдкреНрдЯрд╕реЗрдЯрдЕрдк рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЙрдирдХреА рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ 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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ