File spacewalk-java.spec of Package spacewalk-java

#
# spec file for package spacewalk-java
#
# Copyright (c) 2025 SUSE LLC
# Copyright (c) 2008-2018 Red Hat, Inc.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via https://bugs.opensuse.org/
#

# The productprettyname macros is controlled in the prjconf. If not defined, we fallback here
%{!?productprettyname: %global productprettyname Uyuni}

#!BuildIgnore:  udev-mini libudev-mini1

%define cobblerdir      %{_localstatedir}/lib/cobbler
%define cobprofdir      %{cobblerdir}/templates
%define cobprofdirup    %{cobprofdir}/upload
%define cobprofdirwiz   %{cobprofdir}/wizard
%define cobdirsnippets  %{cobblerdir}/snippets
%define spacewalksnippetsdir  %{cobdirsnippets}/spacewalk
%define run_checkstyle  0
%define omit_tests      1

%define susemanagershareddir       %{_datadir}/susemanager
%define serverdir       %{susemanagershareddir}/www
%define salt_user_group salt

%{!?java_version: %global java_version 17}
%if 0%{?suse_version}
%define userserverdir       /srv
%define apache_group    www
%define apache2         apache2
%else
%define userserverdir       %{_sharedstatedir}
%define apache_group    apache
%define apache2         httpd
%define java_version    1:%{java_version}
%endif

%define ehcache         ( mvn(net.sf.ehcache:ehcache-core) >= 2.10.1 or ehcache-core >= 2.10.1 or ehcache >= 2.10.1)
%define apache_commons_digester    (apache-commons-digester or jakarta-commons-digester)
%define apache_commons_discovery   (apache-commons-discovery or jakarta-commons-discovery)
%define apache_commons_fileupload  (apache-commons-fileupload or jakarta-commons-fileupload)
%define apache_commons_validator   (apache-commons-validator or jakarta-commons-validator)
%define apache_commons_compress    (apache-commons-compress or jakarta-commons-compress)

%if 0%{?is_opensuse}
%define supported_locales bn_IN,ca,de,en_US,es,fr,gu,hi,it,ja,ko,pa,pt,pt_BR,ru,ta,zh_CN,zh_TW
%else
%define supported_locales en_US,ko,ja,zh_CN
%endif

Name:           spacewalk-java
Version:        5.2.0
Release:        0
Summary:        Java web application files for %{productprettyname}
License:        GPL-2.0-only
# FIXME: use correct group or remove it, see "https://en.opensuse.org/openSUSE:Package_group_guidelines"
Group:          Applications/Internet
URL:            https://github.com/uyuni-project/uyuni
Source0: spacewalk-java-git-868.db1a8a1.tar.gz
Source1:        https://raw.githubusercontent.com/uyuni-project/uyuni/%{name}-%{version}-0/java/%{name}-rpmlintrc
BuildArch:      noarch
ExcludeArch:    ia64

BuildRequires:  %{apache_commons_compress}
BuildRequires:  %{apache_commons_discovery}
BuildRequires:  %{apache_commons_fileupload}
BuildRequires:  %{apache_commons_validator}
BuildRequires:  %{ehcache}
BuildRequires:  ant
BuildRequires:  ant-apache-regexp
BuildRequires:  ant-contrib
BuildRequires:  ant-junit
BuildRequires:  antlr >= 2.7.6
BuildRequires:  apache-commons-cli
BuildRequires:  apache-commons-codec
BuildRequires:  apache-commons-collections
BuildRequires:  apache-commons-el
BuildRequires:  apache-commons-io >= 2.11.0
BuildRequires:  apache-commons-jexl
BuildRequires:  apache-commons-lang3 >= 3.4
BuildRequires:  apache-commons-text
BuildRequires:  apache-commons-logging
BuildRequires:  bcel
BuildRequires:  mvn(net.bytebuddy:byte-buddy) >= 1.14
BuildRequires:  mvn(net.bytebuddy:byte-buddy-dep) >= 1.14
BuildRequires:  c3p0 >= 0.9.1
BuildRequires:  cglib
BuildRequires:  classmate
BuildRequires:  dom4j
BuildRequires:  glassfish-activation
BuildRequires:  glassfish-jaxb-api
BuildRequires:  glassfish-jaxb-runtime
BuildRequires:  glassfish-jaxb-txw2
BuildRequires:  hibernate-commons-annotations
BuildRequires:  hibernate-types
BuildRequires:  httpcomponents-asyncclient
BuildRequires:  httpcomponents-client
BuildRequires:  ical4j
BuildRequires:  istack-commons-runtime
BuildRequires:  jade4j
BuildRequires:  java-%{java_version}-openjdk-devel
BuildRequires:  java-saml
BuildRequires:  javamail
BuildRequires:  javapackages-tools
BuildRequires:  javassist
BuildRequires:  jboss-logging
BuildRequires:  jdom
BuildRequires:  joda-time
BuildRequires:  jose4j
BuildRequires:  jpa-api
BuildRequires:  jsch
BuildRequires:  jta
BuildRequires:  libxml2
BuildRequires:  log4j
BuildRequires:  log4j-jcl
BuildRequires:  log4j-slf4j
BuildRequires:  netty
BuildRequires:  objectweb-asm >= 9.2
BuildRequires:  perl
BuildRequires:  pgjdbc-ng
BuildRequires:  postgresql-jdbc
BuildRequires:  prometheus-client-java
BuildRequires:  quartz
BuildRequires:  redstone-xmlrpc
BuildRequires:  salt-netapi-client >= 0.21
BuildRequires:  simple-core
BuildRequires:  simple-xml
BuildRequires:  sitemesh
BuildRequires:  snakeyaml >= 1.33
BuildRequires:  spark-core
BuildRequires:  spark-template-jade
BuildRequires:  statistics
BuildRequires:  struts >= 1.2.9
BuildRequires:  tomcat >= 7
BuildRequires:  tomcat-lib >= 7
BuildRequires:  tomcat-taglibs-standard
BuildRequires:  uyuni-base-server
BuildRequires:  woodstox
BuildRequires:  xalan-j2
BuildRequires:  xmlsec
BuildRequires:  (google-gson >= 2.2.4 with google-gson < 2.10.0)
BuildRequires:  mvn(org.apache.velocity:velocity-engine-core) >= 2.2
BuildRequires:  mvn(org.hibernate:hibernate-c3p0)
BuildRequires:  mvn(org.hibernate:hibernate-core)
BuildRequires:  mvn(org.hibernate:hibernate-ehcache)
%if 0%{?suse_version}
BuildRequires:  ant-nodeps
BuildRequires:  libxml2-tools
%endif
%if 0%{?rhel}
BuildRequires:  libxml2-devel
%endif

