dracut + systemd + LUKS + usbflash = āĻ…āĻŸā§‹ āφāύāϞāĻ•

āĻ—āĻ˛ā§āĻĒāϟāĻž āĻ…āύ⧇āĻ• āĻĻāĻŋāύ āφāϗ⧇ āĻļ⧁āϰ⧁ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ, āϝāĻ–āύ āĻāϟāĻŋ āĻŽā§āĻ•ā§āϤāĻŋ āĻĒ⧇āϝāĻŧ⧇āĻ›āĻŋāϞāĨ¤ Centos ā§­ (āφāϰāĻāχāϚāχāĻāϞ ā§­)āĨ¤ āϝāĻĻāĻŋ āφāĻĒāύāĻŋ āĻĄāĻŋāĻ¸ā§āϕ⧇ āĻāύāĻ•ā§āϰāĻŋāĻĒāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻĨāĻžāϕ⧇āύ Centos āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ ā§Ŧ-āĻ, āϏāĻ āĻŋāĻ• āϕ⧀ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āχāωāĻāϏāĻŦāĻŋ āĻĢā§āĻ˛ā§āϝāĻžāĻļ āĻĄā§āϰāĻžāχāĻ­ āϏāĻ‚āϝ⧋āĻ— āĻ•āϰāϞ⧇ āĻĄāĻŋāĻ¸ā§āĻ• āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āφāύāϞāĻ• āĻšāϤ⧇ āϕ⧋āύ⧋ āϏāĻŽāĻ¸ā§āϝāĻž āĻ›āĻŋāϞ āύāĻžāĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁, āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ ā§­ āĻĒā§āϰāĻ•āĻžāĻļ⧇āϰ āĻĒāϰ, āϏāĻŦāĻ•āĻŋāϛ⧁ āĻšāĻ āĻžā§Ž āĻ•āϰ⧇ āĻĒā§āϰāĻ¤ā§āϝāĻžāĻļāĻž āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āĻ•āĻžāϜ āĻ•āϰāĻž āĻŦāĻ¨ā§āϧ āĻ•āϰ⧇ āĻĻ⧇āϝāĻŧāĨ¤ āĻ•āύāĻĢāĻŋāϗ⧇ āĻāĻ•āϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āϞāĻžāχāύ āϝ⧋āĻ— āĻ•āϰ⧇ dracut-āϕ⧇ sysvinit-āĻ āĻĢāĻŋāϰāĻŋāϝāĻŧ⧇ āφāύāĻžāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻāĻ•āϟāĻŋ āϏāĻŽāĻžāϧāĻžāύ āĻĒāĻžāĻ“āϝāĻŧāĻž āϝāĻžāϝāĻŧ: echo 'omit_dracutmodules+=" systemd "' > /etc/dracut.conf.d/luks-workaround.conf
āϝāĻž āĻ…āĻŦāĻŋāϞāĻŽā§āĻŦ⧇ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽāĻĄā§‡āϰ āϏāĻŽāĻ¸ā§āϤ āϏ⧌āĻ¨ā§āĻĻāĻ°ā§āϝ āĻĨ⧇āϕ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āĻŦāĻžā§āϚāĻŋāϤ āĻ•āϰ⧇āϛ⧇ - āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻĒāϰāĻŋāώ⧇āĻŦāĻžāϗ⧁āϞāĻŋāϰ āĻĻā§āϰ⧁āϤ āĻāĻŦāĻ‚ āϏāĻŽāĻžāĻ¨ā§āϤāϰāĻžāϞ āĻĒā§āϰāĻŦāĻ°ā§āϤāύ, āϝāĻž āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻļ⧁āϰ⧁āϰ āϏāĻŽāϝāĻŧāϕ⧇ āωāĻ˛ā§āϞ⧇āĻ–āϝ⧋āĻ—ā§āϝāĻ­āĻžāĻŦ⧇ āĻšā§āϰāĻžāϏ āĻ•āϰ⧇āϛ⧇āĨ¤
āϜāĻŋāύāĻŋāϏ āĻāĻ–āύāĻ“ āφāϛ⧇: 905683
āϏāĻŽāĻžāϧāĻžāύ⧇āϰ āϜāĻ¨ā§āϝ āĻ…āĻĒ⧇āĻ•ā§āώāĻž āύāĻž āĻ•āϰ⧇, āφāĻŽāĻŋ āĻāϟāĻŋ āύāĻŋāĻœā§‡āϰ āϜāĻ¨ā§āϝ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āĻ›āĻŋ āĻāĻŦāĻ‚ āĻāĻ–āύ āφāĻŽāĻŋ āĻāϟāĻŋ āϜāύāϏāĻžāϧāĻžāϰāϪ⧇āϰ āϏāĻžāĻĨ⧇ āĻ­āĻžāĻ— āĻ•āϰāĻ›āĻŋ, āϝāĻžāϰāĻž āφāĻ—ā§āϰāĻšā§€, āĻĒāĻĄāĻŧ⧁āύāĨ¤
dracut + systemd + LUKS + usbflash = āĻ…āĻŸā§‹ āφāύāϞāĻ•

