Magellan Linux

Annotation of /trunk/magellan-initscripts/sbin/generate-modprobe.conf

Parent Directory Parent Directory | Revision Log Revision Log


Revision 109 - (hide annotations) (download)
Fri Jul 1 19:51:59 2005 UTC (18 years, 10 months ago) by niro
File size: 8954 byte(s)
new, was missing all the time ;/

1 niro 109 #!/bin/bash
2     #
3     # Naive shell script to translate modules.conf + defaults to modprobe.conf
4     # Normal caveats apply, as with any machine translation.
5     #
6     # Updated 07 May 2004 by Aron Griffis <agriffis@gentoo.org> to support
7     # --assume-kernel option for Gentoo LiveCD building. See
8     # http://bugs.gentoo.org/show_bug.cgi?id=49926
9    
10     # Parse command-line
11     STDIN=
12     KV=`uname -r`
13     while [[ "$1" == --* ]]; do
14     case "$1" in
15     --assume-kernel=*)
16     KV=${1#*=}
17     ;;
18     --stdin)
19     STDIN=1
20     ;;
21     *)
22     echo "Usage: $0 [--stdin] [--assume-kernel=n.n.n] [modprobe.conf]"
23     echo " Converts your current modules setup to modprobe.conf."
24     echo " Don't trust it too much."
25     echo " Version 0.1"
26     exit 1
27     ;;
28     esac
29     shift
30     done
31    
32     # Set up output if specified.
33     if [ $# -eq 1 ]; then exec > $1; fi
34    
35     MODPROBECONF=`mktemp /tmp/modprobe.XXXXXX || tempfile || echo /tmp/modprobe.$$`
36     trap "rm -f $MODPROBECONF" 0
37    
38     if [ x"$TESTING_MODPROBE_CONF" != x ]; then
39     cp $TESTING_MODPROBE_CONF $MODPROBECONF
40     elif [ "$STDIN" = "1" ]; then
41     cat > $MODPROBECONF
42     elif [ -x /sbin/modprobe.old ]; then
43     # In sbin.
44     /sbin/modprobe.old -c > $MODPROBECONF
45     elif modprobe.old -c >/dev/null 2>&1; then
46     # Somewhere in path.
47     modprobe.old -c > $MODPROBECONF
48     elif /sbin/modprobe -V 2>/dev/null | grep -q 'modprobe version'; then
49     # Running /sbin/modprobe gives old version.
50     /sbin/modprobe -c > $MODPROBECONF
51     elif modprobe -V 2>/dev/null | grep -q 'modprobe version'; then
52     # Running modprobe gives old version.
53     modprobe -c > $MODPROBECONF
54     else
55     echo Cannot find old version of modprobe. Giving up. 2>&1
56     exit 1
57     fi
58    
59     # Resolve (possibly recursive) alias: args filename alias
60     resolve_alias()
61     {
62     RA_RESOLVE=`grep "^alias[ ][ ]*$2[ ]" -- $1 | awk '{ print $3 }'`
63     if [ x"$RA_RESOLVE" = x ]; then
64     echo $2
65     return
66     fi
67     # Recurse.
68     (resolve_alias $1 "$RA_RESOLVE")
69     }
70    
71     # Parse alias: args filename modulename aliasto.
72     parse_alias()
73     {
74     PA_ALIAS=`resolve_alias $1 $3`
75     NAME=`echo $2|sed -e 's/\(block\|char\)-major-\([0-9]\+\)$/\1-major-\2-*/'`
76    
77     echo "alias $NAME $PA_ALIAS"
78     }
79    
80     # Parse options: args modulename aliasto.
81     parse_options()
82     {
83     # Second arg can be null if grab_noninstall options returns empty.
84     [ x"$2" = x ] || echo "options $1 $2"
85     }
86    
87     # Separate out the modprobe options from the module options
88     grab_install_options()
89     {
90     GRAB_OPTS=""
91     GRAB_NEXT=0
92     for grab_i; do
93     case "$grab_i" in
94     -o) GRAB_OPTS="$GRAB_OPTS -o"; GRAB_NEXT=1;;
95     -*) echo Warning: Ignoring unknown alias option "$grab_i" >&2;;
96     *)
97     [ $GRAB_NEXT = 0 ] || GRAB_OPTS="$GRAB_OPTS $grab_i"
98     GRAB_NEXT=0
99     ;;
100     esac
101     done
102     echo "$GRAB_OPTS"
103     }
104    
105     grab_noninstall_options()
106     {
107     GRAB_OPTS=""
108     GRAB_NEXT=0
109     for grab_i; do
110     case "$grab_i" in
111     -o) GRAB_NEXT=1;;
112     -*) ;;
113     *)
114     [ $GRAB_NEXT = 1 ] || GRAB_OPTS="$GRAB_OPTS $grab_i"
115     GRAB_NEXT=0
116     ;;
117     esac
118     done
119     echo "$GRAB_OPTS"
120     }
121    
122     # Produce a multiple install/remove commands. Args: list, command, separator.
123     multi()
124     {
125     mp_res=""
126     for mp_arg in $1; do
127     if [ x"$mp_res" = x ]; then mp_res="/sbin/$2 $mp_arg";
128     else mp_res="$mp_res${3}/sbin/$2 $mp_arg";
129     fi
130     done
131     echo "$mp_res"
132     }
133    
134     # Install and remove commands frequently refer to insmod and rmmod.
135     # Use "modprobe --ignore-install " and "modprobe -r --ignore-remove" since
136     # our versions of rmmod and insmod are deliberately stupid.
137     convert_command()
138     {
139     echo "$@" | sed -e 's,insmod,/sbin/modprobe --ignore-install,' -e 's,rmmod,/sbin/modprobe -r --ignore-remove,'
140     }
141    
142     while read ADD NAME MODULE REST; do
143     # Ignore a spurious add, otherwise move them down.
144     if [ x"$ADD" = x"add" ]; then :; else
145     REST="`echo $MODULE $REST | sed 's/ *$//'`"
146     MODULE="$NAME"
147     NAME="$ADD";
148     fi
149     #echo "NAME=$NAME MODULE=$MODULE REST=$REST" >&2
150    
151     # MODNAME is the converted name for use in variables.
152     MODNAME=`echo $MODULE | tr -c A-Za-z_0-9 _`
153     case "$NAME" in
154     '#'*) : ;; # Comment
155     '') : ;; # Blank line
156    
157     keep) # Do nothing.
158     ;;
159    
160     alias)
161     if [ x"$REST" = xoff -o x"$REST" = xnull ]; then
162     INSTALL_COMMANDS="$INSTALL_COMMANDS $MODULE"
163     eval install_$MODNAME=\"/bin/true\"
164     else
165     parse_alias $MODPROBECONF "$MODULE" $REST
166     fi
167     ;;
168    
169     options)
170     # Options used to be able to contain extra args to insmod
171     # (eg. -o foo). Not any more.
172     case " $REST" in
173     *' '-[-a-z]*)
174     parse_options $MODULE `grab_noninstall_options $REST`
175     INSTALL_OPTIONS=`grab_install_options $REST`
176     INSTALL_COMMANDS="$INSTALL_COMMANDS $MODULE"
177     eval install_$MODNAME=\"/sbin/modprobe $INSTALL_OPTIONS --ignore-install `resolve_alias $MODPROBECONF $MODULE`\"
178     ;;
179     *)
180     parse_options $MODULE "$REST"
181     ;;
182     esac
183     ;;
184    
185     above)
186     # Pull in these modules after me.
187     INSTALL_COMMANDS="$INSTALL_COMMANDS $MODULE"
188     eval post_install_$MODNAME=\"`multi "$REST" 'modprobe' '; '`\; /bin/true\"
189     REMOVE_COMMANDS="$REMOVE_COMMANDS $MODULE"
190     eval pre_remove_$MODNAME=\"`multi "$REST" 'modprobe -r' '; '`\"
191     ;;
192     below)
193     # Pull in these modules before me.
194     INSTALL_COMMANDS="$INSTALL_COMMANDS $MODULE"
195     eval pre_install_$MODNAME=\"`multi "$REST" 'modprobe' '; '`\"
196     REMOVE_COMMANDS="$REMOVE_COMMANDS $MODULE"
197     eval post_remove_$MODNAME=\"`multi "$REST" 'modprobe -r' '; '`\; /bin/true\"
198     ;;
199     probe)
200     INSTALL_COMMANDS="$INSTALL_COMMANDS $MODULE"
201     eval install_$MODNAME=\"`multi "$REST" 'modprobe' ' || '`\"
202     ;;
203     probeall)
204     # Not quite correct. If they all fail, we should fail.
205     INSTALL_COMMANDS="$INSTALL_COMMANDS $MODULE"
206     eval install_$MODNAME=\"`multi "$REST" 'modprobe' '; '`\; /bin/true\"
207     ;;
208     post-install)
209     INSTALL_COMMANDS="$INSTALL_COMMANDS $MODULE"
210     eval post_install_$MODNAME=\"`convert_command "$REST"`\"
211     ;;
212     pre-install)
213     INSTALL_COMMANDS="$INSTALL_COMMANDS $MODULE"
214     eval pre_install_$MODNAME=\"`convert_command "$REST"`\"
215     ;;
216     install)
217     INSTALL_COMMANDS="$INSTALL_COMMANDS $MODULE"
218     eval install_$MODNAME=\"`convert_command "$REST"`\"
219     ;;
220     post-remove)
221     REMOVE_COMMANDS="$REMOVE_COMMANDS $MODULE"
222     eval post_remove_$MODNAME=\"`convert_command "$REST"`\"
223     ;;
224     pre-remove)
225     REMOVE_COMMANDS="$REMOVE_COMMANDS $MODULE"
226     eval pre_remove_$MODNAME=\"`convert_command "$REST"`\"
227     ;;
228     remove)
229     REMOVE_COMMANDS="$REMOVE_COMMANDS $MODULE"
230     eval remove_$MODNAME=\"`convert_command "$REST"`\"
231     ;;
232     include)
233     # Recurse.
234     ($0 $MODULE)
235     ;;
236     # Ignore default lines which are not required any more.
237     "path[boot]=/lib/modules/boot"|"path[toplevel]=/lib/modules/$KV"|"path[toplevel]=/lib/modules/2.4"|"path[kernel]=/lib/modules/kernel"|"path[fs]=/lib/modules/fs"|"path[net]=/lib/modules/net"|"path[scsi]=/lib/modules/scsi"|"path[block]=/lib/modules/block"|"path[cdrom]=/lib/modules/cdrom"|"path[ipv4]=/lib/modules/ipv4"|"path[ipv6]=/lib/modules/ipv6"|"path[sound]=/lib/modules/sound"|"path[fc4]=/lib/modules/fc4"|"path[video]=/lib/modules/video"|"path[misc]=/lib/modules/misc"|"path[pcmcia]=/lib/modules/pcmcia"|"path[atm]=/lib/modules/atm"|"path[usb]=/lib/modules/usb"|"path[ide]=/lib/modules/ide"|"path[ieee1394]=/lib/modules/ieee1394"|"path[mtd]=/lib/modules/mtd"|"generic_stringfile=/lib/modules/$KV/modules.generic_string"|"pcimapfile=/lib/modules/$KV/modules.pcimap"|"isapnpmapfile=/lib/modules/$KV/modules.isapnpmap"|"usbmapfile=/lib/modules/$KV/modules.usbmap"|"parportmapfile=/lib/modules/$KV/modules.parportmap"|"ieee1394mapfile=/lib/modules/$KV/modules.ieee1394map"|"pnpbiosmapfile=/lib/modules/$KV/modules.pnpbiosmap"|"depfile=/lib/modules/$KV/modules.dep"|"persistdir=/var/lib/modules/persist")
238     ;;
239    
240     # Ignore prune lines unless they end in .o or .ko, which would
241     # have an effect.
242     prune)
243     case "$MODULE" in
244     *.ko|*.o)
245     echo "Warning: not translating $NAME $MODULE $REST" >&2
246     ;;
247     esac
248     ;;
249     *)
250     echo "Warning: not translating $NAME $MODULE $REST" >&2
251     ;;
252     esac
253     done < $MODPROBECONF
254    
255     for mod in `echo $INSTALL_COMMANDS | tr ' ' '\n' | sort -u`; do
256     # MODNAME is the converted name for use in variables.
257     MODNAME=`echo $mod | tr -c A-Za-z_0-9 _`
258     eval PREINSTALL=\"\$pre_install_$MODNAME\"
259     eval POSTINSTALL=\"\$post_install_$MODNAME\"
260     eval INSTALL=\"\$\{install_$MODNAME:-/sbin/modprobe --first-time --ignore-install $mod}\"
261     if [ -n "$PREINSTALL" ]; then PREINSTALL="{ $PREINSTALL; } ; "; fi
262     if [ -n "$POSTINSTALL" ]; then POSTINSTALL="&& { $POSTINSTALL; }"; fi
263     echo install $mod $PREINSTALL $INSTALL $POSTINSTALL
264     done
265    
266     for mod in `echo $REMOVE_COMMANDS | tr ' ' '\n' | sort -u`; do
267     # MODNAME is the converted name for use in variables.
268     MODNAME=`echo $mod | tr -c A-Za-z_0-9 _`
269     eval PREREMOVE=\"\$pre_remove_$MODNAME\"
270     eval POSTREMOVE=\"\$post_remove_$MODNAME\"
271     eval REMOVE=\"\$\{remove_$MODNAME:-/sbin/modprobe -r --first-time --ignore-remove $mod}\"
272     if [ -n "$PREREMOVE" ]; then PREREMOVE="{ $PREREMOVE; } ; "; fi
273     if [ -n "$POSTREMOVE" ]; then POSTREMOVE="&& { $POSTREMOVE; }"; fi
274     echo remove $mod $PREREMOVE $REMOVE $POSTREMOVE
275     done

Properties

Name Value
svn:executable *