# sitelib for noarch packages, sitearch for others (remove the unneeded one)
%{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")}
%global hdp_build 110
%global jetty7 7.6.7.v20120910
%global jetty8 8.1.14.v20131031
%global jersey1 1.19
Name: ambari
Version: 1.5.1
Release: 12%{?dist}
Summary: Apache Hadoop cluster management
License: ASL 2.0 and MS-PL and MIT
URL: http://ambari.apache.org/
Source0: http://www.apache.org/dist/%{name}/%{name}-%{version}/%{name}-%{version}.tar.gz
Source1: %{name}.service
Source2: %{name}.logrotate
Patch0: %{name}-jetty7-8-mods.patch
Patch1: %{name}-jpa-nullable-adjustment.patch
Patch2: %{name}-maven-assembly-plugin-mods.patch
Patch3: %{name}-puppet-syntax-remove-hyphens.patch
BuildRequires: java-devel
BuildRequires: perl-generators
BuildRequires: python
BuildRequires: apacheds-protocols
BuildRequires: apache-commons-net
BuildRequires: derby
BuildRequires: eclipselink
BuildRequires: exec-maven-plugin
BuildRequires: fontawesome-fonts
BuildRequires: google-gson
BuildRequires: guice-assistedinject
BuildRequires: guice-multibindings
BuildRequires: guice-persist
BuildRequires: guice-servlet
BuildRequires: jackson
BuildRequires: jetty8
BuildRequires: jsr-311
BuildRequires: maven-assembly-plugin
BuildRequires: maven-install-plugin
BuildRequires: maven-local
BuildRequires: mockito
BuildRequires: jersey1-test-framework
BuildRequires: jersey1-contribs
BuildRequires: postgresql-jdbc
BuildRequires: powermock-junit4
BuildRequires: powermock-reflect
BuildRequires: python-setuptools
BuildRequires: quartz
BuildRequires: slf4j-log4j12
BuildRequires: springframework-security
BuildRequires: xmvn
BuildRequires: mvn(org.apache.maven.plugins:maven-antrun-plugin)
BuildRequires: mvn(org.apache.rat:apache-rat-plugin)
BuildArch: noarch
Requires: %{name}-server
%description
The Apache Ambari project is aimed at making Hadoop management
simpler by developing software for provisioning, managing, and
monitoring Apache Hadoop clusters. Ambari provides an intuitive,
easy-to-use Hadoop management web UI backed by its RESTful APIs.
%package server
Summary: Server module for %{name}
Requires: %{name}
Requires: fontawesome-fonts
Requires: postgresql-server
%description server
%{summary}.
%package agent
Summary: Agent module for %{name}
Requires: %{name}
Requires: python-jinja2
Requires: openssl
Requires: puppet
Requires: zlib
%description agent
%{summary}.
%package client
Summary: Client module for %{name}
Requires: %{name}
%description client
%{summary}.
%package views
Summary: Views module for %{name}
Requires: %{name}
%description views
%{summary}.
%package javadoc
Summary: Javadoc for %{name}
%description javadoc
This package contains javadoc for %{name}.
%prep
%setup -qn %{name}-%{version}
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
find -name '*.jar' -delete
find -name '.git*' -delete
# remove bundle of jinja2 in common
rm -fr ambari-common/src/main/python/jinja2*
# remove unnecessary, missing or broken plugins and extensions
%pom_remove_plugin org.apache.rat:apache-rat-plugin
%pom_remove_plugin org.apache.rat:apache-rat-plugin %{name}-views/examples
%pom_remove_plugin org.vafer:jdeb
for f in project views server client; do
%pom_remove_plugin org.apache.rat:apache-rat-plugin %{name}-$f
%pom_remove_plugin org.vafer:jdeb %{name}-$f
done
%pom_remove_plugin :maven-assembly-plugin
%pom_remove_plugin :rpm-maven-plugin
%pom_remove_plugin :rpm-maven-plugin ambari-server
%pom_remove_plugin :findbugs-maven-plugin ambari-server
%pom_remove_plugin :buildnumber-maven-plugin ambari-server
%pom_remove_plugin :rpm-maven-plugin ambari-client
%pom_xpath_remove "pom:extension[pom:artifactId[text()='wagon-ssh-external']]" ambari-client
# jobs classes still inside quartz
%pom_remove_dep "org.quartz-scheduler:quartz-jobs" ambari-server
%pom_remove_plugin :rpm-maven-plugin ambari-agent
%pom_remove_plugin :buildnumber-maven-plugin ambari-agent
%pom_xpath_remove "pom:extension[pom:artifactId[text()='wagon-ssh-external']]" ambari-agent
%pom_remove_plugin :copy-maven-plugin ambari-agent
%pom_remove_plugin org.vafer:jdeb ambari-agent
# hack the agent code to think it's reporting redhat6 for compat
sed -i 's/self.getOperatingSystem()/"redhat"/' ./ambari-agent/src/main/python/ambari_agent/Facter.py
sed -i 's/self.getOperatingSystemRelease()/6/' ./ambari-agent/src/main/python/ambari_agent/Facter.py
# convert for target python_version
find -name '*.py' -o -name '*.xml' -exec sed -i "s|/usr/bin/python2.6|%{__python}|g" {} \;
find -name '*.py' -exec sed -i "s|/env python2.6|/env %{__python}|g" {} \;
find -name '*.xml' -exec sed -i "s|>python2.6<|>%{__python}<|g" {} \;
find -name '*.py' -o -name '*.xml' -o -name '*.js' -o -name '*.script' \
-exec sed -i "s|lib/python2.6|lib/python%{python_version}|g" {} \;
sed -i "s|lib/python2.6|lib/python%{python_version}|g" ./ambari-server/conf/unix/ambari.properties
%pom_add_dep javax.ws.rs:jsr311-api: ambari-views
%pom_remove_plugin :maven-assembly-plugin ambari-views
# push to jetty8 compat
sed -i "s|<version>%{jetty7}</version>|<version>%{jetty8}</version>|g" ambari-project/pom.xml
# update hardcoded jersey versions
%pom_change_dep -r com.sun.jersey ::%{jersey1} ambari-project
%pom_change_dep -r com.sun.jersey.contribs ::%{jersey1} ambari-project
%pom_change_dep -r com.sun.jersey ::%{jersey1} ambari-views
# JPA injection signature change
sed -i "s|Provider<Properties>|java.util.Map<?,?>|g" ambari-server/src/main/java/com/google/inject/persist/jpa/AmbariJpaPersistService.java
# now JDK8 inclusion
%pom_remove_dep "org.apache.directory.shared:shared-ldap" ambari-server
%build
# Separate packages for POM files
%mvn_package :ambari
%mvn_package :ambari-project
%mvn_build -f -s -- -DskipTests -Pstatic-web -DambariVersion=%{version}.%{hdp_build}
# update ambariVersion where rpm plugin would have
find -name '*.sql' -exec sed -i 's/\${ambariVersion}/%{version}.%{hdp_build}/g' {} \;
sed -i 's/\${ambariVersion}/%{version}.%{hdp_build}/g' ./version
sed -i 's/\${ambariVersion}/%{version}.%{hdp_build}/g' ./ambari-server/sbin/ambari-server
%install
%mvn_install
install -d -m 0755 %{buildroot}%{_sbindir}
# ambari
install -d -m 0755 %{buildroot}%{python_sitelib}/common_functions
cp -pr ambari-common/src/main/python/common_functions/* %{buildroot}%{python_sitelib}/common_functions
sed -i 's/\${ambariVersion}/%{version}.%{hdp_build}/g' ./ambari-agent/conf/unix/ambari-agent
# ambari-agent
install -d -m 0755 %{buildroot}%{_var}/log/ambari-agent
install -d -m 0755 %{buildroot}%{_var}/run/ambari-agent
install -d -m 0755 %{buildroot}%{_var}/lib/ambari-agent
install -d -m 0755 %{buildroot}%{_var}/lib/ambari-agent/cache
install -d -m 0755 %{buildroot}%{_var}/lib/ambari-agent/data
install -d -m 0755 %{buildroot}%{_var}/lib/ambari-agent/data/keys
install -d -m 0755 %{buildroot}%{_datadir}/%{name}/ambari-agent/examples
install -d -m 0755 %{buildroot}%{_datadir}/%{name}/ambari-agent/sbin
install -d -m 0755 %{buildroot}%{_var}/lib/ambari-agent/resources
install -d -m 0755 %{buildroot}%{_sysconfdir}/ambari-agent/conf
pushd .
cd ambari-agent/src/main/python
%{__python} setup.py install -O1 --root %{buildroot}
cp -pr {ambari_agent,resource_management} %{buildroot}%{python_sitelib}
cd ../../..
cp -pr src/main/puppet %{buildroot}%{_var}/lib/ambari-agent
cp -pr src/examples %{buildroot}%{_datadir}/%{name}/ambari-agent
cp -p conf/unix/ambari-agent.ini %{buildroot}%{_sysconfdir}/ambari-agent/conf
popd
mv %{buildroot}%{_bindir}/ambari-agent %{buildroot}%{_datadir}/%{name}/ambari-agent/sbin
ln -s %{_datadir}/%{name}/ambari-agent/sbin/ambari-agent %{buildroot}%{_sbindir}
# agent uses the server copy of stacks
cp -pr ambari-server/src/main/resources/stacks %{buildroot}%{_var}/lib/ambari-agent/cache
# add agent var data files
cp -p version %{buildroot}%{_var}/lib/ambari-agent/data
# ambari-client
install -d -m 0755 %{buildroot}%{_datadir}/%{name}/ambari-client/examples
pushd .
cd ambari-client/src/main/python
%{__python} setup.py install -O1 --root %{buildroot}
cp -pr ambari_client %{buildroot}%{python_sitelib}
popd
find ambari-client/src/examples -name '*.py' -exec sed -i '1i #!/bin/sh' {} \;
cp -pr ambari-client/src/examples %{buildroot}%{_datadir}/%{name}/ambari-client
find %{buildroot}%{python_sitelib}/ambari_client -name '*.py' -exec chmod 644 {} \;
# ambari-server
install -d -m 0755 %{buildroot}%{_var}/log/ambari-server
install -d -m 0755 %{buildroot}%{_var}/run/ambari-server/bootstrap
install -d -m 0755 %{buildroot}%{_datadir}/%{name}/ambari-server/examples
install -d -m 0755 %{buildroot}%{_datadir}/%{name}/ambari-server/sbin
install -d -m 0755 %{buildroot}%{_datadir}/%{name}/ambari-server/lib
install -d -m 0755 %{buildroot}%{_datadir}/%{name}/ambari-server/lib/web
install -d -m 0755 %{buildroot}%{_var}/lib/ambari-server
install -d -m 0755 %{buildroot}%{_var}/lib/ambari-server/resources/{scripts,stacks,upgrade}
install -d -m 0755 %{buildroot}%{_var}/lib/ambari-server/keys
install -d -m 0755 %{buildroot}%{python_sitelib}/ambari_server
install -d -m 0755 %{buildroot}%{_sysconfdir}/ambari-server/conf
install -d -m 0755 %{buildroot}%{_unitdir}
install -p -m 0644 %{SOURCE1} %{buildroot}%{_unitdir}
install -d -m 0755 %{buildroot}%{_sysconfdir}/logrotate.d
install -p -m 0644 %{SOURCE2} %{buildroot}%{_sysconfdir}/logrotate.d/%{name}-server
pushd .
cd ambari-server
# rpmlint fixups for all the messy perms
EXEC_FILES=$(find src/main/resources -type f -name '*.py' -o -name '*.sh' -o -name '*.init' -o -name '*.sh.j2')
for f in $EXEC_FILES; do
chmod a+x $f
done
SH_FILES=$(find src/main/resources -type f -name '*.sh*' -exec grep -L "#!/bin" {} \;)
for f in $SH_FILES; do
sed -i '1i #!/bin/sh' $f
done
PY_FILES=$(find src/main/resources -type f -name '*.py*' -exec grep -L "#!/bin" {} \;)
for f in $PY_FILES; do
sed -i '1i #!/bin/env python' $f
done
# random stragglers
chmod a+x src/main/resources/stacks/HDP/2.*/services/NAGIOS/package/templates/nagios.j2
chmod a+x src/main/resources/stacks/HDP/2.*/services/NAGIOS/package/files/check_cpu.pl
cp -p src/main/resources/*.{sql,json} %{buildroot}%{_var}/lib/ambari-server/resources
cp -pr src/main/resources/{custom_action_definitions,custom_actions,db,scripts,stacks,upgrade} %{buildroot}%{_var}/lib/ambari-server/resources
# zero-length file needed for openssl ca cmd
# rm src/main/resources/db/index.txt
cp -pr src/main/resources/db %{buildroot}%{_var}/lib/ambari-server/keys
sed -i 's|/usr/bin/python2.6|%{__python}|g' sbin/ambari-server
sed -i 's|/usr/sbin/ambari-server.py|%{_datadir}/%{name}/ambari-server/sbin/ambari-server.py|g' \
sbin/ambari-server
sed -i 's|/usr/lib/ambari-server|%{_datadir}/%{name}/ambari-server/lib|g' sbin/ambari-server
install -p sbin/ambari-server %{buildroot}%{_datadir}/%{name}/ambari-server/sbin
ln -s %{_datadir}/%{name}/ambari-server/sbin/ambari-server %{buildroot}%{_sbindir}
# convert jar path
sed -i 's|/usr/lib/ambari-server|%{_datadir}/%{name}/ambari-server/lib|g' src/main/python/ambari-server.py
# no egg info for ambari-server
install -p src/main/python/ambari-server.py %{buildroot}%{_datadir}/%{name}/ambari-server/sbin
chmod a+x src/main/python/*.py
cp -p src/main/python/{*.py,ambari_server/*.py} %{buildroot}%{python_sitelib}/ambari_server
# need to fix-up the web client version since upstream gives us the js statically
sed -i "s/App.version.*=.*;/App.version = '%{version}.%{hdp_build}';/" ../ambari-web/public-static/javascripts/app.js
gzip -c ../ambari-web/public-static/javascripts/app.js > ../ambari-web/public-static/javascripts/app.js.gz
# zero-length file
rm ../ambari-web/public-static/data/apps/jobs.json
rm -fr ../ambari-web/public-static/font/*
cp -pr ../ambari-web/public-static/* %{buildroot}%{_datadir}/%{name}/ambari-server/lib/web
cp -pr src/examples %{buildroot}%{_datadir}/%{name}/ambari-server
sed -i 's|/usr/lib/ambari-server/web|%{_datadir}/%{name}/ambari-server/lib/web|g' conf/unix/ambari.properties
# link the only font available
ln -s %{_datadir}/fonts/fontawesome/fontawesome-webfont.ttf \
%{buildroot}%{_datadir}/%{name}/ambari-server/lib/web/font
# TODO: revisit this mapping hack
echo "server.os_type=redhat6" >> conf/unix/ambari.properties
cp -p conf/unix/{*.properties,krb5JAASLogin.conf} %{buildroot}%{_sysconfdir}/ambari-server/conf
cp -p conf/unix/ca.config %{buildroot}%{_var}/lib/ambari-server/keys
# make system softlinks for dependent jars
mv target/DBConnectionVerification.jar %{buildroot}%{_javadir}/%{name}
find target/ -name '*.jar' -exec cp {} %{buildroot}%{_datadir}/%{name}/ambari-server/lib \;
%{_bindir}/xmvn-subst %{buildroot}%{_datadir}/%{name}/ambari-server/lib
ln -s %{_javadir}/%{name}/DBConnectionVerification.jar \
%{buildroot}%{_datadir}/%{name}/ambari-server/lib
ln -s %{_javadir}/%{name}/DBConnectionVerification.jar \
%{buildroot}%{_var}/lib/ambari-server/resources
popd
# add version file needed at runtime
cp -p version %{buildroot}%{_var}/lib/ambari-server/resources
%check
# mvn tests not run due to missing dependencies:
# org.powermock:powermock-api-easymock:jar:1.5
# org.springframework:spring-mock:jar:2.0.8
%files -f .mfiles
%doc NOTICE.txt LICENSE.txt
%{python_sitelib}/common_functions
%files server -f .mfiles-ambari-server
%{_sbindir}/%{name}-server
%{_var}/lib/ambari-server
%{_var}/log/ambari-server
%{_var}/run/ambari-server
%dir %{_javadir}/%{name}
%dir %{_datadir}/%{name}
%{_datadir}/%{name}/ambari-server
%{python_sitelib}/ambari_server
%{_sysconfdir}/ambari-server
%{_unitdir}/%{name}.service
%config(noreplace) %attr(644, root, root) %{_sysconfdir}/logrotate.d/%{name}-server
%{_javadir}/%{name}/DBConnectionVerification.jar
%files agent -f .mfiles-ambari-agent
%{_sbindir}/%{name}-agent
%{python_sitelib}/ambari_agent*
%{python_sitelib}/resource_management
%{_var}/lib/ambari-agent
%{_var}/log/ambari-agent
%{_var}/run/ambari-agent
%{_datadir}/%{name}/ambari-agent
%{_sysconfdir}/ambari-agent
%files client -f .mfiles-ambari-client
%{python_sitelib}/ambari_client*
%{_datadir}/%{name}/ambari-client
%files views -f .mfiles-ambari-views
%files javadoc -f .mfiles-javadoc
%doc NOTICE.txt LICENSE.txt
%changelog
* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.5.1-12
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
* Fri Feb 17 2017 Peter MacKinnon <pmackinn@redhat.com> - 1.5.1-11
- Add missing plugin deps
* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.5.1-10
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
* Tue Jul 19 2016 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.5.1-9
- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages
* Tue Feb 23 2016 Yaakov Selkowitz <yselkowi@redhat.com> - 1.5.1-8
- BR: slf4j-log4j12 (#1307314)
* Wed Feb 03 2016 Fedora Release Engineering <releng@fedoraproject.org> - 1.5.1-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
* Thu Oct 22 2015 Peter MacKinnon <pmackinn@redhat.com> - 1.5.1-6
- F24 changes for commons-net, apacheds
* Tue Jun 16 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.5.1-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
* Thu Jun 11 2015 Peter MacKinnon <pmackinn@redhat.com> - 1.5.1-4
- switch to jersey1 compat; jpa signature fix
* Thu Jan 15 2015 Mikolaj Izdebski <mizdebsk@redhat.com> - 1.5.1-3
- Rebuild to fix Maven auto-requires
* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.5.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
* Fri Apr 25 2014 Peter MacKinnon <pmackinn@redhat.com> 1.5.1-1
- update to 1.5.1 (HDP build 110)
- enable agent build
* Tue Apr 22 2014 Peter MacKinnon <pmackinn@redhat.com> 1.4.4-2
- enable vendor scripts (FPC #415 exception granted)
* Sat Feb 22 2014 Peter MacKinnon <pmackinn@redhat.com> 1.4.4-1
- Initial RPM
- rpmlint fixes
- throw away bundled vendor js libs
- switch to system fontawesome-font
- purge jinja2 bundling
- fix DBConnectionVerification.jar softlinking