# # spec file for package saptune # # Copyright (c) 2017-2020 SUSE LLC. # # 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 http://bugs.opensuse.org/ # %if ! %{defined _fillupdir} %define _fillupdir /var/adm/fillup-templates %endif Name: saptune Version: 2.0.3 Release: 0 License: GPL-3.0 Summary: Comprehensive system tuning management for SAP solutions Url: https://www.suse.com/products/sles-for-sap Group: System/Management Source0: %{name}-%{version}.tgz Source1: rpmlintrc Source2: %{name}-1.1.9.tgz BuildRequires: go tuned bash-completion Requires: tuned vim %if 0%{?sle_version} == 120100 Requires: sapinit-systemd-compat %endif %if 0%{?sle_version} >= 150000 Requires: systemd >= 234-24.42 %else Requires: systemd >= 228-142.1 %endif Requires: /usr/bin/cpupower Requires: sysstat Requires: uuidd ExclusiveArch: x86_64 ppc64le %{?systemd_requires} %define GONS github.com/SUSE %define SRCDIR src/%{GONS}/%{name} %description The utility adjusts system parameters such as kernel parameters and resource limits to allow running various SAP solutions at satisfactory performance. The utility can be used in place of sapconf. %prep mkdir -p %{SRCDIR}_v2 cd %{SRCDIR}_v2 tar xf %{S:0} cd %{_builddir} mkdir -p %{SRCDIR}_v1 cd %{SRCDIR}_v1 tar xf %{S:2} %build export GOPATH=$(pwd) ln -s %{_builddir}/%{SRCDIR}_v1 %{SRCDIR} cd %{SRCDIR} gzip ospackage/man/saptune_v1.8 go build -o saptune_v1 cd %{_builddir} rm %{SRCDIR} mv %{SRCDIR}_v2 %{SRCDIR} cd %{SRCDIR} gzip ospackage/man/saptune.8 gzip ospackage/man/saptune_v2.8 gzip ospackage/man/saptune-note.5 gzip ospackage/man/saptune-migrate.7 gzip ospackage/%{_datadir}/doc/packages/%{name}/sapconf2saptune.1 go build %install cd %{SRCDIR} mkdir -p %{buildroot}/%{_sbindir} install -m 0755 %{name} %{buildroot}/%{_sbindir}/ install -m 0755 ../%{name}_v1/%{name}_v1 %{buildroot}/%{_sbindir}/%{name}_v1 # Sysconfig file mkdir -p %{buildroot}/%{_fillupdir} install -m 0644 ospackage/etc/sysconfig/%{name} %{buildroot}/%{_fillupdir}/sysconfig.%{name} # scripts location mkdir -p %{buildroot}/%{_datadir}/%{name}/scripts pushd ospackage/%{_datadir}/%{name}/scripts for scriptfiles in *; do install -m 0755 $scriptfiles %{buildroot}/%{_datadir}/%{name}/scripts done popd # note files location mkdir -p %{buildroot}/%{_datadir}/%{name}/notes pushd ospackage/%{_datadir}/%{name}/notes for notefiles in *; do case $notefiles in 1984787|2205917|1557506) # SLE12 notes %if 0%{?sle_version} < 150000 install -m 0644 $notefiles %{buildroot}/%{_datadir}/%{name}/notes/ %endif ;; 2578899|2684254) # SLE15 notes %if 0%{?sle_version} >= 150000 install -m 0644 $notefiles %{buildroot}/%{_datadir}/%{name}/notes/ %endif ;; *) install -m 0644 $notefiles %{buildroot}/%{_datadir}/%{name}/notes/ ;; esac done popd # NoteTemplate file install -m 0644 ospackage/%{_datadir}/%{name}/NoteTemplate.conf %{buildroot}/%{_datadir}/%{name}/NoteTemplate.conf # solution definition install -m 0644 ospackage/%{_datadir}/%{name}/solsdeprecated %{buildroot}/%{_datadir}/%{name}/solsdeprecated %if 0%{?sle_version} < 150000 install -m 0644 ospackage/%{_datadir}/%{name}/solutions %{buildroot}/%{_datadir}/%{name}/solutions %else install -m 0644 ospackage/%{_datadir}/%{name}/solutions_15 %{buildroot}/%{_datadir}/%{name}/solutions %endif # vendor file location mkdir -p %{buildroot}/%{_sysconfdir}/%{name}/extra # override file location mkdir -p %{buildroot}/%{_sysconfdir}/%{name}/override # manual pages mkdir -p %{buildroot}/%{_mandir}/man5 install -m 0644 ospackage/man/saptune-note.5.gz %{buildroot}/%{_mandir}/man5/ mkdir -p %{buildroot}/%{_mandir}/man7 install -m 0644 ospackage/man/saptune-migrate.7.gz %{buildroot}/%{_mandir}/man7/ mkdir -p %{buildroot}/%{_mandir}/man8 install -m 0644 ospackage/man/saptune.8.gz %{buildroot}/%{_mandir}/man8/ install -m 0644 ospackage/man/saptune_v2.8.gz %{buildroot}/%{_mandir}/man8/ install -m 0644 ../%{name}_v1/ospackage/man/saptune_v1.8.gz %{buildroot}/%{_mandir}/man8/ # One tuned profile mkdir -p %{buildroot}/%{_libexecdir}/tuned/%{name} cp ospackage/profile/* %{buildroot}/%{_libexecdir}/tuned/%{name}/ ls -lR %{buildroot}/%{_libexecdir}/tuned/%{name}/ # bash-completion mkdir -p %{buildroot}/%{_datadir}/bash-completion/completions install -m 0644 ospackage/%{_datadir}/bash-completion/completions/%{name}.completion %{buildroot}%{_datadir}/bash-completion/completions/%{name} # helper script for support mkdir -p %{buildroot}/%{_datadir}/doc/packages/%{name} install -m 0755 ospackage/%{_datadir}/doc/packages/%{name}/sapconf2saptune %{buildroot}/%{_datadir}/doc/packages/%{name}/sapconf2saptune install -m 0644 ospackage/%{_datadir}/doc/packages/%{name}/sapconf2saptune.1.gz %{buildroot}/%{_datadir}/doc/packages/%{name} %pre if [ $1 -ne 1 ]; then # package update NOTEDIR=/usr/share/saptune/notes STATEDIR=/var/lib/saptune/saved_state if [ ! -d ${NOTEDIR} ]; then # installed package version is < 2.0, update v1 to v2 # indicated by missing directory /usr/share/saptune/notes # only change version to '1' (compatibility), if saptune is really used # so check, if a solution or a note is defined if (grep '^TUNE_FOR_SOLUTIONS[[:space:]]*=[[:space:]]*""' /etc/sysconfig/saptune >/dev/null 2>&1) && (grep '^TUNE_FOR_NOTES[[:space:]]*=[[:space:]]*""' /etc/sysconfig/saptune >/dev/null 2>&1); then echo "saptune NOT configured and NOT used - version will be set to '2'" else echo "saptune configured and used - version will be set to '1'" touch /tmp/update_v1tov2_saptune_inst || : # preserve 'old' BOBJ and ASE note definition files for saptune # version 1 compatibility if [ -f /etc/saptune/extra/SAP_BOBJ-SAP_Business_OBJects.conf ]; then cp /etc/saptune/extra/SAP_BOBJ-SAP_Business_OBJects.conf /etc/saptune/extra/SAP_BOBJ_n2c.conf fi if [ -f /etc/saptune/extra/SAP_ASE-SAP_Adaptive_Server_Enterprise.conf ]; then cp /etc/saptune/extra/SAP_ASE-SAP_Adaptive_Server_Enterprise.conf /etc/saptune/extra/SAP_ASE_n2c.conf fi fi #else # package version 2.0 or later fi #else # initial installation fi %post %fillup_only -n saptune # workaround for the missing directory. mkdir -p /etc/security/limits.d if [ $1 -ne 1 ]; then # package update if [ -f /tmp/update_v1tov2_saptune_inst ]; then # update from v1 to v2 /usr/share/saptune/scripts/upd_helper v1tov2pi || : else # update from v2 to v2, call update helper script in posttrans touch /tmp/update_sle12tosel15_saptune_inst || : # clean up some leftover files from older saptune v2 versions /usr/share/saptune/scripts/upd_helper cleanup || : fi #else # initial install fi %preun test -n "$FIRST_ARG" || FIRST_ARG=$1 if [ $FIRST_ARG -eq 0 ]; then # Package removal, not upgrade # revert settings if (grep '^TUNE_FOR_SOLUTIONS[[:space:]]*=[[:space:]]*""' /etc/sysconfig/saptune >/dev/null 2>&1) && (grep '^TUNE_FOR_NOTES[[:space:]]*=[[:space:]]*""' /etc/sysconfig/saptune >/dev/null 2>&1); then # saptune note configured and not used - nothing to do : else # saptune configured and used - revert settings to clean up the system saptune daemon revert >/dev/null 2>&1 || : fi # clean up saved states left over rm -rf /var/lib/saptune/parameter/* /var/lib/saptune/saved_state/* || : # to suppress error messages from tuned, if the current active profile is # the removed saptune profile stvers=$(grep ^SAPTUNE_VERSION= /etc/sysconfig/saptune | awk -F '"' '{ print $2 }') (systemctl -q is-active tuned && [[ $(cat /etc/tuned/active_profile) == saptune ]] ) && ([[ "$stvers" == 1 ]] && tuned-adm off; /usr/sbin/saptune daemon stop >/dev/null 2>&1) || : # preserve 'old' BOBJ and ASE note definition files for saptune # version 1 compatibility if [ -f /etc/saptune/extra/SAP_BOBJ-SAP_Business_OBJects.conf ]; then echo "warning: /etc/saptune/extra/SAP_BOBJ-SAP_Business_OBJects.conf saved as /etc/saptune/extra/SAP_BOBJ-SAP_Business_OBJects.rpmsave" mv /etc/saptune/extra/SAP_BOBJ-SAP_Business_OBJects.conf /etc/saptune/extra/SAP_BOBJ-SAP_Business_OBJects.rpmsave || : fi if [ -f /etc/saptune/extra/SAP_ASE-SAP_Adaptive_Server_Enterprise.conf ]; then echo "warning: /etc/saptune/extra/SAP_ASE-SAP_Adaptive_Server_Enterprise.conf saved as /etc/saptune/extra/SAP_ASE-SAP_Adaptive_Server_Enterprise.conf.rpmsave" mv /etc/saptune/extra/SAP_ASE-SAP_Adaptive_Server_Enterprise.conf /etc/saptune/extra/SAP_ASE-SAP_Adaptive_Server_Enterprise.conf.rpmsave || : fi # preserve saptune configuration, if saptune was used # so check, if a solution or a note is defined if (grep '^TUNE_FOR_SOLUTIONS[[:space:]]*=[[:space:]]*""' /etc/sysconfig/saptune >/dev/null 2>&1) && (grep '^TUNE_FOR_NOTES[[:space:]]*=[[:space:]]*""' /etc/sysconfig/saptune >/dev/null 2>&1) && (grep '^NOTE_APPLY_ORDER[[:space:]]*=[[:space:]]*""' /etc/sysconfig/saptune >/dev/null 2>&1); then rm /etc/sysconfig/saptune || : else echo "warning: /etc/sysconfig/saptune saved as /etc/sysconfig/saptune.rpmsave" mv /etc/sysconfig/saptune /etc/sysconfig/saptune.rpmsave || : fi fi %posttrans -p /bin/bash # Use a real bash script with an explicit "exit 0" at the end to be by default fail safe # an explicit "exit 1" must be use to enforce package install/upgrade/erase failure where needed if [ -f /tmp/update_v1tov2_saptune_inst ]; then # update from v1 to v2 rm -f /tmp/update_v1tov2_saptune_inst || : # get back custom note definition files for BOBJ and/or ASE # needed for migration, if customer had applied these notes /usr/share/saptune/scripts/upd_helper v1tov2pt || : fi if [ -f /tmp/update_sle12tosel15_saptune_inst ]; then rm -f /tmp/update_sle12tosel15_saptune_inst || : # check for SAP Note name changes between SLE12 and SLE15 /usr/share/saptune/scripts/upd_helper sle12to15pt || : fi exit 0 %files %defattr(-,root,root) %{_fillupdir}/sysconfig.%{name} %{_sbindir}/%{name} %{_sbindir}/%{name}_v1 %{_mandir}/man5/* %{_mandir}/man7/* %{_mandir}/man8/* %dir %{_libexecdir}/tuned/%{name} %{_libexecdir}/tuned/%{name}/* %dir %{_sysconfdir}/%{name} %dir %{_sysconfdir}/%{name}/extra %dir %{_sysconfdir}/%{name}/override %dir %{_datadir}/%{name} %dir %{_datadir}/%{name}/notes %dir %{_datadir}/%{name}/scripts %{_datadir}/%{name}/notes/* %{_datadir}/%{name}/scripts/* %{_datadir}/%{name}/NoteTemplate.conf %{_datadir}/%{name}/solutions %{_datadir}/%{name}/solsdeprecated %{_datadir}/bash-completion/completions/%{name} %dir %{_datadir}/doc/packages/%{name} %{_datadir}/doc/packages/%{name}/sapconf2saptune %{_datadir}/doc/packages/%{name}/sapconf2saptune.1.gz # Created at run-time by saptune executable %ghost %dir %{_localstatedir}/lib/%{name}/ %ghost %dir %{_localstatedir}/lib/%{name}/parameter %ghost %dir %{_localstatedir}/lib/%{name}/saved_state