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 <sgrunert@suse.com>
This commit is contained in:
Sascha Grunert
2019-05-08 08:49:08 +02:00
parent d2571c7fd4
commit d1fc3fc702
7 changed files with 46 additions and 5 deletions

View File

@ -18,7 +18,23 @@ SHAREDIR_CONTAINERS ?= ${PREFIX}/share/containers
ETCDIR ?= ${DESTDIR}/etc ETCDIR ?= ${DESTDIR}/etc
TMPFILESDIR ?= ${PREFIX}/lib/tmpfiles.d TMPFILESDIR ?= ${PREFIX}/lib/tmpfiles.d
SYSTEMDDIR ?= ${PREFIX}/lib/systemd/system 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 BUILDTAGS_CROSS ?= containers_image_openpgp containers_image_ostree_stub exclude_graphdriver_btrfs exclude_graphdriver_devicemapper exclude_graphdriver_overlay
ifneq (,$(findstring varlink,$(BUILDTAGS))) ifneq (,$(findstring varlink,$(BUILDTAGS)))
PODMAN_VARLINK_DEPENDENCIES = cmd/podman/varlink/iopodman.go PODMAN_VARLINK_DEPENDENCIES = cmd/podman/varlink/iopodman.go

4
hack/systemd_tag.sh Executable file
View File

@ -0,0 +1,4 @@
#!/usr/bin/env bash
if pkg-config --exists libsystemd; then
echo systemd
fi

View File

@ -116,4 +116,4 @@ runc = [
# Selects which logging mechanism to use for Podman events. Valid values # Selects which logging mechanism to use for Podman events. Valid values
# are `journald` or `file`. # are `journald` or `file`.
events_logger = "journald" # events_logger = "journald"

View File

@ -10,6 +10,10 @@ import (
"github.com/pkg/errors" "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 // String returns a string representation of EventerType
func (et EventerType) String() string { func (et EventerType) String() string {
if et == LogFile { if et == LogFile {

View File

@ -8,12 +8,14 @@ import (
) )
// NewEventer creates an eventer based on the eventer type // NewEventer creates an eventer based on the eventer type
func NewEventer(options EventerOptions) (Eventer, error) { func NewEventer(options EventerOptions) (eventer Eventer, err error) {
var eventer Eventer
logrus.Debugf("Initializing event backend %s", options.EventerType) logrus.Debugf("Initializing event backend %s", options.EventerType)
switch strings.ToUpper(options.EventerType) { switch strings.ToUpper(options.EventerType) {
case strings.ToUpper(Journald.String()): 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()): case strings.ToUpper(LogFile.String()):
eventer = EventLogFile{options} eventer = EventLogFile{options}
default: default:

View File

@ -1,3 +1,5 @@
// +build systemd
package events package events
import ( import (
@ -15,6 +17,11 @@ type EventJournalD struct {
options EventerOptions options EventerOptions
} }
// newEventJournalD creates a new journald Eventer
func newEventJournalD(options EventerOptions) (Eventer, error) {
return EventJournalD{options}, nil
}
// Write to journald // Write to journald
func (e EventJournalD) Write(ee Event) error { func (e EventJournalD) Write(ee Event) error {
m := make(map[string]string) m := make(map[string]string)

View File

@ -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
}