āĻ­ā§‚āĻŽāĻŋāĻ•āĻž

āφāĻŽāĻŋ āϝāĻ–āύ āĻĒā§āϰāĻĨāĻŽ Systemd āύāĻŋāϝāĻŧ⧇ āĻ•āĻžāϜ āĻļ⧁āϰ⧁ āĻ•āϰāĻŋ Centos ā§­ āϕ⧋āύ⧋ āωāĻ¤ā§āϤ⧇āϜāύāĻž āϜāĻžāĻ—āĻžāϝāĻŧāύāĻŋ, āĻ•āĻžāϰāĻŖ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āĻŽā§āϝāĻžāύ⧇āϜāĻŽā§‡āĻ¨ā§āϟ āϏāĻŋāύāĻŸā§āϝāĻžāĻ•ā§āϏ⧇āϰ āĻāĻ•āϟāĻŋ āϏāĻžāĻŽāĻžāĻ¨ā§āϝ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ›āĻžāĻĄāĻŧāĻž, āφāĻŽāĻŋ āĻĒā§āϰāĻĨāĻŽā§‡ āϤ⧇āĻŽāύ āϕ⧋āύ⧋ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āϞāĻ•ā§āĻˇā§āϝ āĻ•āϰāĻŋāύāĻŋāĨ¤ āĻ…āĻŦāĻļ⧇āώ⧇ āφāĻŽāĻŋ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽāĻĄāĻŋ āĻĒāĻ›āĻ¨ā§āĻĻ āĻ•āϰāϤ⧇ āĻļ⧁āϰ⧁ āĻ•āϰāĻŋ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āφāĻŽāĻžāϰ āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ• āϧāĻžāϰāĻŖāĻžāϟāĻŋ āĻ•āĻŋāϛ⧁āϟāĻž āĻ•āϞ⧁āώāĻŋāϤ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ āĻāχ āĻ•āĻžāϰāϪ⧇ āϝ⧇, āĻĄā§āϰāĻžāϕ⧁āϟ āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰāϰāĻž āĻĄāĻŋāĻ¸ā§āĻ• āĻāύāĻ•ā§āϰāĻŋāĻĒāĻļāύ⧇āϰ āϏāĻžāĻĨ⧇ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽāĻĄāĻŋ āĻŦ⧁āϟ āĻĒā§āϰāϏ⧇āϏāϕ⧇ āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āϖ⧁āĻŦ āĻŦ⧇āĻļāĻŋ āϏāĻŽāϝāĻŧ āĻŦā§āϝāϝāĻŧ āĻ•āϰ⧇āύāύāĻŋāĨ¤ āĻāϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻ•āĻžāϜ āĻ•āϰāϤ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ āĻāϟāĻŋ āϚāĻžāϞ⧁ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āφāĻŽāĻžāϕ⧇ āφāĻŽāĻžāϰ āĻĄāĻŋāĻ¸ā§āĻ• āĻĒāĻžāϏāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻĻāĻŋāϤ⧇ āĻšāϤ⧋āĨ¤ āϏāĻžāĻ°ā§āĻ­āĻžāϰ — āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āφāĻ•āĻ°ā§āώāĻŖā§€āϝāĻŧ āĻ•āĻžāĻ°ā§āϝāĻ•āϞāĻžāĻĒ āύāϝāĻŧāĨ¤
āĻāĻ•āϗ⧁āĻšā§āĻ› āϏ⧁āĻĒāĻžāϰāĻŋāĻļ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞāϟāĻŋ āĻ…āĻ§ā§āϝāϝāĻŧāύ āĻ•āϰāĻžāϰ āĻĒāϰ⧇, āφāĻŽāĻŋ āĻŦ⧁āĻāϤ⧇ āĻĒ⧇āϰ⧇āĻ›āĻŋāϞāĻžāĻŽ āϝ⧇ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽāĻĄ āĻŽā§‹āĻĄā§‡ USB āĻāϰ āϏāĻžāĻĨ⧇ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āϏāĻŽā§āĻ­āĻŦ, āϤāĻŦ⧇ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻāĻ•āϟāĻŋ USB āĻĄāĻŋāĻ¸ā§āϕ⧇āϰ āĻāĻ•āϟāĻŋ āϕ⧀ āϏāĻš āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĄāĻŋāĻ¸ā§āϕ⧇āϰ āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞ āĻ…ā§āϝāĻžāϏ⧋āϏāĻŋāϝāĻŧ⧇āĻļāύ⧇āϰ āϏāĻžāĻĨ⧇ āĻāĻŦāĻ‚ USB āĻĄāĻŋāĻ¸ā§āĻ•āϟāĻŋ āϕ⧇āĻŦāϞāĻŽāĻžāĻ¤ā§āϰ āϤāĻžāϰ āĻĻā§āĻŦāĻžāϰāĻž āϝ⧁āĻ•ā§āϤ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ UUID, LABEL āĻ•āĻžāϜ āĻ•āϰ⧇āύāĻŋāĨ¤ āĻŦāĻžāĻĄāĻŧāĻŋāϤ⧇ āĻāϟāĻŋ āĻŦāϜāĻžāϝāĻŧ āϰāĻžāĻ–āĻž āϖ⧁āĻŦ āϏ⧁āĻŦāĻŋāϧāĻžāϜāύāĻ• āĻ›āĻŋāϞ āύāĻž, āϤāĻžāχ āĻļ⧇āώ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āφāĻŽāĻŋ āĻ…āĻĒ⧇āĻ•ā§āώāĻžāϝāĻŧ āĻĄā§āĻŦ⧇ āϗ⧇āϞāĻžāĻŽ āĻāĻŦāĻ‚ āĻĒā§āϰāĻžāϝāĻŧ 7 āĻŦāĻ›āϰ āĻ…āĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰāĻžāϰ āĻĒāϰ⧇, āφāĻŽāĻŋ āĻŦ⧁āĻāϤ⧇ āĻĒ⧇āϰ⧇āĻ›āĻŋāϞāĻžāĻŽ āϝ⧇ āϕ⧇āωāχ āϏāĻŽāĻ¸ā§āϝāĻžāϰ āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰāϤ⧇ āϝāĻžāĻšā§āϛ⧇ āύāĻžāĨ¤

