Blob Blame History Raw
# 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