Magellan Linux

Annotation of /tags/init-0_5_2/sbin/modules-update

Parent Directory Parent Directory | Revision Log Revision Log


Revision 276 - (hide annotations) (download)
Fri Oct 21 15:24:54 2005 UTC (18 years, 6 months ago) by niro
Original Path: trunk/magellan-initscripts/sbin/modules-update
File size: 6642 byte(s)
sync with gentoo upstream; support for assume-kernel

1 niro 2 #!/bin/bash
2     #
3     # This is the modules-update script for Debian GNU/Linux.
4     # Written by Wichert Akkerman <wakkerma@debian.org>
5     # Copyright (C) 1998, 1999 Software in the Public Interest
6 niro 276 #
7     # Modifications by Daniel Robbins <drobbins@gentoo.org>, Gentoo Foundation
8     # 02 Sep 2001 -- Removed "arch" stuff since I see no reason to have
9     # support for varying CPU architectures on a single system.
10     #
11     # Updated by Aron Griffis <agriffis@gentoo.org>
12     # 05 May 2004 -- handle --assume-kernel argument for livecd building
13 niro 2
14 niro 276 if [[ 0 -ne $(id -u) ]] ; then
15     echo "You have to be root to do this."
16     exit 2
17     fi
18 niro 2
19     CFGFILE="/etc/modules.conf"
20     TMPFILE="${CFGFILE}.$$"
21     CFGFILE2="/etc/modprobe.conf"
22     TMPFILE2="${CFGFILE2}.$$"
23 niro 276 TMPFILE2B="${CFGFILE2}B.$$"
24 niro 2 CFGFILE3="/etc/modules.devfs"
25     TMPFILE3="${CFGFILE3}.$$"
26     CFGFILE4="/etc/modprobe.devfs"
27     TMPFILE4="${CFGFILE4}.$$"
28     MODDIR="/etc/modules.d"
29     ARCHDIR="${MODDIR}/arch"
30     HEADER="### This file is automatically generated by modules-update"
31 niro 276 FULLHEADER="${HEADER}
32     #
33     # Please do not edit this file directly. If you want to change or add
34     # anything please take a look at the files in ${MODDIR} and read
35     # the manpage for modules-update(8).
36     #
37     "
38 niro 2
39     source /etc/init.d/functions
40    
41 niro 276 # Parse command-line
42     FORCE=false
43     ASSUME_KV=
44     while [[ -n $1 ]] ; do
45     case "$1" in
46     force)
47     FORCE=true ;;
48     --assume-kernel=*)
49     ASSUME_KV=${1#*=} ;;
50     *)
51     echo "Error: I don't understand $1"
52     exit 1 ;;
53     esac
54     shift
55     done
56 niro 2
57 niro 276 # Set kernel version, either from --assume-kernel or uname -r
58     KV=${ASSUME_KV:-$(uname -r)}
59    
60 niro 105 # needed for kernel 2.6
61 niro 276 if [[ $(kernel_major_version) = 2.6 ]]
62 niro 2 then
63 niro 276 KERNEL_2_6=true
64     else
65     KERNEL_2_6=false
66 niro 2 fi
67    
68 niro 276 # Check if $CONF is valid
69     [[ ! -r ${CONF} ]] && CONF=
70 niro 2
71     set -e
72    
73     # Reset the sorting order since we depend on it
74     export LC_COLLATE="C"
75    
76     depdir() {
77 niro 276 dep=$(egrep '[[:space:]]*depfile' ${CFGFILE} 2> /dev/null | tail -n 1 | sed -e 's/depfile=//' -e 's,/[^/]*$,,')
78     [[ -z ${dep} ]] && dep="/lib/modules/${KV}"
79 niro 2 echo "${dep}"
80     }
81    
82 niro 276 CFGFILES=${CFGFILE}
83     if ${KERNEL_2_6} ; then
84     CFGFILES="${CFGFILES} ${CFGFILE2}"
85     [[ -d /etc/devfs.d ]] && CFGFILES="${CFGFILES} ${CFGFILE4}"
86 niro 2 fi
87    
88 niro 276 for x in ${CFGFILES} ; do
89     if [[ -f ${x} ]] ; then
90     if ! sed -ne 1p "${x}" | egrep -q "^${HEADER}" ; then
91     # Do not bother if its modutils config file, and we
92     # have a 2.6 kernel without modprobe.old
93     [[ ${x} == "${CFGFILE}" ]] && ${KERNEL_2_6} && \
94     ! type -p modprobe.old > /dev/null && \
95     continue
96    
97 niro 2 echo "Error: the current ${x} is not automatically generated."
98 niro 105
99 niro 276 if $FORCE ; then
100     echo "force specified, (re)generating file anyway."
101     else
102 niro 2 echo "Use \"modules-update force\" to force (re)generation."
103     exit 1
104     fi
105     fi
106     fi
107     done
108    
109 niro 276 generate_config() {
110     local cfg=
111     local conf="$1"
112     local moddir="$2"
113     local tmpfile="$3"
114     local do_mprobe="$4"
115    
116     for cfg in "${moddir}"/* "${conf}" ; do
117     [[ -d ${cfg} ]] && continue
118 niro 2
119 niro 276 [[ ! -r ${cfg} ]] && continue
120 niro 2
121 niro 276 # Skip backup and RCS files; fixes bug 20597 (07 May 2004 agriffis)
122     [[ ${cfg} == *~ || ${cfg} == *.bak || ${cfg} == *,v ]] && continue
123 niro 2
124 niro 276 [[ ${do_mprobe} -eq 1 && -e "/etc/modprobe.d/${cfg##*/}" ]] && continue
125 niro 2
126 niro 276 echo "### modules-update: start processing ${cfg}" >> "${tmpfile}"
127 niro 2
128 niro 276 if [[ -x ${cfg} ]] ; then
129     # $cfg can be executable; nice touch, Wichert! :)
130     "${cfg}" >> "${tmpfile}"
131     else
132     cat "${cfg}" >> "${tmpfile}"
133     fi
134 niro 2
135 niro 276 echo >> "${tmpfile}"
136     echo "### modules-update: end processing ${cfg}" >> "${tmpfile}"
137     echo >> "${tmpfile}"
138     done
139 niro 2
140 niro 276 return 0
141     }
142 niro 105
143 niro 276 if type -p modprobe.old > /dev/null ; then
144     if ${FORCE} || is_older_than ${CFGFILE} ${MODDIR} || \
145     [[ ! -e ${CFGFILE} ]] ; then
146     echo "Updating ${CFGFILE}"
147     echo "${FULLHEADER}" > "${TMPFILE}"
148     generate_config "${CONF}" "${MODDIR}" "${TMPFILE}" 0
149     [[ -e ${CFGFILE} ]] && mv -f "${CFGFILE}" "${CFGFILE}.old"
150     mv -f "${TMPFILE}" "${CFGFILE}"
151 niro 2 fi
152 niro 276 fi
153 niro 105
154 niro 276 if ${FORCE} || is_older_than ${CFGFILE2} ${MODDIR} || [[ ! -e ${CFGFILE2} ]]; then
155     if [[ -x /sbin/generate-modprobe.conf ]] && ${KERNEL_2_6} ; then
156     # Make sure that generate-modprobe.conf can handle --assume-kernel
157     # if we were called with it.
158     if [[ -n ${ASSUME_KV} ]] && \
159     ! grep -qe --assume-kernel /sbin/generate-modprobe.conf
160     then
161     echo "Error: modules-update called with --assume-kernel flag, but"
162     echo "generate-modprobe.conf doesn't understand it. You need to"
163     echo "install >= module-init-tools-3.0-r5"
164     exit 3
165     fi
166 niro 2
167 niro 276 echo "Updating ${CFGFILE2}"
168     echo "${FULLHEADER/modules.d/modprobe.d}" > "${TMPFILE2}"
169     if /sbin/generate-modprobe.conf ${ASSUME_KV:+--assume-kernel=${KV}} \
170     >> "${TMPFILE2}" 2>/dev/null
171 niro 2 then
172 niro 276 [[ -e ${CFGFILE2} ]] && mv -f "${CFGFILE2}" "${CFGFILE2}.old"
173     mv -f "${TMPFILE2}" "${CFGFILE2}"
174 niro 2 else
175 niro 276 #
176     # If we made it here, it means either generate-modprobe.conf
177     # bombed on us, or the user doesn't have modutils installed.
178     # If the latter is true, then we should generate modprobe.conf
179     # ourselves with any old files laying around in /etc/modules.d.
180     #
181     rm -f "${TMPFILE2}"
182     if type -p modprobe.old > /dev/null ; then
183     echo "Warning: could not generate ${CFGFILE2}!"
184     else
185     echo "${FULLHEADER/modules.d/modprobe.d}" > "${TMPFILE2B}"
186     generate_config "${CONF}" "${MODDIR}" "${TMPFILE2}" 1
187     export TESTING_MODPROBE_CONF="${TMPFILE2}"
188     if /sbin/generate-modprobe.conf ${ASSUME_KV:+--assume-kernel=${KV}} \
189     >> "${TMPFILE2B}" 2> /dev/null
190     then
191     [[ -e ${CFGFILE2} ]] && mv -f "${CFGFILE2}" "${CFGFILE2}.old"
192     mv -f "${TMPFILE2B}" "${CFGFILE2}"
193     else
194     echo "Warning: could not generate ${CFGFILE2}!"
195     rm -f "${TMPFILE2B}"
196     fi
197     rm -f "${TMPFILE2}"
198     fi
199 niro 2 fi
200 niro 276
201     if [[ -f ${CFGFILE3} ]] ; then
202     echo "Updating ${CFGFILE4}"
203     gawk '$0 !~ /^[[:space:]]*include/ { print $0 }' "${CFGFILE3}" \
204     > "${TMPFILE3}"
205    
206     echo "${FULLHEADER/modules.d/modprobe.d}" > "${TMPFILE4}"
207     export TESTING_MODPROBE_CONF="${TMPFILE3}"
208     if /sbin/generate-modprobe.conf ${ASSUME_KV:+--assume-kernel=${KV}} \
209     >> "${TMPFILE4}" 2> /dev/null
210     then
211     [[ -e ${CFGFILE4} ]] && mv -f "${CFGFILE4}" "${CFGFILE4}.old"
212     mv -f "${TMPFILE4}" "${CFGFILE4}"
213    
214     echo >> "${CFGFILE4}"
215     echo "include /etc/modprobe.conf" >> "${CFGFILE4}"
216     else
217     echo "Warning: could not generate ${CFGFILE4}!"
218     rm -f "${TMPFILE4}"
219     fi
220     rm -f "${TMPFILE3}"
221     fi
222 niro 2 fi
223     fi
224    
225     # We also call depmod here to stop insmod from complaining that modules.conf
226     # is more recent then modules.dep
227 niro 276 if [[ ${CFGFILE2} -nt /lib/modules/${KV}/modules.dep ]] ; then
228     if [[ -d $(depdir) && -f /proc/modules ]] ; then
229     if [[ -f /usr/src/linux/System.map ]] ; then
230     depmod -a -F /usr/src/linux/System.map ${KV}
231     else
232     depmod -a ${KV}
233     fi
234     fi
235 niro 2 fi
236    
237    
238     # vim:ts=4

Properties

Name Value
svn:executable *