Kernel/build for dummies: различия между версиями

Материал из ALT Linux Wiki
(Новая страница: «== Сборка ядра для чайников на примере Unbrekable Enterprise kernel для p6 == Q: Зачем? A: А вдруг тут правду ...»)
 
 
(не показано 9 промежуточных версий 5 участников)
Строка 1: Строка 1:
{{historical}}
{{attention|Настоящая инструкция устарела и описывает положение вещей примерно на 2012‎ год.}}
== Сборка ядра для чайников на примере Unbrekable Enterprise kernel для p6 ==
== Сборка ядра для чайников на примере Unbrekable Enterprise kernel для p6 ==
Q: Зачем?
Q: Зачем?
Строка 6: Строка 9:
=== Курим документацию: ===  
=== Курим документацию: ===  
#  file:///usr/share/doc/kernel-build-tools-0.99.1/README.ru.html
#  file:///usr/share/doc/kernel-build-tools-0.99.1/README.ru.html
http://www.altlinux.org/Kernelnotes/mike
[[Kernelnotes/mike]]


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


  $ cd ~/kernel-build/kernel
  $ cd ~/kernel-build/kernel
Строка 106: Строка 109:
  $ 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.
Строка 118: Строка 122:
  $ vim kernel-image.spec
  $ vim kernel-image.spec
   ... ...
   ... ...
$ rpm -bb --short-circuit /usr/src/RPM/kernel-image.spec
если в конце концов ядро собралось то необходимо вытащить все файлы которые изменялись
из дириктории hasher/chroot и положить в kernel. Не забывая при этом говорить
$ git commit -am '...config changes...'== Сборка Unbrekable Enterprise kernel для Altlinux ==
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
  $ rpm -bb --short-circuit /usr/src/RPM/kernel-image.spec


Строка 244: Строка 127:
из дириктории hasher/chroot и положить в kernel. Не забывая при этом говорить
из дириктории hasher/chroot и положить в kernel. Не забывая при этом говорить
  $ git commit -am '...config changes...'
  $ 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 для тестированя и использования.


и в случае если менялся spec файл:
и в случае если менялся spec файл:
Строка 286: Строка 137:
если собралось, то:
если собралось, то:
  $ mkdir hasher/repo/{x86_64,i586}/base
  $ mkdir hasher/repo/{x86_64,i586}/base
  $ genbasedir --topdir=/home/kde/hasher/repo i586  hasher
  $ genbasedir --topdir=hasher/repo i586  hasher
  $ genbasedir --topdir=/home/kde/hasher/repo x86_64 hasher
  $ genbasedir --topdir=hasher/repo x86_64 hasher


== Беремся за модули ==
== Беремся за модули ==
Строка 298: Строка 149:
  $ git branch -r | grep 'template.*p6$'
  $ git branch -r | grep 'template.*p6$'


Создаем локальные бранчи
  $ for i in `cat ../kernel/modules.build`
  $ for i in `cat ../kernel/modules.build`
  > do
  > do
Строка 303: Строка 155:
  done
  done


Собираем модули
  $ cd ..
  $ cd ..
  $ buildmodules -d alt-linux-p6 -k el-uek  --hasher
  $ buildmodules -d alt-linux-p6 -k el-uek  --hasher
  $ genbasedir --topdir=/home/kde/hasher/repo i586  hasher
  $ genbasedir --topdir=hasher/repo i586  hasher
  $ genbasedir --topdir=/home/kde/hasher/repo x86_64 hasher
  $ genbasedir --topdir=hasher/repo x86_64 hasher


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

Текущая версия от 23:05, 8 декабря 2022

Small-pyramides.png
Архивная информация.
Описываемые в этой статье вещи больше не используются и оставлены только для обратной совместимости.


Внимание! Настоящая инструкция устарела и описывает положение вещей примерно на 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. 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=hasher/repo i586   hasher
$ genbasedir --topdir=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=hasher/repo i586   hasher
$ genbasedir --topdir=hasher/repo x86_64 hasher

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

Ссылки