Enable Weston to start at boot.
authorOssama Othman <ossama.othman@intel.com>
Fri, 25 Jan 2013 00:27:17 +0000 (16:27 -0800)
committerOssama Othman <ossama.othman@intel.com>
Fri, 19 Apr 2013 22:59:50 +0000 (15:59 -0700)
Change-Id: I87f849b1ef510edea4f6cf81a34dc8a72faedd89
Signed-off-by: Ossama Othman <ossama.othman@intel.com>
packaging/rc.weston [new file with mode: 0644]
packaging/weston.manifest [new file with mode: 0644]
packaging/weston.sh [new file with mode: 0644]
packaging/weston.spec

diff --git a/packaging/rc.weston b/packaging/rc.weston
new file mode 100644 (file)
index 0000000..38176c0
--- /dev/null
@@ -0,0 +1,195 @@
+#! /bin/sh
+### BEGIN INIT INFO
+# Provides:          weston
+# Required-Start:    $remote_fs $syslog
+# Required-Stop:     $remote_fs $syslog
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description: Weston compositor boot script
+# Description:       This script starts the Weston compositor at boot.
+### END INIT INFO
+
+# Author: Ossama Othman
+#
+# Please remove the "Author" lines above and replace them
+# with your own name if you copy and modify this script.
+
+# Do NOT "set -e"
+
+
+backend=
+
+# Use the Weston DRM backend if $DISPLAY is set and X isn't running
+#since Weston won't be able use the X11 backend.
+#
+# This allows this script to start Weston with either the X11 or DRM
+#backends.
+if [ -z `pidof Xorg` ] && [ -n "$DISPLAY" ]; then
+    backend="--backend=drm-backend.so"
+fi
+
+# PATH should only include /usr/* if it runs after the mountnfs.sh script
+PATH=/sbin:/usr/sbin:/bin:/usr/bin
+DESC="Weston compositor"
+NAME=weston
+DAEMON=/usr/bin/weston
+DAEMON_ARGS="$backend --log=/var/log/weston.log"
+PIDFILE=/var/run/$NAME.pid
+SCRIPTNAME=/etc/init.d/$NAME
+
+# Exit if the package is not installed
+[ -x "$DAEMON" ] || exit 0
+
+# Read configuration variable file if it is present
+[ -r /etc/default/$NAME ] && . /etc/default/$NAME
+
+# Load the VERBOSE setting and other rcS variables
+. /lib/init/vars.sh
+
+# Define LSB log_* functions.
+# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
+# and status_of_proc is working.
+. /lib/lsb/init-functions
+
+#
+# Function that starts the daemon/service
+#
+do_start()
+{
+       # Make sure we have a sane XDG_RUNTIME_DIR environment
+       # variable set.
+       if [ -z "${XDG_RUNTIME_DIR}" ]; then
+           . /etc/profile.d/weston.sh
+       fi
+
+       # Return
+       #   0 if daemon has been started
+       #   1 if daemon was already running
+       #   2 if daemon could not be started
+       start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
+               || return 1
+       # start-stop-daemon --start --background --quiet --pidfile $PIDFILE --exec $DAEMON -- \
+       #       $DAEMON_ARGS \
+       #       || return 2
+       $DAEMON $DAEMON_ARGS &
+       weston_pid=$!
+
+       if [ $weston_pid = 0 ]; then
+           return 2
+       else
+           echo $weston_pid > $PIDFILE
+       fi
+
+       # Add code here, if necessary, that waits for the process to be ready
+       # to handle requests from services started subsequently which depend
+       # on this one.  As a last resort, sleep for some time.
+
+       # ***********************************************************
+       # HACK TO WORK AROUND BROKEN INFINITE LOOPS IN BOOT ANIMATION
+       # VIRTUAL KEYBOARD BOOT SCRIPTS.
+       # ***********************************************************
+       touch /tmp/.X0-lock
+       touch /tmp/.wm_ready
+       # ***********************************************************
+}
+
+#
+# Function that stops the daemon/service
+#
+do_stop()
+{
+       # Return
+       #   0 if daemon has been stopped
+       #   1 if daemon was already stopped
+       #   2 if daemon could not be stopped
+       #   other if a failure occurred
+       #start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
+       start-stop-daemon --stop --quiet --pidfile $PIDFILE --name $NAME
+       RETVAL="$?"
+       [ "$RETVAL" = 2 ] && return 2
+       # Wait for children to finish too if this is a daemon that forks
+       # and if the daemon is only ever run from this initscript.
+       # If the above conditions are not satisfied then add some other code
+       # that waits for the process to drop all resources that could be
+       # needed by services started subsequently.  A last resort is to
+       # sleep for some time.
+       #start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
+       start-stop-daemon --stop --quiet --oknodo --exec $DAEMON
+       [ "$?" = 2 ] && return 2
+       # Many daemons don't delete their pidfiles when they exit.
+       rm -f $PIDFILE
+       return "$RETVAL"
+}
+
+#
+# Function that sends a SIGHUP to the daemon/service
+#
+do_reload() {
+       #
+       # If the daemon can reload its configuration without
+       # restarting (for example, when it is sent a SIGHUP),
+       # then implement that here.
+       #
+       start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
+       return 0
+}
+
+case "$1" in
+  start)
+       [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
+       do_start
+       case "$?" in
+               0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
+               2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
+       esac
+       ;;
+  stop)
+       [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
+       do_stop
+       case "$?" in
+               0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
+               2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
+       esac
+       ;;
+  status)
+       status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
+       ;;
+  #reload|force-reload)
+       #
+       # If do_reload() is not implemented then leave this commented out
+       # and leave 'force-reload' as an alias for 'restart'.
+       #
+       #log_daemon_msg "Reloading $DESC" "$NAME"
+       #do_reload
+       #log_end_msg $?
+       #;;
+  restart|force-reload)
+       #
+       # If the "reload" option is implemented then remove the
+       # 'force-reload' alias
+       #
+       log_daemon_msg "Restarting $DESC" "$NAME"
+       do_stop
+       case "$?" in
+         0|1)
+               do_start
+               case "$?" in
+                       0) log_end_msg 0 ;;
+                       1) log_end_msg 1 ;; # Old process is still running
+                       *) log_end_msg 1 ;; # Failed to start
+               esac
+               ;;
+         *)
+               # Failed to stop
+               log_end_msg 1
+               ;;
+       esac
+       ;;
+  *)
+       #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
+       echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
+       exit 3
+       ;;
+esac
+
+:
diff --git a/packaging/weston.manifest b/packaging/weston.manifest
new file mode 100644 (file)
index 0000000..017d22d
--- /dev/null
@@ -0,0 +1,5 @@
+<manifest>
+ <request>
+    <domain name="_"/>
+ </request>
+</manifest>
diff --git a/packaging/weston.sh b/packaging/weston.sh
new file mode 100644 (file)
index 0000000..e5bf416
--- /dev/null
@@ -0,0 +1,19 @@
+if [ -z "$USER" ]; then
+    export USER=root
+fi
+
+XDG_RUNTIME_DIR=/run/user/$USER
+
+if [ ! -d "${XDG_RUNTIME_DIR}" ]; then
+    mkdir -p $XDG_RUNTIME_DIR
+    chmod 700 $XDG_RUNTIME_DIR
+fi
+
+export XDG_RUNTIME_DIR
+
+if [ -z "$HOME" ] || [ "$HOME" = "/" ]; then
+    export HOME=/root
+fi
+
+export ELM_ENGINE=wayland_shm
+export ECORE_EVAS_ENGINE=wayland_shm
index bc13ee3..91c8978 100644 (file)
@@ -9,6 +9,9 @@ Source0:    %{name}-%{version}.tar.bz2
 Source1:    cursors.tar.bz2
 Source2:    weston.service
 Source3:    99-vtc1000-quirk.rules
