Whamcloud - gitweb
Branch b1_8
authoryangsheng <yangsheng>
Fri, 18 Sep 2009 17:07:28 +0000 (17:07 +0000)
committeryangsheng <yangsheng>
Fri, 18 Sep 2009 17:07:28 +0000 (17:07 +0000)
b=20539

i=johann, bobijam

Add support for OEL5.

build/lbuild
build/lbuild-oel5 [new file with mode: 0644]

index d4409dc..d09899a 100755 (executable)
@@ -284,6 +284,9 @@ check_options() {
         2.6-sles11)
             CANONICAL_TARGET="sles11"
             ;;
         2.6-sles11)
             CANONICAL_TARGET="sles11"
             ;;
+        2.6-oel5)
+            CANONICAL_TARGET="oel5"
+            ;;
         hp_pnnl-2.4)
             CANONICAL_TARGET="hp-pnnl-2.4"
             ;;
         hp_pnnl-2.4)
             CANONICAL_TARGET="hp-pnnl-2.4"
             ;;
diff --git a/build/lbuild-oel5 b/build/lbuild-oel5
new file mode 100644 (file)
index 0000000..5156a2e
--- /dev/null
@@ -0,0 +1,192 @@
+# vim:expandtab:shiftwidth=4:softtabstop=4:tabstop=4:
+
+# increment this if you have made a change that should force a new kernel
+# to build built
+#BUILD_GEN=1
+#BUILD_GEN=2   # bz19952: remove -lustre tag from kernel RPM names
+BUILD_GEN=3    # bz19975 enable the building of src.rpms by default
+
+DEVEL_KERNEL_TYPE="devel"
+
+prepare_and_build_srpm() {
+
+    pushd $TOPDIR >/dev/null
+    local GCC_VER=""
+    read GCC_VER < <($CC --version)
+    GCC_VER=${GCC_VER##* }
+    if [[ $GCC_VER = 4.3* ]]; then
+        # add the gcc 4.3 kernel build fix patch to it
+       cat <<"EOF" >> $TOPDIR/SOURCES/linux-${lnxmaj}-lustre.patch
+diff -urp linux-2.6.18.rawops/Makefile linux-2.6.18.races/Makefile
+--- linux-2.6.18.rawops/Makefile       2007-02-08 19:00:31.000000000 +0200
++++ linux-2.6.18.rawops/Makefile       2007-02-14 19:23:49.000000000 +0200
+@@ -506,6 +506,9 @@ KBUILD_CFLAGS += $(call cc-option,-Wdeclaration-after-statement,)
+ # disable pointer signed / unsigned warnings in gcc 4.0
+ CFLAGS += $(call cc-option,-Wno-pointer-sign,)
+
++# workaround to avoid gcc 4.3 emitting libgcc calls (see gcc bug #32044)
++CFLAGS += $(call cc-option,-fno-tree-scev-cprop,)
++
+ # Default kernel image to build when no specific target is given.
+ # KBUILD_IMAGE may be overruled on the command line or
+ # set in the environment
+EOF
+    fi
+
+    # create the buildid
+    local buildid="_lustre${EXTRA_VERSION##*_lustre}"
+
+    # edit the SPEC with our changes
+    sed -i -e 's/^\(%define signmodules \).*/\10/' \
+           -e "s/^#% \(define buildid\).*/%\1 ${buildid}/" \
+           -e '/-e $RPM_SOURCE_DIR\/kabi_whitelist_/i\
+    rm -f $RPM_SOURCE_DIR/kabi_whitelist_%{_target_cpu}$Flavour' \
+           -e '/_sourcedir\/kabitool -b \./a\
+    cp $RPM_BUILD_ROOT/kabi_whitelist $RPM_SOURCE_DIR/kabi_whitelist_%{_target_cpu}$Flavour' \
+           -e '/^# empty final patch file to facilitate testing of kernel patches/i\
+# adds Lustre patches\
+Patch99995: linux-%{kversion}-lustre.patch' \
+           -e '/^# conditionally applied test patch for debugging convenience/i\
+# lustre patch\
+%patch99995 -p1\
+' \
+           -e '/^%prep$/,/^# END OF PATCH APPLICATIONS$/s/kernel-%{kversion}/%{name}-%{kversion}/g' \
+           -e '/find $RPM_BUILD_ROOT\/lib\/modules\/$KernelVer/a\
+    cp -a fs/ext3/* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/fs/ext3 \
+    cp -a fs/ext4/* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/fs/ext4' \
+          SPECS/kernel-2.6.spec
+
+    if $KERNEL_LUSTRE_NAMING; then
+        # these are all of the changes needed because we change the package names
+        # to kernel-lustre-*.  these should all go away when we stop this insanity
+        sed -i -e 's/^\(Name:.*kernel\)/\1-lustre/' \
+               -e '/^Provides: glibc-kernheaders = /a\
+Provides: kernel-headers = %{rpmversion}-%{release}
+Obsoletes: kernel-headers
+' \
+               -e '/^Provides: kernel-%{_target_cpu} = %{rpmversion}-%{release}$/a\
+Provides: kernel = %{rpmversion}-%{release}
+' \
+               -e '/^Provides: kernel-devel-%{_target_cpu} = %{rpmversion}-%{release}$/a\
+Provides: kernel-devel = %{rpmversion}-%{release}
+Obsoletes: kernel-devel
+' \
+               -e '/^Provides: %{name}-debuginfo-common-%{_target_cpu} = %{KVERREL}$/a\
+Provides: kernel-debuginfo-common = %{KVERREL}
+Obsoletes: kernel-debuginfo-common
+' \
+               -e '/^Provides: %{name}-debuginfo-%{_target_cpu} = %{KVERREL}$/a\
+Provides: kernel-debuginfo = %{KVERREL}
+Obsoletes: kernel-debuginfo
+' \
+              SPECS/kernel-2.6.spec
+    fi
+
+    # XXX - a building-on-Ubuntu hack
+    if grep -q "Ubuntu" /etc/issue; then
+        sed  -i -e 's/^\(BuildPreReq: .*\)$/#NOU \1/g' \
+               -e 's/^\(BuildRequires: .*\)$/#NOU \1/g' \
+          SPECS/kernel-2.6.spec
+    fi
+
+    # finally, work around RH bug 491775, if needed
+    if ! grep -q "cp -a asm-x86_64 \$RPM_BUILD_ROOT/lib/modules/\$KernelVer/build/include" \
+              SPECS/kernel-2.6.spec; then
+        # XXX - i wonder if we will need to do this ad-hoc patching enough to
+        #       formalize a patching system.  let's assume not for the time
+        #       being.
+        patch -s -p0 <<"EOF" || fatal 1 "Error while patching SPECS/kernel-2.6.spec"
+--- SPECS/kernel-2.6.spec.dist 2009-03-23 20:30:55.000000000 -0400
++++ SPECS/kernel-2.6.spec      2009-03-23 20:37:03.000000000 -0400
+@@ -6961,6 +6961,10 @@
+     cd include
+     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
+     cp -a `readlink asm` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
++    if [ "$Arch" = "i386" ]; then
++      mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/asm-x86_64
++      cp -a asm-x86_64/{stacktrace,k8,pci-direct}.h $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/asm-x86_64
++    fi
+     if [ "$Arch" = "x86_64" ]; then
+       cp -a asm-i386 $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include
+     fi
+EOF
+    fi
+
+    popd >/dev/null
+
+    # this concept of being able to build a list of targets with a single
+    # lbuild is a fine idea, but in reality I think it's (very) broken.  I
+    # don't even think the lustre.spec can handle being called with "--target
+    # <multiple arches>".  It certainly can't handle the issue where each
+    # arch has it's own kernel location.
+    # but we will do the best we can and put the plumbing in place so that
+    # this could work when the other broken bits are fixed.
+    # in reality, our current use of lbuild only ever has a single arch in
+    # $BUILD_ARCHS
+    local arch
+    local targets=""
+    for arch in $BUILD_ARCHS; do
+        # XXX - ok.  so here's a hack that needs to be fixed properly
+        #       ppc64 was merged to ppc some time ago pre 2.6.18
+        if [ $arch = ppc64 ]; then
+            arch=ppc
+        fi
+        targets="--target $arch $targets"
+        # copy our .config into the RPM build tree
+        (echo "# $(basearch $arch)"; cat $CONFIG_FILE) > \
+            SOURCES/kernel-2.6.18-$arch.config
+
+        # XXX - hackity hack -- until we get (or generate from the base
+        #                       config) configs for xen and debug
+        local f=""
+        for f in SOURCES/kernel-${lnxmaj}-*.config; do
+            grep -q "^CONFIG_SD_IOSTATS=y" $f || \
+                echo "CONFIG_SD_IOSTATS=y" >> $f
+        done
+    done
+
+    # do we need any special rpm build options
+    local rpmbuildopt="-bb"
+    if $DO_SRC; then
+        rpmbuildopt="-ba"
+    fi
+    # stupid Ubuntu's rpm doesn't do debuginfo properly
+    if [ ! -f /usr/lib/rpm/debugedit ]; then
+        rpmbuildopt="$rpmbuildopt --without debuginfo"
+    fi
+
+    # XXX - need to figure this kabichk crap out -- it fails the build
+    rpmbuildopt="$rpmbuildopt --without kabichk"
+
+    # now build it
+    if ! $RPMBUILD $rpmbuildopt $targets --with baseonly \
+                   --define "_topdir $TOPDIR" \
+                   $TOPDIR/SPECS/kernel-2.6.spec >&2; then
+        fatal 1 "Failed to build kernel RPM"
+    fi
+
+}
+
+devel_kernel_name() {
+    local lustre=${1:-false}
+
+    if $lustre; then
+        echo "kernel-lustre-$DEVEL_KERNEL_TYPE"
+    else
+        echo "kernel-$DEVEL_KERNEL_TYPE"
+    fi
+
+}
+
+rpm_BUILD_kernel_dirname() {
+    local rpmsmptype="$1"
+    local lnxmaj="$2"
+    local lnxmin="$3"
+    local arch="$4"
+
+    local lustre=""
+    if $KERNEL_LUSTRE_NAMING; then
+        $lustre="-lustre"
+    fi
+    echo kernel${lustre}${lnxmaj}${lnxmin}/linux-${lnxmaj}.$arch
+}