Kernel/build for dummies

Материал из ALT Linux Wiki

(Различия между версиями)
Перейти к: навигация, поиск
Строка 106: Строка 106:
  $ git branch kernel-image-el-uek.Mp6 kernel-image-el-uek
  $ git branch kernel-image-el-uek.Mp6 kernel-image-el-uek
-
Собираем:
+
=== Собираем ===
  cd ..
  cd ..
  buildkernel --hasher el-uek
  buildkernel --hasher el-uek
 +
=== Что делать есть сборка обрывается ===
Иптыть... обломались в процессе сборки, нужно поправить kernel-image.spec.  
Иптыть... обломались в процессе сборки, нужно поправить kernel-image.spec.  
На самом деле это не проблема, править и добивать ногами сборку будем hasher.
На самом деле это не проблема, править и добивать ногами сборку будем hasher.
Строка 122: Строка 123:
если в конце концов ядро собралось то необходимо вытащить все файлы которые изменялись
если в конце концов ядро собралось то необходимо вытащить все файлы которые изменялись
из дириктории hasher/chroot и положить в kernel. Не забывая при этом говорить
из дириктории hasher/chroot и положить в kernel. Не забывая при этом говорить
-
  $ git commit -am '...config changes...'== Сборка Unbrekable Enterprise kernel для Altlinux ==
+
  $ git commit -am '...config changes...'
-
Q: Зачем?
+
-
A: А вдруг тут правду написали  http://www.opennet.ru/opennews/art.shtml?num=33344 .
+
-
0. Курим:
 
-
  file:///usr/share/doc/kernel-build-tools-0.99.1/README.ru.html
 
-
  http://www.altlinux.org/Kernelnotes/mike
 
-
1. инструменты
 
-
$ apt-get install git gear kernel-build-tools
 
-
 
-
Скачать скрипт http://www.altlinux.org/Файл:Git-empty-branch.sh и сохранить
 
-
как ~/bin/git-empty-branch
 
-
 
-
2. подготовка окружения kernel-build-tools
 
-
 
-
$ mkdir ~/kernel-build && cd ~/kernel-build
 
-
 
-
Собирать будем по корану, т.е. используя hasher
 
-
$ mkdir hasher kernel
 
-
$ cp /usr/share/doc/kernel-build-tools-*/config.sh.sample config.sh
 
-
$ echo 'hsh_workdir=${HOME}/kernel-build/hasher' > config.sh
 
-
 
-
3. подготовка git репозитария с исходниками ядра.
 
-
Согласно корану пакеты с ядрами именуются согласно шаблону kernel-image-$flavor.
 
-
kernel-build-tools для сборки требует наличие в git репозитарии локального бранча
 
-
с именем kernel-image-$flavor. Далее быдем использовать flavor=el-uek.
 
-
 
-
$ cd ~/kernel-build/kernel
 
-
 
-
создадим пустой репозитарий:
 
-
$ git init
 
-
 
-
создадим пустой бранч, из которого будем собирать наше ядро:
 
-
$ git-empty-branch kernel-image-el-uek
 
-
с чистой совестью проигнорируем уведомление о невозможности удаления .git/index.
 
-
 
-
добавим репозитарии с исходниками ядер vanila и uek
 
-
$ git remote add vanila git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
 
-
$ git remote add oracle git://oss.oracle.com/git/linux-uek-2.6.39.git
 
-
проверить что мы добавили можно командой
 
-
$ git remote -v
 
-
 
-
Oracle собирая uek2 взяли за основу vanila kernel v3.0 и изменили название версии
 
-
ядра, поэтому их ядро имет версию якобы 2.6.39. Это сделано для разлиной проприетарщины
 
-
которая не понимает новую нумерацию версий ядра.
 
-
 
-
Скопируем бранч исходников linux-v3.0 как kernel-source:
 
-
$ git fetch vanila linux-3.0.y:kernel-source
 
-
 
-
Аналогично поступим с исходниками от oracle:
 
-
$ git fetch oracle master:kernel-source-uek
 
-
 
-
Проверяем:
 
-
$ git branch
 
-
* kernel-image-el-uek
 
-
  kernel-source
 
-
  kernel-source-uek
 
-
 
-
 
-
Сливаем все в кучу:
 
-
git merge -s ours kernel-source
 
-
git merge -s ours kernel-source-uek
 
-
 
