dracut + systemd + LUKS + usbflash = рд╕реНрд╡рдд: рдЕрдирд▓рдХ

рдХрдерд╛ рдзреЗрд░реИ рдкрд╣рд┐рд▓реЗ рд╕реБрд░реБ рднрдпреЛ, рдЬрдм Centos 7 (RHEL 7) рд░рд┐рд▓реАрдЬ рднрдПрдХреЛ рдерд┐рдпреЛред рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ Centos 6 рд╕рдБрдЧ рдбреНрд░рд╛рдЗрднрд╣рд░реВрдорд╛ рдЗрдиреНрдХреНрд░рд┐рдкреНрд╕рди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрднрдпреЛ рднрдиреЗ, рддрдкрд╛рдИрдВрд▓реЗ рдЖрд╡рд╢реНрдпрдХ рдХреБрдЮреНрдЬреАрд╣рд░реВрд╕рдБрдЧ USB рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрдн рдЬрдбрд╛рди рдЧрд░реНрджрд╛ рдбреНрд░рд╛рдЗрднрд╣рд░реВрдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрдирд▓рдХрдорд╛ рдХреБрдиреИ рд╕рдорд╕реНрдпрд╛ рдерд┐рдПрдиред рдпрджреНрдпрдкрд┐, рдЬрдм 7 рд░рд┐рд▓рд┐рдЬ рднрдпреЛ, рдЕрдЪрд╛рдирдХ рд╕рдмреИ рдХреБрд░рд╛рд▓реЗ рддрдкрд╛рдИрд▓рд╛рдИ рдмрд╛рдиреА рдкрд░реЗрдХреЛ рдЬрд╕реНрддреЛ рдХрд╛рдо рдЧрд░реЗрдиред рддреНрдпрд╕рдкрдЫрд┐ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдорд╛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд░реЗрдЦрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдбреНрд░рд╛рдХрдЯрд▓рд╛рдИ рд╕рд┐рд╕реНрднрд┐рдирд┐рдЯрдорд╛ рдлрд░реНрдХрд╛рдЙрдиреЗ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬреНрди рд╕рдореНрднрд╡ рднрдпреЛ: echo тАШomit_dracutmodules+=" systemd "тАЩ > /etc/dracut.conf.d/luks-workaround.confред
рдЬрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рддреБрд░реБрдиреНрддреИ рдкреНрд░рдгрд╛рд▓реАрдХреЛ рд╕рдмреИ рд╕реБрдиреНрджрд░рддрд╛рдмрд╛рдЯ рд╡рдЮреНрдЪрд┐рдд рдЧрд░реНтАНрдпреЛ - рдкреНрд░рдгрд╛рд▓реА рд╕реЗрд╡рд╛рд╣рд░реВрдХреЛ рджреНрд░реБрдд рд░ рд╕рдорд╛рдирд╛рдиреНрддрд░ рдкреНрд░рдХреНрд╖реЗрдкрдг, рдЬрд╕рд▓реЗ рдкреНрд░рдгрд╛рд▓реА рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕рдордпрд▓рд╛рдИ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд░реВрдкрдорд╛ рдШрдЯрд╛рдПрдХреЛ рдЫред
рдЪреАрдЬрд╣рд░реВ рдЕрдЭреИ рддреНрдпрд╣рд╛рдБ рдЫрдиреН: 905683
рд╕рдорд╛рдзрд╛рдирдХреЛ рдкреНрд░рддреАрдХреНрд╖рд╛ рдирдЧрд░реА, рдореИрд▓реЗ рдпрд╕рд▓рд╛рдИ рдЖрдлреНрдиреИ рд▓рд╛рдЧрд┐ рдмрдирд╛рдПрдХреЛ рдЫреБ, рд░ рдЕрдм рдо рдпрд╕рд▓рд╛рдИ рдЬрдирддрд╛рд╕рдБрдЧ рд╕рд╛рдЭрд╛ рдЧрд░реНрджреИрдЫреБ, рдЬреЛ рдЗрдЪреНрдЫреБрдХ рдЫрдиреН, рдкрдвреНрдиреБрд╣реЛрд╕реНред
dracut + systemd + LUKS + usbflash = рд╕реНрд╡рдд: рдЕрдирд▓рдХ

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

