ALT Linux kernel packages development
 help / color / mirror / Atom feed
* [d-kernel] kernel policy FINAL.
@ 2003-05-22 18:23 Peter Novodvorsky
  2003-05-23  6:26 ` Ed V. Bartosh
  0 siblings, 1 reply; 2+ messages in thread
From: Peter Novodvorsky @ 2003-05-22 18:23 UTC (permalink / raw)
  To: devel-kernel


please review.

- решил не добавлять новых дополнительных спеков потому что а). они
  требуют дополнительной обточки, б). они могут сильно отличаться друг
  от друга.

- добавил ссылку на файл /etc/rpm/macros.d/kernel из пакета
  kernel-build-tools и убрал описание типичного способа прикладывания
  патчей. 

- не стал добавлять описание про add-on от ab, его можно будет
  подготовить в соответствующем виде для Version 1.1.

- добавил информацию о переключении headers, специально -- общую, сама
  технология может меняться.

Kernel Policy for Sisyphus.
===========================

Version: 1.0

0. Документ и его обновление.
-----------------------------

kernel policy обновляется участниками kernel maintainer committee.
Состав kernel committee:
- Ed V. Bartosh
- Dmitry V. Levin
- Peter A. Novodvorsky


1. Именование
-------------

1.1 Патчи.
----------

Есть два вида патчей:

kernel-feat-%{upsteram_name}
kernel-fix-%{upstream_name}

Название пакетов с патчами базируется на иерархии каталогов в 
исходных текстах ядра, в соответствии с местом основного приложения
патча. 

В пакетах feat содержатся патчи добавляющие ядру Linux новые
возможности. Это могут быть и драйверы устройств (рекомендуется
называть такие kernel-feat-drivers-<имя_устройства>) и файловых
систем (желательно называть kernel-feat-fs-<имя_файловой
системы>), добавление новых возможностей к сетевой подсистеме
(желательно называть kernel-feat-net-<сокращённое название
улучшения>), а так же добавление новых возможностей к корневой части
(kernel/*, mm/*, arch/*) ядра, (желательно называть
kernel-feat-core-<название улучшения>). При наименовании патчей
рекомендуется следовать иерархии каталогов в исходных текстах ядра.

Все пакеты fixes поддерживаются kernel maintainer commitee. Именуются
по именам подсистем ядра, а так же существует отдельный пакет для
security патчей и build патчей:
kernel-fixes-{net,drivers,fs,vm,core,security,build}.

Глубина иерархии в названии пакета может варьироваться, некоторые
уровни - пропускаться, чтобы сделать название короче,
например kernel-net-netfilter вместо kernel-net-ipv4-netfilter и
kernel-net-ipv6-netfilter.
 
1.2 Внешние модули.
-------------------

Внешними модулями называются модули, исходные файлы которых, как
правило, поставляются не в виде патчей и которые собираются отдельно
от ядра.

Пакеты с такими собранными модулями должны называться
kernel-modules-<сокращённое название набора модулей>-<версия ядра с
которым собраны модули>-<flavour ядра с которым собраны модули>.

Пакеты с хедерами этих модулей должны назваться
kernel-headers-<сокращённое название набора модулей>-<версия ядра с
которым собраны модули>-<flavour ядра с которым собраны модули>. Такие
пакеты могут и не существовать, они требуются лишь в том случае, когда
хедеры требуются утилит или других модулей.

1.3 Пакеты с исходными текстами модулей.
----------------------------------------

Такие пакеты должны называться: kernel-source-<имя проекта>-<версия
модулей>.

1.4 Пакеты с исходными текстами ядра.
-------------------------------------

Такие пакеты должны называться: kernel-source-<версия ядра без
суффикса (rc*|pre*)>.

1.5 Пакеты с ядром.
------------------

Такие пакеты должен называться kernel-image-<flavour ядра>.

Пакеты с хедерами ядра должны называться kernel-headers-<flavour
ядра>.

1.6 Пакет kernel-build-tools
----------------------------
В этом пакете содержатся rpm определения, макросы, скрипты и другие
вспомогательные средства, которые рекомендуется использовать в spec
файлах kernel- пакетов и в apply скриптах. В том числе в файле
/etc/rpm/macros.d/kernel содержится макрос, который используется при
прикладывании патчей если отсутствует приложенный apply скрипт.

2. Versioning пакетов.
----------------------

Пакетам с feat патчами желательно присваивать версии, полученные из
upstream. Если upstream не делает versioning, допустимо называть их по
дате последнего изменения upstream в формате yyyy.mm.dd.

Пакетам с fix патчами обязательно присваивать версии по дате
запаковывания в формате yyyy.mm.dd.

Пакетам с внешними модулями и ядром, а так же с их исходными текстами
модулей желательно присваивать версии, полученные из upstream. Если
upstream не делает versioning, допустимо называть их по дате
последнего изменения upstream в формате yyyy.mm.dd. 

Пакетам с исходными текстами ядра присваиваются версии по следующей
схеме: 
  - если это версия preX, то версия пакета будет 0.0.X.
  - если это версия rcX, то версия пакета будет 0.X.0.
  - если это релиз, то версия пакета будет 1.0.0.

3. Содержимое пакетов.
----------------------

3.1 Патчи.
----------

/usr/src/kernel/patches/<имя_патча>/*            патчи
optional:
         kernel/patches/apply/<имя_патча>        программа, которая
						 прикладывает патчи

Файлы с патчами рекомендуется называть по шаблону "NN_name.patch", где
NN -- номер патча, определяющий порядок его приложения. Если есть
патч, который надо прикладывать только в случае существования других
патчей, то его рекомендуется положить в каталог
/usr/src/kernel/patches/<имя_патча>/NN_<имя приложенного патча>.  

Программа прикладывающая патч, будучи вызванная из каталога с исходными
текстами ядра, обязана приложить к ним нужные патчи или возвратить 1 в
случае ошибки Программа может пользоваться переменной окружения KVER
заданной при запуске в среде, которая содержит версию ядра, к которой
нужно приложить патч. 

При прикладывании патчей, программа может руководствоваться файлами в
подкаталоге исходных текстов ядра patches/ формата
APPLIED_$name. Существование таких файлов означает, что приложены
патчи с именами $name. После прикладывания своих патчей программа
обязана создать свой файл формата APPLIED_$name.

В случае отсутствия программы apply, патчи будут приложены в
соответствии с алгоритмом, описанным в секции 4.

3.2 Пакет с исходными текстами.
--------------------------------

/usr/src/kernel/sources/<имя_пакета>-<версия>.tar.gz

3.3 Пакет с внешними модулями.
-------------------------------

/lib/modules/<версия ядра>-<flavour>/*
/usr/include/linux-<версия ядра>-<flavour>/include/*

3.4 Пакет с ядром.
------------------

image:
/boot/config-<версия ядра>-<flavour>-<release>
/boot/vmlinuz-<версия ядра>-<flavour>-<release>
/boot/System.map-<версия ядра>-<flavour>-<release>
/lib/modules/<версия ядра>-<flavour>-<release>/*

headers:
/usr/include/linux-<версия ядра>-<flavour>/*


4. Порядок приложения патчей при сборке по умолчанию.
-----------------------------------------------------

При построении исходных текстов для сборки, spec ядра вызывает макрос
для приложения патчей, который содержится в пакете
kernel-build-tools. В случае, если с группой патчей предназначеной для
приложения поставлялся скрипт для изменения оригинального дерева ядра,
то он используется макросом. В противном случае, макрос использует
встроенный алгоритм. 

5. Переключение заголовочных файлов.
------------------------------------

После загрузки ссылки, на которые указывают /usr/include/{linux,asm},
направляются на заголовочные файлы соответствующие текушему ядру. Если
последние отсутствуют, то ссылки перенаправляются на 
заголовочные файлы из пакета glibc-kheaders лежащие в каталоге
/usr/include/linux-default.

6. Порядок принятия новых пакетов в Sisyphus.
---------------------------------------------

Дабы упорядочить вхождение новых пакетов в Sisyphus, сначала
разработчик обязан написать письмо в devel-kernel@altlinux.ru с темой
ITP: <имя_пакета> (Intent to package) и с descriptionом пакета в теле,
чтобы пояснить, что новое он хочет добавить. Далее проходит обсуждение
этого пакета и люди договариваются, целесообразно ли присутствие
пакета в Sisyphus. Kernel maintainer maintainer committee имеет право
наложить вето на вхождение пакета в Sisyphus при согласии всех
участников KMC.


Appendix A: spec для обычного ядра
----------------------------------

# Version options
%define kernel_base_version 2.4.21
%define kernel_extra_version rc1
# Numeric extra version scheme developed by Alexander Bokovoy:
# 0.0.X -- preX
# 0.X.0 -- rcX
# 1.0.0 -- release
%define kernel_extra_version_numeric 0.1.0
%define krelease alt1
%define flavour std-up

# Build options
# You can change compiler by editing and uncommenting this line:
#define kgcc gcc-3.2

# Patches to apply
%add_patch_list kernel-fix-security kernel-fix-build
%add_patch_list kernel-feat-crypto
#add_patch_list kernel-patch-feat-scsi kernel-patch-feat-xfs kernel-patch-feat-splash

## Don't edit below this line ##################################

%define	kversion %{kernel_base_version}%{kernel_extra_version}

%def_enable ccache
%{?__ccache_cc: %define _disable_ccache 1}

%if_enabled ccache
%define kcc "ccache %kgcc"
%else
%define kcc "%kgcc"
%endif



Name: kernel-image-%{flavour}
Version: %{kversion}
Release: %{krelease}

Summary: The Linux kernel (the core of the Linux operating system)
License: GPL
Group: System/Kernel and hardware
Url: http://www.kernel.org/
Packager: Kernel Maintainer Team <kernel@packages.altlinux.org>

Source1: config-%{kversion}-%{flavour}
Source2: rhkmvtag.c
%define rhkmvtag %SOURCE2

ExclusiveOS: Linux

BuildRequires: coreutils libdb4.0-devel perl flex bin86
BuildRequires: rpm >= 4.0.2-75
BuildRequires: kernel-source-%{kernel_base_version} = %{kernel_extra_version_numeric}
BuildRequires: kernel-build-tools
BuildRequires: %get_patch_list
BuildRequires: %(echo %kgcc | sed -e "s/-//")

%if use_ccache
BuildRequires: ccache
%endif

Requires: bootloader-utils >= 0.1-alt7, modutils, mkinitrd >= 1:2.8.6-alt2

Prereq:		coreutils
Prereq:		modutils >= 2.4.17
Obsoletes:	kernel-modules
ExclusiveArch:	%{ix86}


%description
This package contains the Linux kernel that is used to boot and run
your system. It contains few device drivers for specific hardware.
Most hardware is instead supported by modules loaded after booting.
Patches included:%patches

%package -n kernel-headers-%{flavour}
Summary: Header files for the Linux kernel
Group: System/Kernel and hardware

%description -n kernel-headers-%{flavour}
These are the C header files for the Linux kernel, which define
structures and constants that are needed when building most standard
programs under Linux, as well as to rebuild the kernel.
Patches included:%patches

%prep

%__rm -rf kernel-source-%{kernel_base_version}

%__tar -jxvf %{_usrsrc}/kernel/sources/kernel-source-%{kernel_base_version}.tar.bz2

%setup -D -T -n kernel-source-%{kernel_base_version}

echo "patches = %_patch_list"

%apply_patches

%__mv -f Makefile Makefile.orig
%__sed -e 's/EXTRAVERSION =.*/EXTRAVERSION =/g' \
    -e 's/CC.*$(CROSS_COMPILE)gcc/CC		= %{kgcc}/g' \
    Makefile.orig >Makefile


%build

KERNEL_BUILD_DIR=`pwd`


KernelVer=%{kversion}-%{flavour}-%{krelease}

echo "Building Kernel $KernelVer"

:> arch/%{base_arch}/defconfig

%__cat %{SOURCE1} >> arch/%{base_arch}/defconfig

%{__make} mrproper CC=%kcc EXTRAVERSION=%kernel_extra_version-%{flavour}-%{krelease}

%{__make} oldconfig CC=%kcc EXTRAVERSION=%kernel_extra_version-%{flavour}-%{krelease}

### It's a hack, but a useful hack:

cmp -s .config %SOURCE1 || %__cp -vf .config %SOURCE1

%{__make} dep clean CC=%kcc EXTRAVERSION=%kernel_extra_version-%{flavour}-%{krelease}

%{__make} include/linux/version.h CC=%kcc EXTRAVERSION=%kernel_extra_version-%{flavour}-%{krelease}

%{__make} bzImage CC=%kcc EXTRAVERSION=%kernel_extra_version-%{flavour}-%{krelease}

%{__make} modules CC=%kcc EXTRAVERSION=%kernel_extra_version-%{flavour}-%{krelease} YACC="bison -y"

echo "Kernel built $KernelVer"

%install

KernelVer=%{kversion}-%{flavour}-%{krelease}


%__mkdir -p $RPM_BUILD_ROOT/boot
%__install System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer
%__cp arch/i386/boot/bzImage $RPM_BUILD_ROOT/boot/vmlinuz-$KernelVer
%__cp .config $RPM_BUILD_ROOT/boot/config-$KernelVer

%{__make} modules_install \
    INSTALL_MOD_PATH=$RPM_BUILD_ROOT \
    KERNELRELEASE=$KernelVer \
    EXTRAVERSION=%kernel_extra_version-%{flavour}-%{krelease}

%__cc -o rhkmvtag %rhkmvtag init/version.o
./rhkmvtag >$RPM_BUILD_ROOT/lib/modules/$KernelVer/.rhkmvtag ||:
%__rm -f rhkmvtag

%__install -d $RPM_BUILD_ROOT%{_prefix}/{include,include/linux-%{version}-%{flavour}/include}

pushd include
%__cp -a . $RPM_BUILD_ROOT/usr/include/linux-%{version}-%{flavour}/include
popd

%__mkdir -p $RPM_BUILD_ROOT/etc/apt/apt.conf.d

echo "
RPM {
    Allow-Duplicated {"^kernel-image-%{flavour}$";};
};
" > $RPM_BUILD_ROOT/etc/apt/apt.conf.d/kernel-image-%{flavour}.conf

%__cp .config $RPM_BUILD_ROOT/usr/include/linux-%{version}-%{flavour}/.config

%post
cd /boot
if [ -x /sbin/installkernel ];then
    /sbin/installkernel -a -c %{kversion}-%{flavour}-%{krelease}
fi


%preun
/sbin/modprobe loop 2> /dev/null > /dev/null

REMOVE=
if [ -f /etc/sysconfig/system ];then
		source /etc/sysconfig/system
		[[ "$CLASS" = "beginner" ]] && REMOVE=yes
fi
if [ -f /etc/sysconfig/installkernel ];then
		source /etc/sysconfig/installkernel
		[[ "$AUTOREMOVE" = [Yy][Ee][Ss] ]] && REMOVE=yes
		[[ "$AUTOREMOVE" = [Nn][Oo] ]] && REMOVE=
fi

BUILD=/lib/modules/%{kversion}-%{flavour}-%{krelease}/build 

[[ -n $REMOVE ]] && /sbin/installkernel -a -R -c %{kversion}-%{flavour}-%{krelease}


%postun
cd /boot
if [ -f initrd-%{kversion}-%{flavour}-%{krelease}.img ];then
		rm -f initrd-%{kversion}-%{flavour}-%{krelease}.img
fi

%files
%defattr(644,root,root,755)
/boot/vmlinuz-%{version}-%{flavour}-%{krelease}
/boot/System.map-%{version}-%{flavour}-%{krelease}
/boot/config-%{version}-%{flavour}-%{krelease}
/lib/modules/%{version}-%{flavour}-%{krelease}
%_sysconfdir/apt/apt.conf.d/kernel-image-%{flavour}.conf
# Exclude drm modules from kernel package

%files -n kernel-headers-%{flavour}
%defattr(644,root,root,755)
%dir %{_prefix}/include/linux-%{version}-%{flavour}
%{_prefix}/include/linux-%{version}-%{flavour}/include/asm
%{_prefix}/include/linux-%{version}-%{flavour}/include/asm-%base_arch
%{_prefix}/include/linux-%{version}-%{flavour}/include/config
%{_prefix}/include/linux-%{version}-%{flavour}/include/linux
%{_prefix}/include/linux-%{version}-%{flavour}/include/math-emu
%{_prefix}/include/linux-%{version}-%{flavour}/include/net
%{_prefix}/include/linux-%{version}-%{flavour}/include/pcmcia
%{_prefix}/include/linux-%{version}-%{flavour}/include/scsi
%{_prefix}/include/linux-%{version}-%{flavour}/include/video
%{_prefix}/include/linux-%{version}-%{flavour}/.config
# Provided by I2C-headers package:
%exclude %{_prefix}/include/linux-%{version}-%{flavour}/include/linux/i2c*

%changelog
* Thu May 22 2003 Peter Novodvorsky <nidd@altlinux.com> kernel-policy-1.0
- 1.0 policy release.



-- 
Peter Novodvorsky                             nidd@myxomop.com
   http://people.altlinux.ru/~nidd   Deadheads, unite!


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [d-kernel] kernel policy FINAL.
  2003-05-22 18:23 [d-kernel] kernel policy FINAL Peter Novodvorsky
@ 2003-05-23  6:26 ` Ed V. Bartosh
  0 siblings, 0 replies; 2+ messages in thread
