source: trunk/server/fedora/Makefile @ 1501

Last change on this file since 1501 was 1498, checked in by mitchb, 14 years ago
Make sure that SRPMs for upstream packages actually come from upstream We don't usually put SRPMs for packages we build in our yum repo since we generate the SRPM from a (possibly patched) version of the upstream spec and source files contained in the upstream SRPM as part of our build process. However, occasionally an SRPM or two of ours find their way into our repo. If we pull in that SRPM, a subsequent build of that package will fail because most of our patch hunks will fail due to having already been applied. Avoid this screw case by never downloading the allegedly upstream SRPMs from our own repo.
File size: 9.0 KB
Line 
1# Makefile for building scripts.mit.edu Fedora packages
2# Copyright (C) 2006  Jeff Arnold <jbarnold@mit.edu>
3#                and  Joe Presbrey <presbrey@mit.edu>
4#
5# This program is free software; you can redistribute it and/or
6# modify it under the terms of the GNU General Public License
7# as published by the Free Software Foundation; either version 2
8# of the License, or (at your option) any later version.
9#
10# This program is distributed in the hope that it will be useful,
11# but WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13# GNU General Public License for more details.
14#
15# You should have received a copy of the GNU General Public License
16# along with this program; if not, write to the Free Software
17# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
18#
19# See /COPYRIGHT in this repository for more information.
20
21upstream_yum    = krb5 krb5.i586 httpd openssh
22upstream        = openafs $(upstream_yum) moira cluster-glue heartbeat pacemaker
23oursrc          = execsys tokensys accountadm httpdmods logview sql-signup nss_nonlocal nss_nonlocal.i586 whoisd mit-zephyr athrun php_scripts scripts-base
24allsrc          = $(upstream) $(oursrc)
25oursrcdir       = ${PWD}/../common/oursrc
26patches         = ${PWD}/../common/patches
27specs           = ${PWD}/specs
28
29topdir          = ${HOME}/rpmbuild
30tmp_build       = $(topdir)/BUILD
31tmp_specs       = $(topdir)/SPECS
32tmp_src         = $(topdir)/SOURCES
33out_rpms        = $(topdir)/RPMS
34out_srpms       = $(topdir)/SRPMS
35out_sbin        = $(topdir)/sbin
36
37dload           = ${PWD}/.dload
38server_url      = "http://web.mit.edu/scripts/src"
39server_arch     = "fedora.stable"
40openafs_url     = "http://dl.openafs.org/dl/openafs/1.4.11/openafs-1.4.11-1.1.1.src.rpm"
41clusterglue_url = "http://kojipkgs.fedoraproject.org/packages/cluster-glue/1.0/0.11.b79635605337.hg.fc12/src/cluster-glue-1.0-0.11.b79635605337.hg.fc12.src.rpm"
42heartbeat_url   = "http://kojipkgs.fedoraproject.org/packages/heartbeat/3.0.0/0.5.0daab7da36a8.hg.fc12/src/heartbeat-3.0.0-0.5.0daab7da36a8.hg.fc12.src.rpm"
43pacemaker_url   = "http://kojipkgs.fedoraproject.org/packages/pacemaker/1.0.5/5.fc12/src/pacemaker-1.0.5-5.fc12.src.rpm"
44
45PKG             = $(patsubst %.i586,%,$@)
46
47.PHONY: minimal-clean
48
49info:
50        @echo "The following packages are available:"; \
51        echo "$(allsrc)"; \
52        echo "Run 'make all' to build all packages."
53
54minimal-clean:
55        rm -rf $(topdir) $(dload)
56
57clean: minimal-clean
58        rm -rf $(out_rpms) $(out_srpms) $(out_sbin)
59
60mkdir-tree:
61        @rpmdev-setuptree
62        mkdir -p $(out_sbin)
63        ln -sTf $(topdir) rpmbuild
64
65download: download_stamp
66download_stamp: | SRPMS/mit-zephyr-2.1-6.src.rpm
67        @mkdir -p $(dload); \
68        #wget -qO- -nv $(server_url)/$(server_arch) | xargs make
69        cd $(dload) && yumdownloader --disablerepo=scripts --source $(upstream_yum)
70        wget -P $(dload) $(openafs_url)
71        wget -P $(dload) $(clusterglue_url)
72        wget -P $(dload) $(heartbeat_url)
73        wget -P $(dload) $(pacemaker_url)
74        cd $(tmp_src) && wget -nd -r -l1 -np -A.orig.tar.gz http://debathena.mit.edu/apt/pool/debathena/d/debathena-moira/
75        touch download_stamp
76
77%.src.rpm:
78        wget -q -nv -N -B $(server_url) -nd -nH -P $(dload) $(server_url)/$*.src.rpm
79
80copy-patches: mkdir-tree
81        @cp $(patches)/*.patch $(tmp_src); \
82        cd $(tmp_src);
83
84install-srpms: mkdir-tree download
85        rpm $(rpm_args) -i $(dload)/*.src.rpm 2>/dev/null;
86
87copy-specs: mkdir-tree
88        cp ${specs}/*.spec $(tmp_specs)
89
90patch-specs: install-srpms
91        @cd ${tmp_specs}; \
92        list=`ls ${specs}/*.spec.patch`; \
93        for i in $$list; do \
94                patch < $$i; \
95        done; \
96        list2=`svn ls ${oursrcdir}`; \
97        for i in $$list2; do \
98                base=`basename $$i`; \
99                version=`svnversion ${oursrcdir}/$$i`; \
100                version=$${version//:/_}; \
101                echo "$$i version $$version"; \
102                sed --in-place \
103                        -e "s/SVNVERSION_TO_UPDATE/$${version}/" \
104                ${tmp_specs}/$$base.spec; \
105        done;
106
107# 1. use the package's Makefile to delete leftover files and run autoconf
108# 2. create a tarball (we want it to contain the autoconf output)
109tarballs: mkdir-tree
110        @cd ${oursrcdir}; \
111        list=`find -mindepth 1 -maxdepth 1 -type d | grep -v ".svn"`; \
112        for i in $$list; do \
113                pushd $$i; \
114                if [ -x ./mrproper ]; then \
115                        ./mrproper; \
116                        autoconf; \
117                fi; \
118                popd; \
119                tar -czf $(tmp_src)/$$i.tar.gz $$i; \
120        done;
121
122#setup: install-srpms copy-patches copy-specs patch-specs tarballs
123setup: copy-patches copy-specs patch-specs tarballs
124
125oursrc:
126        make $(oursrc)
127
128upstream: mkdir-tree download
129        make $(upstream)
130
131all:
132        make $(allsrc)
133
134$(oursrc): rpmbuild_args += --define 'scriptsversion $(shell svnversion ${oursrcdir}/$** | tr ':' '_')'
135
136$(filter %.i586,$(oursrc)): %.i586: setup
137        PATH="/usr/kerberos/sbin:/usr/kerberos/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin" \
138        rpmbuild ${rpmbuild_args} -bs ${tmp_specs}/${PKG}.spec
139        /usr/bin/mock -r scripts-fc11-i386 --arch=i586 ${rpmbuild_args} --define="_lib lib" -v --rebuild `ls -t ${out_srpms}/${PKG}-[0-9]*.src.rpm | head -1`
140
141$(filter-out %.i586,$(oursrc)): %: setup
142        PATH="/usr/kerberos/sbin:/usr/kerberos/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin" \
143        rpmbuild ${rpmbuild_args} -bs ${tmp_specs}/${PKG}.spec
144        /usr/bin/mock -r scripts-fc11-`uname -m` ${rpmbuild_args} -v --rebuild `ls -t ${out_srpms}/${PKG}-[0-9]*.src.rpm | head -1`
145
146$(upstream) openafs-kernel: rpmbuild_args += --define 'scriptsversion $(shell svnversion ${patches} | tr ':' '_')'
147
148$(filter %.i586,$(upstream)): %.i586: setup patch-specs
149        rpmbuild ${rpmbuild_args} -bs ${tmp_specs}/${PKG}.spec
150        /usr/bin/mock -r scripts-fc11-i386 --arch=i586 ${rpmbuild_args} -v --rebuild `ls -t ${out_srpms}/${PKG}-[0-9]*.src.rpm | head -1`
151
152$(filter-out %.i586,$(upstream)): %: setup patch-specs
153        rpmbuild ${rpmbuild_args} -bs ${tmp_specs}/${PKG}.spec
154        /usr/bin/mock -r scripts-fc11-`uname -m` ${rpmbuild_args} -v --rebuild `ls -t ${out_srpms}/${PKG}-[0-9]*.src.rpm | head -1`
155
156openafs-kernel: setup
157        PATH="/usr/kerberos/sbin:/usr/kerberos/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin" \
158        rpmbuild ${rpmbuild_args} -bs ${tmp_specs}/openafs*.spec
159        /usr/bin/mock -r scripts-fc11-`uname -m` ${rpmbuild_args} -v --rebuild `ls -t ${out_srpms}/openafs*.src.rpm | head -1`
160
161#sort -n sorts "2.6.25-1" later than "2.6.25.1-1", so it's Wrong
162#kernvers = $(shell rpm -q --qf "%{Version}-%{Release}\n" --whatprovides kernel | sort -n | tail -n1)
163kernvers = $(shell uname -r | sed "s/\(.*\)[.].*/\1/")
164kvariants = ''
165openafs_rpmbuild_args = --define "fedorakmod 1" --define "kvariants $(kvariants)" --define "kernvers $(kernvers)"
166openafs: rpmbuild_args += $(openafs_rpmbuild_args)
167openafs-kernel: rpmbuild_args += $(openafs_rpmbuild_args) --define "build_userspace 0" --define "build_modules 1"
168
169suexec: #install-srpms
170        @rm -rf ${tmp_src}/httpd-2*/; \
171        tar zxvf ${tmp_src}/httpd-2*.tar.gz; \
172        cd httpd-2*; \
173        patch -p1 < ${patches}/httpd-suexec-scripts.patch; \
174        autoreconf; \
175        ./configure --prefix=/etc/httpd --with-suexec-userdir=web_scripts --with-suexec-caller=apache --with-suexec-uidmin=50 --with-suexec-gidmin=50 --with-suexec-docroot=/ --with-suexec-trusteddir=/usr/libexec/scripts-trusted; \
176        pushd support; \
177        mkdir -p ${out_sbin}; make suexec && cp suexec ${out_sbin}; \
178        popd; \
179        rm -rf httpd-2*; \
180        echo; \
181        echo "suexec binary written to ${out_sbin}."; \
182        echo "Run 'make install-suexec' as root to install it.";
183
184install-suexec:
185        install -m 4510 -o 0 -g apache ${out_sbin}/suexec /usr/sbin/;
186
187frob-openafs:
188        @if [ ! -d "/etc/openafs/" ]; then \
189        echo "/etc/openafs does not exist"; \
190        exit 1; \
191        else \
192        ln -nfs /etc/openafs/* /usr/vice/etc/; \
193        fi
194
195# The following packages are needed for our packages
196basic-deps      = kernel-devel rpm-build rpmdevtools mock gcc autoconf patch krb5-workstation glibc-devel.i586 glibc-devel libtool libgcc.i586
197oursrc-deps     = hesinfo openldap-clients openldap-devel.i586 php-devel
198httpdmods-deps  = httpd-devel
199httpd-deps      = xmlto db4-devel expat-devel zlib-devel libselinux-devel apr-devel apr-util-devel pcre-devel openssl-devel distcache-devel
200krb5-deps       = bison ncurses-devel texinfo keyutils-libs-devel texinfo-tex texlive-latex
201openafs-deps    = pam-devel automake
202mit-zephyr-deps = readline-devel hesiod-devel hesiod-devel.i586 hesiod.i586 libXt.i586 #compat-readline43
203openssh-deps    = gtk2-devel libX11-devel autoconf automake openssl-devel perl zlib-devel audit-libs-devel util-linux groff man pam-devel tcp_wrappers-devel krb5-devel libselinux-devel audit-libs xauth pango-devel cairo-devel libedit-devel nss-devel fipscheck-devel
204php-deps        = bzip2-devel curl-devel gmp-devel libstdc++-devel sqlite-devel gcc-c++ libc-client-devel mysql-devel postgresql-devel unixODBC-devel libxml2-devel net-snmp-devel libxslt-devel libxml2-devel libXpm-devel libjpeg-devel t1lib-devel libmcrypt-devel mhash-devel libtidy-devel freetds-devel aspell-devel recode-devel
205install-deps:
206        yum -y install $(basic-deps) $(oursrc-deps) $(httpdmods-deps) $(httpd-deps) $(krb5-deps) $(openafs-deps) $(mit-zephyr-deps) $(openssh-deps) $(php-deps)
207        rpm -ivh http://kojipkgs.fedoraproject.org/packages/compat-readline43/4.3/3/i386/compat-readline43-4.3-3.i386.rpm
208#       rpm -ivh http://download.fedora.redhat.com/pub/fedora/linux/core/6/i386/os/Fedora/RPMS/compat-readline43-4.3-3.i386.rpm
209
210fedora:
211        make install-deps
212        make upstream
213        rpm -ivh $(out_rpms)/`uname -m`/openafs-devel*.rpm
214        make oursrc
Note: See TracBrowser for help on using the repository browser.