Requires:       %{apache_commons_compress}
Requires:       %{apache_commons_digester}
Requires:       %{apache_commons_discovery}
Requires:       %{apache_commons_fileupload}
Requires:       %{ehcache}
Requires:       apache-commons-beanutils
Requires:       apache-commons-cli
Requires:       apache-commons-codec
Requires:       apache-commons-collections
Requires:       apache-commons-el
Requires:       apache-commons-io
Requires:       apache-commons-jexl
Requires:       apache-commons-lang3
Requires:       apache-commons-text
Requires:       apache-commons-logging
Requires:       bcel
Requires:       mvn(net.bytebuddy:byte-buddy) >= 1.14
Requires:       mvn(net.bytebuddy:byte-buddy-dep) >= 1.14
Requires:       c3p0 >= 0.9.1
Requires:       cglib
Requires:       classmate
Requires:       cobbler
Requires:       glassfish-activation
Requires:       glassfish-jaxb-api
Requires:       glassfish-jaxb-runtime
Requires:       glassfish-jaxb-txw2
Requires:       hibernate-commons-annotations
Requires:       hibernate-types
Requires:       httpcomponents-client
Requires:       ical4j
Requires:       istack-commons-runtime
Requires:       jade4j
Requires:       java-%{java_version}-openjdk
Requires:       java-saml
Requires:       javamail
Requires:       javapackages-tools
Requires:       javassist
Requires:       jboss-logging
Requires:       jdom
Requires:       joda-time
Requires:       jose4j
Requires:       jpa-api
Requires:       jta
Requires:       libsolv-tools
Requires:       log4j
Requires:       log4j-jcl
Requires:       log4j-slf4j
Requires:       mgr-libmod
Requires:       netty
Requires:       objectweb-asm >= 9.2
Requires:       pgjdbc-ng
Requires:       prometheus-client-java
Requires:       redstone-xmlrpc
Requires:       salt-netapi-client >= 0.21
Requires:       simple-core
Requires:       simple-xml
Requires:       sitemesh
Requires:       snakeyaml >= 1.33
Requires:       spacewalk-branding
Requires:       spacewalk-java-config
Requires:       spacewalk-java-jdbc
Requires:       spacewalk-java-lib = %{version}
Requires:       spark-core
Requires:       spark-template-jade
Requires:       statistics
Requires:       struts >= 1.2.9
Requires:       sudo
Requires:       susemanager-docs_en
Requires:       system-lock-formula
Requires:       tomcat-lib >= 7
Requires:       tomcat-taglibs-standard
Requires:       woodstox
Requires:       xalan-j2 >= 2.6.0
Requires:       xerces-j2
Requires:       xmlsec
Requires:       (/sbin/unix2_chkpwd or /usr/sbin/unix2_chkpwd)
Requires:       (google-gson >= 2.2.4 with google-gson < 2.10.0)
Requires:       mvn(org.apache.tomcat:tomcat-servlet-api) > 8
Requires:       mvn(org.hibernate:hibernate-c3p0)
Requires:       mvn(org.hibernate:hibernate-core)
Requires:       mvn(org.hibernate:hibernate-ehcache)
Requires:       openssl
# libtcnative-1-0 is only recommended in tomcat.
# We want it always to prevent warnings about openssl cannot be used
Requires:       tomcat-native
Requires(pre):  salt
Requires(pre):  tomcat >= 7
Requires(pre):  uyuni-base-server
Requires:       uyuni-cobbler-helper

