summaryrefslogtreecommitdiffstats
path: root/kernel/update_kernel
blob: f54ea5d83729365b63e5e9eef58ab45f863305ef (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
#!/bin/bash

ALL_KERNELS="all.kernels"
RPMS=/export/Mandrake/RPMS

ARCH=`uname -m | sed -e 's/i.86/i386/' -e 's/sparc.*/sparc/'`

if [[ "$ARCH" = "x86_64" ]]; then
  STRIP_MODULES="yes"
fi

# 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() {
    if [[ -n "$STRIP_MODULES" ]]; then
	echo -n "stripping $kern: "
	$GIBASEDIR/kernel/strip_modules *.o
	echo "done"
    fi
    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 
	rpm=$(rpm -qp --qf '%{name}' $RPMS/kernel-BOOT-*.rpm | perl -pe 's/kernel-BOOT-((\.?[0-9]+){3})\.(.*)/$1-${3}BOOT/')
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 $RPMS/kernel-BOOT-*.rpm | 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
elif [ "$ARCH" == "ppc" ]; then
        cp -f "$KERNEL_BOOT_PATH"/boot/vmlinux .
elif [ "$ARCH" == "ia64" ]; then
    cp -f "$KERNEL_BOOT_PATH"/boot/efi/vmlinuz* .
else	
    cp -f "$KERNEL_BOOT_PATH"/boot/vmlinuz* .
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