-
Cоздаем или попируем файлы kernel-image.spec config-x86_64 config-i586
 
-
kernel-image.spec логично взять из репозитария aspsk@ и использовать в качестве
 
-
шаблона для uek. Не забиваем на:
 
-
add_changelog -e 'Initial Build' kernel-image.spec
 
-
 
-
config-* создадим на предварительно собирая ядро посредством:
 
-
$ zcat /proc/config.gz > .config
 
-
$ make oldconfig && make menuconfig && make bzImage modules
 
-
 
-
Заодно создадим список модулей которые должны собираться вместе с ядром:
 
-
$ cat <<EOF >modules.build
 
-
fglrx
 
-
nvidia
 
-
bcmwl
 
-
xtables-addons
 
-
rtl8192
 
-
rtl8168
 
-
e1000e
 
-
EOF
 
-
 
-
Настроим gear.
 
-
При сборке мы планируем использовать уже упакованные до нас исходники vanila kernel
 
-
из пакета kernel-source-3.0 и один большой патч который можно посмотреть командой
 
-
$ git diff v3.0 v2.6.39-100.5.1
 
-
 
-
$ mkdir .gear
 
-
cat <<EOF > .gear/rules
 
-
cat .gear/rules
 
-
copy: config-*
 
-
diff: v3.0:. v2.6.39-100.5.1:. name=kernel-image-el-uek-2.6.39.100.5.1-alt1.patch
 
-
EOF
 
-
 
-
Уффф... коммит:
 
-
$ git add .gear
 
-
$ git add config-*
 
-
$ git add kernel-*
 
-
$ git add modules.build
 
-
$ git commit -am 'Initial build'
 
-
$ gear-commit -a
 
-
$ gear-update-tag -avc && git commit -am 'gear-update-tag'
 
-
$ git branch kernel-image-el-uek.Mp6 kernel-image-el-uek
 
-
 
-
Собираем:
 
-
$ cd ..
 
-
$ buildkernel --hasher el-uek
 
-
 
-
Иптыть... обломались в процессе сборки, нужно поправить kernel-image.spec.
 
-
На самом деле это не проблема, править и добивать ногами сборку будем hasher.
 
-
 
-
$ hsh-install ./hasher vim
 
-
$ hsh-shell ./hasher
 
-
$ cd /usr/src/RPM/SPECS
 
-
$ vim kernel-image.spec
 
-
... ...
 
-
$ rpm -bb --short-circuit /usr/src/RPM/kernel-image.spec
 
-
 
-
если в конце концов ядро собралось то необходимо вытащить все файлы которые изменялись
 
-
из дириктории hasher/chroot и положить в kernel. Не забывая при этом говорить
 
-
$ git commit -am '...config changes...'
 
и в случае если менялся spec файл:
и в случае если менялся spec файл:
  $ gear-commit -a
  $ gear-commit -a

Версия 12:01, 16 марта 2012

Содержание

Сборка ядра для чайников на примере Unbrekable Enterprise kernel для p6

Q: Зачем?

A: А вдруг тут правду написали http://www.opennet.ru/opennews/art.shtml?num=33344 .

Курим документацию:

  1. file:///usr/share/doc/kernel-build-tools-0.99.1/README.ru.html
  2. http://www.altlinux.org/Kernelnotes/mike

Установим инструменты:

$ apt-get install git gear kernel-build-tools

Скачать скрипт http://www.altlinux.org/Файл:Git-empty-branch.sh и сохранить как ~/bin/git-empty-branch

подготовка окружения kernel-build-tools

$ mkdir ~/kernel-build && cd ~/kernel-build

Собирать будем по корану, т.е. используя hasher

$ mkdir hasher kernel
$ cp /usr/share/doc/kernel-build-tools-*/config.sh.sample config.sh
$ echo 'hsh_workdir=${HOME}/kernel-build/hasher' > config.sh

подготовка git репозитария с исходниками ядра

Согласно корану пакеты с ядрами именуются согласно шаблону kernel-image-$flavor. kernel-build-tools для сборки требует наличие в git репозитарии локального бранча с именем kernel-image-$flavor. Далее быдем использовать flavor=el-uek.

$ cd ~/kernel-build/kernel

создадим пустой репозитарий

$ git init

создадим пустой бранч, из которого будем собирать наше ядро:

$ git-empty-branch kernel-image-el-uek

с чистой совестью проигнорируем уведомление о невозможности удаления .git/index.

