1 # vim:expandtab:shiftwidth=4:softtabstop=4:tabstop=4:
3 # increment this if you have made a change that should force a new kernel
4 # to build built for all releases of this distribution (only -- if you want
5 # to force a kernel build on all distributions, update the BUILD_GEN variable
8 #BUILD_GEN+=".1" # refactor both rhel5 and rhel6
9 BUILD_GEN+=".0" # TT-107: don't cache the BUILD dir (reset major to 5)
11 DEVEL_KERNEL_TYPE="devel"
12 RPM_HELPERS_DIR="/usr/lib/rpm/redhat"
14 # a method which can be overriden by the release specific code
21 # patching common to all releases
24 sed -i -e 's/^\(%define signmodules \).*/\10/' \
25 -e '/find $RPM_BUILD_ROOT\/lib\/modules\/$KernelVer/a\
26 cp -a fs/ext3/* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/fs/ext3 \
27 cp -a fs/ext4/* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/fs/ext4' \
28 SPECS/$SPEC_NAME 2>&1 || \
29 fatal 1 "Error while editing SPECS/$SPEC_NAME"
31 # XXX - a building-on-Ubuntu hack
32 if grep -q "Ubuntu" /etc/issue; then
33 sed -i -e 's/^\(BuildPreReq: .*\)$/#NOU \1/g' \
34 -e 's/^\(BuildRequires: .*\)$/#NOU \1/g' \
35 -e 's/sha512hmac/md5sum/g' \
36 SPECS/$SPEC_NAME 2>&1 || \
37 fatal 1 "Error while editing SPECS/$SPEC_NAME"
43 prepare_and_build_srpm() {
45 pushd $TOPDIR >/dev/null
48 local buildid="_lustre${EXTRA_VERSION##*_lustre}"
50 # edit the SPEC with our changes
55 # this concept of being able to build a list of targets with a single
56 # lbuild is a fine idea, but in reality I think it's (very) broken. I
57 # don't even think the lustre.spec can handle being called with "--target
58 # <multiple arches>". It certainly can't handle the issue where each
59 # arch has it's own kernel location.
60 # but we will do the best we can and put the plumbing in place so that
61 # this could work when the other broken bits are fixed.
62 # in reality, our current use of lbuild only ever has a single arch in
66 for arch in $BUILD_ARCHS; do
67 # XXX - ok. so here's a hack that needs to be fixed properly
68 # ppc64 was merged to ppc some time ago pre 2.6.18
69 if [ $arch = ppc64 ]; then
72 targets="--target $arch $targets"
73 # copy our .config into the RPM build tree
74 (echo "# $(basearch $arch)"; cat $CONFIG_FILE) > \
75 SOURCES/kernel-$lnxmaj-$arch.config
77 # XXX - hackity hack -- until we get (or generate from the base
78 # config) configs for xen and debug
80 for f in SOURCES/kernel-${lnxmaj}-*.config; do
81 grep -q "^CONFIG_SD_IOSTATS=y" $f || \
82 echo "CONFIG_SD_IOSTATS=y" >> $f
86 # do we need any special rpm build options
87 local rpmbuildopt="-bb"
92 # stupid Ubuntu's rpm doesn't do debuginfo properly
93 if [ ! -f /usr/lib/rpm/debugedit ]; then
94 rpmbuildopt="$rpmbuildopt --without debuginfo"
97 # XXX - need to figure this kabichk crap out -- it fails the build
99 rpmbuildopt="$rpmbuildopt --without kabichk"
102 # get any release specific build options
103 rpmbuildopt="$rpmbuildopt $(get_rpmbuildopts)"
106 if ! eval $RPMBUILD $rpmbuildopt $targets --with baseonly \
107 --define \"_topdir $TOPDIR\" \
108 --define \"buildid $buildid\" \
109 --define \"_tmppath $TMPDIR\" \
110 $TOPDIR/SPECS/$SPEC_NAME 2>&1; then
114 # for informative purposes, display a diff between the .config that
115 # was actually built and what we proposed as a .config
116 echo "Diffs between $(basename $CONFIG_FILE) and the built kernel's .config:"
117 local rpmname="$TOPDIR/RPMS/${BUILD_ARCHS# }/kernel-${lnxmaj}-${lnxrel}${buildid}.${BUILD_ARCHS# }.rpm"
118 rpmcfg=$(rpm -qpl $rpmname | grep '/boot/config-')
119 rpm2cpio $rpmname | cpio -id .$rpmcfg
120 diff -u $CONFIG_FILE .$rpmcfg
127 devel_kernel_name() {
128 local lustre=${1:-false}
131 echo "kernel-lustre-$DEVEL_KERNEL_TYPE"
133 echo "kernel-$DEVEL_KERNEL_TYPE"
138 rpm_BUILD_kernel_dirname() {
139 local rpmsmptype="$1"
145 if $KERNEL_LUSTRE_NAMING; then
148 echo kernel${lustre}${lnxmaj}${lnxmin}/linux-${lnxmaj}.$arch
151 find_linux_devel_paths() {
153 local ARCH=$TARGET_ARCH
155 # If DEVEL_PATH_ARCH is set, use it. Added for fc11 as it needs i586 string for i686.
156 if [ $DEVEL_PATH_ARCH ];then
157 ARCH=$DEVEL_PATH_ARCH
160 LINUX=$path/usr/src/kernels/${lnxmaj}${lnxmin}-${lnxrel}${DEVEL_PATH_ARCH_DELIMETER:-"-"}${ARCH}
161 # RHEL doesn't have the -obj tree
163 # XXX - i don't think we need this any more
164 #LINUXRELEASE=$(find_linux_release "$LINUX")
165 #if [ -z "$LINUXRELEASE" ]; then
166 # echo "Failed to find linux release in $LINUX"
173 unpack_linux_devel_rpm-rhel() {
174 local callers_rpm="$1"
176 # now just sanity check that everything needed to build properly versioned
177 # modules is in place
178 if [ ! -f usr/src/kernels/${lnxmaj}${lnxmin}-${lnxrel}${DEVEL_PATH_ARCH_DELIMETER:-"-"}$TARGET_ARCH/Module.symvers ]; then
179 fatal 1 "cannot build kernel modules: the Kernel's Module.symvers is missing."
186 # this of course requires a sudo rule on the builder for real RHEL:
187 # hudson ALL= NOPASSWD: /usr/bin/yumdownloader
188 # also must disable the requiretty attribute in the sudoers file
189 find_linux_rpm-rhel() {
191 local wanted_kernel="$2"
192 local pathtorpms=${3:-"${KERNELRPMSBASE}/${lnxmaj}/${DISTRO}/${TARGET_ARCH}"}
194 local tmpdir=$(mktemp -d $pathtorpms/yumXXXXXX)
196 if [ "$(lsb_release -s -i)" = "RedHatEnterpriseServer" ]; then
199 $sudo yumdownloader --destdir "$tmpdir" kernel-devel-"$wanted_kernel" > /dev/null
200 local rpm=$(cd $tmpdir; echo *)
201 mv "$tmpdir/$rpm" "$pathtorpms"