1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203
|
#!/bin/sh
#
# This is the update-modules script for Debian GNU/Linux.
# Copyright 1998-2001 Wichert Akkerman <wakkerma@debian.org>
# Licensed under the GNU GPL, version 2
#
MODCONFFILE=/etc/modules.conf
MODCONFTMPFILE="${MODCONFFILE}.$$"
CHANDEVFILE=/etc/chandev.conf
CHANDEVTMPFILE="${CHANDEVFILE}.$$"
ARCHDIR=/etc/modutils/arch
HEADER="### This file is automatically generated by update-modules"
set -e
if [ "$1" = "force" ] ; then
force=1
else
force=
fi
# Reset the sorting order since we depend on it
LC_COLLATE=C
export LC_COLLATE
depdir()
{
dep=`grep '[[:space:]]*depfile' "${MODCONFFILE}" | tail -n 1 | sed -e 's/depfile=//' -e 's,/[^/]*$,,'`
if [ -z "$dep" ] ; then
dep="/lib/modules/`uname -r`"
fi
echo $dep
}
arch() {
local model=`uname -m`
case $model in
i[0-9]86) model=i386; ;;
sun4u) model=sparc64; ;;
arm*) model=arm; ;;
ppc) model=powerpc; ;;
esac
echo $model
}
archmodel() {
local arch=`arch`
local model=""
if [ $arch = "m68k" ]; then
if [ -f /proc/hardware ]; then
model=`sed -ne 's/^Model:[[:space:]]*//p' /proc/hardware`
case $model in
Atari*) model="atari"; ;;
Amiga*) model="amiga"; ;;
Macintosh*) model="mac"; ;;
Motorola*) model="MVME"; ;;
*) model="generic"; ;;
esac
model=".${model}"
else
echo "/proc/hardware does not exist, assuming general m68k system"
model=".generic"
fi
elif [ $arch = "powerpc" ]; then
if [ -f /proc/cpuinfo ]; then
model=`sed -ne 's/^machine[[:space:]]*:[[:space:]]*//p' /proc/cpuinfo`
case $model in
Amiga*) model="apus"; ;;
Power*) model="pmac"; ;;
*) model="generic"; ;;
esac
model=".${model}"
else
echo "/proc/cpuinfo does not exist, assuming general powerpc system"
model=".generic"
fi
elif [ $arch = "mips" ]; then
if [ -f /proc/cpuinfo ]; then
model=`sed -ne 's/^system type[[:space:]]*:[[:space:]]*//p' /proc/cpuinfo`
case $model in
"SGI Indy"*) model="ip22"; ;;
*) model="generic"; ;;
esac
model=".${model}"
else
echo "/proc/cpuinfo does not exist, assuming general mips system"
model=".generic"
fi
fi
echo "${arch}${model}"
}
checkoverwrite() {
local cfgfile="$1"
if [ -f "$cfgfile" ]; then
if ! sed -ne 1p "$cfgfile" | grep -q "^$HEADER" ; then
echo "Error: the current $cfgfile is not automatically generated." >&2
if [ -z "$force" ]; then
echo "Use \"update-modules force\" to force (re)generation."
exit 1
else
echo "force specified, (re)generating file anyway."
fi
fi
fi
}
createfile() {
cat <<EOF > "$1"
$HEADER"
#
# Please do not edit this file directly. If you want to change or add
# anything please take a look at the files in /etc/modutils and read
# the manpage for update-modules.
#
EOF
}
addfile() {
local src="$1"
local tgt="$2"
echo "### update-modules: start processing $src" >> "$tgt"
if [ -x "$src" ]; then
if ! "$src" >> "$tgt" ; then
echo "Error while executing $src, aborting" >&2
exit 1
fi
else
cat "$src" >> "$tgt"
fi
cat <<EOF >> "$tgt"
### update-modules: end processing $cfg
EOF
}
if [ "$(uname -m)" = "s390" ] || [ "$(uname -m)" = "s390x" ]; then
dochandev=1
fi
checkoverwrite "$MODCONFFILE"
[ "$dochandev" ] && checkoverwrite "$CHANDEVFILE"
if [ 0 -ne "`id -u`" ]; then
echo "You have to be root to do this." >&2
exit 2
fi
model=`archmodel`
oldmodel=$model
while [ ! -f "${ARCHDIR}/${model}" ]; do
oldmodel=$model
model=`echo $oldmodel | sed -e 's/\.[^.]\+//'`
if [ "$model" = "$oldmodel" ]; then
break
fi
echo "Configuration for $oldmodel not found, trying $model"
done
CONF="${ARCHDIR}/${model}"
if [ ! -f "$CONF" ]; then
echo "Architecture-specific modutils configuration not found, using defaults"
CONF="${ARCHDIR}/generic"
fi
[ -e "$MODCONFFILE" ] && cp -f "$MODCONFFILE" "${MODCONFFILE}.old"
[ "$dochandev" -a -e "$CHANDEVFILE" ] && cp -f "$CHANDEVFILE" "${CHANDEVFILE}.old"
createfile "$MODCONFTMPFILE"
[ "$dochandev" ] && createfile "$CHANDEVTMPFILE"
for cfg in /etc/modutils/* $CONF ; do
if [ -f "$cfg" ]; then # this check is necesarry to skip /etc/modutils/archs
if [ "$dochandev" ] && echo $cfg | grep -q '\.chandev$' ; then
addfile "$cfg" "$CHANDEVTMPFILE"
elif ! echo $cfg | grep -q '\(\.dpkg-[a-z]*\|~\)$' ; then
addfile "$cfg" "$MODCONFTMPFILE"
fi
fi
done
mv "$MODCONFTMPFILE" "$MODCONFFILE"
[ "$dochandev" ] && mv "$CHANDEVTMPFILE" "$CHANDEVFILE"
# We also call depmod here to stop insmod from complaining that modules.conf
# is more recent then modules.dep
#
if [ -d "`depdir`" -a -f /proc/modules ]
then
depmod -a || true
fi
exit 0
|