All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/3] util-linux: Add missing MIT license
@ 2024-03-29 16:17 Richard Purdie
  2024-03-29 16:17 ` [PATCH 2/3] util-linux: Add fcntl-lock Richard Purdie
  2024-03-29 16:17 ` [PATCH 3/3] run-postinsts: Add workaround for locking deadlock issue Richard Purdie
  0 siblings, 2 replies; 3+ messages in thread
From: Richard Purdie @ 2024-03-29 16:17 UTC (permalink / raw
  To: openembedded-core

The MIT license was missing from the license list for util-linux. Add
a patch, submitted to upstream which adds the missing license mentions.

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
---
 meta/recipes-core/util-linux/util-linux.inc   |  5 ++-
 .../util-linux/util-linux/mit-license.patch   | 45 +++++++++++++++++++
 2 files changed, 48 insertions(+), 2 deletions(-)
 create mode 100644 meta/recipes-core/util-linux/util-linux/mit-license.patch

diff --git a/meta/recipes-core/util-linux/util-linux.inc b/meta/recipes-core/util-linux/util-linux.inc
index 4e9d22f2690..d96f00fbab5 100644
--- a/meta/recipes-core/util-linux/util-linux.inc
+++ b/meta/recipes-core/util-linux/util-linux.inc
@@ -6,14 +6,14 @@ disk partitioning, kernel message management, filesystem creation, and system lo
 
 SECTION = "base"
 
-LICENSE = "GPL-1.0-or-later & GPL-2.0-or-later & LGPL-2.1-or-later & BSD-2-Clause & BSD-3-Clause & BSD-4-Clause"
+LICENSE = "GPL-1.0-or-later & GPL-2.0-or-later & LGPL-2.1-or-later & BSD-2-Clause & BSD-3-Clause & BSD-4-Clause & MIT"
 LICENSE:${PN}-fdisk = "GPL-1.0-or-later"
 LICENSE:${PN}-libblkid = "LGPL-2.1-or-later"
 LICENSE:${PN}-libfdisk = "LGPL-2.1-or-later"
 LICENSE:${PN}-libmount = "LGPL-2.1-or-later"
 LICENSE:${PN}-libsmartcols = "LGPL-2.1-or-later"
 
-LIC_FILES_CHKSUM = "file://README.licensing;md5=6b0e0a2320e66e62eef9b8149a6faec4 \
+LIC_FILES_CHKSUM = "file://README.licensing;md5=cc80239f106687ab39ef0271ff5cf4ba \
                     file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
                     file://Documentation/licenses/COPYING.GPL-2.0-or-later;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
                     file://Documentation/licenses/COPYING.LGPL-2.1-or-later;md5=4fbd65380cdd255951079008b364516c \
@@ -29,6 +29,7 @@ LIC_FILES_CHKSUM = "file://README.licensing;md5=6b0e0a2320e66e62eef9b8149a6faec4
 FILESEXTRAPATHS:prepend := "${THISDIR}/util-linux:"
 MAJOR_VERSION = "${@'.'.join(d.getVar('PV').split('.')[0:2])}"
 SRC_URI = "${KERNELORG_MIRROR}/linux/utils/util-linux/v${MAJOR_VERSION}/util-linux-${PV}.tar.xz \
+           file://mit-license.patch \
            file://configure-sbindir.patch \
            file://runuser.pamd \
            file://runuser-l.pamd \
diff --git a/meta/recipes-core/util-linux/util-linux/mit-license.patch b/meta/recipes-core/util-linux/util-linux/mit-license.patch
new file mode 100644
index 00000000000..afbec98f189
--- /dev/null
+++ b/meta/recipes-core/util-linux/util-linux/mit-license.patch
@@ -0,0 +1,45 @@
+From 5b8fab1584017d9d9be008c23b90128bba41a7b5 Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Thu, 28 Mar 2024 12:16:57 +0000
+Subject: [PATCH] README.licensing/flock: Add MIT license mention
+
+Looking at the license text, flock.c is under the MIT license (see
+https://spdx.org/licenses/MIT).
+
+Add an SPDX license identifier header and add to the list of licenses the
+source so everything is correctly listed/identified.
+
+Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
+
+Upstream-Status: Submitted [https://github.com/util-linux/util-linux/pull/2870]
+
+---
+ README.licensing  | 2 ++
+ sys-utils/flock.c | 4 +++-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/README.licensing b/README.licensing
+index 4454f8392a..535ad34813 100644
+--- a/README.licensing
++++ b/README.licensing
+@@ -12,6 +12,8 @@ There is code under:
+ 
+    * LGPL-2.1-or-later  - GNU Lesser General Public License 2.1 or any later version
+ 
++   * MIT                - MIT License
++
+    * BSD-2-Clause       - Simplified BSD License
+ 
+    * BSD-3-Clause       - BSD 3-Clause "New" or "Revised" License
+diff --git a/sys-utils/flock.c b/sys-utils/flock.c
+index fed29d7270..7d878ff810 100644
+--- a/sys-utils/flock.c
++++ b/sys-utils/flock.c
+@@ -1,4 +1,6 @@
+-/*   Copyright 2003-2005 H. Peter Anvin - All Rights Reserved
++/*   SPDX-License-Identifier: MIT
++ *
++ *   Copyright 2003-2005 H. Peter Anvin - All Rights Reserved
+  *
+  *   Permission is hereby granted, free of charge, to any person
+  *   obtaining a copy of this software and associated documentation
-- 
2.40.1



^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH 2/3] util-linux: Add fcntl-lock
  2024-03-29 16:17 [PATCH 1/3] util-linux: Add missing MIT license Richard Purdie
@ 2024-03-29 16:17 ` Richard Purdie
  2024-03-29 16:17 ` [PATCH 3/3] run-postinsts: Add workaround for locking deadlock issue Richard Purdie
  1 sibling, 0 replies; 3+ messages in thread
From: Richard Purdie @ 2024-03-29 16:17 UTC (permalink / raw
  To: openembedded-core

Add a version of flock that uses the fnctl based lockf locking instead of
flock based locks. This allows us to take the same lock that opkg would
use from a shell script. The two different locking mechanisms operate
independently of each other.

Inserting this C file into the util-linux build seems like the easiest/best
place to insert the code. At this point it hasn't been discussed with upstream.

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
---
 meta/recipes-core/util-linux/util-linux.inc   |   1 +
 .../util-linux/util-linux/fcntl-lock.c        | 332 ++++++++++++++++++
 .../util-linux/util-linux_2.39.3.bb           |   7 +
 3 files changed, 340 insertions(+)
 create mode 100644 meta/recipes-core/util-linux/util-linux/fcntl-lock.c

diff --git a/meta/recipes-core/util-linux/util-linux.inc b/meta/recipes-core/util-linux/util-linux.inc
index d96f00fbab5..f4b547215e8 100644
--- a/meta/recipes-core/util-linux/util-linux.inc
+++ b/meta/recipes-core/util-linux/util-linux.inc
@@ -38,6 +38,7 @@ SRC_URI = "${KERNELORG_MIRROR}/linux/utils/util-linux/v${MAJOR_VERSION}/util-lin
            file://display_testname_for_subtest.patch \
            file://avoid_parallel_tests.patch \
            file://0001-login-utils-include-libgen.h-for-basename-API.patch \
+           file://fcntl-lock.c \
            "
 
 SRC_URI[sha256sum] = "7b6605e48d1a49f43cc4b4cfc59f313d0dd5402fa40b96810bd572e167dfed0f"
diff --git a/meta/recipes-core/util-linux/util-linux/fcntl-lock.c b/meta/recipes-core/util-linux/util-linux/fcntl-lock.c
new file mode 100644
index 00000000000..966d8c5ecb6
--- /dev/null
+++ b/meta/recipes-core/util-linux/util-linux/fcntl-lock.c
@@ -0,0 +1,332 @@
+// From https://github.com/magnumripper/fcntl-lock
+// SPDX-License-Identifier: MIT
+/* ----------------------------------------------------------------------- *
+ *
+ *   Copyright 2003-2005 H. Peter Anvin - All Rights Reserved
+ *   Copyright 2015 magnum (fcntl version)
+ *
+ *   Permission is hereby granted, free of charge, to any person
+ *   obtaining a copy of this software and associated documentation
+ *   files (the "Software"), to deal in the Software without
+ *   restriction, including without limitation the rights to use,
+ *   copy, modify, merge, publish, distribute, sublicense, and/or
+ *   sell copies of the Software, and to permit persons to whom
+ *   the Software is furnished to do so, subject to the following
+ *   conditions:
+ *
+ *   The above copyright notice and this permission notice shall
+ *   be included in all copies or substantial portions of the Software.
+ *
+ *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ *   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ *   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ *   OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * ----------------------------------------------------------------------- */
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <getopt.h>
+#include <signal.h>
+#include <ctype.h>
+#include <string.h>
+#include <paths.h>
+#include <sysexits.h>
+#include <sys/types.h>
+#include <sys/file.h>
+#include <sys/time.h>
+#include <sys/wait.h>
+
+#define PACKAGE_STRING "magnum"
+#define _(x) (x)
+
+static const struct option long_options[] = {
+  { "shared",       0, NULL, 's' },
+  { "exclusive",    0, NULL, 'x' },
+  { "unlock",       0, NULL, 'u' },
+  { "nonblocking",  0, NULL, 'n' },
+  { "nb",           0, NULL, 'n' },
+  { "timeout",      1, NULL, 'w' },
+  { "wait",         1, NULL, 'w' },
+  { "close",        0, NULL, 'o' },
+  { "help",         0, NULL, 'h' },
+  { "version",      0, NULL, 'V' },
+  { 0, 0, 0, 0 }
+};
+
+const char *program;
+
+static void usage(int ex)
+{
+  fputs("fcntl-lock (" PACKAGE_STRING ")\n", stderr);
+  fprintf(stderr,
+	_("Usage: %1$s [-sxun][-w #] fd#\n"
+	  "       %1$s [-sxon][-w #] file [-c] command...\n"
+	  "       %1$s [-sxon][-w #] directory [-c] command...\n"
+	  "  -s  --shared     Get a shared lock\n"
+	  "  -x  --exclusive  Get an exclusive lock\n"
+	  "  -u  --unlock     Remove a lock\n"
+	  "  -n  --nonblock   Fail rather than wait\n"
+	  "  -w  --timeout    Wait for a limited amount of time\n"
+	  "  -o  --close      Close file descriptor before running command\n"
+	  "  -c  --command    Run a single command string through the shell\n"
+	  "  -h  --help       Display this text\n"
+	  "  -V  --version    Display version\n"),
+	  program);
+  exit(ex);
+}
+
+
+static sig_atomic_t timeout_expired = 0;
+
+static void timeout_handler(int sig)
+{
+  (void)sig;
+
+  timeout_expired = 1;
+}
+
+
+static char * strtotimeval(const char *str, struct timeval *tv)
+{
+  char *s;
+  long fs;			/* Fractional seconds */
+  int i;
+
+  tv->tv_sec = strtol(str, &s, 10);
+  fs = 0;
+
+  if ( *s == '.' ) {
+    s++;
+
+    for ( i = 0 ; i < 6 ; i++ ) {
+      if ( !isdigit(*s) )
+	break;
+
+      fs *= 10;
+      fs += *s++ - '0';
+    }
+
+    for ( ; i < 6; i++ )
+      fs *= 10;
+
+    while ( isdigit(*s) )
+      s++;
+  }
+
+  tv->tv_usec = fs;
+  return s;
+}
+
+int main(int argc, char *argv[])
+{
+  struct itimerval timeout, old_timer;
+  int have_timeout = 0;
+  int type = F_WRLCK;
+  int block = F_SETLKW;
+  int fd = -1;
+  int opt, ix;
+  int do_close = 0;
+  int err;
+  int status;
+  char *eon;
+  char **cmd_argv = NULL, *sh_c_argv[4];
+  struct flock lock;
+  const char *filename = NULL;
+  struct sigaction sa, old_sa;
+
+  program = argv[0];
+
+  if ( argc < 2 )
+    usage(EX_USAGE);
+
+  memset(&timeout, 0, sizeof timeout);
+
+  optopt = 0;
+  while ( (opt = getopt_long(argc, argv, "+sexnouw:hV?", long_options, &ix)) != EOF ) {
+    switch(opt) {
+    case 's':
+      type = F_RDLCK;
+      break;
+    case 'e':
+    case 'x':
+      type = F_WRLCK;
+      break;
+    case 'u':
+      type = F_UNLCK;
+      break;
+    case 'o':
+      do_close = 1;
+      break;
+    case 'n':
+      block = F_SETLK;
+      break;
+    case 'w':
+      have_timeout = 1;
+      eon = strtotimeval(optarg, &timeout.it_value);
+      if ( *eon )
+	usage(EX_USAGE);
+      break;
+    case 'V':
+      printf("fcntl-lock (%s)\n", PACKAGE_STRING);
+      exit(0);
+    default:
+      /* optopt will be set if this was an unrecognized option, i.e. *not* 'h' or '?' */
+      usage(optopt ? EX_USAGE : 0);
+      break;
+    }
+  }
+
+  if ( argc > optind+1 ) {
+    /* Run command */
+
+    if ( !strcmp(argv[optind+1], "-c") ||
+	 !strcmp(argv[optind+1], "--command") ) {
+
+      if ( argc != optind+3 ) {
+	fprintf(stderr, _("%s: %s requires exactly one command argument\n"),
+		program, argv[optind+1]);
+	exit(EX_USAGE);
+      }
+
+      cmd_argv = sh_c_argv;
+
+      cmd_argv[0] = getenv("SHELL");
+      if ( !cmd_argv[0] || !*cmd_argv[0] )
+	cmd_argv[0] = _PATH_BSHELL;
+
+      cmd_argv[1] = "-c";
+      cmd_argv[2] = argv[optind+2];
+      cmd_argv[3] = 0;
+    } else {
+      cmd_argv = &argv[optind+1];
+    }
+
+    filename = argv[optind];
+    fd = open(filename, O_RDWR|O_NOCTTY|O_CREAT, 0666);
+    /* Linux doesn't like O_CREAT on a directory, even though it should be a
+       no-op */
+    if (fd < 0 && errno == EISDIR)
+        fd = open(filename, O_RDONLY|O_NOCTTY);
+
+    if ( fd < 0 ) {
+      err = errno;
+      fprintf(stderr, _("%s: cannot open lock file %s: %s\n"),
+	      program, argv[optind], strerror(err));
+      exit((err == ENOMEM||err == EMFILE||err == ENFILE) ? EX_OSERR :
+	   (err == EROFS||err == ENOSPC) ? EX_CANTCREAT :
+	   EX_NOINPUT);
+    }
+
+  } else if (optind < argc) {
+    /* Use provided file descriptor */
+
+    fd = (int)strtol(argv[optind], &eon, 10);
+    if ( *eon || !argv[optind] ) {
+      fprintf(stderr, _("%s: bad number: %s\n"), program, argv[optind]);
+      exit(EX_USAGE);
+    }
+
+  } else {
+    /* Bad options */
+
+    fprintf(stderr, _("%s: requires file descriptor, file or directory\n"),
+		program);
+    exit(EX_USAGE);
+  }
+
+
+  if ( have_timeout ) {
+    if ( timeout.it_value.tv_sec == 0 &&
+	 timeout.it_value.tv_usec == 0 ) {
+      /* -w 0 is equivalent to -n; this has to be special-cased
+	 because setting an itimer to zero means disabled! */
+
+      have_timeout = 0;
+      block = F_SETLK;
+    } else {
+      memset(&sa, 0, sizeof sa);
+
+      sa.sa_handler = timeout_handler;
+      sa.sa_flags   = SA_RESETHAND;
+      sigaction(SIGALRM, &sa, &old_sa);
+
+      setitimer(ITIMER_REAL, &timeout, &old_timer);
+    }
+  }
+
+  memset(&lock, 0, sizeof(lock));
+  lock.l_type = type;
+  while ( fcntl(fd, block, &lock) ) {
+    switch( (err = errno) ) {
+    case EAGAIN:		/* -n option set and failed to lock */
+    case EACCES:		/* -n option set and failed to lock */
+      exit(1);
+    case EINTR:			/* Signal received */
+      if ( timeout_expired )
+	exit(1);		/* -w option set and failed to lock */
+      continue;			/* otherwise try again */
+    default:			/* Other errors */
+      if ( filename )
+	fprintf(stderr, "%s: %s: %s\n", program, filename, strerror(err));
+      else
+	fprintf(stderr, "%s: %d: %s\n", program, fd, strerror(err));
+      exit((err == ENOLCK||err == ENOMEM) ? EX_OSERR : EX_DATAERR);
+    }
+  }
+
+  if ( have_timeout ) {
+    setitimer(ITIMER_REAL, &old_timer, NULL); /* Cancel itimer */
+    sigaction(SIGALRM, &old_sa, NULL); /* Cancel signal handler */
+  }
+
+  status = 0;
+
+  if ( cmd_argv ) {
+    pid_t w, f;
+
+    /* Clear any inherited settings */
+    signal(SIGCHLD, SIG_DFL);
+    f = fork();
+
+    if ( f < 0 ) {
+      err = errno;
+      fprintf(stderr, _("%s: fork failed: %s\n"), program, strerror(err));
+      exit(EX_OSERR);
+    } else if ( f == 0 ) {
+      if ( do_close )
+	close(fd);
+      err = errno;
+      execvp(cmd_argv[0], cmd_argv);
+      /* execvp() failed */
+      fprintf(stderr, "%s: %s: %s\n", program, cmd_argv[0], strerror(err));
+      _exit((err == ENOMEM) ? EX_OSERR: EX_UNAVAILABLE);
+    } else {
+      do {
+	w = waitpid(f, &status, 0);
+	if (w == -1 && errno != EINTR)
+	  break;
+      } while ( w != f );
+
+      if (w == -1) {
+	err = errno;
+	status = EXIT_FAILURE;
+	fprintf(stderr, "%s: waitpid failed: %s\n", program, strerror(err));
+      } else if ( WIFEXITED(status) )
+	status = WEXITSTATUS(status);
+      else if ( WIFSIGNALED(status) )
+	status = WTERMSIG(status) + 128;
+      else
+	status = EX_OSERR;	/* WTF? */
+    }
+  }
+
+  return status;
+}
diff --git a/meta/recipes-core/util-linux/util-linux_2.39.3.bb b/meta/recipes-core/util-linux/util-linux_2.39.3.bb
index 3e87dcc2c2c..83b3f4e05b3 100644
--- a/meta/recipes-core/util-linux/util-linux_2.39.3.bb
+++ b/meta/recipes-core/util-linux/util-linux_2.39.3.bb
@@ -147,6 +147,11 @@ SYSTEMD_AUTO_ENABLE:${PN}-uuidd = "disable"
 SYSTEMD_SERVICE:${PN}-fstrim = "fstrim.timer fstrim.service"
 SYSTEMD_AUTO_ENABLE:${PN}-fstrim = "disable"
 
+do_compile:append () {
+	cp ${WORKDIR}/fcntl-lock.c ${S}/fcntl-lock.c
+	${CC} ${CFLAGS} ${LDFLAGS} ${S}/fcntl-lock.c -o ${B}/fcntl-lock
+}
+
 do_install () {
 	# with ccache the timestamps on compiled files may
 	# end up earlier than on their inputs, this allows
@@ -182,6 +187,8 @@ do_install () {
 	echo 'MOUNTALL="-t nonfs,nosmbfs,noncpfs"' > ${D}${sysconfdir}/default/mountall
 
 	rm -f ${D}${bindir}/chkdupexe
+
+	install -m 0755 ${B}/fcntl-lock ${D}${bindir}
 }
 
 do_install:append:class-target () {
-- 
2.40.1



^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH 3/3] run-postinsts: Add workaround for locking deadlock issue
  2024-03-29 16:17 [PATCH 1/3] util-linux: Add missing MIT license Richard Purdie
  2024-03-29 16:17 ` [PATCH 2/3] util-linux: Add fcntl-lock Richard Purdie
@ 2024-03-29 16:17 ` Richard Purdie
  1 sibling, 0 replies; 3+ messages in thread
From: Richard Purdie @ 2024-03-29 16:17 UTC (permalink / raw
  To: openembedded-core

When run-postinsts is installed, a service is added for system which can run
while the package is still being installed. This calls "opkg configure" and if
package management is still running, it can deadlock and error.

To work around this, call fcntl-lock on the opkg lock file and if the lock
was held, it would wait to obtain it. This wait gives the package management
time to finish the install before the configure can then take the lock and run.

Note the dependency in SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS otherwise we'd see
sstate selftest failures.

Also ensure that if the configure fails, the scripts returns an error. This
applies to opkg and dpkg.

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
---
 meta/conf/layer.conf                                  |  1 +
 .../run-postinsts/run-postinsts/run-postinsts         | 11 +++++++++--
 .../run-postinsts/run-postinsts_1.0.bb                |  2 ++
 3 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/meta/conf/layer.conf b/meta/conf/layer.conf
index 62f86f361ad..efbf2610f99 100644
--- a/meta/conf/layer.conf
+++ b/meta/conf/layer.conf
@@ -87,6 +87,7 @@ SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS += " \
   sato-icon-theme->gtk+3 \
   adwaita-icon-theme->gdk-pixbuf \
   adwaita-icon-theme->gtk+3 \
+  run-postinsts->util-linux \
 "
 
 # Avoid adding bison-native to the sysroot without a specific
diff --git a/meta/recipes-devtools/run-postinsts/run-postinsts/run-postinsts b/meta/recipes-devtools/run-postinsts/run-postinsts/run-postinsts
index 95dccb9cae1..1f3e692029c 100755
--- a/meta/recipes-devtools/run-postinsts/run-postinsts/run-postinsts
+++ b/meta/recipes-devtools/run-postinsts/run-postinsts/run-postinsts
@@ -81,11 +81,18 @@ remove_rcsd_link=1
 if $pm_installed; then
 	case $pm in
 		"ipk")
-			eval opkg configure $append_log
+			if ! `fcntl-lock --wait 30 /run/opkg.lock true`; then
+				eval echo "Unable to obtain the opkg lock, deadlock?" $append_log
+			fi
+			if ! eval "opkg configure $append_log"; then
+			    exit 1
+			fi
 			;;
 
 		"deb")
-			eval dpkg --configure -a $append_log
+			if ! eval "eval dpkg --configure -a $append_log"; then
+			    exit 1
+			fi
 			;;
 	esac
 else
diff --git a/meta/recipes-devtools/run-postinsts/run-postinsts_1.0.bb b/meta/recipes-devtools/run-postinsts/run-postinsts_1.0.bb
index 72ba8c02270..e977942de87 100644
--- a/meta/recipes-devtools/run-postinsts/run-postinsts_1.0.bb
+++ b/meta/recipes-devtools/run-postinsts/run-postinsts_1.0.bb
@@ -12,6 +12,8 @@ S = "${WORKDIR}"
 
 inherit allarch systemd update-rc.d
 
+RDEPENDS:${PN} = "util-linux-fcntl-lock"
+
 INITSCRIPT_NAME = "run-postinsts"
 INITSCRIPT_PARAMS = "start 99 S ."
 
-- 
2.40.1



^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2024-03-29 16:17 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-03-29 16:17 [PATCH 1/3] util-linux: Add missing MIT license Richard Purdie
2024-03-29 16:17 ` [PATCH 2/3] util-linux: Add fcntl-lock Richard Purdie
2024-03-29 16:17 ` [PATCH 3/3] run-postinsts: Add workaround for locking deadlock issue Richard Purdie

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.