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)
10 BUILD_GEN+=".2" # LU-9850
12 DEVEL_KERNEL_TYPE="devel"
13 RPM_HELPERS_DIR="/usr/lib/rpm/redhat"
14 # Pkg which contains ext4 source code
15 KERNEL_DEBUGINFO="kernel-debuginfo-common-${TARGET_ARCH}-${lnxmaj}-${lnxrel}.${TARGET_ARCH}.rpm"
17 # a method which can be overriden by the release specific code
24 # patching common to all releases
27 sed -i -e '/Provides: kernel-uname-r =/a\
28 Provides: kernel-lustre = %{KVRA}%{?1:.%{1}}\\' \
29 -e '/Provides: kernel-devel-uname-r =/a\
30 Provides: kernel-devel-lustre = %{KVRA}%{?1:.%{1}}\\' \
31 -e '/find $RPM_BUILD_ROOT\/lib\/modules\/$KernelVer/a\
32 cp -a fs/ext3/* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/fs/ext3 \
33 cp -a fs/ext4/* $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/fs/ext4' \
34 SPECS/$SPEC_NAME 2>&1 || \
35 fatal 1 "Error while editing SPECS/$SPEC_NAME"
37 # XXX - a building-on-Ubuntu hack
38 if grep -q "Ubuntu" /etc/issue; then
39 sed -i -e 's/^\(BuildPreReq: .*\)$/#NOU \1/g' \
40 -e 's/^\(BuildRequires: .*\)$/#NOU \1/g' \
41 -e 's/sha512hmac/md5sum/g' \
42 SPECS/$SPEC_NAME 2>&1 || \
43 fatal 1 "Error while editing SPECS/$SPEC_NAME"
48 prepare_and_build_srpm() {
50 pushd $TOPDIR >/dev/null
52 if $ENABLE_KERNEL_DEBUG; then
53 local buildid="_lustre_debug${EXTRA_VERSION##*_lustre}"
55 local buildid="_lustre${EXTRA_VERSION##*_lustre}"
58 # edit the SPEC with our changes
62 # copy our .config into the RPM build tree
63 if [[ $DISTROMAJ == "rhel7" || $DISTROMAJ == "rhel9" ]];then
64 local cfg_file_name=kernel-$lnxmaj-${TARGET_ARCH}.config
66 local cfg_file_name=kernel-${TARGET_ARCH}.config
68 (echo "# $(basearch ${TARGET_ARCH})"; cat $CONFIG_FILE) > \
69 SOURCES/$cfg_file_name
71 # XXX - hackity hack -- until we get (or generate from the base
72 # config) configs for xen and debug
74 for f in SOURCES/kernel-*.config; do
75 grep -q "^CONFIG_SD_IOSTATS=y" $f || \
76 echo "CONFIG_SD_IOSTATS=y" >> $f
79 # do we need any special rpm build options
80 local rpmbuildopt="-bb"
85 # stupid Ubuntu's rpm doesn't do debuginfo properly
86 if [ ! -f /usr/lib/rpm/debugedit ]; then
87 rpmbuildopt="$rpmbuildopt --without debuginfo"
90 # XXX - need to figure this kabichk crap out -- it fails the build
92 rpmbuildopt="$rpmbuildopt --without kabichk"
95 # get any release specific build options
96 rpmbuildopt="$rpmbuildopt $(get_rpmbuildopts)"
99 if ! eval rpmbuild $rpmbuildopt --target ${TARGET_ARCH} \
100 --define \"_topdir $TOPDIR\" \
101 ${buildid:+--define \"buildid $buildid\"} \
102 --define \"_tmppath $TMPDIR\" \
103 $TOPDIR/SPECS/$SPEC_NAME 2>&1; then
107 # for informative purposes, display a diff between the .config that
108 # was actually built and what we proposed as a .config
109 echo "Diffs between $(basename $CONFIG_FILE) and the built kernel's .config:"
110 local rpmname="$TOPDIR/RPMS/${TARGET_ARCH}/kernel-${lnxmaj}-${lnxrel}${buildid}.${TARGET_ARCH}.rpm"
111 rpmcfg=$(rpm -qpl $rpmname | grep '/boot/config-')
112 rpm2cpio $rpmname | cpio -id .$rpmcfg
113 diff -u $CONFIG_FILE .$rpmcfg
120 devel_kernel_name() {
121 local lustre=${1:-false}
124 echo "kernel-lustre-$DEVEL_KERNEL_TYPE"
126 echo "kernel-$DEVEL_KERNEL_TYPE"
131 rpm_BUILD_kernel_dirname() {
132 local rpmsmptype="$1"
138 if $KERNEL_LUSTRE_NAMING; then
141 echo kernel${lustre}${lnxmaj}${lnxmin}/linux-${lnxmaj}.$arch
144 find_linux_devel_paths() {
146 local ARCH=$TARGET_ARCH
148 # If DEVEL_PATH_ARCH is set, use it. Added for fc11 as it needs i586 string for i686.
149 if [ $DEVEL_PATH_ARCH ];then
150 ARCH=$DEVEL_PATH_ARCH
153 LINUX=$path/usr/src/kernels/${lnxmaj}${lnxmin}-${lnxrel}${DEVEL_PATH_ARCH_DELIMETER:-"-"}${ARCH}
154 # RHEL doesn't have the -obj tree
160 unpack_linux_devel_rpm-rhel() {
161 local callers_rpm="$1"
163 # now just sanity check that everything needed to build properly versioned
164 # modules is in place
165 if [ ! -f usr/src/kernels/${lnxmaj}${lnxmin}-${lnxrel}${DEVEL_PATH_ARCH_DELIMETER:-"-"}$TARGET_ARCH/Module.symvers ]; then
166 fatal 1 "cannot build kernel modules: the Kernel's Module.symvers is missing."
173 # this of course requires a sudo rule on the builder for real RHEL:
174 # hudson ALL= NOPASSWD: /usr/bin/yumdownloader
175 # also must disable the requiretty attribute in the sudoers file
176 find_linux_rpm-rhel() {
178 local wanted_kernel="$2"
179 local pathtorpms=${3:-"$KERNELRPMSBASE/$lnxmaj/$DISTROMAJ/$TARGET_ARCH"}
181 local tmpdir=$(mktemp -d $pathtorpms/yumXXXXXX)
183 if [ "$(lsb_release -s -i)" = "RedHatEnterpriseServer" ]; then
186 if ! $sudo yumdownloader --destdir "$tmpdir" kernel-devel-"$wanted_kernel" > /dev/null; then
187 fatal 1 "failed to fetch kernel-devel-$wanted_kernel with yumdownloader."
189 local rpm=$(cd $tmpdir; echo *)
190 mv "$tmpdir/$rpm" "$pathtorpms"
198 # This function digs out the linux release from the linux source tree
199 find_linux_release() {
200 _find_linux_release $LINUX