# Copyright 2017 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.

EAPI="5"

inherit systemd user

DESCRIPTION="Init scripts for Lakitu"
HOMEPAGE=""
SRC_URI=""

LICENSE="BSD-Google"
SLOT="0"
KEYWORDS="*"
IUSE="update_engine crash_reporting"

# vboot_reference for crossystem
RDEPEND="
	chromeos-base/chromeos-installer
	chromeos-base/vboot_reference
	sys-apps/rootdev
	sys-apps/systemd
	sys-apps/system-sysdaemons
"

S="${WORKDIR}"

src_install() {
	# We want /sbin, not /usr/sbin, etc.
	into /

	dosbin "${FILESDIR}"/chromeos_shutdown
	systemd_dounit "${FILESDIR}"/chromeos-shutdown.service
	systemd_enable_service shutdown.target chromeos-shutdown.service

	systemd_dounit "${FILESDIR}"/home.mount
	systemd_enable_service local-fs.target home.mount
	systemd_dounit "${FILESDIR}"/var.mount
	systemd_enable_service local-fs.target var.mount
	systemd_dounit "${FILESDIR}"/var-lib-google.mount
	systemd_enable_service local-fs.target var-lib-google.mount
	systemd_dounit "${FILESDIR}"/var-lib-google-remount.service
	systemd_dounit "${FILESDIR}"/mnt-stateful_partition-make-private.service
	systemd_dounit "${FILESDIR}"/dev-shm-remount.service
	systemd_enable_service local-fs.target dev-shm-remount.service
	systemd_dounit "${FILESDIR}"/check-secure-boot.service
	systemd_enable_service multi-user.target check-secure-boot.service
	systemd_dounit "${FILESDIR}"/prep-logs-dev@.service

	systemd_newtmpfilesd "${FILESDIR}"/chromeos-init.tmpfiles chromeos-init.conf

	insinto "$(systemd_get_unitdir)/sys-kernel-debug.mount.d"
	newins "${FILESDIR}"/sys-kernel-debug-lakitu.conf lakitu.conf

	insinto "$(systemd_get_systemunitdir)/sys-fs-fuse-connections.mount.d"
	newins "${FILESDIR}"/sys-fs-fuse-connections-lakitu.conf lakitu.conf

	insinto "$(systemd_get_unitdir)/tmp.mount.d"
	newins "${FILESDIR}"/tmp-lakitu.conf lakitu.conf

	exeinto "$(systemd_get_unitdir)-generators"
	doexe "${FILESDIR}"/chromeos-mount-generator

	if use update_engine; then
		insinto "$(systemd_get_unitdir)/update-engine.service.d"
		newins "${FILESDIR}"/update-engine-secure-boot.conf secure-boot.conf
	fi

	if use crash_reporting; then
		insinto "$(systemd_get_unitdir)/crash-sender.service.d"
		newins "${FILESDIR}"/crash-sender-send-immediately.conf send-immediately.conf
	fi

	exeinto "/usr/share/cloud"
	doexe "${FILESDIR}"/stateful-dev-sym-sorted
	doexe "${FILESDIR}"/is-secure-boot
	doexe "${FILESDIR}"/prep-logs-dev
}

pkg_preinst() {
	# Add the syslog user
	# TODO: this should not be necessary. Remove.
	enewuser syslog
	enewgroup syslog

	# Create debugfs-access user and group, which is needed by the
	# chromeos_startup script to mount /sys/kernel/debug.  This is needed
	# by bootstat and ureadahead.
	enewuser "debugfs-access"
	enewgroup "debugfs-access"
}
