doctor: add systemd units to enable doctor at booting time 49/148249/3
authorSung-Jin Park <sj76.park@samsung.com>
Thu, 7 Sep 2017 07:42:08 +0000 (16:42 +0900)
committerSung-Jin Park <sj76.park@samsung.com>
Tue, 12 Sep 2017 04:17:43 +0000 (13:17 +0900)
Change-Id: Ic909933635cca95fc5f1cac364b254ff2527be26
Signed-off-by: Sung-Jin Park <sj76.park@samsung.com>
data/doctor/units/display-manager-ready.path [new file with mode: 0644]
data/doctor/units/display-manager-ready.service [new file with mode: 0644]
data/doctor/units/display-manager.env [new file with mode: 0644]
data/doctor/units/display-manager.service [new file with mode: 0644]
data/doctor/units/display-user.service [new file with mode: 0644]
data/doctor/units/display_env.sh [new file with mode: 0644]
packaging/pepper.spec

diff --git a/data/doctor/units/display-manager-ready.path b/data/doctor/units/display-manager-ready.path
new file mode 100644 (file)
index 0000000..24357bd
--- /dev/null
@@ -0,0 +1,6 @@
+[Unit]
+Description=Path activation for display manager ready service
+After=tmp.mount display-manager.service
+
+[Path]
+PathExists=/run/wayland-0
diff --git a/data/doctor/units/display-manager-ready.service b/data/doctor/units/display-manager-ready.service
new file mode 100644 (file)
index 0000000..00ac10b
--- /dev/null
@@ -0,0 +1,13 @@
+[Unit]
+Description=Headless Display Manager Ready Service
+After=tmp.mount display-manager.service
+
+[Service]
+Type=oneshot
+EnvironmentFile=/etc/sysconfig/display-manager.env
+SmackProcessLabel=System
+ExecStart=/usr/bin/sh -c "while [ ! -e /run/wayland-0 ] ; do /usr/bin/sleep .1 ; done ;/bin/chown -f root:display /run/wayland-0;/bin/chmod 775 /run/wayland-0"
+ExecStartPost=/usr/bin/sh -c "/usr/bin/touch /run/.wm_ready"
+
+[Install]
+WantedBy=graphical.target
diff --git a/data/doctor/units/display-manager.env b/data/doctor/units/display-manager.env
new file mode 100644 (file)
index 0000000..723a05f
--- /dev/null
@@ -0,0 +1,2 @@
+WAYLAND_DISPLAY="wayland-0"
+XDG_RUNTIME_DIR=/run
diff --git a/data/doctor/units/display-manager.service b/data/doctor/units/display-manager.service
new file mode 100644 (file)
index 0000000..7401b97
--- /dev/null
@@ -0,0 +1,11 @@
+[Unit]
+Description=Headless Display Manager
+
+[Service]
+Type=simple
+EnvironmentFile=/etc/sysconfig/display-manager.env
+SmackProcessLabel=System
+ExecStart=/usr/bin/doctor
+
+[Install]
+WantedBy=graphical.target
diff --git a/data/doctor/units/display-user.service b/data/doctor/units/display-user.service
new file mode 100644 (file)
index 0000000..392df83
--- /dev/null
@@ -0,0 +1,7 @@
+[Unit]
+Description=Creating a link file for user to access display manager socket
+DefaultDependencies=no
+
+[Service]
+Type=oneshot
+ExecStart=/usr/bin/sh -c "while [ ! -e /run/wayland-0 ] ; do /usr/bin/sleep .1 ; done ;/usr/bin/ln -sf /run/wayland-0 /run/user/%U/"
diff --git a/data/doctor/units/display_env.sh b/data/doctor/units/display_env.sh
new file mode 100644 (file)
index 0000000..6b25629
--- /dev/null
@@ -0,0 +1,8 @@
+if [ "$USER" == "root" ]; then
+        export XDG_RUNTIME_DIR=/run
+else
+        export XDG_RUNTIME_DIR=/run/user/$UID
+fi
+if [ "$WAYALND_DISPLAY" = "" ]; then
+        export WAYLAND_DISPLAY=wayland-0
+fi
index b09b649..2e5bde2 100644 (file)
@@ -237,6 +237,25 @@ make %{?_smp_mflags}
 %install
 %make_install
 
+%define display_user display
+%define display_group display
+
+# install system session services
+%__mkdir_p %{buildroot}%{_unitdir}
+install -m 644 data/doctor/units/display-manager.service %{buildroot}%{_unitdir}
+install -m 644 data/doctor/units/display-manager-ready.path %{buildroot}%{_unitdir}
+install -m 644 data/doctor/units/display-manager-ready.service %{buildroot}%{_unitdir}
+
+# install user session service
+%__mkdir_p %{buildroot}%{_unitdir_user}
+install -m 644 data/doctor/units/display-user.service %{buildroot}%{_unitdir_user}
+
+# install env file and scripts for service
+%__mkdir_p %{buildroot}%{_sysconfdir}/sysconfig
+install -m 0644 data/doctor/units/display-manager.env %{buildroot}%{_sysconfdir}/sysconfig
+%__mkdir_p %{buildroot}%{_sysconfdir}/profile.d
+install -m 0644 data/doctor/units/display_env.sh %{buildroot}%{_sysconfdir}/profile.d
+
 %post -n %{name} -p /sbin/ldconfig
 %postun -n %{name} -p /sbin/ldconfig
 
@@ -264,6 +283,24 @@ make %{?_smp_mflags}
 %post wayland -p /sbin/ldconfig
 %postun wayland -p /sbin/ldconfig
 
+%pre doctor
+# create groups 'display'
+getent group %{display_group} >/dev/null || %{_sbindir}/groupadd -r -o %{display_group}
+# create user 'display'
+getent passwd %{display_user} >/dev/null || %{_sbindir}/useradd -r -g %{display_group} -d /run/display -s /bin/false -c "Display" %{display_user}
+
+# create links within systemd's target(s)
+%__mkdir_p %{_unitdir}/graphical.target.wants/
+%__mkdir_p %{_unitdir_user}/basic.target.wants/
+ln -sf ../display-manager.service %{_unitdir}/graphical.target.wants/
+ln -sf ../display-manager-ready.service %{_unitdir}/graphical.target.wants/
+ln -sf ../display-user.service %{_unitdir_user}/basic.target.wants/
+
+%postun doctor
+rm -f %{_unitdir}/graphical.target.wants/display-manager.service
+rm -f %{_unitdir}/graphical.target.wants/display-manager-ready.service
+rm -f %{_unitdir_user}/basic.target.wants/display-user.service
+
 %files -n %{name}
 %manifest %{name}.manifest
 %defattr(-,root,root,-)
@@ -423,6 +460,12 @@ make %{?_smp_mflags}
 %defattr(-,root,root,-)
 %license COPYING
 %{_bindir}/doctor*
+%{_unitdir}/display-manager-ready.path
+%{_unitdir}/display-manager-ready.service
+%{_unitdir}//display-manager.service
+%{_unitdir_user}/display-user.service
+%config %{_sysconfdir}/sysconfig/display-manager.env
+%config %{_sysconfdir}/profile.d/display_env.sh
 
 %files samples
 %manifest %{name}.manifest