#!/bin/bash . ../.config INITRAMFS=/tmp/$LIVEKITNAME-initramfs-$$ # copy file to initramfs tree, including # all library dependencies (as shown by ldd) # $1 = file to copy (full path) copy_including_deps() { # if source doesn't exist or target exists, do nothing if [ ! -e "$1" -o -e "$INITRAMFS"/"$1" ]; then return fi cp -R --parents "$1" "$INITRAMFS" if [ -L "$1" ]; then DIR="$(dirname "$1")" LNK="$(readlink "$1")" copy_including_deps "$(cd "$DIR"; realpath -s "$LNK")" fi ldd "$1" 2>/dev/null | sed -r "s/.*=>|[(].*//g" | sed -r "s/^\\s+|\\s+\$//" \ | while read LIB; do copy_including_deps "$LIB" done shift if [ "$1" != "" ]; then copy_including_deps "$@" fi } rm -Rf $INITRAMFS mkdir -p $INITRAMFS/{bin,dev,etc,lib,lib64,mnt,proc,root,run,sbin,sys,tmp,usr,var/log} cd static ./update cd .. cp static/{busybox,mount.ntfs-3g} $INITRAMFS/bin chmod a+x $INITRAMFS/bin/{busybox,mount.ntfs-3g} $INITRAMFS/bin/busybox | grep , | grep -v Copyright | tr "," " " | while read LINE; do for TOOL in $LINE; do ln -s busybox $INITRAMFS/bin/$TOOL ln -s ../bin/busybox $INITRAMFS/sbin/$TOOL done done rm $INITRAMFS/{s,}bin/init mknod $INITRAMFS/dev/console c 5 1 mknod $INITRAMFS/dev/null c 1 3 mknod $INITRAMFS/dev/ram0 b 1 0 mknod $INITRAMFS/dev/tty1 c 4 1 mknod $INITRAMFS/dev/tty2 c 4 2 mknod $INITRAMFS/dev/tty3 c 4 3 mknod $INITRAMFS/dev/tty4 c 4 4 #copy_including_deps /usr/bin/strace #copy_including_deps /usr/bin/lsof # TODO: add all comon filesystems which are NOT compiled in kernel already copy_including_deps /$LMK/kernel/fs/squashfs copy_including_deps /$LMK/kernel/drivers/staging/zram copy_including_deps /$LMK/kernel/drivers/block/loop.* copy_including_deps /$LMK/modules.* depmod -b $INITRAMFS echo "root::0:0::/root:/bin/bash" >$INITRAMFS/etc/passwd touch $INITRAMFS/etc/{m,fs}tab cp init $INITRAMFS chmod a+x $INITRAMFS/init cp cleanup $INITRAMFS/lib chmod a+x $INITRAMFS/lib/cleanup ln -s ../init $INITRAMFS/bin/init ln -s ../init $INITRAMFS/sbin/init cp ../livekitlib $INITRAMFS/lib/ cp ../.config $INITRAMFS/lib/ cd $INITRAMFS find . -print | cpio -o -H newc 2>/dev/null | gzip -f --best >$INITRAMFS.img echo $INITRAMFS.img cd .. rm -Rf $INITRAMFS