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