From: Peter Jones Date: Tue, 3 Jun 2008 20:38:58 +0000 (-0400) Subject: Add a script to populate an initrd from a directory specified on the command line. X-Git-Tag: 0.2.0~42 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fcf61c56be28f7da03d20dae0c554f9d2e478261;p=thirdparty%2Fplymouth.git Add a script to populate an initrd from a directory specified on the command line. --- diff --git a/scripts/Makefile.am b/scripts/Makefile.am index 4f10707c..79328518 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -1,7 +1,7 @@ noinst_SCRIPTS = new-object.sh initrdscriptdir = $(libexecdir)/plymouth -initrdscript_SCRIPTS = plymouth-update-initrd +initrdscript_SCRIPTS = plymouth-update-initrd plymouth-populate-initrd if ADD_BOOT_ENTRY install-data-hook: diff --git a/scripts/plymouth-populate-initrd b/scripts/plymouth-populate-initrd new file mode 100755 index 00000000..66dadbc1 --- /dev/null +++ b/scripts/plymouth-populate-initrd @@ -0,0 +1,115 @@ +#!/bin/bash + +[ -z "$DESTDIR" ] || exit 0 + +set -e + +[ -z "$LIBEXECDIR" ] && LIBEXECDIR="/usr/libexec" +[ -z "$DATADIR" ] && DATADIR="/usr/share" +[ -z "$SYSTEMMAP" ] && SYSTEM_MAP="/boot/System.map-$(/bin/uname -r)" +[ -z "$LIB" ] && [ $(head -n1 $SYSTEM_MAP | awk '{print $1}' | wc -c) -lt 16 ] && LIB="lib" || LIB="lib64" +[ -z "$LIBDIR" ] && LIBDIR="/usr/$LIB" +[ -z "$BINDIR" ] && BINDIR="/usr/bin" +[ -z "$GRUB_MENU_TITLE" ] && GRUB_MENU_TITLE="Graphical Bootup" +[ -z "$PLYMOUTH_LOGO_FILE" ] && PLYMOUTH_LOGO_FILE="/usr/share/pixmaps/system-logo-white.png" + +INITRDDIR=$1 && shift +if [ -z "$INITRDDIR" ]; then + echo "usage: plymouth " 1>&2 + exit 1 +fi + +RTLD="" +function get_dso_deps() { + bin="$1" ; shift + + declare -a FILES + declare -a NAMES + + LDSO=$(echo nash-showelfinterp $bin | /sbin/nash --forcequiet) + [ -z "$LDSO" -o "$LDSO" == "$bin" ] && LDSO="$RTLD" + [ -z "$LDSO" -o "$LDSO" == "$bin" ] && return 1 + [ -z "$RTLD" ] && RTLD="$LDSO" + + # I hate shell. + declare -i n=0 + while read NAME I0 FILE ADDR I1 ; do + [ "$FILE" == "not" ] && FILE="$FILE $ADDR" + NAMES[$n]="$NAME" + FILES[$n]="$FILE" + let n++ + done << EOF + $(LD_TRACE_PRELINKING=1 LD_WARN= LD_TRACE_LOADED_OBJECTS=1 \ + $LDSO $bin 2>/dev/null) +EOF + + [ ${#FILES[*]} -eq 0 ] && return 1 + + # we don't want the name of the binary in the list + if [ "${FILES[0]}" == "$bin" ]; then + FILES[0]="" + NAMES[0]="" + [ ${#FILES[*]} -eq 1 ] && return 1 + fi + + declare -i n=0 + while [ $n -lt ${#FILES[*]} ]; do + FILE="${FILES[$n]}" + if [ "$FILE" == "not found" ]; then + cat 1>&2 <