openSUSE Commits
Threads by month
- ----- 2024 -----
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
October 2024
- 1 participants
- 1410 discussions
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package gimp for openSUSE:Factory checked in at 2024-10-20 10:13:41
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gimp (Old)
and /work/SRC/openSUSE:Factory/.gimp.new.26871 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gimp"
Sun Oct 20 10:13:41 2024 rev:144 rq:1208846 version:2.10.38
Changes:
--------
--- /work/SRC/openSUSE:Factory/gimp/gimp.changes 2024-06-11 18:27:38.377247630 +0200
+++ /work/SRC/openSUSE:Factory/.gimp.new.26871/gimp.changes 2024-10-20 10:13:56.799538314 +0200
@@ -1,0 +2,7 @@
+Fri Oct 18 08:15:54 UTC 2024 - Dominique Leuenberger <dimstar(a)opensuse.org>
+
+- Add gtk-update-icon-cache BuildRequires: Ensure
+ /usr/bin/gtk-update-icon-cache is present during build, as
+ configure checks for it.
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ gimp.spec ++++++
--- /var/tmp/diff_new_pack.KXE8Qs/_old 2024-10-20 10:13:58.755619379 +0200
+++ /var/tmp/diff_new_pack.KXE8Qs/_new 2024-10-20 10:13:58.771620042 +0200
@@ -67,6 +67,9 @@
%if %{with python_plugin}
BuildRequires: python-gtk-devel >= 2.10.4
%endif
+%if 0%{?suse_version} >= 1600
+BuildRequires: /usr/bin/gtk-update-icon-cache
+%endif
BuildRequires: update-desktop-files
BuildRequires: pkgconfig(atk) >= 2.2.0
BuildRequires: (pkgconfig(babl) or pkgconfig(babl-0.1))
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package MozillaFirefox for openSUSE:Factory checked in at 2024-10-20 10:13:22
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/MozillaFirefox (Old)
and /work/SRC/openSUSE:Factory/.MozillaFirefox.new.26871 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "MozillaFirefox"
Sun Oct 20 10:13:22 2024 rev:440 rq:1208839 version:131.0.3
Changes:
--------
--- /work/SRC/openSUSE:Factory/MozillaFirefox/MozillaFirefox.changes 2024-10-11 17:01:14.643987491 +0200
+++ /work/SRC/openSUSE:Factory/.MozillaFirefox.new.26871/MozillaFirefox.changes 2024-10-20 10:13:29.838422146 +0200
@@ -1,0 +2,17 @@
+Thu Oct 17 06:18:12 UTC 2024 - Wolfgang Rosenauer <wr(a)rosenauer.org>
+
+- Mozilla Firefox 131.0.3
+ * some users could not access the Bill Pay portion of their
+ bank's site (bmo#1923500)
+ * some VR180 and 360 videos were not properly rendering on YouTube
+ (bmo#1922278)
+ * Fixed a crash that Windows users with Avast or AVG security
+ software were experiencing when visiting certain sites. (bmo#1919678)
+ * "List all tabs" button was not able to be moved from the toolbar
+ (bmo#1918681)
+ NFSA 2024-53
+ * CVE-2024-9936 (bmo#1920381)
+ Undefined behavior in selection node cache
+- remove obsolete mozilla-rust-disable-future-incompat.patch
+
+-------------------------------------------------------------------
Old:
----
firefox-131.0.2.source.tar.xz
firefox-131.0.2.source.tar.xz.asc
l10n-131.0.2.tar.xz
mozilla-rust-disable-future-incompat.patch
New:
----
firefox-131.0.3.source.tar.xz
firefox-131.0.3.source.tar.xz.asc
l10n-131.0.3.tar.xz
BETA DEBUG BEGIN:
Old: Undefined behavior in selection node cache
- remove obsolete mozilla-rust-disable-future-incompat.patch
BETA DEBUG END:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ MozillaFirefox.spec ++++++
--- /var/tmp/diff_new_pack.kyQzSF/_old 2024-10-20 10:13:54.271433601 +0200
+++ /var/tmp/diff_new_pack.kyQzSF/_new 2024-10-20 10:13:54.275433766 +0200
@@ -29,8 +29,8 @@
# major 69
# mainver %%major.99
%define major 131
-%define mainver %major.0.2
-%define orig_version 131.0.2
+%define mainver %major.0.3
+%define orig_version 131.0.3
%define orig_suffix %{nil}
%define update_channel release
%define branding 1
@@ -226,7 +226,6 @@
Patch19: mozilla-bmo531915.patch
Patch20: one_swizzle_to_rule_them_all.patch
Patch21: svg-rendering.patch
-Patch23: mozilla-rust-disable-future-incompat.patch
Patch24: mozilla-bmo1746799.patch
# Firefox/browser
Patch101: firefox-kde.patch
++++++ firefox-131.0.2.source.tar.xz -> firefox-131.0.3.source.tar.xz ++++++
/work/SRC/openSUSE:Factory/MozillaFirefox/firefox-131.0.2.source.tar.xz /work/SRC/openSUSE:Factory/.MozillaFirefox.new.26871/firefox-131.0.3.source.tar.xz differ: char 15, line 1
++++++ l10n-131.0.2.tar.xz -> l10n-131.0.3.tar.xz ++++++
++++++ tar_stamps ++++++
--- /var/tmp/diff_new_pack.kyQzSF/_old 2024-10-20 10:13:54.671450161 +0200
+++ /var/tmp/diff_new_pack.kyQzSF/_new 2024-10-20 10:13:54.687450823 +0200
@@ -1,11 +1,11 @@
PRODUCT="firefox"
CHANNEL="release"
-VERSION="131.0.2"
+VERSION="131.0.3"
VERSION_SUFFIX=""
-PREV_VERSION="131.0"
+PREV_VERSION="131.0.2"
PREV_VERSION_SUFFIX=""
#SKIP_LOCALES="" # Uncomment to skip l10n and compare-locales-generation
RELEASE_REPO="https://hg.mozilla.org/releases/mozilla-release"
-RELEASE_TAG="a96578797b9ac4c85a9f77a3956f5207245915ce"
-RELEASE_TIMESTAMP="20241008210941"
+RELEASE_TAG="e69783530d6d036a3621031d0a316a66e933a070"
+RELEASE_TIMESTAMP="20241011205646"
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package xf86-input-evdev for openSUSE:Factory checked in at 2024-10-20 10:13:03
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/xf86-input-evdev (Old)
and /work/SRC/openSUSE:Factory/.xf86-input-evdev.new.26871 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "xf86-input-evdev"
Sun Oct 20 10:13:03 2024 rev:39 rq:1208736 version:2.11.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/xf86-input-evdev/xf86-input-evdev.changes 2024-03-20 21:10:19.189074344 +0100
+++ /work/SRC/openSUSE:Factory/.xf86-input-evdev.new.26871/xf86-input-evdev.changes 2024-10-20 10:13:06.769467161 +0200
@@ -1,0 +2,9 @@
+Thu Oct 17 23:35:19 UTC 2024 - Stefan Dirsch <sndirsch(a)suse.com>
+
+- update to version 2.11.0
+ * FTBFS fixes on non-linux platforms and dropping some ancient quirks
+ * Fixes for the Compose and Kana LEDs
+ * we remap some higher keycodes to FK20 and friends, paving the
+ way for systemd/udev to map those properly in their hwdb files
+
+-------------------------------------------------------------------
Old:
----
xf86-input-evdev-2.10.6.tar.bz2
xf86-input-evdev-2.10.6.tar.bz2.sig
New:
----
xf86-input-evdev-2.11.0.tar.xz
xf86-input-evdev-2.11.0.tar.xz.sig
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ xf86-input-evdev.spec ++++++
--- /var/tmp/diff_new_pack.hPPtyO/_old 2024-10-20 10:13:07.877513030 +0200
+++ /var/tmp/diff_new_pack.hPPtyO/_new 2024-10-20 10:13:07.881513196 +0200
@@ -17,14 +17,14 @@
Name: xf86-input-evdev
-Version: 2.10.6
+Version: 2.11.0
Release: 0
Summary: Generic Linux input driver for the Xorg X server
License: MIT
Group: System/X11/Servers/XF86_4
URL: https://xorg.freedesktop.org/
-Source0: https://xorg.freedesktop.org/releases/individual/driver/%{name}-%{version}.…
-Source1: https://xorg.freedesktop.org/releases/individual/driver/%{name}-%{version}.…
+Source0: https://xorg.freedesktop.org/releases/individual/driver/%{name}-%{version}.…
+Source1: https://xorg.freedesktop.org/releases/individual/driver/%{name}-%{version}.…
Source2: %{name}.keyring
Source3: 11-evdev.conf
Source4: 50-elotouch.conf
@@ -91,7 +91,7 @@
%files
%license COPYING
-%doc README
+%doc README.md
%dir %{_datadir}/X11/xorg.conf.d
%{_datadir}/X11/xorg.conf.d/*.conf
%dir %{_libdir}/xorg/modules/input
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package selinux-policy for openSUSE:Factory checked in at 2024-10-20 10:08:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/selinux-policy (Old)
and /work/SRC/openSUSE:Factory/.selinux-policy.new.26871 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "selinux-policy"
Sun Oct 20 10:08:57 2024 rev:82 rq:1208868 version:20241018
Changes:
--------
--- /work/SRC/openSUSE:Factory/selinux-policy/selinux-policy.changes 2024-10-01 17:11:27.828841389 +0200
+++ /work/SRC/openSUSE:Factory/.selinux-policy.new.26871/selinux-policy.changes 2024-10-20 10:09:08.447602727 +0200
@@ -1,0 +2,8 @@
+Fri Oct 18 12:34:06 UTC 2024 - cathy.hu(a)suse.com
+
+- Update to version 20241018:
+ * Allow slpd to create TCPDIAG netlink socket (bsc#1231491)
+ * Allow slpd to use sys_chroot (bsc#1231491)
+ * Allow openvswitch-ipsec use strongswan (bsc#1231493)
+
+-------------------------------------------------------------------
Old:
----
selinux-policy-20240930.tar.xz
New:
----
selinux-policy-20241018.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ selinux-policy.spec ++++++
--- /var/tmp/diff_new_pack.oxrTTq/_old 2024-10-20 10:09:09.547648333 +0200
+++ /var/tmp/diff_new_pack.oxrTTq/_new 2024-10-20 10:09:09.547648333 +0200
@@ -36,7 +36,7 @@
License: GPL-2.0-or-later
Group: System/Management
Name: selinux-policy
-Version: 20240930
+Version: 20241018
Release: 0
Source0: %{name}-%{version}.tar.xz
Source1: container.fc
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.oxrTTq/_old 2024-10-20 10:09:09.651652644 +0200
+++ /var/tmp/diff_new_pack.oxrTTq/_new 2024-10-20 10:09:09.655652810 +0200
@@ -1,7 +1,7 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://gitlab.suse.de/selinux/selinux-policy.git</param>
- <param name="changesrevision">ce2f393284de8ea7a3a76e76196b13e8b98770b2</param></service><service name="tar_scm">
+ <param name="changesrevision">0f42d9d86addd3d512c65c9a866649f2be1d3c86</param></service><service name="tar_scm">
<param name="url">https://github.com/containers/container-selinux.git</param>
<param name="changesrevision">07b3034f6d9625ab84508a2f46515d8ff79b4204</param></service><service name="tar_scm">
<param name="url">https://gitlab.suse.de/jsegitz/selinux-policy.git</param>
++++++ selinux-policy-20240930.tar.xz -> selinux-policy-20241018.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/selinux-policy-20240930/policy/modules/contrib/openvswitch.te new/selinux-policy-20241018/policy/modules/contrib/openvswitch.te
--- old/selinux-policy-20240930/policy/modules/contrib/openvswitch.te 2024-09-30 09:14:51.000000000 +0200
+++ new/selinux-policy-20241018/policy/modules/contrib/openvswitch.te 2024-10-18 14:33:42.000000000 +0200
@@ -141,6 +141,13 @@
')
optional_policy(`
+ ipsec_domtrans(openvswitch_t)
+ ipsec_domtrans_mgmt(openvswitch_t)
+ ipsec_manage_conf_files(openvswitch_t)
+ ipsec_manage_key_file(openvswitch_t)
+')
+
+optional_policy(`
iptables_domtrans(openvswitch_t)
')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/selinux-policy-20240930/policy/modules/contrib/slpd.te new/selinux-policy-20241018/policy/modules/contrib/slpd.te
--- old/selinux-policy-20240930/policy/modules/contrib/slpd.te 2024-09-30 09:14:51.000000000 +0200
+++ new/selinux-policy-20241018/policy/modules/contrib/slpd.te 2024-10-18 14:33:42.000000000 +0200
@@ -24,6 +24,13 @@
#
allow slpd_t self:capability { kill net_admin setgid setuid };
+
+# SUSE specific patch "extensions.diff" in openslp needs chroot()
+allow slpd_t self:capability sys_chroot;
+
+# SUSE specific patch "openslp.netlink.diff" in openslp uses TCPDIAG_GETSOCK
+allow slpd_t self:netlink_tcpdiag_socket create;
+
allow slpd_t self:process signal;
allow slpd_t self:fifo_file rw_fifo_file_perms;
allow slpd_t self:tcp_socket { accept listen };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/selinux-policy-20240930/policy/modules/system/ipsec.fc new/selinux-policy-20241018/policy/modules/system/ipsec.fc
--- old/selinux-policy-20240930/policy/modules/system/ipsec.fc 2024-09-30 09:14:51.000000000 +0200
+++ new/selinux-policy-20241018/policy/modules/system/ipsec.fc 2024-10-18 14:33:42.000000000 +0200
@@ -9,6 +9,8 @@
/etc/ipsec\.secrets.* -- gen_context(system_u:object_r:ipsec_key_file_t,s0)
/etc/ipsec\.conf -- gen_context(system_u:object_r:ipsec_conf_file_t,s0)
+/etc/strongswan.conf -- gen_context(system_u:object_r:ipsec_conf_file_t,s0)
+/etc/strongswan.d(/.*)? gen_context(system_u:object_r:ipsec_conf_file_t,s0)
/etc/strongswan/ipsec\.secrets.* -- gen_context(system_u:object_r:ipsec_key_file_t,s0)
/etc/strongswan/ipsec\.conf -- gen_context(system_u:object_r:ipsec_conf_file_t,s0)
/etc/strongswan/swanctl/bliss/(/.*)? gen_context(system_u:object_r:ipsec_key_file_t,s0)
@@ -38,6 +40,7 @@
/usr/libexec/ipsec/_plutoload -- gen_context(system_u:object_r:ipsec_mgmt_exec_t,s0)
/usr/libexec/ipsec/_plutorun -- gen_context(system_u:object_r:ipsec_mgmt_exec_t,s0)
+/usr/libexec/ipsec/charon -- gen_context(system_u:object_r:ipsec_exec_t,s0)
/usr/libexec/ipsec/eroute -- gen_context(system_u:object_r:ipsec_exec_t,s0)
/usr/libexec/ipsec/klipsdebug -- gen_context(system_u:object_r:ipsec_exec_t,s0)
/usr/libexec/ipsec/pluto -- gen_context(system_u:object_r:ipsec_exec_t,s0)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/selinux-policy-20240930/policy/modules/system/ipsec.if new/selinux-policy-20241018/policy/modules/system/ipsec.if
--- old/selinux-policy-20240930/policy/modules/system/ipsec.if 2024-09-30 09:14:51.000000000 +0200
+++ new/selinux-policy-20241018/policy/modules/system/ipsec.if 2024-10-18 14:33:42.000000000 +0200
@@ -355,6 +355,27 @@
allow $1 ipsec_conf_file_t:dir list_dir_perms;
')
+
+#######################################
+## <summary>
+## Allow to manage ipsec conf files.
+## </summary>
+## <param name="domain">
+## <summary>
+## Domain allowed access.
+## </summary>
+## </param>
+#
+interface(`ipsec_manage_conf_files',`
+ gen_require(`
+ type ipsec_conf_file_t;
+ ')
+
+ manage_files_pattern($1, ipsec_conf_file_t, ipsec_conf_file_t)
+ files_etc_filetrans($1, ipsec_conf_file_t, file, "ipsec.conf")
+')
+
+
########################################
## <summary>
## Match the default SPD entry.
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package libpipeline for openSUSE:Factory checked in at 2024-10-20 10:08:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libpipeline (Old)
and /work/SRC/openSUSE:Factory/.libpipeline.new.26871 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libpipeline"
Sun Oct 20 10:08:55 2024 rev:16 rq:1208863 version:1.5.8
Changes:
--------
--- /work/SRC/openSUSE:Factory/libpipeline/libpipeline.changes 2022-11-19 18:08:46.966256002 +0100
+++ /work/SRC/openSUSE:Factory/.libpipeline.new.26871/libpipeline.changes 2024-10-20 10:09:06.767533077 +0200
@@ -1,0 +2,8 @@
+Fri Oct 18 11:42:38 UTC 2024 - Dr. Werner Fink <werner(a)suse.de>
+
+- Update to 1.5.8 (27 August 2024):
+ * Upgrade to Gnulib `stable-202407`. Building libpipeline now requires
+ Automake >= 1.14.
+ * Use C23-style `nullptr`.
+
+-------------------------------------------------------------------
Old:
----
libpipeline-1.5.7.tar.gz
libpipeline-1.5.7.tar.gz.asc
New:
----
libpipeline-1.5.8.tar.gz
libpipeline-1.5.8.tar.gz.asc
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ libpipeline.spec ++++++
--- /var/tmp/diff_new_pack.Ux11Mn/_old 2024-10-20 10:09:07.451561434 +0200
+++ /var/tmp/diff_new_pack.Ux11Mn/_new 2024-10-20 10:09:07.451561434 +0200
@@ -1,7 +1,7 @@
#
# spec file for package libpipeline
#
-# Copyright (c) 2022 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
%define lname libpipeline1
Name: libpipeline
-Version: 1.5.7
+Version: 1.5.8
Release: 0
Summary: A pipeline manipulation library
License: GPL-3.0-or-later
++++++ libpipeline-1.5.7.tar.gz -> libpipeline-1.5.8.tar.gz ++++++
++++ 58138 lines of diff (skipped)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-botocore for openSUSE:Factory checked in at 2024-10-20 10:08:53
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-botocore (Old)
and /work/SRC/openSUSE:Factory/.python-botocore.new.26871 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-botocore"
Sun Oct 20 10:08:53 2024 rev:137 rq:1208861 version:1.35.43
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-botocore/python-botocore.changes 2024-09-22 11:05:56.572410636 +0200
+++ /work/SRC/openSUSE:Factory/.python-botocore.new.26871/python-botocore.changes 2024-10-20 10:09:04.779450655 +0200
@@ -1,0 +2,9 @@
+Fri Oct 18 10:07:47 UTC 2024 - Markéta Machová <mmachova(a)suse.com>
+
+- Update to 1.35.43
+ * enhancement:Python: Added provisional Python 3.13 support to Botocore
+ * enhancement:AWSCRT: Update awscrt version to 0.22.0
+ * bugfix:Config: Fixed sigv4a_signing_region_set resolution when set in environment or config file.
+ * Many API changes in various plugins, see https://github.com/boto/botocore/blob/develop/CHANGELOG.rst
+
+-------------------------------------------------------------------
Old:
----
botocore-1.35.21.tar.gz
New:
----
botocore-1.35.43.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-botocore.spec ++++++
--- /var/tmp/diff_new_pack.tPo76i/_old 2024-10-20 10:09:05.415477023 +0200
+++ /var/tmp/diff_new_pack.tPo76i/_new 2024-10-20 10:09:05.419477189 +0200
@@ -28,7 +28,7 @@
%{?sle15_python_module_pythons}
Name: python-botocore%{?psuffix}
-Version: 1.35.21
+Version: 1.35.43
Release: 0
Summary: Python interface for AWS
License: Apache-2.0
++++++ botocore-1.35.21.tar.gz -> botocore-1.35.43.tar.gz ++++++
/work/SRC/openSUSE:Factory/python-botocore/botocore-1.35.21.tar.gz /work/SRC/openSUSE:Factory/.python-botocore.new.26871/botocore-1.35.43.tar.gz differ: char 5, line 1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package mosquitto for openSUSE:Factory checked in at 2024-10-20 10:07:15
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/mosquitto (Old)
and /work/SRC/openSUSE:Factory/.mosquitto.new.26871 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "mosquitto"
Sun Oct 20 10:07:15 2024 rev:32 rq:1209000 version:2.0.20
Changes:
--------
--- /work/SRC/openSUSE:Factory/mosquitto/mosquitto.changes 2024-10-03 17:45:02.755901584 +0200
+++ /work/SRC/openSUSE:Factory/.mosquitto.new.26871/mosquitto.changes 2024-10-20 10:07:29.895492414 +0200
@@ -1,0 +2,10 @@
+Sat Oct 19 08:56:14 UTC 2024 - Martin Hauke <mardnh(a)gmx.de>
+
+- Update to version 2.0.20
+ Broker:
+ - Fix QoS 1 / QoS 2 publish incorrectly returning
+ "no subscribers".
+ - Don't allow invalid response topic values.
+ - Fix some strict protocol compliance issues.
+
+-------------------------------------------------------------------
Old:
----
mosquitto-2.0.19.tar.gz
mosquitto-2.0.19.tar.gz.sig
New:
----
mosquitto-2.0.20.tar.gz
mosquitto-2.0.20.tar.gz.sig
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ mosquitto.spec ++++++
--- /var/tmp/diff_new_pack.61CmJA/_old 2024-10-20 10:07:30.675525750 +0200
+++ /var/tmp/diff_new_pack.61CmJA/_new 2024-10-20 10:07:30.675525750 +0200
@@ -20,7 +20,7 @@
%define c_lib libmosquitto1
%define cpp_lib libmosquittopp1
Name: mosquitto
-Version: 2.0.19
+Version: 2.0.20
Release: 0
Summary: A MQTT v3.1/v3.1.1 Broker
License: EPL-1.0
++++++ mosquitto-2.0.19.tar.gz -> mosquitto-2.0.20.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/CMakeLists.txt new/mosquitto-2.0.20/CMakeLists.txt
--- old/mosquitto-2.0.19/CMakeLists.txt 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/CMakeLists.txt 2024-10-16 21:25:30.000000000 +0200
@@ -8,7 +8,7 @@
cmake_policy(SET CMP0042 NEW)
project(mosquitto)
-set (VERSION 2.0.19)
+set (VERSION 2.0.20)
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/")
@@ -20,7 +20,7 @@
endif (WIN32)
if(APPLE)
- set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS} -undefined dynamic_lookup")
+ set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -undefined dynamic_lookup")
endif(APPLE)
include(GNUInstallDirs)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/ChangeLog.txt new/mosquitto-2.0.20/ChangeLog.txt
--- old/mosquitto-2.0.19/ChangeLog.txt 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/ChangeLog.txt 2024-10-16 21:25:30.000000000 +0200
@@ -1,3 +1,20 @@
+2.0.20 - 2024-10-16
+===================
+
+Broker:
+- Fix QoS 1 / QoS 2 publish incorrectly returning "no subscribers".
+ Closes #3128.
+- Open files with appropriate access on Windows. Closes #3119.
+- Don't allow invalid response topic values.
+- Fix some strict protocol compliance issues. Closes #3052.
+
+Client library:
+- Fix cmake build on OS X. Closes #3125.
+
+Build:
+- Fix build on NetBSD
+
+
2.0.19 - 2024-10-02
===================
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/README.md new/mosquitto-2.0.20/README.md
--- old/mosquitto-2.0.19/README.md 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/README.md 2024-10-16 21:25:30.000000000 +0200
@@ -30,7 +30,7 @@
## Quick start
If you have installed a binary package the broker should have been started
-automatically. If not, it can be started with a basic configuration:
+automatically. If not, it can be started with a very basic configuration:
mosquitto
@@ -42,6 +42,23 @@
mosquitto_pub -t 'test/topic' -m 'hello world'
+Note that starting the broker like this allows anonymous/unauthenticated access
+but only from the local computer, so it's only really useful for initial testing.
+
+If you want to have clients from another computer connect, you will need to
+provide a configuration file. If you have installed from a binary package, you
+will probably already have a configuration file at somewhere like
+`/etc/mosquitto/mosquitto.conf`. If you've compiled from source, you can write
+your config file then run as `mosquitto -c /path/to/mosquitto.conf`.
+
+To start your config file you define a listener and you will need to think
+about what authentication you require. It is not advised to run your broker
+with anonymous access when it is publically available.
+
+For details on how to do this, look at the
+[authentication methods](https://mosquitto.org/documentation/authentication-methods/)
+available and the [dynamic security plugin](https://mosquitto.org/documentation/dynamic-security/).
+
## Documentation
Documentation for the broker, clients and client library API can be found in
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/apps/db_dump/Makefile new/mosquitto-2.0.20/apps/db_dump/Makefile
--- old/mosquitto-2.0.19/apps/db_dump/Makefile 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/apps/db_dump/Makefile 2024-10-16 21:25:30.000000000 +0200
@@ -18,6 +18,7 @@
stubs.o \
time_mosq.o \
topic_tok.o \
+ util_topic.o \
utf8_mosq.o
.PHONY: all clean reallyclean
@@ -75,6 +76,9 @@
topic_tok.o : ../../src/topic_tok.c
${CROSS_COMPILE}${CC} $(CFLAGS_FINAL) -c $< -o $@
+util_topic.o : ../../lib/util_topic.c
+ ${CROSS_COMPILE}${CC} $(CFLAGS_FINAL) -c $< -o $@
+
utf8_mosq.o : ../../lib/utf8_mosq.c
${CROSS_COMPILE}${CC} $(CFLAGS_FINAL) -c $< -o $@
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/config.h new/mosquitto-2.0.20/config.h
--- old/mosquitto-2.0.19/config.h 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/config.h 2024-10-16 21:25:30.000000000 +0200
@@ -7,8 +7,6 @@
#ifdef __APPLE__
# define __DARWIN_C_SOURCE
#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__SYMBIAN32__)
-# define _XOPEN_SOURCE 700
-# define __BSD_VISIBLE 1
# define HAVE_NETINET_IN_H
#elif defined(__QNX__)
# define _XOPEN_SOURCE 600
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/config.mk new/mosquitto-2.0.20/config.mk
--- old/mosquitto-2.0.19/config.mk 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/config.mk 2024-10-16 21:25:30.000000000 +0200
@@ -130,7 +130,7 @@
# Also bump lib/mosquitto.h, CMakeLists.txt,
# installer/mosquitto.nsi, installer/mosquitto64.nsi
-VERSION=2.0.19
+VERSION=2.0.20
# Client library SO version. Bump if incompatible API/ABI changes are made.
SOVERSION=1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/include/mosquitto.h new/mosquitto-2.0.20/include/mosquitto.h
--- old/mosquitto-2.0.19/include/mosquitto.h 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/include/mosquitto.h 2024-10-16 21:25:30.000000000 +0200
@@ -66,7 +66,7 @@
#define LIBMOSQUITTO_MAJOR 2
#define LIBMOSQUITTO_MINOR 0
-#define LIBMOSQUITTO_REVISION 19
+#define LIBMOSQUITTO_REVISION 20
/* LIBMOSQUITTO_VERSION_NUMBER looks like 1002001 for e.g. version 1.2.1. */
#define LIBMOSQUITTO_VERSION_NUMBER (LIBMOSQUITTO_MAJOR*1000000+LIBMOSQUITTO_MINOR*1000+LIBMOSQUITTO_REVISION)
@@ -1601,7 +1601,7 @@
* private key for a TLS connection will be obtained. Defaults to
* "pem", a normal private key file.
*
- * MOSQ_OPT_TLS_KPASS_SHA1 - Where the TLS Engine requires the use of
+ * MOSQ_OPT_TLS_ENGINE_KPASS_SHA1 - Where the TLS Engine requires the use of
* a password to be accessed, this option allows a hex encoded
* SHA1 hash of the private key password to be passed to the
* engine directly. Must be set before <mosquitto_connect>.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/installer/mosquitto.nsi new/mosquitto-2.0.20/installer/mosquitto.nsi
--- old/mosquitto-2.0.19/installer/mosquitto.nsi 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/installer/mosquitto.nsi 2024-10-16 21:25:30.000000000 +0200
@@ -9,7 +9,7 @@
!define env_hklm 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"'
Name "Eclipse Mosquitto"
-!define VERSION 2.0.19
+!define VERSION 2.0.20
OutFile "mosquitto-${VERSION}-install-windows-x86.exe"
InstallDir "$PROGRAMFILES\mosquitto"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/installer/mosquitto64.nsi new/mosquitto-2.0.20/installer/mosquitto64.nsi
--- old/mosquitto-2.0.19/installer/mosquitto64.nsi 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/installer/mosquitto64.nsi 2024-10-16 21:25:30.000000000 +0200
@@ -9,7 +9,7 @@
!define env_hklm 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"'
Name "Eclipse Mosquitto"
-!define VERSION 2.0.19
+!define VERSION 2.0.20
OutFile "mosquitto-${VERSION}-install-windows-x64.exe"
!include "x64.nsh"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/lib/CMakeLists.txt new/mosquitto-2.0.20/lib/CMakeLists.txt
--- old/mosquitto-2.0.19/lib/CMakeLists.txt 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/lib/CMakeLists.txt 2024-10-16 21:25:30.000000000 +0200
@@ -4,6 +4,7 @@
endif (WITH_LIB_CPP)
include_directories(${mosquitto_SOURCE_DIR} ${mosquitto_SOURCE_DIR}/lib
+ ${OPENSSL_INCLUDE_DIR} # Required for cross compilation
${mosquitto_SOURCE_DIR}/include
${STDBOOL_H_PATH} ${STDINT_H_PATH})
@@ -105,10 +106,15 @@
OUTPUT_NAME mosquitto
VERSION ${VERSION}
SOVERSION 1
- LINK_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/linker.version
- LINK_FLAGS "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/linker.version"
)
+if(UNIX AND NOT APPLE)
+ set_target_properties(libmosquitto PROPERTIES
+ LINK_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/linker.version
+ LINK_FLAGS "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/linker.version"
+ )
+endif()
+
install(TARGETS libmosquitto
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/lib/dummypthread.h new/mosquitto-2.0.20/lib/dummypthread.h
--- old/mosquitto-2.0.19/lib/dummypthread.h 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/lib/dummypthread.h 1970-01-01 01:00:00.000000000 +0100
@@ -1,14 +0,0 @@
-#ifndef DUMMYPTHREAD_H
-#define DUMMYPTHREAD_H
-
-#define pthread_create(A, B, C, D)
-#define pthread_join(A, B)
-#define pthread_cancel(A)
-#define pthread_testcancel()
-
-#define pthread_mutex_init(A, B)
-#define pthread_mutex_destroy(A)
-#define pthread_mutex_lock(A)
-#define pthread_mutex_unlock(A)
-
-#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/lib/handle_pubackcomp.c new/mosquitto-2.0.20/lib/handle_pubackcomp.c
--- old/mosquitto-2.0.19/lib/handle_pubackcomp.c 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/lib/handle_pubackcomp.c 2024-10-16 21:25:30.000000000 +0200
@@ -57,9 +57,9 @@
}
}
- pthread_mutex_lock(&mosq->msgs_out.mutex);
+ COMPAT_pthread_mutex_lock(&mosq->msgs_out.mutex);
util__increment_send_quota(mosq);
- pthread_mutex_unlock(&mosq->msgs_out.mutex);
+ COMPAT_pthread_mutex_unlock(&mosq->msgs_out.mutex);
rc = packet__read_uint16(&mosq->in_packet, &mid);
if(rc) return rc;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/lib/misc_mosq.c new/mosquitto-2.0.20/lib/misc_mosq.c
--- old/mosquitto-2.0.19/lib/misc_mosq.c 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/lib/misc_mosq.c 2024-10-16 21:25:30.000000000 +0200
@@ -67,24 +67,31 @@
DWORD ulen = UNLEN;
SECURITY_DESCRIPTOR sd;
DWORD dwCreationDisposition;
+ DWORD dwShareMode;
int fd;
FILE *fptr;
switch(mode[0]){
case 'a':
dwCreationDisposition = OPEN_ALWAYS;
+ dwShareMode = GENERIC_WRITE;
flags = _O_APPEND;
break;
case 'r':
dwCreationDisposition = OPEN_EXISTING;
+ dwShareMode = GENERIC_READ;
flags = _O_RDONLY;
break;
case 'w':
dwCreationDisposition = CREATE_ALWAYS;
+ dwShareMode = GENERIC_WRITE;
break;
default:
return NULL;
}
+ if(mode[1] == '+'){
+ dwShareMode = GENERIC_READ | GENERIC_WRITE;
+ }
GetUserNameA(username, &ulen);
if (!InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION)) {
@@ -104,7 +111,7 @@
sec.bInheritHandle = FALSE;
sec.lpSecurityDescriptor = &sd;
- hfile = CreateFileA(buf, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ,
+ hfile = CreateFileA(buf, dwShareMode, FILE_SHARE_READ,
&sec,
dwCreationDisposition,
FILE_ATTRIBUTE_NORMAL,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/lib/mosquitto_internal.h new/mosquitto-2.0.20/lib/mosquitto_internal.h
--- old/mosquitto-2.0.19/lib/mosquitto_internal.h 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/lib/mosquitto_internal.h 2024-10-16 21:25:30.000000000 +0200
@@ -33,11 +33,7 @@
#endif
#include <stdlib.h>
-#if defined(WITH_THREADING) && !defined(WITH_BROKER)
-# include <pthread.h>
-#else
-# include <dummypthread.h>
-#endif
+#include <pthread_compat.h>
#ifdef WITH_SRV
# include <ares.h>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/lib/packet_mosq.c new/mosquitto-2.0.20/lib/packet_mosq.c
--- old/mosquitto-2.0.19/lib/packet_mosq.c 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/lib/packet_mosq.c 2024-10-16 21:25:30.000000000 +0200
@@ -129,13 +129,13 @@
void packet__cleanup_all(struct mosquitto *mosq)
{
- pthread_mutex_lock(&mosq->current_out_packet_mutex);
- pthread_mutex_lock(&mosq->out_packet_mutex);
+ COMPAT_pthread_mutex_lock(&mosq->current_out_packet_mutex);
+ COMPAT_pthread_mutex_lock(&mosq->out_packet_mutex);
packet__cleanup_all_no_locks(mosq);
- pthread_mutex_unlock(&mosq->out_packet_mutex);
- pthread_mutex_unlock(&mosq->current_out_packet_mutex);
+ COMPAT_pthread_mutex_unlock(&mosq->out_packet_mutex);
+ COMPAT_pthread_mutex_unlock(&mosq->current_out_packet_mutex);
}
@@ -151,7 +151,7 @@
packet->to_process = packet->packet_length;
packet->next = NULL;
- pthread_mutex_lock(&mosq->out_packet_mutex);
+ COMPAT_pthread_mutex_lock(&mosq->out_packet_mutex);
#ifdef WITH_BROKER
if(db.config->max_queued_messages > 0 && mosq->out_packet_count >= db.config->max_queued_messages){
@@ -174,7 +174,7 @@
}
mosq->out_packet_last = packet;
mosq->out_packet_count++;
- pthread_mutex_unlock(&mosq->out_packet_mutex);
+ COMPAT_pthread_mutex_unlock(&mosq->out_packet_mutex);
#ifdef WITH_BROKER
# ifdef WITH_WEBSOCKETS
if(mosq->wsi){
@@ -232,8 +232,8 @@
if(!mosq) return MOSQ_ERR_INVAL;
if(mosq->sock == INVALID_SOCKET) return MOSQ_ERR_NO_CONN;
- pthread_mutex_lock(&mosq->current_out_packet_mutex);
- pthread_mutex_lock(&mosq->out_packet_mutex);
+ COMPAT_pthread_mutex_lock(&mosq->current_out_packet_mutex);
+ COMPAT_pthread_mutex_lock(&mosq->out_packet_mutex);
if(mosq->out_packet && !mosq->current_out_packet){
mosq->current_out_packet = mosq->out_packet;
mosq->out_packet = mosq->out_packet->next;
@@ -242,7 +242,7 @@
}
mosq->out_packet_count--;
}
- pthread_mutex_unlock(&mosq->out_packet_mutex);
+ COMPAT_pthread_mutex_unlock(&mosq->out_packet_mutex);
#ifdef WITH_BROKER
if(mosq->current_out_packet){
@@ -252,7 +252,7 @@
state = mosquitto__get_state(mosq);
if(state == mosq_cs_connect_pending){
- pthread_mutex_unlock(&mosq->current_out_packet_mutex);
+ COMPAT_pthread_mutex_unlock(&mosq->current_out_packet_mutex);
return MOSQ_ERR_SUCCESS;
}
@@ -274,10 +274,10 @@
|| errno == WSAENOTCONN
#endif
){
- pthread_mutex_unlock(&mosq->current_out_packet_mutex);
+ COMPAT_pthread_mutex_unlock(&mosq->current_out_packet_mutex);
return MOSQ_ERR_SUCCESS;
}else{
- pthread_mutex_unlock(&mosq->current_out_packet_mutex);
+ COMPAT_pthread_mutex_unlock(&mosq->current_out_packet_mutex);
switch(errno){
case COMPAT_ECONNRESET:
return MOSQ_ERR_CONN_LOST;
@@ -296,7 +296,7 @@
if(((packet->command)&0xF6) == CMD_PUBLISH){
G_PUB_MSGS_SENT_INC(1);
#ifndef WITH_BROKER
- pthread_mutex_lock(&mosq->callback_mutex);
+ COMPAT_pthread_mutex_lock(&mosq->callback_mutex);
if(mosq->on_publish){
/* This is a QoS=0 message */
mosq->in_callback = true;
@@ -309,7 +309,7 @@
mosq->on_publish_v5(mosq, mosq->userdata, packet->mid, 0, NULL);
mosq->in_callback = false;
}
- pthread_mutex_unlock(&mosq->callback_mutex);
+ COMPAT_pthread_mutex_unlock(&mosq->callback_mutex);
}else if(((packet->command)&0xF0) == CMD_DISCONNECT){
do_client_disconnect(mosq, MOSQ_ERR_SUCCESS, NULL);
packet__cleanup(packet);
@@ -321,7 +321,7 @@
}
/* Free data and reset values */
- pthread_mutex_lock(&mosq->out_packet_mutex);
+ COMPAT_pthread_mutex_lock(&mosq->out_packet_mutex);
mosq->current_out_packet = mosq->out_packet;
if(mosq->out_packet){
mosq->out_packet = mosq->out_packet->next;
@@ -330,7 +330,7 @@
}
mosq->out_packet_count--;
}
- pthread_mutex_unlock(&mosq->out_packet_mutex);
+ COMPAT_pthread_mutex_unlock(&mosq->out_packet_mutex);
packet__cleanup(packet);
mosquitto__free(packet);
@@ -338,9 +338,9 @@
#ifdef WITH_BROKER
mosq->next_msg_out = db.now_s + mosq->keepalive;
#else
- pthread_mutex_lock(&mosq->msgtime_mutex);
+ COMPAT_pthread_mutex_lock(&mosq->msgtime_mutex);
mosq->next_msg_out = mosquitto_time() + mosq->keepalive;
- pthread_mutex_unlock(&mosq->msgtime_mutex);
+ COMPAT_pthread_mutex_unlock(&mosq->msgtime_mutex);
#endif
}
#ifdef WITH_BROKER
@@ -348,7 +348,7 @@
mux__remove_out(mosq);
}
#endif
- pthread_mutex_unlock(&mosq->current_out_packet_mutex);
+ COMPAT_pthread_mutex_unlock(&mosq->current_out_packet_mutex);
return MOSQ_ERR_SUCCESS;
}
@@ -536,9 +536,9 @@
#ifdef WITH_BROKER
keepalive__update(mosq);
#else
- pthread_mutex_lock(&mosq->msgtime_mutex);
+ COMPAT_pthread_mutex_lock(&mosq->msgtime_mutex);
mosq->last_msg_in = mosquitto_time();
- pthread_mutex_unlock(&mosq->msgtime_mutex);
+ COMPAT_pthread_mutex_unlock(&mosq->msgtime_mutex);
#endif
}
return MOSQ_ERR_SUCCESS;
@@ -571,9 +571,9 @@
#ifdef WITH_BROKER
keepalive__update(mosq);
#else
- pthread_mutex_lock(&mosq->msgtime_mutex);
+ COMPAT_pthread_mutex_lock(&mosq->msgtime_mutex);
mosq->last_msg_in = mosquitto_time();
- pthread_mutex_unlock(&mosq->msgtime_mutex);
+ COMPAT_pthread_mutex_unlock(&mosq->msgtime_mutex);
#endif
return rc;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/lib/property_mosq.c new/mosquitto-2.0.20/lib/property_mosq.c
--- old/mosquitto-2.0.19/lib/property_mosq.c 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/lib/property_mosq.c 2024-10-16 21:25:30.000000000 +0200
@@ -958,6 +958,10 @@
if(p->value.i16 == 0){
return MOSQ_ERR_PROTOCOL;
}
+ }else if(p->identifier == MQTT_PROP_RESPONSE_TOPIC){
+ if(mosquitto_pub_topic_check(p->value.s.v) != MOSQ_ERR_SUCCESS){
+ return MOSQ_ERR_PROTOCOL;
+ }
}
/* Check for properties on incorrect commands */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/lib/pthread_compat.h new/mosquitto-2.0.20/lib/pthread_compat.h
--- old/mosquitto-2.0.19/lib/pthread_compat.h 1970-01-01 01:00:00.000000000 +0100
+++ new/mosquitto-2.0.20/lib/pthread_compat.h 2024-10-16 21:25:30.000000000 +0200
@@ -0,0 +1,28 @@
+#ifndef PTHREAD_COMPAT_
+#define PTHREAD_COMPAT_
+
+#if defined(WITH_THREADING) && !defined(WITH_BROKER)
+# include <pthread.h>
+
+# define COMPAT_pthread_create(A, B, C, D) pthread_create((A), (B), (C), (D))
+# define COMPAT_pthread_join(A, B) pthread_join((A), (B))
+# define COMPAT_pthread_cancel(A) pthread_cancel((A))
+# define COMPAT_pthread_testcancel() pthread_testcancel()
+
+# define COMPAT_pthread_mutex_init(A, B) pthread_mutex_init((A), (B))
+# define COMPAT_pthread_mutex_destroy(A) pthread_mutex_init((A))
+# define COMPAT_pthread_mutex_lock(A) pthread_mutex_lock((A))
+# define COMPAT_pthread_mutex_unlock(A) pthread_mutex_unlock((A))
+#else
+# define COMPAT_pthread_create(A, B, C, D)
+# define COMPAT_pthread_join(A, B)
+# define COMPAT_pthread_cancel(A)
+# define COMPAT_pthread_testcancel()
+
+# define COMPAT_pthread_mutex_init(A, B)
+# define COMPAT_pthread_mutex_destroy(A)
+# define COMPAT_pthread_mutex_lock(A)
+# define COMPAT_pthread_mutex_unlock(A)
+#endif
+
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/lib/util_mosq.c new/mosquitto-2.0.20/lib/util_mosq.c
--- old/mosquitto-2.0.19/lib/util_mosq.c 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/lib/util_mosq.c 2024-10-16 21:25:30.000000000 +0200
@@ -87,10 +87,10 @@
return MOSQ_ERR_SUCCESS;
}
#endif
- pthread_mutex_lock(&mosq->msgtime_mutex);
+ COMPAT_pthread_mutex_lock(&mosq->msgtime_mutex);
next_msg_out = mosq->next_msg_out;
last_msg_in = mosq->last_msg_in;
- pthread_mutex_unlock(&mosq->msgtime_mutex);
+ COMPAT_pthread_mutex_unlock(&mosq->msgtime_mutex);
if(mosq->keepalive && mosq->sock != INVALID_SOCKET &&
(now >= next_msg_out || now - last_msg_in >= mosq->keepalive)){
@@ -98,10 +98,10 @@
if(state == mosq_cs_active && mosq->ping_t == 0){
send__pingreq(mosq);
/* Reset last msg times to give the server time to send a pingresp */
- pthread_mutex_lock(&mosq->msgtime_mutex);
+ COMPAT_pthread_mutex_lock(&mosq->msgtime_mutex);
mosq->last_msg_in = now;
mosq->next_msg_out = now + mosq->keepalive;
- pthread_mutex_unlock(&mosq->msgtime_mutex);
+ COMPAT_pthread_mutex_unlock(&mosq->msgtime_mutex);
}else{
#ifdef WITH_BROKER
# ifdef WITH_BRIDGE
@@ -118,7 +118,7 @@
}else{
rc = MOSQ_ERR_KEEPALIVE;
}
- pthread_mutex_lock(&mosq->callback_mutex);
+ COMPAT_pthread_mutex_lock(&mosq->callback_mutex);
if(mosq->on_disconnect){
mosq->in_callback = true;
mosq->on_disconnect(mosq, mosq->userdata, rc);
@@ -129,7 +129,7 @@
mosq->on_disconnect_v5(mosq, mosq->userdata, rc, NULL);
mosq->in_callback = false;
}
- pthread_mutex_unlock(&mosq->callback_mutex);
+ COMPAT_pthread_mutex_unlock(&mosq->callback_mutex);
return rc;
#endif
@@ -150,11 +150,11 @@
uint16_t mid;
assert(mosq);
- pthread_mutex_lock(&mosq->mid_mutex);
+ COMPAT_pthread_mutex_lock(&mosq->mid_mutex);
mosq->last_mid++;
if(mosq->last_mid == 0) mosq->last_mid++;
mid = mosq->last_mid;
- pthread_mutex_unlock(&mosq->mid_mutex);
+ COMPAT_pthread_mutex_unlock(&mosq->mid_mutex);
return mid;
}
@@ -280,14 +280,14 @@
int mosquitto__set_state(struct mosquitto *mosq, enum mosquitto_client_state state)
{
- pthread_mutex_lock(&mosq->state_mutex);
+ COMPAT_pthread_mutex_lock(&mosq->state_mutex);
#ifdef WITH_BROKER
if(mosq->state != mosq_cs_disused)
#endif
{
mosq->state = state;
}
- pthread_mutex_unlock(&mosq->state_mutex);
+ COMPAT_pthread_mutex_unlock(&mosq->state_mutex);
return MOSQ_ERR_SUCCESS;
}
@@ -296,9 +296,9 @@
{
enum mosquitto_client_state state;
- pthread_mutex_lock(&mosq->state_mutex);
+ COMPAT_pthread_mutex_lock(&mosq->state_mutex);
state = mosq->state;
- pthread_mutex_unlock(&mosq->state_mutex);
+ COMPAT_pthread_mutex_unlock(&mosq->state_mutex);
return state;
}
@@ -306,18 +306,18 @@
#ifndef WITH_BROKER
void mosquitto__set_request_disconnect(struct mosquitto *mosq, bool request_disconnect)
{
- pthread_mutex_lock(&mosq->state_mutex);
+ COMPAT_pthread_mutex_lock(&mosq->state_mutex);
mosq->request_disconnect = request_disconnect;
- pthread_mutex_unlock(&mosq->state_mutex);
+ COMPAT_pthread_mutex_unlock(&mosq->state_mutex);
}
bool mosquitto__get_request_disconnect(struct mosquitto *mosq)
{
bool request_disconnect;
- pthread_mutex_lock(&mosq->state_mutex);
+ COMPAT_pthread_mutex_lock(&mosq->state_mutex);
request_disconnect = mosq->request_disconnect;
- pthread_mutex_unlock(&mosq->state_mutex);
+ COMPAT_pthread_mutex_unlock(&mosq->state_mutex);
return request_disconnect;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/man/libmosquitto.3 new/mosquitto-2.0.20/man/libmosquitto.3
--- old/mosquitto-2.0.19/man/libmosquitto.3 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/man/libmosquitto.3 2024-10-16 21:25:30.000000000 +0200
@@ -2,12 +2,12 @@
.\" Title: libmosquitto
.\" Author: [see the "Author" section]
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
-.\" Date: 10/02/2024
+.\" Date: 10/16/2024
.\" Manual: Library calls
.\" Source: Mosquitto Project
.\" Language: English
.\"
-.TH "LIBMOSQUITTO" "3" "10/02/2024" "Mosquitto Project" "Library calls"
+.TH "LIBMOSQUITTO" "3" "10/16/2024" "Mosquitto Project" "Library calls"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/man/mosquitto-tls.7 new/mosquitto-2.0.20/man/mosquitto-tls.7
--- old/mosquitto-2.0.19/man/mosquitto-tls.7 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/man/mosquitto-tls.7 2024-10-16 21:25:30.000000000 +0200
@@ -2,12 +2,12 @@
.\" Title: mosquitto-tls
.\" Author: [see the "Author" section]
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
-.\" Date: 10/02/2024
+.\" Date: 10/16/2024
.\" Manual: Conventions and miscellaneous
.\" Source: Mosquitto Project
.\" Language: English
.\"
-.TH "MOSQUITTO\-TLS" "7" "10/02/2024" "Mosquitto Project" "Conventions and miscellaneous"
+.TH "MOSQUITTO\-TLS" "7" "10/16/2024" "Mosquitto Project" "Conventions and miscellaneous"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -178,7 +178,7 @@
openssl x509 \-req \-in client\&.csr \-CA ca\&.crt \-CAkey ca\&.key \-CAcreateserial \-out client\&.crt \-days <duration>
.RE
.SH "SEE ALSO"
-\fBmosquitto\fR(8), \fBmosquitto-conf\fR(5)
+\fBmosquitto\fR(8), \fBmosquitto.conf\fR(5)
.SH "AUTHOR"
.PP
Roger Light
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/man/mosquitto-tls.7.xml new/mosquitto-2.0.20/man/mosquitto-tls.7.xml
--- old/mosquitto-2.0.19/man/mosquitto-tls.7.xml 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/man/mosquitto-tls.7.xml 2024-10-16 21:25:30.000000000 +0200
@@ -96,7 +96,7 @@
</member>
<member>
<citerefentry>
- <refentrytitle><link xlink:href="mosquitto-conf-5.html">mosquitto-conf</link></refentrytitle>
+ <refentrytitle><link xlink:href="mosquitto-conf-5.html">mosquitto.conf</link></refentrytitle>
<manvolnum>5</manvolnum>
</citerefentry>
</member>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/man/mosquitto.8 new/mosquitto-2.0.20/man/mosquitto.8
--- old/mosquitto-2.0.19/man/mosquitto.8 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/man/mosquitto.8 2024-10-16 21:25:30.000000000 +0200
@@ -2,12 +2,12 @@
.\" Title: mosquitto
.\" Author: [see the "Author" section]
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
-.\" Date: 10/02/2024
+.\" Date: 10/16/2024
.\" Manual: System management commands
.\" Source: Mosquitto Project
.\" Language: English
.\"
-.TH "MOSQUITTO" "8" "10/02/2024" "Mosquitto Project" "System management commands"
+.TH "MOSQUITTO" "8" "10/16/2024" "Mosquitto Project" "System management commands"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/man/mosquitto.conf.5 new/mosquitto-2.0.20/man/mosquitto.conf.5
--- old/mosquitto-2.0.19/man/mosquitto.conf.5 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/man/mosquitto.conf.5 2024-10-16 21:25:30.000000000 +0200
@@ -2,12 +2,12 @@
.\" Title: mosquitto.conf
.\" Author: [see the "Author" section]
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
-.\" Date: 10/02/2024
+.\" Date: 10/16/2024
.\" Manual: File formats and conventions
.\" Source: Mosquitto Project
.\" Language: English
.\"
-.TH "MOSQUITTO\&.CONF" "5" "10/02/2024" "Mosquitto Project" "File formats and conventions"
+.TH "MOSQUITTO\&.CONF" "5" "10/16/2024" "Mosquitto Project" "File formats and conventions"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/man/mosquitto_ctrl.1 new/mosquitto-2.0.20/man/mosquitto_ctrl.1
--- old/mosquitto-2.0.19/man/mosquitto_ctrl.1 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/man/mosquitto_ctrl.1 2024-10-16 21:25:30.000000000 +0200
@@ -2,12 +2,12 @@
.\" Title: mosquitto_ctrl
.\" Author: [see the "Author" section]
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
-.\" Date: 10/02/2024
+.\" Date: 10/16/2024
.\" Manual: Commands
.\" Source: Mosquitto Project
.\" Language: English
.\"
-.TH "MOSQUITTO_CTRL" "1" "10/02/2024" "Mosquitto Project" "Commands"
+.TH "MOSQUITTO_CTRL" "1" "10/16/2024" "Mosquitto Project" "Commands"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/man/mosquitto_ctrl_dynsec.1 new/mosquitto-2.0.20/man/mosquitto_ctrl_dynsec.1
--- old/mosquitto-2.0.19/man/mosquitto_ctrl_dynsec.1 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/man/mosquitto_ctrl_dynsec.1 2024-10-16 21:25:30.000000000 +0200
@@ -2,12 +2,12 @@
.\" Title: mosquitto_ctrl_dynsec
.\" Author: [see the "Author" section]
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
-.\" Date: 10/02/2024
+.\" Date: 10/16/2024
.\" Manual: Commands
.\" Source: Mosquitto Project
.\" Language: English
.\"
-.TH "MOSQUITTO_CTRL_DYNSE" "1" "10/02/2024" "Mosquitto Project" "Commands"
+.TH "MOSQUITTO_CTRL_DYNSE" "1" "10/16/2024" "Mosquitto Project" "Commands"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/man/mosquitto_passwd.1 new/mosquitto-2.0.20/man/mosquitto_passwd.1
--- old/mosquitto-2.0.19/man/mosquitto_passwd.1 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/man/mosquitto_passwd.1 2024-10-16 21:25:30.000000000 +0200
@@ -2,12 +2,12 @@
.\" Title: mosquitto_passwd
.\" Author: [see the "Author" section]
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
-.\" Date: 10/02/2024
+.\" Date: 10/16/2024
.\" Manual: Commands
.\" Source: Mosquitto Project
.\" Language: English
.\"
-.TH "MOSQUITTO_PASSWD" "1" "10/02/2024" "Mosquitto Project" "Commands"
+.TH "MOSQUITTO_PASSWD" "1" "10/16/2024" "Mosquitto Project" "Commands"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/man/mosquitto_pub.1 new/mosquitto-2.0.20/man/mosquitto_pub.1
--- old/mosquitto-2.0.19/man/mosquitto_pub.1 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/man/mosquitto_pub.1 2024-10-16 21:25:30.000000000 +0200
@@ -2,12 +2,12 @@
.\" Title: mosquitto_pub
.\" Author: [see the "Author" section]
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
-.\" Date: 10/02/2024
+.\" Date: 10/16/2024
.\" Manual: Commands
.\" Source: Mosquitto Project
.\" Language: English
.\"
-.TH "MOSQUITTO_PUB" "1" "10/02/2024" "Mosquitto Project" "Commands"
+.TH "MOSQUITTO_PUB" "1" "10/16/2024" "Mosquitto Project" "Commands"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/man/mosquitto_rr.1 new/mosquitto-2.0.20/man/mosquitto_rr.1
--- old/mosquitto-2.0.19/man/mosquitto_rr.1 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/man/mosquitto_rr.1 2024-10-16 21:25:30.000000000 +0200
@@ -2,12 +2,12 @@
.\" Title: mosquitto_rr
.\" Author: [see the "Author" section]
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
-.\" Date: 10/02/2024
+.\" Date: 10/16/2024
.\" Manual: Commands
.\" Source: Mosquitto Project
.\" Language: English
.\"
-.TH "MOSQUITTO_RR" "1" "10/02/2024" "Mosquitto Project" "Commands"
+.TH "MOSQUITTO_RR" "1" "10/16/2024" "Mosquitto Project" "Commands"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/man/mosquitto_sub.1 new/mosquitto-2.0.20/man/mosquitto_sub.1
--- old/mosquitto-2.0.19/man/mosquitto_sub.1 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/man/mosquitto_sub.1 2024-10-16 21:25:30.000000000 +0200
@@ -2,12 +2,12 @@
.\" Title: mosquitto_sub
.\" Author: [see the "Author" section]
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
-.\" Date: 10/02/2024
+.\" Date: 10/16/2024
.\" Manual: Commands
.\" Source: Mosquitto Project
.\" Language: English
.\"
-.TH "MOSQUITTO_SUB" "1" "10/02/2024" "Mosquitto Project" "Commands"
+.TH "MOSQUITTO_SUB" "1" "10/16/2024" "Mosquitto Project" "Commands"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/man/mqtt.7 new/mosquitto-2.0.20/man/mqtt.7
--- old/mosquitto-2.0.19/man/mqtt.7 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/man/mqtt.7 2024-10-16 21:25:30.000000000 +0200
@@ -2,12 +2,12 @@
.\" Title: mqtt
.\" Author: [see the "Author" section]
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
-.\" Date: 10/02/2024
+.\" Date: 10/16/2024
.\" Manual: Conventions and miscellaneous
.\" Source: Mosquitto Project
.\" Language: English
.\"
-.TH "MQTT" "7" "10/02/2024" "Mosquitto Project" "Conventions and miscellaneous"
+.TH "MQTT" "7" "10/16/2024" "Mosquitto Project" "Conventions and miscellaneous"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/snap/snapcraft.yaml new/mosquitto-2.0.20/snap/snapcraft.yaml
--- old/mosquitto-2.0.19/snap/snapcraft.yaml 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/snap/snapcraft.yaml 2024-10-16 21:25:30.000000000 +0200
@@ -1,5 +1,5 @@
name: mosquitto
-version: 2.0.19
+version: 2.0.20
summary: Eclipse Mosquitto MQTT broker
description: This is a message broker that supports version 5.0, 3.1.1, and 3.1 of the MQTT
protocol.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/src/handle_subscribe.c new/mosquitto-2.0.20/src/handle_subscribe.c
--- old/mosquitto-2.0.19/src/handle_subscribe.c 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/src/handle_subscribe.c 2024-10-16 21:25:30.000000000 +0200
@@ -132,6 +132,11 @@
qos = subscription_options & 0x03;
subscription_options &= 0xFC;
+ if((subscription_options & MQTT_SUB_OPT_NO_LOCAL) && !strncmp(sub, "$share/", 7)){
+ mosquitto__free(sub);
+ mosquitto__free(payload);
+ return MOSQ_ERR_PROTOCOL;
+ }
retain_handling = (subscription_options & 0x30);
if(retain_handling == 0x30 || (subscription_options & 0xC0) != 0){
mosquitto__free(sub);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/src/subs.c new/mosquitto-2.0.20/src/subs.c
--- old/mosquitto-2.0.19/src/subs.c 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/src/subs.c 2024-10-16 21:25:30.000000000 +0200
@@ -659,6 +659,7 @@
int sub__messages_queue(const char *source_id, const char *topic, uint8_t qos, int retain, struct mosquitto_msg_store **stored)
{
int rc = MOSQ_ERR_SUCCESS, rc2;
+ int rc_normal = MOSQ_ERR_NO_SUBSCRIBERS, rc_shared = MOSQ_ERR_NO_SUBSCRIBERS;
struct mosquitto__subhier *subhier;
char **split_topics = NULL;
char *local_topic = NULL;
@@ -675,12 +676,24 @@
HASH_FIND(hh, db.normal_subs, split_topics[0], strlen(split_topics[0]), subhier);
if(subhier){
- rc = sub__search(subhier, split_topics, source_id, topic, qos, retain, *stored);
+ rc_normal = sub__search(subhier, split_topics, source_id, topic, qos, retain, *stored);
+ if(rc_normal > 0){
+ rc = rc_normal;
+ goto end;
+ }
}
HASH_FIND(hh, db.shared_subs, split_topics[0], strlen(split_topics[0]), subhier);
if(subhier){
- rc = sub__search(subhier, split_topics, source_id, topic, qos, retain, *stored);
+ rc_shared = sub__search(subhier, split_topics, source_id, topic, qos, retain, *stored);
+ if(rc_shared > 0){
+ rc = rc_shared;
+ goto end;
+ }
+ }
+
+ if(rc_normal == MOSQ_ERR_NO_SUBSCRIBERS && rc_shared == MOSQ_ERR_NO_SUBSCRIBERS){
+ rc = MOSQ_ERR_NO_SUBSCRIBERS;
}
if(retain){
@@ -688,6 +701,7 @@
if(rc2) rc = rc2;
}
+end:
mosquitto__free(split_topics);
mosquitto__free(local_topic);
/* Remove our reference and free if needed. */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/src/topic_tok.c new/mosquitto-2.0.20/src/topic_tok.c
--- old/mosquitto-2.0.19/src/topic_tok.c 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/src/topic_tok.c 2024-10-16 21:25:30.000000000 +0200
@@ -97,7 +97,7 @@
}
if(!strcmp((*topics)[0], "$share")){
- if(count < 2){
+ if(count < 3 || (count == 3 && strlen((*topics)[2]) == 0)){
mosquitto__free(*local_sub);
mosquitto__free(*topics);
return MOSQ_ERR_PROTOCOL;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/test/broker/data/CONNECT.json new/mosquitto-2.0.20/test/broker/data/CONNECT.json
--- old/mosquitto-2.0.19/test/broker/data/CONNECT.json 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/test/broker/data/CONNECT.json 2024-10-16 21:25:30.000000000 +0200
@@ -41,7 +41,7 @@
{"type":"recv", "payload":"20 02 00 00", "comment": "CONNACK"},
{"type":"send", "payload":"10 0D 0004 4D515454 04 02 000A 0001 70", "comment":"minimal valid CONNECT"}
]},
- { "name": "10 missing client ID", "connect":false, "msgs":[{"type":"send", "payload":"10 08 0004 4D515454 04 02 000A"}]},
+ { "name": "10 missing client ID", "connect":false, "msgs":[{"type":"send", "payload":"10 0A 0004 4D515454 04 02 000A"}]},
{ "name": "10 empty client ID", "connect":false, "expect_disconnect":false, "msgs":[
{"type":"send", "payload":"10 0C 0004 4D515454 04 02 000A 0000", "comment":"CONNECT clean session true, no client id"},
{"type":"recv", "payload":"20 02 00 00", "comment": "CONNACK"}
@@ -128,7 +128,7 @@
{"type":"recv", "payload":"20 02 00 00", "comment": "CONNACK"}
]},
{ "name": "duplicate CONNECT", "msgs":[{"type":"send", "payload":"10 0D 0004 4D515454 04 02 000A 0001 70", "comment":"minimal valid duplicate CONNECT"}]},
- { "name": "NanoMQ CWE-119", "msgs":[{"type":"send", "payload":"10 07 0004 4D515454 04 C2 003C 000B 746573742D707974686F6E 0005 61646d696E 0008 70617373776F7264"}]}
+ { "name": "NanoMQ CWE-119", "msgs":[{"type":"send", "payload":"10 28 0004 4D515454 04 C2 003C 000B 746573742D707974686F6E 0005 61646d696E 0008 70617373776F7264"}]}
]
},
{
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/test/broker/data/PUBLISH.json new/mosquitto-2.0.20/test/broker/data/PUBLISH.json
--- old/mosquitto-2.0.19/test/broker/data/PUBLISH.json 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/test/broker/data/PUBLISH.json 2024-10-16 21:25:30.000000000 +0200
@@ -178,7 +178,7 @@
]},
{ "name": "2*message-expiry-interval=1 (four byte integer)", "ver":5, "msgs": [
- {"type":"send", "payload":"32 1A 0005 746F706963 1234 0A 0200000001 0200000001 7061796C6F6164"},
+ {"type":"send", "payload":"32 1B 0005 746F706963 1234 0A 0200000001 0200000001 7061796C6F6164"},
{"type":"recv", "payload":"E0 01 82"}
]},
{ "name": "message-expiry-interval (four byte integer) missing", "ver":5, "msgs": [
@@ -211,6 +211,10 @@
{"type":"send", "payload":"32 15 0005 746F706963 1234 04 08000170 7061796C6F6164"},
{"type":"recv", "payload":"40 03 1234 10"}
]},
+ { "name": "response-topic (UTF-8 string, with wildcard)", "ver":5, "msgs": [
+ {"type":"send", "payload":"32 15 0005 746F706963 1234 04 08000123 7061796C6F6164"},
+ {"type":"recv", "payload":"E0 01 82"}
+ ]},
{ "name": "2*response-topic (UTF-8 string)", "ver":5, "msgs": [
{"type":"send", "payload":"32 19 0005 746F706963 1234 08 08000170 08000170 7061796C6F6164"},
{"type":"recv", "payload":"E0 01 82"}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/test/broker/data/SUBSCRIBE.json new/mosquitto-2.0.20/test/broker/data/SUBSCRIBE.json
--- old/mosquitto-2.0.19/test/broker/data/SUBSCRIBE.json 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/test/broker/data/SUBSCRIBE.json 2024-10-16 21:25:30.000000000 +0200
@@ -87,6 +87,14 @@
{"type":"send", "payload":"8A 07 1234 00 0001 70 00"},
{"type":"recv", "payload":"E0 01 81"}
]},
+ { "name": "82 QoS 3 [MQTT-3-8.3-2] (no qos)", "ver":5, "msgs": [
+ {"type":"send", "payload":"82 06 1234 00 0001 70"},
+ {"type":"recv", "payload":"E0 01 81"}
+ ]},
+ { "name": "82 QoS 3 [MQTT-3-8.3-2] (no topic or qos)", "ver":5, "msgs": [
+ {"type":"send", "payload":"82 03 1234 00"},
+ {"type":"recv", "payload":"E0 01 81"}
+ ]},
{ "name": "82 QoS 3 [MQTT-3-8.3-4]", "ver":5, "msgs": [
{"type":"send", "payload":"82 07 1234 00 0001 70 03"},
{"type":"recv", "payload":"E0 01 81"}
@@ -210,6 +218,18 @@
{ "name": "82 multiple ok [MQTT-3.8.4-4]", "ver":5, "expect_disconnect":false, "msgs": [
{"type":"send", "payload":"82 0B 1234 00 0001 70 00 0001 71 00"},
{"type":"recv", "payload":"90 05 1234 00 00 00"}
+ ]},
+ { "name": "82 shared sub with no topic part 1", "ver":5, "msgs": [
+ {"type":"send", "payload":"82 0F 1234 00 0009 2473686172652F702F 00"},
+ {"type":"recv", "payload":"E0 01 82"}
+ ]},
+ { "name": "82 shared sub with no topic part 2", "ver":5, "msgs": [
+ {"type":"send", "payload":"82 0E 1234 00 0008 2473686172652F70 00"},
+ {"type":"recv", "payload":"E0 01 82"}
+ ]},
+ { "name": "82 shared sub with no local set", "ver":5, "msgs": [
+ {"type":"send", "payload":"82 10 1234 00 000A 2473686172652F702F70 04"},
+ {"type":"recv", "payload":"E0 01 82"}
]}
]
},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/test/lib/Makefile new/mosquitto-2.0.20/test/lib/Makefile
--- old/mosquitto-2.0.19/test/lib/Makefile 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/test/lib/Makefile 2024-10-16 21:25:30.000000000 +0200
@@ -33,7 +33,7 @@
./02-subscribe-qos0.py $(a)/02-subscribe-qos0.test
./02-subscribe-qos1.py $(a)/02-subscribe-qos1.test
./02-subscribe-qos1.py $(a)/02-subscribe-qos1-async1.test
- ./02-subscribe-qos1.py $(a)/02-subscribe-qos1-async2.test
+ #FIXME ./02-subscribe-qos1.py $(a)/02-subscribe-qos1-async2.test
./02-subscribe-qos2.py $(a)/02-subscribe-qos2.test
./02-unsubscribe-multiple-v5.py $(a)/02-unsubscribe-multiple-v5.test
./02-unsubscribe-v5.py $(a)/02-unsubscribe-v5.test
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mosquitto-2.0.19/test/unit/Makefile new/mosquitto-2.0.20/test/unit/Makefile
--- old/mosquitto-2.0.19/test/unit/Makefile 2024-10-02 12:09:25.000000000 +0200
+++ new/mosquitto-2.0.20/test/unit/Makefile 2024-10-16 21:25:30.000000000 +0200
@@ -58,6 +58,7 @@
retain.o \
topic_tok.o \
utf8_mosq.o \
+ util_topic.o \
util_mosq.o
PERSIST_WRITE_TEST_OBJS = \
@@ -80,6 +81,7 @@
subs.o \
topic_tok.o \
utf8_mosq.o \
+ util_topic.o \
util_mosq.o
TLS_TEST_OBJS = \
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package mesheryctl for openSUSE:Factory checked in at 2024-10-20 10:05:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/mesheryctl (Old)
and /work/SRC/openSUSE:Factory/.mesheryctl.new.26871 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "mesheryctl"
Sun Oct 20 10:05:10 2024 rev:69 rq:1208988 version:0.7.124
Changes:
--------
--- /work/SRC/openSUSE:Factory/mesheryctl/mesheryctl.changes 2024-10-18 15:56:46.506078937 +0200
+++ /work/SRC/openSUSE:Factory/.mesheryctl.new.26871/mesheryctl.changes 2024-10-20 10:07:10.826697834 +0200
@@ -1,0 +2,6 @@
+Sat Oct 19 11:09:49 UTC 2024 - Johannes Kastl <opensuse_buildservice(a)ojkastl.de>
+
+- update to 0.7.124:
+ * no CLI-related changes in this release
+
+-------------------------------------------------------------------
Old:
----
mesheryctl-0.7.123.obscpio
New:
----
mesheryctl-0.7.124.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ mesheryctl.spec ++++++
--- /var/tmp/diff_new_pack.V81gD9/_old 2024-10-20 10:07:28.979453264 +0200
+++ /var/tmp/diff_new_pack.V81gD9/_new 2024-10-20 10:07:28.979453264 +0200
@@ -19,14 +19,17 @@
%define __arch_install_post export NO_BRP_STRIP_DEBUG=true
Name: mesheryctl
-Version: 0.7.123
+Version: 0.7.124
Release: 0
Summary: CLI for the meshery cloud native management plane
License: Apache-2.0
URL: https://github.com/meshery/meshery
Source: %{name}-%{version}.tar.gz
Source1: vendor.tar.gz
+BuildRequires: bash-completion
+BuildRequires: fish
BuildRequires: go1.22
+BuildRequires: zsh
%description
Meshery manages the provisioning, configuration and operation of your
@@ -98,8 +101,8 @@
%{buildroot}/%{_bindir}/%{name} completion fish > %{buildroot}%{_datarootdir}/fish/vendor_completions.d/%{name}.fish
# create the zsh completion file
-mkdir -p %{buildroot}%{_datarootdir}/zsh_completion.d/
-%{buildroot}/%{_bindir}/%{name} completion zsh > %{buildroot}%{_datarootdir}/zsh_completion.d/_%{name}
+mkdir -p %{buildroot}%{_datarootdir}/zsh/site-functions/
+%{buildroot}/%{_bindir}/%{name} completion zsh > %{buildroot}%{_datarootdir}/zsh/site-functions/_%{name}
%files
%doc README.md
@@ -107,16 +110,11 @@
%{_bindir}/%{name}
%files -n %{name}-bash-completion
-%dir %{_datarootdir}/bash-completion/completions/
%{_datarootdir}/bash-completion/completions/%{name}
%files -n %{name}-fish-completion
-%dir %{_datarootdir}/fish
-%dir %{_datarootdir}/fish/vendor_completions.d
%{_datarootdir}/fish/vendor_completions.d/%{name}.fish
%files -n %{name}-zsh-completion
-%defattr(-,root,root)
-%dir %{_datarootdir}/zsh_completion.d/
-%{_datarootdir}/zsh_completion.d/_%{name}
+%{_datarootdir}/zsh/site-functions/_%{name}
++++++ _service ++++++
--- /var/tmp/diff_new_pack.V81gD9/_old 2024-10-20 10:07:29.015454802 +0200
+++ /var/tmp/diff_new_pack.V81gD9/_new 2024-10-20 10:07:29.019454974 +0200
@@ -3,7 +3,7 @@
<param name="url">https://github.com/meshery/meshery</param>
<param name="scm">git</param>
<param name="exclude">.git</param>
- <param name="revision">v0.7.123</param>
+ <param name="revision">v0.7.124</param>
<param name="versionformat">@PARENT_TAG@</param>
<param name="changesgenerate">disable</param>
<param name="versionrewrite-pattern">v(.*)</param>
++++++ mesheryctl-0.7.123.obscpio -> mesheryctl-0.7.124.obscpio ++++++
/work/SRC/openSUSE:Factory/mesheryctl/mesheryctl-0.7.123.obscpio /work/SRC/openSUSE:Factory/.mesheryctl.new.26871/mesheryctl-0.7.124.obscpio differ: char 50, line 1
++++++ mesheryctl.obsinfo ++++++
--- /var/tmp/diff_new_pack.V81gD9/_old 2024-10-20 10:07:29.075457367 +0200
+++ /var/tmp/diff_new_pack.V81gD9/_new 2024-10-20 10:07:29.079457539 +0200
@@ -1,5 +1,5 @@
name: mesheryctl
-version: 0.7.123
-mtime: 1729179091
-commit: d7f1d7e8d0db5dc48b0a8f78658b136cfb717132
+version: 0.7.124
+mtime: 1729252228
+commit: 890b23ad01b64aefa878435dd280fddee2f24418
++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/mesheryctl/vendor.tar.gz /work/SRC/openSUSE:Factory/.mesheryctl.new.26871/vendor.tar.gz differ: char 5, line 1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package virtme for openSUSE:Factory checked in at 2024-10-20 10:05:08
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/virtme (Old)
and /work/SRC/openSUSE:Factory/.virtme.new.26871 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "virtme"
Sun Oct 20 10:05:08 2024 rev:21 rq:1208978 version:1.31
Changes:
--------
--- /work/SRC/openSUSE:Factory/virtme/virtme.changes 2024-09-24 17:35:19.374219907 +0200
+++ /work/SRC/openSUSE:Factory/.virtme.new.26871/virtme.changes 2024-10-20 10:05:19.198074429 +0200
@@ -1,0 +2,21 @@
+Sat Oct 19 07:57:42 UTC 2024 - Michael Vetter <mvetter(a)suse.com>
+
+- Update to 1.31:
+ * Fix a packaging issue, after an attempt to modernize the build
+ system we realized that we were not installing the bash
+ completion file anymore, so we have temporarily reverted the
+ change to cut this new release.
+ See gh/arighi/virtme-ng#181
+ * Initial support to run virtme-ng on macOS
+
+-------------------------------------------------------------------
+Tue Oct 15 09:06:54 UTC 2024 - Michael Vetter <mvetter(a)suse.com>
+
+- Update to 1.30:
+ * Initial support for NVIDIA GPUs passthrough
+ * Possibility to use pre-compiled -rc kernels from Ubuntu mainline builds
+ * Possibility to use virtiofs natively on arm64
+ * Some improvements to run virtme-ng cross-architecture and cross-distro
+ * Bug fixes
+
+-------------------------------------------------------------------
Old:
----
virtme-ng-1.29.tar.xz
New:
----
virtme-ng-1.31.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ virtme.spec ++++++
--- /var/tmp/diff_new_pack.B6bwJA/_old 2024-10-20 10:05:20.834136212 +0200
+++ /var/tmp/diff_new_pack.B6bwJA/_new 2024-10-20 10:05:20.838136363 +0200
@@ -22,7 +22,7 @@
%global pythons python311
%endif
Name: virtme
-Version: 1.29
+Version: 1.31
Release: 0
Summary: Tools for virtualize the running distro or a rootfs
License: GPL-2.0-only
++++++ _service ++++++
--- /var/tmp/diff_new_pack.B6bwJA/_old 2024-10-20 10:05:21.130147390 +0200
+++ /var/tmp/diff_new_pack.B6bwJA/_new 2024-10-20 10:05:21.186149505 +0200
@@ -3,7 +3,7 @@
<param name="url">https://github.com/arighi/virtme-ng.git</param>
<param name="scm">git</param>
<param name="submodules">enable</param>
- <param name="revision">v1.29</param>
+ <param name="revision">v1.31</param>
<param name="versionformat">@PARENT_TAG@</param>
<param name="versionrewrite-pattern">v(.*)</param>
<param name="versionrewrite-replacement">\1</param>
++++++ virtme-ng-1.29.tar.xz -> virtme-ng-1.31.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virtme-ng-1.29/Makefile new/virtme-ng-1.31/Makefile
--- old/virtme-ng-1.29/Makefile 2024-09-11 08:38:45.000000000 +0200
+++ new/virtme-ng-1.31/Makefile 2024-10-18 15:30:58.000000000 +0200
@@ -3,10 +3,6 @@
# Get git version information for make install
GIT_DESCRIBE := $(shell git describe --always --long --dirty)
-.PHONY: init
-init:
- cd virtme_ng_init && cargo install --path . --root ../virtme/guest
-
# see README.md '* Install from source'
install: install_from_source
install_from_source:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virtme-ng-1.29/README.md new/virtme-ng-1.31/README.md
--- old/virtme-ng-1.29/README.md 2024-09-11 08:38:45.000000000 +0200
+++ new/virtme-ng-1.31/README.md 2024-10-18 15:30:58.000000000 +0200
@@ -358,6 +358,26 @@
See also: `.github/workflows/run.yml` as a practical example on how to use
virtme-ng inside docker.
+ - Run virtme-ng with gpu passthrough:
+```
+ # Confirm host kernel has VFIO and IOMMU support
+ # Check if NVIDIA module is installed on the host
+ $ modinfo nvidia
+ # If the nvidia module is installed, blacklist the nvidia modules
+ $ sudo bash -c 'echo -e "blacklist nvidia\nblacklist nvidia-drm\nblacklist nvidia-modeset\nblacklist nvidia-peermem\nblacklist nvidia-uvm" > /etc/modprobe.d/blacklist-nvidia.conf'
+ # Host will need to be rebooted for blacklist to take effect.
+ # Get GPU device ID
+ $ lspci -nn | grep NVIDIA
+ 0000:01:00.0 VGA compatible controller [0300]: NVIDIA Corporation AD104GLM [RTX 3500 Ada Generation Laptop GPU] [10de:27bb] (rev a1)
+ 0000:01:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:22bc] (rev a1))
+ # Configure VFIO for device passthrough
+ $ sudo bash -c 'options vfio-pci ids=10de:27bb,10de:22bc' > /etc/modprobe.d/vfio.conf
+ # Load VFIO module
+ $ sudo modprobe vfio-pci
+ # Pass PCI address to virtme-ng
+ $ sudo vng --nvgpu "01:00.0" -r linux
+```
+
Implementation details
======================
@@ -499,11 +519,13 @@
- [LWN: Faster kernel testing with virtme-ng (November, 2023)](https://lwn.net/Articles/951313/)
- [LPC 2023: Speeding up Kernel Testing and Debugging with virtme-ng](https://lpc.events/event/17/contributions/1506/attachments/1143/2441/virtme-ng.pdf)
+ - [Kernel Recipes 2024: virtme-ng](https://kernel-recipes.org/en/2024/virtme-ng/)
+ - [Linux Foundation Mentorship Session: Speeding Up Kernel Development With virtme-ng](https://www.youtube.com/watch?v=ZgMLGM2UazY)
Credits
=======
-virtme-ng is written by Andrea Righi <andrea.righi(a)canonical.com>
+virtme-ng is written by Andrea Righi <arighi(a)nvidia.com>
virtme-ng is based on virtme, written by Andy Lutomirski <luto(a)kernel.org>
([web][korg-web] | [git][korg-git]).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virtme-ng-1.29/requirements.txt new/virtme-ng-1.31/requirements.txt
--- old/virtme-ng-1.29/requirements.txt 2024-09-11 08:38:45.000000000 +0200
+++ new/virtme-ng-1.31/requirements.txt 2024-10-18 15:30:58.000000000 +0200
@@ -1,3 +1,5 @@
argcomplete
argparse-manpage
requests
+setuptools
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virtme-ng-1.29/setup.py new/virtme-ng-1.31/setup.py
--- old/virtme-ng-1.29/setup.py 2024-09-11 08:38:45.000000000 +0200
+++ new/virtme-ng-1.31/setup.py 2024-10-18 15:30:58.000000000 +0200
@@ -77,7 +77,7 @@
argparse-manpage \
--pyfile ./virtme_ng/run.py --function make_parser \
--prog vng --version v{VERSION} \
- --author "virtme-ng is written by Andrea Righi <andrea.righi(a)canonical.com>" \
+ --author "virtme-ng is written by Andrea Righi <arighi(a)nvidia.com>" \
--author "Based on virtme by Andy Lutomirski <luto(a)kernel.org>" \
--project-name virtme-ng --manual-title virtme-ng \
--description "Quickly run kernels inside a virtualized snapshot of your live system" \
@@ -90,10 +90,22 @@
print(f"BUILD_VIRTME_NG_INIT: {build_virtme_ng_init}")
# Build virtme-ng-init
if build_virtme_ng_init:
- check_call(["make", "init"])
+ cwd = "virtme_ng_init"
+ root = "../virtme/guest"
+ args = ["cargo", "install", "--path", ".", "--root", root]
+ if platform.system() == "Darwin":
+ machine = platform.machine()
+ if machine == "arm64":
+ machine = "aarch64"
+ target = f"{machine}-unknown-linux-musl"
+ args.extend([
+ "--target", target,
+ "--config", f"target.{target}.linker = \"rust-lld\"",
+ ])
+ check_call(args, cwd="virtme_ng_init")
check_call(
- ["strip", "-s", "../virtme/guest/bin/virtme-ng-init"],
- cwd="virtme_ng_init",
+ ["strip", os.path.join(root, "bin", "virtme-ng-init")],
+ cwd=cwd,
)
# Generate manpage
if which('argparse-manpage'):
@@ -165,7 +177,7 @@
name="virtme-ng",
version=VERSION,
author="Andrea Righi",
- author_email="andrea.righi(a)canonical.com",
+ author_email="arighi(a)nvidia.com",
description="Build and run a kernel inside a virtualized snapshot of your live system",
url="https://git.launchpad.net/~arighi/+git/virtme-ng",
license="GPLv2",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virtme-ng-1.29/virtme/architectures.py new/virtme-ng-1.31/virtme/architectures.py
--- old/virtme-ng-1.29/virtme/architectures.py 2024-09-11 08:38:45.000000000 +0200
+++ new/virtme-ng-1.31/virtme/architectures.py 2024-10-18 15:30:58.000000000 +0200
@@ -23,9 +23,10 @@
return False
@staticmethod
- def qemuargs(is_native, use_kvm) -> List[str]:
+ def qemuargs(is_native, use_kvm, use_gpu) -> List[str]:
_ = is_native
_ = use_kvm
+ _ = use_gpu
return []
@staticmethod
@@ -51,6 +52,10 @@
return ["-vga", "none", "-display", "none"]
@staticmethod
+ def qemu_nodisplay_nvgpu_args() -> List[str]:
+ return ["-display", "none"]
+
+ @staticmethod
def qemu_display_args() -> List[str]:
return ["-device", "virtio-gpu-pci"]
@@ -71,6 +76,9 @@
def kimg_path(self) -> str:
return "arch/%s/boot/bzImage" % self.linuxname
+ def img_name(self) -> str:
+ return "vmlinuz"
+
@staticmethod
def dtb_path() -> Optional[str]:
return None
@@ -78,8 +86,8 @@
class Arch_unknown(Arch):
@staticmethod
- def qemuargs(is_native, use_kvm):
- return Arch.qemuargs(is_native, use_kvm)
+ def qemuargs(is_native, use_kvm, use_gpu):
+ return Arch.qemuargs(is_native, use_kvm, use_gpu)
class Arch_x86(Arch):
@@ -94,8 +102,8 @@
return True
@staticmethod
- def qemuargs(is_native, use_kvm):
- ret = Arch.qemuargs(is_native, use_kvm)
+ def qemuargs(is_native, use_kvm, use_gpu):
+ ret = Arch.qemuargs(is_native, use_kvm, use_gpu)
# Add a watchdog. This is useful for testing.
ret.extend(["-device", "i6300esb,id=watchdog0"])
@@ -103,7 +111,10 @@
if is_native and use_kvm:
# If we're likely to use KVM, request a full-featured CPU.
# (NB: if KVM fails, this will cause problems. We should probe.)
- ret.extend(["-cpu", "host"]) # We can't migrate regardless.
+ cpu_str = "host"
+ if use_gpu:
+ cpu_str += ",host-phys-bits-limit=0x28"
+ ret.extend(["-cpu", cpu_str])
else:
ret.extend(["-machine", "q35"])
@@ -179,8 +190,8 @@
]
@staticmethod
- def qemuargs(is_native, use_kvm):
- ret = Arch.qemuargs(is_native, use_kvm)
+ def qemuargs(is_native, use_kvm, use_gpu):
+ ret = Arch.qemuargs(is_native, use_kvm, use_gpu)
# Use microvm architecture for faster boot
ret.extend(["-M", "microvm,accel=kvm,pcie=on,rtc=on"])
@@ -200,8 +211,8 @@
self.defconfig_target = "vexpress_defconfig"
@staticmethod
- def qemuargs(is_native, use_kvm):
- ret = Arch.qemuargs(is_native, use_kvm)
+ def qemuargs(is_native, use_kvm, use_gpu):
+ ret = Arch.qemuargs(is_native, use_kvm, use_gpu)
# Emulate a vexpress-a15.
ret.extend(["-M", "vexpress-a15"])
@@ -242,18 +253,22 @@
class Arch_aarch64(Arch):
- def __init__(self):
- Arch.__init__(self, "aarch64")
+ def __init__(self, name):
+ Arch.__init__(self, name)
self.qemuname = "aarch64"
self.linuxname = "arm64"
self.gccname = "aarch64"
@staticmethod
- def qemuargs(is_native, use_kvm):
- ret = Arch.qemuargs(is_native, use_kvm)
+ def virtiofs_support() -> bool:
+ return True
+
+ @staticmethod
+ def qemuargs(is_native, use_kvm, use_gpu):
+ ret = Arch.qemuargs(is_native, use_kvm, use_gpu)
- if is_native:
+ if is_native and use_kvm:
ret.extend(["-M", "virt,gic-version=host"])
ret.extend(["-cpu", "host"])
else:
@@ -292,8 +307,8 @@
self.gccname = "powerpc64le"
@staticmethod
- def qemuargs(is_native, use_kvm):
- ret = Arch.qemuargs(is_native, use_kvm)
+ def qemuargs(is_native, use_kvm, use_gpu):
+ ret = Arch.qemuargs(is_native, use_kvm, use_gpu)
ret.extend(["-M", "pseries"])
return ret
@@ -312,23 +327,24 @@
# Apparently SLOF (QEMU's bundled firmware?) can't boot a zImage.
return "vmlinux"
+ def img_name(self) -> str:
+ return "vmlinux"
+
class Arch_riscv64(Arch):
def __init__(self):
Arch.__init__(self, "riscv64")
self.defconfig_target = "defconfig"
- self.qemuname = "riscv64"
self.linuxname = "riscv"
- self.gccname = "riscv64"
@staticmethod
def virtiofs_support() -> bool:
return True
@staticmethod
- def qemuargs(is_native, use_kvm):
- ret = Arch.qemuargs(is_native, use_kvm)
+ def qemuargs(is_native, use_kvm, use_gpu):
+ ret = Arch.qemuargs(is_native, use_kvm, use_gpu)
ret.extend(["-machine", "virt"])
ret.extend(["-bios", "default"])
@@ -347,13 +363,11 @@
Arch.__init__(self, "sparc64")
self.defconfig_target = "sparc64_defconfig"
- self.qemuname = "sparc64"
self.linuxname = "sparc"
- self.gccname = "sparc64"
@staticmethod
- def qemuargs(is_native, use_kvm):
- return Arch.qemuargs(is_native, use_kvm)
+ def qemuargs(is_native, use_kvm, use_gpu):
+ return Arch.qemuargs(is_native, use_kvm, use_gpu)
def kimg_path(self):
return "arch/sparc/boot/image"
@@ -368,17 +382,15 @@
def __init__(self):
Arch.__init__(self, "s390x")
- self.qemuname = "s390x"
self.linuxname = "s390"
- self.gccname = "s390x"
@staticmethod
def virtio_dev_type(virtiotype):
return "virtio-%s-ccw" % virtiotype
@staticmethod
- def qemuargs(is_native, use_kvm):
- ret = Arch.qemuargs(is_native, use_kvm)
+ def qemuargs(is_native, use_kvm, use_gpu):
+ ret = Arch.qemuargs(is_native, use_kvm, use_gpu)
# Ask for the latest version of s390-ccw
ret.extend(["-M", "s390-ccw-virtio"])
@@ -401,6 +413,9 @@
def qemu_serial_console_args():
return ["-device", "sclpconsole,chardev=console"]
+ def img_name(self) -> str:
+ return "image"
+
ARCHES = {
arch.virtmename: arch
@@ -409,7 +424,8 @@
Arch_x86("x86_64"),
Arch_x86("i386"),
Arch_arm(),
- Arch_aarch64(),
+ Arch_aarch64("aarch64"),
+ Arch_aarch64("arm64"),
Arch_ppc("ppc64"),
Arch_ppc("ppc64le"),
Arch_riscv64(),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virtme-ng-1.29/virtme/commands/configkernel.py new/virtme-ng-1.31/virtme/commands/configkernel.py
--- old/virtme-ng-1.29/virtme/commands/configkernel.py 2024-09-11 08:38:45.000000000 +0200
+++ new/virtme-ng-1.31/virtme/commands/configkernel.py 2024-10-18 15:30:58.000000000 +0200
@@ -10,12 +10,13 @@
import sys
import argparse
import os
+import platform
import shlex
import shutil
import subprocess
import multiprocessing
from .. import architectures
-from ..util import SilentError, uname
+from ..util import SilentError
def make_parser():
@@ -27,7 +28,7 @@
"--arch",
action="store",
metavar="ARCHITECTURE",
- default=uname.machine,
+ default=platform.machine(),
help="Target architecture",
)
@@ -285,6 +286,7 @@
args = _ARGPARSER.parse_args()
arch = architectures.get(args.arch)
+ is_native = args.arch == platform.machine()
custom_conf = []
if args.custom:
@@ -325,7 +327,7 @@
if args.cross_compile != "":
cross_compile_prefix = args.cross_compile
- if shutil.which(f"{cross_compile_prefix}-gcc") and arch.gccname != uname.machine:
+ if not is_native and shutil.which(f"{cross_compile_prefix}-gcc"):
gccname = shlex.quote(f"{cross_compile_prefix}-gcc")
archargs.append(f"CROSS_COMPILE={gccname}")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virtme-ng-1.29/virtme/commands/run.py new/virtme-ng-1.31/virtme/commands/run.py
--- old/virtme-ng-1.29/virtme/commands/run.py 2024-09-11 08:38:45.000000000 +0200
+++ new/virtme-ng-1.31/virtme/commands/run.py 2024-10-18 15:30:58.000000000 +0200
@@ -11,6 +11,7 @@
import argparse
import tempfile
import os
+import platform
import errno
import fcntl
import sys
@@ -29,7 +30,7 @@
from .. import qemu_helpers
from .. import architectures
from .. import resources
-from ..util import SilentError, uname, get_username, find_binary_or_raise
+from ..util import SilentError, get_username, find_binary_or_raise
def make_parser() -> argparse.ArgumentParser:
@@ -46,7 +47,7 @@
"--installed-kernel",
action="store",
nargs="?",
- const=uname.release,
+ const=platform.release(),
default=None,
metavar="VERSION",
help="[Deprecated] use --kimg instead.",
@@ -56,7 +57,7 @@
"--kimg",
action="store",
nargs="?",
- const=uname.release,
+ const=platform.release(),
default=None,
help="Use specified kernel image or an installed kernel version. "
+ "If no argument is specified the running kernel will be used.",
@@ -74,7 +75,7 @@
"--mods",
action="store",
choices=["none", "use", "auto"],
- default="use",
+ required=True,
help="Setup loadable kernel modules inside a compiled kernel source directory "
+ "(used in conjunction with --kdir); "
+ "none: ignore kernel modules, use: asks user to refresh virtme's kernel modules directory, "
@@ -201,7 +202,7 @@
"--arch",
action="store",
metavar="ARCHITECTURE",
- default=uname.machine,
+ default=platform.machine(),
help="Guest architecture",
)
g.add_argument(
@@ -312,6 +313,9 @@
help="Supply a directory that is r/w to the guest but read-only in the host. Use --overlay-rwdir=path.",
)
+ g.add_argument(
+ "--nvgpu", action="store", default=None, help="Set guest NVIDIA GPU."
+ )
return parser
@@ -368,7 +372,7 @@
return os.path.abspath(path)
-def get_kernel_version(path):
+def get_kernel_version(img_name, path):
if not os.path.exists(path):
arg_fail(
"kernel file %s does not exist, try --build to build the kernel" % path
@@ -380,7 +384,7 @@
["file", path], capture_output=True, text=True, check=False
)
for item in result.stdout.split(", "):
- match = re.search(r"^[vV]ersion (\S+)", item)
+ match = re.search(r"^[vV]ersion (\S{3,})", item)
if match:
kernel_version = match.group(1)
return kernel_version
@@ -393,10 +397,18 @@
result = subprocess.run(
["strings", path], capture_output=True, text=True, check=False
)
- match = re.search(r"Linux version (\S+)", result.stdout)
+ match = re.search(r"Linux version (\S{3,})", result.stdout)
if match:
kernel_version = match.group(1)
return kernel_version
+
+ # The version detection fails s390x using file or strings tools, so check
+ # if the file itself contains the version number.
+ if img_name:
+ match = re.search(fr"{img_name}-(\S{{3,}})", path)
+ if match:
+ return match.group(1)
+
return None
@@ -428,16 +440,18 @@
args.kimg = None
if args.kimg is not None:
+ img_name = arch.img_name()
+
# Try to resolve kimg as a kernel version first, then check if a file
# is provided.
- kimg = "/usr/lib/modules/%s/vmlinuz" % args.kimg
+ kimg = "/usr/lib/modules/%s/%s" % (args.kimg, img_name)
if not os.path.exists(kimg):
- kimg = "/boot/vmlinuz-%s" % args.kimg
+ kimg = "/boot/%s-%s" % (img_name, args.kimg)
if not os.path.exists(kimg):
kimg = args.kimg
if not os.path.exists(kimg):
arg_fail("%s does not exist" % args.kimg)
- kver = get_kernel_version(kimg)
+ kver = get_kernel_version(img_name, kimg)
if kver is None:
# Unable to detect kernel version, try to boot without
# automatically detecting modules.
@@ -484,7 +498,7 @@
elif args.kdir is not None:
kimg = os.path.join(args.kdir, arch.kimg_path())
# Run get_kernel_version to check at least if the kernel image exist.
- kernel.version = get_kernel_version(kimg)
+ kernel.version = get_kernel_version(None, kimg)
kernel.kimg = kimg
virtme_mods = os.path.join(args.kdir, ".virtme_mods")
mod_file = os.path.join(args.kdir, "modules.order")
@@ -573,7 +587,7 @@
def _get_virtiofsd_path(self):
# Define the possible virtiofsd paths.
#
- # NOTE: do not use the C implemention of qemu's virtiofsd, because it
+ # NOTE: do not use the C implementation of qemu's virtiofsd, because it
# doesn't support unprivileged-mode execution and it would be totally
# unsafe to export the whole rootfs of the host running as root.
#
@@ -652,48 +666,59 @@
return True
+class VirtioFSConfig:
+ def __init__(self, path: str, mount_tag: str, guest_tools_path=None, memory=None):
+ self.path = path
+ self.mount_tag = mount_tag
+ self.guest_tools_path = guest_tools_path
+ self.memory = memory
+
+
def export_virtiofs(
arch: architectures.Arch,
qemuargs: List[str],
- path: str,
- mount_tag: str,
- guest_tools_path=None,
- memory=None,
+ config: VirtioFSConfig,
verbose=False,
-) -> None:
+) -> bool:
if not arch.virtiofs_support():
return False
- # Try to start virtiofsd deamon
- virtio_fs = VirtioFS(guest_tools_path)
- ret = virtio_fs.start(path, verbose)
+ # Try to start virtiofsd daemon
+ virtio_fs = VirtioFS(config.guest_tools_path)
+ ret = virtio_fs.start(config.path, verbose)
if not ret:
return False
# Adjust qemu options to use virtiofsd
fsid = "virtfs%d" % len(qemuargs)
-
vhost_dev_type = arch.vhost_dev_type()
+
qemuargs.extend(["-chardev", f"socket,id=char{fsid},path={virtio_fs.sock}"])
- qemuargs.extend(["-device", f"{vhost_dev_type},chardev=char{fsid},tag={mount_tag}"])
- if memory is None:
- memory = "128M"
- elif memory == 0:
+ qemuargs.extend(["-device", f"{vhost_dev_type},chardev=char{fsid},tag={config.mount_tag}"])
+
+ memory = config.memory if config.memory is not None else "128M"
+ if memory == 0:
return True
+
qemuargs.extend(["-object", f"memory-backend-memfd,id=mem,size={memory},share=on"])
qemuargs.extend(["-numa", "node,memdev=mem"])
return True
+class VirtFSConfig:
+ def __init__(self, path: str, mount_tag: str, security_model="none", readonly=True):
+ self.path = path
+ self.mount_tag = mount_tag
+ self.security_model = security_model
+ self.readonly = readonly
+
+
def export_virtfs(
qemu: qemu_helpers.Qemu,
arch: architectures.Arch,
qemuargs: List[str],
- path: str,
- mount_tag: str,
- security_model="none",
- readonly=True,
+ config: VirtFSConfig,
) -> None:
# NB: We can't use -virtfs for this, because it can't handle a mount_tag
# that isn't a valid QEMU identifier.
@@ -704,9 +729,9 @@
"local,id=%s,path=%s,security_model=%s%s%s"
% (
fsid,
- qemu.quote_optarg(path),
- security_model,
- ",readonly=on" if readonly else "",
+ qemu.quote_optarg(config.path),
+ config.security_model,
+ ",readonly=on" if config.readonly else "",
",multidevs=remap" if qemu.has_multidevs else "",
),
]
@@ -715,7 +740,7 @@
[
"-device",
"%s,fsdev=%s,mount_tag=%s"
- % (arch.virtio_dev_type("9p"), fsid, qemu.quote_optarg(mount_tag)),
+ % (arch.virtio_dev_type("9p"), fsid, qemu.quote_optarg(config.mount_tag)),
]
)
@@ -817,7 +842,7 @@
args = _ARGPARSER.parse_args()
arch = architectures.get(args.arch)
- is_native = args.arch == uname.machine
+ is_native = args.arch == platform.machine()
qemu = qemu_helpers.Qemu(args.qemu_bin, arch.qemuname)
qemu.probe()
@@ -864,9 +889,12 @@
# Propagate /proc/sys/fs/nr_open from the host to the guest, otherwise we
# may see some EPERM errors, because certain applications/settings may
# expect to be able to use a higher limit of the max number of open files.
- with open('/proc/sys/fs/nr_open', 'r', encoding="utf-8") as file:
- nr_open = file.readline().strip()
- kernelargs.append(f"nr_open={nr_open}")
+ try:
+ with open('/proc/sys/fs/nr_open', 'r', encoding="utf-8") as file:
+ nr_open = file.readline().strip()
+ kernelargs.append(f"nr_open={nr_open}")
+ except FileNotFoundError:
+ pass
# Parse NUMA settings.
if args.numa:
@@ -926,16 +954,19 @@
virt_arch = architectures.get("microvm")
else:
virt_arch = arch
- use_virtiofs = export_virtiofs(
- virt_arch,
- qemuargs,
- args.root,
- "ROOTFS",
+ virtiofs_config = VirtioFSConfig(
+ path=args.root,
+ mount_tag="ROOTFS",
guest_tools_path=guest_tools_path,
# virtiofsd requires a NUMA not, if --numa is specified simply use
# the user-defined NUMA node, otherwise create a NUMA node with all
# the memory.
memory=0 if args.numa else args.memory,
+ )
+ use_virtiofs = export_virtiofs(
+ virt_arch,
+ qemuargs,
+ virtiofs_config,
verbose=args.verbose,
)
if can_use_microvm(args) and use_virtiofs:
@@ -943,9 +974,12 @@
sys.stderr.write("virtme: use 'microvm' QEMU architecture\n")
arch = virt_arch
if not use_virtiofs:
- export_virtfs(
- qemu, arch, qemuargs, args.root, "/dev/root", readonly=(not args.rw)
+ virtfs_config = VirtFSConfig(
+ path=args.root,
+ mount_tag="/dev/root",
+ readonly=(not args.rw),
)
+ export_virtfs(qemu, arch, qemuargs, virtfs_config)
# Use the faster virtme-ng-init if we are running on a native architecture.
if (
@@ -960,7 +994,11 @@
if args.root == "/":
initcmds = [f"init={guest_tools_path}/{virtme_init_cmd}"]
else:
- export_virtfs(qemu, arch, qemuargs, guest_tools_path, "virtme.guesttools")
+ virtfs_config = VirtFSConfig(
+ path=guest_tools_path,
+ mount_tag="virtme.guesttools",
+ )
+ export_virtfs(qemu, arch, qemuargs, virtfs_config)
initcmds = [
"init=/bin/sh",
"--",
@@ -1027,9 +1065,12 @@
idx = mount_index
mount_index += 1
tag = "virtme.initmount%d" % idx
- export_virtfs(
- qemu, arch, qemuargs, hostpath, tag, readonly=(dirtype != "rwdir")
+ virtfs_config = VirtFSConfig(
+ path=hostpath,
+ mount_tag=tag,
+ readonly=(dirtype != "rwdir"),
)
+ export_virtfs(qemu, arch, qemuargs, virtfs_config)
kernelargs.append("virtme_initmount%d=%s" % (idx, guestpath))
for i, d in enumerate(args.overlay_rwdir):
@@ -1037,11 +1078,14 @@
# Turn on KVM if available
kvm_ok = can_use_kvm(args)
- if is_native and kvm_ok:
- qemuargs.extend(["-machine", "accel=kvm:tcg"])
+ if is_native:
+ if kvm_ok:
+ qemuargs.extend(["-machine", "accel=kvm:tcg"])
+ elif platform.system() == "Darwin":
+ qemuargs.extend(["-machine", "accel=hvf"])
# Add architecture-specific options
- qemuargs.extend(arch.qemuargs(is_native, kvm_ok))
+ qemuargs.extend(arch.qemuargs(is_native, kvm_ok, args.nvgpu is not None))
# Set up / override baseline devices
qemuargs.extend(["-parallel", "none"])
@@ -1077,7 +1121,10 @@
kernelargs.extend(["virtme_console=" + arg for arg in arch.serial_console_args()])
- qemuargs.extend(arch.qemu_nodisplay_args())
+ if args.nvgpu is None:
+ qemuargs.extend(arch.qemu_nodisplay_args())
+ else:
+ qemuargs.extend(arch.qemu_nodisplay_nvgpu_args())
# PS/2 probing is slow; give the kernel a hint to speed it up.
kernelargs.extend(["psmouse.proto=exps"])
@@ -1162,7 +1209,10 @@
def do_script(shellcmd: str, ret_path=None, show_boot_console=False) -> None:
if args.graphics is None:
# Turn off default I/O
- qemuargs.extend(arch.qemu_nodisplay_args())
+ if args.nvgpu is None:
+ qemuargs.extend(arch.qemu_nodisplay_args())
+ else:
+ qemuargs.extend(arch.qemu_nodisplay_nvgpu_args())
# Check if we can redirect stdin/stdout/stderr.
if not can_access_file("/proc/self/fd/0") or \
@@ -1275,7 +1325,7 @@
show_boot_console=args.show_boot_console,
)
- if args.graphics is not None:
+ if args.graphics is not None and args.nvgpu is None:
video_args = arch.qemu_display_args()
if video_args:
qemuargs.extend(video_args)
@@ -1329,6 +1379,9 @@
if args.user:
kernelargs.append("virtme_user=%s" % args.user)
+ if args.nvgpu:
+ qemuargs.extend(["-device", args.nvgpu])
+
# If we are running as root on the host pass this information to the guest
# (this can be useful to properly support running virtme-ng instances
# inside docker)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virtme-ng-1.29/virtme/cpiowriter.py new/virtme-ng-1.31/virtme/cpiowriter.py
--- old/virtme-ng-1.29/virtme/cpiowriter.py 2024-09-11 08:38:45.000000000 +0200
+++ new/virtme-ng-1.31/virtme/cpiowriter.py 2024-10-18 15:30:58.000000000 +0200
@@ -5,6 +5,30 @@
# as a file called LICENSE with SHA-256 hash:
# 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643
+class FileMetaData:
+ def __init__(self, **kwargs):
+ # Define default values for the metadata
+ defaults = {
+ 'ino': None,
+ 'nlink': None,
+ 'uid': 0,
+ 'gid': 0,
+ 'mtime': 0,
+ 'devmajor': 0,
+ 'devminor': 0,
+ 'rdevmajor': 0,
+ 'rdevminor': 0
+ }
+
+ # Update defaults with any provided keyword arguments
+ self.meta_data = {**defaults, **kwargs}
+
+ def get(self, key):
+ return self.meta_data.get(key)
+
+ def set(self, key, value):
+ self.meta_data[key] = value
+
class CpioWriter:
TYPE_DIR = 0o0040000
@@ -22,23 +46,13 @@
self.__f.write(data)
self.__totalsize += len(data)
- def write_object(
- self,
- name,
- body,
- mode,
- ino=None,
- nlink=None,
- uid=0,
- gid=0,
- mtime=0,
- devmajor=0,
- devminor=0,
- rdevmajor=0,
- rdevminor=0,
- ):
- if nlink is None:
- nlink = 2 if (mode & CpioWriter.TYPE_MASK) == CpioWriter.TYPE_DIR else 1
+ def write_object(self, name, body, mode, meta_data=None):
+ # Set default metadata if not provided
+ meta_data = meta_data or FileMetaData()
+
+ # Ensure nlink is set correctly based on mode
+ if meta_data.get('nlink') is None:
+ meta_data.set('nlink', 2 if (mode & CpioWriter.TYPE_MASK) == CpioWriter.TYPE_DIR else 1)
if b"\0" in name:
raise ValueError("Filename cannot contain a NUL")
@@ -51,25 +65,28 @@
filesize = body.seek(0, 2)
body.seek(0)
- if ino is None:
- ino = self.__next_ino
+ # Set default ino if not provided
+ if meta_data.get('ino') is None:
+ meta_data.set('ino', self.__next_ino)
self.__next_ino += 1
+ # Prepare fields list using metadata
fields = [
- ino,
+ meta_data.get('ino'),
mode,
- uid,
- gid,
- nlink,
- mtime,
+ meta_data.get('uid'),
+ meta_data.get('gid'),
+ meta_data.get('nlink'),
+ meta_data.get('mtime'),
filesize,
- devmajor,
- devminor,
- rdevmajor,
- rdevminor,
+ meta_data.get('devmajor'),
+ meta_data.get('devminor'),
+ meta_data.get('rdevmajor'),
+ meta_data.get('rdevminor'),
namesize,
0,
]
+
hdr = ("070701" + "".join("%08X" % f for f in fields)).encode("ascii")
self.__write(hdr)
@@ -89,14 +106,14 @@
self.__write(((-filesize) % 4) * b"\0")
def write_trailer(self):
- self.write_object(name=b"TRAILER!!!", body=b"", mode=0, ino=0, nlink=1)
+ self.write_object(name=b"TRAILER!!!", body=b"", mode=0, meta_data=FileMetaData(ino=0, nlink=1))
self.__write(((-self.__totalsize) % 512) * b"\0")
def mkdir(self, name, mode):
- self.write_object(name=name, mode=CpioWriter.TYPE_DIR | mode, body=b"")
+ self.write_object(name=name, body=b"", mode=CpioWriter.TYPE_DIR | mode)
def symlink(self, src, dst):
- self.write_object(name=dst, mode=CpioWriter.TYPE_SYMLINK | 0o777, body=src)
+ self.write_object(name=dst, body=src, mode=CpioWriter.TYPE_SYMLINK | 0o777)
def write_file(self, name, body, mode):
self.write_object(name=name, body=body, mode=CpioWriter.TYPE_REG | mode)
@@ -105,8 +122,10 @@
major, minor = dev
self.write_object(
name=name,
- mode=CpioWriter.TYPE_CHRDEV | mode,
- rdevmajor=major,
- rdevminor=minor,
body=b"",
- )
+ mode=CpioWriter.TYPE_CHRDEV | mode,
+ meta_data=FileMetaData(
+ rdevmajor=major,
+ rdevminor=minor,
+ )
+ )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virtme-ng-1.29/virtme/modfinder.py new/virtme-ng-1.31/virtme/modfinder.py
--- old/virtme-ng-1.29/virtme/modfinder.py 2024-09-11 08:38:45.000000000 +0200
+++ new/virtme-ng-1.31/virtme/modfinder.py 2024-10-18 15:30:58.000000000 +0200
@@ -15,7 +15,7 @@
import re
import subprocess
-import os
+import platform
import itertools
from . import util
@@ -29,7 +29,7 @@
args += ["-C", "/var/empty"]
if root is not None:
args += ["-d", root]
- if kver is not None and kver != os.uname().release:
+ if kver is not None and kver != platform.release():
# If booting the loaded kernel, skip -S. This helps certain
# buggy modprobe versions that don't support -S.
args += ["-S", kver]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virtme-ng-1.29/virtme/qemu_helpers.py new/virtme-ng-1.31/virtme/qemu_helpers.py
--- old/virtme-ng-1.29/virtme/qemu_helpers.py 2024-09-11 08:38:45.000000000 +0200
+++ new/virtme-ng-1.31/virtme/qemu_helpers.py 2024-10-18 15:30:58.000000000 +0200
@@ -6,6 +6,7 @@
# 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643
import os
+import platform
import re
import shutil
import subprocess
@@ -23,7 +24,7 @@
if not qemubin:
qemubin = shutil.which("qemu-system-%s" % arch)
- if qemubin is None and arch == os.uname().machine:
+ if qemubin is None and arch == platform.machine():
qemubin = shutil.which("qemu-kvm")
if qemubin is None:
raise ValueError("cannot find qemu for %s" % arch)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virtme-ng-1.29/virtme/util.py new/virtme-ng-1.31/virtme/util.py
--- old/virtme-ng-1.29/virtme/util.py 2024-09-11 08:38:45.000000000 +0200
+++ new/virtme-ng-1.31/virtme/util.py 2024-10-18 15:30:58.000000000 +0200
@@ -12,8 +12,6 @@
import getpass
import itertools
-uname = os.uname()
-
class SilentError(Exception):
pass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virtme-ng-1.29/virtme_ng/mainline.py new/virtme-ng-1.31/virtme_ng/mainline.py
--- old/virtme-ng-1.29/virtme_ng/mainline.py 2024-09-11 08:38:45.000000000 +0200
+++ new/virtme-ng-1.31/virtme_ng/mainline.py 2024-10-18 15:30:58.000000000 +0200
@@ -25,7 +25,7 @@
self.version = version
self.arch = arch
self.verbose = verbose
- self.target = f"{self.kernel_dir}/boot/vmlinuz*generic*"
+ self.target = f"{self.kernel_dir}/boot/vmlinuz*generic"
if not glob(self.target):
self._fetch_kernel()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virtme-ng-1.29/virtme_ng/run.py new/virtme-ng-1.31/virtme_ng/run.py
--- old/virtme-ng-1.29/virtme_ng/run.py 2024-09-11 08:38:45.000000000 +0200
+++ new/virtme-ng-1.31/virtme_ng/run.py 2024-10-18 15:30:58.000000000 +0200
@@ -6,6 +6,7 @@
import argparse
import re
import os
+import platform
import sys
import socket
import shutil
@@ -29,7 +30,7 @@
# pylint: disable=unused-argument
pass
-from virtme.util import SilentError, uname, get_username
+from virtme.util import SilentError, get_username
from virtme_ng.utils import CONF_FILE, spinner_decorator
from virtme_ng.mainline import KernelDownloader
from virtme_ng.version import VERSION
@@ -114,7 +115,7 @@
"-r",
action="store",
nargs="?",
- const=uname.release,
+ const=platform.release(),
default=None,
help="Run a specified kernel; "
"--run can accept one of the following arguments: 1) nothing (in this "
@@ -465,6 +466,13 @@
nargs="*",
help="Additional Makefile variables",
)
+
+ parser.add_argument(
+ "--nvgpu",
+ action="store",
+ metavar="[GPU PCI Address]",
+ help="Add a passthrough NVIDIA GPU",
+ )
return parser
@@ -535,11 +543,17 @@
# Use Ubuntu's cloud images to create a rootfs, these images are fairly
# small and they provide a nice environment to test kernels.
if release is None:
- release = (
- check_output("lsb_release -s -c", shell=True)
- .decode(sys.stdout.encoding)
- .rstrip()
- )
+ try:
+ release = (
+ check_output("lsb_release -s -c", shell=True)
+ .decode(sys.stdout.encoding)
+ .rstrip()
+ )
+ if release == "n/a":
+ raise ValueError("unknown release")
+ except (CalledProcessError, ValueError):
+ print("Unknown release, try specifying an Ubuntu release with --root-release")
+ sys.exit(1)
url = (
"https://cloud-images.ubuntu.com/"
+ f"{release}/current/{release}-server-cloudimg-{arch}-root.tar.xz"
@@ -551,6 +565,20 @@
os.chdir(prevdir)
+def get_host_arch():
+ """Translate host architecture to the corresponding virtme-ng arch name."""
+ arch = platform.machine()
+ arch_map = {
+ 'x86_64': 'amd64',
+ 'aarch64': 'arm64',
+ 'armv7l': 'armhf',
+ 'ppc64le': 'ppc64el',
+ 'riscv64': 'riscv64',
+ 's390x': 's390x',
+ }
+ return arch_map.get(arch, None)
+
+
class KernelSource:
"""Main class that implement actions to perform on a kernel source directory."""
@@ -745,7 +773,7 @@
arg_fail(f"unsupported architecture: {arch}")
target = ARCH_MAPPING[arch]["kernel_target"]
cross_compile = ARCH_MAPPING[arch]["cross_compile"]
- if args.cross_compile != "":
+ if args.cross_compile:
cross_compile = args.cross_compile
cross_arch = ARCH_MAPPING[arch]["linux_name"]
@@ -816,7 +844,7 @@
def _get_virtme_root(self, args):
if args.root is not None:
- create_root(args.root, args.arch or "amd64", args.root_release)
+ create_root(args.root, args.arch or get_host_arch(), args.root_release)
self.virtme_param["root"] = f"--root {args.root}"
else:
self.virtme_param["root"] = ""
@@ -840,12 +868,12 @@
def _get_virtme_rodir(self, args):
self.virtme_param["rodir"] = ""
for item in args.rodir:
- self.virtme_param["rodir"] += "--rodir " + item
+ self.virtme_param["rodir"] += f"--rodir {item} "
def _get_virtme_rwdir(self, args):
self.virtme_param["rwdir"] = ""
for item in args.rwdir:
- self.virtme_param["rwdir"] += "--rwdir " + item
+ self.virtme_param["rwdir"] += f"--rwdir {item} "
def _get_virtme_overlay_rwdir(self, args):
# Set default overlays if rootfs is mounted in read-only mode.
@@ -865,9 +893,9 @@
# If an upstream version is specified (using an upstream tag) fetch
# and run the corresponding kernel from the Ubuntu mainline
# repository.
- if re.match(r'^v\d+(\.\d+)*$', args.run):
+ if re.match(r'^v\d+(\.\d+)*(-rc\d+)?$', args.run):
if args.arch is None:
- arch = 'amd64'
+ arch = get_host_arch()
else:
arch = args.arch
try:
@@ -886,7 +914,7 @@
self.virtme_param["kdir"] = "--kdir ./"
def _get_virtme_mods(self, args):
- if args.skip_modules:
+ if args.skip_modules or platform.system() != "Linux":
self.virtme_param["mods"] = "--mods none"
else:
self.virtme_param["mods"] = "--mods auto"
@@ -1041,6 +1069,12 @@
else:
self.virtme_param["qemu_opts"] = ""
+ def _get_virtme_nvgpu(self, args):
+ if args.nvgpu is not None:
+ self.virtme_param["nvgpu"] = f"--nvgpu 'vfio-pci,host={args.nvgpu}'"
+ else:
+ self.virtme_param["nvgpu"] = ""
+
def run(self, args):
"""Execute a kernel inside virtme-ng."""
self._get_virtme_name(args)
@@ -1076,6 +1110,7 @@
self._get_virtme_busybox(args)
self._get_virtme_qemu(args)
self._get_virtme_qemu_opts(args)
+ self._get_virtme_nvgpu(args)
# Start VM using virtme-run
cmd = (
@@ -1113,6 +1148,7 @@
+ f'{self.virtme_param["busybox"]} '
+ f'{self.virtme_param["qemu"]} '
+ f'{self.virtme_param["qemu_opts"]} '
+ + f'{self.virtme_param["nvgpu"]} '
)
check_call(cmd, shell=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/virtme-ng-1.29/virtme_ng/version.py new/virtme-ng-1.31/virtme_ng/version.py
--- old/virtme-ng-1.29/virtme_ng/version.py 2024-09-11 08:38:45.000000000 +0200
+++ new/virtme-ng-1.31/virtme_ng/version.py 2024-10-18 15:30:58.000000000 +0200
@@ -7,7 +7,7 @@
from subprocess import check_output, DEVNULL, CalledProcessError
import pkg_resources
-PKG_VERSION = "1.29"
+PKG_VERSION = "1.31"
def get_package_version():
@@ -34,7 +34,7 @@
# Otherwise fallback to the static version defined in PKG_VERSION.
version = (
check_output(
- "cd %s && [ -e ../.git ] && git describe --always --long --dirty" % os.path.dirname(__file__),
+ "cd %s && [ -e ../.git ] && git describe --long --dirty" % os.path.dirname(__file__),
shell=True,
stderr=DEVNULL,
)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package safeeyes for openSUSE:Factory checked in at 2024-10-20 10:05:07
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/safeeyes (Old)
and /work/SRC/openSUSE:Factory/.safeeyes.new.26871 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "safeeyes"
Sun Oct 20 10:05:07 2024 rev:12 rq:1208976 version:2.2.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/safeeyes/safeeyes.changes 2024-10-13 17:34:21.347929047 +0200
+++ /work/SRC/openSUSE:Factory/.safeeyes.new.26871/safeeyes.changes 2024-10-20 10:05:18.302040591 +0200
@@ -1,0 +2,6 @@
+Sat Oct 19 10:18:41 UTC 2024 - <opensuse.lietuviu.kalba(a)gmail.com>
+
+- Update SafeEyes-Python3.6-compatibility.patch according PEP 584
+ recommendations.
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ SafeEyes-Python3.6-compatibility.patch ++++++
--- /var/tmp/diff_new_pack.AMu0fu/_old 2024-10-20 10:05:18.806059625 +0200
+++ /var/tmp/diff_new_pack.AMu0fu/_new 2024-10-20 10:05:18.814059926 +0200
@@ -1,20 +1,20 @@
-Date: Sun, 13 Oct 2024 09:36:34 +0300
-Subject: [PATCH 1/2] Replace "|" into "or" for Python 3.6 compatibility
+Date: Sat, 19 Oct 2024 09:36:34 +0300
+Subject: [PATCH 1/2] Replace "|" for Python 3.6 compatibility according PEP 584 recommendations
---
- safeeyes/plugins/healthstats/plugin.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
+ safeeyes/plugins/healthstats/plugin.py | 2 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/safeeyes/plugins/healthstats/plugin.py b/safeeyes/plugins/healthstats/plugin.py
-index 126c1c86..d4def482 100644
--- a/safeeyes/plugins/healthstats/plugin.py
+++ b/safeeyes/plugins/healthstats/plugin.py
-@@ -55,7 +55,7 @@ def init(ctx, safeeyes_config, plugin_config):
+@@ -55,7 +55,8 @@ def init(ctx, safeeyes_config, plugin_config):
'total_resets': 0,
}
- session = context['session']['plugin'].get('healthstats', {}) | defaults
-+ session = context['session']['plugin'].get('healthstats', {}) or defaults
++ session = context['session']['plugin'].get('healthstats', {}).copy()
++ session.update(defaults)
if 'no_of_breaks' in session:
# Ignore old format session.
session = defaults
@@ -28,7 +28,6 @@
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/safeeyes/model.py b/safeeyes/model.py
-index 2f8f9b88..888a6bc1 100644
--- a/safeeyes/model.py
+++ b/safeeyes/model.py
@@ -24,6 +24,7 @@
1
0