#!/bin/bash # 20060310 patch_kernel_src.sh hse@ukr.net # Distributed under the terms of the GNU General Public License v2 or late # patching linux kernel source code (installing) # use code from scripts/patch-kernel patchdir=/usr/portage/distfiles # директорія куди скачали архіви ядра та патчів VER=2.6.10 # версія ядра (kernel-2.6.*.bz2 ядро без припатчу) STOP=2.6.15 # версія ядра на якій спинити patch-kernel, обов'язково використовуйте при накладанні припатчів! sourcedir0=/usr/src # директорія де розпакуються і пропатчаться сирці ядра sourcedir=$sourcedir0/linux-$VER # директорія де розпакуються і пропатчаться сирці ядра # Уважно слідкуйте, щоб версія патчів співпадала з версією ядра (STOP=2.6.15)! # Послідовність патчів можу бути дуже суттева addpatch[1]=genpatches-2.6.15-10.base.tar.bz2 # стабілізаційні патчі Gentoo addpatch[2]=genpatches-2.6.15-10.extras.tar.bz2 # збірка додаткових патчів Gentoo addpatch[3]=patch-2.6.15-om-1.bz2 # патч для кластеризації openmosix addpatch[4]=ruby-2.6.13-A0.diff.bz2 # патч для багатотермінальності addpatch[5]=fusion-2.6.11.diff.bz2 # патч для використання заліза DirectFBодночасно багатьма прогами N=3 # кількість патчів # verifing signature (перевірка підписів) for i in `ls -v $patchdir/ |grep '.bz2.sign'` do j="`echo "$i" |awk -F'bz2' '{ print $1 }'`""bz2" gpg --verify $patchdir/$i $patchdir/$j > ./verify.gpg 2>&1 if [ "`cat ./verify.gpg |grep 'gpg: Good signature from'`" = "" ] then echo " $j bad signature exiting ... " exit 1 else echo " $j Good signature " fi done # unpaking source code (розпаковуємо ядро) echo "Unpacking kernel source..." if [ -d $sourcedir ] then echo " dirictory $sourcedir exist!!! " exit 1 else cd $sourcedir0 bzip2 -dkc $patchdir/linux-$VER.tar.bz2 | tar xf - fi #patching kernel (патчемо ядро) $sourcedir/scripts/patch-kernel $sourcedir $patchdir $STOP cd $sourcedir ((i=1)) while (( $i <= $N )) do echo -n "Applying ${addpatch[$i]} (bzip2)..." bzip2 -dkc $patchdir/${addpatch[$i]} | patch -Np1 -s || exit 1 echo "done." echo "${addpatch[$i]}" >> patches.txt ((i=$i+1)) done # determine current kernel version (визначаємо версію ядра) TMPFILE=`mktemp .tmpver.XXXXXX` || { echo "cannot make temp file" ; exit 1; } grep -E "^(VERSION|PATCHLEVEL|SUBLEVEL|EXTRAVERSION)" $sourcedir/Makefile > $TMPFILE tr -d [:blank:] < $TMPFILE > $TMPFILE.1 source $TMPFILE.1 rm -f $TMPFILE* if [ -z "$VERSION" -o -z "$PATCHLEVEL" -o -z "$SUBLEVEL" ] then echo "unable to determine current kernel version" >&2 exit 1 fi NAME=`grep ^NAME $sourcedir/Makefile` NAME=${NAME##*=} VER=$VERSION.$PATCHLEVEL.$SUBLEVEL${EXTRAVERSION} echo "Current kernel version is $VER ($NAME)" if [ -d $sourcedir0/linux-$VER ] then echo " dirictory $sourcedir0/linux-$VER exist!!! " exit 1 else mv $sourcedir $sourcedir0/linux-$VER fi echo " Компіляція та встановлення Лінукс ядра версії-$VER Якщо Ви цього не бажаєте натисніть Ctrl+C " sleep 20 # "перевірка" сирців cd $sourcedir0/linux-$VER make mrproper # конфігурація cp ../.config ./ if ?span> <span class="hl opt"> then emerge -n genkernel #genkernel --oldconfig --no-mrproper --gensplash=livecd-2005.0 --kerneldir=/usr/src/linux-$VER/ --kernname=LiveCD --lvm2 --dmraid all genkernel --gensplash=livecd-2005.0 --kerneldir=/usr/src/linux-$VER/ --kernel-config=/usr/src/.config --kernname=LiveCD --lvm2 all else # конфігурація cp ../.config ./ make oldconfig # компіляція та встановлення make && make modules_install && cp arch/i386/boot/bzImage /boot/kernel-$VER && cp System.map /boot/System.map-$VER fi rm /usr/src/linux; ln -s $sourcedir0/linux-$VER /usr/src/linux echo " Тепер Вам необхідно перезібрати всі пакети, що залежать від ядра! Переважно це драйвери, що не входять в ядро (ati-drivers, lm_sensors, drbd...) Додайте нове ядро в /boot/grub/grub.conf та перезавантажтесь з новим ядром. " sleep 1 exit 0