dracut + systemd + LUKS + usbflash = Π°Π²Ρ‚ΠΎΡ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ Π½Π°Ρ‡Π°Π»Π°ΡΡŒ Π΄Π°Π²Π½ΠΎ, Π΅Ρ‰Π΅ ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Centos 7 (RHEL 7). Если Π²Ρ‹ использовали ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° дисках с Centos 6, Ρ‚ΠΎ Π½Π΅ Π±Ρ‹Π»ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с автоматичСской Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ дисков ΠΏΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ USB Ρ„Π»Π΅ΡˆΠΊΠΈ с Π½ΡƒΠΆΠ½Ρ‹ΠΌΠΈ ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ. Однако, ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ 7-ΠΊΠΈ Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎ всС Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ ΠΊΠ°ΠΊ Π²Ρ‹ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ»ΠΈ. Π’ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π½Π°ΠΉΡ‚ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π² Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π΅ dracut ΠΊ sysvinit с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ нСзамысловатой строчки Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³Π΅: echo ‘omit_dracutmodules+=" systemd "’ > /etc/dracut.conf.d/luks-workaround.conf
Π§Ρ‚ΠΎ сразу лишало нас всСй прСлСсти systemd β€” быстрый ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΉ запуск систСмных слуТб, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сокращало врСмя запуска систСмы.
Π’ΠΎΠ· ΠΈ Π½Ρ‹Π½Π΅ Ρ‚Π°ΠΌ: 905683
НС доТдавшись Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, я сдСлал Π΅Π³ΠΎ для сСбя сам, Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ дСлюсь ΠΈ с ΠΎΠ±Ρ‰Π΅ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ, ΠΊΠΎΠΌΡƒ интСрСсно, Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ дальшС.
dracut + systemd + LUKS + usbflash = Π°Π²Ρ‚ΠΎΡ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Systemd, ΠΊΠΎΠ³Π΄Π° я Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡Π°Π» Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Centos 7 Π½Π΅ Π²Ρ‹Π·Π²Π°Π» Π½ΠΈΠΊΠ°ΠΊΠΈΡ… эмоций, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΡ€ΠΎΠΌΠ΅ Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ измСнСния Π² синтаксисС управлСния слуТбами, я Π½Π΅ почувствовал Π²Π½Π°Ρ‡Π°Π»Π΅ особой Ρ€Π°Π·Π½ΠΈΡ†Ρ‹. ВпослСдствии systemd ΠΌΠ½Π΅ понравился, Π½ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΏΠΎΡ€Ρ‡Π΅Π½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ dracut Π½Π΅ особо удСляли врСмя Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ процСсса Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ systemd совмСстно с ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ дисков. Π’ Ρ†Π΅Π»ΠΎΠΌ ΠΎΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ, Π½ΠΎ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΎΡ‚ диска ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ заускС сСрвСра β€” Π½Π΅ самоС интСрСсноС занятиС.
ΠžΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π² ΠΊΡƒΡ‡Ρƒ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΉ ΠΈ ΡƒΡ‡ΠΈΡ‚Π°Π²ΡˆΠΈΡΡŒ ΠΌΠ°Π½ΡƒΠ°Π»ΠΎΠΌ я понял, Ρ‡Ρ‚ΠΎ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ systemd Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° конфигурация с USB, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Ρ€ΡƒΡ‡Π½ΠΎΠΉ ассоциации ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ диска с ΠΊΠ»ΡŽΡ‡Π΅ΠΌ Π½Π° USB дискС, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ сам USB диск ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ Π΅Π³ΠΎ UUID, LABEL Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π». ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ Ρƒ сСбя Π±Ρ‹Π»ΠΎ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, поэтому Π² ΠΈΡ‚ΠΎΠ³Π΅ я погрузился Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΈ, ΠΏΡ€ΠΎΠΆΠ΄Π°Π² Π±Π΅Π· ΠΌΠ°Π»ΠΎΠ³ΠΎ 7 Π»Π΅Ρ‚, я понял β€” Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ собираСтся Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свой ΠΏΠ»Π°Π³ΠΈΠ½ ΠΊ dracut ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ, Π½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ ΡƒΠΆΠ΅ Π½Π΅ Ρ‚Π°ΠΊ просто. Оказалось, Ρ‡Ρ‚ΠΎ Π·Π° счСт ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρ‹ запуска systemd ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ своСго ΠΊΠΎΠ΄Π° ΠΈ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ…ΠΎΠ΄ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π΅ Ρ‚Π°ΠΊ ΠΈ Π»Π΅Π³ΠΊΠΎ. ДокумСнтация ΠΊ 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/\" $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, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ использованиС Π² старых инсталяция.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com