%if 0%{?rhel}
Recommends:     rng-tools
%endif

%if 0%{?run_checkstyle}
BuildRequires:  checkstyle
%endif
%if ! 0%{?omit_tests} > 0
BuildRequires:  translate-toolkit
%endif

%description
This package contains the code for the Java version of the %{productprettyname} Web Site.

%package config
Summary:        Configuration files for Spacewalk Java
# FIXME: use correct group or remove it, see "https://en.opensuse.org/openSUSE:Package_group_guidelines"
Group:          Applications/Internet
Requires(post): %{apache2}
Requires(post): salt-master
Requires(post): tomcat

%description config
This package contains the configuration files for the %{productprettyname} Java web
application and taskomatic process.

%package lib
Summary:        Jar files for Spacewalk Java
# FIXME: use correct group or remove it, see "https://en.opensuse.org/openSUSE:Package_group_guidelines"
Group:          Applications/Internet
Requires:       /usr/bin/sudo

%description lib
This package contains the jar files for the %{productprettyname} Java web application
and taskomatic process.

%package postgresql
Summary:        PostgreSQL database backend support files for Spacewalk Java
# FIXME: use correct group or remove it, see "https://en.opensuse.org/openSUSE:Package_group_guidelines"
Group:          Applications/Internet
Requires:       postgresql-jdbc
Requires:       tomcat >= 7
Provides:       spacewalk-java-jdbc = %{version}-%{release}

%description postgresql
This package contains PostgreSQL database backend files for the %{productprettyname} Java.

%if ! 0%{?omit_tests} > 0
%package tests
Summary:        Test Classes for testing spacewalk-java
# FIXME: use correct group or remove it, see "https://en.opensuse.org/openSUSE:Package_group_guidelines"
Group:          Applications/Internet

BuildRequires:  jmock < 2.0
Requires:       ant-junit
Requires:       jmock < 2.0

%description tests
This package contains testing files of spacewalk-java.

%files tests
%defattr(644,root,root,775)
%dir %{_datadir}/rhn/unit-tests
%{_datadir}/rhn/lib/rhn-test.jar
%{_datadir}/rhn/unit-tests/*
%{_datadir}/rhn/unittest.xml
%attr(644, tomcat, tomcat) %{serverdir}/tomcat/webapps/rhn/WEB-INF/lib/commons-lang3.jar
%attr(644, tomcat, tomcat) %{serverdir}/tomcat/webapps/rhn/WEB-INF/lib/commons-text.jar
%endif

%package apidoc-sources
Summary:        Autogenerated apidoc sources for spacewalk-java
# FIXME: use correct group or remove it, see "https://en.opensuse.org/openSUSE:Package_group_guidelines"
Group:          Applications/Internet

BuildRequires:  (docbook-dtds or docbook_4)

%description apidoc-sources
This package contains apidoc sources of spacewalk-java.

%files apidoc-sources
%defattr(644,root,root,775)
%docdir %{_defaultdocdir}/%{name}
%dir %{_defaultdocdir}/%{name}
%dir %{_defaultdocdir}/%{name}/xml
%{_defaultdocdir}/%{name}/xml/susemanager_api_doc.xml
%{_defaultdocdir}/%{name}/asciidoc/

%package -n spacewalk-taskomatic
Summary:        Java version of taskomatic
# FIXME: use correct group or remove it, see "https://en.opensuse.org/openSUSE:Package_group_guidelines"
Group:          Applications/Internet

BuildRequires:  systemd
%if 0%{?rhel}
BuildRequires:  systemd-rpm-macros
%else
%{?systemd_requires}
%endif

Requires:       %{ehcache}
Requires:       apache-commons-cli
Requires:       apache-commons-codec
Requires:       apache-commons-lang3
Requires:       apache-commons-text
Requires:       apache-commons-logging
Requires:       bcel
Requires:       mvn(net.bytebuddy:byte-buddy) >= 1.14
Requires:       mvn(net.bytebuddy:byte-buddy-dep) >= 1.14
Requires:       c3p0 >= 0.9.1
Requires:       cglib
Requires:       classmate
Requires:       cobbler
Requires:       hibernate-commons-annotations
Requires:       httpcomponents-client
Requires:       httpcomponents-core
Requires:       java-%{java_version}-openjdk
Requires:       javassist
Requires:       jboss-logging
Requires:       jpa-api
Requires:       jsch
Requires:       log4j
Requires:       log4j-jcl
Requires:       quartz
Requires:       simple-core
Requires:       spacewalk-java-config
Requires:       spacewalk-java-jdbc
Requires:       spacewalk-java-lib = %{version}
Requires:       statistics
Requires:       tomcat-taglibs-standard
Requires:       xalan-j2 >= 2.6.0
Requires:       xerces-j2
Requires:       (/sbin/unix2_chkpwd or /usr/sbin/unix2_chkpwd)
Requires:       mvn(org.hibernate:hibernate-c3p0)
Requires:       mvn(org.hibernate:hibernate-core)
Requires:       mvn(org.hibernate:hibernate-ehcache)

Conflicts:      quartz < 2.0

%description -n spacewalk-taskomatic
This package contains the Java version of taskomatic.

%prep
%setup -q -n spacewalk-java-git-868.db1a8a1

%if 0%{?fedora}
%define skip_xliff  1
%endif

%if ! 0%{?omit_tests} > 0 && ! 0%{?skip_xliff}
find . -name 'StringResource_*.xml' |      while read i ;
    do echo $i
    # check for common localizations issues
    ln -s $(basename $i) $i.xliff
    CONTENT=$(pofilter --progress=none --nofuzzy --gnome \
                       --excludefilter=untranslated \
                       --excludefilter=purepunc \
                       $i.xliff 2>&1)
    if [ -n "$CONTENT" ]; then
        echo ERROR - pofilter errors: "$CONTENT"
        exit 1
    fi
    rm -f $i.xliff

    #check duplicate message keys in StringResource_*.xml files
    CONTENT=$(/usr/bin/xmllint --format "$i" | /usr/bin/perl -lne 'if (/<trans-unit( id=".+?")?/) { print $1 if $X{$1}++ }' )
    if [ -n "$CONTENT" ]; then
        echo ERROR - duplicate message keys: $CONTENT
        exit 1
    fi
done
%endif

# Adapt Apache service name in taskomatic.service
sed -i 's/apache2.service/%{apache2}.service/' scripts/taskomatic.service

%build
PRODUCT_NAME="%{productprettyname}"

%if 0%{?rhel}
export JAVA_HOME=/usr/lib/jvm/java-%{java_version}-openjdk/
%endif

# compile only java sources (no packing here)
ant -Dprefix=%{buildroot} -Dproduct.name="'$PRODUCT_NAME'" init-install compile

%if 0%{?run_checkstyle}
echo "Running checkstyle on java main sources"
export CLASSPATH="build/classes:build/build-lib/*"
export ADDITIONAL_OPTIONS="-Djavadoc.method.scope=public \
-Djavadoc.type.scope=package \
-Djavadoc.var.scope=package \
-Dcheckstyle.cache.file=build/checkstyle.cache.src \
-Djavadoc.lazy=false \
-Dcheckstyle.header.file=buildconf/LICENSE.txt"
find . -name *.java | grep -vE '(/test/|/jsp/)' | \
xargs checkstyle -c buildconf/checkstyle.xml

echo "Running checkstyle on java test sources"
export ADDITIONAL_OPTIONS="-Djavadoc.method.scope=nothing \
-Djavadoc.type.scope=nothing \
-Djavadoc.var.scope=nothing \
-Dcheckstyle.cache.file=build/checkstyle.cache.test \
-Djavadoc.lazy=false \
-Dcheckstyle.header.file=buildconf/LICENSE.txt"
find . -name *.java | grep -E '/test/' | grep -vE '/jsp/' | \
xargs checkstyle -c buildconf/checkstyle.xml
%endif

# catch macro name errors
find . -type f -name '*.xml' | xargs perl -CSAD -lne '
          for (grep { $_ ne "PRODUCT_NAME" && $_ ne "VENDOR_NAME" && $_ ne "ENTERPRISE_LINUX_NAME" && $_ ne "VENDOR_SERVICE_NAME" } /\@\@(\w+)\@\@/g) {
              print;
              $exit = 1;
          }
          @r = /((..)?(PRODUCT_NAME|VENDOR_NAME|ENTERPRISE_LINUX_NAME|VENDOR_SERVICE_NAME)(..)?)/g ;
          while (@r) {
              $s = shift(@r); $f = shift(@r); $skip = shift(@r); $l = shift(@r);
              if ($f ne "@@" or $l ne "@@") {
                  print $s;
                  $exit = 1;
              }
          }
          END { exit $exit }'

echo "Building apidoc docbook sources"
ant -Dproduct.name="'$PRODUCT_NAME'" -Dprefix=%{buildroot} init-install apidoc-docbook
pushd build/reports/apidocs/docbook
%{_bindir}/xmllint --xinclude --postvalid book.xml > susemanager_api_doc.xml
popd

echo "Building apidoc asciidoc sources"
ant -Dproduct.name="'$PRODUCT_NAME'" -Dprefix=%{buildroot} init-install apidoc-asciidoc

# Don't use Java module com.sun.xml.bind if it isn't available. (only SUSE has it)
if [[ ! `java --list-modules | grep com.sun.xml.bind` ]]; then
    sed -i 's/--add-modules java.annotation,com.sun.xml.bind//' conf/default/rhn_taskomatic_daemon.conf
fi

%install
PRODUCT_NAME="%{productprettyname}"

%if 0%{?rhel}
export JAVA_HOME=/usr/lib/jvm/java-%{java_version}-openjdk/
%endif

export NO_BRP_STALE_LINK_ERROR=yes

mkdir -p %{buildroot}%{serverdir}/tomcat/webapps/rhn/WEB-INF/lib
%if 0%{?suse_version}
ant -Dproduct.name="'$PRODUCT_NAME'" -Dprefix=%{buildroot} -Dtomcat="tomcat9" install-tomcat9-suse
install -d -m 755 %{buildroot}%{serverdir}/tomcat/webapps/rhn/META-INF/
install -m 755 conf/rhn-tomcat9.xml %{buildroot}%{serverdir}/tomcat/webapps/rhn/META-INF/context.xml
%else
ant -Dproduct.name="'$PRODUCT_NAME'" -Dprefix=%{buildroot} install-tomcat
install -d -m 755 %{buildroot}%{_sysconfdir}/tomcat/Catalina/localhost/
install -m 644 conf/rhn-tomcat9.xml %{buildroot}%{_sysconfdir}/tomcat/Catalina/localhost/rhn.xml
%endif

# check spelling errors in all resources for English if aspell installed
[ -x "$(which aspell)" ] && scripts/spelling/check_java.sh .. en_US

install -d -m 755 %{buildroot}%{_sbindir}
install -d -m 755 %{buildroot}%{_unitdir}
install -d -m 755 %{buildroot}%{_bindir}
install -d -m 755 %{buildroot}%{_sysconfdir}/rhn
install -d -m 755 %{buildroot}%{_datadir}/rhn
install -d -m 755 %{buildroot}%{_datadir}/rhn/unit-tests
install -d -m 755 %{buildroot}%{_datadir}/rhn/lib
install -d -m 755 %{buildroot}%{_datadir}/rhn/classes
install -d -m 755 %{buildroot}%{_datadir}/rhn/config-defaults
install -d -m 755 %{buildroot}%{_datadir}/rhn/search
install -d -m 755 %{buildroot}%{_datadir}/rhn/search/lib
install -d -m 755 %{buildroot}%{_datadir}/spacewalk/taskomatic
install -d -m 755 %{buildroot}%{cobprofdir}
install -d -m 755 %{buildroot}%{cobprofdirup}
install -d -m 755 %{buildroot}%{cobprofdirwiz}
install -d -m 755 %{buildroot}%{cobdirsnippets}
install -d -m 755 %{buildroot}%{_localstatedir}/lib/spacewalk/scc
install -d -m 755 %{buildroot}%{_localstatedir}/lib/spacewalk/subscription-matcher

install -d -m 755 %{buildroot}%{_sysconfdir}/logrotate.d
install -d %{buildroot}%{userserverdir}/susemanager/salt
install -d %{buildroot}%{userserverdir}/susemanager/salt/salt_ssh
install -d %{buildroot}%{userserverdir}/susemanager/tmp

install -m 644 conf/default/rhn_hibernate.conf %{buildroot}%{_datadir}/rhn/config-defaults/rhn_hibernate.conf
install -m 644 conf/default/rhn_reporting_hibernate.conf %{buildroot}%{_datadir}/rhn/config-defaults/rhn_reporting_hibernate.conf
install -m 644 conf/default/rhn_taskomatic_daemon.conf %{buildroot}%{_datadir}/rhn/config-defaults/rhn_taskomatic_daemon.conf
install -m 644 conf/default/taskomatic.conf %{buildroot}%{_sysconfdir}/rhn/taskomatic.conf
install -m 644 conf/default/rhn_org_quartz.conf %{buildroot}%{_datadir}/rhn/config-defaults/rhn_org_quartz.conf
install -m 644 conf/rhn_java.conf %{buildroot}%{_datadir}/rhn/config-defaults
install -m 644 conf/rhn_java_sso.conf %{buildroot}%{_datadir}/rhn/config-defaults

# Adjust product tree tag
%if 0%{?is_opensuse}
sed -i -e 's/^java.product_tree_tag =.*$/java.product_tree_tag = Uyuni/' %{buildroot}%{_datadir}/rhn/config-defaults/rhn_java.conf
%else
sed -i -e 's/^java.product_tree_tag =.*$/java.product_tree_tag = Beta/' $RPM_BUILD_ROOT%{_prefix}/share/rhn/config-defaults/rhn_java.conf
%endif
# Adjust languages
sed -i -e '/# NOTE: for the RPMs this is defined at the SPEC!/d' %{buildroot}%{_datadir}/rhn/config-defaults/rhn_java.conf
sed -i -e 's/^java.supported_locales=.*$/java.supported_locales=%{supported_locales}/' %{buildroot}%{_datadir}/rhn/config-defaults/rhn_java.conf
install -m 644 conf/logrotate/rhn_web_api %{buildroot}%{_sysconfdir}/logrotate.d/rhn_web_api
install -m 644 conf/logrotate/gatherer %{buildroot}%{_sysconfdir}/logrotate.d/gatherer
# LOGROTATE >= 3.8 requires extra permission config
sed -i 's/#LOGROTATE-3.8#//' %{buildroot}%{_sysconfdir}/logrotate.d/rhn_web_api
install -m 755 scripts/taskomatic %{buildroot}%{_sbindir}
install -m 644 scripts/taskomatic.service %{buildroot}%{_unitdir}
# add rc link
ln -sf service %{buildroot}%{_sbindir}/rctaskomatic

install -m 644 scripts/unittest.xml %{buildroot}%{_datadir}/rhn/
install -m 644 build/webapp/rhnjava/WEB-INF/lib/rhn.jar %{buildroot}%{_datadir}/rhn/lib
%if ! 0%{?omit_tests} > 0
install -m 644 build/webapp/rhnjava/WEB-INF/lib/rhn-test.jar %{buildroot}%{_datadir}/rhn/lib
cp -a build/classes/com/redhat/rhn/common/conf/test/conf %{buildroot}%{_datadir}/rhn/unit-tests/
%endif
install -m 644 conf/log4j2.xml.taskomatic %{buildroot}%{_datadir}/rhn/classes/log4j2.xml
install -m 644 code/src/ehcache.xml %{buildroot}%{_datadir}/rhn/classes/ehcache.xml

install -d -m 755 %{buildroot}%{spacewalksnippetsdir}
install -m 644 conf/cobbler/snippets/default_motd  %{buildroot}%{spacewalksnippetsdir}/default_motd
install -m 644 conf/cobbler/snippets/keep_system_id  %{buildroot}%{spacewalksnippetsdir}/keep_system_id
install -m 644 conf/cobbler/snippets/post_reactivation_key  %{buildroot}%{spacewalksnippetsdir}/post_reactivation_key
install -m 644 conf/cobbler/snippets/post_delete_system  %{buildroot}%{spacewalksnippetsdir}/post_delete_system
install -m 644 conf/cobbler/snippets/redhat_register_using_salt    %{buildroot}%{spacewalksnippetsdir}/redhat_register_using_salt
install -m 644 conf/cobbler/snippets/minion_script    %{buildroot}%{spacewalksnippetsdir}/minion_script
install -m 644 conf/cobbler/snippets/sles_no_signature_checks %{buildroot}%{spacewalksnippetsdir}/sles_no_signature_checks
install -m 644 conf/cobbler/snippets/wait_for_networkmanager_script %{buildroot}%{spacewalksnippetsdir}/wait_for_networkmanager_script
install -m 644 conf/cobbler/snippets/autoyast_channels %{buildroot}%{spacewalksnippetsdir}/autoyast_channels
install -m 644 conf/cobbler/snippets/root_ca %{buildroot}%{spacewalksnippetsdir}/root_ca

# special links for rhn-search
RHN_SEARCH_BUILD_DIR=%{_datadir}/rhn/search/lib
ln -s -f %{_javadir}/postgresql-jdbc.jar $RPM_BUILD_ROOT$RHN_SEARCH_BUILD_DIR/postgresql-jdbc.jar
ln -s -f %{_javadir}/ongres-scram/client.jar $RPM_BUILD_ROOT$RHN_SEARCH_BUILD_DIR/ongres-scram_client.jar
ln -s -f %{_javadir}/ongres-scram/common.jar $RPM_BUILD_ROOT$RHN_SEARCH_BUILD_DIR/ongres-scram_common.jar

# write an include file for the filelist
if [ -e %{_javadir}/ongres-stringprep/stringprep.jar ]; then
    ln -s -f %{_javadir}/ongres-stringprep/stringprep.jar $RPM_BUILD_ROOT$RHN_SEARCH_BUILD_DIR/ongres-stringprep_stringprep.jar
    ln -s -f %{_javadir}/ongres-stringprep/saslprep.jar $RPM_BUILD_ROOT$RHN_SEARCH_BUILD_DIR/ongres-stringprep_saslprep.jar
    echo "
%{serverdir}/tomcat/webapps/rhn/WEB-INF/lib/ongres-scram_client.jar
%{serverdir}/tomcat/webapps/rhn/WEB-INF/lib/ongres-scram_common.jar
%{serverdir}/tomcat/webapps/rhn/WEB-INF/lib/ongres-stringprep_stringprep.jar
%{serverdir}/tomcat/webapps/rhn/WEB-INF/lib/ongres-stringprep_saslprep.jar
%{_datadir}/rhn/search/lib/ongres-scram_client.jar
%{_datadir}/rhn/search/lib/ongres-scram_common.jar
%{_datadir}/rhn/search/lib/ongres-stringprep_stringprep.jar
%{_datadir}/rhn/search/lib/ongres-stringprep_saslprep.jar
    " > .mfiles-postgresql
else
    echo "
%{serverdir}/tomcat/webapps/rhn/WEB-INF/lib/ongres-scram_client.jar
%{serverdir}/tomcat/webapps/rhn/WEB-INF/lib/ongres-scram_common.jar
%{_datadir}/rhn/search/lib/ongres-scram_client.jar
%{_datadir}/rhn/search/lib/ongres-scram_common.jar
    " > .mfiles-postgresql
fi

# install apidoc sources
mkdir -p %{buildroot}%{_docdir}/%{name}/xml
install -m 644 build/reports/apidocs/docbook/susemanager_api_doc.xml %{buildroot}%{_docdir}/%{name}/xml/susemanager_api_doc.xml
cp -R build/reports/apidocs/asciidoc/ %{buildroot}%{_docdir}/%{name}/asciidoc/
# delete JARs which must not be deployed
rm -rf %{buildroot}%{serverdir}/tomcat/webapps/rhn/WEB-INF/lib/jspapi.jar
rm -rf %{buildroot}%{serverdir}/tomcat/webapps/rhn/WEB-INF/lib/jasper5-compiler.jar
rm -rf %{buildroot}%{serverdir}/tomcat/webapps/rhn/WEB-INF/lib/jasper5-runtime.jar
rm -rf %{buildroot}%{serverdir}/tomcat/webapps/rhn/WEB-INF/lib/tomcat*.jar
%if 0%{?omit_tests} > 0
rm -rf %{buildroot}%{_datadir}/rhn/lib/rhn-test.jar
rm -rf %{buildroot}/classes/com/redhat/rhn/common/conf/test/conf
rm -rf %{buildroot}%{_datadir}/rhn/unittest.xml
%endif

# create log dir
mkdir -p %{buildroot}%{_var}/log/rhn

# Prettifying symlinks
mv %{buildroot}%{serverdir}/tomcat/webapps/rhn/WEB-INF/lib/jboss-loggingjboss-logging.jar %{buildroot}%{serverdir}/tomcat/webapps/rhn/WEB-INF/lib/jboss-logging.jar

# Removing unused symlinks.
%if 0%{?rhel}
rm -rf %{buildroot}%{serverdir}/tomcat/webapps/rhn/WEB-INF/lib/javamailmail.jar
%endif

# show all JAR symlinks
echo "#### SYMLINKS START ####"
find %{buildroot}%{serverdir}/tomcat/webapps/rhn/WEB-INF/lib -name *.jar
echo "#### SYMLINKS END ####"

%pre -n spacewalk-taskomatic
%if !0%{?rhel}
%service_add_pre taskomatic.service
%endif

%post
%if 0%{?rhel}
echo "Trying to start optional rngd service..."
systemctl start rngd ||:
%endif

%post -n spacewalk-taskomatic
%if 0%{?rhel}
%{systemd_post} taskomatic.service
%else
%service_add_post taskomatic.service
%endif

%preun -n spacewalk-taskomatic
%if 0%{?rhel}
%systemd_preun taskomatic.service
%else
%service_del_preun taskomatic.service
%endif

%postun -n spacewalk-taskomatic
%if 0%{?rhel}
%{systemd_postun} taskomatic.service
%else
%service_del_postun taskomatic.service
%endif

%post config
if [ ! -e %{_localstatedir}/log/rhn/rhn_web_api.log ]; then
    touch %{_localstatedir}/log/rhn/rhn_web_api.log
fi
chown tomcat:%{apache_group} %{_localstatedir}/log/rhn/rhn_web_api.log

if [ ! -e %{_localstatedir}/log/rhn/gatherer.log ]; then
    touch %{_localstatedir}/log/rhn/gatherer.log
fi
chown tomcat:%{apache_group} %{_localstatedir}/log/rhn/gatherer.log

if [ ! -d %{_localstatedir}/lib/salt/.ssh ]; then
    mkdir -p %{_localstatedir}/lib/salt/.ssh
    chown %{salt_user_group}:%{salt_user_group} -R %{_localstatedir}/lib/salt/.ssh
    chmod 700 %{_localstatedir}/lib/salt/.ssh
fi

if [ -e /srv/susemanager/salt/salt_ssh/mgr_ssh_id ]; then
    mv /srv/susemanager/salt/salt_ssh/mgr_ssh_id %{_localstatedir}/lib/salt/.ssh/mgr_ssh_id
    cp /srv/susemanager/salt/salt_ssh/mgr_ssh_id.pub %{_localstatedir}/lib/salt/.ssh/mgr_ssh_id.pub
    chown %{salt_user_group}:%{salt_user_group} %{_localstatedir}/lib/salt/.ssh/mgr_ssh_id.pub
fi

%files
%defattr(-,root,root)
%dir %{serverdir}
%dir %{_localstatedir}/lib/spacewalk
%defattr(644,tomcat,tomcat,775)
%attr(775, %{salt_user_group}, %{salt_user_group}) %dir %{userserverdir}/susemanager/salt/salt_ssh
%attr(775, tomcat, tomcat) %dir %{serverdir}/tomcat/webapps
%dir %{userserverdir}/susemanager
%dir %{userserverdir}/susemanager/salt
%attr(770, tomcat, %{salt_user_group}) %dir %{userserverdir}/susemanager/tmp
%dir %{serverdir}/tomcat/webapps/rhn/
%{serverdir}/tomcat/webapps/rhn/apidoc/
%{serverdir}/tomcat/webapps/rhn/css/
%{serverdir}/tomcat/webapps/rhn/errata/
%{serverdir}/tomcat/webapps/rhn/img/
%{serverdir}/tomcat/webapps/rhn/META-INF/
%{serverdir}/tomcat/webapps/rhn/schedule/
%{serverdir}/tomcat/webapps/rhn/systems/
%{serverdir}/tomcat/webapps/rhn/users/
%{serverdir}/tomcat/webapps/rhn/errors/
%{serverdir}/tomcat/webapps/rhn/*.jsp
%{serverdir}/tomcat/webapps/rhn/WEB-INF/classes
%{serverdir}/tomcat/webapps/rhn/WEB-INF/decorators
%{serverdir}/tomcat/webapps/rhn/WEB-INF/includes
%{serverdir}/tomcat/webapps/rhn/WEB-INF/nav
%{serverdir}/tomcat/webapps/rhn/WEB-INF/pages
%{serverdir}/tomcat/webapps/rhn/WEB-INF/*.xml

# all jars in WEB-INF/lib/
%dir %{serverdir}/tomcat
%dir %{serverdir}/tomcat/webapps
%{serverdir}/tomcat/webapps/rhn/WEB-INF/lib
%exclude %{serverdir}/tomcat/webapps/rhn/WEB-INF/lib/postgresql-jdbc.jar
%exclude %{serverdir}/tomcat/webapps/rhn/WEB-INF/lib/ongres-*.jar

# owned by cobbler needs cobbler permissions
%attr(755,root,root) %dir %{cobprofdir}
%attr(755,root,root) %dir %{cobdirsnippets}
# owned by uyuni
%dir %{cobprofdirup}
%dir %{cobprofdirwiz}
%dir %{spacewalksnippetsdir}
%config %{spacewalksnippetsdir}/default_motd
%config %{spacewalksnippetsdir}/keep_system_id
%config %{spacewalksnippetsdir}/post_reactivation_key
%config %{spacewalksnippetsdir}/post_delete_system
%config %{spacewalksnippetsdir}/redhat_register_using_salt
%config %{spacewalksnippetsdir}/minion_script
%config %{spacewalksnippetsdir}/sles_no_signature_checks
%config %{spacewalksnippetsdir}/wait_for_networkmanager_script
%config %{spacewalksnippetsdir}/autoyast_channels
%config %{spacewalksnippetsdir}/root_ca
%if 0%{?suse_version}
%config(noreplace) %{serverdir}/tomcat/webapps/rhn/META-INF/context.xml
%else
%config(noreplace) %{_sysconfdir}/tomcat/Catalina/localhost/rhn.xml
%endif
%attr(755,root,root) %dir %{cobblerdir}

%attr(755, tomcat, root) %dir %{_localstatedir}/lib/spacewalk/scc
%attr(755, tomcat, root) %dir %{_localstatedir}/lib/spacewalk/subscription-matcher
%dir %{serverdir}/tomcat/webapps/rhn/WEB-INF

%files -n spacewalk-taskomatic
%defattr(644,root,root,775)
%attr(755, root, root) %{_sbindir}/taskomatic
%attr(644, root, root) %{_unitdir}/taskomatic.service
%{_datarootdir}/spacewalk/taskomatic
%{_sbindir}/rctaskomatic

%files config
%defattr(644,root,root,755)
%{_datadir}/rhn/config-defaults/rhn_hibernate.conf
%{_datadir}/rhn/config-defaults/rhn_reporting_hibernate.conf
%{_datadir}/rhn/config-defaults/rhn_taskomatic_daemon.conf
%config(noreplace) %{_sysconfdir}/rhn/taskomatic.conf
%{_datadir}/rhn/config-defaults/rhn_org_quartz.conf
%{_datadir}/rhn/config-defaults/rhn_java.conf
%{_datadir}/rhn/config-defaults/rhn_java_sso.conf
%config %{_sysconfdir}/logrotate.d/rhn_web_api
%config %{_sysconfdir}/logrotate.d/gatherer
%dir %{_datadir}/spacewalk
%if 0%{?rhel}
%dir %{_var}/log/rhn
%else
%attr(770,root,%{apache_group}) %dir %{_var}/log/rhn
%endif

%files lib
%defattr(644,root,root,755)
%dir %{_datadir}/rhn
%dir %{_datadir}/rhn/lib
%dir %{_datadir}/rhn/classes
%{_datadir}/rhn/classes/log4j2.xml
%{_datadir}/rhn/classes/ehcache.xml
%{_datadir}/rhn/lib/rhn.jar

%files postgresql -f .mfiles-postgresql
%defattr(644,root,root,755)
%dir %{_datadir}/rhn/search
%dir %{_datadir}/rhn/search/lib
%dir %{serverdir}
%dir %{susemanagershareddir}
%{serverdir}/tomcat/webapps/rhn/WEB-INF/lib/postgresql-jdbc.jar
%{_datadir}/rhn/search/lib/postgresql-jdbc.jar
%defattr(644,tomcat,tomcat,775)
%dir %{serverdir}/tomcat
%dir %{serverdir}/tomcat/webapps

%changelog
openSUSE Build Service is sponsored by