blob: 64b3af228312920202ced9ee1f6379d843dfd8e8 [file] [log] [blame]
# Copyright 2018 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
description "systemd-journald"
author "chromium-os-dev@chromium.org"
start on starting boot-services
stop on stopping boot-services
expect fork
respawn
pre-start script
# File mode includes group write permission to allow rsyslogd to create its
# socket. The directory group is root; syslog starts as root, and only after
# initialization switches to the syslog user.
mkdir -m 0775 -p /run/systemd/journal
mkdir -p /run/systemd/journal/pids
chown -R syslog /run/systemd/journal
mkdir -p /run/log
chown syslog /run/log
ln -sf /run/systemd/journal/dev-log /dev/log
end script
# Upstart has limitation on how it can track daemon readiness. See this report
# for more details: https://crbug.com/702794#27. net_poll_tool allows us to
# emit the started event only after the socket is ready.
# /run/systemd/journal/socket is the last socket created by journald.
#
# We don't use a pid namespace because it breaks journald's ability to log the
# remote pid. We don't use a network namespace because journald needs to read
# from the audit netlink socket.
#
# CAP_SYS_PTRACE is required to read /proc/<PID>/exe.
# We aren't going to give that capability to journald due to security concerns.
exec minijail0 -T static --ambient \
-u syslog -g syslog -c 'cap_syslog,cap_audit_read+e' \
-i -l --uts -f /run/systemd-journald.pid \
-v -P /mnt/empty -b / -b /proc -t -r --mount-dev \
-b /dev/kmsg,,1 \
-k 'run,/run,tmpfs,MS_NOSUID|MS_NODEV|MS_NOEXEC' \
-b /run/systemd,,1 \
-b /run/log,,1 \
-k 'var,/var,tmpfs,MS_NOSUID|MS_NODEV|MS_NOEXEC' \
-b /var/log,,1 \
/usr/lib/systemd/systemd-journald
post-start script
# The timeout is high, but it should never be hit unless there's a serious
# problem, in which case we want to fall over anyways. We can't set it too
# low because we also run in slow environments like VMs.
net_poll_tool --timeout=60 --unix_socket=/run/systemd/journal/socket
# This is needed to flush the journal to persistent storage
pkill -SIGUSR1 --pidfile /run/systemd-journald.pid
end script
post-stop script
rm /dev/log || true
rm /run/systemd-journald.pid || true
end script