Skip to content

Commit 906556d

Browse files
author
Tomáš Chvátal
committed
Initial import from OBS
1 parent eea23b7 commit 906556d

23 files changed

+2482
-0
lines changed

10-unsupported-modules.conf

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#
2+
# Every kernel module has a flag 'supported'. If this flag is not set loading
3+
# this module will taint your kernel. You will not get much help with a kernel
4+
# problem if your kernel is marked as tainted. In this case you firstly have
5+
# to avoid loading of unsupported modules.
6+
#
7+
# Setting allow_unsupported_modules 1 enables loading of unsupported modules
8+
# by modprobe, setting allow_unsupported_modules 0 disables it. This can
9+
# be overriden using the --allow-unsupported-modules commandline switch.
10+
allow_unsupported_modules 1

50-kernel-uname_r.conf

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[Unit]
2+
RequiresMountsFor=/boot
3+
4+
[Service]
5+
ExecStartPre=-/usr/lib/systemd/systemd-sysctl /boot/sysctl.conf-%v

README.SUSE

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
Please don't edit /etc/modprobe.conf. Place your settings into
2+
/etc/modprobe.conf.local instead.
3+
4+
5+
To avoid loading backup files of various tools and editors, modprobe skips
6+
files under /etc/modprobe.d/ that have the following prefixes
7+
8+
"."
9+
"~"
10+
11+
and the following suffixes
12+
13+
".rpmsave"
14+
".rpmorig"
15+
".rpmnew"
16+
".bak"
17+
".YaST2save"
18+
".-"
19+
"~"

depmod-00-system.conf

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#
2+
# /etc/depmod.conf - configuration file for the depmod(8) command,
3+
# for its format see depmod.conf(5).
4+
#
5+
# Please don't edit this file, place your settings into the /etc/depmod.d
6+
# directory.
7+
8+
9+
# search order:
10+
# 1 updates/ (KMPs)
11+
# 2 extra/ (KMPs or manually compiled modules)
12+
# 3 weak-updates/ (KMPs built for older kernels)
13+
# 4 kgraft/ (kgraft patches)
14+
# 5 everything else
15+
search updates extra weak-updates kgraft built-in
16+
17+
# do not generate modules.*map files
18+
make_map_files no

driver-check.sh

