Updating from the mainline PL kernel
[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 %define headers 1
16
17 # from 2.6.27 iwlwifi in builtin
18
19 # Versions of various parts
20
21 # for module-tag.py - sublevel is used for the version (middle) part of tag names
22 %define name linux-2.6
23 %define module_version_varname sublevel
24 %define taglevel 2
25
26 #
27 # Polite request for people who spin their own kernel rpms:
28 # please modify the "release" field in a way that identifies
29 # that the kernel isn't the stock distribution kernel, for example by
30 # adding some text to the end of the version number.
31 #
32 %define sublevel 27
33 %define patchlevel 14
34 %define kversion 2.6.%{sublevel}
35 %define rpmversion 2.6.%{sublevel}%{?patchlevel:.%{patchlevel}}
36
37 %define vsversion 2.3.0.36.4
38
39 # Will go away when VServer supports NetNS in mainline. Currently, it must be 
40 # updated every time the PL kernel is updated.
41 %define vini_pl_patch 561
42
43 %define release vs%{vsversion}.%{taglevel}%{?pldistro:.%{pldistro}}%{?date:.%{date}}
44
45 %{!?pldistro:%global pldistro planetlab}
46
47 %define signmodules 0
48 %define make_target bzImage
49 %define KVERREL %{PACKAGE_VERSION}-%{PACKAGE_RELEASE}
50
51 # Override generic defaults with per-arch defaults
52
53 %define image_install_path boot
54
55 #
56 # Three sets of minimum package version requirements in the form of Conflicts:
57 # to versions below the minimum
58 #
59
60 #
61 # First the general kernel 2.6 required versions as per
62 # Documentation/Changes
63 #
64 %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
65
66
67 # Then a series of requirements that are distribution specific, either 
68 # because we add patches for something, or the older versions have 
69 # problems with the newer kernel or lack certain things that make 
70 # integration in the distro harder than needed.
71 #
72 %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
73
74 #
75 # Several packages had bugs in them that became obvious when the NPTL
76 # threading code got integrated.
77 #
78 %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
79
80 #
81 # The ld.so.conf.d file we install uses syntax older ldconfig's don't grok.
82 #
83
84 # MEF commented out
85 #define xen_conflicts glibc < 2.3.5-1
86
87 #
88 # Packages that need to be installed before the kernel is, because the %post
89 # scripts use them.
90 #
91 %define kernel_prereq  fileutils, module-init-tools, initscripts >= 5.83, mkinitrd >= 3.5.5
92
93 Vendor: PlanetLab
94 Packager: PlanetLab Central <support@planet-lab.org>
95 Distribution: PlanetLab %{plrelease}
96 URL: %(echo %{url} | cut -d ' ' -f 2)
97
98 Name: kernel
99 Group: System Environment/Kernel
100 License: GPLv2
101 Version: %{rpmversion}
102 Release: %{release}
103 ExclusiveOS: Linux
104 Provides: kernel = %{version}
105 Provides: kernel-drm = 4.3.0
106 Provides: kernel-%{_target_cpu} = %{rpmversion}-%{release}
107 Provides: kernel-smp = %{rpmversion}-%{release}
108 Provides: kernel-smp-%{_target_cpu} = %{rpmversion}-%{release}
109 Prereq: %{kernel_prereq}
110 Conflicts: %{kernel_dot_org_conflicts}
111 Conflicts: %{package_conflicts}
112 Conflicts: %{nptl_conflicts}
113 # We can't let RPM do the dependencies automatic because it'll then pick up
114 # a correct but undesirable perl dependency from the module headers which
115 # isn't required for the kernel proper to function
116 AutoReqProv: no
117
118 #
119 # List the packages used during the kernel build
120 #
121 BuildPreReq: module-init-tools, patch >= 2.5.4, bash >= 2.03, sh-utils, tar
122 BuildPreReq: bzip2, findutils, gzip, m4, perl, make >= 3.78, gnupg, diffutils
123 BuildRequires: gcc >= 3.3.3, binutils >= 2.12, redhat-rpm-config
124 BuildConflicts: rhbuildsys(DiskFree) < 500Mb
125
126
127 Source0: ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-%{kversion}.tar.bz2
128
129 Source11: %{pldistro}-%{kversion}-i686.config
130 Source12: %{pldistro}-%{kversion}-x86_64.config
131 %if %{builduml}
132 Source20: %{pldistro}-%{kversion}-i686-uml.config
133 %endif
134 %if %{buildxen}
135 Source30: %{pldistro}-%{kversion}-i686-xenU.config
136 %endif
137
138 # Mainline patches
139 %if "0%{patchlevel}"
140 Patch000: ftp://ftp.kernel.org/pub/linux/kernel/v2.6/patch-%{rpmversion}.bz2
141 %endif
142
143 # Linux-VServer
144 Patch200: patch-%{rpmversion}-vs%{vsversion}.diff
145
146 # IP sets
147 Patch250: linux-2.6-250-ipsets.patch
148
149 # PlanetLab
150 Patch500: linux-2.6-500-vserver-filesharing.patch
151 Patch510: linux-2.6-510-ipod.patch
152 Patch521: linux-2.6-521-packet-tagging.patch
153 Patch522: linux-2.6-522-iptables-connection-tagging.patch
154 Patch523: linux-2.6-523-raw-sockets.patch
155 Patch524: linux-2.6-524-peercred.patch
156 Patch525: linux-2.6-525-sknid-elevator.patch
157 # Patch526: linux-2.6-526-tun-tap.patch
158 Patch527: linux-2.6-527-iptables-classify-add-mark.patch
159 Patch530: linux-2.6-530-built-by-support.patch
160 Patch540: linux-2.6-540-oom-kill.patch
161 Patch550: linux-2.6-550-raise-default-nfile-ulimit.patch
162 Patch560: linux-2.6-560-mmconf.patch
163 Patch570: linux-2.6-570-tagxid.patch
164 Patch580: linux-2.6-580-show-proc-virt.patch
165 # Patch590: linux-2.6-590-chopstix-intern.patch
166 # Patch630: linux-2.6-630-sched-fix.patch
167 Patch640: linux-2.6-640-netlink-audit-hack.patch
168 Patch650: linux-2.6-650-hangcheck-reboot.patch
169 Patch660: linux-2.6-660-nmi-watchdog-default.patch
170 Patch680: linux-2.6-680-htb-hysteresis-tso.patch
171 Patch690: linux-2.6-690-web100.patch
172
173 BuildRoot: %{_tmppath}/kernel-%{KVERREL}-root
174
175 %description
176 The kernel package contains the Linux kernel (vmlinuz), the core of any
177 Linux operating system.  The kernel handles the basic functions
178 of the operating system:  memory allocation, process allocation, device
179 input and output, etc.
180
181 %package devel
182 Summary: Development package for building kernel modules to match the kernel.
183 Group: System Environment/Kernel
184 AutoReqProv: no
185 Provides: kernel-devel-%{_target_cpu} = %{rpmversion}-%{release}
186 Provides: kernel-smp-devel = %{rpmversion}-%{release}
187 Provides: kernel-smp-devel-%{_target_cpu} = %{rpmversion}-%{release}
188 Prereq: /usr/bin/find
189
190 %description devel
191 This package provides kernel headers and makefiles sufficient to build modules
192 against the kernel package.
193
194
195 %package doc
196 Summary: Various documentation bits found in the kernel source.
197 Group: Documentation
198
199 %description doc
200 This package contains documentation files from the kernel
201 source. Various bits of information about the Linux kernel and the
202 device drivers shipped with it are documented in these files.
203
204 You'll want to install this package if you need a reference to the
205 options that can be passed to Linux kernel modules at load time.
206
207 %package xenU
208 Summary: The Linux kernel compiled for unprivileged Xen guest VMs
209
210 Group: System Environment/Kernel
211 Provides: kernel = %{version}
212 Provides: kernel-%{_target_cpu} = %{rpmversion}-%{release}xenU
213 Prereq: %{kernel_prereq}
214 Conflicts: %{kernel_dot_org_conflicts}
215 Conflicts: %{package_conflicts}
216 Conflicts: %{nptl_conflicts}
217
218 # MEF commented out 
219 # Conflicts: %{xen_conflicts}
220
221 # We can't let RPM do the dependencies automatic because it'll then pick up
222 # a correct but undesirable perl dependency from the module headers which
223 # isn't required for the kernel proper to function
224 AutoReqProv: no
225
226 %description xenU
227 This package includes a version of the Linux kernel which
228 runs in Xen unprivileged guest VMs.  This should be installed
229 both inside the unprivileged guest (for the modules) and in
230 the guest0 domain.
231
232 %package xenU-devel
233 Summary: Development package for building kernel modules to match the kernel.
234 Group: System Environment/Kernel
235 AutoReqProv: no
236 Provides: kernel-xenU-devel-%{_target_cpu} = %{rpmversion}-%{release}
237 Provides: kernel-devel-%{_target_cpu} = %{rpmversion}-%{release}xenU
238 Provides: kernel-devel = %{rpmversion}-%{release}xenU
239 Prereq: /usr/sbin/hardlink, /usr/bin/find
240
241 %description xenU-devel
242 This package provides kernel headers and makefiles sufficient to build modules
243 against the kernel package.
244
245 %package uml
246 Summary: The Linux kernel compiled for use in user mode (User Mode Linux).
247
248 Group: System Environment/Kernel
249
250 %description uml
251 This package includes a user mode version of the Linux kernel.
252
253 %package uml-devel
254 Summary: Development package for building kernel modules to match the UML kernel.
255 Group: System Environment/Kernel
256 Provides: kernel-uml-devel-%{_target_cpu} = %{rpmversion}-%{release}
257 Provides: kernel-devel-%{_target_cpu} = %{rpmversion}-%{release}smp
258 Provides: kernel-devel = %{rpmversion}-%{release}smp
259 AutoReqProv: no
260 Prereq: /usr/sbin/hardlink, /usr/bin/find
261
262 %description uml-devel
263 This package provides kernel headers and makefiles sufficient to build modules
264 against the User Mode Linux kernel package.
265
266 %package uml-modules
267 Summary: The Linux kernel modules compiled for use in user mode (User Mode Linux).
268
269 Group: System Environment/Kernel
270
271 %description uml-modules
272 This package includes a user mode version of the Linux kernel modules.
273
274 %package vserver
275 Summary: A placeholder RPM that provides kernel and kernel-drm
276
277 Group: System Environment/Kernel
278 Provides: kernel = %{version}
279 Provides: kernel-drm = 4.3.0
280 Provides: kernel-%{_target_cpu} = %{rpmversion}-%{release}
281
282 %description vserver
283 VServers do not require and cannot use kernels, but some RPMs have
284 implicit or explicit dependencies on the "kernel" package
285 (e.g. tcpdump). This package installs no files but provides the
286 necessary dependencies to make rpm and yum happy.
287
288 %package headers
289 Summary: Kernel header
290 Group: System Environment/Kernel
291
292 %description headers
293 This package contains the sanitized kernel headers.
294
295 %prep
296 # First we unpack the kernel tarball.
297 # If this isn't the first make prep, we use links to the existing clean tarball
298 # which speeds things up quite a bit.
299 if [ ! -d kernel-%{kversion}/vanilla ]; then
300   # Ok, first time we do a make prep.
301   rm -f pax_global_header
302 %setup -q -n %{name}-%{kversion} -c
303   mv linux-%{kversion} vanilla
304 else
305   # We already have a vanilla dir.
306   cd kernel-%{kversion}
307 fi
308
309 KERNEL_PREVIOUS=vanilla
310 # Dark RPM-magic to apply each patch to a hardlinked copy of the tree.
311 %define ApplyPatch() \
312   rm -fr linux-%{kversion}-%1                           \
313   cp -al $KERNEL_PREVIOUS linux-%{kversion}-%1          \
314   patchflag=-p1                                         \
315   test "%2" != "%%2" && patchflag="%2"                  \
316   PATCH="%{expand:%{PATCH%1}}"                          \
317   if test ! -e "$PATCH"; then                           \
318     echo "Patch %1 does not exist!"                     \
319     exit 1                                              \
320   fi                                                    \
321   case "$PATCH" in                                      \
322     *.bz2)  bzcat "$PATCH";;                            \
323     *.gz)   zcat "$PATCH";;                             \
324     *)      cat "$PATCH";;                              \
325   esac | patch -F1 -s -d linux-%{kversion}-%1 $patchflag \
326   KERNEL_PREVIOUS=linux-%{kversion}-%1
327
328 # This is where the patches get applied
329 %if 0%{?patchlevel}
330 %ApplyPatch 0
331 %endif
332
333 # NetNS patch for VINI
334
335 %ApplyPatch 200
336
337 %ApplyPatch 250
338
339 %ApplyPatch 500
340 %ApplyPatch 510
341
342 # VNET+ series
343 %ApplyPatch 521
344 %ApplyPatch 522
345 %ApplyPatch 523
346 %ApplyPatch 524
347 %ApplyPatch 525
348 %ApplyPatch 527
349
350 %ApplyPatch 530
351 %ApplyPatch 540
352 %ApplyPatch 550
353 %ApplyPatch 560
354 %ApplyPatch 570
355 %ApplyPatch 580
356 %ApplyPatch 640
357 %ApplyPatch 650
358 %ApplyPatch 660
359
360
361 # NetNS conflict-resolving patch for VINI. Will work with patch vini_pl_patch-1 but may
362 # break with later patches.
363
364 %if 0%{?with_netns}
365 %ApplyPatch %vini_pl_patch
366 %endif
367
368 rm -fr linux-%{kversion}
369 ln -sf $KERNEL_PREVIOUS linux-%{kversion}
370 cd linux-%{kversion}
371
372
373 # make sure the kernel has the sublevel we know it has. This looks weird
374 # but for -pre and -rc versions we need it since we only want to use
375 # the higher version when the final kernel is released.
376 perl -p -i -e "s/^SUBLEVEL.*/SUBLEVEL = %{sublevel}/" Makefile
377 perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -prep/" Makefile
378
379 # get rid of unwanted files resulting from patch fuzz
380 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
381
382
383 ###
384 ### build
385 ###
386 %build
387
388 BuildKernel() {
389     MakeTarget=$1
390     Arch=$2
391     Flavour=$3
392
393     rm -rf linux-%{_target_cpu}-%{kversion}$Flavour
394     cp -rl linux-%{kversion}/ linux-%{_target_cpu}-%{kversion}$Flavour
395     cd linux-%{_target_cpu}-%{kversion}$Flavour
396
397     # Pick the right config file for the kernel we're building
398     if [ -n "$Flavour" ] ; then
399       Config=%{pldistro}-%{kversion}-%{_target_cpu}-$Flavour.config
400       DevelDir=/usr/src/kernels/%{KVERREL}-$Flavour-%{_target_cpu}
401       DevelLink=/usr/src/kernels/%{KVERREL}$Flavour-%{_target_cpu}
402     else
403       Config=%{pldistro}-%{kversion}-%{_target_cpu}.config
404       DevelDir=/usr/src/kernels/%{KVERREL}-%{_target_cpu}
405       DevelLink=
406     fi
407
408     KernelVer=%{version}-%{release}$Flavour
409     echo BUILDING A KERNEL FOR $Flavour %{_target_cpu}...
410
411     # make sure EXTRAVERSION says what we want it to say
412     perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = %{?patchlevel:.%{patchlevel}}-%{release}$Flavour/" Makefile
413
414     # and now to start the build process
415
416     make -s mrproper
417     cp %{_sourcedir}/$Config .config
418
419     #Arch=`head -1 .config | cut -b 3-`
420     echo USING ARCH=$Arch
421
422     make -s ARCH=$Arch oldconfig < /dev/null > /dev/null
423     make -s ARCH=$Arch %{?_smp_mflags} $MakeTarget
424     make -s ARCH=$Arch %{?_smp_mflags} modules || exit 1
425 %if %{headers}
426     make -s ARCH=$Arch INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr
427     find $RPM_BUILD_ROOT/%{_includedir} -name \*.cmd -delete
428     rm -f $RPM_BUILD_ROOT/%{_includedir}/{..,.}{check,install}*
429 %endif
430
431     # Start installing the results
432
433 %if "%{_enable_debug_packages}" == "1"
434     mkdir -p $RPM_BUILD_ROOT/usr/lib/debug/boot
435 %endif
436     mkdir -p $RPM_BUILD_ROOT/%{image_install_path}
437     install -m 644 .config $RPM_BUILD_ROOT/boot/config-$KernelVer
438     install -m 644 System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer
439     if [ -f arch/$Arch/boot/bzImage ]; then
440       cp arch/$Arch/boot/bzImage $RPM_BUILD_ROOT/%{image_install_path}/vmlinuz-$KernelVer
441     fi
442     if [ -f arch/$Arch/boot/zImage.stub ]; then
443       cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/%{image_install_path}/zImage.stub-$KernelVer || :
444     fi
445     if [ "$Flavour" = "uml" ] ; then
446         install -D -m 755 linux $RPM_BUILD_ROOT/%{_bindir}/linux
447     fi
448
449     mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer
450     make -s ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT modules_install KERNELRELEASE=$KernelVer
451
452     # And save the headers/makefiles etc for building modules against
453     #
454     # This all looks scary, but the end result is supposed to be:
455     # * all arch relevant include/ files
456     # * all Makefile/Kconfig files
457     # * all script/ files
458
459     rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
460     rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/source
461     mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
462     (cd $RPM_BUILD_ROOT/lib/modules/$KernelVer ; ln -s build source)
463     # dirs for additional modules per module-init-tools, kbuild/modules.txt
464     mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/extra
465     mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/updates
466     # first copy everything
467     cp --parents `find  -type f -name "Makefile*" -o -name "Kconfig*"` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build 
468         cp Module.symvers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
469     if [ "$Flavour" = "uml" ] ; then
470       cp --parents -a `find arch/um -name include` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
471     fi
472     # then drop all but the needed Makefiles/Kconfig files
473     rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Documentation
474     rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts
475     rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
476     cp arch/%{_arch}/kernel/asm-offsets.s $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch}/kernel || :
477     cp .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
478     cp -a scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
479     if [ -d arch/%{_arch}/scripts ]; then
480       cp -a arch/%{_arch}/scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch} || :
481     fi
482     if [ -f arch/%{_arch}/*lds ]; then
483       cp -a arch/%{_arch}/*lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch}/ || :
484     fi
485     rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/*.o
486     rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/*/*.o
487     mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
488     cd include
489     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
490     cp -a `readlink asm` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
491     if [ "$Arch" = "x86_64" ]; then
492       cp -a asm-x86 $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
493     fi
494 %if %{buildxen}
495     if [ "$Flavour" = "xenU" ]; then
496       cp -a xen $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
497       cp -a asm-x86 $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
498     fi
499 %endif
500 %if %{builduml}
501     if [ "$Flavour" = "uml" ] ; then
502       cp -a `readlink -f asm/arch` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
503     fi
504 %endif
505     # While arch/powerpc/include/asm is still a symlink to the old
506     # include/asm-ppc{64,} directory, include that in kernel-devel too.
507     if [ "$Arch" = "powerpc" -a -r ../arch/powerpc/include/asm ]; then
508       cp -a `readlink ../arch/powerpc/include/asm` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
509       mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/$Arch/include
510       pushd $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/$Arch/include
511       ln -sf ../../../include/asm-ppc* asm
512       popd
513     fi
514
515     # Make sure the Makefile and version.h have a matching timestamp so that
516     # external modules can be built
517     touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Makefile $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/linux/version.h
518     touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/.config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/linux/autoconf.h
519     cd ..
520
521     #
522     # save the vmlinux file for kernel debugging into the kernel-debuginfo rpm
523     #
524 %if "%{_enable_debug_packages}" == "1"
525     mkdir -p $RPM_BUILD_ROOT/usr/lib/debug/lib/modules/$KernelVer
526     cp vmlinux $RPM_BUILD_ROOT/usr/lib/debug/lib/modules/$KernelVer
527 %endif
528 %if %{buildxen}
529     if [ -f vmlinuz ]; then
530       cp vmlinuz $RPM_BUILD_ROOT/%{image_install_path}/vmlinuz-$KernelVer
531     fi
532 %endif
533
534     find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name "*.ko" -type f >modnames
535
536     # mark modules executable so that strip-to-file can strip them
537     cat modnames | xargs chmod u+x
538
539     # remove files that will be auto generated by depmod at rpm -i time
540     rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.*
541
542     # Move the devel headers out of the root file system
543     mkdir -p $RPM_BUILD_ROOT/usr/src/kernels
544     mv $RPM_BUILD_ROOT/lib/modules/$KernelVer/build $RPM_BUILD_ROOT/$DevelDir
545     ln -sf ../../..$DevelDir $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
546     [ -z "$DevelLink" ] || ln -sf `basename $DevelDir` $RPM_BUILD_ROOT/$DevelLink
547 }
548
549 ###
550 # DO it...
551 ###
552
553 # prepare directories
554 rm -rf $RPM_BUILD_ROOT
555 mkdir -p $RPM_BUILD_ROOT/boot
556
557 %if "%{_target_cpu}" == "x86_64"
558 %define kernel_arch %{_target_cpu}
559 %endif
560 %if "%{_target_cpu}" == "i586"
561 %define kernel_arch i386
562 %endif
563 %if "%{_target_cpu}" == "i686"
564 %define kernel_arch i386
565 %endif
566
567 %if %{buildup}
568 BuildKernel %make_target %kernel_arch
569 %endif
570
571 %ifarch i686
572 %if %{builduml}
573 BuildKernel linux um uml
574 %endif
575
576 %if %{buildxen}
577 BuildKernel vmlinuz %kernel_arch xenU
578 %endif
579 %endif
580
581 ###
582 ### install
583 ###
584
585 %install
586
587 cd vanilla
588
589 %if %{buildxen} && "%{_target_cpu}" == "i686"
590 mkdir -p $RPM_BUILD_ROOT/etc/ld.so.conf.d
591 rm -f $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernelcap-%{KVERREL}.conf
592 cat > $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernelcap-%{KVERREL}.conf <<\EOF
593 # This directive teaches ldconfig to search in nosegneg subdirectories
594 # and cache the DSOs there with extra bit 0 set in their hwcap match
595 # fields.  In Xen guest kernels, the vDSO tells the dynamic linker to
596 # search in nosegneg subdirectories and to match this extra hwcap bit
597 # in the ld.so.cache file.
598 hwcap 0 nosegneg
599 EOF
600 chmod 444 $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernelcap-%{KVERREL}.conf
601 %endif
602
603 %if %{builddoc}
604 mkdir -p $RPM_BUILD_ROOT/usr/share/doc/kernel-doc-%{kversion}/Documentation
605
606 # sometimes non-world-readable files sneak into the kernel source tree
607 chmod -R a+r *
608 # copy the source over
609 tar cf - Documentation | tar xf - -C $RPM_BUILD_ROOT/usr/share/doc/kernel-doc-%{kversion}
610 %endif
611
612 ###
613 ### clean
614 ###
615
616 %clean
617 rm -rf $RPM_BUILD_ROOT
618
619 ###
620 ### scripts
621 ###
622
623 # load the loop module for upgrades...in case the old modules get removed we have
624 # loopback in the kernel so that mkinitrd will work.
625 %pre
626 /sbin/modprobe loop 2> /dev/null > /dev/null  || :
627 exit 0
628
629 %post
630 if [ -f /etc/sysconfig/kernel ]; then
631   /bin/sed -i -e 's/^DEFAULTKERNEL=kernel-smp$/DEFAULTKERNEL=kernel/' /etc/sysconfig/kernel
632 fi
633
634 # trick mkinitrd in case the current environment does not have device mapper
635 rootdev=$(awk '/^[ \t]*[^#]/ { if ($2 == "/") { print $1; }}' /etc/fstab)
636 if echo $rootdev |grep -q /dev/mapper 2>/dev/null ; then
637     if [ ! -f $rootdev ]; then
638         fake_root_lvm=1
639         mkdir -p $(dirname $rootdev)
640         touch $rootdev
641     fi
642 fi
643
644 [ ! -x /usr/sbin/module_upgrade ] || /usr/sbin/module_upgrade %{rpmversion}-%{release}
645 #/sbin/new-kernel-pkg --package kernel --mkinitrd --depmod --install %{KVERREL}
646 # Older modutils do not support --package option
647 /sbin/new-kernel-pkg --mkinitrd --depmod --install %{KVERREL}
648
649 # remove fake handle
650 if [ -n "$fake_root_lvm" ]; then
651     rm -f $rootdev
652 fi
653
654 # make some useful links
655 pushd /boot > /dev/null ; {
656         ln -sf config-%{KVERREL} config
657         ln -sf config-%{KVERREL} configsmp
658         ln -sf initrd-%{KVERREL}.img initrd-boot
659         ln -sf initrd-%{KVERREL}.img initrd-bootsmp
660         ln -sf vmlinuz-%{KVERREL} kernel-boot
661         ln -sf vmlinuz-%{KVERREL} kernel-bootsmp
662 }
663 popd > /dev/null
664
665 # ask for a reboot
666 mkdir -p /etc/planetlab
667 touch /etc/planetlab/update-reboot
668
669 %post devel
670 [ -f /etc/sysconfig/kernel ] && . /etc/sysconfig/kernel
671 if [ "$HARDLINK" != "no" -a -x /usr/sbin/hardlink ] ; then
672   pushd /usr/src/kernels/%{KVERREL}-%{_target_cpu} > /dev/null
673   /usr/bin/find . -type f | while read f; do hardlink -c /usr/src/kernels/*FC*/$f $f ; done
674   popd > /dev/null
675 fi
676
677 %post xenU
678 [ ! -x /usr/sbin/module_upgrade ] || /usr/sbin/module_upgrade
679 [ ! -x /sbin/ldconfig ] || /sbin/ldconfig -X
680
681 %post xenU-devel
682 [ -f /etc/sysconfig/kernel ] && . /etc/sysconfig/kernel
683 if [ "$HARDLINK" != "no" -a -x /usr/sbin/hardlink ] ; then
684   pushd /usr/src/kernels/%{KVERREL}-xenU-%{_target_cpu} > /dev/null
685   /usr/bin/find . -type f | while read f; do hardlink -c /usr/src/kernels/*FC*/$f $f ; done
686   popd > /dev/null
687 fi
688
689 %post uml-modules
690 depmod -ae %{KVERREL}uml
691
692 %preun
693 /sbin/modprobe loop 2> /dev/null > /dev/null  || :
694 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{KVERREL}
695
696 %preun xenU
697 /sbin/modprobe loop 2> /dev/null > /dev/null  || :
698 /sbin/new-kernel-pkg --rmmoddep --remove %{KVERREL}xenU
699
700 %preun uml-modules
701 rm -f /lib/modules/%{KVERREL}uml/modules.*
702
703
704 ###
705 ### file lists
706 ###
707
708 %if %{buildup}
709 %files 
710 %defattr(-,root,root)
711 /%{image_install_path}/vmlinuz-%{KVERREL}
712 /boot/System.map-%{KVERREL}
713 /boot/config-%{KVERREL}
714 %dir /lib/modules/%{KVERREL}
715 /lib/modules/%{KVERREL}/kernel
716 /lib/modules/%{KVERREL}/build
717 /lib/modules/%{KVERREL}/source
718 /lib/modules/%{KVERREL}/extra
719 /lib/modules/%{KVERREL}/updates
720
721 %files devel
722 %defattr(-,root,root)
723 %verify(not mtime) /usr/src/kernels/%{KVERREL}-%{_target_cpu}
724 %endif
725
726 %if %{builduml} && "%{_target_cpu}" == "i686"
727 %files uml
728 %defattr(-,root,root)
729 %{_bindir}/linux
730
731 %files uml-devel
732 %defattr(-,root,root)
733 %verify(not mtime) /usr/src/kernels/%{KVERREL}-uml-%{_target_cpu}
734 /usr/src/kernels/%{KVERREL}uml-%{_target_cpu}
735
736 %files uml-modules
737 %defattr(-,root,root)
738 /boot/System.map-%{KVERREL}uml
739 /boot/config-%{KVERREL}uml
740 %dir /lib/modules/%{KVERREL}uml
741 /lib/modules/%{KVERREL}uml/kernel
742 /lib/modules/%{KVERREL}uml/build
743 /lib/modules/%{KVERREL}uml/source
744 /lib/modules/%{KVERREL}uml/extra
745 /lib/modules/%{KVERREL}uml/updates
746 %endif
747
748 %if %{buildxen} && "%{_target_cpu}" == "i686"
749 %files xenU
750 %defattr(-,root,root)
751 /%{image_install_path}/vmlinuz-%{KVERREL}xenU
752 /boot/System.map-%{KVERREL}xenU
753 /boot/config-%{KVERREL}xenU
754 %dir /lib/modules/%{KVERREL}xenU
755 /lib/modules/%{KVERREL}xenU/kernel
756 /lib/modules/%{KVERREL}xenU/build
757 /lib/modules/%{KVERREL}xenU/source
758 /lib/modules/%{KVERREL}xenU/extra
759 /lib/modules/%{KVERREL}xenU/updates
760 /etc/ld.so.conf.d/kernelcap-%{KVERREL}.conf
761
762 %files xenU-devel
763 %defattr(-,root,root)
764 %verify(not mtime) /usr/src/kernels/%{KVERREL}-xenU-%{_target_cpu}
765 /usr/src/kernels/%{KVERREL}xenU-%{_target_cpu}
766 %endif
767
768 %files vserver
769 %defattr(-,root,root)
770 # no files
771
772 # only some architecture builds need kernel-doc
773
774 %if %{builddoc}
775 %files doc
776 %defattr(-,root,root)
777 %{_datadir}/doc/kernel-doc-%{kversion}/Documentation/*
778 %dir %{_datadir}/doc/kernel-doc-%{kversion}/Documentation
779 %dir %{_datadir}/doc/kernel-doc-%{kversion}
780 %endif
781
782 %if %{headers}
783 %files headers
784 %defattr(-,root,root)
785 %dir %{_includedir}
786 %{_includedir}/*
787 %endif
788
789 %changelog
790 * Tue Mar 24 2009 Thierry Parmentelat <thierry.parmentelat@sophia.inria.fr> - linux-2.6-27-2
791 - cleaned up obsolete (2.6.22) configs
792 - added gnuradio config links
793 - fix for building headers package (remove .cmd files)
794
795 * Tue Mar 10 2009 Thierry Parmentelat <thierry.parmentelat@sophia.inria.fr> - linux-2.6-27-1
796 - untested feature-complete version, but for the scheduler that is still missing
797
798 * Thu Jan 08 2009 Thierry Parmentelat <thierry.parmentelat@sophia.inria.fr> - linux-2.6-22-32
799 - support building on fedora 10
800
801 * Tue Dec 02 2008 Daniel Hokka Zakrisson <daniel@hozac.com> - linux-2.6-22-31
802 - add patches for m-lab and drl
803
804 * Tue Nov 11 2008 Daniel Hokka Zakrisson <daniel@hozac.com> - linux-2.6-22-30
805 - Use Intel's e1000e driver.
806
807 * Thu Oct 02 2008 Thierry Parmentelat <thierry.parmentelat@sophia.inria.fr> - linux-2.6-22-29
808 - added drivers for OPTION's globetrotter (gt 3g+ emea) umts cards
809 - + cleanup outdated configs
810
811 * Wed Sep 17 2008 Sapan Bhatia <sapanb@cs.princeton.edu> - linux-2.6-22-28
812 - Recovering a hunk that I accidentally ommited out of the last commit. Should not entail retesting, because the commits
813 - were unrelated.
814
815 * Sun Sep 14 2008 Sapan Bhatia <sapanb@cs.princeton.edu> - linux-2.6-22-27
816 - Fixing the accounting issue that causes certain connections to be misaccounted, and that causes NM/peercreds to
817 - intermittently break.
818
819 * Wed Sep 10 2008 Thierry Parmentelat <thierry.parmentelat@sophia.inria.fr> - linux-2.6-22-26
820 - patch for building on f9/gcc-4.3, no functional change on other distros
821
822 * Sun Aug 17 2008 Daniel Hokka Zakrisson <daniel@hozac.com> - linux-2.6-22-25
823 - FUSE support.
824
825 * Tue Aug 12 2008 Sapan Bhatia <sapanb@cs.princeton.edu> - linux-2.6-22-24
826 - Enable nmi watchdog by default.
827
828 * Mon Aug 04 2008 Sapan Bhatia <sapanb@cs.princeton.edu> - linux-2.6-22-23
829 - Fixed a bug in my previous commit.
830
831 * Mon Aug 04 2008 Sapan Bhatia <sapanb@cs.princeton.edu> - linux-2.6-22-22
832 - * 1 fix for using udp/listening sockets via raw
833 - * 1 fix to help codemux divide traffic in PlanetFlow
834
835 * Fri Aug 01 2008 Sapan Bhatia <sapanb@cs.princeton.edu> - linux-2.6-22-21
836 - Codemux calls setsockopt/SO_PEERCRED to set peer credentials on a socket, so that the connections it proxies to its clients are tagged for PlanetFlow. This hunk got lost somewhere along the way.
837
838 * Thu Jul 31 2008 Sapan Bhatia <sapanb@cs.princeton.edu> - linux-2.6-22-20
839 - Removed a debugging statement. Shows up a lot in the debug logs.
840
841 * Wed Jul 30 2008 Sapan Bhatia <sapanb@cs.princeton.edu> - linux-2.6-22-19
842 - Unbroke peercred setting.
843
844 * Mon Jul 28 2008 Sapan Bhatia <sapanb@cs.princeton.edu> - linux-2.6-22-18
845 - Now you can write your own TCP using packet sockets. As a side effect, tcptraceroute runs to completion including the
846 - last hop.
847
848 * Mon Jul 28 2008 Sapan Bhatia <sapanb@cs.princeton.edu> - linux-2.6-22-17
849 - Optimize packet socket support to eliminate a packet copy.
850
851 * Sun Jul 27 2008 Sapan Bhatia <sapanb@cs.princeton.edu> - linux-2.6-22-16
852 - Missed this header file, which broke the compile.
853 - I'll be doing another tag to include an optimization I left out of this version. This version is for Build only.
854
855 * Sun Jul 27 2008 Sapan Bhatia <sapanb@cs.princeton.edu> - linux-2.6-22-15
856 - Fixes to tcpdump-related problems reported recently.
857
858 * Wed Jul 23 2008 Stephen Soltesz <soltesz@cs.princeton.edu> - linux-2.6-22-14
859 - added fix to process visibility so when ncontext/vcontext  run netstat in
860 - xid=1, it can see all ports &  processes.
861
862 * Mon Jul 21 2008 Sapan Bhatia <sapanb@cs.princeton.edu> - linux-2.6-22-13
863 - fix for tcpdump/tcp payloads
864
865 * Tue Jul 15 2008 Sapan Bhatia <sapanb@cs.princeton.edu> - linux-2.6-22-12
866 - * Bugfix in tuntap
867 - * Attempt to fix TCP-payload-related problems with tcpdump
868
869 * Wed Jul 09 2008 Sapan Bhatia <sapanb@cs.princeton.edu> - linux-2.6-22-11
870 - * Split up VNET+ module into its component patches
871 - * Added tun/tap support
872
873 * Tue Jul 08 2008 Daniel Hokka Zakrisson <daniel@hozac.com> - linux-2.6-22-10
874 - Filling a statically allocated buffer cannot fail, right?
875
876 * Wed Jun 25 2008 Daniel Hokka Zakrisson <daniel@hozac.com> - linux-2.6-22-9
877 - Enable the hangcheck timer driver, and build it in to the kernel.
878 - Dump relevant data on the scheduler bug instead of BUGing.
879
880 * Sat Jun 07 2008 Sapan Bhatia <sapanb@cs.princeton.edu> - linux-2.6-22-8
881 - * Partial fix for the UDP-packet-pollution problem
882 - * Support for PF_PACKET sockets
883 - * Support for SOCK_PACKET sockets
884 - * Disabled Chopstix with mutexes
885 - * Tested VNET+ under heavy loads
886
887
888
889 * Fri May 16 2008 Stephen Soltesz <soltesz@cs.princeton.edu> - linux-2.6-22-7
890 - Bringing this fix in for tcpdump and  ping
891
892
893 * Fri May 09 2008 Stephen Soltesz <soltesz@cs.princeton.edu> - linux-2.6-22-6
894 - Updated configuration to include COW again.
895
896 - Patches from Sapan to fix ping losses.
897
898 - Still need help with tcpdump traffic.
899
900
901 * Tue May 06 2008 Daniel Hokka Zakrisson <daniel@hozac.com> - linux-2.6-22-5
902 - Patch needs to be applied.
903
904 * Mon May 05 2008 Stephen Soltesz <soltesz@cs.princeton.edu> - linux-2.6-22-4
905
906
907 * Thu Apr 24 2008 Thierry Parmentelat <thierry.parmentelat@sophia.inria.fr> - linux-2.6-22-3
908 - Fix bug with looping in schedule()
909
910 * Wed Apr 23 2008 Stephen Soltesz <soltesz@cs.princeton.edu> - linux-2.6-22-2
911 - Includes changes from Sapan/Andy regarding the scheduler and vnet bugs.
912 - Should be safe to try a second deployment.
913
914
915 * Tue Jul 11 2006 Dave Jones <davej@redhat.com> [2.6.17-1.2142_FC4]
916 - 2.6.17.4
917 - Disable split pagetable lock.
918
919 * Wed Jul  5 2006 Dave Jones <davej@redhat.com>
920 - Get rid of stack backtrace on panic, which in most
921   cases actually caused a loss of info instead of a gain.
922
923 * Fri Jun 30 2006 Dave Jones <davej@redhat.com> [2.6.17-1.2141_FC4]
924 - 2.6.17.3
925
926 * Fri Jun 30 2006 Dave Jones <davej@redhat.com> [2.6.17-1.2140_FC4]
927 - 2.6.17.2
928 - Fix up the alsa list_add bug.
929
930 * Mon Jun 26 2006 Dave Jones <davej@redhat.com>
931 - Fix up various stupidities incurred by the last big rebase.
932   - Reenable SMP x86-64 builds.
933   - Reenable SMBFS.
934 - Enable PCI fake hotplug driver.
935 - Enable gameport/joystick on i586 builds. (#196581)
936
937 * Sat Jun 24 2006 Dave Jones <davej@redhat.com>
938 - Enable profiling for 586 kernels.
939
940 * Fri Jun 23 2006 Dave Jones <davej@redhat.com> [2.6.17-1.2139_FC4]
941 - Rebuild with slab debug off.
942
943 * Tue Jun 20 2006 Dave Jones <davej@redhat.com> [2.6.17-1.2138_FC4]
944 - 2.6.17.1
945
946 * Mon Jun  5 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2115_FC4]
947 - 2.6.16.20
948
949 * Tue May 30 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2114_FC4]
950 - 2.6.16.19
951
952 * Mon May 29 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2113_FC4]
953 - Improved list_head debugging.
954
955 * Tue May 23 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2112_FC4]
956 - 2.6.16.18
957
958 * Sat May 20 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2111_FC4]
959 - 2.6.16.17
960
961 * Wed May 10 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2110_FC4]
962 - 2.6.16.16
963
964 * Tue May  9 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2109_FC4]
965 - 2.6.16.15
966 - make 16C950 UARTs work (again). (#126403)
967 - Fix exec-shield default, which should fix a few programs that
968   stopped running.
969
970 * Thu May  4 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2108_FC4]
971 - 2.6.16.14
972
973 * Tue May  2 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2107_FC4]
974 - 2.6.16.13
975
976 * Mon May  1 2006 Dave Jones <davej@redhat.com>
977 - 2.6.16.12
978
979 * Tue Apr 25 2006 Dave Jones <davej@redhat.com>
980 - Fix up SCSI errors with mymusix usb mp3 player (#186187)
981
982 * Mon Apr 24 2006 Dave Jones <davej@redhat.com>
983 - 2.6.16.11
984
985 * Wed Apr 19 2006 Dave Jones <davej@redhat.com>
986 - Enable PCI MSI support.
987
988 * Tue Apr 18 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2096_FC4]
989 - 2.6.16.9
990
991 * Tue Apr 18 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2093_FC4]
992 - 2.6.16.7
993
994 * Mon Apr 17 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2092_FC4]
995 - 2.6.16.6
996
997 * Sun Apr 16 2006 Dave Jones <davej@redhat.com>
998 - 2.6.16.5
999
1000 * Fri Apr  7 2006 Dave Jones <davej@redhat.com>
1001 - 2.6.16.2
1002
1003 * Tue Apr  4 2006 Dave Jones <davej@redhat.com>
1004 - Reenable non-standard serial ports. (#187466)
1005 - Reenable snd-es18xx for x86-32 (#187733)
1006
1007 * Thu Mar 30 2006 Dave Jones <davej@redhat.com>
1008 - ship the .kernelrelease file in -devel too.
1009 - Disable EDAC debug.
1010
1011 * Tue Mar 26 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2069_FC4]
1012 - 2.6.16.1
1013
1014 * Mon Mar 25 2006 Dave Jones <davej@redhat.com>
1015 - Include patches posted for review for inclusion in 2.6.16.1
1016 - Updated new audit msg types.
1017 - Reenable HDLC driver (#186257)
1018 - Make acpi-cpufreq 'sticky'
1019 - Fix broken x86-64 32bit vDSO (#186924)
1020
1021 * Tue Mar 21 2006 Dave Jones <davej@redhat.com>
1022 - Improve spinlock scalability on big machines.
1023
1024 * Mon Mar 20 2006 Dave Jones <davej@redhat.com>
1025 - Sync with FC5's 2.6.16 kernel.
1026 - Update Tux & Exec-shield to latest.
1027
1028
1029 %define module_current_branch 22