Uwaga. Poradnik skierowany jest dla osób średniozaawansowanych - czyli takich, dla których podjęcie reanimacji systemu po ewentualnych błędach nie będzie problemem. Czym jest stable-review? Znajdziemy tutaj wersje rc patchy z upstreamu do wydań stabilnych oraz lts. Zanim wersja oznaczona przykładowo jako 3.16.6 ujrzy światło dzienne trafia właśnie do stable-review z oznaczeniem 3.16.6-rc1. Jeśli nie możemy doczekać się nowej wersji kernela, zżera nas ciekawość, co ona przyniesie oraz dysponujemy odpowiednią wiedzą, to możemy skompilować odpowiedni kernel z zastosowaniem patcha prosto ze stable-review. Nie przypomina to jednak klasycznego kompilowania kernela. Patcha ze stable review nie możemy nałożyć bezpośrednio na kernel tak jak czynimy to ze stabilnym patchem. Konstrukcja wygląda więc następująco:
kernel + stabilny patch z upstreamu + patch w wersji rcX ze stable-review
W przypadku kernela ze stabilnym patchem konstrukcja wygląda następująco (przedstawię to za pomocą swojego spersonalizowanego PKGBUILDA):
pkgbase=linux-lucjan
pkgname=('linux-lucjan-kernel' 'linux-lucjan-headers' 'linux-lucjan-docs')
_kernelname=-lucjan
_srcname=linux-3.16
pkgver=3.16.5
pkgrel=4
arch=('i686' 'x86_64')
url="http://kerneldedup.org/"
license=('GPL2')
options=('!strip')
makedepends=('kmod' 'inetutils' 'bc')
_uksmvernel="0.1.2.3"
_uksmname="v3.16.ge.1"
_bfqpath="http://algo.ing.unimo.it/people/paolo/disk_sched/patches/3.16.0-v7r5"
_ckpatchversion=2
_ckpatchname="patch-3.16-ck${_ckpatchversion}"
_gcc_patch="enable_additional_cpu_optimizations_for_gcc_v4.9+_kernel_v3.15+.patch"
source=("http://www.kernel.org/pub/linux/kernel/v3.x/${_srcname}.tar.xz"
"http://www.kernel.org/pub/linux/kernel/v3.x/patch-${pkgver}.xz"
"http://kerneldedup.org/download/uksm/${_uksmvernel}/uksm-${_uksmvernel}-for-${_uksmname}.patch" # website often went down
#"uksm-${_uksmvernel}-for-${_uksmname}.test.patch"
"http://ck.kolivas.org/patches/3.0/3.16/3.16-ck${_ckpatchversion}/${_ckpatchname}.bz2"
"http://repo-ck.com/source/gcc_patch/${_gcc_patch}.gz"
"${_bfqpath}/0001-block-cgroups-kconfig-build-bits-for-BFQ-v7r5-3.16.patch"
"${_bfqpath}/0002-block-introduce-the-BFQ-v7r5-I-O-sched-for-3.16.patch"
"${_bfqpath}/0003-block-bfq-add-Early-Queue-Merge-EQM-to-BFQ-v7r5-for-3.16.0.patch"
'linux-lucjan.preset'
'change-default-console-loglevel.patch'
'config' 'config.x86_64')
prepare() {
cd ${_srcname}
### add upstream patch
patch -Np1 -i "${srcdir}/patch-${pkgver}"
Jest to klasyczny układ - praktycznie identyczny jak w linux-ck czy kernelach udostępnianych przeze mnie w AUR. Po zaaplikowaniu patcha ze stable-review winno to wyglądać następująco:pkgbase=linux-lucjan
pkgname=('linux-lucjan-kernel' 'linux-lucjan-headers' 'linux-lucjan-docs')
_kernelname=-lucjan
_srcname=linux-3.16
pkgver=3.16.6
_pkgver=3.16.5
__pkgver=3.16.6-rc1
pkgrel=0
arch=('i686' 'x86_64')
url="http://kerneldedup.org/"
license=('GPL2')
options=('!strip')
makedepends=('kmod' 'inetutils' 'bc')
_uksmvernel="0.1.2.3"
_uksmname="v3.16.ge.1"
_bfqpath="http://algo.ing.unimo.it/people/paolo/disk_sched/patches/3.16.0-v7r5"
_ckpatchversion=2
_ckpatchname="patch-3.16-ck${_ckpatchversion}"
_gcc_patch="enable_additional_cpu_optimizations_for_gcc_v4.9+_kernel_v3.15+.patch"
source=("http://www.kernel.org/pub/linux/kernel/v3.x/${_srcname}.tar.xz"
"http://www.kernel.org/pub/linux/kernel/v3.x/patch-${_pkgver}.xz"
"https://www.kernel.org/pub/linux/kernel/v3.x/stable-review/patch-${__pkgver}.xz"
"http://kerneldedup.org/download/uksm/${_uksmvernel}/uksm-${_uksmvernel}-for-${_uksmname}.patch" # website often went down
#"uksm-${_uksmvernel}-for-${_uksmname}.test.patch"
"http://ck.kolivas.org/patches/3.0/3.16/3.16-ck${_ckpatchversion}/${_ckpatchname}.bz2"
"http://repo-ck.com/source/gcc_patch/${_gcc_patch}.gz"
"${_bfqpath}/0001-block-cgroups-kconfig-build-bits-for-BFQ-v7r5-3.16.patch"
"${_bfqpath}/0002-block-introduce-the-BFQ-v7r5-I-O-sched-for-3.16.patch"
"${_bfqpath}/0003-block-bfq-add-Early-Queue-Merge-EQM-to-BFQ-v7r5-for-3.16.0.patch"
'linux-lucjan.preset'
'change-default-console-loglevel.patch'
'config' 'config.x86_64')
prepare() {
cd ${_srcname}
### add upstream patch
patch -Np1 -i "${srcdir}/patch-${_pkgver}"
patch -Np1 -i "${srcdir}/patch-${__pkgver}"
Kolorem czerwonym oznaczyłem wszelkie zmiany jakie powinny zostać naniesione na posiadany przez nas PKGBUILD. Tak jak wspominałem wcześniej, do zbudowania kernela oznaczanego przeze mnie jako
3.16.6-0 potrzebowałem kombinacji patchy
3.16.5 oraz
3.16.6-rc1 - i takie zmiany naniosłem na PKGBUILD. Patch ze stable-review musi zostać zaaplikowany PO stabilnym patchu z upstreamu - kolejność nie jest przypadkowa - wręcz przeciwnie, w przypadku PKGBUILD-ów jest ona bardzo istotna.
Jeśli nanieśliśmy zmiany, możemy przejść do kolejnego etapu - czyli do skompilowania. Tutaj postępujemy analogicznie jak z każdym innym kernelem. Tak więc możemy skompilować kernel generic, możemy zastosować się też do poradników dostępnych na Forum i skompilować kernel skrojony na miarę.
Powtarzam, poradnik ten nie jest przeznaczony dla każdego użytkownika Forum, w szczególności dla tych, którzy dopiero rozpoczynają przygody z kompilowaniem.