#!/bin/sh # # This is the update-modules script for Debian GNU/Linux. # Copyright 1998-2001 Wichert Akkerman # Licensed under the GNU GPL, version 2 # MODCONFFILE=/etc/modules.conf MODCONFTMPFILE="${MODCONFFILE}.$$" MODULESFILE=/etc/modules MODULESTMPFILE="${MODULESFILE}.$$" ARCHDIR=/etc/modutils/arch CPUDIR=/etc/modutils/cpu 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 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 < "$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, /etc/modules-load.d # 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 <> "$tgt" ### update-modules: end processing $cfg EOF } checkoverwrite "$MODCONFFILE" 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" createfile "$MODCONFTMPFILE" createfile "$MODULESTMPFILE" # well we're using /etc/modprobe.d/*.conf instead of /etc/modutils/*.conf anyway.. for cfg in /etc/modutils/* $CONF ; do if [ -f "$cfg" ]; then # this check is necesarry to skip /etc/modutils/archs if echo $cfg | grep -q '\.dpkg-[a-z]*\|~$' ; then true elif echo $cfg | grep -q '\.conf$' ; then addfile "$cfg" "$MODCONFTMPFILE" else echo "Please migrate your $cfg file to /etc/modules-load.d/*.conf" addfile "$cfg" "$MODULESTMPFILE" fi fi done for cfg in /etc/modules-load.d/*.conf; do if [ -f "$cfg" ]; then # this check is necesarry to skip weird entries if echo $cfg | grep -q '\.dpkg-[a-z]*\|~$' ; then true else addfile "$cfg" "$MODULESTMPFILE" fi fi done first_time=0 if [ ! -f $MODULESFILE ]; then first_time=1 fi mv "$MODCONFTMPFILE" "$MODCONFFILE" mv "$MODULESTMPFILE" "$MODULESFILE" # Don't run modutils.sh if systemd is installed if [ $first_time -eq 1 ] && [ ! -e /bin/systemctl ]; then /etc/init.d/modutils.sh || true fi # 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