diff options
author | William A. Kennington III <william@wkennington.com> | 2015-03-28 17:15:41 -0700 |
---|---|---|
committer | William A. Kennington III <william@wkennington.com> | 2015-03-28 18:37:29 -0700 |
commit | 4868649f037c4fe80034f281212b8ccd2d0ac148 (patch) | |
tree | bd56e8aef16495981a03e8c41e300d0ee03bed02 /nixos/modules/system | |
parent | b1e854d660b03cc3f7f25dce44e673b9e5bcaf32 (diff) | |
download | nixlib-4868649f037c4fe80034f281212b8ccd2d0ac148.tar nixlib-4868649f037c4fe80034f281212b8ccd2d0ac148.tar.gz nixlib-4868649f037c4fe80034f281212b8ccd2d0ac148.tar.bz2 nixlib-4868649f037c4fe80034f281212b8ccd2d0ac148.tar.lz nixlib-4868649f037c4fe80034f281212b8ccd2d0ac148.tar.xz nixlib-4868649f037c4fe80034f281212b8ccd2d0ac148.tar.zst nixlib-4868649f037c4fe80034f281212b8ccd2d0ac148.zip |
nixos/initrd: Generic library copying
Diffstat (limited to 'nixos/modules/system')
-rw-r--r-- | nixos/modules/system/boot/luksroot.nix | 28 | ||||
-rw-r--r-- | nixos/modules/system/boot/stage-1.nix | 58 |
2 files changed, 44 insertions, 42 deletions
diff --git a/nixos/modules/system/boot/luksroot.nix b/nixos/modules/system/boot/luksroot.nix index da5bb8fe0661..20eee8e06e07 100644 --- a/nixos/modules/system/boot/luksroot.nix +++ b/nixos/modules/system/boot/luksroot.nix @@ -405,29 +405,19 @@ in # copy the cryptsetup binary and it's dependencies boot.initrd.extraUtilsCommands = '' - cp -pdv ${pkgs.cryptsetup}/sbin/cryptsetup $out/bin - - cp -pdv ${pkgs.libgcrypt_1_6}/lib/libgcrypt*.so.* $out/lib - cp -pdv ${pkgs.libgpgerror}/lib/libgpg-error*.so.* $out/lib - cp -pdv ${pkgs.cryptsetup}/lib/libcryptsetup*.so.* $out/lib - cp -pdv ${pkgs.popt}/lib/libpopt*.so.* $out/lib + copy_bin_and_libs ${pkgs.cryptsetup}/bin/cryptsetup ${optionalString luks.yubikeySupport '' - cp -pdv ${pkgs.ykpers}/bin/ykchalresp $out/bin - cp -pdv ${pkgs.ykpers}/bin/ykinfo $out/bin - cp -pdv ${pkgs.openssl}/bin/openssl $out/bin - - cc -O3 -I${pkgs.openssl}/include -L${pkgs.openssl}/lib ${./pbkdf2-sha512.c} -o $out/bin/pbkdf2-sha512 -lcrypto - strip -s $out/bin/pbkdf2-sha512 + copy_bin_and_libs ${pkgs.ykpers}/bin/ykchalresp + copy_bin_and_libs ${pkgs.ykpers}/bin/ykinfo + copy_bin_and_libs ${pkgs.openssl}/bin/openssl - cp -pdv ${pkgs.libusb1}/lib/libusb*.so.* $out/lib - cp -pdv ${pkgs.ykpers}/lib/libykpers*.so.* $out/lib - cp -pdv ${pkgs.libyubikey}/lib/libyubikey*.so.* $out/lib - cp -pdv ${pkgs.openssl}/lib/libssl*.so.* $out/lib - cp -pdv ${pkgs.openssl}/lib/libcrypto*.so.* $out/lib + cc -O3 -I${pkgs.openssl}/include -L${pkgs.openssl}/lib ${./pbkdf2-sha512.c} -o pbkdf2-sha512 -lcrypto + strip -s pbkdf2-sha512 + copy_bin_and_libs pbkdf2-sha512 - mkdir -p $out/etc/ssl - cp -pdv ${pkgs.openssl}/etc/ssl/openssl.cnf $out/etc/ssl + mkdir -p $out/etc/ssl + cp -pdv ${pkgs.openssl}/etc/ssl/openssl.cnf $out/etc/ssl cat > $out/bin/openssl-wrap <<EOF #!$out/bin/sh diff --git a/nixos/modules/system/boot/stage-1.nix b/nixos/modules/system/boot/stage-1.nix index 2c3dfd2f460f..ec696d838ccc 100644 --- a/nixos/modules/system/boot/stage-1.nix +++ b/nixos/modules/system/boot/stage-1.nix @@ -39,42 +39,53 @@ let mkdir -p $out/bin $out/lib ln -s $out/bin $out/sbin - # Copy what we need from Glibc. + # Copy ld manually since it isn't detected correctly cp -pv ${pkgs.glibc}/lib/ld*.so.? $out/lib - cp -pv ${pkgs.glibc}/lib/libc.so.* $out/lib - cp -pv ${pkgs.glibc}/lib/libm.so.* $out/lib - cp -pv ${pkgs.glibc}/lib/libpthread.so.* $out/lib - cp -pv ${pkgs.glibc}/lib/librt.so.* $out/lib - cp -pv ${pkgs.glibc}/lib/libdl.so.* $out/lib - cp -pv ${pkgs.gcc.cc}/lib*/libgcc_s.so.* $out/lib + + copy_bin_and_libs () { + [ -f "$out/bin/$(basename $1)" ] && return 0 + cp -pdv $1 $out/bin + LDD="$(ldd $1)" + [ "$?" -eq "1" ] && return 0 + LIBS="$(echo "$LDD" | awk '{print $3}' | sed '/^$/d')" + for LIB in $LIBS; do + [ ! -f "$out/lib/$(basename $LIB)" ] && cp -pdv $LIB $out/lib + while [ "$(readlink $LIB)" != "" ]; do + LINK="$(readlink $LIB)" + if [ "${LINK:0:1}" != "/" ]; then + LINK="$(dirname $LIB)/$LINK" + fi + LIB="$LINK" + [ ! -f "$out/lib/$(basename $LIB)" ] && cp -pdv $LIB $out/lib + done + done + return 0 + } # Copy BusyBox. - cp -pvd ${pkgs.busybox}/bin/* ${pkgs.busybox}/sbin/* $out/bin/ + for BIN in ${pkgs.busybox}/{s,}bin/*; do + copy_bin_and_libs $BIN + done # Copy some utillinux stuff. - cp -vf --remove-destination ${pkgs.utillinux}/sbin/blkid $out/bin - cp -pdv ${pkgs.utillinux}/lib/libblkid*.so.* $out/lib - cp -pdv ${pkgs.utillinux}/lib/libuuid*.so.* $out/lib + copy_bin_and_libs ${pkgs.utillinux}/sbin/blkid # Copy dmsetup and lvm. - cp -v ${pkgs.lvm2}/sbin/dmsetup $out/bin/dmsetup - cp -v ${pkgs.lvm2}/sbin/lvm $out/bin/lvm - cp -v ${pkgs.lvm2}/lib/libdevmapper.so.*.* $out/lib - cp -v ${pkgs.systemd}/lib/libsystemd.so.* $out/lib + copy_bin_and_libs ${pkgs.lvm2}/sbin/dmsetup + copy_bin_and_libs ${pkgs.lvm2}/sbin/lvm # Add RAID mdadm tool. - cp -v ${pkgs.mdadm}/sbin/mdadm $out/bin/mdadm + copy_bin_and_libs ${pkgs.mdadm}/sbin/mdadm # Copy udev. - cp -v ${udev}/lib/systemd/systemd-udevd ${udev}/bin/udevadm $out/bin - cp -v ${udev}/lib/udev/*_id $out/bin - cp -pdv ${udev}/lib/libudev.so.* $out/lib - cp -v ${pkgs.kmod}/lib/libkmod.so.* $out/lib - cp -v ${pkgs.acl}/lib/libacl.so.* $out/lib - cp -v ${pkgs.attr}/lib/libattr.so.* $out/lib + copy_bin_and_libs ${udev}/lib/systemd/systemd-udevd + copy_bin_and_libs ${udev}/bin/udevadm + for BIN in ${udev}/lib/udev/*_id; do + copy_bin_and_libs $BIN + done # Copy modprobe. - cp -v ${pkgs.kmod}/bin/kmod $out/bin/ + copy_bin_and_libs ${pkgs.kmod}/bin/kmod ln -sf kmod $out/bin/modprobe ${config.boot.initrd.extraUtilsCommands} @@ -101,6 +112,7 @@ let $out/bin/ash -c 'echo hello world' | grep "hello world" export LD_LIBRARY_PATH=$out/lib $out/bin/mount --help 2>&1 | grep "BusyBox" + $out/bin/blkid >/dev/null $out/bin/udevadm --version $out/bin/dmsetup --version 2>&1 | tee -a log | grep "version:" LVM_SYSTEM_DIR=$out $out/bin/lvm version 2>&1 | tee -a log | grep "LVM" |