Добавим репозитарии с исходниками ядер vanila и uek

$ git remote add vanila git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
$ git remote add oracle git://oss.oracle.com/git/linux-uek-2.6.39.git

проверить что мы добавили можно командой

$ git remote -v

Oracle собирая uek2 взяли за основу vanila kernel v3.0 и изменили название версии ядра, поэтому их ядро имет версию якобы 2.6.39. Это сделано для разлиной проприетарщины которая не понимает новую нумерацию версий ядра.

Скопируем бранч исходников linux-v3.0 как kernel-source:

$ git fetch vanila linux-3.0.y:kernel-source

Аналогично поступим с исходниками от oracle:

$ git fetch oracle master:kernel-source-uek

Проверяем:

 $ git branch
  * kernel-image-el-uek
    kernel-source
    kernel-source-uek


Сливаем все в кучу:

$ git merge -s ours kernel-source
$ git merge -s ours kernel-source-uek

Cоздаем или попируем файлы kernel-image.spec config-x86_64 config-i586 kernel-image.spec логично взять из репозитария aspsk@ и использовать в качестве шаблона для uek. Не забиваем на:

$ add_changelog -e 'Initial Build' kernel-image.spec

config-* создадим на предварительно собирая ядро посредством:

$ zcat /proc/config.gz > .config
$ make oldconfig && make menuconfig && make bzImage modules

Заодно создадим список модулей которые должны собираться вместе с ядром:

$ cat <<EOF >modules.build
 fglrx
 nvidia
 bcmwl
 xtables-addons
 rtl8192
 rtl8168
 e1000e
 EOF

Настроим gear. При сборке мы планируем использовать уже упакованные до нас исходники vanila kernel из пакета kernel-source-3.0 и один большой патч который можно посмотреть командой

$ git diff v3.0 v2.6.39-100.5.1
$ mkdir .gear
 cat <<EOF > .gear/rules
 cat .gear/rules 
 copy: config-*
 diff: v3.0:. v2.6.39-100.5.1:. name=kernel-image-el-uek-2.6.39.100.5.1-alt1.patch
 EOF

Уффф... коммит:

$ git add .gear 
$ git add config-*
$ git add kernel-* 
$ git add modules.build
$ git commit -am 'Initial build'
$ gear-commit -a
$ gear-update-tag -avc && git commit -am 'gear-update-tag'
$ git branch kernel-image-el-uek.Mp6 kernel-image-el-uek

Собираем

cd ..
buildkernel --hasher el-uek

Что делать есть сборка обрывается

Иптыть... обломались в процессе сборки, нужно поправить kernel-image.spec. На самом деле это не проблема, править и добивать ногами сборку будем hasher.

$ hsh-install ./hasher vim
$ hsh-shell ./hasher
$ cd /usr/src/RPM/SPECS
$ vim kernel-image.spec
 ... ...
$ rpm -bb --short-circuit /usr/src/RPM/kernel-image.spec

если в конце концов ядро собралось то необходимо вытащить все файлы которые изменялись из дириктории hasher/chroot и положить в kernel. Не забывая при этом говорить

$ git commit -am '...config changes...'

и в случае если менялся spec файл:

$ gear-commit -a

в дириктории kernel.

проверяем:

$ cd ~/kernel-build && buildkernel --hasher el-uek

если собралось, то:

$ mkdir hasher/repo/{x86_64,i586}/base
$ genbasedir --topdir=/home/kde/hasher/repo i586   hasher
$ genbasedir --topdir=/home/kde/hasher/repo x86_64 hasher

Беремся за модули

$ mkdir modules && cd modules
$ git init
$ git remote add aspsk git://git.altlinux.org/people/aspsk/packages/kernel-modules.git
$ git fetch aspsk

Смотрим что доступно для нашего дистрибутива, например p6

$ git branch -r | grep 'template.*p6$'
$ for i in `cat ../kernel/modules.build`
> do
> git branch -f template/$i/alt-linux-p6 aspsk/template/$i/alt-linux-p6
done
$ cd ..
$ buildmodules -d alt-linux-p6 -k el-uek  --hasher
$ genbasedir --topdir=/home/kde/hasher/repo i586   hasher
$ genbasedir --topdir=/home/kde/hasher/repo x86_64 hasher

теперь можно выкатывать папку hashe/repo/ в pub для тестированя и использования.

Ссылки

 
Личные инструменты