From patchwork Tue Oct 8 15:49:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Freihofer, Adrian" X-Patchwork-Id: 1173400 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=googlegroups.com (client-ip=2a00:1450:4864:20::538; helo=mail-ed1-x538.google.com; envelope-from=swupdate+bncbaabbg7a6lwakgqehz5jyiq@googlegroups.com; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=siemens.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlegroups.com header.i=@googlegroups.com header.b="DTHx5Zrj"; dkim-atps=neutral Received: from mail-ed1-x538.google.com (mail-ed1-x538.google.com [IPv6:2a00:1450:4864:20::538]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 46nhcd0x3Qz9sP7 for ; Wed, 9 Oct 2019 02:49:51 +1100 (AEDT) Received: by mail-ed1-x538.google.com with SMTP id a21sf4717825edt.19 for ; Tue, 08 Oct 2019 08:49:51 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1570549787; cv=pass; d=google.com; s=arc-20160816; b=wUhT06ZP2J52rScatXVXWNAcfr2wixbx9ST77m3ZMdEp/T35EATBw5tVN90mTGTsHM /MearKxNfOFKBkXtIub7OPlGXtDyIdr1WBuszsCHwTldwooh8Qg67OBL79anjsqFQUWl f352sbn5xZCpMMJ7eLrEpvYg7tGBAtpBER/yEC6T/1cCi/9tHJ/8i+Y90BCNJc4L1JNU mTVcROWDqvGNs2RFixvxEJz1b0XolUNsFbPOSVYchP5RpLFyk81et9YRKAnISqAnMvSO 7710hNsGws6UqLrZpCU/XSSEVQGY8fkdQqsNtTqcwIakuG8tjVqzdPtFM5tCNp0aIkt2 KVpQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:message-id:date:subject:cc:to:from :mime-version:sender:dkim-signature; bh=iIMEVumdrn2/7EqLO7yCOfRF8AeVq4SmroQ+uNp5opU=; b=0HmNn6JSParhad03Ca0XCMvdWq5Yo0C/JXBxYHwxW/dtlahN5JkDmmBW8498SgQyK8 RHOcaHvJ00aukcIGVPfKARUEBSOV53uQKghZ6gb7RTjy72Q6HcAO7EROspKZj7KXFGKc 4jceKHd42xfSmq83WZZlBnv0i5QtFraBphndcGSrR9kGsFALoO8iBpA+AGrS5H1AlOKr dkF926klzo4dbx5xCj7jP5zH+7uCPwYXsW7PIqV7XOZiHxHoL6QljlAIwGnj1BiWDGQ3 m/yTgUoXozO310ibS7tct2j/aQKej7tqv7YomRN3wD/VDI6NNHT92SjBiOciQNcMwFDy ehBg== ARC-Authentication-Results: i=2; gmr-mx.google.com; spf=pass (google.com: domain of adrian.freihofer@siemens.com designates 192.35.17.28 as permitted sender) smtp.mailfrom=adrian.freihofer@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20161025; h=sender:mime-version:from:to:cc:subject:date:message-id :x-original-sender:x-original-authentication-results:precedence :mailing-list:list-id:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=iIMEVumdrn2/7EqLO7yCOfRF8AeVq4SmroQ+uNp5opU=; b=DTHx5ZrjugQcBomtCUdXWha1qyon2VPjtRrb/kLfy+qCZrSN5CXDhUYk8mzdHL3mkM R6rU0F684tA3AvIMb3TjsRA8JE5OcqKBLjfarOq4qNrc9k7ZcyFFKIOMGgoRktovfUNJ 5bIdlKNGGryShIrUyg0tEKXe8PQICe24ipKa3+7FidsQ1IcDZZZpJ9DWVFu4VD4ZYRek 3f/tspPCVuyrvbpEAvRMoZBoR664CvBnUWA4Vv0gffGUmYsAsTQiGlS0dYbpKmSNfqBD qnQ6eaamupyeVZEo+IyEAfpaem6H0GwFTiAvtEQuxSj8dVzGaJ32g9BsBRFhlAnyKRJ3 QPBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=sender:x-gm-message-state:mime-version:from:to:cc:subject:date :message-id:x-original-sender:x-original-authentication-results :precedence:mailing-list:list-id:x-spam-checked-in-group:list-post :list-help:list-archive:list-subscribe:list-unsubscribe; bh=iIMEVumdrn2/7EqLO7yCOfRF8AeVq4SmroQ+uNp5opU=; b=ku2LXLVjD3QHnrKB4EZJAkqO5x0EMvAQ6EXSnj1oYGLcUEKfYyzjvMaV/srxiVvyrJ rKbfb4a7TBU1RMcFRkL8vhMG7oNSO1+AMn5kCAyVEu+bXNDWFp0vRI4FPQMqAL3xKbGk YCHDYI4Npzr/bT4nnl8LO7xcxWeoOB4MWcbaMdgfth86gQgwrnzt+GmBcJxNe5bE4/va 26/2rNHFpqKas05E9JtCQZ1t/VfvkROiQwEeeh+eM8et/bFN7ohvXPc0jCXcyNtKZ+mr l6RBZxYUOXjGLkrPh42qq8R3UMybB8orlP0EeW1S0tWbcCCX8y4Ex/yNZkQAqYnX9swc +wew== Sender: swupdate@googlegroups.com X-Gm-Message-State: APjAAAWClC7zgGMLvPf2fP0boBJrq5N2qY/h5pYboKPOt3ffxIlflEI3 DGRgNnb6fW971xPUiwUM0IU= X-Google-Smtp-Source: APXvYqykV0H/YKqDYuWjrRH1Y9bxZX0gziQaJ0q4+YOW65NISiL9dZsOMXLUxnz7Lxo1AM5ejJ1ulQ== X-Received: by 2002:a50:d6db:: with SMTP id l27mr35013166edj.164.1570549787388; Tue, 08 Oct 2019 08:49:47 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: swupdate@googlegroups.com Received: by 2002:a17:906:a3d7:: with SMTP id ca23ls985024ejb.0.gmail; Tue, 08 Oct 2019 08:49:46 -0700 (PDT) X-Received: by 2002:a17:906:5acd:: with SMTP id x13mr29680605ejs.186.1570549786846; Tue, 08 Oct 2019 08:49:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1570549786; cv=none; d=google.com; s=arc-20160816; b=FfqG/1cOgUOuz4ilVVDBsCGCZS2FgutXFt04st9vK/1OwJO8t7Q647xgNNM+BUVp4k G/dMYZ0yhA1rd9smzXXiLF2QZoyN7sQivVk90YnTKwY50f10Rud4vdHSU+SBdK9goWaG XkKvB2QN33W74NqdTU89VF8+e1Vma3eQSp0yrFjFnu6WehZtkdBcpNHHolHNYXHjlR/2 Ef7zM1pJ78bLSnYdVr8CErfBjk0zEVOu2ETRBFtkG+/lK3AqUmTdKSHr6wJ2/HNUYK9C CgeDdUo8h3/MUNGwQOaR26UmaIw3OtUsOO0VAj5Xx9F4PLKB8EQUw8iFfo1fbVNfy13T MZ2w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=message-id:date:subject:cc:to:from; bh=7JkCiX7q1VevR4osKHVwE56T3UTgaaVqiIy7wwaWYKg=; b=cRbVSBndBWhSNv4+GhMHwLcXCWkSJn5k8ZbRlyFaZtFmfYEAVi2gwIYHeKhh5hjx3k XiiEQDH/VwK4j3RY7WMIDf78Ic/71o/2Y0DelPJ2EmvA/upunHNrrWgP51jng/pjZh+v wh6YVbCEfl2FneioPBKuYcO3hOp7JvefYGvew3I8XE9S0O3Gy3tHtFB+MiGGpZBBfOcT R/Y4VCn+dYISpnBdSUiQEfDGzxpEx4tkV0Hh61WOYr1Xn1hJ3X2SMpARbm4nmrj9Ys2K skbceZLWV5GMA6x4Tb7AC8pVJsdS+KLz5QzQrFVwEpO1pNDS6L7lviPw07BwmSmw3DL0 VvRw== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: domain of adrian.freihofer@siemens.com designates 192.35.17.28 as permitted sender) smtp.mailfrom=adrian.freihofer@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Received: from goliath.siemens.de (goliath.siemens.de. [192.35.17.28]) by gmr-mx.google.com with ESMTPS id q8si1722760edn.5.2019.10.08.08.49.46 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 Oct 2019 08:49:46 -0700 (PDT) Received-SPF: pass (google.com: domain of adrian.freihofer@siemens.com designates 192.35.17.28 as permitted sender) client-ip=192.35.17.28; Received: from mail3.siemens.de (mail3.siemens.de [139.25.208.14]) by goliath.siemens.de (8.15.2/8.15.2) with ESMTPS id x98Fnkxi022640 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 8 Oct 2019 17:49:46 +0200 Received: from dev.vm6.ccp.siemens.com (md1w1dqc.ad001.siemens.net [139.16.78.161]) by mail3.siemens.de (8.15.2/8.15.2) with ESMTP id x98Fnjrb004069; Tue, 8 Oct 2019 17:49:45 +0200 Received: from dev.localdomain (localhost [127.0.0.1]) by dev.vm6.ccp.siemens.com (Postfix) with ESMTP id 10A752353A50; Tue, 8 Oct 2019 17:49:45 +0200 (CEST) From: Adrian Freihofer To: swupdate@googlegroups.com Cc: Adrian Freihofer Subject: [swupdate] [PATCH] systemd generic startup Date: Tue, 8 Oct 2019 17:49:32 +0200 Message-Id: <20191008154932.26394-1-adrian.freihofer@siemens.com> X-Mailer: git-send-email 2.11.0 X-Original-Sender: adrian.freihofer@siemens.com X-Original-Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of adrian.freihofer@siemens.com designates 192.35.17.28 as permitted sender) smtp.mailfrom=adrian.freihofer@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Precedence: list Mailing-list: list swupdate@googlegroups.com; contact swupdate+owners@googlegroups.com List-ID: X-Spam-Checked-In-Group: swupdate@googlegroups.com X-Google-Group-Id: 605343134186 List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , If SYSTEMD_SYSTEM_UNITDIR environment variable is passed to make install, a generic set of systemd service and socket files gets installed. For most projects starting swupdate requires some logic implemented in shell scripts. Therefore swupdate is started by a new shell script /usr/bin/swupdate-pre. swupdate-pre evaluates code snippets from /usr/lib/swupdate.d and /etc/swupdate.d before swupdate gets started. All modes (file, webserver, webclient) of swupdate are supported. Users or distro maintainers are enabled to add simple code snippets adding arguments for swupdate to the following three variables: - SWUPDATE_ARGS - SWUPDATE_WEBSERVER_ARGS - SWUPDATE_DOWNLOAD_ARGS This allows to provide a "just works" configuration for Mongoose if it gets compiled. This was not the case with systemd before. Signed-off-by: Adrian Freihofer --- Makefile | 20 ++++++++++++++++++ doc/source/swupdate.rst | 29 +++++++++++++++----------- startup/systemd/10-mongoose-args | 1 + startup/systemd/swupdate-pre | 28 +++++++++++++++++++++++++ startup/systemd/swupdate-progress.service | 9 ++++++++ startup/systemd/swupdate-usb.rules | 2 ++ startup/systemd/swupdate-usb@.service | 8 +++++++ startup/systemd/swupdate.service | 10 +++++++++ startup/systemd/swupdate.socket | 11 ++++++++++ startup/systemd/systemd-tmpfiles-swupdate.conf | 3 +++ 10 files changed, 109 insertions(+), 12 deletions(-) create mode 100644 startup/systemd/10-mongoose-args create mode 100644 startup/systemd/swupdate-pre create mode 100644 startup/systemd/swupdate-progress.service create mode 100644 startup/systemd/swupdate-usb.rules create mode 100644 startup/systemd/swupdate-usb@.service create mode 100644 startup/systemd/swupdate.service create mode 100644 startup/systemd/swupdate.socket create mode 100644 startup/systemd/systemd-tmpfiles-swupdate.conf diff --git a/Makefile b/Makefile index d60c58e..e067009 100644 --- a/Makefile +++ b/Makefile @@ -461,6 +461,26 @@ install: all install -d ${DESTDIR}/usr/lib/lua/$(LUAVER); \ install -m 0755 ${lua_swupdate} $(DESTDIR)/usr/lib/lua/$(LUAVER); \ fi + if [ "x${SYSTEMD_SYSTEM_UNITDIR}" != "x" ]; then \ + install -d ${DESTDIR}${SYSTEMD_SYSTEM_UNITDIR}; \ + install -d ${DESTDIR}/usr/lib/swupdate.d; \ + install -m 755 startup/systemd/swupdate-pre ${DESTDIR}/usr/bin; \ + install -m 644 startup/systemd/swupdate-progress.service ${DESTDIR}${SYSTEMD_SYSTEM_UNITDIR}; \ + install -m 644 startup/systemd/swupdate-usb@.service ${DESTDIR}${SYSTEMD_SYSTEM_UNITDIR}; \ + install -m 644 startup/systemd/swupdate.socket ${DESTDIR}${SYSTEMD_SYSTEM_UNITDIR}; \ + ctrl_path=${CONFIG_SOCKET_CTRL_PATH}; progr_path=${CONFIG_SOCKET_PROGRESS_PATH}; \ + sed -i -e "s,@@SOCKET_CTRL_PATH@@,$${ctrl_path},g" \ + -e "s,@@SOCKET_PROGRESS_PATH@@,$${progr_path},g" \ + ${DESTDIR}${SYSTEMD_SYSTEM_UNITDIR}/swupdate.socket; \ + install -m 644 startup/systemd/swupdate.service ${DESTDIR}${SYSTEMD_SYSTEM_UNITDIR}; \ + install -d ${DESTDIR}/usr/lib/tmpfiles.d; \ + install -m 0644 startup/systemd/systemd-tmpfiles-swupdate.conf ${DESTDIR}/usr/lib/tmpfiles.d/swupdate.conf; \ + install -d ${DESTDIR}/etc/udev/rules.d; \ + install -m 0644 startup/systemd/swupdate-usb.rules ${DESTDIR}/etc/udev/rules.d/; \ + if [ "x$(CONFIG_MONGOOSE)" == "xy" ]; then \ + install -m 644 startup/systemd/10-mongoose-args ${DESTDIR}/usr/lib/swupdate.d/; \ + fi; \ + fi PHONY += run-tests tests: \ diff --git a/doc/source/swupdate.rst b/doc/source/swupdate.rst index 1ff08ef..ff7783e 100644 --- a/doc/source/swupdate.rst +++ b/doc/source/swupdate.rst @@ -520,22 +520,27 @@ configuration switch ``CONFIG_SYSTEMD``. If enabled, SWUpdate signals systemd about start-up completion and can make optional use of systemd's socket-based activation feature. -A sample systemd service unit file ``/etc/systemd/system/swupdate.service`` -may look like the following starting SWUpdate in suricatta daemon mode: +To install a generic set of service and socket files, pass the +`SYSTEMD_SYSTEM_UNITDIR` parameter, which points to `/lib/systed/system` +for example, to the "make install" command. -:: +For further runtime adjustments, some shell code snippets can be added +to the `/usr/lib/swupdate.d` or `/etc/swupdate.d` folders. The +code snippets are processed by a full-featured shell in alphabetical order. +Files from /etc overwrite files from /usr/ with the same name. - [Unit] - Description=SWUpdate daemon - Documentation=https://github.com/sbabic/swupdate - Documentation=https://sbabic.github.io/swupdate +The purpose of these code snippets is to assign reasonable command line +parameters to swupdate. The following variables may be set: - [Service] - Type=notify - ExecStart=/usr/bin/swupdate -u '-t default -u http://localhost -i 25' +- SWUPDATE_ARGS +- SWUPDATE_WEBSERVER_ARGS +- SWUPDATE_DOWNLOAD_ARGS - [Install] - WantedBy=multi-user.target +A sample configuration file ``/usr/lib/swupdate.d/10-suricatta`` +may look like the following starting SWUpdate in suricatta daemon mode: +:: + + SWUPDATE_DOWNLOAD_ARGS='-t default -u http://localhost -i 25' Started via ``systemctl start swupdate.service``, SWUpdate (re)creates its sockets on startup. For using socket-based diff --git a/startup/systemd/10-mongoose-args b/startup/systemd/10-mongoose-args new file mode 100644 index 0000000..896e66b --- /dev/null +++ b/startup/systemd/10-mongoose-args @@ -0,0 +1 @@ +SWUPDATE_WEBSERVER_ARGS="-r /www ${SWUPDATE_MONGOOSE_EXTRA_ARGS:--p 8080}" diff --git a/startup/systemd/swupdate-pre b/startup/systemd/swupdate-pre new file mode 100644 index 0000000..2d29a12 --- /dev/null +++ b/startup/systemd/swupdate-pre @@ -0,0 +1,28 @@ +#!/bin/sh + +# Override these variables in sourced script(s) located +# in /usr/lib/swupdate.d or /etc/swupdate.d +SWUPDATE_ARGS="-v ${SWUPDATE_EXTRA_ARGS}" +SWUPDATE_WEBSERVER_ARGS="" +SWUPDATE_DOWNLOAD_ARGS="" + +# source all files from /etc/swupdate.d and /usr/lib/swupdate.d/ +# A file found in /etc replaces the same file in /usr +for f in `(test -d /usr/lib/swupdate.d/ && ls -1 /usr/lib/swupdate.d/; test -d /etc/swupdate.d && ls -1 /etc/swupdate.d) | sort -u`; do + if [ -f /etc/swupdate.d/$f ]; then + . /etc/swupdate.d/$f + else + . /usr/lib/swupdate.d/$f + fi +done + +# handle variable escaping in a simmple way. Use exec to forward open filedescriptors from systemd open. +if [ "$SWUPDATE_WEBSERVER_ARGS" != "" -a "$SWUPDATE_DOWNLOAD_ARGS" != "" ]; then + exec /usr/bin/swupdate $SWUPDATE_ARGS -w "$SWUPDATE_WEBSERVER_ARGS" -u "$SWUPDATE_DOWNLOAD_ARGS" +elif [ "$SWUPDATE_WEBSERVER_ARGS" != "" ]; then + exec /usr/bin/swupdate $SWUPDATE_ARGS -w "$SWUPDATE_WEBSERVER_ARGS" +elif [ "$SWUPDATE_DOWNLOAD_ARGS" != "" ]; then + exec /usr/bin/swupdate $SWUPDATE_ARGS -d "$SWUPDATE_DOWNLOAD_ARGS" +else + exec /usr/bin/swupdate $SWUPDATE_ARGS +fi diff --git a/startup/systemd/swupdate-progress.service b/startup/systemd/swupdate-progress.service new file mode 100644 index 0000000..212d151 --- /dev/null +++ b/startup/systemd/swupdate-progress.service @@ -0,0 +1,9 @@ +[Unit] +Description=swupdate progress service +Before=swupdate.service + +[Service] +ExecStart=/usr/bin/swupdate-progress -r -w + +[Install] +WantedBy=swupdate.service diff --git a/startup/systemd/swupdate-usb.rules b/startup/systemd/swupdate-usb.rules new file mode 100644 index 0000000..7bba227 --- /dev/null +++ b/startup/systemd/swupdate-usb.rules @@ -0,0 +1,2 @@ +ACTION=="add", KERNEL=="sd*", SUBSYSTEM=="block", ENV{ID_FS_USAGE}=="filesystem", TAG+="systemd", ENV{SYSTEMD_WANTS}+="swupdate-usb@%k.service" + diff --git a/startup/systemd/swupdate-usb@.service b/startup/systemd/swupdate-usb@.service new file mode 100644 index 0000000..eda9d15 --- /dev/null +++ b/startup/systemd/swupdate-usb@.service @@ -0,0 +1,8 @@ +[Unit] +Description=usb media swupdate service +Requires=swupdate-progress.service + +[Service] +ExecStartPre=/bin/mount /dev/%I /mnt +ExecStart=/bin/sh -c "swupdate-client -v /mnt/*.swu" +ExecStopPost=/bin/umount /mnt diff --git a/startup/systemd/swupdate.service b/startup/systemd/swupdate.service new file mode 100644 index 0000000..a96617a --- /dev/null +++ b/startup/systemd/swupdate.service @@ -0,0 +1,10 @@ +[Unit] +Description=SWUpdate daemon +Documentation=https://github.com/sbabic/swupdate +Documentation=https://sbabic.github.io/swupdate + +[Service] +ExecStart=/usr/bin/swupdate-pre + +[Install] +WantedBy=multi-user.target diff --git a/startup/systemd/swupdate.socket b/startup/systemd/swupdate.socket new file mode 100644 index 0000000..aeb7310 --- /dev/null +++ b/startup/systemd/swupdate.socket @@ -0,0 +1,11 @@ +[Unit] +Description=SWUpdate socket listener +Documentation=https://github.com/sbabic/swupdate +Documentation=https://sbabic.github.io/swupdate + +[Socket] +ListenStream=@@SOCKET_CTRL_PATH@@ +ListenStream=@@SOCKET_PROGRESS_PATH@@ + +[Install] +WantedBy=sockets.target diff --git a/startup/systemd/systemd-tmpfiles-swupdate.conf b/startup/systemd/systemd-tmpfiles-swupdate.conf new file mode 100644 index 0000000..b374ddc --- /dev/null +++ b/startup/systemd/systemd-tmpfiles-swupdate.conf @@ -0,0 +1,3 @@ +X /tmp/datadst +X /tmp/scripts +X /tmp/swupdate.env