Let the spectator see all.
[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 13
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 Patch220: delta-ptrace-fix01.diff
159
160 # IP sets
161 Patch250: linux-2.6-250-ipsets.patch
162
163 # PlanetLab
164 Patch500: linux-2.6-500-vserver-filesharing.patch
165 Patch510: linux-2.6-510-ipod.patch
166 Patch520: linux-2.6-520-vnet+.patch
167 Patch521: linux-2.6-521-packet-tagging.patch
168 Patch522: linux-2.6-522-iptables-connection-tagging.patch
169 Patch523: linux-2.6-523-raw-sockets.patch
170 Patch524: linux-2.6-524-peercred.patch
171 Patch525: linux-2.6-525-sknid-elevator.patch
172 Patch526: linux-2.6-526-tun-tap.patch
173 Patch530: linux-2.6-530-built-by-support.patch
174 Patch540: linux-2.6-540-oom-kill.patch
175 Patch550: linux-2.6-550-raise-default-nfile-ulimit.patch
176 Patch560: linux-2.6-560-mmconf.patch
177 Patch570: linux-2.6-570-tagxid.patch
178 Patch580: linux-2.6-580-show-proc-virt.patch
179 Patch590: linux-2.6-590-chopstix-intern.patch
180 Patch620: linux-2.6-620-kdb.patch
181 Patch630: linux-2.6-630-sched-fix.patch
182 Patch640: linux-2.6-640-netlink-audit-hack.patch
183 Patch650: linux-2.6-650-hangcheck-reboot.patch
184
185 # See also the file named 'sources' here for the related checksums
186 # NOTE. iwlwifi should be in-kernel starting from 2.6.24
187 # see http://bughost.org/bugzilla/show_bug.cgi?id=1584
188 %if %{build_iwlwifi}
189 %define mac80211_version 10.0.4
190 Patch600: http://intellinuxwireless.org/mac80211/downloads/mac80211-%{mac80211_version}.tgz
191 %define iwlwifi_version 1.2.25
192 Patch601: http://intellinuxwireless.org/iwlwifi/downloads/iwlwifi-%{iwlwifi_version}.tgz
193 %endif
194
195 BuildRoot: %{_tmppath}/kernel-%{KVERREL}-root
196
197 %description
198 The kernel package contains the Linux kernel (vmlinuz), the core of any
199 Linux operating system.  The kernel handles the basic functions
200 of the operating system:  memory allocation, process allocation, device
201 input and output, etc.
202
203 %package devel
204 Summary: Development package for building kernel modules to match the kernel.
205 Group: System Environment/Kernel
206 AutoReqProv: no
207 Provides: kernel-devel-%{_target_cpu} = %{rpmversion}-%{release}
208 Provides: kernel-smp-devel = %{rpmversion}-%{release}
209 Provides: kernel-smp-devel-%{_target_cpu} = %{rpmversion}-%{release}
210 Prereq: /usr/bin/find
211
212 %description devel
213 This package provides kernel headers and makefiles sufficient to build modules
214 against the kernel package.
215
216
217 %package doc
218 Summary: Various documentation bits found in the kernel source.
219 Group: Documentation
220
221 %description doc
222 This package contains documentation files from the kernel
223 source. Various bits of information about the Linux kernel and the
224 device drivers shipped with it are documented in these files.
225
226 You'll want to install this package if you need a reference to the
227 options that can be passed to Linux kernel modules at load time.
228
229 %package xenU
230 Summary: The Linux kernel compiled for unprivileged Xen guest VMs
231
232 Group: System Environment/Kernel
233 Provides: kernel = %{version}
234 Provides: kernel-%{_target_cpu} = %{rpmversion}-%{release}xenU
235 Prereq: %{kernel_prereq}
236 Conflicts: %{kernel_dot_org_conflicts}
237 Conflicts: %{package_conflicts}
238 Conflicts: %{nptl_conflicts}
239
240 # MEF commented out 
241 # Conflicts: %{xen_conflicts}
242
243 # We can't let RPM do the dependencies automatic because it'll then pick up
244 # a correct but undesirable perl dependency from the module headers which
245 # isn't required for the kernel proper to function
246 AutoReqProv: no
247
248 %description xenU
249 This package includes a version of the Linux kernel which
250 runs in Xen unprivileged guest VMs.  This should be installed
251 both inside the unprivileged guest (for the modules) and in
252 the guest0 domain.
253
254 %package xenU-devel
255 Summary: Development package for building kernel modules to match the kernel.
256 Group: System Environment/Kernel
257 AutoReqProv: no
258 Provides: kernel-xenU-devel-%{_target_cpu} = %{rpmversion}-%{release}
259 Provides: kernel-devel-%{_target_cpu} = %{rpmversion}-%{release}xenU
260 Provides: kernel-devel = %{rpmversion}-%{release}xenU
261 Prereq: /usr/sbin/hardlink, /usr/bin/find
262
263 %description xenU-devel
264 This package provides kernel headers and makefiles sufficient to build modules
265 against the kernel package.
266
267 %package uml
268 Summary: The Linux kernel compiled for use in user mode (User Mode Linux).
269
270 Group: System Environment/Kernel
271
272 %description uml
273 This package includes a user mode version of the Linux kernel.
274
275 %package uml-devel
276 Summary: Development package for building kernel modules to match the UML kernel.
277 Group: System Environment/Kernel
278 Provides: kernel-uml-devel-%{_target_cpu} = %{rpmversion}-%{release}
279 Provides: kernel-devel-%{_target_cpu} = %{rpmversion}-%{release}smp
280 Provides: kernel-devel = %{rpmversion}-%{release}smp
281 AutoReqProv: no
282 Prereq: /usr/sbin/hardlink, /usr/bin/find
283
284 %description uml-devel
285 This package provides kernel headers and makefiles sufficient to build modules
286 against the User Mode Linux kernel package.
287
288 %package uml-modules
289 Summary: The Linux kernel modules compiled for use in user mode (User Mode Linux).
290
291 Group: System Environment/Kernel
292
293 %description uml-modules
294 This package includes a user mode version of the Linux kernel modules.
295
296 %package vserver
297 Summary: A placeholder RPM that provides kernel and kernel-drm
298
299 Group: System Environment/Kernel
300 Provides: kernel = %{version}
301 Provides: kernel-drm = 4.3.0
302 Provides: kernel-%{_target_cpu} = %{rpmversion}-%{release}
303
304 %description vserver
305 VServers do not require and cannot use kernels, but some RPMs have
306 implicit or explicit dependencies on the "kernel" package
307 (e.g. tcpdump). This package installs no files but provides the
308 necessary dependencies to make rpm and yum happy.
309
310
311 %prep
312 # First we unpack the kernel tarball.
313 # If this isn't the first make prep, we use links to the existing clean tarball
314 # which speeds things up quite a bit.
315 if [ ! -d kernel-%{kversion}/vanilla ]; then
316   # Ok, first time we do a make prep.
317   rm -f pax_global_header
318 %setup -q -n %{name}-%{kversion} -c
319   mv linux-%{kversion} vanilla
320 else
321   # We already have a vanilla dir.
322   cd kernel-%{kversion}
323 fi
324
325 KERNEL_PREVIOUS=vanilla
326 # Dark RPM-magic to apply each patch to a hardlinked copy of the tree.
327 %define ApplyPatch() \
328   rm -fr linux-%{kversion}-%1                           \
329   cp -al $KERNEL_PREVIOUS linux-%{kversion}-%1          \
330   patchflag=-p1                                         \
331   test "%2" != "%%2" && patchflag="%2"                  \
332   PATCH="%{expand:%{PATCH%1}}"                          \
333   if test ! -e "$PATCH"; then                           \
334     echo "Patch %1 does not exist!"                     \
335     exit 1                                              \
336   fi                                                    \
337   case "$PATCH" in                                      \
338     *.bz2)  bzcat "$PATCH";;                            \
339     *.gz)   zcat "$PATCH";;                             \
340     *)      cat "$PATCH";;                              \
341   esac | patch -F1 -s -d linux-%{kversion}-%1 $patchflag \
342   KERNEL_PREVIOUS=linux-%{kversion}-%1
343
344 # This is where the patches get applied
345 %if 0%{?patchlevel}
346 %ApplyPatch 0
347 %endif
348
349 %ApplyPatch 10
350 %ApplyPatch 20
351
352 # NetNS patch for VINI
353 %if 0%{?with_netns}
354 %ApplyPatch 30
355 %endif
356 %ApplyPatch 40
357
358 %ApplyPatch 100
359
360 %ApplyPatch 200
361 %ApplyPatch 210
362 %ApplyPatch 220
363
364 %ApplyPatch 250
365
366 %ApplyPatch 500
367 %ApplyPatch 510
368
369 # VNET+ series
370 %ApplyPatch 521
371 %ApplyPatch 522
372 %ApplyPatch 523
373 %ApplyPatch 524
374 %ApplyPatch 525
375 %ApplyPatch 526
376
377 %ApplyPatch 530
378 %ApplyPatch 540
379 %ApplyPatch 550
380 %ApplyPatch 560
381 %ApplyPatch 570
382 %ApplyPatch 580
383 %ApplyPatch 590
384 %ApplyPatch 620
385 %ApplyPatch 630
386 %ApplyPatch 640
387 %ApplyPatch 650
388
389 # NetNS conflict-resolving patch for VINI. Will work with patch vini_pl_patch-1 but may
390 # break with later patches.
391
392 %if 0%{?with_netns}
393 %ApplyPatch %vini_pl_patch
394 %endif
395
396 %if %{build_iwlwifi}
397 # Run the mac80211 stuff in the kernel tree holding the last patch
398 tar -xzf %{PATCH600}
399 pushd mac80211-%{mac80211_version}
400 mac80211_makeflags="KSRC=../$KERNEL_PREVIOUS"
401 make $mac80211_makeflags modified
402 make $mac80211_makeflags source
403 make $mac80211_makeflags patch_kernel
404 popd
405
406 # Untar iwlwifi in the same place - needs to be compiled later
407 tar -xzf %{PATCH601}
408 # the install target is broken: first it does not pass the right -b flag to depmod
409 # second we do not need to invoke depmod at this stage anyway
410 # let's add our own patch/stuff in this Makefile for manual install later on
411 pushd iwlwifi-%{iwlwifi_version}
412 cat >> Makefile <<EOF
413 module-list:
414         @echo \$(addprefix \$(DIR),\$(addsuffix .ko,\$(list-m)))
415 EOF
416 popd
417 %endif
418
419 rm -fr linux-%{kversion}
420 ln -sf $KERNEL_PREVIOUS linux-%{kversion}
421 cd linux-%{kversion}
422
423
424 # make sure the kernel has the sublevel we know it has. This looks weird
425 # but for -pre and -rc versions we need it since we only want to use
426 # the higher version when the final kernel is released.
427 perl -p -i -e "s/^SUBLEVEL.*/SUBLEVEL = %{sublevel}/" Makefile
428 perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -prep/" Makefile
429
430 # get rid of unwanted files resulting from patch fuzz
431 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
432
433
434 ###
435 ### build
436 ###
437 %build
438
439 BuildKernel() {
440     MakeTarget=$1
441     Arch=$2
442     Flavour=$3
443
444     rm -rf linux-%{_target_cpu}-%{kversion}$Flavour
445     cp -rl linux-%{kversion}/ linux-%{_target_cpu}-%{kversion}$Flavour
446     cd linux-%{_target_cpu}-%{kversion}$Flavour
447
448     # Pick the right config file for the kernel we're building
449     if [ -n "$Flavour" ] ; then
450       Config=%{pldistro}-%{kversion}-%{_target_cpu}-$Flavour.config
451       DevelDir=/usr/src/kernels/%{KVERREL}-$Flavour-%{_target_cpu}
452       DevelLink=/usr/src/kernels/%{KVERREL}$Flavour-%{_target_cpu}
453     else
454       Config=%{pldistro}-%{kversion}-%{_target_cpu}.config
455       DevelDir=/usr/src/kernels/%{KVERREL}-%{_target_cpu}
456       DevelLink=
457     fi
458
459     KernelVer=%{version}-%{release}$Flavour
460     echo BUILDING A KERNEL FOR $Flavour %{_target_cpu}...
461
462     # make sure EXTRAVERSION says what we want it to say
463     perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = %{?patchlevel:.%{patchlevel}}-%{release}$Flavour/" Makefile
464
465     # and now to start the build process
466
467     make -s mrproper
468     cp %{_sourcedir}/$Config .config
469
470     #Arch=`head -1 .config | cut -b 3-`
471     echo USING ARCH=$Arch
472
473     make -s ARCH=$Arch nonint_oldconfig > /dev/null
474     make -s ARCH=$Arch %{?_smp_mflags} $MakeTarget
475     make -s ARCH=$Arch %{?_smp_mflags} modules || exit 1
476
477 %if %{build_iwlwifi}
478     # build the iwlwifi driver
479     make -C %{_builddir}/kernel-%{kversion}/iwlwifi-%{iwlwifi_version} ARCH=$Arch \
480       KSRC=%{_builddir}/kernel-%{kversion}/linux-%{_target_cpu}-%{kversion}$Flavour
481 %endif
482
483     # Start installing the results
484
485 %if "%{_enable_debug_packages}" == "1"
486     mkdir -p $RPM_BUILD_ROOT/usr/lib/debug/boot
487 %endif
488     mkdir -p $RPM_BUILD_ROOT/%{image_install_path}
489     install -m 644 .config $RPM_BUILD_ROOT/boot/config-$KernelVer
490     install -m 644 System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer
491     if [ -f arch/$Arch/boot/bzImage ]; then
492       cp arch/$Arch/boot/bzImage $RPM_BUILD_ROOT/%{image_install_path}/vmlinuz-$KernelVer
493     fi
494     if [ -f arch/$Arch/boot/zImage.stub ]; then
495       cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/%{image_install_path}/zImage.stub-$KernelVer || :
496     fi
497     if [ "$Flavour" = "uml" ] ; then
498         install -D -m 755 linux $RPM_BUILD_ROOT/%{_bindir}/linux
499     fi
500
501     mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer
502     make -s ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT modules_install KERNELRELEASE=$KernelVer
503
504 %if %{build_iwlwifi}
505     # install iwlwifi
506 #    make -C %{_builddir}/kernel-%{kversion}/iwlwifi-%{iwlwifi_version} ARCH=$Arch \
507 #         KSRC=%{_builddir}/kernel-%{kversion}/linux-%{_target_cpu}-%{kversion}$Flavour \
508 #        KMISC=$RPM_BUILD_ROOT/lib/modules/$KernelVer/kernel/drivers/net/wireless install
509     pushd %{_builddir}/kernel-%{kversion}/iwlwifi-%{iwlwifi_version}
510     iwlwifi_dest=$RPM_BUILD_ROOT/lib/modules/$KernelVer/kernel/drivers/net/wireless
511     # get the list and location of modules to install - no need to pass KSRC nor anything, let's keep it simple
512     iwlwifi_modules=$(make --no-print-directory module-list)
513     install -d $iwlwifi_dest
514     install -m 644 -c $iwlwifi_modules $iwlwifi_dest
515     popd
516 %endif
517
518     # And save the headers/makefiles etc for building modules against
519     #
520     # This all looks scary, but the end result is supposed to be:
521     # * all arch relevant include/ files
522     # * all Makefile/Kconfig files
523     # * all script/ files
524
525     rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
526     rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/source
527     mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
528     (cd $RPM_BUILD_ROOT/lib/modules/$KernelVer ; ln -s build source)
529     # dirs for additional modules per module-init-tools, kbuild/modules.txt
530     mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/extra
531     mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/updates
532     # first copy everything
533     cp --parents `find  -type f -name "Makefile*" -o -name "Kconfig*"` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build 
534         cp Module.symvers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
535     if [ "$Flavour" = "uml" ] ; then
536       cp --parents -a `find arch/um -name include` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
537     fi
538     # then drop all but the needed Makefiles/Kconfig files
539     rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Documentation
540     rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts
541     rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
542     cp arch/%{_arch}/kernel/asm-offsets.s $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch}/kernel || :
543     cp .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
544     cp -a scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
545     if [ -d arch/%{_arch}/scripts ]; then
546       cp -a arch/%{_arch}/scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch} || :
547     fi
548     if [ -f arch/%{_arch}/*lds ]; then
549       cp -a arch/%{_arch}/*lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/%{_arch}/ || :
550     fi
551     rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/*.o
552     rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/*/*.o
553     mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
554     cd include
555     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
556     cp -a `readlink asm` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
557     if [ "$Arch" = "x86_64" ]; then
558       cp -a asm-i386 $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
559     fi
560 %if %{buildxen}
561     if [ "$Flavour" = "xenU" ]; then
562       cp -a xen $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
563       cp -a asm-i386 $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
564     fi
565 %endif
566 %if %{builduml}
567     if [ "$Flavour" = "uml" ] ; then
568       cp -a `readlink -f asm/arch` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
569     fi
570 %endif
571     # While arch/powerpc/include/asm is still a symlink to the old
572     # include/asm-ppc{64,} directory, include that in kernel-devel too.
573     if [ "$Arch" = "powerpc" -a -r ../arch/powerpc/include/asm ]; then
574       cp -a `readlink ../arch/powerpc/include/asm` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
575       mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/$Arch/include
576       pushd $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/$Arch/include
577       ln -sf ../../../include/asm-ppc* asm
578       popd
579     fi
580
581     # Make sure the Makefile and version.h have a matching timestamp so that
582     # external modules can be built
583     touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Makefile $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/linux/version.h
584     touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/.config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/linux/autoconf.h
585     cd ..
586
587     #
588     # save the vmlinux file for kernel debugging into the kernel-debuginfo rpm
589     #
590 %if "%{_enable_debug_packages}" == "1"
591     mkdir -p $RPM_BUILD_ROOT/usr/lib/debug/lib/modules/$KernelVer
592     cp vmlinux $RPM_BUILD_ROOT/usr/lib/debug/lib/modules/$KernelVer
593 %endif
594 %if %{buildxen}
595     if [ -f vmlinuz ]; then
596       cp vmlinuz $RPM_BUILD_ROOT/%{image_install_path}/vmlinuz-$KernelVer
597     fi
598 %endif
599
600     find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name "*.ko" -type f >modnames
601
602     # mark modules executable so that strip-to-file can strip them
603     cat modnames | xargs chmod u+x
604
605     # remove files that will be auto generated by depmod at rpm -i time
606     rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.*
607
608     # Move the devel headers out of the root file system
609     mkdir -p $RPM_BUILD_ROOT/usr/src/kernels
610     mv $RPM_BUILD_ROOT/lib/modules/$KernelVer/build $RPM_BUILD_ROOT/$DevelDir
611     ln -sf ../../..$DevelDir $RPM_BUILD_ROOT/lib/modules/$KernelVer/build
612     [ -z "$DevelLink" ] || ln -sf `basename $DevelDir` $RPM_BUILD_ROOT/$DevelLink
613 }
614
615 ###
616 # DO it...
617 ###
618
619 # prepare directories
620 rm -rf $RPM_BUILD_ROOT
621 mkdir -p $RPM_BUILD_ROOT/boot
622
623 %if "%{_target_cpu}" == "x86_64"
624 %define kernel_arch %{_target_cpu}
625 %endif
626 %if "%{_target_cpu}" == "i586"
627 %define kernel_arch i386
628 %endif
629 %if "%{_target_cpu}" == "i686"
630 %define kernel_arch i386
631 %endif
632
633 %if %{buildup}
634 BuildKernel %make_target %kernel_arch
635 %endif
636
637 %ifarch i686
638 %if %{builduml}
639 BuildKernel linux um uml
640 %endif
641
642 %if %{buildxen}
643 BuildKernel vmlinuz %kernel_arch xenU
644 %endif
645 %endif
646
647 ###
648 ### install
649 ###
650
651 %install
652
653 cd vanilla
654
655 %if %{buildxen} && "%{_target_cpu}" == "i686"
656 mkdir -p $RPM_BUILD_ROOT/etc/ld.so.conf.d
657 rm -f $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernelcap-%{KVERREL}.conf
658 cat > $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernelcap-%{KVERREL}.conf <<\EOF
659 # This directive teaches ldconfig to search in nosegneg subdirectories
660 # and cache the DSOs there with extra bit 0 set in their hwcap match
661 # fields.  In Xen guest kernels, the vDSO tells the dynamic linker to
662 # search in nosegneg subdirectories and to match this extra hwcap bit
663 # in the ld.so.cache file.
664 hwcap 0 nosegneg
665 EOF
666 chmod 444 $RPM_BUILD_ROOT/etc/ld.so.conf.d/kernelcap-%{KVERREL}.conf
667 %endif
668
669 %if %{builddoc}
670 mkdir -p $RPM_BUILD_ROOT/usr/share/doc/kernel-doc-%{kversion}/Documentation
671
672 # sometimes non-world-readable files sneak into the kernel source tree
673 chmod -R a+r *
674 # copy the source over
675 tar cf - Documentation | tar xf - -C $RPM_BUILD_ROOT/usr/share/doc/kernel-doc-%{kversion}
676 %endif
677
678 ###
679 ### clean
680 ###
681
682 %clean
683 rm -rf $RPM_BUILD_ROOT
684
685 ###
686 ### scripts
687 ###
688
689 # load the loop module for upgrades...in case the old modules get removed we have
690 # loopback in the kernel so that mkinitrd will work.
691 %pre
692 /sbin/modprobe loop 2> /dev/null > /dev/null  || :
693 exit 0
694
695 %post
696 if [ -f /etc/sysconfig/kernel ]; then
697   /bin/sed -i -e 's/^DEFAULTKERNEL=kernel-smp$/DEFAULTKERNEL=kernel/' /etc/sysconfig/kernel
698 fi
699
700 # trick mkinitrd in case the current environment does not have device mapper
701 rootdev=$(awk '/^[ \t]*[^#]/ { if ($2 == "/") { print $1; }}' /etc/fstab)
702 if echo $rootdev |grep -q /dev/mapper 2>/dev/null ; then
703     if [ ! -f $rootdev ]; then
704         fake_root_lvm=1
705         mkdir -p $(dirname $rootdev)
706         touch $rootdev
707     fi
708 fi
709
710 [ ! -x /usr/sbin/module_upgrade ] || /usr/sbin/module_upgrade %{rpmversion}-%{release}
711 #/sbin/new-kernel-pkg --package kernel --mkinitrd --depmod --install %{KVERREL}
712 # Older modutils do not support --package option
713 /sbin/new-kernel-pkg --mkinitrd --depmod --install %{KVERREL}
714
715 # remove fake handle
716 if [ -n "$fake_root_lvm" ]; then
717     rm -f $rootdev
718 fi
719
720 # make some useful links
721 pushd /boot > /dev/null ; {
722         ln -sf config-%{KVERREL} config
723         ln -sf config-%{KVERREL} configsmp
724         ln -sf initrd-%{KVERREL}.img initrd-boot
725         ln -sf initrd-%{KVERREL}.img initrd-bootsmp
726         ln -sf vmlinuz-%{KVERREL} kernel-boot
727         ln -sf vmlinuz-%{KVERREL} kernel-bootsmp
728 }
729 popd > /dev/null
730
731 # ask for a reboot
732 mkdir -p /etc/planetlab
733 touch /etc/planetlab/update-reboot
734
735 %post devel
736 [ -f /etc/sysconfig/kernel ] && . /etc/sysconfig/kernel
737 if [ "$HARDLINK" != "no" -a -x /usr/sbin/hardlink ] ; then
738   pushd /usr/src/kernels/%{KVERREL}-%{_target_cpu} > /dev/null
739   /usr/bin/find . -type f | while read f; do hardlink -c /usr/src/kernels/*FC*/$f $f ; done
740   popd > /dev/null
741 fi
742
743 %post xenU
744 [ ! -x /usr/sbin/module_upgrade ] || /usr/sbin/module_upgrade
745 [ ! -x /sbin/ldconfig ] || /sbin/ldconfig -X
746
747 %post xenU-devel
748 [ -f /etc/sysconfig/kernel ] && . /etc/sysconfig/kernel
749 if [ "$HARDLINK" != "no" -a -x /usr/sbin/hardlink ] ; then
750   pushd /usr/src/kernels/%{KVERREL}-xenU-%{_target_cpu} > /dev/null
751   /usr/bin/find . -type f | while read f; do hardlink -c /usr/src/kernels/*FC*/$f $f ; done
752   popd > /dev/null
753 fi
754
755 %post uml-modules
756 depmod -ae %{KVERREL}uml
757
758 %preun
759 /sbin/modprobe loop 2> /dev/null > /dev/null  || :
760 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{KVERREL}
761
762 %preun xenU
763 /sbin/modprobe loop 2> /dev/null > /dev/null  || :
764 /sbin/new-kernel-pkg --rmmoddep --remove %{KVERREL}xenU
765
766 %preun uml-modules
767 rm -f /lib/modules/%{KVERREL}uml/modules.*
768
769
770 ###
771 ### file lists
772 ###
773
774 %if %{buildup}
775 %files 
776 %defattr(-,root,root)
777 /%{image_install_path}/vmlinuz-%{KVERREL}
778 /boot/System.map-%{KVERREL}
779 /boot/config-%{KVERREL}
780 %dir /lib/modules/%{KVERREL}
781 /lib/modules/%{KVERREL}/kernel
782 /lib/modules/%{KVERREL}/build
783 /lib/modules/%{KVERREL}/source
784 /lib/modules/%{KVERREL}/extra
785 /lib/modules/%{KVERREL}/updates
786
787 %files devel
788 %defattr(-,root,root)
789 %verify(not mtime) /usr/src/kernels/%{KVERREL}-%{_target_cpu}
790 %endif
791
792 %if %{builduml} && "%{_target_cpu}" == "i686"
793 %files uml
794 %defattr(-,root,root)
795 %{_bindir}/linux
796
797 %files uml-devel
798 %defattr(-,root,root)
799 %verify(not mtime) /usr/src/kernels/%{KVERREL}-uml-%{_target_cpu}
800 /usr/src/kernels/%{KVERREL}uml-%{_target_cpu}
801
802 %files uml-modules
803 %defattr(-,root,root)
804 /boot/System.map-%{KVERREL}uml
805 /boot/config-%{KVERREL}uml
806 %dir /lib/modules/%{KVERREL}uml
807 /lib/modules/%{KVERREL}uml/kernel
808 /lib/modules/%{KVERREL}uml/build
809 /lib/modules/%{KVERREL}uml/source
810 /lib/modules/%{KVERREL}uml/extra
811 /lib/modules/%{KVERREL}uml/updates
812 %endif
813
814 %if %{buildxen} && "%{_target_cpu}" == "i686"
815 %files xenU
816 %defattr(-,root,root)
817 /%{image_install_path}/vmlinuz-%{KVERREL}xenU
818 /boot/System.map-%{KVERREL}xenU
819 /boot/config-%{KVERREL}xenU
820 %dir /lib/modules/%{KVERREL}xenU
821 /lib/modules/%{KVERREL}xenU/kernel
822 /lib/modules/%{KVERREL}xenU/build
823 /lib/modules/%{KVERREL}xenU/source
824 /lib/modules/%{KVERREL}xenU/extra
825 /lib/modules/%{KVERREL}xenU/updates
826 /etc/ld.so.conf.d/kernelcap-%{KVERREL}.conf
827
828 %files xenU-devel
829 %defattr(-,root,root)
830 %verify(not mtime) /usr/src/kernels/%{KVERREL}-xenU-%{_target_cpu}
831 /usr/src/kernels/%{KVERREL}xenU-%{_target_cpu}
832 %endif
833
834 %files vserver
835 %defattr(-,root,root)
836 # no files
837
838 # only some architecture builds need kernel-doc
839
840 %if %{builddoc}
841 %files doc
842 %defattr(-,root,root)
843 %{_datadir}/doc/kernel-doc-%{kversion}/Documentation/*
844 %dir %{_datadir}/doc/kernel-doc-%{kversion}/Documentation
845 %dir %{_datadir}/doc/kernel-doc-%{kversion}
846 %endif
847
848 %changelog
849 * Mon Jul 21 2008 Sapan Bhatia <sapanb@cs.princeton.edu> - linux-2.6-22-13
850 - fix for tcpdump/tcp payloads
851
852 * Tue Jul 15 2008 Sapan Bhatia <sapanb@cs.princeton.edu> - linux-2.6-22-12
853 - * Bugfix in tuntap
854 - * Attempt to fix TCP-payload-related problems with tcpdump
855
856 * Wed Jul 09 2008 Sapan Bhatia <sapanb@cs.princeton.edu> - linux-2.6-22-11
857 - * Split up VNET+ module into its component patches
858 - * Added tun/tap support
859
860 * Tue Jul 08 2008 Daniel Hokka Zakrisson <daniel@hozac.com> - linux-2.6-22-10
861 - Filling a statically allocated buffer cannot fail, right?
862
863 * Wed Jun 25 2008 Daniel Hokka Zakrisson <daniel@hozac.com> - linux-2.6-22-9
864 - Enable the hangcheck timer driver, and build it in to the kernel.
865 - Dump relevant data on the scheduler bug instead of BUGing.
866
867 * Sat Jun 07 2008 Sapan Bhatia <sapanb@cs.princeton.edu> - linux-2.6-22-8
868 - * Partial fix for the UDP-packet-pollution problem
869 - * Support for PF_PACKET sockets
870 - * Support for SOCK_PACKET sockets
871 - * Disabled Chopstix with mutexes
872 - * Tested VNET+ under heavy loads
873
874
875
876 * Fri May 16 2008 Stephen Soltesz <soltesz@cs.princeton.edu> - linux-2.6-22-7
877 - Bringing this fix in for tcpdump and  ping
878
879
880 * Fri May 09 2008 Stephen Soltesz <soltesz@cs.princeton.edu> - linux-2.6-22-6
881 - Updated configuration to include COW again.
882
883 - Patches from Sapan to fix ping losses.
884
885 - Still need help with tcpdump traffic.
886
887
888 * Tue May 06 2008 Daniel Hokka Zakrisson <daniel@hozac.com> - linux-2.6-22-5
889 - Patch needs to be applied.
890
891 * Mon May 05 2008 Stephen Soltesz <soltesz@cs.princeton.edu> - linux-2.6-22-4
892
893
894 * Thu Apr 24 2008 Thierry Parmentelat <thierry.parmentelat@sophia.inria.fr> - linux-2.6-22-3
895 - Fix bug with looping in schedule()
896
897 * Wed Apr 23 2008 Stephen Soltesz <soltesz@cs.princeton.edu> - linux-2.6-22-2
898 - Includes changes from Sapan/Andy regarding the scheduler and vnet bugs.
899 - Should be safe to try a second deployment.
900
901
902 * Tue Jul 11 2006 Dave Jones <davej@redhat.com> [2.6.17-1.2142_FC4]
903 - 2.6.17.4
904 - Disable split pagetable lock.
905
906 * Wed Jul  5 2006 Dave Jones <davej@redhat.com>
907 - Get rid of stack backtrace on panic, which in most
908   cases actually caused a loss of info instead of a gain.
909
910 * Fri Jun 30 2006 Dave Jones <davej@redhat.com> [2.6.17-1.2141_FC4]
911 - 2.6.17.3
912
913 * Fri Jun 30 2006 Dave Jones <davej@redhat.com> [2.6.17-1.2140_FC4]
914 - 2.6.17.2
915 - Fix up the alsa list_add bug.
916
917 * Mon Jun 26 2006 Dave Jones <davej@redhat.com>
918 - Fix up various stupidities incurred by the last big rebase.
919   - Reenable SMP x86-64 builds.
920   - Reenable SMBFS.
921 - Enable PCI fake hotplug driver.
922 - Enable gameport/joystick on i586 builds. (#196581)
923
924 * Sat Jun 24 2006 Dave Jones <davej@redhat.com>
925 - Enable profiling for 586 kernels.
926
927 * Fri Jun 23 2006 Dave Jones <davej@redhat.com> [2.6.17-1.2139_FC4]
928 - Rebuild with slab debug off.
929
930 * Tue Jun 20 2006 Dave Jones <davej@redhat.com> [2.6.17-1.2138_FC4]
931 - 2.6.17.1
932
933 * Mon Jun  5 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2115_FC4]
934 - 2.6.16.20
935
936 * Tue May 30 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2114_FC4]
937 - 2.6.16.19
938
939 * Mon May 29 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2113_FC4]
940 - Improved list_head debugging.
941
942 * Tue May 23 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2112_FC4]
943 - 2.6.16.18
944
945 * Sat May 20 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2111_FC4]
946 - 2.6.16.17
947
948 * Wed May 10 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2110_FC4]
949 - 2.6.16.16
950
951 * Tue May  9 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2109_FC4]
952 - 2.6.16.15
953 - make 16C950 UARTs work (again). (#126403)
954 - Fix exec-shield default, which should fix a few programs that
955   stopped running.
956
957 * Thu May  4 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2108_FC4]
958 - 2.6.16.14
959
960 * Tue May  2 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2107_FC4]
961 - 2.6.16.13
962
963 * Mon May  1 2006 Dave Jones <davej@redhat.com>
964 - 2.6.16.12
965
966 * Tue Apr 25 2006 Dave Jones <davej@redhat.com>
967 - Fix up SCSI errors with mymusix usb mp3 player (#186187)
968
969 * Mon Apr 24 2006 Dave Jones <davej@redhat.com>
970 - 2.6.16.11
971
972 * Wed Apr 19 2006 Dave Jones <davej@redhat.com>
973 - Enable PCI MSI support.
974
975 * Tue Apr 18 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2096_FC4]
976 - 2.6.16.9
977
978 * Tue Apr 18 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2093_FC4]
979 - 2.6.16.7
980
981 * Mon Apr 17 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2092_FC4]
982 - 2.6.16.6
983
984 * Sun Apr 16 2006 Dave Jones <davej@redhat.com>
985 - 2.6.16.5
986
987 * Fri Apr  7 2006 Dave Jones <davej@redhat.com>
988 - 2.6.16.2
989
990 * Tue Apr  4 2006 Dave Jones <davej@redhat.com>
991 - Reenable non-standard serial ports. (#187466)
992 - Reenable snd-es18xx for x86-32 (#187733)
993
994 * Thu Mar 30 2006 Dave Jones <davej@redhat.com>
995 - ship the .kernelrelease file in -devel too.
996 - Disable EDAC debug.
997
998 * Tue Mar 26 2006 Dave Jones <davej@redhat.com> [2.6.16-1.2069_FC4]
999 - 2.6.16.1
1000
1001 * Mon Mar 25 2006 Dave Jones <davej@redhat.com>
1002 - Include patches posted for review for inclusion in 2.6.16.1
1003 - Updated new audit msg types.
1004 - Reenable HDLC driver (#186257)
1005 - Make acpi-cpufreq 'sticky'
1006 - Fix broken x86-64 32bit vDSO (#186924)
1007
1008 * Tue Mar 21 2006 Dave Jones <davej@redhat.com>
1009 - Improve spinlock scalability on big machines.
1010
1011 * Mon Mar 20 2006 Dave Jones <davej@redhat.com>
1012 - Sync with FC5's 2.6.16 kernel.
1013 - Update Tux & Exec-shield to latest.
1014