From: Ed V. Bartosh @ 2003-05-23  6:26 UTC (permalink / raw)
  To: devel-kernel

>>>>> "PN" == Peter Novodvorsky writes:

 PN>  - решил не добавлять новых дополнительных спеков потому что
 PN>  а). они
 PN>    требуют дополнительной обточки, б). они могут сильно
 PN>    отличаться друг от друга.
Не знаю чем они таким могут отличаться, у меня ярко выраженная
типизация спеков - сорцы, патчи, модули, имиджи. Ну, еще aad-on-ы добавятся.
Я тебе уже один раз посылал свои спеки, могу еще раз, если нужно. По-моему лучше
дать людям некий образец, пусть даже недообточеныай, чем вообще ничего.

 PN>  - не стал добавлять описание про add-on от ab, его можно будет
 PN>    подготовить в соответствующем виде для Version 1.1.
И это зря. Такие вещи лучше сразу делать, IMHO.


Кроме этих двух пунктов у меня претензий нет, да и эти, собсвенно, не
категорические.

PS: Я сегодня последний день на работе, ухожу в отпуск. До 4 июня меня не будет.

-- 
Best regards,
Ed V. Bartosh


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2003-05-23  6:26 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-05-22 18:23 [d-kernel] kernel policy FINAL Peter Novodvorsky
2003-05-23  6:26 ` Ed V. Bartosh

ALT Linux kernel packages development

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel-kernel/0 devel-kernel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel-kernel devel-kernel/ http://lore.altlinux.org/devel-kernel \
		devel-kernel@altlinux.org devel-kernel@altlinux.ru devel-kernel@altlinux.com
	public-inbox-index devel-kernel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel-kernel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git