From 48d7ed536a2324d9de480ba58194861ddb8a6606 Mon Sep 17 00:00:00 2001 From: INSUN PYO Date: Fri, 7 Jun 2019 15:30:41 +0900 Subject: [PATCH] Add delayed target Change-Id: I0527d1387500c699be0fbc319c702a77d9ae587b --- Makefile.am | 14 ++++++++++++++ packaging/systemd.spec | 10 ++++++++++ packaging/wait_systemd_startupfinished.sh | 29 +++++++++++++++++++++++++++++ units/delayed.service | 12 ++++++++++++ units/delayed.target | 2 ++ units/user/delayed.service | 11 +++++++++++ units/user/delayed.target | 2 ++ 7 files changed, 80 insertions(+) create mode 100644 packaging/wait_systemd_startupfinished.sh create mode 100644 units/delayed.service create mode 100644 units/delayed.target create mode 100644 units/user/delayed.service create mode 100644 units/user/delayed.target diff --git a/Makefile.am b/Makefile.am index 1a2a0b2..27f9d5b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -529,6 +529,13 @@ dist_systemunit_DATA = \ dist_systemunit_DATA += \ $(dist_systemunit_DATA_busnames) +dist_systemunit_DATA += \ + units/delayed.target \ + units/delayed.service + +GRAPHICAL_TARGET_WANTS += \ + delayed.service + dist_systemunit_DATA_busnames += \ units/busnames.target @@ -578,6 +585,13 @@ dist_userunit_DATA = \ units/user/default.target \ units/user/exit.target +dist_userunit_DATA += \ + units/user/delayed.target \ + units/user/delayed.service + +USER_DEFAULT_TARGET_WANTS += \ + delayed.service + nodist_userunit_DATA = \ units/user/systemd-exit.service diff --git a/packaging/systemd.spec b/packaging/systemd.spec index 520a9c7..3eb6fb3 100644 --- a/packaging/systemd.spec +++ b/packaging/systemd.spec @@ -25,6 +25,7 @@ Source0: https://github.com/systemd/systemd/archive/v%{version}.tar.gz Source1: pamconsole-tmp.conf Source2: %{name}-rpmlintrc Source3: test-runner.c +Source4: wait_systemd_startupfinished.sh Source1001: systemd.manifest BuildRequires: gperf BuildRequires: intltool >= 0.40.0 @@ -296,6 +297,9 @@ ln -sf ./libsystemd.pc %{buildroot}%{_libdir}/pkgconfig/libsystemd-id128.pc ln -sf ./libsystemd.pc %{buildroot}%{_libdir}/pkgconfig/libsystemd-journal.pc ln -sf ./libsystemd.pc %{buildroot}%{_libdir}/pkgconfig/libsystemd-login.pc +# Delayed target +install -m 0755 %{SOURCE4} %{buildroot}%{_bindir}/wait_systemd_startupfinished.sh + # end of install %pre /usr/bin/getent group cdrom >/dev/null 2>&1 || /usr/sbin/groupadd -r -g 11 cdrom >/dev/null 2>&1 || : @@ -506,6 +510,7 @@ fi %dir %{_prefix}/lib/systemd/system/basic.target.wants %dir %{_prefix}/lib/systemd/user %dir %{_prefix}/lib/systemd/network +%dir %{_prefix}/lib/systemd/user/default.target.wants %{_prefix}/lib/systemd/user/basic.target %{_prefix}/lib/systemd/user/bluetooth.target %{_prefix}/lib/systemd/user/exit.target @@ -523,6 +528,9 @@ fi %{_prefix}/lib/systemd/user/default.target %{_prefix}/lib/systemd/network/99-default.link %exclude %{_prefix}/lib/systemd/system-preset/90-systemd.preset +%{_prefix}/lib/systemd/user/delayed.target +%{_prefix}/lib/systemd/user/delayed.service +%{_prefix}/lib/systemd/user/default.target.wants/delayed.service %{_prefix}/lib/systemd/libsystemd-shared-231.so %{_prefix}/lib/systemd/libsystemd-shared.so @@ -576,6 +584,8 @@ fi %{_localstatedir}/log/journal +%{_bindir}/wait_systemd_startupfinished.sh + %files -n libsystemd %manifest %{name}.manifest %license LICENSE.LGPL2.1 diff --git a/packaging/wait_systemd_startupfinished.sh b/packaging/wait_systemd_startupfinished.sh new file mode 100644 index 0000000..73d6f3d --- /dev/null +++ b/packaging/wait_systemd_startupfinished.sh @@ -0,0 +1,29 @@ +#!/bin/bash +PATH=/bin:/usr/bin:/sbin:/usr/sbin + +IS_USER_SESSION=" " +if [ "$1" = "--user" ] +then + IS_USER_SESSION="--user" +fi + +WAIT_CMD="/usr/bin/systemctl "${IS_USER_SESSION}" is-system-running" +EXEC_CMD="/usr/bin/systemctl --no-block "${IS_USER_SESSION}" start delayed.target" + +echo "Wait CMD:" ${WAIT_CMD} +echo "Exec CMD:" ${EXEC_CMD} + +while [ 1 ] +do + STATE=$($WAIT_CMD) + echo ${STATE} + + if [ ${STATE} = "running" -o ${STATE} = "degraded" ] + then + $($EXEC_CMD) + exit 0; + fi + + /usr/bin/sleep 1 +done + diff --git a/units/delayed.service b/units/delayed.service new file mode 100644 index 0000000..8fdf581 --- /dev/null +++ b/units/delayed.service @@ -0,0 +1,12 @@ +[Unit] +Description=Trigger System Delayed services +Requires=graphical.target +After=graphical.target +DefaultDependencies=no +RefuseManualStart=yes +RefuseManualStop=yes + +[Service] +ExecStart=/usr/bin/wait_systemd_startupfinished.sh +RemainAfterExit=true +SmackProcessLabel=System diff --git a/units/delayed.target b/units/delayed.target new file mode 100644 index 0000000..606868e --- /dev/null +++ b/units/delayed.target @@ -0,0 +1,2 @@ +[Unit] +Description=System Delayed Services diff --git a/units/user/delayed.service b/units/user/delayed.service new file mode 100644 index 0000000..a03a476 --- /dev/null +++ b/units/user/delayed.service @@ -0,0 +1,11 @@ +[Unit] +Description=Trigger User Delayed Services +Requires=default.target +After=default.target +DefaultDependencies=no +RefuseManualStart=yes +RefuseManualStop=yes + +[Service] +ExecStart=/usr/bin/wait_systemd_startupfinished.sh --user +RemainAfterExit=true diff --git a/units/user/delayed.target b/units/user/delayed.target new file mode 100644 index 0000000..ae06405 --- /dev/null +++ b/units/user/delayed.target @@ -0,0 +1,2 @@ +[Unit] +Description=User Delayed Services -- 2.7.4