+314
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,314 @@
1+
#!/bin/bash
2+
3+
VERSION="0.5"
4+
MAINTAINER="Michal Marek <[email protected]>"
5+
USAGE="Usage: ${0##*/} [-o|--out output-file]"
6+
7+
errors=0
8+
warnings=0
9+
10+
trap 'rm -rf "$tmp"' EXIT
11+
tmp=$(mktemp -d)
12+
13+
rpm()
14+
{
15+
# rpm tends to send localized error messages to stdout :-(
16+
LC_ALL=C command rpm "$@"
17+
}
18+
19+
file_owner()
20+
{
21+
local f=$1
22+
23+
if (cd "$tmp/rpms"; grep -lFx "$f" *); then
24+
return
25+
fi
26+
rpm -qf "$f"
27+
}
28+
29+
_explain_called=()
30+
explain()
31+
{
32+
local caller=${BASH_LINENO[0]}
33+
34+
if test -n "${_explain_called[$caller]}"; then
35+
return
36+
fi
37+
_explain_called[$caller]=1
38+
echo "$*"
39+
}
40+
41+
error()
42+
{
43+
echo "ERROR: $*"
44+
let errors++
45+
}
46+
47+
warning()
48+
{
49+
echo "warning: $*" >&2
50+
let warnings++
51+
}
52+
53+
check_system()
54+
{
55+
if test ! -x /usr/lib/module-init-tools/weak-modules2; then
56+
echo "This tool only works on SLE11 and later systems" >&2
57+
exit 1
58+
fi
59+
if ! zypper search >/dev/null; then
60+
echo "Cannot run zypper, please correct the above problem" >&2
61+
exit 1
62+
fi
63+
}
64+
65+
check_rpm()
66+
{
67+
local rpm=$1 name=${1%-*-*}
68+
69+
# ignore changes to %config and %doc files and ignore changed mtimes
70+
if rpm -V "$rpm" | grep -Ev '^[^ ]{8,} [cd] |^\.{7}T\.* '; then
71+
error "$rpm was not installed correctly (see above)"
72+
fi
73+
# this is ugly. Apparently zypper insist on the progress messages and
74+
# the ascii table, so grep for the table row.
75+
if ! LC_ALL=C zypper -A search -t package -u -s --match-exact "$name" \
76+
| grep -qe ---; then
77+
error "$rpm: no update repositories found"
78+
fi
79+
}
80+
81+
check_kernel_package()
82+
{
83+
local kernel=$1
84+
85+
if ! rpm -q --qf '%{description}\n' "$kernel" | grep -q '^GIT '; then
86+
error "$kernel does not look like a SUSE kernel package (no commit id)"
87+
fi
88+
if ! rpm -q --qf '%{postin}\n' "$kernel" | grep -q 'weak-modules2'; then
89+
error "$kernel does not look like a SUSE kernel package (wrong %post script)"
90+
fi
91+
}
92+
93+
check_krel()
94+
{
95+
local krel=$1 system_map module_symvers msg res args bad=false
96+
local mit_version
97+
98+
system_map="/boot/System.map-$krel"
99+
module_symvers="/boot/symvers-$krel.gz"
100+
if ! test -e "$system_map"; then
101+
error "$system_map not found"
102+
bad=true
103+
fi
104+
if ! test -e "$module_symvers"; then
105+
error "$module_symvers not found"
106+
bad=true
107+
fi
108+
if $bad; then
109+
explain "Each kernel must install /boot/System.map-\$version and /boot/symvers-\$version.gz to be able to check module dependencies."
110+
return
111+
fi
112+
set -- $(/sbin/depmod --version | sed -rn 's/.* ([0-9]+)\.([0-9]+)(\..*)?/\1 \2/p')
113+
if test -n "$1" -a -n "$2"; then
114+
let "mit_version = $1 * 100 + $2"
115+
else
116+
warning "Cannot determine module-init-tools version, this is a bug in the script"
117+
mit_version=0
118+
fi
119+
# depmod -E was introduced in 3.10
120+
if test "$mit_version" -ge 310; then
121+
gzip -cd <"$module_symvers" >"$tmp/symvers"
122+
args=(-E "$tmp/symvers")
123+
else
124+
args=(-F "$system_map")
125+
fi
126+
msg=$(/sbin/depmod -n -e "${args[@]}" "$krel" 2>&1 >/dev/null)
127+
res=$?
128+
if test -n "$msg" -o "$res" -ne 0; then
129+
echo "$msg"
130+
error "depmod $krel returned errors (exit code $res)"
131+
explain "depmod must pass without errors otherwise KMP scripts will break"
132+
fi
133+
134+
}
135+
136+
req_re='^(kernel\([^:]*:kernel[[:alnum:]_]*\)|ksym\([^:]*:(struct_module|module_layout)\)) = [0-9a-f]+'
137+
check_kmp()
138+
{
139+
local kmp=$1 prefix prev_krel krel path found_module=false
140+
141+
if ! rpm -q --qf '%{postin}\n' "$kmp" | grep -q 'weak-modules2'; then
142+
error "$kmp does not look like a SUSE kernel module package (wrong %post)"
143+
fi
144+
if ! rpm -q -R "$kmp" | grep -Eq "$req_re"; then
145+
error "$kmp does not have proper dependencies"
146+
fi
147+
exec 3< <(sed -rn 's:^(/lib/modules)?/([^/]*)/(.*\.ko)$:\1 \2 \3:p' \
148+
"$tmp/rpms/$kmp")
149+
while read prefix krel path <&3; do
150+
found_module=true
151+
if test "$prefix" != "/lib/modules"; then
152+
error "$kmp installs modules outside of /lib/modules"
153+
continue
154+
fi
155+
if test -z "$prev_krel"; then
156+
prev_krel=$krel
157+
elif test "$prev_krel" != "$krel"; then
158+
error "$kmp installs modules for multiple kernel versions"
159+
fi
160+
case "$path" in
161+
updates/* | extra/*)
162+
;;
163+
weak-updates/*)
164+
error "$kmp installs modules in weak-updates/ instead of updates/ or extra/"
165+
explain "The weak-modules directory is reserved for automatically generated symlinks"
166+
;;
167+
*)
168+
error "$kmp installs modules in an invalid directory"
169+
explain \
170+
"KMPs must install modules in the updates/ or extra/ subdirectories for the
171+
weak-modules2 script to work"
172+
;;
173+
esac
174+
175+
done
176+
if ! $found_module; then
177+
error "$kmp does not contain any modules"
178+
explain \
179+
"A KMP must contain it's modules in the rpm filelist, otherwise weak-modules2
180+
will not work"
181+
fi
182+
}
183+
184+
check_ko()
185+
{
186+
local ko=$1 kmp bad=false
187+
188+
case "$ko" in
189+
*/weak-updates/*)
190+
if test -L "$ko"; then
191+
return
192+
fi
193+
esac
194+
kmp=$(file_owner "$ko")
195+
case "$kmp" in
196+
kernel-* | *-kmp-*) ;;
197+
*not\ owned\ by\ any\ package)
198+
error "$ko is not owned by any package"
199+
bad=true
200+
;;
201+
*)
202+
error "$ko is not packaged as a KMP"
203+
bad=true
204+
;;
205+
esac
206+
if $bad; then
207+
explain \
208+
"External kernel modules must be packaged as KMPs, see
209+
http://developer.novell.com/wiki/index.php/Kernel_Module_Packages_Manuals"
210+
fi
211+
}
212+
213+
options=$(getopt -n "${0##*/}" -o o:h --long out:,help -- "$@")
214+
if test "$?" -ne 0; then
215+
echo "$USAGE" >&2
216+
exit 1
217+
fi
218+
eval set -- "$options"
219+
logfile="driver-check-report.txt"
220+
while :; do
221+
case "$1" in
222+
-o | --out)
223+
logfile="$2"
224+
shift 2
225+
;;
226+
-h | --help)
227+
echo "${0##*/} $VERSION"
228+
echo "$USAGE"
229+
echo
230+
echo "Please report bugs and enhancement requests to $MAINTAINER"
231+
exit 0
232+
;;
233+
--)
234+
shift
235+
break
236+
;;
237+
esac
238+
done
239+
if test $# -gt 0; then
240+
echo "Unrecognized arguments: $*" >&2
241+
echo "$USAGE" >&2
242+
exit 1
243+
fi
244+
245+
check_system
246+
247+
# set up redirection
248+
if test $logfile != "-"; then
249+
if test -e "$logfile"; then
250+
mv -f "$logfile" "$logfile~"
251+
fi
252+
if test -e /proc/self; then
253+
exec 99> >(cat >"$logfile")
254+
exec 1>&99
255+
exec 2> >(tee -a /proc/self/fd/99 >&2)
256+
else
257+
exec 1>"$logfile"
258+
exec 2>"$logfile"
259+
warning "/proc not mounted"
260+
fi
261+
fi
262+
echo "${0##*/} $VERSION started at $(date -R)" >&2
263+
264+
check_rpm $(rpm -q --qf '%{n}-%{v}-%{r}\n' module-init-tools)
265+
266+
mkdir -p "$tmp/rpms"
267+
found_kernel=false
268+
for rpm in $(rpm -qa --qf '%{n}-%{v}-%{r}\n' 'kernel-*' '*-kmp-*' | \
269+
/usr/lib/rpm/rpmsort); do
270+
case "$rpm" in
271+
kernel-source-* | kernel-syms-* | kernel-*-debug* | kernel-*-man-* | \
272+
kernel-*-devel-* | kernel-firmware-* | kernel-coverage-* | \
273+
kernel-docs-* | kernel-devel-*)
274+
continue
275+
esac
276+
# store the filelist to speed up file_owner()
277+
rpm -ql "$rpm" >"$tmp/rpms/$rpm"
278+
check_rpm "$rpm"
279+
case "$rpm" in
280+
kernel-*)
281+
check_kernel_package "$rpm"
282+
found_kernel=true
283+
;;
284+
*-kmp-*)
285+
check_kmp "$rpm"
286+
;;
287+
esac
288+
done
289+
if ! $found_kernel; then
290+
warning "no kernel package found"
291+
fi
292+
293+
for krel in /lib/modules/*/kernel; do
294+
krel=${krel%/kernel}
295+
krel=${krel##*/}
296+
check_krel "$krel"
297+
done
298+
299+
modules=($(find /lib/modules/ -name '*.ko'))
300+
for module in "${modules[@]}"; do
301+
check_ko "$module"
302+
done
303+
304+
echo "Found $errors error(s) and $warnings warning(s)" >&2
305+
if test "$logfile" != -; then
306+
echo "Report written to $logfile at $(date -R)" >&2
307+
else
308+
echo "Report finished at $(date -R)" >&2
309+
fi
310+
if test $errors -eq 0; then
311+
exit 0
312+
else
313+
exit 1
314+
fi

0 commit comments

Comments
 (0)