# Copyright 1999-2023 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI="8" PYTHON_COMPAT=( python3_{10,11} ) inherit readme.gentoo-r1 distutils-r1 systemd MY_PN="${PN/-bin/}" DESCRIPTION="Home automation platform" HOMEPAGE="https://home-assistant.io" SRC_URI="" # pip installs HA version $PV from PyPI LICENSE="Apache-2.0" SLOT="0" KEYWORDS="~amd64" IUSE="maint mysql" PY_HA="3.8" DEPEND=" ${PYTHON_DEPS} !app-misc/homeassistant dev-lang/python:${PY_HA} dev-python/pip[${PYTHON_USEDEP}] dev-python/virtualenv[${PYTHON_USEDEP}] mysql? ( dev-python/mysqlclient ) " RDEPEND=" ${DEPEND} app-admin/logrotate maint? ( app-crypt/certbot app-crypt/ssl-cert-check net-misc/dropbox-uploader virtual/logger ) " INSTALL_DIR="/opt/${MY_PN}" DISABLE_AUTOFORMATTING=1 DOC_CONTENTS=" The HA interface listens on port 8123 - this _will_ take a minute or two to appear hass configuration is in: /etc/${MY_PN} For openrc daemon command line arguments are configured in: /etc/conf.d/${MY_PN} logging is to: /var/log/${MY_PN}/{server,errors,stdout}.log For HA logging configuration see: https://www.home-assistant.io/components/logger/ The sqlite db is by default in: /etc/${MY_PN} To move it after ${MY_PN} has run once and while ${MY_PN} is stopped: - add /etc/${MY_PN}/recorder.yaml to /etc/${MY_PN}/configuration.yaml - mv /etc/${MY_PN}/home-assistant_v2.db /var/db/${MY_PN} support thread at: https://community.home-assistant.io/t/gentoo-homeassistant-0-59-2-ebuild/35577 The script /usr/bin/update-homeassistant can be used to update homeassistant-bin (it keeps a backup of the previous virtualenv under /opt). The script is for openrc only at the moment. " S="${WORKDIR}" pkg_setup() { enewgroup "${MY_PN}" enewuser "${MY_PN}" -1 -1 "$INSTALL_DIR" "${MY_PN}" elog "This ebuild requires network access for 'pip install $MY_PN'" elog "If the install fails due to name lookup retrying out, then try" elog "disabling the portage network-sandbox ; e.g. in /etc/portage/make.conf:" elog "" elog "FEATURES=\"-network-sandbox\"" elog "" elog "The update-homeassistant script temporally disables the network-sandbox (and can" elog "also be used to do an initial install of ${PN})." } src_compile() { true } src_install() { dobin "${FILESDIR}/update-homeassistant" keepdir "$INSTALL_DIR" keepdir "/etc/${MY_PN}" insinto "/etc/${MY_PN}" doins "${FILESDIR}/recorder.yaml" fowners -R "${MY_PN}:${MY_PN}" "/etc/${MY_PN}" "python${PY_HA}" -m venv "${D}/$INSTALL_DIR" # for no output from pip add: --quiet # note the venv has a python3, but no python3.x VIRTUAL_ENV="$INSTALL_DIR" "${D}/$INSTALL_DIR/bin/python3" -m pip --no-cache-dir install "${MY_PN}==${PV}" || die sed -i "1c#!$INSTALL_DIR/bin/python3" "${D}/$INSTALL_DIR/bin/hass" # see: https://github.com/home-assistant/home-assistant/issues/28198#issuecomment-546300192 VIRTUAL_ENV="$INSTALL_DIR" "${D}/$INSTALL_DIR/bin/python3" -m pip --no-cache-dir install "home-assistant-frontend" || die if use mysql ; then VIRTUAL_ENV="$INSTALL_DIR" "${D}/$INSTALL_DIR/bin/python3" -m pip --no-cache-dir install "mysqlclient" || die fi # this has to come after all of the package installs fowners -R "${MY_PN}:${MY_PN}" "$INSTALL_DIR" newconfd "${FILESDIR}/${MY_PN}.conf.d" "${MY_PN}" newinitd "${FILESDIR}/${MY_PN}.init.d" "${MY_PN}" insinto /etc/logrotate.d newins "${FILESDIR}/${MY_PN}.logrotate" "${MY_PN}" keepdir "/var/log/${MY_PN}/old" fowners -R "${MY_PN}:${MY_PN}" "/var/log/${MY_PN}" keepdir "/var/db/${MY_PN}" fowners -R "${MY_PN}:${MY_PN}" "/var/db/${MY_PN}" systemd_dounit "${FILESDIR}"/${MY_PN}.service readme.gentoo_create_doc } pkg_postinst() { elog "homeassistant requires python 3.8 (or later)" elog "" elog "This ebuild installs homeassistant into a virtualenv built for:" elog "" elog " python ${PY_HA} (the current python 3.x in gentoo PYTHON_TARGETS)" elog "" elog "If you have previously run homeassistant with an older version of " elog "python, then it is recommended that you do a clean install on moving to" elog "python ${PY_HA}." readme.gentoo_print_elog } pkg_config() { "${INSTALL_DIR}/bin/hass" --script ensure_config }