summaryrefslogtreecommitdiff
path: root/config
diff options
context:
space:
mode:
authorFrank Ch. Eigler <fche@elastic.org>2019-10-28 13:29:26 -0400
committerMark Wielaard <mark@klomp.org>2019-11-22 23:02:29 +0100
commite27e30cae0468903473641efe3853c12d9294ac3 (patch)
tree1c99041d8d11ee3d620adb08f03616a1fb870a16 /config
parent288f6b199a8b1a60d4fb1f54ca7b883cdd5afca2 (diff)
downloadelfutils-e27e30cae0468903473641efe3853c12d9294ac3.tar.gz
debuginfod 2/2: server side
Add the server to the debuginfod/ subdirectory. This is a highly multithreaded c++11 program (still buildable on rhel7's gcc 4.8, which is only partly c++11 compliant). Includes an initial suite of tests, man pages, and a sample systemd service. Signed-off-by: Frank Ch. Eigler <fche@redhat.com> Signed-off-by: Aaron Merey <amerey@redhat.com>
Diffstat (limited to 'config')
-rw-r--r--config/ChangeLog7
-rw-r--r--config/Makefile.am5
-rw-r--r--config/debuginfod.service15
-rw-r--r--config/debuginfod.sysconfig14
-rw-r--r--config/elfutils.spec.in100
-rw-r--r--config/eu.am10
6 files changed, 145 insertions, 6 deletions
diff --git a/config/ChangeLog b/config/ChangeLog
index b641d0d5..73643f91 100644
--- a/config/ChangeLog
+++ b/config/ChangeLog
@@ -1,3 +1,10 @@
+2019-10-28 Frank Ch. Eigler <fche@redhat.com>
+
+ * eu.am (AM_CXXFLAGS): Clone & amend AM_CFLAGS for c++11 code.
+ * debuginfod.service, debuginfod.sysconfig: New files: systemd.
+ * Makefile.am: Install them.
+ * elfutils.spec.in: Add debuginfod and debuginfod-client subrpms.
+
2019-08-29 Mark Wielaard <mark@klomp.org>
* elfutils.spec.in (%description devel): Remove libebl text.
diff --git a/config/Makefile.am b/config/Makefile.am
index 10bd8d31..55e895ac 100644
--- a/config/Makefile.am
+++ b/config/Makefile.am
@@ -28,8 +28,9 @@
## the GNU Lesser General Public License along with this program. If
## not, see <http://www.gnu.org/licenses/>.
##
-EXTRA_DIST = elfutils.spec.in known-dwarf.awk 10-default-yama-scope.conf
- libelf.pc.in libdw.pc.in libdebuginfod.pc.in
+EXTRA_DIST = elfutils.spec.in known-dwarf.awk 10-default-yama-scope.conf \
+ libelf.pc.in libdw.pc.in libdebuginfod.pc.in \
+ debuginfod.service debuginfod.sysconfig
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libelf.pc libdw.pc libdebuginfod.pc
diff --git a/config/debuginfod.service b/config/debuginfod.service
new file mode 100644
index 00000000..d8ef072b
--- /dev/null
+++ b/config/debuginfod.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=elfutils debuginfo-over-http server
+Documentation=http://elfutils.org/
+After=network.target
+
+[Service]
+EnvironmentFile=/etc/sysconfig/debuginfod
+User=debuginfod
+Group=debuginfod
+#CacheDirectory=debuginfod
+ExecStart=/usr/bin/debuginfod -d /var/cache/debuginfod/debuginfod.sqlite -p $DEBUGINFOD_PORT $DEBUGINFOD_VERBOSE $DEBUGINFOD_PRAGMAS $DEBUGINFOD_PATHS
+TimeoutStopSec=10
+
+[Install]
+WantedBy=multi-user.target
diff --git a/config/debuginfod.sysconfig b/config/debuginfod.sysconfig
new file mode 100644
index 00000000..c56bcf3f
--- /dev/null
+++ b/config/debuginfod.sysconfig
@@ -0,0 +1,14 @@
+#
+DEBUGINFOD_PORT="8002"
+#DEBUGINFOD_VERBOSE="-v"
+
+# some common places to find trustworthy ELF/DWARF files and RPMs
+DEBUGINFOD_PATHS="-t43200 -F -R /usr/lib/debug /usr/bin /usr/libexec /usr/sbin /usr/lib /usr/lib64 /var/cache/yum /var/cache/dnf"
+
+# prefer reliability/durability over performance
+#DEBUGINFOD_PRAGMAS="-D 'pragma synchronous=full;'"
+
+# upstream debuginfods
+#DEBUGINFOD_URLS="http://secondhost:8002 http://thirdhost:8002"
+#DEBUGINFOD_TIMEOUT="5"
+#DEBUGINFOD_CACHE_DIR=""
diff --git a/config/elfutils.spec.in b/config/elfutils.spec.in
index 6771d13b..3cd15ce3 100644
--- a/config/elfutils.spec.in
+++ b/config/elfutils.spec.in
@@ -12,6 +12,11 @@ Requires: elfutils-libelf = %{version}-%{release}
Requires: glibc >= 2.7
Requires: libstdc++
Requires: default-yama-scope
+%if 0%{?rhel} >= 8 || 0%{?fedora} >= 20
+Recommends: elfutils-debuginfod-client
+%else
+Requires: elfutils-debuginfod-client
+%endif
# ExcludeArch: xxx
@@ -23,10 +28,20 @@ BuildRequires: flex >= 2.5.4a
BuildRequires: bzip2
BuildRequires: m4
BuildRequires: gettext
-BuildRequires: zlib-devel
+BuildRequires: pkgconfig(zlib)
+%if 0%{?rhel} == 7
BuildRequires: bzip2-devel
-BuildRequires: xz-devel
+%else
+BuildRequires: pkgconfig(bzip2)
+%endif
+BuildRequires: pkgconfig(liblzma)
BuildRequires: gcc-c++
+BuildRequires: pkgconfig(libmicrohttpd) >= 0.9.33
+BuildRequires: pkgconfig(libcurl) >= 7.29.0
+BuildRequires: pkgconfig(sqlite3) >= 3.7.17
+BuildRequires: pkgconfig(libarchive) >= 3.1.2
+# for the run-debuginfod-find.sh test case in %check for /usr/sbin/ss
+BuildRequires: iproute
%define _gnu %{nil}
%define _programprefix eu-
@@ -116,18 +131,53 @@ interprocess services, communication and introspection
(like synchronisation, signaling, debugging, tracing and
profiling) of processes.
+%package debuginfod-client
+Summary: Libraries and command-line frontend for HTTP ELF/DWARF file server addressed by build-id.
+License: GPLv3+ and (GPLv2+ or LGPLv3+)
+
+%package debuginfod-client-devel
+Summary: Libraries and headers to build debuginfod client applications.
+License: GPLv2+ or LGPLv3+
+
+%package debuginfod
+Summary: HTTP ELF/DWARF file server addressed by build-id.
+License: GPLv3+
+BuildRequires: systemd
+Requires(post): systemd
+Requires(preun): systemd
+Requires(postun): systemd
+Requires: shadow-utils
+Requires: /usr/bin/rpm2cpio
+
+%description debuginfod-client
+The elfutils-debuginfod-client package contains shared libraries
+dynamically loaded from -ldw, which use a debuginfod service
+to look up debuginfo and associated data. Also includes a
+command-line frontend.
+
+%description debuginfod-client-devel
+The elfutils-debuginfod-client-devel package contains the libraries
+to create applications to use the debuginfod service.
+
+%description debuginfod
+The elfutils-debuginfod package contains the debuginfod binary
+and control files for a service that can provide ELF/DWARF
+files to remote clients, based on build-id identification.
+The ELF/DWARF file searching functions in libdwfl can query
+such servers to download those files on demand.
+
%prep
%setup -q
%build
-%configure --program-prefix=%{_programprefix}
+%configure --program-prefix=%{_programprefix} --enable-debuginfod
make
%install
rm -rf ${RPM_BUILD_ROOT}
mkdir -p ${RPM_BUILD_ROOT}%{_prefix}
-%makeinstall
+%make_install
chmod +x ${RPM_BUILD_ROOT}%{_prefix}/%{_lib}/lib*.so*
@@ -140,6 +190,11 @@ chmod +x ${RPM_BUILD_ROOT}%{_prefix}/%{_lib}/lib*.so*
install -Dm0644 config/10-default-yama-scope.conf ${RPM_BUILD_ROOT}%{_sysctldir}/10-default-yama-scope.conf
+install -Dm0644 config/debuginfod.service ${RPM_BUILD_ROOT}%{_unitdir}/debuginfod.service
+install -Dm0644 config/debuginfod.sysconfig ${RPM_BUILD_ROOT}%{_sysconfdir}/sysconfig/debuginfod
+mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/cache/debuginfod
+touch ${RPM_BUILD_ROOT}%{_localstatedir}/cache/debuginfod/debuginfod.sqlite
+
%check
make check
@@ -225,6 +280,43 @@ rm -rf ${RPM_BUILD_ROOT}
%files default-yama-scope
%{_sysctldir}/10-default-yama-scope.conf
+%files debuginfod-client
+%defattr(-,root,root)
+%{_libdir}/libdebuginfod-%{version}.so
+%{_bindir}/debuginfod-find
+%{_mandir}/man1/debuginfod-find.1*
+
+%files debuginfod-client-devel
+%defattr(-,root,root)
+%{_libdir}/pkgconfig/libdebuginfod.pc
+%{_mandir}/man3/debuginfod_*.3*
+%{_includedir}/elfutils/debuginfod.h
+%{_libdir}/libdebuginfod.so*
+
+%files debuginfod
+%defattr(-,root,root)
+%{_bindir}/debuginfod
+%config(noreplace) %verify(not md5 size mtime) %{_sysconfdir}/sysconfig/debuginfod
+%{_unitdir}/debuginfod.service
+%{_sysconfdir}/sysconfig/debuginfod
+%{_mandir}/man8/debuginfod.8*
+
+%dir %attr(0700,debuginfod,debuginfod) %{_localstatedir}/cache/debuginfod
+%verify(not md5 size mtime) %attr(0600,debuginfod,debuginfod) %{_localstatedir}/cache/debuginfod/debuginfod.sqlite
+
+%pre debuginfod
+getent group debuginfod >/dev/null || groupadd -r debuginfod
+getent passwd debuginfod >/dev/null || \
+ useradd -r -g debuginfod -d /var/cache/debuginfod -s /sbin/nologin \
+ -c "elfutils debuginfo server" debuginfod
+exit 0
+
+%post debuginfod
+%systemd_post debuginfod.service
+
+%postun debuginfod
+%systemd_postun_with_restart debuginfod.service
+
%changelog
* Tue Aug 13 2019 Mark Wielaard <mark@klomp.org> 0.177-1
- elfclassify: New tool to analyze ELF objects.
diff --git a/config/eu.am b/config/eu.am
index 82acda3a..6c3c444f 100644
--- a/config/eu.am
+++ b/config/eu.am
@@ -79,6 +79,16 @@ AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 \
$(if $($(*F)_no_Wpacked_not_aligned),-Wno-packed-not-aligned,) \
$($(*F)_CFLAGS)
+AM_CXXFLAGS = -std=c++11 -Wall -Wshadow \
+ -Wtrampolines \
+ $(LOGICAL_OP_WARNING) $(DUPLICATED_COND_WARNING) \
+ $(NULL_DEREFERENCE_WARNING) $(IMPLICIT_FALLTHROUGH_WARNING) \
+ $(if $($(*F)_no_Werror),,-Werror) \
+ $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \
+ $(if $($(*F)_no_Wstack_usage),,$(STACK_USAGE_WARNING)) \
+ $(if $($(*F)_no_Wpacked_not_aligned),-Wno-packed-not-aligned,) \
+ $($(*F)_CXXFLAGS)
+
COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE))
DEFS.os = -DPIC -DSHARED