File sapconf.spec of Package sapconf.10264
#
# spec file for package sapconf
#
# Copyright (c) 2019 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 https://bugs.opensuse.org/
#
%if ! %{defined _fillupdir}
%define _fillupdir /var/adm/fillup-templates
%endif
Name: sapconf
Version: 4.2.2
Release: 0
Summary: Kernel Parameter Initializiation for SAP Systems
License: LGPL-2.1-or-later
Group: Productivity/Other
Url: https://www.suse.com/partners/alliance/sap/
PreReq: %fillup_prereq
Source0: %name-%version.tar.gz
BuildArch: noarch
BuildRequires: tuned
Requires: bc
Requires: systemd >= 228-142.1
Requires: sysstat
Requires: tuned
Requires: uuidd
Suggests: cron logrotate
%{?systemd_requires}
%description
The utility adjusts operating system parameters, such as kernel
tuning settings and resource limits, to allow running various
SAP solutions at satisfactory performance.
Authors:
--------
Angela Briel, Howard Guo
%prep
%setup -q
%build
%install
mkdir -p %{buildroot}%{_libexecdir}/tuned/
cp -R profile/* %{buildroot}%{_libexecdir}/tuned/
mkdir -p %{buildroot}%{_libexecdir}/%{name}/
install -m 0644 lib/common.sh %{buildroot}%{_libexecdir}/%{name}/
install -m 0644 lib/util.sh %{buildroot}%{_libexecdir}/%{name}/
install -m 0755 lib/sccu.sh %{buildroot}%{_libexecdir}/%{name}/
mkdir -p %{buildroot}%{_unitdir}/systemd/system/ %{buildroot}%{_sbindir}/
install -m 0644 sapconf.service %{buildroot}%{_unitdir}/
ln -s /usr/sbin/service %{buildroot}%{_sbindir}/rcsapconf
mkdir -p %{buildroot}%{_mandir}/{man5,man7}/
install -m 0644 man/*.5 %{buildroot}%{_mandir}/man5/
install -m 0644 man/*.7 %{buildroot}%{_mandir}/man7/
mkdir -p %{buildroot}/%{_fillupdir}/
pushd sysconfig
for file in *; do
cp "$file" "%{buildroot}/%{_fillupdir}/sysconfig.$file"
done
popd
%pre
%service_add_pre sapconf.service
if [ $1 -ne 1 ]; then
# package update
# fix a problem with former post install of version 4.2.0
if [ -f %{_fillupdir}/sysconfig.sapconf ]; then
if ! (grep "The following lines are only for documentation purpose" /etc/sysconfig/sapconf >/dev/null 2>&1); then
echo -e "\n" >> /etc/sysconfig/sapconf
sed -n "/^####.*##$/,/^#SAPCONF_END.*/p" %{_fillupdir}/sysconfig.sapconf >> /etc/sysconfig/sapconf
fi
fi
fi
%post
if [ $1 -eq 1 ]; then
# package initial install
# to preserve the trailing comments, use /bin/fillup -t instead of
# macro fillup_only
echo "Updating /etc/sysconfig/sapconf ..."
touch /etc/sysconfig/sapconf || :
/bin/fillup -q -t %{_fillupdir}/sysconfig.sapconf /etc/sysconfig/sapconf /etc/sysconfig/sapconf || :
touch /tmp/initial_sapconf_inst || :
else
# package update
if [ -f /etc/sysconfig/sapnote-1557506 ]; then
# covers updates from SLE12 sapconf versions < 4.1.12
mv /etc/sysconfig/sapconf /etc/sysconfig/sapconf.rpmsave || true
# to preserve the trailing comments, use /bin/fillup -t instead of
# macro fillup_only
echo "Updating /etc/sysconfig/sapconf ..."
touch /etc/sysconfig/sapconf || :
/bin/fillup -q -t %{_fillupdir}/sysconfig.sapconf /etc/sysconfig/sapconf /etc/sysconfig/sapconf || :
# remove no longer needed 'pagecache' sysconfig file
rm -f /etc/sysconfig/sapnote-1557506 || true
# remove no longer needed 'ase' sysconfig file
rm -f /etc/sysconfig/sapnote-1680803 || true
elif [ -f /etc/sysconfig/sapnote-1680803 ]; then
# covers updates from SLE12 sapconf versions >= 4.1.12
# adjust comments, not covered by fillup
sed -n "/## Path:.*/,/##.*integration of sapconf./p" %{_fillupdir}/sysconfig.sapconf > /etc/sysconfig/sapconf.new.$$
sed "/## Path:.*Other.*/,/## integration of sapconf./d" /etc/sysconfig/sapconf >> /etc/sysconfig/sapconf.new.$$
mv /etc/sysconfig/sapconf.new.$$ /etc/sysconfig/sapconf || true
# remove pagecache section from sapconf sysconfig file
# no longer supported in SLE15
sed -i '/## Path: SAP\/Note\/1557506 - Linux paging improvements/,/.*PAGECACHE_LIMIT_IGNORE_DIRTY[[:blank:]]*=.*/d' /etc/sysconfig/sapconf
sed -i '/.*PAGECACHE_LIMIT_IGNORE_DIRTY[[:blank:]]*=.*/d' /etc/sysconfig/sapconf
# bsc#1096496/bsc#1096498
# to update the comment sections in /etc/sysconfig/sapconf
# does not work with /bin/fillup, but is mandatory for SAP
%{_libexecdir}/%{name}/sccu.sh || :
echo "Updating /etc/sysconfig/sapconf ..."
/bin/fillup -q -t /etc/sysconfig/sapconf %{_fillupdir}/sysconfig.sapconf
# remove no longer needed 'ase' sysconfig file
rm -f /etc/sysconfig/sapnote-1680803 || true
else
# covers updates from SLE15
# bsc#1096496/bsc#1096498
# to update the comment sections in /etc/sysconfig/sapconf
# does not work with /bin/fillup, but is mandatory for SAP
%{_libexecdir}/%{name}/sccu.sh || :
echo "Updating /etc/sysconfig/sapconf ..."
/bin/fillup -q -t /etc/sysconfig/sapconf %{_fillupdir}/sysconfig.sapconf
fi
%{remove_and_set -n sapconf SEMMSL SEMMNS SEMOPM SEMMNI}
# move old sapconf profiles sap-hana, sap-netweaver, sap-ase and sap-bobj to
# the new sapconf profile 'sapconf'
# works without problems as long as the tuned package does not ship the
# upstream sap- profiles.
[[ $(cat /etc/tuned/active_profile) == sap-* ]] && echo sapconf > /etc/tuned/active_profile || true
fi
sed -i '/^[^#].*[[:blank:]][[:blank:]]*=[[:blank:]][[:blank:]]*.*/s%[[:blank:]]%%g' /etc/sysconfig/sapconf >/dev/null 2>&1 || true
%service_add_post sapconf.service
# Amend logind's behaviour (bsc#1031355, bsc#1039309, bsc#1043844), there is no rollback.
SAP_LOGIN_FILE=/etc/systemd/logind.conf.d/sap.conf
if [ ! -f $SAP_LOGIN_FILE ]; then
mkdir -p /etc/systemd/logind.conf.d || :
echo "[Login]
UserTasksMax=infinity" > $SAP_LOGIN_FILE || :
echo "Set the maximum number of OS tasks each user may run concurrently (UserTasksMax) to 'infinity'"
echo "With this setting your system is vulnerable to fork bomb attacks."
echo "Please reboot the system for the UserTasksMax change to become effective"
else
# bsc#1111243
if ! (grep 'UserTasksMax=infinity' $SAP_LOGIN_FILE > /dev/null 2>&1); then
echo "ATTENTION: File '$SAP_LOGIN_FILE' does not include the"
echo " setting for 'UserTasksMax=infinity'. Please check"
else
echo "File '$SAP_LOGIN_FILE' already exists, nothing to do."
fi
fi
%preun
%service_del_preun sapconf.service
test -n "$FIRST_ARG" || FIRST_ARG=$1
if [ $FIRST_ARG -eq 0 ]; then
# Package removal, not upgrade
# to suppress error messags from tuned, if the current active profile is
# a removed sapconf profile
(systemctl -q is-active tuned && [[ $(cat /etc/tuned/active_profile) == sapconf ]] ) && (/usr/bin/systemctl stop tuned.service >/dev/null 2>&1; > /etc/tuned/active_profile) || true
fi
%postun
%service_del_postun sapconf.service
%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
# see the "Shared_libraries" section in http://en.opensuse.org/openSUSE:Packaging_scriptlet_snippets
# Begin refresh systemd units and clean up possibly obsolete systemd units
# The following is a generic way how to refresh and/or clean up systemd units.
# A systemd unit may need a refresh after updating a package when the new package
# had installed a changed systemd unit file for an enabled systemd unit.
# A systemd unit may become obsolete by updating a package (see bnc#904215).
# A systemd unit is considered to have become obsolete when the systemd
# symlink /etc/systemd/system/.../unit_name -> /path/to/unit_file is broken.
# When during package update the new package does no longer provide a unit file
# then the systemd symlink becomes broken after the files of the old package
# had been actually removed by RPM.
# According to /usr/share/doc/packages/rpm/manual/triggers and according
# to https://en.opensuse.org/openSUSE:Packaging_scriptlet_snippets#Scriptlet_Ordering
# and http://fedoraproject.org/wiki/Packaging:ScriptletSnippets#Scriptlet_Ordering
# from the new package only "posttrans of new package" is run after "removal of old package"
# so that the new package must do the clean up as RPM posttrans scriptlet.
if systemctl --quiet is-enabled sapconf.service 2>/dev/null; then
# Refresh still valid enabled systemd units and clean up possibly obsoleted systemd units:
# Enforce systemd to use the current unit file which is usually the unit file of the new package
# but also in case of custom units (that use other unit files) a "reenable" won't hurt because
# "reenable" does not implicitly stop a running service which is "the right thing" because
# a RPM package installation must not automatically disrupt (restart) a running service.
# Using "--force reenable" is essential to clean up possibly conflicting/broken symlinks.
# (without "|| :" build fails with "Failed to get D-Bus connection: No connection to service manager. posttrans script ... failed"):
systemctl --quiet --force reenable sapconf.service 2>/dev/null || :
else
# Refresh still valid disabled systemd units and clean up possibly obsoleted systemd units:
# First using "--force reenable" is essential to clean up possibly conflicting/broken symlinks
# because there is no "--force disable" that would clean up possibly conflicting/broken symlinks
# see https://bugzilla.opensuse.org/show_bug.cgi?id=904215#c34
# so that first the unit has a clean state and then it is set back to disabled (as it was before).
# If a disabled systemd unit has become obsoleted, "systemctl --force reenable" will clean it up
# which means the unit gets removed and the subsequent "systemctl disable" will do nothing.
# (without "|| :" build fails with "Failed to get D-Bus connection: No connection to service manager. posttrans script ... failed"):
systemctl --quiet --force reenable sapconf.service 2>/dev/null || :
systemctl --quiet disable sapconf.service 2>/dev/null || :
fi
if [ -f /tmp/initial_sapconf_inst ]; then
# package initial install
rm -f /tmp/initial_sapconf_inst || :
[[ $(cat /etc/tuned/active_profile) == "" ]] && systemctl start sapconf.service || :
else
# package update
(systemctl -q is-active sapconf && [[ $(cat /etc/tuned/active_profile) == sapconf ]] ) && systemctl reload sapconf.service || :
fi
exit 0
%files
%defattr(-,root,root)
%{_sbindir}/rcsapconf
%{_unitdir}/sapconf.service
%{_libexecdir}/tuned/sap*
%dir %{_libexecdir}/%{name}
%{_libexecdir}/%{name}/*
%{_mandir}/man*/*
%{_fillupdir}/*
%changelog