āϏāĻŽāĻ¸ā§āϝāĻžāϰ

āĻ…āĻŦāĻļā§āϝāχ, āĻĒā§āϰāĻžāϝāĻŧ āϝ⧇ āϕ⧇āω āĻĄā§āϰāĻžāĻ•āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āϤāĻžāĻĻ⧇āϰ āύāĻŋāϜāĻ¸ā§āĻŦ āĻĒā§āϞāĻžāĻ—āχāύ āϞāĻŋāĻ–āϤ⧇ āĻĒāĻžāϰ⧇, āϤāĻŦ⧇ āĻāϟāĻŋ āĻ•āĻžāϜ āĻ•āϰāĻž āφāϰ āĻāϤ āϏāĻšāϜ āύāϝāĻŧāĨ¤ āĻĻ⧇āĻ–āĻž āϗ⧇āϞ āϝ⧇ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽāĻĄ āĻ¸ā§āϟāĻžāĻ°ā§āϟāφāĻĒ⧇āϰ āϏāĻŽāĻžāĻ¨ā§āϤāϰāĻžāϞ āĻĒā§āϰāĻ•ā§ƒāϤāĻŋāϰ āĻ•āĻžāϰāϪ⧇, āφāĻĒāύāĻžāϰ āϕ⧋āĻĄ āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āĻ•āϰāĻž āĻāĻŦāĻ‚ āϞ⧋āĻĄāĻŋāĻ‚ āĻ…āĻ—ā§āϰāĻ—āϤāĻŋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻž āĻāϤ āϏāĻšāϜ āύāϝāĻŧāĨ¤ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ āĻĄā§āϰāĻžāĻ•āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āϏāĻŦāĻ•āĻŋāϛ⧁ āĻŦā§āϝāĻžāĻ–ā§āϝāĻž āĻ•āϰ⧇āύāĻŋāĨ¤ āϝāĻžāχāĻšā§‹āĻ•, āĻĻā§€āĻ°ā§āϘ āĻĒāϰ⧀āĻ•ā§āώāĻžāϰ āĻĒāϰ⧇, āφāĻŽāĻŋ āϏāĻŽāĻ¸ā§āϝāĻžāϟāĻŋ āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰāϤ⧇ āϏāĻ•ā§āώāĻŽ āĻšāϝāĻŧ⧇āĻ›āĻŋāĨ¤

āĻāϟāĻž āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇

āĻāϟāĻŋ āϤāĻŋāύāϟāĻŋ āχāωāύāĻŋāĻŸā§‡āϰ āωāĻĒāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋ āĻ•āϰ⧇:

  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

DDoS āϏ⧁āϰāĻ•ā§āώāĻž, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϏāĻš āϏāĻžāχāϟāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ đŸ”Ĩ DDoS āϏ⧁āϰāĻ•ā§āώāĻž āϏāĻš āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ | ProHoster