summaryrefslogtreecommitdiffstats
path: root/0014-91crypt-loop-open-root-device-with-a-key-inside-encr.patch
diff options
context:
space:
mode:
Diffstat (limited to '0014-91crypt-loop-open-root-device-with-a-key-inside-encr.patch')
-rw-r--r--0014-91crypt-loop-open-root-device-with-a-key-inside-encr.patch79
1 files changed, 79 insertions, 0 deletions
diff --git a/0014-91crypt-loop-open-root-device-with-a-key-inside-encr.patch b/0014-91crypt-loop-open-root-device-with-a-key-inside-encr.patch
new file mode 100644
index 0000000..4f06254
--- /dev/null
+++ b/0014-91crypt-loop-open-root-device-with-a-key-inside-encr.patch
@@ -0,0 +1,79 @@
+From f855f9daafe8f5f53c5bf78188587a18e9aca142 Mon Sep 17 00:00:00 2001
+From: Leho Kraav <leho@kraav.com>
+Date: Tue, 24 Jul 2012 15:08:53 +0300
+Subject: [PATCH] 91crypt-loop: open root device with a key inside encrypted
+ loop container
+
+---
+ modules.d/91crypt-loop/crypt-loop-lib.sh | 40 ++++++++++++++++++++++++++++++++
+ modules.d/91crypt-loop/module-setup.sh | 14 +++++++++++
+ 2 files changed, 54 insertions(+)
+ create mode 100644 modules.d/91crypt-loop/crypt-loop-lib.sh
+ create mode 100644 modules.d/91crypt-loop/module-setup.sh
+
+diff --git a/modules.d/91crypt-loop/crypt-loop-lib.sh b/modules.d/91crypt-loop/crypt-loop-lib.sh
+new file mode 100644
+index 0000000..63a553c
+--- /dev/null
++++ b/modules.d/91crypt-loop/crypt-loop-lib.sh
+@@ -0,0 +1,40 @@
++#!/bin/sh
++# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
++# ex: ts=4 sw=4 sts=0 et filetype=sh
++
++command -v ask_for_password >/dev/null || . /lib/dracut-crypt-lib.sh
++
++# loop_decrypt mnt_point keypath keydev device
++#
++# Decrypts symmetrically encrypted key to standard output.
++#
++# mnt_point - mount point where <keydev> is already mounted
++# keypath - LUKS encrypted loop file path relative to <mnt_point>
++# keydev - device on which key resides; only to display in prompt
++# device - device to be opened by cryptsetup; only to display in prompt
++loop_decrypt() {
++ local mntp="$1"
++ local keypath="$2"
++ local keydev="$3"
++ local device="$4"
++
++ local key="/dev/mapper/$(basename $mntp)"
++
++ if [ ! -b $key ]; then
++ info "Keyfile has .img suffix, treating it as LUKS-encrypted loop keyfile container to unlock $device"
++
++ local loopdev=$(losetup -f "${mntp}/${keypath}" --show)
++ local opts="-d - luksOpen $loopdev $(basename $key)"
++
++ ask_for_password \
++ --cmd "cryptsetup $opts" \
++ --prompt "Password ($keypath on $keydev for $device)" \
++ --tty-echo-off
++
++ [ -b $key ] || die "Tried setting it up, but keyfile block device was still not found!"
++ else
++ info "Existing keyfile found, re-using it for $device"
++ fi
++
++ cat $key
++}
+diff --git a/modules.d/91crypt-loop/module-setup.sh b/modules.d/91crypt-loop/module-setup.sh
+new file mode 100644
+index 0000000..8170694
+--- /dev/null
++++ b/modules.d/91crypt-loop/module-setup.sh
+@@ -0,0 +1,14 @@
++check() {
++ type -P losetup >/dev/null || return 1
++
++ return 255
++}
++
++depends() {
++ echo crypt
++}
++
++install() {
++ dracut_install losetup
++ inst "$moddir/crypt-loop-lib.sh" "/lib/dracut-crypt-loop-lib.sh"
++}