From d1fc3fc702cce6efca4a20f972ef1931c8392548 Mon Sep 17 00:00:00 2001 From: Sascha Grunert Date: Wed, 8 May 2019 08:49:08 +0200 Subject: [PATCH] Add `systemd` build tag If the systemd development files are not present on the system which builds podman, then `podman events` will error on runtime creation. Beside this, a warning will be printed when compiling podman. This commit mainly exists because projects which depend on libpod would not need the podman event support and therefore do not need to rely on the systemd headers. Signed-off-by: Sascha Grunert --- Makefile | 18 +++++++++++++++++- hack/systemd_tag.sh | 4 ++++ libpod.conf | 2 +- libpod/events/events.go | 4 ++++ libpod/events/events_linux.go | 8 +++++--- libpod/events/journal_linux.go | 7 +++++++ libpod/events/journal_unsupported.go | 8 ++++++++ 7 files changed, 46 insertions(+), 5 deletions(-) create mode 100755 hack/systemd_tag.sh create mode 100644 libpod/events/journal_unsupported.go diff --git a/Makefile b/Makefile index 86d0d99d2a..10ba142488 100644 --- a/Makefile +++ b/Makefile @@ -18,7 +18,23 @@ SHAREDIR_CONTAINERS ?= ${PREFIX}/share/containers ETCDIR ?= ${DESTDIR}/etc TMPFILESDIR ?= ${PREFIX}/lib/tmpfiles.d SYSTEMDDIR ?= ${PREFIX}/lib/systemd/system -BUILDTAGS ?= seccomp $(shell hack/btrfs_tag.sh) $(shell hack/btrfs_installed_tag.sh) $(shell hack/ostree_tag.sh) $(shell hack/selinux_tag.sh) $(shell hack/apparmor_tag.sh) varlink exclude_graphdriver_devicemapper +BUILDTAGS ?= \ + $(shell hack/apparmor_tag.sh) \ + $(shell hack/btrfs_installed_tag.sh) \ + $(shell hack/btrfs_tag.sh) \ + $(shell hack/ostree_tag.sh) \ + $(shell hack/selinux_tag.sh) \ + $(shell hack/systemd_tag.sh) \ + exclude_graphdriver_devicemapper \ + seccomp \ + varlink + +ifeq (,$(findstring systemd,$(BUILDTAGS))) +$(warning \ + Podman is being compiled without the systemd build tag.\ + Install libsystemd for journald support) +endif + BUILDTAGS_CROSS ?= containers_image_openpgp containers_image_ostree_stub exclude_graphdriver_btrfs exclude_graphdriver_devicemapper exclude_graphdriver_overlay ifneq (,$(findstring varlink,$(BUILDTAGS))) PODMAN_VARLINK_DEPENDENCIES = cmd/podman/varlink/iopodman.go diff --git a/hack/systemd_tag.sh b/hack/systemd_tag.sh new file mode 100755 index 0000000000..c59cad559f --- /dev/null +++ b/hack/systemd_tag.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +if pkg-config --exists libsystemd; then + echo systemd +fi diff --git a/libpod.conf b/libpod.conf index ca8d0fb366..08e80fac1b 100644 --- a/libpod.conf +++ b/libpod.conf @@ -116,4 +116,4 @@ runc = [ # Selects which logging mechanism to use for Podman events. Valid values # are `journald` or `file`. -events_logger = "journald" +# events_logger = "journald" diff --git a/libpod/events/events.go b/libpod/events/events.go index 650a47bfb6..1ec79bcd7f 100644 --- a/libpod/events/events.go +++ b/libpod/events/events.go @@ -10,6 +10,10 @@ import ( "github.com/pkg/errors" ) +// ErrNoJournaldLogging indicates that there is no journald logging +// supported (requires libsystemd) +var ErrNoJournaldLogging = errors.New("No support for journald logging") + // String returns a string representation of EventerType func (et EventerType) String() string { if et == LogFile { diff --git a/libpod/events/events_linux.go b/libpod/events/events_linux.go index da5d7965e7..11f3095745 100644 --- a/libpod/events/events_linux.go +++ b/libpod/events/events_linux.go @@ -8,12 +8,14 @@ import ( ) // NewEventer creates an eventer based on the eventer type -func NewEventer(options EventerOptions) (Eventer, error) { - var eventer Eventer +func NewEventer(options EventerOptions) (eventer Eventer, err error) { logrus.Debugf("Initializing event backend %s", options.EventerType) switch strings.ToUpper(options.EventerType) { case strings.ToUpper(Journald.String()): - eventer = EventJournalD{options} + eventer, err = newEventJournalD(options) + if err != nil { + return nil, errors.Wrapf(err, "eventer creation") + } case strings.ToUpper(LogFile.String()): eventer = EventLogFile{options} default: diff --git a/libpod/events/journal_linux.go b/libpod/events/journal_linux.go index 8ba5bc2c7f..264c84f89b 100644 --- a/libpod/events/journal_linux.go +++ b/libpod/events/journal_linux.go @@ -1,3 +1,5 @@ +// +build systemd + package events import ( @@ -15,6 +17,11 @@ type EventJournalD struct { options EventerOptions } +// newEventJournalD creates a new journald Eventer +func newEventJournalD(options EventerOptions) (Eventer, error) { + return EventJournalD{options}, nil +} + // Write to journald func (e EventJournalD) Write(ee Event) error { m := make(map[string]string) diff --git a/libpod/events/journal_unsupported.go b/libpod/events/journal_unsupported.go new file mode 100644 index 0000000000..c91d81f12a --- /dev/null +++ b/libpod/events/journal_unsupported.go @@ -0,0 +1,8 @@ +// +build !systemd + +package events + +// newEventJournalD always returns an error if libsystemd not found +func newEventJournalD(options EventerOptions) (Eventer, error) { + return nil, ErrNoJournaldLogging +}