+Source4:    rc.weston
+Source5:    weston.sh
+Source6:    weston.manifest
 BuildRequires: pkgconfig(wayland-server)
 BuildRequires: pkgconfig(egl)
 BuildRequires: pkgconfig(gl)
@@ -66,16 +69,28 @@ install -m 755 clients/simple-shm $RPM_BUILD_ROOT%{_bindir}/wayland-simple-shm
 install -m 755 clients/simple-touch $RPM_BUILD_ROOT%{_bindir}/wayland-simple-touch
 install -m 755 clients/smoke $RPM_BUILD_ROOT%{_bindir}/wayland-smoke
 
+# Systemd
 mkdir -p $RPM_BUILD_ROOT/%{_libdir}/systemd/system/graphical.target.wants
 install -m 0644 %{SOURCE2} $RPM_BUILD_ROOT/%{_libdir}/systemd/system/
 mkdir -p $RPM_BUILD_ROOT/%{_libdir}/udev/rules.d/
 install -m 0644 %{SOURCE3} $RPM_BUILD_ROOT/%{_libdir}/udev/rules.d/
 ln -sf ../weston.service $RPM_BUILD_ROOT/%{_libdir}/systemd/system/graphical.target.wants/weston.service
 
+# System V
+mkdir -p %{buildroot}%{_sysconfdir}/rc.d/init.d
+mkdir -p %{buildroot}%{_sysconfdir}/rc.d/rc3.d
+install -m 0755 %{SOURCE4} %{buildroot}%{_sysconfdir}/rc.d/init.d/weston
+ln -sf %{_sysconfdir}/rc.d/init.d/weston %{buildroot}%{_sysconfdir}/rc.d/rc3.d/S20weston
+
+# Environment variables necessary to run Weston and Wayland clients.
+mkdir -p %{buildroot}%{_sysconfdir}/profile.d
+install -m 0644 %{SOURCE5} %{buildroot}%{_sysconfdir}/profile.d
+
 mkdir -p $RPM_BUILD_ROOT%{_datadir}/icons/default
 tar -C $RPM_BUILD_ROOT%{_datadir}/icons/default -xvf %{SOURCE1}
 
 %files
+%manifest packaging/weston.manifest
 %defattr(-,root,root,-)
 %{_bindir}/weston
 %{_bindir}/weston-terminal
@@ -93,6 +108,9 @@ tar -C $RPM_BUILD_ROOT%{_datadir}/icons/default -xvf %{SOURCE1}
 %{_libdir}/systemd/system/weston.service
 %{_libdir}/systemd/system/graphical.target.wants/weston.service
 %{_libdir}/udev/rules.d/99-vtc1000-quirk.rules
+%{_sysconfdir}/profile.d/weston.sh
+%{_sysconfdir}/rc.d/init.d/weston
+%{_sysconfdir}/rc.d/rc3.d/S20weston
 
 %files cursors
 %defattr(-,root,root,-)