Systemd, рдЬрдм рдореИрд▓реЗ рдкрд╣рд┐рд▓реЛ рдкрдЯрдХ Centos 7 рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди рдерд╛рд▓реЗрдВ, рдХреБрдиреИ рднрд╛рд╡рдирд╛рд╣рд░реВ рдЙрддреНрдкрдиреНрди рдЧрд░реЗрди, рдХрд┐рдирдХрд┐ рд╕реЗрд╡рд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рд╡рд╛рдХреНрдп рд░рдЪрдирд╛рдорд╛ рд╕рд╛рдиреЛ рдкрд░рд┐рд╡рд░реНрддрди рдмрд╛рд╣реЗрдХ, рдореИрд▓реЗ рд╕реБрд░реБрдорд╛ рдзреЗрд░реИ рдлрд░рдХ рдорд╣рд╕реБрд╕ рдЧрд░реЗрдиред рдкрдЫрд┐, рдорд▓рд╛рдИ systemd рдорди рдкрд░реНрдпреЛ, рддрд░ рдкрд╣рд┐рд▓реЛ рдЫрд╛рдк рдЕрд▓рд┐рдХрддрд┐ рдмрд┐рдЧреНрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ, рдХрд┐рдирдХрд┐ рдбреНрд░рд╛рдХрдЯ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдбрд┐рд╕реНрдХ рдИрдиреНрдХреНрд░рд┐рдкреНрд╢рдирдХреЛ рд╕рдВрдпреЛрдЬрдирдорд╛ systemd рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдмреБрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрди рдзреЗрд░реИ рд╕рдордп рдЦрд░реНрдЪ рдЧрд░реЗрдирдиреНред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рдпрд╕рд▓реЗ рдХрд╛рдо рдЧрд░реНрдпреЛ, рддрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрдЯрдХ рд╕рд░реНрднрд░ рд╕реБрд░реБ рд╣реБрдБрджрд╛ рдбрд┐рд╕реНрдХ рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрдиреБ рд╕рдмреИрднрдиреНрджрд╛ рд░реЛрдЪрдХ рдХреБрд░рд╛ рд╣реЛрдЗрдиред
рд╕рд┐рдлрд╛рд░рд┐рд╕рд╣рд░реВрдХреЛ рдЧреБрдЪреНрдЫрд╛ рдкреНрд░рдпрд╛рд╕ рдЧрд░реЗрдкрдЫрд┐ рд░ рдореНрдпрд╛рдиреБрдЕрд▓ рдЕрдзреНрдпрдпрди рдЧрд░реЗрдкрдЫрд┐, рдореИрд▓реЗ рдорд╣рд╕реБрд╕ рдЧрд░реЗрдВ рдХрд┐ USB рд╕рдБрдЧ systemd рдореЛрдб рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд╕рдореНрднрд╡ рдЫ, рддрд░ рдХреЗрд╡рд▓ USB рдбрд┐рд╕реНрдХрдорд╛ рдХреБрдЮреНрдЬреАрд╕рдБрдЧ рдкреНрд░рддреНрдпреЗрдХ рдбрд┐рд╕реНрдХрдХреЛ рдореНрдпрд╛рдиреБрдЕрд▓ рдПрд╕реЛрд╕рд┐рдПрд╢рдирдХреЛ рд╕рд╛рде, рд░ USB рдбрд┐рд╕реНрдХ рдЖрдлреИрдВ рдорд╛рддреНрд░ рдпрд╕рдХреЛ рджреНрд╡рд╛рд░рд╛ рд╕рдореНрдмрджреНрдз рд╣реБрди рд╕рдХреНрдЫред UUID, LABEL рд▓реЗ рдХрд╛рдо рдЧрд░реЗрдиред рдШрд░рдорд╛ рдпрд╕рд▓рд╛рдИ рдХрд╛рдпрдо рд░рд╛рдЦреНрди рдзреЗрд░реИ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдерд┐рдПрди, рддреНрдпрд╕реИрд▓реЗ рдЕрдиреНрддрдорд╛ рдо рдкрд░реНрдЦрд╛рдЗрдорд╛ рдбреБрдмреЗрдВ рд░, рд▓рдЧрднрдЧ 7 рд╡рд░реНрд╖рдХреЛ рдкрд░реНрдЦрд╛рдЗ рдкрдЫрд┐, рдореИрд▓реЗ рдорд╣рд╕реБрд╕ рдЧрд░реЗрдВ рдХрд┐ рдХрд╕реИрд▓реЗ рдкрдирд┐ рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рдЬрд╛рдБрджреИрдЫред

рд╕рдорд╕реНрдпрд╛рд╣рд░реВ

рдирд┐рд╕реНрд╕рдиреНрджреЗрд╣, рд▓рдЧрднрдЧ рдЬреЛ рдХреЛрд╣реАрд▓реЗ рдкрдирд┐ dracut рдХреЛ рд▓рд╛рдЧреА рдЖрдлреНрдиреИ рдкреНрд▓рдЧрдЗрди рд▓реЗрдЦреНрди рд╕рдХреНрдЫ, рддрд░ рдпрд╕рд▓рд╛рдИ рдХрд╛рдо рдЧрд░реНрди рдЕрдм рддреНрдпрддрд┐ рд╕рдЬрд┐рд▓реЛ рдЫреИрдиред рдпреЛ рдкрддреНрддрд╛ рд▓рд╛рдЧреНрдпреЛ рдХрд┐ systemd рд╕реНрдЯрд╛рд░реНрдЯрдЕрдкрдХреЛ рд╕рдорд╛рдирд╛рдиреНрддрд░ рдкреНрд░рдХреГрддрд┐рдХреЛ рдХрд╛рд░рдгрд▓реЗ рдЧрд░реНрджрд╛, рддрдкрд╛рдЗрдБрдХреЛ рдХреЛрдб рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрди рд░ рд▓реЛрдбрд┐рдЩ рдкреНрд░рдЧрддрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рд╕рдЬрд┐рд▓реЛ рдЫреИрдиред рдбреНрд░рд╛рдХрдЯрдХрд╛ рд▓рд╛рдЧрд┐ рдХрд╛рдЧрдЬрд╛рддрд▓реЗ рд╕рдмреИ рдХреБрд░рд╛ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЧрд░реНрджреИрдиред рддрд░, рд▓рд╛рдореЛ рдкреНрд░рдпрд╛рд╕ рдкрдЫрд┐, рдореИрд▓реЗ рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рд╕рдХреНрд╖рдо рднрдПрдБред

рдпрд╕рд▓реЗ рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрдЫ

рдпреЛ рддреАрди рдПрдХрд╛рдЗрд╣рд░реВрдорд╛ рдЖрдзрд╛рд░рд┐рдд рдЫ:

  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 рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, рддрд┐рдиреАрд╣рд░реВрдХреЛ рдирд┐рд░реНрднрд░рддрд╛рдорд╛ luks-auto.target рдердкреЗрд░ рдорд╛рдирдХ systemd-cryptsetup рдХреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдиреНрдЫред

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди