# JAVA # https://docs.fedoraproject.org/en-US/packaging-guidelines/Java/ # https://fedora-java.github.io/howto/latest/index # https://rpm-packaging-guide.github.io/ # https://rpm-software-management.github.io/rpm/manual/macros.html # https://docs.fedoraproject.org/en-US/quick-docs/publish-rpm-on-copr %global _owner pgnd %global _build_timestamp %( date +%%Y%%m%%d_%%H%%M%%S --utc ) %global _dist .%{_build_timestamp}.%{_owner}.fc%{fedora} # https://stackoverflow.com/questions/47838041/rpmbuild-how-to-disable-check-buildroot # https://rpm-software-management.github.io/rpm/manual/dependency_generators.html # %%define __spec_install_pre /bin/true # %%define __arch_install_post %%{nil} # fix? OSGI error # %%define __os_install_post %%{nil} # %%define _build_id_links none # %%global __javapackages_launch_osgi %%{nil} # %%global _with_osgi_provides 0 # %%global _with_osgi 0 # %%global __requires_exclude ^javapackages.* %global _disable_source_fetch 0 %global debug_package %{nil} # %%undefine _auto_set_build_flags %global _hardened_build 1 # %%global __brp_mangle_shebangs %%{nil} # %%global __brp_strip %%{nil} # %%define __requires_exclude ^.*/xxx/bin/python.*$ # %%define __requires_exclude_from ^.*/xxx/bin/python.*$ # %%bcond_with XXX : opt build with XXX; default, without # %%bcond_without XXX : opt build without XXX; default, with # KEYCLOAK # https://www.keycloak.org/ # https://github.com/keycloak/keycloak # https://github.com/abn/keycloak-rpm/blob/master/keycloak.spec # https://dev.to/mohammedalics/optimized-keycloak-build-4gep %global _kc_name keycloak %global _kc_pkgnm keycloak %global _kc_unitnm keycloak %global _kc_comment Content detection and analysis framework %global _kc_descrip %{expand: %{_kc_comment}.} # https://spdx.org/licenses/Apache-2.0.html %global _kc_license Apache-2.0 %global _kc_scm_repo keycloak/keycloak %global _kc_scm_url https://github.com/%{_kc_scm_repo}.git # USE RELEASE TAG! # Make sure it is not possible to run snapshot server against production DB by default # https://github.com/keycloak/keycloak/issues/30364 # %%global _kc_scm_branch main # %%global _kc_scm_branch release/26.1 %global _kc_scm_branch 26.1.2 %global _kc_scm_branch_norm %( echo %{_kc_scm_branch} | sed 's|/|-|g' | sed 's|_|-|g') # id keycloak # uid=390(keycloak) gid=390(keycloak) groups=390(keycloak),27(mysql),349(valkey),26(postgres) %global _kc_usr keycloak %global _kc_grp keycloak %global _kc_cache_dir /var/cache/keycloak %global _kc_conf_dir /usr/local/etc/keycloak %global _kc_conf_file keycloak-config-custom.xml %global _kc_sec_dir /data/etc/security/credentials/keycloak %global _kc_sec_env_file keycloak.sec.env %global _kc_home_dir /var/lib/keycloak %global _kc_install_dir /usr/local/keycloak-pgnd %global _kc_log_dir /var/log/keycloak %global _kc_pid_file %{_kc_pkgnm}.pid %global _kc_run_dir /run/keycloak %global _kc_unit_dir /etc/systemd/system # https://docs.fedoraproject.org/en-US/packaging-guidelines/SourceURL/ %global forgeurl0 %{_kc_scm_url} %global branch0 %{_kc_scm_branch} %global commit0 %( git ls-remote %{_kc_scm_url} | grep /%{_kc_scm_branch}$ | cut -f1 ) %global shortcommit0 %(c=%{commit0}; echo ${c:0:7}) %global archiveext0 tar.gz %global archivename0 %( echo %{_kc_scm_repo} | sed 's|/|-|g')-%{shortcommit0} %global archiveurl0 https://api.github.com/repos/%{_kc_scm_repo}/tarball/%{_kc_scm_branch} %global forgesource0 %{archiveurl0} %global forgesetupargs0 -n %{archivename0} %forgemeta -i -a %global dist %{_dist} # Vendor Pinning Vendor: %{_owner} # NEVRA (n-e:v-r.a) Name: %{_kc_pkgnm} Epoch: 3 # https://docs.fedoraproject.org/en-US/packaging-guidelines/Versioning/ Version: %{scm0}_%( echo %{_kc_scm_branch_norm} | sed 's|-|_|g' ) Release: 0%{?dist} # https://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ %global _same_evr %{epoch}:%{version}-%{release} Summary: %{_kc_comment} License: %{_kc_license} URL: %{forgeurl0} Source0: %{forgesource0} Source100: %{_kc_unitnm}.service Source101: %{_kc_unitnm}.target Source102: %{_kc_conf_file} Source103: log4j2.xml Source200: %{_kc_name}.rsyslog Source210: %{_kc_name}.logrotate # https://docs.fedoraproject.org/en-US/packaging-guidelines/Scriptlets # https://docs.pagure.org/packaging-guidelines/Packaging:Scriptlets.html BuildRequires: maven-local BuildRequires: mvn(org.apache.felix:maven-bundle-plugin) BuildRequires: systemd BuildRequires: systemd-rpm-macros %{?systemd_requires} Requires(pre): user(%{_kc_usr}) Requires(pre): group(%{_kc_grp}) Requires: java-21-openjdk-headless Requires: logrotate Requires: rsyslog Provides: keycloak = %{_same_evr} Obsoletes: keycloak < %{_same_evr} %description %{_kc_descrip} %prep echo '##### STARTING PREP #####' export LANG=en_US.UTF-8 export LC_ALL=en_US.UTF-8 %forgesetup -a %build echo '##### STARTING BUILD #####' cd %{_builddir}/%{extractdir0} export LANG=en_US.UTF-8 export LC_ALL=en_US.UTF-8 # OutOfMemoryError # https://cwiki.apache.org/confluence/display/maven/outofmemoryerror # https://confluence.atlassian.com/confkb/how-to-fix-out-of-memory-errors-by-increasing-available-memory-154071.html # Use MaxMetaspaceSize in place of MaxPermSize and MetaspaceSize in place of PermSize in jdk17. # https://docs.oracle.com/en/java/javase/17/docs/specs/man/java.html # https://maven.apache.org/docs/3.3.1/release-notes.html#JVM_and_Command_Line_Options MAVEN_OPTS='' MAVEN_OPTS+=' -Xmx2048m -Xms1024m' MAVEN_OPTS+=' -XX:MaxMetaspaceSize=512m' MAVEN_OPTS+=' -Djava.awt.headless=true' #MAVEN_OPTS+=' -Djava.util.logging.manager=org.jboss.logmanager.LogManager' export MAVEN_OPTS chmod +x ./mvnw ./mvnw \ -pl quarkus/deployment,quarkus/dist \ -am \ -DskipTests \ clean \ install \ --threads ${RPM_BUILD_NCPUS} # --quiet \ # --also-make \ # \ --projects :keycloak %install echo '##### STARTING INSTALL #####' cd %{_builddir}/%{extractdir0} # RPM_BUILD_ROOT = /builddir/build/BUILD/keycloak-git_main-build/BUILDROOT/ mkdir -p ${RPM_BUILD_ROOT}/%{_kc_conf_dir} mkdir -p ${RPM_BUILD_ROOT}/%{_kc_install_dir} mkdir -p ${RPM_BUILD_ROOT}/%{_kc_unit_dir} mkdir -p ${RPM_BUILD_ROOT}/%{_sysconfdir}/rsyslog.d mkdir -p ${RPM_BUILD_ROOT}/%{_sysconfdir}/logrotate.d # /builddir/build/BUILD/keycloak-git_main-build/keycloak-keycloak-f54bb16/quarkus/dist/target/keycloak-999.0.0-SNAPSHOT.tar.gz _kc_buildtargz_fullpath=$( find %{_builddir}/%{extractdir0}/ -type f -iname "keycloak*.tar.gz" -and -not -iname "*tests*") _kc_buildtargz_dirpath=$( dirname ${_kc_buildtargz_fullpath} ) _kc_buildtargz_basename=$( basename ${_kc_buildtargz_fullpath} ) # GENERATE .service FILES, scripts sed -i \ -e 's|__KC_USR__|%{_kc_usr}|g' \ -e 's|__KC_GRP__|%{_kc_grp}|g' \ -e 's|__KC_CACHEDIR__|%{_kc_cache_dir}|g' \ -e 's|__KC_CONF_DIR__|%{_kc_conf_dir}|g' \ -e 's|__KC_CONF_FILE__|%{_kc_conf_file}|g' \ -e 's|__KC_CONF_FILE__|%{_kc_home_dir}|g' \ -e 's|__KC_INSTALL_DIR__|%{_kc_install_dir}|g' \ -e 's|__KC_LOG_DIR__|%{_kc_log_dir}|g' \ -e 's|__KC_PID_FILE__|%{_kc_pid_file}|g' \ -e 's|__KC_RUN_DIR__|%{_kc_run_dir}|g' \ -e 's|__KC_SEC_DIR__|%{_kc_sec_dir}|g' \ -e 's|__KC_SEC_ENV_FILE__|%{_kc_sec_env_file}|g' \ %{SOURCE100} %{SOURCE102} %{SOURCE200} %{SOURCE210} install -D -p -m 0644 \ ${_kc_buildtargz_fullpath} \ ${RPM_BUILD_ROOT}/%{_kc_install_dir}/ pushd ${RPM_BUILD_ROOT}/%{_kc_install_dir}/ tar --strip-components=1 -C . -xvf ./${_kc_buildtargz_basename} rm -f ./${_kc_buildtargz_basename} popd # systemd unit files install -D -p -m 0644 \ %{SOURCE100} \ ${RPM_BUILD_ROOT}/%{_kc_unit_dir}/%{_kc_unitnm}.service install -D -p -m 0644 \ %{SOURCE101} \ ${RPM_BUILD_ROOT}/%{_kc_unit_dir}/%{_kc_unitnm}.target # conf files install -D -p -m 0644 \ %{SOURCE102} \ ${RPM_BUILD_ROOT}/%{_kc_conf_dir}/%{_kc_conf_file} # rsyslog files install -D -p -m 664 \ %{SOURCE200} \ ${RPM_BUILD_ROOT}/%{_sysconfdir}/rsyslog.d/%{_kc_name}.conf # logrotate files install -D -p -m 644 \ %{SOURCE210} \ ${RPM_BUILD_ROOT}/%{_sysconfdir}/logrotate.d/%{_kc_name} install -D -p -m 0644 \ %{SOURCE103} \ ${RPM_BUILD_ROOT}/%{_kc_conf_dir}/log4j2.xml %check %pre %post systemctl daemon-reload systemctl --no-reload enable my-servers.timer systemctl restart --quiet %{_kc_unitnm}.service %preun systemctl --no-reload stop --no-warn %{_kc_unitnm}.service %postun systemctl daemon-reload %files # http://ftp.rpm.org/max-rpm/s1-rpm-inside-files-list-directives.html %doc %license %dir %{_kc_install_dir} %{_kc_install_dir}/* %attr(0644,root,root) %{_kc_unit_dir}/%{_kc_unitnm}.service %attr(0644,root,root) %{_kc_unit_dir}/%{_kc_unitnm}.target %attr(0644,%{_kc_usr},%{_kc_grp}) %{_kc_conf_dir}/%{_kc_conf_file} %attr(0644,%{_kc_usr},%{_kc_grp}) %{_kc_conf_dir}/log4j2.xml %{_sysconfdir}/rsyslog.d/%{_kc_name}.conf %{_sysconfdir}/logrotate.d/%{_kc_name} %changelog * Tue Mar 4 2025 pgnd _ - bump 1741149752