}
inst() {
- if (($# != 2 && $# != 3));then
+ if (($# != 2 && $# != 3)); then
echo "usage: inst <file> <root> [<destination file>]"
return 1
fi
local root="${1%%/}" ; shift
local dest="${1##/}"
[[ $dest ]] || dest="${file##/}"
-
mkdir -p "$root/${dest%/*}"
-
local RET=0
local target=""
- [ -L "$file" ] && target=$(readlink "$file")
+ [[ -L $file ]] && target=$(readlink "$file")
if [[ $target && $dest != $target ]]; then
if [[ -e $root/$dest ]]; then
RET=0
ln -sf "$target" "$root/$dest"
#inst "$target" "$root"
local BASE=${target##*/}
- local LIBDIR=`echo "$file" | sed -e 's,\(\(.*\)/\)[^/]\+$,\1,'`
+ local LIBDIR=$(echo "$file" | sed -e 's,\(\(.*\)/\)[^/]\+$,\1,')
if [[ $LIBDIR = $BASE ]]; then
- local LIBDIR=`echo "/$dest" | sed -e 's,\(\(.*\)/\)[^/]\+$,\1,'`
- fi
-
- local TLIBDIR=`echo "$target" | sed -e 's,\(^/lib[^/]*\)/.*$,\1/,' \
- -e 's,\(\(.*\)/\)[^/]\+$,\1,'`
+ local LIBDIR=$(echo "/$dest" | sed -e 's,\(\(.*\)/\)[^/]\+$,\1,')
+ fi
+ local TLIBDIR=$(echo "$target" | sed -e 's,\(^/lib[^/]*\)/.*$,\1/,' \
+ -e 's,\(\(.*\)/\)[^/]\+$,\1,')
if [[ $TLIBDIR = $BASE ]]; then
- local TLIBDIR=`echo "/$dest" | sed \
- -e 's,\(^/lib[^/]*\)/.*$,\1/,' \
- -e 's,\(\(.*\)/\)[^/]\+$,\1,'`
+ local TLIBDIR=$(echo "/$dest" | sed \
+ -e 's,\(^/lib[^/]*\)/.*$,\1/,' \
+ -e 's,\(\(.*\)/\)[^/]\+$,\1,')
fi
-
inst "$LIBDIR/$BASE" "$root" "$TLIBDIR/$BASE"
RET=$?
return $RET
fi
fi
-
local SHEBANG=$(dd if="$file" bs=2 count=1 2>/dev/null)
if [[ $SHEBANG = '#!' ]]; then
# We're intentionally not playing the "what did this moron run
RET=$?
return $RET
fi
-
if [[ -e $root/$dest ]]; then
RET=0
else
RET=$?
else
cp -aL "$file" "$root/$dest"
-
local DEPS=$(get_dso_deps "$file")
if [[ $DEPS ]]; then
- IF_dynamic="yes"
+ for x in $DEPS; do
+ local TLIBDIR=$(echo "$x" | sed 's,\(/lib[^/]*\)/.*$,\1,')
+ local BASE=$(basename "$x")
+ inst "$x" "$root" "$TLIBDIR/$BASE"
+ done
+ RET=$?
fi
- for x in $DEPS ; do
- local TLIBDIR=`echo "$x" | sed 's,\(/lib[^/]*\)/.*$,\1,'`
- local BASE=`basename "$x"`
- inst "$x" "$root" "$TLIBDIR/$BASE"
- done
- RET=$?
- fi
+ fi
fi
return $RET
}
-# module dep finding and installation functions
-moduledep() {
- MPARGS=""
- if [ "$1" == "--ignore-install" ]; then
- MPARGS="$MPARGS --ignore-install"
- shift
- fi
- deps=""
- deps=$(modprobe $MPARGS --set-version $kernel --show-depends $1 2>/dev/null| awk '/^insmod / { print gensub(".*/","","g",$2) }' | while read foo ; do [ "${foo%%.ko}" != "$1" ] && echo -n "${foo%%.ko} " ; done)
-}
-
-locatemodule() {
- MPARGS=""
- if [ "$1" == "--ignore-install" ]; then
- MPARGS="$MPARGS --ignore-install"
- shift
- fi
- fmPath=$(modprobe $MPARGS --set-version $kernel --show-depends $1 2>/dev/null | awk '/^insmod / { print $2; }' | tail -1)
- if [ -n "$fmPath" -a -f "$fmPath" ]; then
- return 0
- fi
- for modExt in o.gz o ko ; do
- for modDir in /lib/modules/$kernel/updates /lib/modules/$kernel ; do
- if [ -d $modDir ]; then
- fmPath=$(find $modDir -name $1.ko |awk {'print $1; exit;'})
- if [ -n "$fmPath" -a -f "$fmPath" ]; then
- return 0
- fi
- fi
- done
+modcat="/lib/modules/$kernel/modules"
+instmods() {
+ local mod mpargs modpath modname cmd
+ while (($# > 0)); do
+ mod=${1%.ko}
+ case $mod in
+ =ata) instmods $mpargs $(cat "${modcat}.block" |egrep 'ata|ahci');;
+ =*) instmods $mpargs $(cat "${modcat}.${mod#=}");;
+ --*) mpargs+=" $mod";;
+ *) modprobe $mpargs --set-version $kernel --show-depends $mod \
+ 2>/dev/null |while read cmd modpath; do
+ [[ $cmd = insmod ]] || continue
+ modname=${modpath##*/}
+ modname=${modname%.ko}
+ [[ ${mod/-/_} != ${modname/-/_} ]] && {
+ instmods $mpargs $modname
+ continue
+ }
+ inst "$modpath" "$initdir" "/lib/modules/$kernel/$modname.ko"
+ done
+ ;;
+ esac
+ shift
done
- return 1
-}
-
-resolveAndExpandModules() {
- items=$*
-
- mods=$(expandModules $items)
- resdeps mods
- echo $resolved
-}
-
-expandModules() {
- items=$*
-
- for m in $items ; do
- char=$(echo $m | cut -c1)
- if [ $char = '=' ]; then
- NAME=$(echo $m | cut -c2-)
- if [ "$NAME" = "ata" ]; then
- MODS="$MODS $(cat /lib/modules/$kernel/modules.block |egrep '(ata|ahci)' |sed -e 's/.ko//')"
- else
- # Ignore if group list does not exist
- if [ -e /lib/modules/$kernel/modules.$NAME ]; then
- MODS="$MODS $(cat /lib/modules/$kernel/modules.$NAME |sed -e 's/.ko//')"
- fi
- fi
- else
- MODS="$MODS $m"
- fi
- done
- echo $MODS
-}
-
-installmodule()
-{
- MPARGS=""
- if [ "$1" == "--ignore-install" ]; then
- MPARGS="$MPARGS --ignore-install"
- shift
- fi
- MODULE=$1
- MNTIMAGE=$2
- fmPath=""
- locatemodule $MPARGS $MODULE
- MODULE=$fmPath
- if [ -z "$MODULE" ]; then
- return
- fi
- if [ -x /usr/bin/strip ]; then
- /usr/bin/strip -g $MODULE -o $MNTIMAGE/lib/modules/$kernel/$(basename $MODULE)
- else
- inst "$MODULE" "$MNTIMAGE" "/lib/modules/$kernel/$(basename $MODULE)"
- fi
- for fw in $(/sbin/modinfo -F firmware $MODULE 2>/dev/null); do
+ for fw in $(/sbin/modinfo -F firmware $mod 2>/dev/null); do
if [ -f /lib/firmware/$fw ]; then
- inst "/lib/firmware/$fw" "$MNTIMAGE" "/lib/firmware/$fw"
+ inst_simple "/lib/firmware/$fw"
fi
done
-}
-
-# This loops to make sure it resolves dependencies of dependencies of...
-resdeps () {
- modlist="$1"
-
- before=1
- after=2
-
- items=$(eval echo \${$modlist})
- while [ $before != $after ]; do
- before=$(echo $items | wc -c)
- list=""
-
- for i in $items ; do
- deps=""
- moduledep $i
- list="$list $deps"
- done
- items=$(for n in $items $list; do echo $n; done | sort -u)
- after=`echo $items | wc -c`
- done
-
- resolved="$items"
-}
+}
findkeymap () {
local MAP=$1
-
- if [ ! -f "$MAP" ]; then
- MAP=$(find /lib/kbd/keymaps -type f -name $MAP -o -name $MAP.\* | head -n1)
- fi
-
- case " $KEYMAPS " in
- *" $MAP "*)
- return
- ;;
- esac
-
+ [[ ! -f $MAP ]] && \
+ MAP=$(find /lib/kbd/keymaps -type f -name $MAP -o -name $MAP.\* | head -n1)
+ [[ " $KEYMAPS " = *" $MAP "* ]] && return
KEYMAPS="$KEYMAPS $MAP"
-
case $MAP in
- *.gz)
- cmd=zgrep
- ;;
- *.bz2)
- cmd=bzgrep
- ;;
- *)
- cmd=grep
- ;;
+ *.gz) cmd=zgrep;;
+ *.bz2) cmd=bzgrep;;
+ *) cmd=grep ;;
esac
for INCL in $($cmd "^include " $MAP | cut -d' ' -f2 | tr -d '"'); do