Tagging module linux-2.6 - linux-2.6-22-2
[linux-2.6.git] / kernel-2.6.spec
1 #
2 # $Id$
3 #
4 %define url $URL$
5
6 Summary: The Linux kernel (the core of the Linux operating system)
7
8 # What parts do we want to build?  We must build at least one kernel.
9 # These are the kernels that are built IF the architecture allows it.
10
11 %define buildup 1
12 %define builduml 0
13 %define buildxen 0
14 %define builddoc 0
15
16 # default is to not build this - to override, use something like
17 # kernel-SPECVARS := iwlwifi=1 
18 # rpm does not seem to have a syntax for defining overridable defaults
19 # any better solution would be more than welcome.
20 %define build_iwlwifi %{?iwlwifi:1}%{!?iwlwifi:0}
21
22 # Versions of various parts
23
24 # for module-tag.py - sublevel is used for the version (middle) part of tag names
25 %define name linux-2.6
26 %define module_version_varname sublevel
27 %define taglevel 2
28
29 #
30 # Polite request for people who spin their own kernel rpms:
31 # please modify the "release" field in a way that identifies
32 # that the kernel isn't the stock distribution kernel, for example by
33 # adding some text to the end of the version number.
34 #
35 %define sublevel 22
36 %define patchlevel 19
37 %define kversion 2.6.%{sublevel}
38 %define rpmversion 2.6.%{sublevel}%{?patchlevel:.%{patchlevel}}
39
40 %define vsversion 2.3.0.34
41
42 # Will go away when VServer supports NetNS in mainline. Currently, it must be 
43 # updated every time the PL kernel is updated.
44 %define vini_pl_patch 561
45
46 %define release vs%{vsversion}.%{taglevel}%{?pldistro:.%{pldistro}}%{?date:.%{date}}
47
48 %{!?pldistro:%global pldistro planetlab}
49
50 %define signmodules 0
51 %define make_target bzImage
52 %define KVERREL %{PACKAGE_VERSION}-%{PACKAGE_RELEASE}
53
54 # Override generic defaults with per-arch defaults
55
56 %define image_install_path boot
57
58 #
59 # Three sets of minimum package version requirements in the form of Conflicts:
60 # to versions below the minimum
61 #
62
63 #
64 # First the general kernel 2.6 required versions as per
65 # Documentation/Changes
66 #
67 %define kernel_dot_org_conflicts  ppp <= 2.3.15, pcmcia-cs <= 3.1.20, isdn4k-utils <= 3.0, mount < 2.10r-5, nfs-utils < 1.0.3, e2fsprogs < 1.29, util-linux < 2.10, jfsutils < 1.0.14, reiserfsprogs < 3.6.3, xfsprogs < 2.1.0, procps < 2.0.9, oprofile < 0.5.3
68
69
70 # Then a series of requirements that are distribution specific, either 
71 # because we add patches for something, or the older versions have 
72 # problems with the newer kernel or lack certain things that make 
73 # integration in the distro harder than needed.
74 #
75 %define package_conflicts  cipe < 1.4.5, kudzu <= 0.92, initscripts < 7.23, dev < 3.2-7, iptables < 1.2.5-3, bcm5820 < 1.81, nvidia-rh72 <= 1.0 selinux-policy-targeted < 1.23.16-1
76
77 #
78 # Several packages had bugs in them that became obvious when the NPTL
79 # threading code got integrated.
80 #
81 %define nptl_conflicts SysVinit < 2.84-13, pam < 0.75-48, vixie-cron < 3.0.1-73, privoxy < 3.0.0-8, spamassassin < 2.44-4.8.x,  cups < 1.1.17-13
82
83 #
84 # The ld.so.conf.d file we install uses syntax older ldconfig's don't grok.
85 #
86
87 # MEF commented out
88 # %define xen_conflicts glibc < 2.3.5-1
89
90 #
91 # Packages that need to be installed before the kernel is, because the %post
92 # scripts use them.
93 #
94 %define kernel_prereq  fileutils, module-init-tools, initscripts >= 5.83, mkinitrd >= 3.5.5
95
96 Vendor: PlanetLab
97 Packager: PlanetLab Central <support@planet-lab.org>
98 Distribution: PlanetLab %{plrelease}
99 URL: %(echo %{url} | cut -d ' ' -f 2)
100
101 Name: kernel
102 Group: System Environment/Kernel
103 License: GPLv2
104 Version: %{rpmversion}
105 Release: %{release}
106 ExclusiveOS: Linux
107 Provides: kernel = %{version}
108 Provides: kernel-drm = 4.3.0
109 Provides: kernel-%{_target_cpu} = %{rpmversion}-%{release}
110 Provides: kernel-smp = %{rpmversion}-%{release}
111 Provides: kernel-smp-%{_target_cpu} = %{rpmversion}-%{release}
112 Prereq: %{kernel_prereq}
113 Conflicts: %{kernel_dot_org_conflicts}
114 Conflicts: %{package_conflicts}
115 Conflicts: %{nptl_conflicts}
116 # We can't let RPM do the dependencies automatic because it'll then pick up
117 # a correct but undesirable perl dependency from the module headers which
118 # isn't required for the kernel proper to function
119 AutoReqProv: no
120
121 #
122 # List the packages used during the kernel build
123 #
124 BuildPreReq: module-init-tools, patch >= 2.5.4, bash >= 2.03, sh-utils, tar
125 BuildPreReq: bzip2, findutils, gzip, m4, perl, make >= 3.78, gnupg, diffutils
126 BuildRequires: gcc >= 3.3.3, binutils >= 2.12, redhat-rpm-config
127 BuildConflicts: rhbuildsys(DiskFree) < 500Mb
128
129
130 Source0: ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-%{kversion}.tar.bz2
131
132 Source10: %{pldistro}-%{kversion}-i586.config
133 Source11: %{pldistro}-%{kversion}-i686.config
134 Source12: %{pldistro}-%{kversion}-x86_64.config
135 %if %{builduml}
136 Source20: %{pldistro}-%{kversion}-i686-uml.config
137 %endif
138 %if %{buildxen}
139 Source30: %{pldistro}-%{kversion}-i686-xenU.config
140 %endif
141
142 # Mainline patches
143 %if "0%{patchlevel}"
144 Patch000: ftp://ftp.kernel.org/pub/linux/kernel/v2.6/patch-%{rpmversion}.bz2
145 %endif
146
147 Patch010: linux-2.6-010-e1000e.patch
148 Patch020: linux-2.6-020-build-id.patch
149 Patch030: linux-2.6-030-netns.patch
150 Patch040: linux-2.6-040-i_mutex-check.patch
151
152 # These are patches picked up from Fedora/RHEL
153 Patch100: linux-2.6-100-build-nonintconfig.patch
154
155 # Linux-VServer
156 Patch200: patch-%{rpmversion}-vs%{vsversion}.diff
157 Patch210: linux-2.6-210-vserver-cpu-sched.patch
158
159 # IP sets
160 Patch250: linux-2.6-250-ipsets.patch
161
162 # PlanetLab
163 Patch500: linux-2.6-500-vserver-filesharing.patch
164 Patch510: linux-2.6-510-ipod.patch
165 Patch520: linux-2.6-520-vnet+.patch
166 Patch530: linux-2.6-530-built-by-support.patch
167 Patch540: linux-2.6-540-oom-kill.patch
168 Patch550: linux-2.6-550-raise-default-nfile-ulimit.patch
169 Patch560: linux-2.6-560-mmconf.patch
170 Patch570: linux-2.6-570-tagxid.patch
171 Patch580: linux-2.6-580-show-proc-virt.patch
172 Patch590: linux-2.6-590-chopstix-intern.patch
173 Patch620: linux-2.6-620-kdb.patch
174 Patch630: linux-2.6-630-sched-fix.patch
175
176 # See also the file named 'sources' here for the related checksums
177 # NOTE. iwlwifi should be in-kernel starting from 2.6.24
178 # see http://bughost.org/bugzilla/show_bug.cgi?id=1584
179 %if %{build_iwlwifi}
180 %define mac80211_version 10.0.4
181 Patch600: http://intellinuxwireless.org/mac80211/downloads/mac80211-%{mac80211_version}.tgz
182 %define iwlwifi_version 1.2.25
183 Patch601: http://intellinuxwireless.org/iwlwifi/downloads/iwlwifi-%{iwlwifi_version}.tgz
184 %endif
185
186 BuildRoot: %{_tmppath}/kernel-%{KVERREL}-root
187
188 %description
189 The kernel package contains the Linux kernel (vmlinuz), the core of any
190 Linux operating system.  The kernel handles the basic functions
191 of the operating system:  memory allocation, process allocation, device
192 input and output, etc.
193
194 %package devel
195 Summary: Development package for building kernel modules to match the kernel.
196 Group: System Environment/Kernel
197 AutoReqProv: no
198 Provides: kernel-devel-%{_target_cpu} = %{rpmversion}-%{release}
199 Provides: kernel-smp-devel = %{rpmversion}-%{release}
200 Provides: kernel-smp-devel-%{_target_cpu} = %{rpmversion}-%{release}
201 Prereq: /usr/bin/find
202
203 %description devel
204 This package provides kernel headers and makefiles sufficient to build modules
205 against the kernel package.
206
207
208 %package doc
209 Summary: Various documentation bits found in the kernel source.
210 Group: Documentation
211
212 %description doc
213 This package contains documentation files from the kernel
214 source. Various bits of information about the Linux kernel and the
215 device drivers shipped with it are documented in these files.
216
217 You'll want to install this package if you need a reference to the
218 options that can be passed to Linux kernel modules at load time.
219
220 %package xenU
221 Summary: The Linux kernel compiled for unprivileged Xen guest VMs
222
223 Group: System Environment/Kernel
224 Provides: kernel = %{version}
225 Provides: kernel-%{_target_cpu} = %{rpmversion}-%{release}xenU
226 Prereq: %{kernel_prereq}
227 Conflicts: %{kernel_dot_org_conflicts}
228 Conflicts: %{package_conflicts}
229 Conflicts: %{nptl_conflicts}
230
231 # MEF commented out 
232 # Conflicts: %{xen_conflicts}
233
234 # We can't let RPM do the dependencies automatic because it'll then pick up
235 # a correct but undesirable perl dependency from the module headers which
236 # isn't required for the kernel proper to function
237 AutoReqProv: no
238
239 %description xenU
240 This package includes a version of the Linux kernel which
241 runs in Xen unprivileged guest VMs.  This should be installed
242 both inside the unprivileged guest (for the modules) and in
243 the guest0 domain.
244
245 %package xenU-devel
246 Summary: Development package for building kernel modules to match the kernel.
247 Group: System Environment/Kernel
248 AutoReqProv: no
249 Provides: kernel-xenU-devel-%{_target_cpu} = %{rpmversion}-%{release}
250 Provides: kernel-devel-%{_target_cpu} = %{rpmversion}-%{release}xenU
251 Provides: kernel-devel = %{rpmversion}-%{release}xenU
252 Prereq: /usr/sbin/hardlink, /usr/bin/find
253
254 %description xenU-devel
255 This package provides kernel headers and makefiles sufficient to build modules
256 against the kernel package.
257
258 %package uml
259 Summary: The Linux kernel compiled for use in user mode (User Mode Linux).
260
261 Group: System Environment/Kernel
262
263 %description uml
264 This package includes a user mode version of the Linux kernel.
265
266 %package uml-devel
267 Summary: Development package for building kernel modules to match the UML kernel.
268 Group: System Environment/Kernel
269 Provides: kernel-uml-devel-%{_target_cpu} = %{rpmversion}-%{release}
270 Provides: kernel-devel-%{_target_cpu} = %{rpmversion}-%{release}smp
271 Provides: kernel-devel = %{rpmversion}-%{release}smp
272 AutoReqProv: no
273 Prereq: /usr/sbin/hardlink, /usr/bin/find
274
275 %description uml-devel
276 This package provides kernel headers and makefiles sufficient to build modules
277 against the User Mode Linux kernel package.
278
279 %package uml-modules
280 Summary: The Linux kernel modules compiled for use in user mode (User Mode Linux).
281
282 Group: System Environment/Kernel
283
284 %description uml-modules
285 This package includes a user mode version of the Linux kernel modules.
286
287 %package vserver
288 Summary: A placeholder RPM that provides kernel and kernel-drm
289
290 Group: System Environment/Kernel
291 Provides: kernel = %{version}
292 Provides: kernel-drm = 4.3.0
293 Provides: kernel-%{_target_cpu} = %{rpmversion}-%{release}
294
295 %description vserver
296 VServers do not require and cannot use kernels, but some RPMs have
297 implicit or explicit dependencies on the "kernel" package
298 (e.g. tcpdump). This package installs no files but provides the
299 necessary dependencies to make rpm and yum happy.
300
301
302 %prep
303 # First we unpack the kernel tarball.
304 # If this isn't the first make prep, we use links to the existing clean tarball
305 # which speeds things up quite a bit.
306 if [ ! -d kernel-%{kversion}/vanilla ]; then
307   # Ok, first time we do a make prep.
308   rm -f pax_global_header
309 %setup -q -n %{name}-%{kversion} -c
310   mv linux-%{kversion} vanilla
311 else
312   # We already have a vanilla dir.
313   cd kernel-%{kversion}
314 fi
315
316 KERNEL_PREVIOUS=vanilla
317 # Dark RPM-magic to apply each patch to a hardlinked copy of the tree.
318 %define ApplyPatch() \
319   rm -fr linux-%{kversion}-%1                           \
320   cp -al $KERNEL_PREVIOUS linux-%{kversion}-%1          \
321   patchflag=-p1                                         \
322   test "%2" != "%%2" && patchflag="%2"                  \
323   PATCH="%{expand:%{PATCH%1}}"                          \
324   if test ! -e "$PATCH"; then                           \
325     echo "Patch %1 does not exist!"                     \
326     exit 1                                              \
327   fi                                                    \
328   case "$PATCH" in                                      \
329     *.bz2)  bzcat "$PATCH";;                            \
330     *.gz)   zcat "$PATCH";;                             \
331     *)      cat "$PATCH";;                              \
332   esac | patch -F1 -s -d linux-%{kversion}-%1 $patchflag \
333   KERNEL_PREVIOUS=linux-%{kversion}-%1
334
335 # This is where the patches get applied
336 %if 0%{?patchlevel}
337 %ApplyPatch 0
338 %endif
339
340 %ApplyPatch 10
341 %ApplyPatch 20
342
343 # NetNS patch for VINI
344 %if 0%{?with_netns}
345 %ApplyPatch 30
346 %endif
347 %ApplyPatch 40
348
349 %ApplyPatch 100
350
351 %ApplyPatch 200
352 %ApplyPatch 210
353
354 %ApplyPatch 250
355
356 %ApplyPatch 500
357 %ApplyPatch 510
358 %ApplyPatch 520
359 %ApplyPatch 530
360 %ApplyPatch 540
361 %ApplyPatch 550
362 %ApplyPatch 560
363 %ApplyPatch 570
364 %ApplyPatch 580
365 %ApplyPatch 590
366 %ApplyPatch 620
367 %ApplyPatch 630
368
369 # NetNS conflict-resolving patch for VINI. Will work with patch vini_pl_patch-1 but may
370 # break with later patches.
371
372 %if 0%{?with_netns}
373 %ApplyPatch %vini_pl_patch
374 %endif
375
376 %if %{build_iwlwifi}
377 # Run the mac80211 stuff in the kernel tree holding the last patch
378 tar -xzf %{PATCH600}
379 pushd mac80211-%{mac80211_version}
380 mac80211_makeflags="KSRC=../$KERNEL_PREVIOUS"
381 make $mac80211_makeflags modified
382 make $mac80211_makeflags source
383 make $mac80211_makeflags patch_kernel
384 popd
385
386 # Untar iwlwifi in the same place - needs to be compiled later
387 tar -xzf %{PATCH601}
388 # the install target is broken: first it does not pass the right -b flag to depmod
389 # second we do not need to invoke depmod at this stage anyway
390 # let's add our own patch/stuff in this Makefile for manual install later on
391 pushd iwlwifi-%{iwlwifi_version}
392 cat >> Makefile <<EOF
393 module-list:
394         @echo \$(addprefix \$(DIR),\$(addsuffix .ko,\$(list-m)))
395 EOF
396 popd
397 %endif
398
399 rm -fr linux-%{kversion}
400 ln -sf $KERNEL_PREVIOUS linux-%{kversion}
401 cd linux-%{kversion}
402
403
404 # make sure the kernel has the sublevel we know it has. This looks weird
405 # but for -pre and -rc versions we need it since we only want to use
406 # the higher version when the final kernel is released.
407 perl -p -i -e "s/^SUBLEVEL.*/SUBLEVEL = %{sublevel}/" Makefile
408 perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -prep/" Makefile
409
410 # get rid of unwanted files resulting from patch fuzz
411 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
412
413
414 ###
415 ### build
416 ###
417 %build
418
419 BuildKernel() {
420     MakeTarget=$1
421     Arch=$2
422     Flavour=$3
423
424     rm -rf linux-%{_target_cpu}-%{kversion}$Flavour
425     cp -rl linux-%{kversion}/ linux-%{_target_cpu}-%{kversion}$Flavour
426     cd linux-%{_target_cpu}-%{kversion}$Flavour
427
428     # Pick the right config file for the kernel we're building
429     if [ -n "$Flavour" ] ; then
430       Config=%{pldistro}-%{kversion}-%{_target_cpu}-$Flavour.config
431       DevelDir=/usr/src/kernels/%{KVERREL}-$Flavour-%{_target_cpu}
432       DevelLink=/usr/src/kernels/%{KVERREL}$Flavour-%{_target_cpu}
433     else
434       Config=%{pldistro}-%{kversion}-%{_target_cpu}.config
435       DevelDir=/usr/src/kernels/%{KVERREL}-%{_target_cpu}
436       DevelLink=
437     fi
438
439     KernelVer=%{version}-%{release}$Flavour
440     echo BUILDING A KERNEL FOR $Flavour %{_target_cpu}...
441
442     # make sure EXTRAVERSION says what we want it to say
443     perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = %{?patchlevel:.%{patchlevel}}-%{release}$Flavour/" Makefile
444
445     # and now to start the build process
446
447     make -s mrproper
448     cp %{_sourcedir}/$Config .config
449
450     #Arch=`head -1 .config | cut -b 3-`
451     echo USING ARCH=$Arch
452
453     make -s ARCH=$Arch nonint_oldconfig > /dev/null
454     make -s ARCH=$Arch %{?_smp_mflags} $MakeTarget
455     make -s ARCH=$Arch %{?_smp_mflags} modules || exit 1
456
457 %if %{build_iwlwifi}
458     # build the iwlwifi driver
459     make -C %{_builddir}/kernel-%{kversion}/iwlwifi-%{iwlwifi_version} ARCH=$Arch \
460       KSRC=%{_builddir}/kernel-%{kversion}/linux-%{_target_cpu}-%{kversion}$Flavour
461 %endif
462
463     # Start installing the results
464
465 %if "%{_enable_debug_packages}" == "1"
466     mkdir -p $RPM_BUILD_ROOT/usr/lib/debug/boot
467 %endif
468     mkdir -p $RPM_BUILD_ROOT/%{image_install_path}
469     install -m 644 .config $RPM_BUILD_ROOT/boot/config-$KernelVer
470     install -m 644 System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer
471     if [ -f arch/$Arch/boot/bzImage ]; then
472       cp arch/$Arch/boot/bzImage $RPM_BUILD_ROOT/%{image_install_path}/vmlinuz-$KernelVer
473     fi
474     if [ -f arch/$Arch/boot/zImage.stub ]; then
475       cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/%{image_install_path}/zImage.stub-$KernelVer || :
476     fi
477     if [ "$Flavour" = "uml" ] ; then
478         install -D -m 755 linux $RPM_BUILD_ROOT/%{_bindir}/linux
479     fi
480
481     mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer
482     make -s ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT modules_install KERNELRELEASE=$KernelVer
483
484 %if %{build_iwlwifi}
485     # install iwlwifi
486 #    make -C %{_builddir}/kernel-%{kversion}/iwlwifi-%{iwlwifi_version} ARCH=$Arch \
487 #         KSRC=%{_builddir}/kernel-%{kversion}/linux-%{_target_cpu}-%{kversion}$Flavour \
488 #        KMISC=$RPM_BUILD_ROOT/lib/modules/$KernelVer/kernel/drivers/net/wireless install
489     pushd %{_builddir}/kernel-%{kversion}/iwlwifi-%{iwlwifi_version}
490     iwlwifi_dest=$RPM_BUILD_ROOT/lib/modules/$KernelVer/kernel/drivers/net/wireless
491     # get the list and location of modules to install - no need to pass KSRC nor anything, let's keep it simple
492     iwlwifi_modules=$(make --no-print-directory module-list)
493     install -d $iwlwifi_dest
494     install -m 644 -c $iwlwifi_modules $iwlwifi_dest
495     popd
496 %endif
497
498     # And save the headers/makefiles etc for building modules against
499     #
500     # This all looks scary, but the end result is supposed to be:
501     # * all arch relevant include/ files
502     # * all Makefile/Kconfig files
503     # * all script/ files
504
505     rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
506     rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/source
507     mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
508     (cd $RPM_BUILD_ROOT/lib/modules/$KernelVer ; ln -s build source)
509     # dirs for additional modules per module-init-tools, kbuild/modules.txt
510     mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/extra
511     mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/updates
512     # first copy everything
513     cp --parents `find  -type f -name "Makefile*" -o -name "Kconfig*"` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build 
514         cp Module.symvers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
515     if [ "$Flavour" = "uml" ] ; then
516       cp --parents -a `find arch/um -name include` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
517     fi
518     # then drop all but the needed Makefiles/Kconfig files
519     rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Documentation
520     rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts
521     rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
522     cp arch/%{_arch}/kernel/asm-offsets.s $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch}/kernel || :
523     cp .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
524     cp -a scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
525     if [ -d arch/%{_arch}/scripts ]; then
526       cp -a arch/%{_arch}/scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch} || :
527     fi
528     if [ -f arch/%{_arch}/*lds ]; then
529       cp -a arch/%{_arch}/*lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch}/ || :
530     fi
531     rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/*.o
532     rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/*/*.o
533     mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
534     cd include
535     cp -a acpi config keys linux math-emu media mtd net pcmcia rdma rxrpc scsi sound video asm asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
536     cp -a `readlink asm` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
537     if [ "$Arch" = "x86_64" ]; then
538       cp -a asm-i386 $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
539     fi
540 %if %{buildxen}
541     if [ "$Flavour" = "xenU" ]; then
542       cp -a xen $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
543       cp -a asm-i386 $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
544     fi
545 %endif
546 %if %{builduml}
547     if [ "$Flavour" = "uml" ] ; then
548       cp -a `readlink -f asm/arch` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
549     fi
550 %endif
551     # While arch/powerpc/include/asm is still a symlink to the old
552     # include/asm-ppc{64,} directory, include that in kernel-devel too.
553     if [ "$Arch" = "powerpc" -a -r ../arch/powerpc/include/asm ]; then
554       cp -a `readlink ../arch/powerpc/include/asm` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
555       mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/$Arch/include
556       pushd $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/$Arch/include
557       ln -sf ../../../include/asm-ppc* asm
558       popd
559     fi
560
561     # Make sure the Makefile and version.h have a matching timestamp so that
562     # external modules can be built
563     touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Makefile $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/linux/version.h
564     touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/.config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/linux/autoconf.h
565     cd ..
566
567     #
568     # save the vmlinux file for kernel debugging into the kernel-debuginfo rpm
569     #
570 %if "%{_enable_debug_packages}" == "1"
571     mkdir -p $RPM_BUILD_ROOT/usr/lib/debug/lib/modules/$KernelVer
572     cp vmlinux $RPM_BUILD_ROOT/usr/lib/debug/lib/modules/$KernelVer
573 %endif
574 %if %{buildxen}
575     if [ -f vmlinuz ]; then
576       cp vmlinuz $RPM_BUILD_ROOT/%{image_install_path}/vmlinuz-$KernelVer
577     fi
578 %endif
579
580     find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name "*.ko" -type f >modnames
581
582     # mark modules executable so that strip-to-file can strip them
583     cat modnames | xargs chmod u+x
584
585     # remove files that will be auto generated by depmod at rpm -i time
586     rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.*
587
588     # Move the devel headers out of the root file system
589     mkdir -p $RPM_BUILD_ROOT/usr/src/kernels
590     mv $RPM_BUILD_ROOT/lib/modules/$KernelVer/build $RPM_BUILD_ROOT/$DevelDir
591     ln -sf ../../..$DevelDir $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
592     [ -z "$DevelLink" ] || ln -sf `basename $DevelDir` $RPM_BUILD_ROOT/$DevelLink
593 }
594
595 ###
596 # DO it...
597 ###
598
599 # prepare directories
600 rm -rf $RPM_BUILD_ROOT
601 mkdir -p $RPM_BUILD_ROOT/boot
602
603 %if "%{_target_cpu}" == "x86_64"
604 %define kernel_arch %{_target_cpu}
605 %endif
606 %if "%{_target_cpu}" == "i586"
607 %define kernel_arch i386
608 %endif
609 %if "%{_target_cpu}" == "i686"
610 %define kernel_arch i386
611 %endif
612
613 %if %{buildup}
614 BuildKernel %make_target %kernel_arch
615 %endif
616
617 %ifarch i686
618 %if %{builduml}
619 BuildKernel linux um uml
620 %endif
621
622 %if %{buildxen}
623 BuildKernel vmlinuz %kernel_arch xenU
624 %endif
625 %endif
626
627 ###
628 ### install
629 ###
630
631 %install
632
633 cd vanilla
634
635 %if %{buildxen} && "%{_target_cpu}" == "i686"
636 mkdir -p $RPM_BUILD_ROOT/etc/ld.so.conf.d
637 rm -f $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernelcap-%{KVERREL}.conf
638 cat > $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernelcap-%{KVERREL}.conf <<\EOF
639 # This directive teaches ldconfig to search in nosegneg subdirectories
640 # and cache the DSOs there with extra bit 0 set in their hwcap match
641 # fields.  In Xen guest kernels, the vDSO tells the dynamic linker to
642 # search in nosegneg subdirectories and to match this extra hwcap bit
643 # in the ld.so.cache file.
644 hwcap 0 nosegneg
645 EOF
646 chmod 444 $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernelcap-%{KVERREL}.conf
647 %endif
648
649 %if %{builddoc}
650 mkdir -p $RPM_BUILD_ROOT/usr/share/doc/kernel-doc-%{kversion}/Documentation
651
652 # sometimes non-world-readable files sneak into the kernel source tree
653 chmod -R a+r *
654 # copy the source over
655 tar cf - Documentation | tar xf - -C $RPM_BUILD_ROOT/usr/share/doc/kernel-doc-%{kversion}
656 %endif
657
658 ###
659 ### clean
660 ###
661
662 %clean
663 rm -rf $RPM_BUILD_ROOT
664
665 ###
666 ### scripts
667 ###
668
669 # load the loop module for upgrades...in case the old modules get removed we have
670 # loopback in the kernel so that mkinitrd will work.
671 %pre
672 /sbin/modprobe loop 2> /dev/null > /dev/null  || :
673 exit 0
674
675 %post
676 if [ -f /etc/sysconfig/kernel ]; then
677   /bin/sed -i -e 's/^DEFAULTKERNEL=kernel-smp$/DEFAULTKERNEL=kernel/' /etc/sysconfig/kernel
678 fi
679
680 # trick mkinitrd in case the current environment does not have device mapper
681 rootdev=$(awk '/^[ \t]*[^#]/ { if ($2 == "/") { print $1; }}' /etc/fstab)
682 if echo $rootdev |grep -q /dev/mapper 2>/dev/null ; then
683     if [ ! -f $rootdev ]; then
684         fake_root_lvm=1
685         mkdir -p $(dirname $rootdev)
686         touch $rootdev
687     fi
688 fi
689
690 [ ! -x /usr/sbin/module_upgrade ] || /usr/sbin/module_upgrade %{rpmversion}-%{release}
691 #/sbin/new-kernel-pkg --package kernel --mkinitrd --depmod --install %{KVERREL}
692 # Older modutils do not support --package option
693 /sbin/new-kernel-pkg --mkinitrd --depmod --install %{KVERREL}
694
695 # remove fake handle
696 if [ -n "$fake_root_lvm" ]; then
697     rm -f $rootdev
698 fi
699
700 # make some useful links
701 pushd /boot > /dev/null ; {
702         ln -sf config-%{KVERREL} config
703         ln -sf config-%{KVERREL} configsmp
704         ln -sf initrd-%{KVERREL}.img initrd-boot
705         ln -sf initrd-%{KVERREL}.img initrd-bootsmp
706         ln -sf vmlinuz-%{KVERREL} kernel-boot
707         ln -sf vmlinuz-%{KVERREL} kernel-bootsmp
708 }
709 popd > /dev/null
710
711 # ask for a reboot
712 mkdir -p /etc/planetlab
713 touch /etc/planetlab/update-reboot
714
715 %post devel
716 [ -f /etc/sysconfig/kernel ] && . /etc/sysconfig/kernel
717 if [ "$HARDLINK" != "no" -a -x /usr/sbin/hardlink ] ; then
718   pushd /usr/src/kernels/%{KVERREL}-%{_target_cpu} > /dev/null
719   /usr/bin/find . -type f | while read f; do hardlink -c /usr/src/kernels/*FC*/$f $f ; done
720   popd > /dev/null
721 fi
722
723 %post xenU
724 [ ! -x /usr/sbin/module_upgrade ] || /usr/sbin/module_upgrade
725 [ ! -x /sbin/ldconfig ] || /sbin/ldconfig -X
726
727 %post xenU-devel
728 [ -f /etc/sysconfig/kernel ] && . /etc/sysconfig/kernel
729 if [ "$HARDLINK" != "no" -a -x /usr/sbin/hardlink ] ; then
730   pushd /usr/src/kernels/%{KVERREL}-xenU-%{_target_cpu} > /dev/null
731   /usr/bin/find . -type f | while read f; do hardlink -c /usr/src/kernels/*FC*/$f $f ; done
732   popd > /dev/null
733 fi
734
735 %post uml-modules
736 depmod -ae %{KVERREL}uml
737
738 %preun
739 /sbin/modprobe loop 2> /dev/null > /dev/null  || :
740 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{KVERREL}
741
742 %preun xenU
743 /sbin/modprobe loop 2> /dev/null > /dev/null  || :
744 /sbin/new-kernel-pkg --rmmoddep --remove %{KVERREL}xenU
745
746 %preun uml-modules
747 rm -f /lib/modules/%{KVERREL}uml/modules.*
748
749
750 ###
751 ### file lists
752 ###
753
754 %if %{buildup}
755 %files 
756 %defattr(-,root,root)
757 /%{image_install_path}/vmlinuz-%{KVERREL}
758 /boot/System.map-%{KVERREL}
759 /boot/config-%{KVERREL}
760 %dir /lib/modules/%{KVERREL}
761 /lib/modules/%{KVERREL}/kernel
762 /lib/modules/%{KVERREL}/build
763 /lib/modules/%{KVERREL}/source
764 /lib/modules/%{KVERREL}/extra
765 /lib/modules/%{KVERREL}/updates
766
767 %files devel
768 %defattr(-,root,root)
769 %verify(not mtime) /usr/src/kernels/%{KVERREL}-%{_target_cpu}
770 %endif
771
772 %if %{builduml} && "%{_target_cpu}" == "i686"
773 %files uml
774 %defattr(-,root,root)
775 %{_bindir}/linux
776
777 %files uml-devel
778 %defattr(-,root,root)
779 %verify(not mtime) /usr/src/kernels/%{KVERREL}-uml-%{_target_cpu}
780 /usr/src/kernels/%{KVERREL}uml-%{_target_cpu}
781
782 %files uml-modules
783 %defattr(-,root,root)
784 /boot/System.map-%{KVERREL}uml
785 /boot/config-%{KVERREL}uml
786 %dir /lib/modules/%{KVERREL}uml
787 /lib/modules/%{KVERREL}uml/kernel
788 /lib/modules/%{KVERREL}uml/build
789 /lib/modules/%{KVERREL}uml/source
790 /lib/modules/%{KVERREL}uml/extra
791 /lib/modules/%{KVERREL}uml/updates
792 %endif
793
794 %if %{buildxen} && "%{_target_cpu}" == "i686"
795 %files xenU
796 %defattr(-,root,root)
797 /%{image_install_path}/vmlinuz-%{KVERREL}xenU
798 /boot/System.map-%{KVERREL}xenU
799 /boot/config-%{KVERREL}xenU
800 %dir /lib/modules/%{KVERREL}xenU
801 /lib/modules/%{KVERREL}xenU/kernel
802 /lib/modules/%{KVERREL}xenU/build
803 /lib/modules/%{KVERREL}xenU/source
804 /lib/modules/%{KVERREL}xenU/extra
805 /lib/modules/%{KVERREL}xenU/updates
806 /etc/ld.so.conf.d/kernelcap-%{KVERREL}.conf
807
808 %files xenU-devel
809 %defattr(-,root,root)
810 %verify(not mtime) /usr/src/kernels/%{KVERREL}-xenU-%{_target_cpu}
811 /usr/src/kernels/%{KVERREL}xenU-%{_target_cpu}
812 %endif
813
814 %files vserver
815 %defattr(-,root,root)
816 # no files
817
818 # only some architecture builds need kernel-doc
819
820 %if %{builddoc}
821 %files doc
822 %defattr(-,root,root)
823 %{_datadir}/doc/kernel-doc-%{kversion}/Documentation/*
824 %dir %{_datadir}/doc/kernel-doc-%{kversion}/Documentation
825 %dir %{_datadir}/doc/kernel-doc-%{kversion}
826 %endif
827
828 %changelog
829 * Wed Apr 23 2008 Stephen Soltesz <soltesz@cs.princeton.edu> - linux-2.6-22-2
830 - Includes changes from Sapan/Andy regarding the scheduler and vnet bugs.
831 - Should be safe to try a second deployment.
832
833
834 * Tue Jul 11 2006 Dave Jones <davej@redhat.com> [2.6.17-1.2142_FC4]
835 - 2.6.17.4
836 - Disable split pagetable lock.
837
838 * Wed Jul  5 2006 Dave Jones <davej@redhat.com>
839 - Get rid of stack backtrace on panic, which in most
840   cases actually caused a loss of info instead of a gain.
841
842 * Fri Jun 30 2006 Dave Jones <davej@redhat.com> [2.6.17-1.2141_FC4]
843 - 2.6.17.3
844
845 * Fri Jun 30 2006 Dave Jones <davej@redhat.com> [2.6.17-1.2140_FC4]
846 - 2.6.17.2
847 - Fix up the alsa list_add bug.
848
849 * Mon Jun 26 2006 Dave Jones <davej@redhat.com>
850 - Fix up various stupidities incurred by the last big rebase.
851   - Reenable SMP x86-64 builds.
852   - Reenable SMBFS.
853 - Enable PCI fake hotplug driver.
854 - Enable gameport/joystick on i586 builds. (#196581)
855
856 * Sat Jun 24 2006 Dave Jones <davej@redhat.com>
857 - Enable profiling for 586 kernels.
858
859 * Fri Jun 23 2006 Dave Jones <davej@redhat.com> [2.6.17-1.2139_FC4]
860 - Rebuild with slab debug off.
861
862 * Tue Jun 20 2006 Dave Jones <davej@redhat.com> [2.6.17-1.2138_FC4]
863 - 2.6.17.1
864
865 * Mon Jun  5 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2115_FC4]
866 - 2.6.16.20
867
868 * Tue May 30 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2114_FC4]
869 - 2.6.16.19
870
871 * Mon May 29 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2113_FC4]
872 - Improved list_head debugging.
873
874 * Tue May 23 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2112_FC4]
875 - 2.6.16.18
876
877 * Sat May 20 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2111_FC4]
878 - 2.6.16.17
879
880 * Wed May 10 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2110_FC4]
881 - 2.6.16.16
882
883 * Tue May  9 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2109_FC4]
884 - 2.6.16.15
885 - make 16C950 UARTs work (again). (#126403)
886 - Fix exec-shield default, which should fix a few programs that
887   stopped running.
888
889 * Thu May  4 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2108_FC4]
890 - 2.6.16.14
891
892 * Tue May  2 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2107_FC4]
893 - 2.6.16.13
894
895 * Mon May  1 2006 Dave Jones <davej@redhat.com>
896 - 2.6.16.12
897
898 * Tue Apr 25 2006 Dave Jones <davej@redhat.com>
899 - Fix up SCSI errors with mymusix usb mp3 player (#186187)
900
901 * Mon Apr 24 2006 Dave Jones <davej@redhat.com>
902 - 2.6.16.11
903
904 * Wed Apr 19 2006 Dave Jones <davej@redhat.com>
905 - Enable PCI MSI support.
906
907 * Tue Apr 18 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2096_FC4]
908 - 2.6.16.9
909
910 * Tue Apr 18 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2093_FC4]
911 - 2.6.16.7
912
913 * Mon Apr 17 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2092_FC4]
914 - 2.6.16.6
915
916 * Sun Apr 16 2006 Dave Jones <davej@redhat.com>
917 - 2.6.16.5
918
919 * Fri Apr  7 2006 Dave Jones <davej@redhat.com>
920 - 2.6.16.2
921
922 * Tue Apr  4 2006 Dave Jones <davej@redhat.com>
923 - Reenable non-standard serial ports. (#187466)
924 - Reenable snd-es18xx for x86-32 (#187733)
925
926 * Thu Mar 30 2006 Dave Jones <davej@redhat.com>
927 - ship the .kernelrelease file in -devel too.
928 - Disable EDAC debug.
929
930 * Tue Mar 26 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2069_FC4]
931 - 2.6.16.1
932
933 * Mon Mar 25 2006 Dave Jones <davej@redhat.com>
934 - Include patches posted for review for inclusion in 2.6.16.1
935 - Updated new audit msg types.
936 - Reenable HDLC driver (#186257)
937 - Make acpi-cpufreq 'sticky'
938 - Fix broken x86-64 32bit vDSO (#186924)
939
940 * Tue Mar 21 2006 Dave Jones <davej@redhat.com>
941 - Improve spinlock scalability on big machines.
942
943 * Mon Mar 20 2006 Dave Jones <davej@redhat.com>
944 - Sync with FC5's 2.6.16 kernel.
945 - Update Tux & Exec-shield to latest.
946