| #!/bin/bash |
| bins=( |
| busybox |
| flasher |
| @EXTRA_BINS@ |
| ) |
| busybox_bins=( |
| awk cat grep kill sed sh sort stty test umount watchdog |
| reboot |
| ) |
| |
| mkdir -p /run/initramfs |
| cd /run/initramfs |
| |
| mkdir -p {bin,lib} |
| if [ ! -e usr ]; then |
| ln -s . usr || exit |
| fi |
| copy_bin() { |
| local bin="$1" |
| if [ -e bin/"$bin" ]; then |
| echo "Skipping existing bin/$bin" >&2 |
| return 0 |
| fi |
| local abs |
| abs=$(type -tP "$bin") || return |
| if [ -L "$abs" ]; then |
| local tgt |
| tgt="$(readlink "$abs")" || return |
| tgt="$(basename "$tgt")" || return |
| ln -sv "$tgt" bin/"$bin" || return |
| copy_bin "$tgt" |
| return |
| fi |
| cp -v "$abs" bin/"$bin" || return |
| local out |
| out="$(LD_TRACE_LOADED_OBJECTS=1 "$abs")" || return |
| echo "$out" | grep /lib/ | sed 's,.*\W\(/[^ ]*[.]so[^ ]*\)\W.*,\1,g' | xargs cp -nvt lib/ || exit |
| } |
| for bin in "${bins[@]}"; do |
| copy_bin "$bin" || exit |
| done |
| for lnk in "${busybox_bins[@]}"; do |
| if ! busybox --list | grep -q "^$lnk$"; then |
| echo "Busybox Missing $lnk" >&2 |
| exit 1 |
| fi |
| if [ ! -e bin/"$lnk" ]; then |
| ln -s busybox bin/"$lnk" |
| fi |
| done |
| cp -nv /usr/share/shutdown-init.sh shutdown |
| chmod +x shutdown |