From: Peter Seiderer <ps.report@gmx.net>
To: guillaume.bressaix@gmail.com
Cc: buildroot@busybox.net
Subject: Re: [Buildroot] [PATCH 1/1] package/ntpsec: new package
Date: Wed, 15 Dec 2021 21:43:12 +0100 [thread overview]
Message-ID: <20211215214312.413bff44@gmx.net> (raw)
In-Reply-To: <20211212200741.18143-1-guillaume.bressaix@gmail.com>
Hello Guillaume,
thanks of interest, testing and improvement of the ntpsec patch, some comments below...
On Sun, 12 Dec 2021 21:07:41 +0100, guillaume.bressaix@gmail.com wrote:
> From: Peter Seiderer <ps.report@gmx.net>
>
> - set 'CC=gcc' to avoid cross-compile failure (see [1]):
>
> /bin/sh: line 1: .../build/ntpsec-1_2_0/build/host/ntpd/keyword-gen: cannot execute binary file: Exec format error
>
> Waf: Leaving directory `.../build/ntpsec-1_2_0/build/host'
> Build failed
> -> task in 'ntp_keyword.h' failed with exit status 126 (run with -v to display more information)
>
> - set '-std=gnu99"' to avoid compile failure with old compilers
>
> - explicit set PYTHON_CONFIG
>
> - add patch 001-ntptime-fix-jfmt5-ofmt5-jfmt6-ofmt6-related-compile-.patch to
> fix ntptime jfmt5/ofmt5 jfmt6/ofmt6 related compile failure
>
> - add SYSV init file (S49ntp)
>
> - add example ntpd.conf (with legacy option enabled and provide skeleton
> for NTS configuration)
>
> - add config option for NTS support
>
> - depend on python3 (omit python2 to reduce test effort)
>
> - add ntp user/group and run ntpd as restricted user
>
> - add libcap dependency (compile time optional but needed for droproot
> support)
>
> - submit latest ntpsec version 1.2.1
Interesting, not listed as release, but tagged and downloadable...
>
> - lib ntpc import in python is fixed by specifying the --libdir flag.
> -> removed the symlink trick
Fine..., will test it...
>
> - add --refclock=all flags to configure, see notes down below
>
> - add leap second management options & ntpviz
>
> - improved Config.in:
> libbsd is required
Are you sure? With the original patch ntpsec builds fine without libbsd available...
> openssl is only needed when NTS encryption is enabled
A build without NTS and without openssl gives:
Checking for OpenSSL/libcrypto (via pkg-config) : not found
Checking for OpenSSL's crypto library : not found
The configuration failed
> (depend on python3 only to simply things)
> improved classic mode help description
> improved early-drop-root feature description
>
> - early droproot should be an option: adapt libcap accordingly
This will break (the hard coded) '-u npt:npt' option from package/ntpsec/S49ntp,
any reason to avoid the security feature?
>
> - corrected CC=gcc to CC=$(HOSTCC) in ntpsec.mk
Good point...
>
> - provide service script for systemd infra along sysv infra
Better done as an extra patch (easier to review)....
>
> - I don't think we need the patch if we restrict to !BR2_TOOLCHAIN_UCLIBC
> IMO it's better to keep the patch and allow all toolchains.
> I usually have glibc, but I just ran a sanity check on my zedboard with uclibc,
> it passed.
Not important for the commit log...
>
> - used on zynq_zed_defconfig and beaglebone_defconfig
> daemon automatically started
> ntpq works fine
>
> [1] https://gitlab.com/NTPsec/ntpsec/-/issues/694
>
> Signed-off-by: Peter Seiderer <ps.report@gmx.net>
> Signed-off-by: Guillaume W. Bres <guillaume.bressaix@gmail.com>
>
> ---
> notes on refclocks: https://docs.ntpsec.org/latest/refclock.html
> "For security reasons, we will no longer support any refclock
> that requires a closed-source driver to run", see webpage.
>
> --refclock=all is hardcoded at the moment
>
> One must compile ntpsec with the 'refclock' option
> if they want to drive or interact with hardware.
>
> In any case, refclocks are not critical for both buildtime & runtime:
>
> [+] ./configure is smart enough to disable a refclock
> if requirements are not met. In the submitted context,
> this happens for refclock=gpsd without BR2_PACKAGE_GPSD
> selected by user
>
> [+] some refclocks naturally require a specific hw support
> with related kernel driver.
> This is not buildtime critical because build does not care
> about hw support.
> This is not runtime critical either because any missing
> hw support or unfeasible hardware access ends up as a logged
> error message. It is up to the user to correct it in the
> submitted context: example: 'nmea/gps' receivers without kernel support
> or hardware not plugged in.
Would prefer one option per refclock to reduce dependencies...
>
> ntpd / ntpsec should be mutualy exclusive if we harcode S49ntp as the service script
>
> ---
> DEVELOPERS | 1 +
> package/Config.in | 1 +
> ...-jfmt5-ofmt5-jfmt6-ofmt6-related-compile-.patch | 61 ++++++++++++++++
> package/ntpsec/Config.in | 68 +++++++++++++++++
> package/ntpsec/S49ntp | 58 +++++++++++++++
> package/ntpsec/ntpd.etc.conf | 33 +++++++++
> package/ntpsec/ntpd.service | 15 ++++
> package/ntpsec/ntpsec.hash | 4 +
> package/ntpsec/ntpsec.mk | 85 ++++++++++++++++++++++
> 9 files changed, 326 insertions(+)
> create mode 100644 package/ntpsec/0001-ntptime-fix-jfmt5-ofmt5-jfmt6-ofmt6-related-compile-.patch
> create mode 100644 package/ntpsec/Config.in
> create mode 100644 package/ntpsec/S49ntp
> create mode 100644 package/ntpsec/ntpd.etc.conf
> create mode 100644 package/ntpsec/ntpd.service
> create mode 100644 package/ntpsec/ntpsec.hash
> create mode 100644 package/ntpsec/ntpsec.mk
>
> diff --git a/DEVELOPERS b/DEVELOPERS
> index 3023526..32b5e87 100644
> --- a/DEVELOPERS
> +++ b/DEVELOPERS
> @@ -2196,6 +2196,7 @@ F: package/iwd/
> F: package/libevdev/
> F: package/libuev/
> F: package/log4cplus/
> +F: package/ntpsec/
> F: package/postgresql/
> F: package/python-colorzero/
> F: package/python-flask-wtf/
> diff --git a/package/Config.in b/package/Config.in
> index 5720830..544a0fd 100644
> --- a/package/Config.in
> +++ b/package/Config.in
> @@ -2271,6 +2271,7 @@ endif
> source "package/nmap/Config.in"
> source "package/noip/Config.in"
> source "package/ntp/Config.in"
> + source "package/ntpsec/Config.in"
> source "package/nuttcp/Config.in"
> source "package/odhcp6c/Config.in"
> source "package/odhcploc/Config.in"
> diff --git a/package/ntpsec/0001-ntptime-fix-jfmt5-ofmt5-jfmt6-ofmt6-related-compile-.patch b/package/ntpsec/0001-ntptime-fix-jfmt5-ofmt5-jfmt6-ofmt6-related-compile-.patch
> new file mode 100644
> index 0000000..c2838fe
> --- /dev/null
> +++ b/package/ntpsec/0001-ntptime-fix-jfmt5-ofmt5-jfmt6-ofmt6-related-compile-.patch
> @@ -0,0 +1,61 @@
> +From 4015a1183d2f79dad6dd675ca5e0d329825f3fa3 Mon Sep 17 00:00:00 2001
> +From: Peter Seiderer <ps.report@gmx.net>
> +Date: Mon, 4 Oct 2021 22:25:58 +0200
> +Subject: [PATCH] ntptime: fix jfmt5/ofmt5 jfmt6/ofmt6 related compile failure
> +MIME-Version: 1.0
> +Content-Type: text/plain; charset=UTF-8
> +Content-Transfer-Encoding: 8bit
> +
> +Use same define guard for definiton as for usage ('HAVE_STRUCT_NTPTIMEVAL_TAI'
> +instead of 'NTP_API && NTP_API > 3').
> +
> +Fixes:
> +
> + ../../ntptime/ntptime.c: In function ‘main’:
> + ../../ntptime/ntptime.c:349:17: error: ‘jfmt5’ undeclared (first use in this function); did you mean ‘jfmt6’?
> + 349 | printf(json ? jfmt5 : ofmt5, (long)ntv.tai);
> + | ^~~~~
> + | jfmt6
> + ../../ntptime/ntptime.c:349:17: note: each undeclared identifier is reported only once for each function it appears in
> + ../../ntptime/ntptime.c:349:25: error: ‘ofmt5’ undeclared (first use in this function); did you mean ‘ofmt6’?
> + 349 | printf(json ? jfmt5 : ofmt5, (long)ntv.tai);
> + | ^~~~~
> + | ofmt6
> + ../../ntptime/ntptime.c:321:15: warning: unused variable ‘jfmt6’ [-Wunused-variable]
> + 321 | const char *jfmt6 = "";
> + | ^~~~~
> + ../../ntptime/ntptime.c:311:15: warning: unused variable ‘ofmt6’ [-Wunused-variable]
> + 311 | const char *ofmt6 = "\n";
> + | ^~~~~
> +
> +[Upstream: https://gitlab.com/NTPsec/ntpsec/-/merge_requests/1245]
> +Signed-off-by: Peter Seiderer <ps.report@gmx.net>
> +---
> + ntptime/ntptime.c | 4 ++--
> + 1 file changed, 2 insertions(+), 2 deletions(-)
> +
> +diff --git a/ntptime/ntptime.c b/ntptime/ntptime.c
> +index ff861cb..5d58593 100644
> +--- a/ntptime/ntptime.c
> ++++ b/ntptime/ntptime.c
> +@@ -305,7 +305,7 @@ main(
> + const char *ofmt2 = " time %s, (.%0*d),\n";
> + const char *ofmt3 = " maximum error %lu us, estimated error %lu us";
> + const char *ofmt4 = " ntptime=%x.%x unixtime=%x.%0*d %s";
> +-#if defined NTP_API && NTP_API > 3
> ++#if defined(HAVE_STRUCT_NTPTIMEVAL_TAI)
> + const char *ofmt5 = ", TAI offset %ld\n";
> + #else
> + const char *ofmt6 = "\n";
> +@@ -315,7 +315,7 @@ main(
> + const char *jfmt2 = "\"time\":\"%s\",\"fractional-time\":\".%0*d\",";
> + const char *jfmt3 = "\"maximum-error\":%lu,\"estimated-error\":%lu,";
> + const char *jfmt4 = "\"raw-ntp-time\":\"%x.%x\",\"raw-unix-time\":\"%x.%0*d %s\",";
> +-#if defined NTP_API && NTP_API > 3
> ++#if defined(HAVE_STRUCT_NTPTIMEVAL_TAI)
> + const char *jfmt5 = "\"TAI-offset\":%d,";
> + #else
> + const char *jfmt6 = "";
> +--
> +2.33.0
> +
> diff --git a/package/ntpsec/Config.in b/package/ntpsec/Config.in
> new file mode 100644
> index 0000000..9044aa4
> --- /dev/null
> +++ b/package/ntpsec/Config.in
> @@ -0,0 +1,68 @@
> +comment "ntpsec needs a toolchain w/ wchar, thread, dynamic library"
> + depends on BR2_STATIC_LIBS
> + depends on !BR2_USE_WCHAR
> + depends on !BR2_TOOLCHAIN_HAS_THREADS # libbsd
> +
> +comment "ntpsec needs libbsd"
> + depends on !BR2_PACKAGE_LIBBSD_ARCH_SUPPORTS
> + depends on !BR2_STATIC_LIBS # libbsd
> +
> +comment "ntpsec needs python3"
> + depends on !BR2_PACKAGE_PYTHON3
> +
> +config BR2_PACKAGE_NTPSEC
> + bool "ntpsec"
> + depends on !BR2_STATIC_LIBS # libbsd
> + depends on BR2_PACKAGE_LIBBSD_ARCH_SUPPORTS
> + depends on BR2_TOOLCHAIN_HAS_THREADS # libbsd
> + depends on BR2_PACKAGE_PYTHON3
> + select BR2_PACKAGE_LIBCAP
> + select BR2_PACKAGE_LIBBSD
> + select BR2_PACKAGE_PPS_TOOLS # refclock(pps)
> + help
> + NTPsec is a secure, hardened, and improved
> + implementation of Network Time Protocol derived
> + from NTP Classic, Dave Mills’s original.
> +
> + Provides things like ntpd, ntpdate, ntpq, etc...
> +
> + https://www.ntpsec.org/
> +
> +if BR2_PACKAGE_NTPSEC
> +
> +config BR2_PACKAGE_NTPSEC_CLASSIC_MODE
> + bool "ntpsec-classic"
> + help
> + Enable strict configuration and log-format compatibility
> + with NTP Classic.
> + This option is not recommended as it makes the module
> + less efficient.
> +
> +config BR2_PACKAGE_NTPSEC_NTS
> + bool "ntpsec-nts"
> + select BR2_PACKAGE_OPENSSL
> + help
> + Enable Network Time Security (NTS) support.
> +
> +comment "ntpsec-ntploggpsd needs gpsd"
> + depends on !BR2_PACKAGE_GPSD
> +
> +config BR2_PACKAGE_NTPSEC_LEAP_SMEAR
> + bool "ntpsec-leap-smear"
> + help
> + Activates leap second smearing,
> + https://docs.ntpsec.org/latest/leapsmear.html
> +
> +config BR2_PACKAGE_NTPSEC_LEAP_TESTING
> + bool "ntpsec-leap-testing"
> + help
> + Enables leap seconds on other than 1st day of month
> +
> +config BR2_PACKAGE_NTPSEC_EARLY_DROPROOT
> + bool "ntpsec-early-droproot"
> + help
> + Drops root privileges as early as possible.
> + This requires the refclock devices to be owned
> + by owner/group running 'ntpd'
> +
> +endif
> diff --git a/package/ntpsec/S49ntp b/package/ntpsec/S49ntp
> new file mode 100644
> index 0000000..f3db514
> --- /dev/null
> +++ b/package/ntpsec/S49ntp
> @@ -0,0 +1,58 @@
> +#!/bin/sh
> +#
> +# Starts Network Time Protocol daemon
> +#
> +
> +DAEMON="ntpd"
> +PIDFILE="/var/run/$DAEMON.pid"
> +
> +NTPD_ARGS="-g -u ntp:ntp -s /var/run/ntp"
> +
> +# shellcheck source=/dev/null
> +[ -r "/etc/default/$DAEMON" ] && . "/etc/default/$DAEMON"
> +
> +mkdir -p /var/run/ntp && chown ntp:ntp /var/run/ntp
> +
> +start() {
> + printf 'Starting %s: ' "$DAEMON"
> + # shellcheck disable=SC2086 # we need the word splitting
> + start-stop-daemon -S -q -p "$PIDFILE" -x "/usr/sbin/$DAEMON" \
> + -- $NTPD_ARGS -p "$PIDFILE"
> + status=$?
> + if [ "$status" -eq 0 ]; then
> + echo "OK"
> + else
> + echo "FAIL"
> + fi
> + return "$status"
> +}
> +
> +stop() {
> + printf 'Stopping %s: ' "$DAEMON"
> + start-stop-daemon -K -q -p "$PIDFILE"
> + status=$?
> + if [ "$status" -eq 0 ]; then
> + rm -f "$PIDFILE"
> + echo "OK"
> + else
> + echo "FAIL"
> + fi
> + return "$status"
> +}
> +
> +restart() {
> + stop
> + sleep 1
> + start
> +}
> +
> +case "$1" in
> + start|stop|restart)
> + "$1";;
> + reload)
> + # Restart, since there is no true "reload" feature.
> + restart;;
> + *)
> + echo "Usage: $0 {start|stop|restart|reload}"
> + exit 1
> +esac
> diff --git a/package/ntpsec/ntpd.etc.conf b/package/ntpsec/ntpd.etc.conf
> new file mode 100644
> index 0000000..e0f45c1
> --- /dev/null
> +++ b/package/ntpsec/ntpd.etc.conf
> @@ -0,0 +1,33 @@
> +#
> +# legacy NTP configuration
> +#
> +pool 0.pool.ntp.org iburst
> +pool 1.pool.ntp.org iburst
> +pool 2.pool.ntp.org iburst
> +pool 3.pool.ntp.org iburst
> +
> +#
> +# NTS configuration
> +#
> +# Notes:
> +# - uncomment the following lines to enable NTS support (but
> +# make sure the initial clock is up-to-date (otherwise the
> +# NTS certificate validation will fail with 'NTSc: certificate invalid:
> +# 9=>certificate is not yet valid' as on boards without RTC support)
> +# and/or keep at least one line from the legacy NTP lines
> +# - enable BR2_PACKAGE_CA_CERTIFICATES to gain access to the certificate
> +# files
> +#
> +# server time.cloudflare.com nts # Global, anycast
> +# server nts.ntp.se:4443 nts # Sweden
> +# server ntpmon.dcs1.biz nts # Singapore
> +# server ntp1.glypnod.com nts # San Francisco
> +# server ntp2.glypnod.com nts # London
> +#
> +# ca /usr/share/ca-certificates/mozilla
> +
> +# Allow only time queries, at a limited rate, sending KoD when in excess.
> +# Allow all local queries (IPv4, IPv6)
> +restrict default nomodify nopeer noquery limited kod
> +restrict 127.0.0.1
> +restrict [::1]
> diff --git a/package/ntpsec/ntpd.service b/package/ntpsec/ntpd.service
> new file mode 100644
> index 0000000..b7db4a2
> --- /dev/null
> +++ b/package/ntpsec/ntpd.service
> @@ -0,0 +1,15 @@
> +[Unit]
> +Description=Network Time Service
> +After=network.target
> +
> +[Service]
> +Type=forking
> +PIDFile=/run/ntpd.pid
> +# Turn off DNSSEC validation for hostname look-ups, since those need the
> +# correct time to work, but we likely won't acquire that without NTP. Let's
> +# break this chicken-and-egg cycle here.
> +Environment=SYSTEMD_NSS_RESOLVE_VALIDATE=0
> +ExecStart=/usr/sbin/ntpd @NTPD_EXTRA_ARGS@ -g -p /run/ntpd.pid
The @NTPD_EXTRA_ARGS@ handling needs the sed command instead of the
simple install one (see package/ntp/ntp.mk)...
> +
> +[Install]
> +WantedBy=multi-user.target
> diff --git a/package/ntpsec/ntpsec.hash b/package/ntpsec/ntpsec.hash
> new file mode 100644
> index 0000000..49dc4e4
> --- /dev/null
> +++ b/package/ntpsec/ntpsec.hash
> @@ -0,0 +1,4 @@
> +# Locally calculated
> +sha256 71c9f4bde6953bbc048bbaf278da81c451a56cc08d6772542b4ad37c67d72e89 ntpsec-NTPsec_1_2_1.tar.bz2
> +sha256 b4db4de3317c3b0554ed91eb692968800bdfd6ad2c16ffbeee8ce4895ed91da4 LICENSE.adoc
> +sha256 d3b21470adadd9abd9c6d675378f8c371ac5a4ea6dbec91859e02fadca3c0856 docs/copyright.adoc
> diff --git a/package/ntpsec/ntpsec.mk b/package/ntpsec/ntpsec.mk
> new file mode 100644
> index 0000000..55b4bb0
> --- /dev/null
> +++ b/package/ntpsec/ntpsec.mk
> @@ -0,0 +1,85 @@
> +################################################################################
> +#
> +# ntpsec
> +#
> +################################################################################
> +
> +NTPSEC_VERSION_MAJOR = 1
> +NTPSEC_VERSION_MINOR = 2
> +NTPSEC_VERSION_POINT = 1
> +NTPSEC_VERSION = $(NTPSEC_VERSION_MAJOR)_$(NTPSEC_VERSION_MINOR)_$(NTPSEC_VERSION_POINT)
> +NTPSEC_SOURCE = ntpsec-NTPsec_$(NTPSEC_VERSION).tar.bz2
> +NTPSEC_SITE = https://gitlab.com/NTPsec/ntpsec/-/archive/NTPsec_$(NTPSEC_VERSION)
> +NTPSEC_LICENSE = BSD-2-Clause NTP BSD-3-Clause MIT
> +NTPSEC_LICENSE_FILES = LICENSE.adoc docs/copyright.adoc
> +
> +NTPSEC_CPE_ID_VENDOR = ntpsec
> +NTPSEC_CPE_ID_VERSION = $(NTPSEC_VERSION_MAJOR).$(NTPSEC_VERSION_MINOR)
> +NTPSEC_CPE_ID_UPDATE = $(NTPSEC_VERSION_POINT)
> +
> +NTPSEC_DEPENDENCIES = \
> + $(if $(BR2_PACKAGE_PYTHON),python,python3) \
> + libbsd \
> + pps-tools
> +
> +NTPSEC_PYVER = $(if $(BR2_PACKAGE_PYTHON),python$(PYTHON_VERSION_MAJOR),python$(PYTHON3_VERSION_MAJOR))
> +
> +NTPSEC_CONF_OPTS = \
> + CC=$(HOSTCC) \
> + PYTHON_CONFIG="$(STAGING_DIR)/usr/bin/$(if $(BR2_PACKAGE_PYTHON),python,python3)-config" \
> + --cross-compiler="$(TARGET_CC)" \
> + --cross-cflags="$(TARGET_CFLAGS) -std=gnu99" \
> + --cross-ldflags="$(TARGET_LDFLAGS)" \
> + --notests \
> + --disable-mdns-registration \
> + --enable-pylib=ffi \
> + --nopyc \
> + --nopyo \
> + --nopycache \
> + --disable-doc \
> + --disable-manpage \
> + --refclock=all \
> + --libdir=/usr/lib/$(NTPSEC_PYVER)/site-packages/ntp
> +
> +ifeq ($(BR2_PACKAGE_NTPSEC_CLASSIC_MODE),y)
> +NTPSEC_CONF_OPTS += --enable-classic-mode
> +endif
> +
> +ifeq ($(BR2_PACKAGE_NTPSEC_NTS),y)
> +NTPSEC_DEPENDENCIES += openssl
> +else
> +NTPSEC_CONF_OPTS += --disable-nts
> +endif
> +
> +ifeq ($(BR2_PACKAGE_NTPSEC_EARLY_DROPROOT),y)
> +NTPSEC_DEPENDENCIES += libcap
> +NTPSEC_CONF_OPTS += --enable-early-droproot
> +endif
> +
> +ifeq ($(BR2_PACKAGE_NTPSEC_LEAP_SMEAR),y)
> +NTPSEC_CONF_OPTS += --enable-leap-smear
> +endif
> +
> +ifeq ($(BR2_PACKAGE_NTPSEC_LEAP_TESTING),y)
> +NTPSEC_CONF_OPTS += --enable-leap-testing
> +endif
> +
> +define NTPSEC_INSTALL_NTPSEC_CONF
> + $(INSTALL) -m 644 package/ntpsec/ntpd.etc.conf $(TARGET_DIR)/etc/ntp.conf
> +endef
> +NTPSEC_POST_INSTALL_TARGET_HOOKS += NTPSEC_INSTALL_NTPSEC_CONF
> +
> +define NTPSEC_INSTALL_INIT_SYSV
> + $(INSTALL) -D -m 755 $(NTPSEC_PKGDIR)/S49ntp $(TARGET_DIR)/etc/init.d/S49ntp
> +endef
> +
> +define NTPSEC_INSTALL_INIT_SYSTEMD
> + $(INSTALL) -D -m 644 $(NTPSEC_PKGDIR)/ntpd.service \
> + $(TARGET_DIR)/usr/lib/systemd/system/ntpd.service
> +endef
> +
> +define NTPSEC_USERS
> + ntp -1 ntp -1 * - - - ntpd user
> +endef
> +
> +$(eval $(waf-package))
Will prepare an update of my original patch with the version update and some of
your findings..., feel free to provide your improvements as add-on patches ;-)
Regards,
Peter
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
next prev parent reply other threads:[~2021-12-15 20:43 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-25 21:25 [Buildroot] [PATCH v1] package/ntpsec: new package Peter Seiderer
2021-10-28 21:01 ` Peter Seiderer
2021-10-30 22:56 ` [Buildroot] [uclibc-ng-devel] " Waldemar Brodkorb
2021-11-04 20:30 ` Peter Seiderer
2021-11-11 8:58 ` Waldemar Brodkorb
2021-11-25 20:26 ` Peter Seiderer
2021-12-12 20:07 ` [Buildroot] [PATCH 1/1] " guillaume.bressaix
2021-12-15 20:43 ` Peter Seiderer [this message]
2021-12-15 21:21 ` Guillaume Bres
2021-12-15 22:15 ` Peter Seiderer
2021-12-17 7:57 ` Guillaume Bres
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20211215214312.413bff44@gmx.net \
--to=ps.report@gmx.net \
--cc=buildroot@busybox.net \
--cc=guillaume.bressaix@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox