Creates a swupdate-progress init script based off swupdate's init script
to allow swupdate-progress to be added to the recovery swupdate-image so
that recovery can automatically reboot the device once an update has been
successfully installed.
If a distro was only configured to use systemd, the conf.d script needed
to launch swupdate-progress wasn't being installed in the swupdate-progress
package, so swupdate-image (which relies only on sysvinit) would never actually
run swupdate-progress, which means recovery was not able to support autoreboot.
Signed-off-by: Kyle Russell <
bkyler...@gmail.com>
---
recipes-support/swupdate/swupdate.inc | 12 +-
.../swupdate/swupdate/90-start-progress | 1 -
.../swupdate/swupdate/swupdate-progress | 142 ++++++++++++++++++
3 files changed, 149 insertions(+), 6 deletions(-)
delete mode 100644 recipes-support/swupdate/swupdate/90-start-progress
create mode 100644 recipes-support/swupdate/swupdate/swupdate-progress
diff --git a/recipes-support/swupdate/swupdate.inc b/recipes-support/swupdate/swupdate.inc
index fa548d6..e6109ab 100644
--- a/recipes-support/swupdate/swupdate.inc
+++ b/recipes-support/swupdate/swupdate.inc
@@ -20,6 +20,7 @@ inherit cml1 update-rc.d systemd pkgconfig
SRC_URI = "git://
github.com/sbabic/swupdate.git;protocol=https;branch=master \
file://defconfig \
file://swupdate \
+ file://swupdate-progress \
file://swupdate.sh \
file://swupdate.service \
file://swupdate.socket.tmpl \
@@ -28,7 +29,6 @@ SRC_URI = "git://
github.com/sbabic/swupdate.git;protocol=https;branch=master \
file://swupdate-progress.service \
file://tmpfiles-swupdate.conf \
file://10-mongoose-args \
- file://90-start-progress \
"
LTOEXTRA += "-flto-partition=none"
@@ -56,7 +56,7 @@ FILES:${PN}-lua += "${libdir}/lua/"
FILES:${PN}-progress = " \
${bindir}/swupdate-progress \
${systemd_system_unitdir}/swupdate-progress.service \
- ${libdir}/swupdate/conf.d/90-start-progress \
+ ${sysconfdir}/init.d/swupdate-progress \
"
FILES:${PN}-usb = " \
${sysconfdir}/udev/rules.d/swupdate-usb.rules \
@@ -239,6 +239,7 @@ do_install () {
install -d ${D}${sysconfdir}/init.d
install -m 755 ${WORKDIR}/swupdate ${D}${sysconfdir}/init.d
+ install -m 755 ${WORKDIR}/swupdate-progress ${D}${sysconfdir}/init.d
sed -i -e "s|/usr/lib/|${libdir}/|" ${D}${sysconfdir}/init.d/swupdate
# shell based configuration loader allows to place code snippets into this folder
@@ -263,15 +264,16 @@ do_install () {
install -m 0644 ${WORKDIR}/tmpfiles-swupdate.conf ${D}${libdir}/tmpfiles.d/swupdate.conf
install -d ${D}${sysconfdir}/udev/rules.d
install -m 0644 ${WORKDIR}/swupdate-usb.rules ${D}${sysconfdir}/udev/rules.d/
- else
- # in case of systemd there is a service file, for sysv init we need to start it as well
- install -m 0644 ${WORKDIR}/90-start-progress ${D}${libdir}/swupdate/conf.d/
fi
}
+INITSCRIPT_PACKAGES += "${PN} ${PN}-progress"
INITSCRIPT_NAME = "swupdate"
INITSCRIPT_PARAMS = "defaults 70"
+INITSCRIPT_NAME_${PN}-progress = "${PN}-progress"
+INITSCRIPT_PARAMS_${PN}-progress = "defaults 71"
+
SYSTEMD_PACKAGES = "${PN} ${PN}-progress ${PN}-usb"
SYSTEMD_SERVICE:${PN} = "swupdate.service swupdate.socket"
SYSTEMD_SERVICE:${PN}-progress = "swupdate-progress.service"
diff --git a/recipes-support/swupdate/swupdate/90-start-progress b/recipes-support/swupdate/swupdate/90-start-progress
deleted file mode 100644
index 3b0eb5e..0000000
--- a/recipes-support/swupdate/swupdate/90-start-progress
+++ /dev/null
@@ -1 +0,0 @@
-exec /usr/bin/swupdate-progress -w -r &
diff --git a/recipes-support/swupdate/swupdate/swupdate-progress b/recipes-support/swupdate/swupdate/swupdate-progress
new file mode 100644
index 0000000..6bb4349
--- /dev/null
+++ b/recipes-support/swupdate/swupdate/swupdate-progress
@@ -0,0 +1,142 @@
+#! /bin/sh
+### BEGIN INIT INFO
+# Provides: swupdate-progress
+# Required-Start: $local_fs
+# Should-Start:
+# Required-Stop: $local_fs
+# Should-Stop:
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: swupdate progress application
+### END INIT INFO
+
+# The definition of actions: (From LSB 3.1.0)
+# start start the service
+# stop stop the service
+# restart stop and restart the service if the service is already running,
+# otherwise start the service
+# try-restart restart the service if the service is already running
+# reload cause the configuration of the service to be reloaded without
+# actually stopping and restarting the service
+# force-reload cause the configuration to be reloaded if the service supports
+# this, otherwise restart the service if it is running
+# status print the current status of the service
+
+# The start, stop, restart, force-reload, and status actions shall be supported
+# by all init scripts; the reload and the try-restart actions are optional
+
+DESC="swupdate-progress"
+NAME="swupdate-progress"
+DAEMON=/usr/bin/swupdate-progress
+DAEMON_ARGS="-w -r"
+PIDFILE=/var/run/$NAME.pid
+
+. /etc/init.d/functions || exit 1
+
+# 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
+
+#
+# Function that starts the daemon/service
+#
+do_start() {
+ local status pid
+
+ status=0
+ pid=`pidofproc $NAME` || status=$?
+ case $status in
+ 0)
+ echo "$DESC already running ($pid)."
+ exit 1
+ ;;
+ *)
+ echo "Starting $DESC ..."
+ cd /home/root
+ exec $DAEMON $DAEMON_ARGS &
+ exit 0
+ ;;
+ esac
+}
+
+#
+# Function that stops the daemon/service
+#
+do_stop() {
+ local pid status
+
+ status=0
+ pid=`pidofproc $NAME` || status=$?
+ case $status in
+ 0)
+ # Exit when fail to stop, the kill would complain when fail
+ kill -s 15 $pid >/dev/null && rm -f $PIDFILE && \
+ echo "Stopped $DESC ($pid)." || exit $?
+ ;;
+ *)
+ echo "$DESC is not running; none killed." >&2
+ ;;
+ esac
+
+ # 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.
+ return $status
+}
+
+#
+# Function that shows the daemon/service status
+#
+status_of_proc () {
+ local pid status
+
+ status=0
+ # pidof output null when no program is running, so no "2>/dev/null".
+ pid=`pidofproc $NAME` || status=$?
+ case $status in
+ 0)
+ echo "$DESC is running ($pid)."
+ exit 0
+ ;;
+ *)
+ echo "$DESC is not running." >&2
+ exit $status
+ ;;
+ esac
+}
+
+case "$1" in
+start)
+ do_start
+ ;;
+stop)
+ do_stop || exit $?
+ ;;
+status)
+ status_of_proc
+ ;;
+restart)
+ # Always start the service regardless the status of do_stop
+ do_stop
+ do_start
+ ;;
+try-restart|force-reload)
+ # force-reload is the same as reload or try-restart according
+ # to its definition, the reload is not implemented here, so
+ # force-reload is the alias of try-restart here, but it should
+ # be the alias of reload if reload is implemented.
+ #
+ # Only start the service when do_stop succeeds
+ do_stop && do_start
+ ;;
+*)
+ echo "Usage: $0 {start|stop|status|restart|try-restart|force-reload}" >&2
+ exit 3
+ ;;
+esac
+
--
2.25.1