From dcff6eca10f168f1ea102092adb19e98ff6aa639 Mon Sep 17 00:00:00 2001 From: Denys Kondratenko Date: Sat, 9 Apr 2022 10:19:29 +0200 Subject: [PATCH 1/6] adding systemd service to run podman --- pmm-server.env | 10 +++++ pmm-server.service | 32 ++++++++++++++++ rhel/SPECS/pmm-server.spec | 75 ++++++++++++++++++++++++++++++++------ 3 files changed, 105 insertions(+), 12 deletions(-) create mode 100644 pmm-server.env create mode 100644 pmm-server.service diff --git a/pmm-server.env b/pmm-server.env new file mode 100644 index 000000000..7a742e22c --- /dev/null +++ b/pmm-server.env @@ -0,0 +1,10 @@ +# env file passed to the container +# full list of environment variables: +# https://www.percona.com/doc/percona-monitoring-and-management/2.x/setting-up/server/docker.html#environment-variables + +# keep updates disabled +# do image replacement instead (update the tag and restart the service) +DISABLE_UPDATES=1 + +# Enable DBaaS feature +#ENABLE_DBAAS=1 \ No newline at end of file diff --git a/pmm-server.service b/pmm-server.service new file mode 100644 index 000000000..7707780d2 --- /dev/null +++ b/pmm-server.service @@ -0,0 +1,32 @@ +[Unit] +Description=pmm-server +Wants=network-online.target +After=network-online.target +After=nss-user-lookup.target nss-lookup.target +After=time-sync.target + +[Service] +Type=simple +User=pmm-server +Group=pmm + +# set environment for this unit +Environment=PMM_PUBLIC_PORT=8443 +Environment=PMM_VOLUME_NAME=%N +Environment=PMM_TAG=2.27.0 +Environment=PMM_IMAGE=docker.io/percona/pmm-server +Environment=PMM_IMAGE=docker.io/percona/pmm-server +Environment=PMM_ENV_FILE=%E/pmm-server/pmm-server.env + +# optional env file that could overide previous env settings for this unit +EnvironmentFile=-%E/pmm-server/env + +ExecStartPre=/usr/bin/bash -c '/usr/bin/podman stop -t 10 %N; /usr/bin/podman rm -f %N || true' +ExecStart=/usr/bin/podman run --rm --name %N -p ${PMM_PUBLIC_PORT}:443/tcp --ulimit=host --volume=${PMM_VOLUME_NAME}:/srv --env-file=${PMM_ENV_FILE} ${PMM_IMAGE}:${PMM_TAG} +ExecStop=/usr/bin/podman stop -t 10 %N +ExecStopPost=/usr/bin/podman stop -t 10 `%N` +Restart=on-failure +RestartSec=20 + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/rhel/SPECS/pmm-server.spec b/rhel/SPECS/pmm-server.spec index 3b7a73a4b..3c0714999 100644 --- a/rhel/SPECS/pmm-server.spec +++ b/rhel/SPECS/pmm-server.spec @@ -7,27 +7,43 @@ %global pmm_provider github.com/percona/%{pmm_repo} %global pmm_commit @@pmm_commit@@ %global pmm_shortcommit %(c=%{pmm_commit}; echo ${c:0:7}) -%define release 25 +%define release 26 %define rpm_release %{release}.%{build_timestamp}.%{shortcommit}%{?dist} -Name: %{repo} -Version: %{version} -Release: %{rpm_release} -Summary: Percona Monitoring and Management Server +Name: %{repo} +Version: %{version} +Release: %{rpm_release} +Summary: Percona Monitoring and Management Server -License: AGPLv3 -URL: https://%{provider} -Source0: https://%{provider}/archive/%{commit}/%{repo}-%{shortcommit}.tar.gz -Source1: https://%{pmm_provider}/archive/%{pmm_commit}/%{pmm_repo}-%{pmm_shortcommit}.tar.gz +License: AGPLv3 +URL: https://%{provider} +Source0: https://%{provider}/archive/%{commit}/%{repo}-%{shortcommit}.tar.gz +Source1: https://%{pmm_provider}/archive/%{pmm_commit}/%{pmm_repo}-%{pmm_shortcommit}.tar.gz -BuildArch: noarch -Requires: nginx ansible git bats -BuildRequires: openssl +BuildArch: noarch +Requires: nginx ansible git bats +BuildRequires: openssl %description Percona Monitoring and Management (PMM) Server. See the PMM docs for more information. +%package systemd +Version: %{version} +Release: %{rpm_release} +Summary: SystemD service for Percona Monitoring and Management Server + +License: AGPLv3 +URL: https://%{provider} + +BuildArch: noarch +Requires: podman +BuildRequires: systemd-rpm-macros + +%description systemd +SystemD service to run Percona Monitoring and Management (PMM) Server. +It runs podman to manage PMM. +See the PMM docs for more information. %prep %setup -q -n %{repo}-%{commit} @@ -52,6 +68,32 @@ cp -pav ./installation-wizard/build %{buildroot}%{_datadir}/%{name}/installation cp -pav ./%{pmm_repo}-%{pmm_commit}/api/swagger %{buildroot}%{_datadir}/%{name}/swagger rm -rf %{pmm_repo}-%{pmm_commit} +# pmm-server-systemd package +install -D -m 0644 pmm-server.service %{buildroot}/%{_unitdir}/pmm-server.service +install -D -p -m 0644 pmm-server.env %{buildroot}/%{_sysconfdir}/%{repo}/pmm-server.env + +%pre systemd + +# use newusers util to create user and group to assign subuid/subguid +# newusers pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shel +getent passwd pmm-server >/dev/null >/dev/null || echo "pmm-server:::pmm::/home/pmm-server:/bin/false" | %{_sbindir}/newusers +%{_bindir}/loginctl enable-linger pmm-server + +%post systemd +%systemd_post pmm-server.service +%{_bindir}/systemctl enable pmm-server >/dev/null 2>&1 || true + +%preun systemd +%systemd_preun pmm-server.service + +%postun systemd +%systemd_postun_with_restart pmm-server.service +if [ $1 == 0 ]; then + # This is a yum remove. + %{_bindir}/loginctl terminate-user pmm-server || true + getent passwd pmm-server >/dev/null && %{_sbindir}/userdel pmm-server + getent group pmm >/dev/null && %{_sbindir}/groupdel pmm +fi %files %license LICENSE @@ -60,8 +102,17 @@ rm -rf %{pmm_repo}-%{pmm_commit} %{_sysconfdir}/alertmanager.yml %{_datadir}/%{name} +%files systemd +%license LICENSE +%doc README.md CHANGELOG.md +%{_sysconfdir}/%{repo} +%config(noreplace) %{_sysconfdir}/%{repo}/pmm-server.env +%{_unitdir}/pmm-server.service %changelog +* Fri Apr 08 2022 Denys Kondratenko - 2.26.0-1 +- PMM-7925 add systemd service with podman support + * Wed Nov 17 2021 Nikita Beletskii - 2.25.0-1 - PMM-4486 remove import-dashboards.py and use internal Grafana provisioning From a2975df19b32977c174f341b276ba2826a7e5b71 Mon Sep 17 00:00:00 2001 From: Denys Kondratenko Date: Mon, 11 Apr 2022 14:15:04 +0200 Subject: [PATCH 2/6] add user service --- pmm-server-user.service | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 pmm-server-user.service diff --git a/pmm-server-user.service b/pmm-server-user.service new file mode 100644 index 000000000..f3b9e47a1 --- /dev/null +++ b/pmm-server-user.service @@ -0,0 +1,30 @@ +[Unit] +Description=pmm-server +Wants=network-online.target +After=network-online.target +After=nss-user-lookup.target nss-lookup.target +After=time-sync.target + +[Service] +Type=simple + +# set environment for this unit +Environment=PMM_PUBLIC_PORT=8443 +Environment=PMM_VOLUME_NAME=%N +Environment=PMM_TAG=2.27.0 +Environment=PMM_IMAGE=docker.io/percona/pmm-server +Environment=PMM_IMAGE=docker.io/percona/pmm-server +Environment=PMM_ENV_FILE=~/.config/pmm-server/pmm-server.env + +# optional env file that could overide previous env settings for this unit +EnvironmentFile=-%~/.config/pmm-server/env + +ExecStartPre=/usr/bin/bash -c '/usr/bin/podman stop -t 10 %N; /usr/bin/podman rm -f %N || true' +ExecStart=/usr/bin/podman run --rm --name %N -p ${PMM_PUBLIC_PORT}:443/tcp --ulimit=host --volume=${PMM_VOLUME_NAME}:/srv --env-file=${PMM_ENV_FILE} ${PMM_IMAGE}:${PMM_TAG} +ExecStop=/usr/bin/podman stop -t 10 %N +ExecStopPost=/usr/bin/podman stop -t 10 `%N` +Restart=on-failure +RestartSec=20 + +[Install] +WantedBy=multi-user.target \ No newline at end of file From a3b0e90af601fe367ed0e06aa189431254b4a60d Mon Sep 17 00:00:00 2001 From: Denys Kondratenko Date: Mon, 11 Apr 2022 14:48:47 +0200 Subject: [PATCH 3/6] fix user service --- pmm-server-user.service | 6 +++--- pmm-server.env | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pmm-server-user.service b/pmm-server-user.service index f3b9e47a1..0214a8dcc 100644 --- a/pmm-server-user.service +++ b/pmm-server-user.service @@ -14,10 +14,10 @@ Environment=PMM_VOLUME_NAME=%N Environment=PMM_TAG=2.27.0 Environment=PMM_IMAGE=docker.io/percona/pmm-server Environment=PMM_IMAGE=docker.io/percona/pmm-server -Environment=PMM_ENV_FILE=~/.config/pmm-server/pmm-server.env +Environment=PMM_ENV_FILE=%h/.config/pmm-server/pmm-server.env # optional env file that could overide previous env settings for this unit -EnvironmentFile=-%~/.config/pmm-server/env +EnvironmentFile=-%h/.config/pmm-server/env ExecStartPre=/usr/bin/bash -c '/usr/bin/podman stop -t 10 %N; /usr/bin/podman rm -f %N || true' ExecStart=/usr/bin/podman run --rm --name %N -p ${PMM_PUBLIC_PORT}:443/tcp --ulimit=host --volume=${PMM_VOLUME_NAME}:/srv --env-file=${PMM_ENV_FILE} ${PMM_IMAGE}:${PMM_TAG} @@ -27,4 +27,4 @@ Restart=on-failure RestartSec=20 [Install] -WantedBy=multi-user.target \ No newline at end of file +WantedBy=default.target \ No newline at end of file diff --git a/pmm-server.env b/pmm-server.env index 7a742e22c..13c19338f 100644 --- a/pmm-server.env +++ b/pmm-server.env @@ -7,4 +7,4 @@ DISABLE_UPDATES=1 # Enable DBaaS feature -#ENABLE_DBAAS=1 \ No newline at end of file +#ENABLE_DBAAS=1 From 971b9395f2775efbf8be2bf98447e0e003d71268 Mon Sep 17 00:00:00 2001 From: Denys Kondratenko Date: Mon, 11 Apr 2022 17:17:17 +0200 Subject: [PATCH 4/6] fix duplicate env --- pmm-server-user.service | 1 - pmm-server.service | 1 - 2 files changed, 2 deletions(-) diff --git a/pmm-server-user.service b/pmm-server-user.service index 0214a8dcc..ab7a6a7c5 100644 --- a/pmm-server-user.service +++ b/pmm-server-user.service @@ -13,7 +13,6 @@ Environment=PMM_PUBLIC_PORT=8443 Environment=PMM_VOLUME_NAME=%N Environment=PMM_TAG=2.27.0 Environment=PMM_IMAGE=docker.io/percona/pmm-server -Environment=PMM_IMAGE=docker.io/percona/pmm-server Environment=PMM_ENV_FILE=%h/.config/pmm-server/pmm-server.env # optional env file that could overide previous env settings for this unit diff --git a/pmm-server.service b/pmm-server.service index 7707780d2..0a790bf28 100644 --- a/pmm-server.service +++ b/pmm-server.service @@ -15,7 +15,6 @@ Environment=PMM_PUBLIC_PORT=8443 Environment=PMM_VOLUME_NAME=%N Environment=PMM_TAG=2.27.0 Environment=PMM_IMAGE=docker.io/percona/pmm-server -Environment=PMM_IMAGE=docker.io/percona/pmm-server Environment=PMM_ENV_FILE=%E/pmm-server/pmm-server.env # optional env file that could overide previous env settings for this unit From 1f25ea985d2980ca309f3ee7a5ded19bd1904e38 Mon Sep 17 00:00:00 2001 From: Denys Kondratenko Date: Mon, 11 Apr 2022 19:06:04 +0200 Subject: [PATCH 5/6] add package dependencies --- rhel/SPECS/pmm-server.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rhel/SPECS/pmm-server.spec b/rhel/SPECS/pmm-server.spec index 3c0714999..decf428c8 100644 --- a/rhel/SPECS/pmm-server.spec +++ b/rhel/SPECS/pmm-server.spec @@ -37,7 +37,7 @@ License: AGPLv3 URL: https://%{provider} BuildArch: noarch -Requires: podman +Requires: podman systemd shadow-utils BuildRequires: systemd-rpm-macros %description systemd From 1c8eaccabd1e258c142113721cbde1475c2715c9 Mon Sep 17 00:00:00 2001 From: cezmunsta Date: Mon, 18 Apr 2022 11:12:53 +0100 Subject: [PATCH 6/6] Skip healthchecks for pmm-server-user.service --- pmm-server-user.service | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pmm-server-user.service b/pmm-server-user.service index ab7a6a7c5..ce74e515d 100644 --- a/pmm-server-user.service +++ b/pmm-server-user.service @@ -19,11 +19,11 @@ Environment=PMM_ENV_FILE=%h/.config/pmm-server/pmm-server.env EnvironmentFile=-%h/.config/pmm-server/env ExecStartPre=/usr/bin/bash -c '/usr/bin/podman stop -t 10 %N; /usr/bin/podman rm -f %N || true' -ExecStart=/usr/bin/podman run --rm --name %N -p ${PMM_PUBLIC_PORT}:443/tcp --ulimit=host --volume=${PMM_VOLUME_NAME}:/srv --env-file=${PMM_ENV_FILE} ${PMM_IMAGE}:${PMM_TAG} +ExecStart=/usr/bin/podman run --rm --name %N -p ${PMM_PUBLIC_PORT}:443/tcp --ulimit=host --volume=${PMM_VOLUME_NAME}:/srv --env-file=${PMM_ENV_FILE} --health-cmd=none --health-interval=disable ${PMM_IMAGE}:${PMM_TAG} ExecStop=/usr/bin/podman stop -t 10 %N ExecStopPost=/usr/bin/podman stop -t 10 `%N` Restart=on-failure RestartSec=20 [Install] -WantedBy=default.target \ No newline at end of file +WantedBy=default.target