blob: 79c3e70a3f5cf3a1b22e43f3e8930a7c38f6d296 [file] [log] [blame]
# Copyright 2014 The Chromium OS Authors. All rights reserved.
# Distributed under the terms of the GNU General Public License v2
EAPI=7
CROS_WORKON_COMMIT="9af083c78a329699153cc604ee62cd02f3a87b2b"
CROS_WORKON_TREE=("791c6808b4f4f5f1c484108d66ff958d65f8f1e3" "6801629d7f37434bc503901837418db96ea3fc51" "a9708ef639f0f7929195d0f3921ebd1a12ad96bd" "e7dba8c91c1f3257c34d4a7ffff0ea2537aeb6bb")
CROS_WORKON_INCREMENTAL_BUILD=1
CROS_WORKON_LOCALNAME="platform2"
CROS_WORKON_PROJECT="chromiumos/platform2"
CROS_WORKON_OUTOFTREE_BUILD=1
# TODO(crbug.com/809389): Avoid directly including headers from other packages.
CROS_WORKON_SUBTREE="common-mk crash-reporter metrics .gn"
PLATFORM_SUBDIR="crash-reporter"
inherit cros-arm64 cros-i686 cros-workon platform systemd udev user
DESCRIPTION="Crash reporting service that uploads crash reports with debug information"
HOMEPAGE="https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/crash-reporter/"
LICENSE="BSD-Google"
KEYWORDS="*"
IUSE="arcpp arcvm chromeless_tty cros_ec cros_embedded -direncryption kvm_guest systemd fuzzer test vm-containers"
COMMON_DEPEND="
chromeos-base/minijail:=
chromeos-base/google-breakpad:=[cros_i686?,cros_arm64?]
>=chromeos-base/metrics-0.0.1-r3152:=
dev-libs/protobuf:=
dev-libs/re2:=
kvm_guest? ( net-libs/grpc:= )
net-misc/curl:=
sys-libs/zlib:=
"
RDEPEND="${COMMON_DEPEND}
chromeos-base/chromeos-ca-certificates
direncryption? ( sys-apps/keyutils:= )
cros_ec? ( chromeos-base/ec-utils )
"
DEPEND="
${COMMON_DEPEND}
chromeos-base/debugd-client:=
chromeos-base/session_manager-client:=
chromeos-base/shill-client:=
chromeos-base/system_api:=[fuzzer?]
chromeos-base/vboot_reference:=
chromeos-base/vm_protos:=
test? (
app-arch/gzip
)
"
src_configure() {
platform_src_configure
use arcpp && use_i686 && platform_src_configure_i686
use arcpp && use_arm64 && platform_src_configure_arm64
}
src_compile() {
platform_src_compile
use arcpp && use_i686 && platform_src_compile_i686 "core_collector"
use arcpp && use_arm64 && platform_src_compile_arm64 "core_collector"
}
pkg_setup() {
# Has to be done in pkg_setup() instead of pkg_preinst() since
# src_install() will need the crash user and group.
enewuser "crash"
enewgroup "crash"
# A group to manage file permissions for files that crash reporter
# components need to access.
enewgroup "crash-access"
# A group to grant access to the user's crash directory (in /home)
enewgroup "crash-user-access"
cros-workon_pkg_setup
}
src_install() {
into /
dosbin "${OUT}"/crash_reporter
if ! use vm-containers; then
dosbin "${OUT}"/crash_sender
fi
insinto /etc/dbus-1/system.d
doins dbus/org.chromium.AnomalyEventService.conf
local daemon_store="/etc/daemon-store/crash"
dodir "${daemon_store}"
fperms 3770 "${daemon_store}"
fowners crash:crash-user-access "${daemon_store}"
into /usr
use cros_embedded || dobin "${OUT}"/anomaly_detector
dosbin kernel_log_collector.sh
if use arcpp; then
dobin "${OUT}"/core_collector
use_i686 && newbin "$(platform_out_i686)"/core_collector "core_collector32"
use_arm64 && newbin "$(platform_out_arm64)"/core_collector "core_collector64"
fi
if use systemd; then
systemd_dounit init/crash-reporter.service
systemd_dounit init/crash-boot-collect.service
systemd_enable_service multi-user.target crash-reporter.service
systemd_enable_service multi-user.target crash-boot-collect.service
if ! use vm-containers; then
systemd_dounit init/crash-sender.service
systemd_enable_service multi-user.target crash-sender.service
systemd_dounit init/crash-sender.timer
systemd_enable_service timers.target crash-sender.timer
fi
if ! use cros_embedded; then
systemd_dounit init/anomaly-detector.service
systemd_enable_service multi-user.target anomaly-detector.service
fi
else
insinto /etc/init
doins init/crash-reporter.conf
doins init/crash-reporter-early-init.conf
doins init/crash-boot-collect.conf
if ! use vm-containers; then
doins init/crash-sender.conf
fi
use cros_embedded || doins init/anomaly-detector.conf
fi
insinto /etc
doins crash_reporter_logs.conf
udev_dorules 99-crash-reporter.rules
# Install metrics/OWNERS as the owners file for the fuzzers.
# The owners files need to have actual email addresses, not
# an include-link.
platform_fuzzer_install "${S}"/../metrics/OWNERS \
"${OUT}"/crash_sender_fuzzer \
--dict "${S}"/crash_sender_fuzzer.dict
platform_fuzzer_install "${S}"/../metrics/OWNERS \
"${OUT}"/chrome_collector_fuzzer \
--dict "${S}"/chrome_collector_fuzzer.dict
platform_fuzzer_install "${S}"/../metrics/OWNERS \
"${OUT}"/anomaly_detector_fuzzer \
--dict "${S}"/anomaly_detector_fuzzer.dict
# Install crash_serializer into /usr/local/sbin, which is only present
# on test images. See:
# https://chromium.googlesource.com/chromiumos/platform2/+/refs/heads/master/dev-install/README.md#Environments
into /usr/local
dosbin "${OUT}"/crash_serializer
}
platform_pkg_test() {
local gtest_filter_user_tests="-*.RunAsRoot*:"
local gtest_filter_root_tests="*.RunAsRoot*-"
platform_test "run" "${OUT}/crash_reporter_test" "0" \
"${gtest_filter_user_tests}"
platform_test "run" "${OUT}/crash_reporter_test" "1" \
"${gtest_filter_root_tests}"
platform_test "run" "${OUT}/anomaly_detector_test"
platform_test "run" "${OUT}/anomaly_detector_text_file_reader_test"
platform_test "run" "${OUT}/anomaly_detector_log_reader_test"
}