Сборка deb-пакета ядра xen-amd64 с патчами dm-ioband и blkio-cgroup

0. Обновляем списки пакетов
apt-get update

1. Устанавливаем необходимые для сборки пакеты
apt-get install build-essential fakeroot ncurses-dev dpkg-dev devscripts

2.
mkdir new_kernel; cd new_kernel

3. Добываем исходники текущего ядра со всеми патчами (версия со временем будет расти)
apt-get source linux-image-2.6.32-5-xen-amd64


4. Качаем патч dm-ioband (текущую версию всегда можно подсмотреть на сайте)
wget -O dm-ioband-1.14.0.patch "http://downloads.sourceforge.net/project/ioband/dm-ioband%20patches/1.14.0/dm-ioband-1.14.0.patch?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fioband%2Ffiles%2Fdm-ioband%2520patches2F1.14.0%2F&ts=1325766844&use_mirror=ignum"

5. И патчи для blkio-cgroup (версию смотреть на том же сайте)
wget -O blkio-cgroup-v13.tar.bz2 "http://downloads.sourceforge.net/project/ioband/blkio-cgroup%20patches/v13/blkio-cgroup-v13.tar.bz2?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fioband%2Ffiles%2Fblkio-cgroup%2520patches%2Fv13%2F&ts=1325773162&use_mirror=citylan"

6. Распаковываем
tar -xjf blkio-cgroup-v13.tar.bz2

7.
cd linux-2.6-2.6.32

8. Патчим раз.

$ patch -p1 < ../dm-ioband-1.14.0.patch
patching file Documentation/device-mapper/ioband.txt
patching file drivers/md/Kconfig
patching file drivers/md/Makefile
patching file drivers/md/dm-ioband-ctl.c
patching file drivers/md/dm-ioband-policy.c
patching file drivers/md/dm-ioband-type.c
patching file drivers/md/dm-ioband.h
patching file drivers/md/dm-ioband-rangebw.c
patching file Documentation/device-mapper/range-bw.txt
patching file include/trace/events/dm-ioband.h

9. Патчим два.
$ patch -p1 < ../blkio-cgroup-v13/blkio-cgroup-v13-1-pagecgroup.patch
patching file include/linux/memcontrol.h
patching file include/linux/mmzone.h
patching file include/linux/page_cgroup.h
patching file init/Kconfig
patching file mm/Makefile
patching file mm/memcontrol.c
patching file mm/page_cgroup.c


$ patch -p1 < ../blkio-cgroup-v13/blkio-cgroup-v13-2-iocontext.patch
patching file block/blk-ioc.c
patching file include/linux/iocontext.h


$ patch -p1 < ../blkio-cgroup-v13/blkio-cgroup-v13-3-body.patch
patching file include/linux/biotrack.h
patching file include/linux/cgroup_subsys.h
patching file init/Kconfig
patching file mm/biotrack.c
patching file mm/page_cgroup.c
patching file mm/Makefile


$ patch -p1 < ../blkio-cgroup-v13/blkio-cgroup-v13-4-hook.patch
patching file fs/buffer.c
patching file fs/direct-io.c
patching file mm/bounce.c
patching file mm/filemap.c
patching file mm/memory.c
Hunk #2 succeeded at 2165 (offset 3 lines).
Hunk #3 succeeded at 2590 (offset 3 lines).
Hunk #4 succeeded at 2668 (offset 4 lines).
Hunk #5 succeeded at 2823 (offset 4 lines).
patching file mm/page-writeback.c
Hunk #2 succeeded at 1128 (offset 1 line).
patching file mm/swap_state.c


$ patch -p1 < ../blkio-cgroup-v13/blkio-cgroup-v13-5-doc.patch
patching file Documentation/cgroups/00-INDEX
patching file Documentation/cgroups/blkio.txt


$ patch -p1 < ../blkio-cgroup-v13/blkio-cgroup-v13-6-ioband.patch
patching file include/linux/biotrack.h
patching file mm/biotrack.c
patching file drivers/md/dm-ioctl.c
patching file drivers/md/dm-ioband-policy.c
patching file drivers/md/dm-ioband-rangebw.c
patching file drivers/md/dm-ioband-ctl.c
patching file drivers/md/dm-ioband.h
patching file drivers/md/dm-ioband-type.c


$ patch -p1 < ../blkio-cgroup-v13/blkio-cgroup-v13-7-ioband-doc.patch
patching file Documentation/cgroups/blkio.txt

10. Подготавливаем дерево исходников со всеми необходимыми патчами и нужным arch/feature set.
fakeroot make -f debian/rules.gen setup_amd64_xen

11. Конфигурируем новое ядро дабы включить новые фичи
make -C debian/build/build_amd64_xen_amd64 menuconfig

добавляем опцию Device Drivers-> Multiple devices driver support (RAID and LVM) -> I/O bandwidth control (CONFIG_DM_IOBAND=M)
добавляем опцию General setup -> Control Group support -> Block I/O cgroup subsystem (CONFIG_CGROUP_BLKIO=Y)
Сохраняем при выходе.
12. Билд!
fakeroot make -f debian/rules.gen binary-arch_amd64_xen_amd64

13. Курим бамбук 100500 минут, пока соберется новое ядро.
14.
$ cd .. ; ls *.deb
linux-headers-2.6.32-5-xen-amd64_2.6.32-41_amd64.deb  linux-image-2.6.32-5-xen-amd64-dbg_2.6.32-41_amd64.deb
linux-image-2.6.32-5-xen-amd64_2.6.32-41_amd64.deb    xen-linux-system-2.6.32-5-xen-amd64_2.6.32-41_amd64.deb

Новые пакеты будут содержать другой суффикс, чем оригинальный пакет — это чтобы не путалось с официальными пакетами.
Тем не менее после установки (через dpkg -i или путем создания собственного apt-репозитория) названия в deb-репозитории будет такое-же, как и в оригинальных пакетах, что не позволит сломать зависимости:
Package: linux-headers-2.6.32-5-xen-amd64
Package: linux-image-2.6.32-5-xen-amd64-dbg
Package: linux-image-2.6.32-5-xen-amd64
Package: xen-linux-system-2.6.32-5-xen-amd64  

Проверить правильность сборки можно так: в linux-image-....deb в файле CONTENTS/boot/config-2.6.32-5-xen-amd64 найти опции, которые включались выше.
Официальный howto: wiki.debian.org/HowToRebuildAnOfficialDebianKernelPackage
  • 0
  • 21 марта 2012, 10:29
  • admin

Комментарии (0)

RSS свернуть / развернуть
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.