commit:     f63dd6233d70692d56146a982b6a9dbd84012ff0
Author:     Thomas Deutschmann <whissi <AT> gentoo <DOT> org>
AuthorDate: Sat Mar  9 20:47:00 2019 +0000
Commit:     Thomas Deutschmann <whissi <AT> gentoo <DOT> org>
CommitDate: Sat Mar  9 20:50:00 2019 +0000
URL:        https://gitweb.gentoo.org/proj/genkernel.git/commit/?id=f63dd623

Add LUKS2 support

LUKS2 requires libgcc_s.so.1 because libargon2 uses pthread_cancel.

Re-use code from append_zfs instead of duplicating code.

Signed-off-by: Thomas Deutschmann <whissi <AT> gentoo.org>

 gen_initramfs.sh | 51 ++++++++++++++++++++++++++++++++++++++-------------
 1 file changed, 38 insertions(+), 13 deletions(-)

diff --git a/gen_initramfs.sh b/gen_initramfs.sh
index 9b8f76c..420e9fe 100755
--- a/gen_initramfs.sh
+++ b/gen_initramfs.sh
@@ -507,19 +507,7 @@ append_zfs(){
                fi
        done
 
-       # Copy binaries
-       # Include libgcc_s.so.1 to workaround zfsonlinux/zfs#4749
-       local libgccpath
-       if type gcc-config 2>&1 1>/dev/null; then
-               libgccpath="/usr/lib/gcc/$(s=$(gcc-config -c); echo 
${s%-*}/${s##*-})/libgcc_s.so.1"
-       fi
-       if [[ ! -f ${libgccpath} ]]; then
-               libgccpath="/usr/lib/gcc/*/*/libgcc_s.so.1"
-       fi
-
-       copy_binaries "${TEMP}/initramfs-zfs-temp" 
/sbin/{mount.zfs,zdb,zfs,zpool} ${libgccpath}
-       cd "${TEMP}/initramfs-zfs-temp/lib64"
-       ln -s "..${libgccpath}"
+       copy_binaries "${TEMP}/initramfs-zfs-temp" 
/sbin/{mount.zfs,zdb,zfs,zpool}
 
        cd "${TEMP}/initramfs-zfs-temp/"
        log_future_cpio_content
@@ -548,6 +536,38 @@ append_btrfs() {
        rm -rf "${TEMP}/initramfs-btrfs-temp" > /dev/null
 }
 
+append_libgcc_s() {
+       if [ -d "${TEMP}/initramfs-libgcc_s-temp" ]
+       then
+               rm -r "${TEMP}/initramfs-libgcc_s-temp"
+       fi
+
+       mkdir -p "${TEMP}/initramfs-libgcc_s-temp"
+
+       # Include libgcc_s.so.1:
+       #   - workaround for zfsonlinux/zfs#4749
+       #   - required for LUKS2 (libargon2 uses pthread_cancel)
+       local libgccpath
+       if type gcc-config 2>&1 1>/dev/null; then
+               libgccpath="/usr/lib/gcc/$(s=$(gcc-config -c); echo 
${s%-*}/${s##*-})/libgcc_s.so.1"
+       fi
+       if [[ ! -f ${libgccpath} ]]; then
+               libgccpath="/usr/lib/gcc/*/*/libgcc_s.so.1"
+       fi
+
+       # Copy binaries
+       copy_binaries "${TEMP}/initramfs-libgcc_s-temp" ${libgccpath}
+       cd "${TEMP}/initramfs-libgcc_s-temp/lib64"
+       ln -s "..${libgccpath}"
+
+       cd "${TEMP}/initramfs-libgcc_s-temp/"
+       log_future_cpio_content
+       find . -print | cpio ${CPIO_ARGS} --append -F "${CPIO}" \
+                       || gen_die "compressing libgcc_s cpio"
+       cd "${TEMP}"
+       rm -rf "${TEMP}/initramfs-libgcc_s-temp" > /dev/null
+}
+
 append_linker() {
        if [ -d "${TEMP}/initramfs-linker-temp" ]
        then
@@ -990,6 +1010,11 @@ create_initramfs() {
 
        append_data 'modprobed'
 
+       if isTrue "${ZFS}" || isTrue "${LUKS}"
+       then
+               append_data 'libgcc_s'
+       fi
+
        if isTrue "${FIRMWARE}" && [ -n "${FIRMWARE_DIR}" ]
        then
                append_data 'firmware'

Reply via email to