#!/bin/bash copy_binary() { BINARY="$1" PREFIX="$2" ldd "${BINARY}" | awk '{print $3}' | grep '^/' | \ while read lib; do if [ -f "${lib}" ]; then mkdir -p $(dirname "${PREFIX}/${lib}") cp --archive "${lib}" "${PREFIX}/${lib}" cp --archive $(readlink -f "${lib}") $(dirname "${PREFIX}/${lib}")/ fi done cp --archive "${BINARY}" "${PREFIX}${BINARY}" } INITROOT="./initroot" mkdir -p ${INITROOT} mkdir -p ${INITROOT}/{dev,etc,mnt/root,proc,root,sys,run,usr/share,usr/bin,usr/lib,usr/libexec,usr/lib/modules} cd ${INITROOT} ln -s usr/bin bin ln -s usr/bin sbin cd usr ln -s bin sbin ln -s lib lib64 cd .. ln -s usr/lib lib ln -s usr/lib lib64 cd .. cp --archive /dev/{null,console,tty,nvme0n1,nvme0n1p2,zfs} ${INITROOT}/dev/ cp --archive /lib64/ld-linux-x86* ${INITROOT}/usr/lib/ copy_binary /usr/bin/zfs ${INITROOT} copy_binary /usr/bin/mount.zfs ${INITROOT} copy_binary /usr/bin/zpool ${INITROOT} cp --archive /usr/bin/busybox ${INITROOT}/bin/busybox cp --archive /usr/libexec/zfs ${INITROOT}/usr/libexec/zfs cp --archive /usr/share/zfs ${INITROOT}/usr/share/zfs cp --archive /usr/lib/modules/$(uname -r) ${INITROOT}/usr/lib/modules/ pushd ${INITROOT}/usr/lib/modules/$(uname -r)/kernel rm -r drivers/gpu rm -r drivers/firewire rm -r drivers/gpio rm -r drivers/leds rm -r drivers/media rm -r drivers/net rm -r drivers/vfio rm -r drivers/virtio rm -r drivers/virt rm -r drivers/soundwire rm -r drivers/firmware rm -r drivers/i2c rm -r drivers/iommu rm -r drivers/misc rm -r drivers/powercap rm -r drivers/pwm rm -r drivers/scsi rm -r drivers/usb rm -r drivers/hid rm -r drivers/extcon rm -r drivers/mux rm -r drivers/thermal rm -r drivers/vdpa rm -r drivers/dma rm -r lib/test* rm -r net rm -r sound rm -r fs rm -r mm popd cp --archive ./extras/* ${INITROOT}/ cd ${INITROOT} cat > init < ../initramfs-$(uname -r).img