summaryrefslogtreecommitdiffstats
path: root/kernel/update_kernel
blob: 26f2734fb9a02d49f325fbb2d142f8b476ed5b6c (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
#!/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 create_modules() {
    kernel_path=$1
    kern=$2
    echo "Updating modules in '`pwd`' for kernel '$kern'"
    cp -f `find $kernel_path/lib/modules/ -name "*.o"` .
    /sbin/depmod -F $kernel_path/boot/System.map* -e *.o | perl -pe 's/\\\n//' \
	| perl -ne 's/\.o//g; s/[ \t]+/ /g; print if /: /' > modules.dep
    perl -pi -e 's/((plip|ppa|imm): parport)/$1 parport_pc/' modules.dep

    /sbin/modinfo -f '%{filename} %{description}\n' *.o | perl -lne 'print "$1\t$2" if /(.*?)\.o "(.*)"/' > modules.description
}

function create_modules_mar() {
    echo -n "stripping $kern: "
    $GIBASEDIR/kernel/strip_modules *.o 2>/dev/null
    echo "done"

    echo -n "packdrake $kern: "
    ls *.o | packdrake -b9s "modules.cz" 400000
    echo "done"
    mv modules.cz ../modules.cz-$kern
    for i in network network_gigabit_usb network_gigabit network_usb cdrom hd hdcdrom_usb pcmcia all; do
	modules_var="${i}_modules"
	eval "create_marfile ${i}_modules.mar \$$modules_var"
    done
    echo
}

[ -e $ALL_KERNELS/.main ] && main=$(cat $ALL_KERNELS/.main)

if [ "$ARCH" == "ia64" ] || [ "$ARCH" == "ppc" ]; then
	rpm=$(rpm -qp --qf '%{name}' $RPMS/kernel-[0-9]*.rpm | perl -pe 's/kernel-((\.?[0-9]+){3})\.(.*)/$1-${3}/')
else 
        #- allow specifying a kernel file on commandline (./update_kernel /RPMS/kernel-2.4.22.10mdk-1-1mdk.i586.rpm 2.4.22-10mdk)
        if [ -n "$1" ]; then
            file=$1
            rpm=$2
        else
            file=$RPMS/kernel-BOOT-*.rpm
            rpm=$(rpm -qp --qf '%{name}' $file | perl -pe 's/kernel-BOOT-((\.?[0-9]+){3})\.(.*)/$1-${3}BOOT/')
        fi
fi
if [ -n "$rpm" -a ! -e $ALL_KERNELS/$rpm ]; then
    [ -n "$main" ] && rm -rf $ALL_KERNELS/$main
    cd $ALL_KERNELS
    rm -rf $rpm ; mkdir $rpm
    cd $rpm
    if [ "$ARCH" == "ia64" ] || [ "$ARCH" == "ppc" ]; then
      rpm2cpio $RPMS/kernel-[0-9]*.rpm | cpio -id
    else
      rpm2cpio $file | cpio -id
    fi
    find -type f -name "*.o.gz" | xargs gunzip
    cd ../..

    for dir in /tftpboot /var/lib/tftpboot; do
	rm -f $dir/{vmlinuz,network.rdz}
    done
fi 

[ -n "$main" -a -e $ALL_KERNELS/$main ] || {
    cd $ALL_KERNELS
    main=$(echo 2.* | 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=`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