Whamcloud - gitweb
LU-882 quota: Quota code compares unsigned < 0
[fs/lustre-release.git] / build / lbuild-rhel
1 # vim:expandtab:shiftwidth=4:softtabstop=4:tabstop=4:
2
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
6 # in build/lbuild)
7 #BUILD_GEN+=".0"
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
11 DEVEL_KERNEL_TYPE="devel"
12 RPM_HELPERS_DIR="/usr/lib/rpm/redhat"
13
14 # a method which can be overriden by the release specific code
15 get_rpmbuildopts() {
16
17     return 0
18
19 }
20
21 # patching common to all releases
22 patch_spec_common() {
23
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"
30
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"
38     fi
39
40
41 }
42
43 prepare_and_build_srpm() {
44
45     pushd $TOPDIR >/dev/null
46
47     # create the buildid
48     local buildid="_lustre${EXTRA_VERSION##*_lustre}"
49
50     # edit the SPEC with our changes
51     patch_spec
52
53     popd >/dev/null
54
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
63     # $BUILD_ARCHS
64     local arch
65     local targets=""
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
70             arch=ppc
71         fi
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
76
77         # XXX - hackity hack -- until we get (or generate from the base
78         #                       config) configs for xen and debug
79         local f=""
80         for f in SOURCES/kernel-${lnxmaj}-*.config; do
81             grep -q "^CONFIG_SD_IOSTATS=y" $f || \
82                 echo "CONFIG_SD_IOSTATS=y" >> $f
83         done
84     done
85
86     # do we need any special rpm build options
87     local rpmbuildopt="-bb"
88     if $DO_SRC; then
89         rpmbuildopt="-ba"
90     fi
91
92     # stupid Ubuntu's rpm doesn't do debuginfo properly
93     if [ ! -f /usr/lib/rpm/debugedit ]; then
94         rpmbuildopt="$rpmbuildopt --without debuginfo"
95     fi
96
97     # XXX - need to figure this kabichk crap out -- it fails the build
98     if ! $USE_KABI; then
99         rpmbuildopt="$rpmbuildopt --without kabichk"
100     fi
101
102     # get any release specific build options
103     rpmbuildopt="$rpmbuildopt $(get_rpmbuildopts)"
104
105     # now build it
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
111         return 1
112     fi
113
114     return 0
115
116 }
117
118 devel_kernel_name() {
119     local lustre=${1:-false}
120
121     if $lustre; then
122         echo "kernel-lustre-$DEVEL_KERNEL_TYPE"
123     else
124         echo "kernel-$DEVEL_KERNEL_TYPE"
125     fi
126
127 }
128
129 rpm_BUILD_kernel_dirname() {
130     local rpmsmptype="$1"
131     local lnxmaj="$2"
132     local lnxmin="$3"
133     local arch="$4"
134
135     local lustre=""
136     if $KERNEL_LUSTRE_NAMING; then
137         $lustre="-lustre"
138     fi
139     echo kernel${lustre}${lnxmaj}${lnxmin}/linux-${lnxmaj}.$arch
140 }
141
142 find_linux_devel_paths() {
143     local path="$1"
144     local ARCH=$TARGET_ARCH
145
146     # If DEVEL_PATH_ARCH is set, use it. Added for fc11 as it needs i586 string for i686.
147     if [ $DEVEL_PATH_ARCH ];then
148         ARCH=$DEVEL_PATH_ARCH
149     fi
150
151     LINUX=$path/usr/src/kernels/${lnxmaj}${lnxmin}-${lnxrel}${DEVEL_PATH_ARCH_DELIMETER:-"-"}${ARCH}
152     # RHEL doesn't have the -obj tree
153     LINUXOBJ=""
154     # XXX - i don't think we need this any more
155     #LINUXRELEASE=$(find_linux_release "$LINUX")
156     #if [ -z "$LINUXRELEASE" ]; then
157     #    echo "Failed to find linux release in $LINUX"
158     #    return 255
159     #fi
160
161     return 0
162 }
163
164 unpack_linux_devel_rpm-rhel() {
165     local callers_rpm="$1"
166
167     # now just sanity check that everything needed to build properly versioned
168     # modules is in place
169     if [ ! -f usr/src/kernels/${lnxmaj}${lnxmin}-${lnxrel}${DEVEL_PATH_ARCH_DELIMETER:-"-"}$TARGET_ARCH/Module.symvers ]; then
170         fatal 1 "cannot build kernel modules: the Kernel's Module.symvers is missing."
171     fi
172
173     return 0
174
175 }
176
177 # this of course requires a sudo rule on the builder for real RHEL:
178 # hudson ALL= NOPASSWD: /usr/bin/yumdownloader
179 # also must disable the requiretty attribute in the sudoers file
180 find_linux_rpm-rhel() {
181     local prefix="$1"
182     local wanted_kernel="$2"
183     local pathtorpms=${3:-"${KERNELRPMSBASE}/${lnxmaj}/${DISTRO}/${TARGET_ARCH}"}
184
185     local tmpdir=$(mktemp -d $pathtorpms/yumXXXXXX)
186     local sudo=""
187     if [ "$(lsb_release -s -i)" = "RedHatEnterpriseServer" ]; then
188         sudo="sudo"
189     fi
190     if ! $sudo yumdownloader --destdir "$tmpdir" kernel-devel-"$wanted_kernel" > /dev/null; then
191         fatal 1 "failed to download kernel-devel-$wanted_kernel"
192     fi
193     local rpm=$(cd $tmpdir; echo *)
194     mv "$tmpdir/$rpm" "$pathtorpms"
195     rmdir $tmpdir
196     echo "$rpm"
197
198     return 0
199
200 }