blob: 5da807e71a605e319498d58ad9b6ca83289f55c8 (
plain)
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
|
#!/bin/bash
ALL_KERNELS="all.kernels"
RPMS=/export/Mandrake/RPMS
ARCH=`uname -m | sed -e 's/i.86/i386/' -e 's/sparc.*/sparc/'`
# move stuff to this new "kernel" directory
if [ ! -d all.kernels ]; then
if [ -d ../all.kernels ]; then
mv ../all.kernels .
rm -rf ../all.modules
else
# make sure "all.kernels" directory exists
mkdir all.kernels
fi
fi
function create_marfile() {
marfile=$1
shift
$GIBASEDIR/mdk-stage1/mar/mar -c $marfile $*
}
function build_kernel_is_26() {
uname -r | grep -q '^2\.6'
}
function kern_version() {
if echo $1 | grep -q ^2.4; then
version=24
objects="*.o"
else
version=25
objects="*.ko"
fi
}
function create_modules() {
kernel_path=$1
kern=$2
echo "Updating modules in '`pwd`' for kernel '$kern'"
kern_version $kern
find $kernel_path/lib/modules/ -name "$objects" -exec cp -f {} . \;
if [ $version -eq 24 ]; then
/sbin/depmod-24 -F $kernel_path/boot/System.map* -e *.o | perl -pe 's/\\\n//' \
| perl -ne 's/\.o//g; s/[ \t]+/ /g; print if /: /' > modules.dep
else
cp $kernel_path/lib/modules/*/modules.dep .
perl -ni -e 's|/\S+/([^/]+)\.k?o(\.gz)|$1|g; print if /: /' modules.dep
fi
perl -pi -e 's/((plip|ppa|imm): parport)/$1 parport_pc/' modules.dep
if build_kernel_is_26; then
/sbin/modinfo $objects | perl -lne 'print "$name\t$1" if $name && /^description:\s*(.*)/; $name = $1 if m!^filename:\s*(.*)\.k?o!' > modules.description
else
/sbin/modinfo-$version -f '%{filename} %{description}\n' $objects | perl -lne 'print "$1\t$2" if /(.*?)\.k?o "(.*)"/' > modules.description
fi
}
function create_modules_mar() {
kern_version $kern
if [ $version -eq 24 ]; then
echo -n "stripping $kern: "
$GIBASEDIR/kernel/strip_modules *.o 2>/dev/null
echo "done"
else
echo "don't strip on 2.6 since it breaks modules"
fi
if [ -z "$MOVE" ]; then
echo -n "packdrake $kern: "
ls $objects | packdrake -b9s "modules.cz" 400000
echo "done"
mv modules.cz ../modules.cz-$kern
fi
for i in $images; do
eval "modules=\$${i}_modules_raw"
modules_with_deps=`perl -I $GIBASEDIR/kernel $GIBASEDIR/kernel/dependencies.pl $version modules.dep $modules`
eval "create_marfile ${i}_modules.mar $modules_with_deps"
done
echo
}
function install_kernel() {
rpm=$1
ver=$(rpm -qp --qf '%{name}' $rpm 2>/dev/null | perl -pe 's/kernel(-(BOOT))?-((\.?[0-9]+){3})\.(.*)/$3-$5$2/')
[ -n "$ver" ] || return
if [ -n "$2" ]; then
[ -d $ALL_KERNELS/$ver ] && return
main_ver=$2
echo Removing previous kernel $ALL_KERNELS/$main_ver*
rm -rf $ALL_KERNELS/$main_ver*
fi
rm -rf $ALL_KERNELS/$ver
echo "Installing kernel $ver"
mkdir -p $ALL_KERNELS/$ver
rpm2cpio $rpm | (cd $ALL_KERNELS/$ver ; cpio -id)
find $ALL_KERNELS/$ver -type f -name "*.o.gz" -o -name "*.ko.gz" | xargs gunzip
# will get back when make_boot_img is called
for dir in /tftpboot /var/lib/tftpboot; do
rm -f $dir/{vmlinuz,network.rdz,all.rdz}
done
}
[ -e $ALL_KERNELS/.main ] && main=$(cat $ALL_KERNELS/.main)
if [ "$1" = "--move" ]; then
MOVE=1
shift
fi
if [ "$ARCH" == "ia64" ] || [ "$ARCH" == "ppc" ]; then
name=kernel
else
name=kernel-BOOT
fi
if [ -n "$1" ]; then
#- allow specifying a kernel file on commandline (./update_kernel /RPMS/kernel-2.4.22.10mdk-1-1mdk.i586.rpm)
install_kernel $1
else
install_kernel $RPMS/kernel-BOOT-2.4*.rpm 2.4
install_kernel $RPMS/kernel-BOOT-2.6*.rpm 2.6
fi
[ -n "$main" -a -e $ALL_KERNELS/$main ] || {
cd $ALL_KERNELS
main=$(echo 2.6* | sed 's/.* //')
[ -n "$main" ] || main=$(echo 2.4* | sed 's/.* //')
echo "Choosing $main"
echo $main > .main
cd ..
}
if [ "$ARCH" == "i386" ]; then
for i in $ALL_KERNELS/*/boot/vmlinuz*; do
#disable any existing resolution!!!
/usr/sbin/rdev -v $i 65535 #788 #785
done
fi
GIBASEDIR=`pwd`/..
rm -rf all.modules ; mkdir all.modules
for i in $ALL_KERNELS/*; do
kern=`basename $i`
(
mkdir all.modules/$kern
cd all.modules/$kern
create_modules ../../$i $kern
) || exit 1
done
cp -f all.modules/$main/modules.description .
l=`MOVE=$MOVE perl modules.pl images` || exit 1
eval $l
for i in $ALL_KERNELS/*; do
kern=`basename $i`
(
cd all.modules/$kern
if [ "$kern" = "$main" ]; then
create_modules_mar ../../$i $kern
else
echo "$kern ($main)"
create_modules_mar ../../$i $kern 2>/dev/null
fi
) || exit 1
done
./check_mar.pl
|