commit: e4f951e4f7f7e2e158ef2b3617a64a60b06fadbf Author: Pacho Ramos <pacho <AT> gentoo <DOT> org> AuthorDate: Sat Nov 6 08:05:02 2021 +0000 Commit: Pacho Ramos <pacho <AT> gentoo <DOT> org> CommitDate: Sat Nov 6 08:05:02 2021 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=e4f951e4
app-admin/abrt: Fix running with glib-2.70 Also do lazy python imports to avoid performance issues Closes: https://bugs.gentoo.org/821199 Thanks-to: Leho Kraav (:macmaN @lkraav) Thanks-to: Sam James Package-Manager: Portage-3.0.28, Repoman-3.0.3 Signed-off-by: Pacho Ramos <pacho <AT> gentoo.org> app-admin/abrt/abrt-2.14.6-r1.ebuild | 134 +++++++++++++++++++++ app-admin/abrt/files/abrt-2.14.6-glib270.patch | 32 +++++ .../abrt/files/abrt-2.14.6-lazy-imports.patch | 57 +++++++++ 3 files changed, 223 insertions(+) diff --git a/app-admin/abrt/abrt-2.14.6-r1.ebuild b/app-admin/abrt/abrt-2.14.6-r1.ebuild new file mode 100644 index 00000000000..c5c616459b4 --- /dev/null +++ b/app-admin/abrt/abrt-2.14.6-r1.ebuild @@ -0,0 +1,134 @@ +# Copyright 1999-2021 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 +PYTHON_COMPAT=( python3_{8..9} ) + +inherit autotools python-single-r1 tmpfiles xdg + +DESCRIPTION="Automatic bug detection and reporting tool" +HOMEPAGE="https://github.com/abrt/abrt/wiki/ABRT-Project https://github.com/abrt/abrt" +SRC_URI="https://github.com/${PN}/${PN}/archive/${PV}.tar.gz -> ${P}.tar.gz" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~amd64 ~x86" + +IUSE="selinux test" +REQUIRED_USE="${PYTHON_REQUIRED_USE}" + +RESTRICT="!test? ( test )" + +DEPEND="${PYTHON_DEPS} + >=dev-libs/glib-2.56:2 + >=dev-libs/libreport-2.13.0:=[gtk,python] + dev-libs/libxml2:2 + >=gnome-base/gsettings-desktop-schemas-3.15.1 + net-libs/libsoup:2.4 + sys-apps/dbus + sys-apps/systemd:0= + sys-auth/polkit + sys-libs/libcap + sys-fs/inotify-tools + x11-libs/gtk+:3 +" +RDEPEND="${DEPEND} + acct-user/abrt + acct-group/abrt + app-arch/cpio + app-arch/rpm[python,${PYTHON_SINGLE_USEDEP}] + dev-libs/elfutils + dev-libs/json-c:0= + sys-apps/util-linux + >=sys-devel/gdb-7 + $(python_gen_cond_dep ' + dev-libs/satyr[${PYTHON_USEDEP}] + dev-python/argcomplete[${PYTHON_USEDEP}] + dev-python/argh[${PYTHON_USEDEP}] + dev-python/humanize[${PYTHON_USEDEP}] + ') +" +BDEPEND=" + $(python_gen_cond_dep 'dev-python/python-systemd[${PYTHON_USEDEP}]') + test? ( + $(python_gen_cond_dep 'dev-python/pytest[${PYTHON_USEDEP}]') + ) + app-text/asciidoc + app-text/xmlto + >=dev-util/intltool-0.35.0 + virtual/pkgconfig + >=sys-devel/gettext-0.17 +" + +PATCHES=( + # https://github.com/abrt/abrt/commit/a6297858575780b9ed3d14cc42983348924d6048 + "${FILESDIR}/${P}-glib270.patch" + + # https://github.com/abrt/abrt/pull/1580 + "${FILESDIR}/${P}-lazy-imports.patch" +) + +pkg_setup() { + python-single-r1_pkg_setup +} + +src_prepare() { + python_fix_shebang . + default + + # Install under proper directory + sed -i -e 's:dbusabrtdocdir = ${datadir}/doc/abrt-dbus-${VERSION}/html:dbusabrtdocdir = ${datadir}/doc/${PF}/html:' doc/problems-service/Makefile.am || die + + # Ensure this works for systems with and without /usr merge + sed -i -e "s:/usr/bin/bash:$(which bash):" init-scripts/abrtd.service || die + + # Fix hardcoded "pytest-3" + sed -i -e "s:pytest-3:pytest:" \ + configure.ac src/python-problem/tests/Makefile.am src/cli/test || die + + # pyhook test is sensitive to the format of python's error messages, and + # fails with certain python versions + sed -e '/pyhook.at/ d' \ + -i tests/Makefile.* tests/testsuite.at || die "sed remove pyhook tests failed" + ./gen-version || die # Needed to be run before autoreconf + eautoreconf +} + +src_configure() { + myeconfargs=( + --libdir="${EPREFIX}/usr/$(get_libdir)" + --localstatedir="${EPREFIX}/var" + --without-bodhi + # package breaks due to not finding libreport-web with bodhi plugin enabled + --without-rpm + $(usex selinux "" "--without-selinux") + --with-python3 + --without-pythondoc + # package breaks due to no sphinx-build-3 + $(use_with test pythontests) + ) + + econf "${myeconfargs[@]}" +} + +src_install() { + default + python_optimize + + # /var/spool/abrt is created by dev-libs/libreport + diropts -m 700 -o abrt -g abrt + keepdir /var/spool/abrt-upload + + find "${D}" -name '*.la' -delete || die + + newinitd "${FILESDIR}/${PN}-2.0.12-r1-init" abrt + newconfd "${FILESDIR}/${PN}-2.0.12-r1-conf" abrt + + # Drop empy dirs, handled by tmpfiles + rm -r "${ED}"/var/run/ || die +} + +pkg_postinst() { + xdg_pkg_postinst + tmpfiles_process abrt.conf +} diff --git a/app-admin/abrt/files/abrt-2.14.6-glib270.patch b/app-admin/abrt/files/abrt-2.14.6-glib270.patch new file mode 100644 index 00000000000..673a31e0a21 --- /dev/null +++ b/app-admin/abrt/files/abrt-2.14.6-glib270.patch @@ -0,0 +1,32 @@ +From a6297858575780b9ed3d14cc42983348924d6048 Mon Sep 17 00:00:00 2001 +From: Michal Srb <mic...@redhat.com> +Date: Tue, 5 Oct 2021 15:53:48 +0200 +Subject: [PATCH] abrt-dbus: do not try to free session data twice + +We free session data in on_g_signal() function, which is also +invoked when client disappears. Therefore, we don't need to register the +same free function in g_bus_watch_name_on_connection(). + +glib2 2.69.2 changed (fixed?) how/when g_bus_watch_name_on_connection() +calls the provided free function and it uncovered this problem in abrt-dbus. + +See rhbz#1997315 for more details. + +Signed-off-by: Michal Srb <mic...@redhat.com> +--- + src/dbus/abrt_problems2_service.c | 2 +- + 2 files changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/dbus/abrt_problems2_service.c b/src/dbus/abrt_problems2_service.c +index 8d543f443..004c7aeb2 100644 +--- a/src/dbus/abrt_problems2_service.c ++++ b/src/dbus/abrt_problems2_service.c +@@ -571,7 +571,7 @@ static AbrtP2Object *session_object_register(AbrtP2Service *service, + obj->owner_watcher_id = g_bus_watch_name_on_connection(connection, caller, + G_BUS_NAME_WATCHER_FLAGS_NONE, + NULL, abrt_p2_service_on_session_owner_vanished, +- obj, (GDestroyNotify)abrt_p2_object_destroy); ++ obj, NULL); + + return obj; + } diff --git a/app-admin/abrt/files/abrt-2.14.6-lazy-imports.patch b/app-admin/abrt/files/abrt-2.14.6-lazy-imports.patch new file mode 100644 index 00000000000..5c892a8ecab --- /dev/null +++ b/app-admin/abrt/files/abrt-2.14.6-lazy-imports.patch @@ -0,0 +1,57 @@ +From 4755f2171aa50a72d8ec03260c8cbc602263a6c0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <m...@hroncok.cz> +Date: Fri, 24 Sep 2021 17:48:07 +0200 +Subject: [PATCH] Use lazy imports in abrt_exception_handler3 + +The abrt_exception_handler3 module is always imported when Python starts, +but all the modules imported from it (except sys) are only used during crashes. + +Especially the systemd.journal import is really expensive. + +Fixes https://bugzilla.redhat.com/show_bug.cgi?id=2007664 +--- + src/hooks/abrt_exception_handler3.py.in | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/src/hooks/abrt_exception_handler3.py.in b/src/hooks/abrt_exception_handler3.py.in +index 89e2474b..0bc548e0 100644 +--- a/src/hooks/abrt_exception_handler3.py.in ++++ b/src/hooks/abrt_exception_handler3.py.in +@@ -20,13 +20,15 @@ + Module for the ABRT exception handling hook + """ + ++# Avoid importing anything but sys here, use lazy imports. ++# This file is imported on every Python startup, ++# all unused imports only increase the startup time and memory usage. + import sys +-import os + +-from systemd import journal + + def syslog(msg): + """Log message to system logger (journal)""" ++ from systemd import journal + + journal.send(msg) + +@@ -68,6 +70,8 @@ def send(data): + + + def write_dump(tb_text, tb): ++ import os ++ + if sys.argv[0][0] == "/": + executable = os.path.abspath(sys.argv[0]) + else: +@@ -118,6 +122,7 @@ def handle_exception(etype, value, tb): + sys.excepthook = sys.__excepthook__ # pylint: disable-msg=E1101 + + import errno ++ import os + + # Ignore Ctrl-C + # SystemExit rhbz#636913 -> this exception is not an error +-- +2.31.1 +