From 7190b587b03d681f7938542452dd5fe757417b73 Mon Sep 17 00:00:00 2001 From: ewilly Date: Sat, 20 Nov 2021 19:05:14 +0100 Subject: [PATCH 01/37] Update & Refractor --- README.md | 65 +++++++----------- README_fr.md | 52 ++++++++++++++ check_process | 16 ++--- .../configuration.yaml | 10 ++- conf/sudoers | 8 +-- conf/systemd.service | 38 +++++++++- doc/.gitkeep | 0 doc/DISCLAIMER.md | 7 ++ doc/screenshots/.gitkeep | 0 doc/screenshots/screenshot1 | Bin 0 -> 231797 bytes manifest.json | 25 +++---- scripts/_common.sh | 42 ++++++----- scripts/backup | 4 +- scripts/install | 40 ++++++----- scripts/remove | 62 ++++++++++------- scripts/restore | 48 +++++++------ scripts/upgrade | 44 ++++++------ 17 files changed, 288 insertions(+), 173 deletions(-) create mode 100644 README_fr.md create mode 100644 doc/.gitkeep create mode 100644 doc/DISCLAIMER.md create mode 100644 doc/screenshots/.gitkeep create mode 100644 doc/screenshots/screenshot1 diff --git a/README.md b/README.md index 1e23ae2..f7bc58e 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,8 @@ + + # Home Assistant for YunoHost [![Integration level](https://dash.yunohost.org/integration/homeassistant.svg)](https://dash.yunohost.org/appci/app/homeassistant) ![](https://ci-apps.yunohost.org/ci/badges/homeassistant.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/homeassistant.maintain.svg) @@ -5,59 +10,37 @@ *[Lire ce readme en français.](./README_fr.md)* -> *This package allows you to install Home Assistant quickly and simply on a YunoHost server. +> *This package allows you to install Home Assistant quickly and simply on a YunoHost server. If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/install) to learn how to install it.* ## Overview -Home Assistant is free, open-source home automation software designed to be the central control system of a smart home or smart home. Written in Python, its main focus is local control and privacy. -**Shipped version:** 0.117.6 +Home automation platform + +**Shipped version:** 2021.11.4~ynh1 + +**Demo:** https://demo.home-assistant.io ## Screenshots -![](https://camo.githubusercontent.com/24b8190f22f6e4277778a4f30a61fce1dd5e95169e6ce149408bbc4a0b9eb0dc/68747470733a2f2f7261772e6769746875622e636f6d2f686f6d652d617373697374616e742f686f6d652d617373697374616e742f6d61737465722f646f63732f73637265656e73686f74732e706e67) +![](./doc/screenshots/screenshot1) -## Demo +## Disclaimers / important information -* [Official demo](https://demo.home-assistant.io/) +* Known limitations: + * Are LDAP and HTTP auth supported? LDAP=Yes | HTTP auth=No + * Can the app be used by multiple users? Yes -## Configuration -How to configure this app: From an admin panel +* Additional informations: + * As the pyhton version shipped in Debian stable is not always supported, a recent version could be built during the installation process. It may take a while to achive that (15 to 60 minutes) -## Documentation +## Documentation and resources - * Official documentation: https://www.home-assistant.io/docs/ - * YunoHost documentation: If specific documentation is needed, feel free to contribute. - -## YunoHost specific features - -#### Multi-user support - -* Are LDAP and HTTP auth supported? LDAP=Yes | HTTP auth=No -* Can the app be used by multiple users? Yes - -#### Supported architectures - -* x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/homeassistant%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/homeassistant/) -* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/homeassistant%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/homeassistant/) - -## Limitations - -* Any known limitations. - -## Additional information - -* As the pyhton version shipped in Debian stable is not supported, a recent version will be built during the installation process. it may take a while to achive that (15 to 60 minutes) - -## Links - - * Report a bug: https://github.com/YunoHost-Apps/homeassistant_ynh/issues - * App website: https://www.home-assistant.io/ - * Upstream app repository: https://github.com/home-assistant/home-assistant - * YunoHost website: https://yunohost.org/ - ---- +* Official app website: https://www.home-assistant.io +* Official admin documentation: https://www.home-assistant.io/docs/ +* YunoHost documentation for this app: https://yunohost.org/app_homeassistant +* Report a bug: https://github.com/YunoHost-Apps/homeassistant_ynh/issues ## Developer info @@ -69,3 +52,5 @@ sudo yunohost app install https://github.com/YunoHost-Apps/homeassistant_ynh/tre or sudo yunohost app upgrade homeassistant -u https://github.com/YunoHost-Apps/homeassistant_ynh/tree/testing --debug ``` + +**More info regarding app packaging:** https://yunohost.org/packaging_apps \ No newline at end of file diff --git a/README_fr.md b/README_fr.md new file mode 100644 index 0000000..c2ab526 --- /dev/null +++ b/README_fr.md @@ -0,0 +1,52 @@ +# Home Assistant pour YunoHost + +[![Niveau d'intégration](https://dash.yunohost.org/integration/homeassistant.svg)](https://dash.yunohost.org/appci/app/homeassistant) ![](https://ci-apps.yunohost.org/ci/badges/homeassistant.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/homeassistant.maintain.svg) +[![Installer Home Assistant avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=homeassistant) + +*[Read this readme in english.](./README.md)* +*[Lire ce readme en français.](./README_fr.md)* + +> *Ce package vous permet d'installer Home Assistant rapidement et simplement sur un serveur YunoHost. +Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour savoir comment l'installer et en profiter.* + +## Vue d'ensemble + +Plateforme domotique + +**Version incluse :** 2021.11.4~ynh1 + +**Démo :** https://demo.home-assistant.io + +## Captures d'écran + +![](./doc/screenshots/screenshot1) + +## Avertissements / informations importantes + +* Known limitations: + * Are LDAP and HTTP auth supported? LDAP=Yes | HTTP auth=No + * Can the app be used by multiple users? Yes + + +* Additional informations: + * As the pyhton version shipped in Debian stable is not always supported, a recent version could be built during the installation process. It may take a while to achive that (15 to 60 minutes) + +## Documentations et ressources + +* Site officiel de l'app : https://www.home-assistant.io +* Documentation officielle de l'admin : https://www.home-assistant.io/docs/ +* Documentation YunoHost pour cette app : https://yunohost.org/app_homeassistant +* Signaler un bug : https://github.com/YunoHost-Apps/homeassistant_ynh/issues + +## Informations pour les développeurs + +Merci de faire vos pull request sur la [branche testing](https://github.com/YunoHost-Apps/homeassistant_ynh/tree/testing). + +Pour essayer la branche testing, procédez comme suit. +``` +sudo yunohost app install https://github.com/YunoHost-Apps/homeassistant_ynh/tree/testing --debug +ou +sudo yunohost app upgrade homeassistant -u https://github.com/YunoHost-Apps/homeassistant_ynh/tree/testing --debug +``` + +**Plus d'infos sur le packaging d'applications :** https://yunohost.org/packaging_apps \ No newline at end of file diff --git a/check_process b/check_process index 5e5eb9c..52d2af2 100644 --- a/check_process +++ b/check_process @@ -1,23 +1,23 @@ ;; Test complet ; Manifest - domain="domain.tld" (DOMAIN) - is_public=1 (PUBLIC|public=1|private=0) - ; Actions - is_public=1|0 + domain="domain.tld" + is_public=1 ; Checks - pkg_linter=1 + pkg_linter=1 setup_sub_dir=0 setup_root=1 setup_nourl=0 setup_private=1 setup_public=1 upgrade=1 - upgrade=1 from_commit=b07405d0f885f28764031dd80d27af84a90007b1 + upgrade=1 from_commit=4eaade48e9bdccf56a53f09a269b2e5ba7621296 backup_restore=1 multi_instance=0 port_already_use=1 change_url=1 - actions=0 - config_panel=0 ;;; Options Notification=all +;;; Upgrade options + ; commit=4eaade48e9bdccf56a53f09a269b2e5ba7621296 + name= Update to 2021.6.5 on 21/06/2021 + manifest_arg=domain=DOMAIN&is_public=1& diff --git a/conf/homeassistant_conf_files/configuration.yaml b/conf/homeassistant_conf_files/configuration.yaml index 924eb99..1815781 100644 --- a/conf/homeassistant_conf_files/configuration.yaml +++ b/conf/homeassistant_conf_files/configuration.yaml @@ -1,7 +1,7 @@ homeassistant: auth_providers: - type: command_line - command: /home/homeassistant/.homeassistant/bin/ynh_ldap-auth.sh + command: __PATH__/bin/ynh_ldap-auth.sh meta: true http: @@ -13,3 +13,11 @@ http: # Apply default set of integrations default_config: + +# Switches +switch: + - platform: command_line + switches: + upgrade_homeassistant: + command_on: "nohup bash -c __PATH__/bin/upgrade_homeassistant.sh $1 > /dev/null 2>&1 &" + friendly_name: Upgrade Home Assistant diff --git a/conf/sudoers b/conf/sudoers index 71e014d..4f92b76 100644 --- a/conf/sudoers +++ b/conf/sudoers @@ -1,5 +1,5 @@ # Grant sudo permissions to the user to manage his own systemd service -homeassistant ALL=(ALL) NOPASSWD: /bin/systemctl stop homeassistant@homeassistant.service -homeassistant ALL=(ALL) NOPASSWD: /bin/systemctl start homeassistant@homeassistant.service -homeassistant ALL=(ALL) NOPASSWD: /bin/systemctl restart homeassistant@homeassistant.service -homeassistant ALL=(ALL) NOPASSWD: /bin/systemctl status homeassistant@homeassistant.service +__NAME__ ALL=(ALL) NOPASSWD: /bin/systemctl stop __NAME__@__NAME__.service +__NAME__ ALL=(ALL) NOPASSWD: /bin/systemctl start __NAME__@__NAME__.service +__NAME__ ALL=(ALL) NOPASSWD: /bin/systemctl restart __NAME__@__NAME__.service +__NAME__ ALL=(ALL) NOPASSWD: /bin/systemctl status __NAME__@__NAME__.service diff --git a/conf/systemd.service b/conf/systemd.service index 8f9fe92..10ab4d7 100644 --- a/conf/systemd.service +++ b/conf/systemd.service @@ -4,9 +4,41 @@ After=network-online.target [Service] Type=simple -User=homeassistant -WorkingDirectory=/home/homeassistant/.homeassistant -ExecStart=/opt/yunohost/homeassistant/bin/hass -c "/home/homeassistant/.homeassistant" --verbose +User=__APP__ +WorkingDirectory=__PATH__ +ExecStart=/opt/yunohost/__APP__/bin/hass --config "__PATH__" --verbose +StandardOutput=append:/var/log/__APP__.log +StandardError=inherit + +# Sandboxing options to harden security +# Depending on specificities of your service/app, you may need to tweak these +# .. but this should be a good baseline +# Details for these options: https://www.freedesktop.org/software/systemd/man/systemd.exec.html +NoNewPrivileges=yes +PrivateTmp=yes +#CANT BE ACTIVATED FOR __APP__ #PrivateDevices=yes +#CANT BE ACTIVATED FOR __APP__ #RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 +RestrictNamespaces=yes +RestrictRealtime=yes +DevicePolicy=closed +ProtectSystem=full +ProtectControlGroups=yes +ProtectKernelModules=yes +ProtectKernelTunables=yes +LockPersonality=yes +SystemCallFilter=~@clock @debug @module @mount @obsolete @reboot @setuid @swap + +# Denying access to capabilities that should not be relevant for webapps +# Doc: https://man7.org/linux/man-pages/man7/capabilities.7.html +CapabilityBoundingSet=~CAP_RAWIO CAP_MKNOD +CapabilityBoundingSet=~CAP_AUDIT_CONTROL CAP_AUDIT_READ CAP_AUDIT_WRITE +CapabilityBoundingSet=~CAP_SYS_BOOT CAP_SYS_TIME CAP_SYS_MODULE CAP_SYS_PACCT +CapabilityBoundingSet=~CAP_LEASE CAP_LINUX_IMMUTABLE CAP_IPC_LOCK +CapabilityBoundingSet=~CAP_BLOCK_SUSPEND CAP_WAKE_ALARM +CapabilityBoundingSet=~CAP_SYS_TTY_CONFIG +CapabilityBoundingSet=~CAP_MAC_ADMIN CAP_MAC_OVERRIDE +CapabilityBoundingSet=~CAP_NET_ADMIN CAP_NET_BROADCAST CAP_NET_RAW +CapabilityBoundingSet=~CAP_SYS_ADMIN CAP_SYS_PTRACE CAP_SYSLOG [Install] WantedBy=multi-user.target diff --git a/doc/.gitkeep b/doc/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/doc/DISCLAIMER.md b/doc/DISCLAIMER.md new file mode 100644 index 0000000..7ddb739 --- /dev/null +++ b/doc/DISCLAIMER.md @@ -0,0 +1,7 @@ +* Known limitations: + * Are LDAP and HTTP auth supported? LDAP=Yes | HTTP auth=No + * Can the app be used by multiple users? Yes + + +* Additional informations: + * As the pyhton version shipped in Debian stable is not always supported, a recent version could be built during the installation process. It may take a while to achive that (15 to 60 minutes) diff --git a/doc/screenshots/.gitkeep b/doc/screenshots/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/doc/screenshots/screenshot1 b/doc/screenshots/screenshot1 new file mode 100644 index 0000000000000000000000000000000000000000..1305cddbb9dfe188673af3ff58fed87a42a035d0 GIT binary patch literal 231797 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 G4E!JZTsQjw literal 0 HcmV?d00001 diff --git a/manifest.json b/manifest.json index 6602325..46c8221 100644 --- a/manifest.json +++ b/manifest.json @@ -6,15 +6,21 @@ "en": "Home automation platform", "fr": "Plateforme domotique" }, - "version": "2021.6.5~ynh1", + "version": "2021.11.4~ynh1", "url": "https://github.com/home-assistant/home-assistant", + "upstream": { + "license": "Apache-2.0", + "website": "https://www.home-assistant.io", + "demo": "https://demo.home-assistant.io", + "admindoc": "https://www.home-assistant.io/docs/" + }, "license": "Apache-2.0", "maintainer": { "name": "ewilly", "email": "ewilly@ewilly.fr" }, "requirements": { - "yunohost": ">= 4.0.0" + "yunohost": ">= 4.1.0" }, "multi_instance": false, "services": [ @@ -24,24 +30,11 @@ "install": [ { "name": "domain", - "type": "domain", - "ask": { - "en": "Choose a domain for Home Assistant", - "fr": "Choisissez un domaine pour Home Assistant" - }, - "help": { - "en": "Installation in a path is not possible", - "fr": "L'installation sous un chemin de domaine n'est pas possible" - }, - "example": "domain.org or homeassistant.domain.org" + "type": "domain" }, { "name": "is_public", "type": "boolean", - "ask": { - "en": "Should this application be public?", - "fr": "Est-ce que cette application doit être visible publiquement ?" - }, "help": { "en": "If not public, Smartphone app will not work", "fr": "Dans le cas contraire, l'application sur Smartphone ne fonctionnera pas" diff --git a/scripts/_common.sh b/scripts/_common.sh index 184e1a4..88e95c0 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -3,14 +3,14 @@ # # Release to install -VERSION=2021.6.5 +VERSION=2021.11.4 # Package dependencies PKG_DEPENDENCIES="python3 python3-dev python3-venv python3-pip libffi-dev libssl-dev libjpeg-dev zlib1g-dev autoconf build-essential libopenjp2-7 libtiff5" # Requirements (Major.Minor.Patch) # PY_VERSION=$(curl -s "https://www.python.org/ftp/python/" | grep ">3.8" | tail -n1 | cut -d '/' -f 2 | cut -d '>' -f 2) -PY_REQUIRED_VERSION=3.8.7 +PY_REQUIRED_VERSION=3.9.2 # Execute a command as another user # usage: exec_as USER COMMAND [ARG ...] @@ -25,6 +25,18 @@ exec_as() { fi } +# Check if directory/file already exists (path in argument) +myynh_check_path () { + [ -z "$1" ] && ynh_die "No argument supplied" + [ ! -e "$1" ] || ynh_die "$1 already exists" +} + +# Create directory only if not already exists (path in argument) +myynh_create_dir () { + [ -z "$1" ] && ynh_die "No argument supplied" + [ -d "$1" ] || mkdir -p "$1" +} + # Compare version in arguments myynh_version_compare () { # myynh_version_compare A B @@ -125,29 +137,23 @@ myynh_install_dependencies () { } # Install/Upgrade Homeassistant in virtual environement +# | arg: -p, --path= - the parent path of cache directory myynh_install_homeassistant () { + # Declare an array to define the options of this helper. + local legacy_args=u + local -A args_array=( [p]=path= ) + local path + # Manage arguments with getopts + ynh_handle_getopts_args "$@" + exec_as $app -H -s /bin/bash -c " \ echo 'create the virtual environment' \ && $MY_PYTHON -m venv "$final_path" \ && echo 'activate the virtual environment' \ && source "$final_path/bin/activate" \ - && echo 'install last version of pip' \ - && pip install --upgrade pip \ && echo 'install last version of wheel' \ - && pip install --upgrade wheel \ + && pip --cache-dir "$path/.cache" install --upgrade wheel \ && echo 'install Home Assistant' \ - && pip install --upgrade $app==$VERSION \ + && pip --cache-dir "$path/.cache" install --upgrade $app==$VERSION \ " } - -# Check if directory/file already exists (path in argument) -myynh_check_path () { - [ -z "$1" ] && ynh_die "No argument supplied" - [ ! -e "$1" ] || ynh_die "$1 already exists" -} - -# Create directory only if not already exists (path in argument) -myynh_create_dir () { - [ -z "$1" ] && ynh_die "No argument supplied" - [ -d "$1" ] || mkdir -p "$1" -} diff --git a/scripts/backup b/scripts/backup index b5a73b4..7e052b1 100644 --- a/scripts/backup +++ b/scripts/backup @@ -14,7 +14,7 @@ domain=$(ynh_app_setting_get --app="$app" --key=domain) # definie useful vars final_path="/opt/yunohost/$app" -home_path="/home/$app" +data_path="/home/yunohost.app/$app" ynh_print_info --message="Storing the python version in settings..." # store python version @@ -24,7 +24,7 @@ ynh_app_setting_set --app="$app" --key=python --value="$python" # backup source & conf files ynh_print_info --message="Declaring files to be backed up..." ynh_backup --src_path="$final_path" -ynh_backup --src_path="$home_path" +ynh_backup --src_path="$data_path" ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" ynh_backup --src_path="/etc/sudoers.d/$app" ynh_backup --src_path="/etc/systemd/system/$app@$app.service" diff --git a/scripts/install b/scripts/install index a369a79..4c4283a 100644 --- a/scripts/install +++ b/scripts/install @@ -16,8 +16,7 @@ is_public=$YNH_APP_ARG_IS_PUBLIC # definie useful vars final_path="/opt/yunohost/$app" -home_path="/home/$app" -data_path="/home/$app/.$app" +data_path="/home/yunohost.app/$app" path_url="/" # check domain/path availability @@ -38,39 +37,47 @@ ynh_exec_fully_quiet yunohost firewall allow TCP "$port" # create a dedicated system user ynh_script_progression --message="Creating dedicated user, rights and folders..." ynh_system_user_create --username="$app" -## grant sudo permissions to the user to manage his own systemd service + +# grant sudo permissions to the user to manage his own systemd service myynh_create_dir "/etc/sudoers.d" -cp "../conf/sudoers" "/etc/sudoers.d/$app" -## create a directory for the installation of Home Assistant +ynh_add_config --template="../conf/sudoers" --destination="/etc/sudoers.d/$app" + +# create a directory for the installation of Home Assistant myynh_create_dir "$final_path" chown $app: "$final_path" -## create a directory for the datas of Home Assistant -myynh_create_dir "$data_path" -chown -R $app: "$home_path" + +# create a directory for the datas of Home Assistant +myynh_create_dir "$data_path/.$app" +myynh_create_dir "$data_path/.cache" +chown -R $app: "$data_path" # build (if needed) & install Pyhton myynh_install_dependencies --python="$PY_REQUIRED_VERSION" # installation in a virtual environment ynh_script_progression --message="Installing Home Assistant in a virtual environment..." -myynh_install_homeassistant +ynh_exec_fully_quiet myynh_install_homeassistant --path="$data_path" # set default configuration files and move all homeassistant_conf_files ynh_script_progression --message="Configuring the installation..." ynh_replace_string --match_string="__PORT__" --replace_string="$port" --target_file="../conf/homeassistant_conf_files/configuration.yaml" -cp -r "../conf/homeassistant_conf_files/." "$data_path/" -chown -R $app: "$data_path" -chmod -R +x "$data_path/bin/" +ynh_replace_string --match_string="__PATH__" --replace_string="$data_path/.$app" --target_file="../conf/homeassistant_conf_files/configuration.yaml" +cp -r "../conf/homeassistant_conf_files/." "$data_path/.$app/" +chown -R $app: "$data_path/.$app" +chmod -R +x "$data_path/.$app/bin/" # setup up systemd service ynh_script_progression --message="Adding the dedicated service..." +ynh_replace_string --match_string="__PATH__" --replace_string="$data_path/.$app" --target_file="../conf/systemd.service" ynh_add_systemd_config --service="$app@$app" + ## add service in admin panel -yunohost service add "$app@$app" --log "$data_path/home-assistant.log" --description "Home Assistant server" --needs_exposed_ports $port +yunohost service add "$app@$app" --log "$data_path/.$app/home-assistant.log" --description "Home Assistant server" --needs_exposed_ports $port # start systemd service ynh_script_progression --message="Starting the Home Assistant server..." -ynh_systemd_action --service_name="$app@$app" --action=start --line_match="Home Assistant initialized" --log_path="systemd" --timeout=3600 +ynh_systemd_action --service_name="$app@$app" --action=start --line_match="Home Assistant initialized" --log_path="/var/log/$app.log" --timeout=3600 + # remove --verbose from service ynh_replace_string --match_string=" --verbose" --replace_string="" --target_file="/etc/systemd/system/$app@$app.service" ynh_store_file_checksum --file="/etc/systemd/system/$app@$app.service" @@ -78,12 +85,13 @@ systemctl daemon-reload ynh_systemd_action --service_name="$app@$app" --action=restart # enable logrotate -ynh_use_logrotate --logfile="$data_path/home-assistant.log" +ynh_use_logrotate --logfile="$data_path/.$app/home-assistant.log" # create a dedicated nginx config ynh_script_progression --message="Configuring nginx web server..." ynh_add_nginx_config -## reload nginx + +# reload nginx ynh_systemd_action --service_name=nginx --action=reload # unprotect app access if public (needed for Android app to work) diff --git a/scripts/remove b/scripts/remove index 817e6b4..bbd487b 100644 --- a/scripts/remove +++ b/scripts/remove @@ -1,6 +1,6 @@ #!/bin/bash # to test the functionnality : -# yunohost app remove homeassistant +# yunohost app remove homeassistant --purge source _common.sh source /usr/share/yunohost/helpers @@ -12,38 +12,52 @@ port=$(ynh_app_setting_get --app=$app --key=port) # definie useful vars final_path="/opt/yunohost/$app" -home_path="/home/$app" - -# remove metapackage and its dependencies -ynh_remove_app_dependencies - -# remove the app directory securely -ynh_secure_remove --file="$final_path" - -# remove the dedicated nginx config -ynh_remove_nginx_config - -# remove a directory securely -ynh_secure_remove --file="$home_path" +data_path="/home/yunohost.app/$app" # Remove a service from the admin panel, added by `yunohost service add` -if yunohost service status "$app@$app" >/dev/null 2>&1 ; then - yunohost service remove "$app@$app" +if ynh_exec_warn_less yunohost service status "$app@$app" >/dev/null ; then + ynh_script_progression --message="Removing $app service integration..." + yunohost service remove "$app@$app" fi # remove systemd service -ynh_systemd_action --service_name="$app@$app" --action=stop -ynh_systemd_action --service_name="$app@$app" --action=disable -ynh_secure_remove --file="/etc/systemd/system/$app@$app.service" +ynh_script_progression --message="Stopping and removing the systemd service..." +ynh_remove_systemd_config --service="$app@$app" -# remove logrotate config +# remove the app-specific logrotate config +ynh_script_progression --message="Removing logrotate configuration..." ynh_remove_logrotate -# close port -ynh_exec_fully_quiet yunohost firewall disallow TCP $port +# remove metapackage and its dependencies +ynh_script_progression --message="Removing dependencies..." +ynh_remove_app_dependencies -# delete a system user -ynh_system_user_delete --username="$app" +# remove the app directory securely +ynh_script_progression --message="Removing app main directory..." +ynh_secure_remove --file="$final_path" + +# remove a directory securely if --purge option is used +if [ "${YNH_APP_PURGE:-0}" -eq 1 ] ; then + ynh_script_progression --message="Removing app data directory..." + ynh_secure_remove --file="$data_path" +fi + +# remove the dedicated nginx config +ynh_script_progression --message="Removing NGINX web server configuration..." +ynh_remove_nginx_config + +# close port +if yunohost firewall list | grep -q "\- $port$" ; then + ynh_script_progression --message="Closing port $port..." + ynh_exec_warn_less yunohost firewall disallow TCP $port +fi # remove sudoers file +ynh_script_progression --message="Removing various files..." ynh_secure_remove --file="/etc/sudoers.d/$app" + +# delete a system user +ynh_script_progression --message="Removing the dedicated system user..." +ynh_system_user_delete --username="$app" + +ynh_script_progression --message="Removal of $app completed" --last diff --git a/scripts/restore b/scripts/restore index 42666e2..9805564 100644 --- a/scripts/restore +++ b/scripts/restore @@ -1,8 +1,9 @@ #!/bin/bash # to test the functionnality : # yunohost backup create -n "homeassistant-test" --apps homeassistant -# yunohost app remove homeassistant +# yunohost app remove homeassistant --purge # yunohost backup restore "homeassistant-test" +# yunohost backup delete "homeassistant-test" source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers @@ -21,58 +22,63 @@ python=$(ynh_app_setting_get --app="$app" --key=python) # definie useful vars final_path="/opt/yunohost/$app" -home_path="/home/$app" -data_path="/home/$app/.$app" +data_path="/home/yunohost.app/$app" path_url="/" -ynh_script_progression --message="Validating recovery parameters..." # check domain/path availability +ynh_script_progression --message="Validating recovery parameters..." [ ! -d "$final_path" ] || ynh_die --message="This path already contains a folder" -ynh_webpath_available --domain="$domain" --path_url="$path_url" || ynh_die "$domain/$path_url is not available, please use an other domain." -ynh_script_progression --message="Restoring the port and opening it..." # restore port +ynh_script_progression --message="Restoring the port and opening it..." ynh_exec_warn_less yunohost firewall allow TCP $port -ynh_script_progression --message="Restoring dedicated user, rights and folders..." # restore dedicated system user +ynh_script_progression --message="Restoring dedicated user and rights folders..." ynh_system_user_create --username="$app" ynh_restore_file --origin_path="/etc/sudoers.d/$app" + # restore source +ynh_script_progression --message="Restoring the app..." ynh_restore_file --origin_path="$final_path" chown -R $app: "$final_path" -ynh_script_progression --message="Restoring the data..." # restore data -ynh_restore_file --origin_path="$home_path" -chown -R $app: "$home_path" -chmod -R +x "$home_path/.homeassistant/bin" +ynh_script_progression --message="Restoring the data..." +ynh_restore_file --origin_path="$data_path" +chown -R $app: "$data_path" +chmod -R +x "$data_path/.$app/bin" -ynh_script_progression --message="Restoring the packages dependencies..." # add required packages +ynh_script_progression --message="Restoring the packages dependencies..." myynh_install_dependencies --python="$python" +# restore the systemd service ynh_script_progression --message="Restoring the dedicated service..." ynh_restore_file --origin_path="/etc/systemd/system/$app@$app.service" -# add service in admin panel -yunohost service add "$app@$app" --log "$data_path/home-assistant.log" --description "Home Assistant server" --needs_exposed_ports $port +# add service in admin panel +yunohost service add "$app@$app" --log "$data_path/.$app/home-assistant.log" --description "Home Assistant server" --needs_exposed_ports $port + +# restart the app ynh_script_progression --message="Starting the Home Assistant server..." -# add --verbose to service sed --in-place "/ExecStart/s/$/ --verbose/" "/etc/systemd/system/$app@$app.service" -# start -ynh_systemd_action --service_name="$app@$app" --action=start --line_match="Home Assistant initialized" --log_path="systemd" --timeout=3600 +ynh_systemd_action --service_name="$app@$app" --action=start --line_match="Home Assistant initialized" --log_path="/var/log/$app.log" --timeout=900 + # remove --verbose from service and restart ynh_replace_string --match_string=" --verbose" --replace_string="" --target_file="/etc/systemd/system/$app@$app.service" +ynh_store_file_checksum --file="/etc/systemd/system/$app@$app.service" systemctl daemon-reload -ynh_systemd_action --service_name="$app@$app" --action=restart --line_match="Started Home Assistant" --log_path="systemd" --timeout=3600 +ynh_systemd_action --service_name="$app@$app" --action=restart -ynh_script_progression --message="Restoring nginx web server..." -ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" # restore logrotate +ynh_script_progression --message="Restoring logrotate..." ynh_restore_file --origin_path="/etc/logrotate.d/$app" -# reload nginx +# restore nginx +ynh_script_progression --message="Restoring nginx web server..." +ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" ynh_systemd_action --service_name=nginx --action=reload +ynh_exec_fully_quiet sleep 60s #Only necessary for CI test otherwise curl failed to nginx page ynh_script_progression --message="Recovery of $app completed" --last diff --git a/scripts/upgrade b/scripts/upgrade index 97eee49..2306394 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -14,17 +14,9 @@ app=$YNH_APP_INSTANCE_NAME domain=$(ynh_app_setting_get --app="$app" --key=domain) port=$(ynh_app_setting_get --app="$app" --key=port) -# Cleaning legacy permissions -ynh_script_progression --message="Cleaning legacy permissions..." -is_public=$(ynh_app_setting_get --app="$app" --key=is_public) -if [ -n "$is_public" ]; then - ynh_app_setting_delete --app="$app" --key=is_public - ynh_app_setting_delete --app="$app" --key=unprotected_uris -fi - # definie useful vars final_path="/opt/yunohost/$app" -data_path="/home/$app/.$app" +data_path="/home/yunohost.app/$app" # use prior backup and restore on error only if backup feature exists on installed instance ynh_script_progression --message="Creating backup in case of failure..." @@ -36,37 +28,48 @@ if [ -f "/etc/yunohost/apps/$app/scripts/backup" ] ; then } fi +# move $data_path to new directory +ynh_script_progression --message="Moving existing datas to new location..." +if [ ! -d "$data_path" ] ; then + mv "/""home""/$app" "$data_path" + ynh_replace_string --match_string="/home/homeassistant/.homeassistant" --replace_string="$data_path/.$app" --target_file="$data_path/.$app/configuration.yaml" + chown -R $app: "$data_path" +fi + # grant sudo permissions to the user to manage his own systemd service ynh_script_progression --message="Creating dedicated user, rights and folders..." -myynh_create_dir "/etc/sudoers.d" -cp "../conf/sudoers" "/etc/sudoers.d/$app" +ynh_add_config --template="../conf/sudoers" --destination="/etc/sudoers.d/$app" # build (if needed) & install Pyhton myynh_install_dependencies --python="$PY_REQUIRED_VERSION" # stop systemd service ynh_script_progression --message="Stoping service..." -ynh_systemd_action --service_name="$app@$app" --action=stop +ynh_systemd_action --service_name="$app@$app" --action=stop --line_match="Stopped Home Assistant" --log_path="/var/log/$app.log" --timeout=300 # installation in a virtual environment ynh_script_progression --message="Installing Home Assistant in a virtual environment..." -myynh_install_homeassistant +ynh_exec_fully_quiet myynh_install_homeassistant --path="$data_path" # update script in bin ynh_script_progression --message="Updating YunoHost script used by homeassitant..." -cp -r "../conf/homeassistant_conf_files/bin/." "$data_path/bin/" -chown -R $app: "$data_path/bin" -chmod -R +x "$data_path/bin/" +cp -r "../conf/homeassistant_conf_files/bin/." "$data_path/.$app/bin/" +chown -R $app: "$data_path/.$app/bin" +chmod -R +x "$data_path/.$app/bin/" # setup up systemd service ynh_script_progression --message="Adding the dedicated service..." +ynh_replace_string --match_string="__PATH__" --replace_string="$data_path/.$app" --target_file="../conf/systemd.service" ynh_add_systemd_config --service="$app@$app" -## add service in admin panel -yunohost service add "$app@$app" --log "$data_path/home-assistant.log" --description "Home Assistant server" --needs_exposed_ports $port + +# add service in admin panel +yunohost service add "$app@$app" --log "$data_path/.$app/home-assistant.log" --description "Home Assistant server" --needs_exposed_ports $port # start systemd service ynh_script_progression --message="Starting the Home Assistant server..." -ynh_systemd_action --service_name="$app@$app" --action=start --line_match="Home Assistant initialized" --log_path="systemd" --timeout=3600 +systemctl daemon-reload +ynh_systemd_action --service_name="$app@$app" --action=start --line_match="Home Assistant initialized" --log_path="/var/log/$app.log" --timeout=3600 + # remove --verbose from service ynh_replace_string --match_string=" --verbose" --replace_string="" --target_file="/etc/systemd/system/$app@$app.service" ynh_store_file_checksum --file="/etc/systemd/system/$app@$app.service" @@ -74,11 +77,12 @@ systemctl daemon-reload ynh_systemd_action --service_name="$app@$app" --action=restart # enable logrotate -ynh_use_logrotate --logfile="$data_path/home-assistant.log" --nonappend +ynh_use_logrotate --logfile="$data_path/.$app/home-assistant.log" --nonappend # create a dedicated nginx config ynh_script_progression --message="Configuring nginx web server..." ynh_add_nginx_config + # reload nginx ynh_systemd_action --service_name=nginx --action=reload From 3f1bc519bdcdb6399ba9e6a40783eea2bcfacaa3 Mon Sep 17 00:00:00 2001 From: ewilly Date: Sun, 21 Nov 2021 21:25:39 +0100 Subject: [PATCH 02/37] Update systemd service --- conf/systemd.service | 2 -- scripts/backup | 2 +- scripts/install | 12 ++++++------ scripts/remove | 6 +++--- scripts/restore | 15 +++++++-------- scripts/upgrade | 14 +++++++------- 6 files changed, 24 insertions(+), 27 deletions(-) diff --git a/conf/systemd.service b/conf/systemd.service index 10ab4d7..397f3f4 100644 --- a/conf/systemd.service +++ b/conf/systemd.service @@ -7,8 +7,6 @@ Type=simple User=__APP__ WorkingDirectory=__PATH__ ExecStart=/opt/yunohost/__APP__/bin/hass --config "__PATH__" --verbose -StandardOutput=append:/var/log/__APP__.log -StandardError=inherit # Sandboxing options to harden security # Depending on specificities of your service/app, you may need to tweak these diff --git a/scripts/backup b/scripts/backup index 7e052b1..b5c9663 100644 --- a/scripts/backup +++ b/scripts/backup @@ -27,7 +27,7 @@ ynh_backup --src_path="$final_path" ynh_backup --src_path="$data_path" ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" ynh_backup --src_path="/etc/sudoers.d/$app" -ynh_backup --src_path="/etc/systemd/system/$app@$app.service" +ynh_backup --src_path="/etc/systemd/system/$app.service" ynh_backup --src_path="/etc/logrotate.d/$app" ynh_print_info --message="Backup of $app completed" diff --git a/scripts/install b/scripts/install index 4c4283a..f5dcf38 100644 --- a/scripts/install +++ b/scripts/install @@ -69,20 +69,20 @@ chmod -R +x "$data_path/.$app/bin/" # setup up systemd service ynh_script_progression --message="Adding the dedicated service..." ynh_replace_string --match_string="__PATH__" --replace_string="$data_path/.$app" --target_file="../conf/systemd.service" -ynh_add_systemd_config --service="$app@$app" +ynh_add_systemd_config --service="$app" ## add service in admin panel -yunohost service add "$app@$app" --log "$data_path/.$app/home-assistant.log" --description "Home Assistant server" --needs_exposed_ports $port +yunohost service add "$app" --log "$data_path/.$app/home-assistant.log" --description "Home Assistant server" --needs_exposed_ports $port # start systemd service ynh_script_progression --message="Starting the Home Assistant server..." -ynh_systemd_action --service_name="$app@$app" --action=start --line_match="Home Assistant initialized" --log_path="/var/log/$app.log" --timeout=3600 +ynh_systemd_action --service_name="$app" --action=start --line_match="Home Assistant initialized" --log_path="systemd" --timeout=3600 # remove --verbose from service -ynh_replace_string --match_string=" --verbose" --replace_string="" --target_file="/etc/systemd/system/$app@$app.service" -ynh_store_file_checksum --file="/etc/systemd/system/$app@$app.service" +ynh_replace_string --match_string=" --verbose" --replace_string="" --target_file="/etc/systemd/system/$app.service" +ynh_store_file_checksum --file="/etc/systemd/system/$app.service" systemctl daemon-reload -ynh_systemd_action --service_name="$app@$app" --action=restart +ynh_systemd_action --service_name="$app" --action=restart # enable logrotate ynh_use_logrotate --logfile="$data_path/.$app/home-assistant.log" diff --git a/scripts/remove b/scripts/remove index bbd487b..64b99cd 100644 --- a/scripts/remove +++ b/scripts/remove @@ -15,14 +15,14 @@ final_path="/opt/yunohost/$app" data_path="/home/yunohost.app/$app" # Remove a service from the admin panel, added by `yunohost service add` -if ynh_exec_warn_less yunohost service status "$app@$app" >/dev/null ; then +if ynh_exec_warn_less yunohost service status "$app" >/dev/null ; then ynh_script_progression --message="Removing $app service integration..." - yunohost service remove "$app@$app" + yunohost service remove "$app" fi # remove systemd service ynh_script_progression --message="Stopping and removing the systemd service..." -ynh_remove_systemd_config --service="$app@$app" +ynh_remove_systemd_config --service="$app" # remove the app-specific logrotate config ynh_script_progression --message="Removing logrotate configuration..." diff --git a/scripts/restore b/scripts/restore index 9805564..e8d0743 100644 --- a/scripts/restore +++ b/scripts/restore @@ -55,21 +55,21 @@ myynh_install_dependencies --python="$python" # restore the systemd service ynh_script_progression --message="Restoring the dedicated service..." -ynh_restore_file --origin_path="/etc/systemd/system/$app@$app.service" +ynh_restore_file --origin_path="/etc/systemd/system/$app.service" # add service in admin panel -yunohost service add "$app@$app" --log "$data_path/.$app/home-assistant.log" --description "Home Assistant server" --needs_exposed_ports $port +yunohost service add "$app" --log "$data_path/.$app/home-assistant.log" --description "Home Assistant server" --needs_exposed_ports $port # restart the app ynh_script_progression --message="Starting the Home Assistant server..." -sed --in-place "/ExecStart/s/$/ --verbose/" "/etc/systemd/system/$app@$app.service" -ynh_systemd_action --service_name="$app@$app" --action=start --line_match="Home Assistant initialized" --log_path="/var/log/$app.log" --timeout=900 +sed --in-place "/ExecStart/s/$/ --verbose/" "/etc/systemd/system/$app.service" +ynh_systemd_action --service_name="$app" --action=start --line_match="Home Assistant initialized" --log_path="systemd" --timeout=900 # remove --verbose from service and restart -ynh_replace_string --match_string=" --verbose" --replace_string="" --target_file="/etc/systemd/system/$app@$app.service" -ynh_store_file_checksum --file="/etc/systemd/system/$app@$app.service" +ynh_replace_string --match_string=" --verbose" --replace_string="" --target_file="/etc/systemd/system/$app.service" +ynh_store_file_checksum --file="/etc/systemd/system/$app.service" systemctl daemon-reload -ynh_systemd_action --service_name="$app@$app" --action=restart +ynh_systemd_action --service_name="$app" --action=restart # restore logrotate ynh_script_progression --message="Restoring logrotate..." @@ -79,6 +79,5 @@ ynh_restore_file --origin_path="/etc/logrotate.d/$app" ynh_script_progression --message="Restoring nginx web server..." ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" ynh_systemd_action --service_name=nginx --action=reload -ynh_exec_fully_quiet sleep 60s #Only necessary for CI test otherwise curl failed to nginx page ynh_script_progression --message="Recovery of $app completed" --last diff --git a/scripts/upgrade b/scripts/upgrade index 2306394..dad4e29 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -45,7 +45,7 @@ myynh_install_dependencies --python="$PY_REQUIRED_VERSION" # stop systemd service ynh_script_progression --message="Stoping service..." -ynh_systemd_action --service_name="$app@$app" --action=stop --line_match="Stopped Home Assistant" --log_path="/var/log/$app.log" --timeout=300 +ynh_systemd_action --service_name="$app" --action=stop --line_match="Stopped Home Assistant" --log_path="systemd" --timeout=300 # installation in a virtual environment ynh_script_progression --message="Installing Home Assistant in a virtual environment..." @@ -60,21 +60,21 @@ chmod -R +x "$data_path/.$app/bin/" # setup up systemd service ynh_script_progression --message="Adding the dedicated service..." ynh_replace_string --match_string="__PATH__" --replace_string="$data_path/.$app" --target_file="../conf/systemd.service" -ynh_add_systemd_config --service="$app@$app" +ynh_add_systemd_config --service="$app" # add service in admin panel -yunohost service add "$app@$app" --log "$data_path/.$app/home-assistant.log" --description "Home Assistant server" --needs_exposed_ports $port +yunohost service add "$app" --log "$data_path/.$app/home-assistant.log" --description "Home Assistant server" --needs_exposed_ports $port # start systemd service ynh_script_progression --message="Starting the Home Assistant server..." systemctl daemon-reload -ynh_systemd_action --service_name="$app@$app" --action=start --line_match="Home Assistant initialized" --log_path="/var/log/$app.log" --timeout=3600 +ynh_systemd_action --service_name="$app" --action=start --line_match="Home Assistant initialized" --log_path="systemd" --timeout=3600 # remove --verbose from service -ynh_replace_string --match_string=" --verbose" --replace_string="" --target_file="/etc/systemd/system/$app@$app.service" -ynh_store_file_checksum --file="/etc/systemd/system/$app@$app.service" +ynh_replace_string --match_string=" --verbose" --replace_string="" --target_file="/etc/systemd/system/$app.service" +ynh_store_file_checksum --file="/etc/systemd/system/$app.service" systemctl daemon-reload -ynh_systemd_action --service_name="$app@$app" --action=restart +ynh_systemd_action --service_name="$app" --action=restart # enable logrotate ynh_use_logrotate --logfile="$data_path/.$app/home-assistant.log" --nonappend From cf2d5157402d83072eb4400862d6df5723d8224e Mon Sep 17 00:00:00 2001 From: ewilly Date: Tue, 23 Nov 2021 20:40:19 +0100 Subject: [PATCH 03/37] Debug restore --- conf/systemd.service | 4 +++- scripts/restore | 8 ++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/conf/systemd.service b/conf/systemd.service index 397f3f4..056acb7 100644 --- a/conf/systemd.service +++ b/conf/systemd.service @@ -1,12 +1,14 @@ [Unit] Description=Home Assistant -After=network-online.target +After=network.target [Service] Type=simple User=__APP__ WorkingDirectory=__PATH__ ExecStart=/opt/yunohost/__APP__/bin/hass --config "__PATH__" --verbose +StandardOutput=append:/var/log/__APP__/__APP__.log +StandardError=inherit # Sandboxing options to harden security # Depending on specificities of your service/app, you may need to tweak these diff --git a/scripts/restore b/scripts/restore index e8d0743..66f7b2b 100644 --- a/scripts/restore +++ b/scripts/restore @@ -66,10 +66,10 @@ sed --in-place "/ExecStart/s/$/ --verbose/" "/etc/systemd/system/$app.service" ynh_systemd_action --service_name="$app" --action=start --line_match="Home Assistant initialized" --log_path="systemd" --timeout=900 # remove --verbose from service and restart -ynh_replace_string --match_string=" --verbose" --replace_string="" --target_file="/etc/systemd/system/$app.service" -ynh_store_file_checksum --file="/etc/systemd/system/$app.service" -systemctl daemon-reload -ynh_systemd_action --service_name="$app" --action=restart +#ynh_replace_string --match_string=" --verbose" --replace_string="" --target_file="/etc/systemd/system/$app.service" +#ynh_store_file_checksum --file="/etc/systemd/system/$app.service" +#systemctl daemon-reload +#ynh_systemd_action --service_name="$app" --action=restart # restore logrotate ynh_script_progression --message="Restoring logrotate..." From 3dc7210af0feadaaaab8b3729f15c6f77b4f87b5 Mon Sep 17 00:00:00 2001 From: ewilly Date: Tue, 23 Nov 2021 22:27:54 +0100 Subject: [PATCH 04/37] Debug --- conf/systemd.service | 4 +--- scripts/install | 12 +++++++++--- scripts/restore | 5 +++-- scripts/upgrade | 7 ++++--- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/conf/systemd.service b/conf/systemd.service index 056acb7..9cfd630 100644 --- a/conf/systemd.service +++ b/conf/systemd.service @@ -6,9 +6,7 @@ After=network.target Type=simple User=__APP__ WorkingDirectory=__PATH__ -ExecStart=/opt/yunohost/__APP__/bin/hass --config "__PATH__" --verbose -StandardOutput=append:/var/log/__APP__/__APP__.log -StandardError=inherit +ExecStart=/opt/yunohost/__APP__/bin/hass --config "__PATH__" --log-file "/var/log/__APP__/__APP__.log" --verbose # Sandboxing options to harden security # Depending on specificities of your service/app, you may need to tweak these diff --git a/scripts/install b/scripts/install index f5dcf38..49be831 100644 --- a/scripts/install +++ b/scripts/install @@ -17,6 +17,7 @@ is_public=$YNH_APP_ARG_IS_PUBLIC # definie useful vars final_path="/opt/yunohost/$app" data_path="/home/yunohost.app/$app" +log_file="$data_path/.$app/home-assistant.log" path_url="/" # check domain/path availability @@ -46,6 +47,11 @@ ynh_add_config --template="../conf/sudoers" --destination="/etc/sudoers.d/$app" myynh_create_dir "$final_path" chown $app: "$final_path" +# create a directory with its log file +myynh_create_dir "/var/log/$app" +touch "/var/log/$app/$app.log" +chown $app: "/var/log/$app/$app.log" + # create a directory for the datas of Home Assistant myynh_create_dir "$data_path/.$app" myynh_create_dir "$data_path/.cache" @@ -72,11 +78,11 @@ ynh_replace_string --match_string="__PATH__" --replace_string="$data_path/.$app" ynh_add_systemd_config --service="$app" ## add service in admin panel -yunohost service add "$app" --log "$data_path/.$app/home-assistant.log" --description "Home Assistant server" --needs_exposed_ports $port +yunohost service add "$app" --log "$log_file" --description "Home Assistant server" --needs_exposed_ports $port # start systemd service ynh_script_progression --message="Starting the Home Assistant server..." -ynh_systemd_action --service_name="$app" --action=start --line_match="Home Assistant initialized" --log_path="systemd" --timeout=3600 +ynh_systemd_action --service_name="$app" --action=start --line_match="Home Assistant initialized" --log_path="/var/log/$app" --timeout=3600 # remove --verbose from service ynh_replace_string --match_string=" --verbose" --replace_string="" --target_file="/etc/systemd/system/$app.service" @@ -85,7 +91,7 @@ systemctl daemon-reload ynh_systemd_action --service_name="$app" --action=restart # enable logrotate -ynh_use_logrotate --logfile="$data_path/.$app/home-assistant.log" +ynh_use_logrotate --logfile="$log_file" # create a dedicated nginx config ynh_script_progression --message="Configuring nginx web server..." diff --git a/scripts/restore b/scripts/restore index 66f7b2b..b799bc9 100644 --- a/scripts/restore +++ b/scripts/restore @@ -23,6 +23,7 @@ python=$(ynh_app_setting_get --app="$app" --key=python) # definie useful vars final_path="/opt/yunohost/$app" data_path="/home/yunohost.app/$app" +log_file="$data_path/.$app/home-assistant.log" path_url="/" # check domain/path availability @@ -58,12 +59,12 @@ ynh_script_progression --message="Restoring the dedicated service..." ynh_restore_file --origin_path="/etc/systemd/system/$app.service" # add service in admin panel -yunohost service add "$app" --log "$data_path/.$app/home-assistant.log" --description "Home Assistant server" --needs_exposed_ports $port +yunohost service add "$app" --log "$log_file" --description "Home Assistant server" --needs_exposed_ports $port # restart the app ynh_script_progression --message="Starting the Home Assistant server..." sed --in-place "/ExecStart/s/$/ --verbose/" "/etc/systemd/system/$app.service" -ynh_systemd_action --service_name="$app" --action=start --line_match="Home Assistant initialized" --log_path="systemd" --timeout=900 +ynh_systemd_action --service_name="$app" --action=start --line_match="Home Assistant initialized" --log_path="/var/log/$app" --timeout=900 # remove --verbose from service and restart #ynh_replace_string --match_string=" --verbose" --replace_string="" --target_file="/etc/systemd/system/$app.service" diff --git a/scripts/upgrade b/scripts/upgrade index dad4e29..e81dc36 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -17,6 +17,7 @@ port=$(ynh_app_setting_get --app="$app" --key=port) # definie useful vars final_path="/opt/yunohost/$app" data_path="/home/yunohost.app/$app" +log_file="$data_path/.$app/home-assistant.log" # use prior backup and restore on error only if backup feature exists on installed instance ynh_script_progression --message="Creating backup in case of failure..." @@ -45,7 +46,7 @@ myynh_install_dependencies --python="$PY_REQUIRED_VERSION" # stop systemd service ynh_script_progression --message="Stoping service..." -ynh_systemd_action --service_name="$app" --action=stop --line_match="Stopped Home Assistant" --log_path="systemd" --timeout=300 +ynh_systemd_action --service_name="$app" --action=stop --line_match="Stopped Home Assistant" --log_path="/var/log" --timeout=300 # installation in a virtual environment ynh_script_progression --message="Installing Home Assistant in a virtual environment..." @@ -63,7 +64,7 @@ ynh_replace_string --match_string="__PATH__" --replace_string="$data_path/.$app" ynh_add_systemd_config --service="$app" # add service in admin panel -yunohost service add "$app" --log "$data_path/.$app/home-assistant.log" --description "Home Assistant server" --needs_exposed_ports $port +yunohost service add "$app" --log "$log_file" --description "Home Assistant server" --needs_exposed_ports $port # start systemd service ynh_script_progression --message="Starting the Home Assistant server..." @@ -77,7 +78,7 @@ systemctl daemon-reload ynh_systemd_action --service_name="$app" --action=restart # enable logrotate -ynh_use_logrotate --logfile="$data_path/.$app/home-assistant.log" --nonappend +ynh_use_logrotate --logfile="$log_file" --nonappend # create a dedicated nginx config ynh_script_progression --message="Configuring nginx web server..." From 8881a11de48cc9561948fe4e133c00f0d16d0136 Mon Sep 17 00:00:00 2001 From: ewilly Date: Wed, 24 Nov 2021 06:27:13 +0100 Subject: [PATCH 05/37] Debug --- conf/systemd.service | 2 ++ 1 file changed, 2 insertions(+) diff --git a/conf/systemd.service b/conf/systemd.service index 9cfd630..e9469ea 100644 --- a/conf/systemd.service +++ b/conf/systemd.service @@ -7,6 +7,8 @@ Type=simple User=__APP__ WorkingDirectory=__PATH__ ExecStart=/opt/yunohost/__APP__/bin/hass --config "__PATH__" --log-file "/var/log/__APP__/__APP__.log" --verbose +StandardOutput=append:/var/log/__APP__/__APP__.log +StandardError=inherit # Sandboxing options to harden security # Depending on specificities of your service/app, you may need to tweak these From 1cd9ba7afbac6bdc4b0e9aee9ffef10b336d3546 Mon Sep 17 00:00:00 2001 From: ewilly Date: Wed, 24 Nov 2021 06:37:01 +0100 Subject: [PATCH 06/37] Debug --- conf/systemd.service | 2 -- scripts/install | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/conf/systemd.service b/conf/systemd.service index e9469ea..9cfd630 100644 --- a/conf/systemd.service +++ b/conf/systemd.service @@ -7,8 +7,6 @@ Type=simple User=__APP__ WorkingDirectory=__PATH__ ExecStart=/opt/yunohost/__APP__/bin/hass --config "__PATH__" --log-file "/var/log/__APP__/__APP__.log" --verbose -StandardOutput=append:/var/log/__APP__/__APP__.log -StandardError=inherit # Sandboxing options to harden security # Depending on specificities of your service/app, you may need to tweak these diff --git a/scripts/install b/scripts/install index 49be831..e5a5b8f 100644 --- a/scripts/install +++ b/scripts/install @@ -17,7 +17,7 @@ is_public=$YNH_APP_ARG_IS_PUBLIC # definie useful vars final_path="/opt/yunohost/$app" data_path="/home/yunohost.app/$app" -log_file="$data_path/.$app/home-assistant.log" +log_file="/var/log/$app/$app.log" path_url="/" # check domain/path availability @@ -82,7 +82,7 @@ yunohost service add "$app" --log "$log_file" --description "Home Assistant serv # start systemd service ynh_script_progression --message="Starting the Home Assistant server..." -ynh_systemd_action --service_name="$app" --action=start --line_match="Home Assistant initialized" --log_path="/var/log/$app" --timeout=3600 +ynh_systemd_action --service_name="$app" --action=start --line_match="Home Assistant initialized" --log_path="$log_file" --timeout=3600 # remove --verbose from service ynh_replace_string --match_string=" --verbose" --replace_string="" --target_file="/etc/systemd/system/$app.service" From 5e55137bf438d5e31df6fe586463fec849761b06 Mon Sep 17 00:00:00 2001 From: ewilly Date: Wed, 24 Nov 2021 06:53:48 +0100 Subject: [PATCH 07/37] Debug --- scripts/restore | 4 ++-- scripts/upgrade | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/restore b/scripts/restore index b799bc9..350736f 100644 --- a/scripts/restore +++ b/scripts/restore @@ -23,7 +23,7 @@ python=$(ynh_app_setting_get --app="$app" --key=python) # definie useful vars final_path="/opt/yunohost/$app" data_path="/home/yunohost.app/$app" -log_file="$data_path/.$app/home-assistant.log" +log_file="/var/log/$app/$app.log" path_url="/" # check domain/path availability @@ -64,7 +64,7 @@ yunohost service add "$app" --log "$log_file" --description "Home Assistant serv # restart the app ynh_script_progression --message="Starting the Home Assistant server..." sed --in-place "/ExecStart/s/$/ --verbose/" "/etc/systemd/system/$app.service" -ynh_systemd_action --service_name="$app" --action=start --line_match="Home Assistant initialized" --log_path="/var/log/$app" --timeout=900 +ynh_systemd_action --service_name="$app" --action=start --line_match="Home Assistant initialized" --log_path="$log_file" --timeout=900 # remove --verbose from service and restart #ynh_replace_string --match_string=" --verbose" --replace_string="" --target_file="/etc/systemd/system/$app.service" diff --git a/scripts/upgrade b/scripts/upgrade index e81dc36..808fb7b 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -17,7 +17,7 @@ port=$(ynh_app_setting_get --app="$app" --key=port) # definie useful vars final_path="/opt/yunohost/$app" data_path="/home/yunohost.app/$app" -log_file="$data_path/.$app/home-assistant.log" +log_file="/var/log/$app/$app.log" # use prior backup and restore on error only if backup feature exists on installed instance ynh_script_progression --message="Creating backup in case of failure..." @@ -46,7 +46,7 @@ myynh_install_dependencies --python="$PY_REQUIRED_VERSION" # stop systemd service ynh_script_progression --message="Stoping service..." -ynh_systemd_action --service_name="$app" --action=stop --line_match="Stopped Home Assistant" --log_path="/var/log" --timeout=300 +ynh_systemd_action --service_name="$app" --action=stop --line_match="Stopped Home Assistant" --log_path="$log_file" --timeout=300 # installation in a virtual environment ynh_script_progression --message="Installing Home Assistant in a virtual environment..." @@ -69,7 +69,7 @@ yunohost service add "$app" --log "$log_file" --description "Home Assistant serv # start systemd service ynh_script_progression --message="Starting the Home Assistant server..." systemctl daemon-reload -ynh_systemd_action --service_name="$app" --action=start --line_match="Home Assistant initialized" --log_path="systemd" --timeout=3600 +ynh_systemd_action --service_name="$app" --action=start --line_match="Home Assistant initialized" --log_path="$log_file" --timeout=3600 # remove --verbose from service ynh_replace_string --match_string=" --verbose" --replace_string="" --target_file="/etc/systemd/system/$app.service" From 264d8ed701e522c6b4309cfbe91416f221787c37 Mon Sep 17 00:00:00 2001 From: ewilly Date: Wed, 24 Nov 2021 20:34:38 +0100 Subject: [PATCH 08/37] debug --- scripts/restore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/restore b/scripts/restore index 350736f..810ab08 100644 --- a/scripts/restore +++ b/scripts/restore @@ -81,4 +81,6 @@ ynh_script_progression --message="Restoring nginx web server..." ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" ynh_systemd_action --service_name=nginx --action=reload +ynh_local_curl + ynh_script_progression --message="Recovery of $app completed" --last From f1972ff3cf0d50b3b48037b21379ad5c1adf0ea2 Mon Sep 17 00:00:00 2001 From: ewilly Date: Wed, 24 Nov 2021 20:54:23 +0100 Subject: [PATCH 09/37] debug --- scripts/restore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/restore b/scripts/restore index 810ab08..ca600dc 100644 --- a/scripts/restore +++ b/scripts/restore @@ -81,6 +81,6 @@ ynh_script_progression --message="Restoring nginx web server..." ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" ynh_systemd_action --service_name=nginx --action=reload -ynh_local_curl +ynh_local_curl "/" ynh_script_progression --message="Recovery of $app completed" --last From 3843c6b23a5e649b774cd8d12844d1b58dc2f9fe Mon Sep 17 00:00:00 2001 From: ewilly Date: Wed, 24 Nov 2021 22:23:50 +0100 Subject: [PATCH 10/37] debug --- scripts/_common.sh | 9 ++++----- scripts/backup | 5 ----- scripts/install | 8 ++++---- scripts/remove | 5 ++++- scripts/restore | 10 +++++----- scripts/upgrade | 33 ++++++++++++++++++++++++--------- 6 files changed, 41 insertions(+), 29 deletions(-) diff --git a/scripts/_common.sh b/scripts/_common.sh index 88e95c0..acd5885 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -79,7 +79,6 @@ myynh_install_dependencies () { ynh_handle_getopts_args "$@" # Install main dependencies from apt - ynh_script_progression --message="Installing dependencies..." ynh_install_app_dependencies "${PKG_DEPENDENCIES}" # Check python version from APT @@ -96,20 +95,20 @@ myynh_install_dependencies () { # Compare version if [ $(myynh_version_compare $PY_APT_VERSION $python) -le 1 ]; then # APT >= Required - ynh_script_progression --message="Using provided python3..." + ynh_print_info --message="Using provided python3..." MY_PYTHON="python3" else # Either python already built or to build - ynh_script_progression --message="Installing additional dependencies..." + ynh_print_info --message="Installing additional dependencies..." PKG_DEPENDENCIES="${PKG_DEPENDENCIES} tk-dev libncurses5-dev libncursesw5-dev libreadline6-dev libdb5.3-dev libgdbm-dev libsqlite3-dev libbz2-dev libexpat1-dev liblzma-dev wget tar" ynh_install_app_dependencies "${PKG_DEPENDENCIES}" if [ $(myynh_version_compare $PY_BUILT_VERSION $python) -le 1 ]; then # Built >= Required - ynh_script_progression --message="Using already used python3 built version..." + ynh_print_info --message="Using already used python3 built version..." MY_PYTHON="/usr/local/bin/python${PY_BUILT_VERSION:0:3}" else # APT < Minimal & Actual < Minimal => Build & install Python into /usr/local/bin - ynh_script_progression --message="Building python (may take a while)..." + ynh_print_info --message="Building python (may take a while)..." # Store current direcotry local MY_DIR=$(pwd) # Download diff --git a/scripts/backup b/scripts/backup index b5c9663..ef34234 100644 --- a/scripts/backup +++ b/scripts/backup @@ -16,11 +16,6 @@ domain=$(ynh_app_setting_get --app="$app" --key=domain) final_path="/opt/yunohost/$app" data_path="/home/yunohost.app/$app" -ynh_print_info --message="Storing the python version in settings..." -# store python version -python=$(cat "$final_path/bin/python3" --version | cut -d ' ' -f 2) -ynh_app_setting_set --app="$app" --key=python --value="$python" - # backup source & conf files ynh_print_info --message="Declaring files to be backed up..." ynh_backup --src_path="$final_path" diff --git a/scripts/install b/scripts/install index e5a5b8f..2e0e509 100644 --- a/scripts/install +++ b/scripts/install @@ -48,9 +48,9 @@ myynh_create_dir "$final_path" chown $app: "$final_path" # create a directory with its log file -myynh_create_dir "/var/log/$app" -touch "/var/log/$app/$app.log" -chown $app: "/var/log/$app/$app.log" +myynh_create_dir "$(dirname "$log_file")" +touch "$log_file" +chown $app: "$log_file" # create a directory for the datas of Home Assistant myynh_create_dir "$data_path/.$app" @@ -58,6 +58,7 @@ myynh_create_dir "$data_path/.cache" chown -R $app: "$data_path" # build (if needed) & install Pyhton +ynh_script_progression --message="Installing dependencies..." myynh_install_dependencies --python="$PY_REQUIRED_VERSION" # installation in a virtual environment @@ -74,7 +75,6 @@ chmod -R +x "$data_path/.$app/bin/" # setup up systemd service ynh_script_progression --message="Adding the dedicated service..." -ynh_replace_string --match_string="__PATH__" --replace_string="$data_path/.$app" --target_file="../conf/systemd.service" ynh_add_systemd_config --service="$app" ## add service in admin panel diff --git a/scripts/remove b/scripts/remove index 64b99cd..9271bdb 100644 --- a/scripts/remove +++ b/scripts/remove @@ -13,6 +13,7 @@ port=$(ynh_app_setting_get --app=$app --key=port) # definie useful vars final_path="/opt/yunohost/$app" data_path="/home/yunohost.app/$app" +log_file="/var/log/$app/$app.log" # Remove a service from the admin panel, added by `yunohost service add` if ynh_exec_warn_less yunohost service status "$app" >/dev/null ; then @@ -52,9 +53,11 @@ if yunohost firewall list | grep -q "\- $port$" ; then ynh_exec_warn_less yunohost firewall disallow TCP $port fi -# remove sudoers file ynh_script_progression --message="Removing various files..." +# remove sudoers file ynh_secure_remove --file="/etc/sudoers.d/$app" +# Remove the log files +ynh_secure_remove --file="$(dirname "$log_file")" # delete a system user ynh_script_progression --message="Removing the dedicated system user..." diff --git a/scripts/restore b/scripts/restore index ca600dc..5472f39 100644 --- a/scripts/restore +++ b/scripts/restore @@ -67,10 +67,10 @@ sed --in-place "/ExecStart/s/$/ --verbose/" "/etc/systemd/system/$app.service" ynh_systemd_action --service_name="$app" --action=start --line_match="Home Assistant initialized" --log_path="$log_file" --timeout=900 # remove --verbose from service and restart -#ynh_replace_string --match_string=" --verbose" --replace_string="" --target_file="/etc/systemd/system/$app.service" -#ynh_store_file_checksum --file="/etc/systemd/system/$app.service" -#systemctl daemon-reload -#ynh_systemd_action --service_name="$app" --action=restart +ynh_replace_string --match_string=" --verbose" --replace_string="" --target_file="/etc/systemd/system/$app.service" +ynh_store_file_checksum --file="/etc/systemd/system/$app.service" +systemctl daemon-reload +ynh_systemd_action --service_name="$app" --action=restart # restore logrotate ynh_script_progression --message="Restoring logrotate..." @@ -81,6 +81,6 @@ ynh_script_progression --message="Restoring nginx web server..." ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" ynh_systemd_action --service_name=nginx --action=reload -ynh_local_curl "/" +sleep 10s #Only necessary for CI test otherwise curl failed to nginx page ynh_script_progression --message="Recovery of $app completed" --last diff --git a/scripts/upgrade b/scripts/upgrade index 808fb7b..d0b6921 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -18,6 +18,7 @@ port=$(ynh_app_setting_get --app="$app" --key=port) final_path="/opt/yunohost/$app" data_path="/home/yunohost.app/$app" log_file="/var/log/$app/$app.log" +path_url="/" # use prior backup and restore on error only if backup feature exists on installed instance ynh_script_progression --message="Creating backup in case of failure..." @@ -29,25 +30,40 @@ if [ -f "/etc/yunohost/apps/$app/scripts/backup" ] ; then } fi -# move $data_path to new directory -ynh_script_progression --message="Moving existing datas to new location..." -if [ ! -d "$data_path" ] ; then - mv "/""home""/$app" "$data_path" - ynh_replace_string --match_string="/home/homeassistant/.homeassistant" --replace_string="$data_path/.$app" --target_file="$data_path/.$app/configuration.yaml" - chown -R $app: "$data_path" -fi - # grant sudo permissions to the user to manage his own systemd service ynh_script_progression --message="Creating dedicated user, rights and folders..." ynh_add_config --template="../conf/sudoers" --destination="/etc/sudoers.d/$app" # build (if needed) & install Pyhton +ynh_script_progression --message="Installing dependencies..." myynh_install_dependencies --python="$PY_REQUIRED_VERSION" # stop systemd service ynh_script_progression --message="Stoping service..." ynh_systemd_action --service_name="$app" --action=stop --line_match="Stopped Home Assistant" --log_path="$log_file" --timeout=300 +# migrate to new app architecture +ynh_script_progression --message="If needed, migrating to new app architecture..." +if [ ! -d "$data_path" ]; then + # move $data_path to new directory + mv "/""home""/$app" "$data_path" + ynh_replace_string --match_string="/home/homeassistant/.homeassistant" --replace_string="$data_path/.$app" --target_file="$data_path/.$app/configuration.yaml" + chown -R $app: "$data_path" +fi +if [ ! -f "$log_file" ]; then + # create a directory with its log file + myynh_create_dir "$(dirname "$log_file")" + touch "$log_file" + chown $app: "$log_file" +fi +if [ -f "/etc/systemd/system/$app@$app.service" ]; then + # remove old systemd service + if ynh_exec_warn_less yunohost service status "$app@$app" >/dev/null ; then + yunohost service remove "$app@$app" + fi + ynh_remove_systemd_config --service="$app@$app" +fi + # installation in a virtual environment ynh_script_progression --message="Installing Home Assistant in a virtual environment..." ynh_exec_fully_quiet myynh_install_homeassistant --path="$data_path" @@ -60,7 +76,6 @@ chmod -R +x "$data_path/.$app/bin/" # setup up systemd service ynh_script_progression --message="Adding the dedicated service..." -ynh_replace_string --match_string="__PATH__" --replace_string="$data_path/.$app" --target_file="../conf/systemd.service" ynh_add_systemd_config --service="$app" # add service in admin panel From 254e749efe8c3012952d90ff9f6d2c48bc3db496 Mon Sep 17 00:00:00 2001 From: ewilly Date: Wed, 24 Nov 2021 22:37:16 +0100 Subject: [PATCH 11/37] Update --- manifest.json | 2 +- scripts/_common.sh | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/manifest.json b/manifest.json index 46c8221..2c2e669 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "Home automation platform", "fr": "Plateforme domotique" }, - "version": "2021.11.4~ynh1", + "version": "2021.11.5~ynh1", "url": "https://github.com/home-assistant/home-assistant", "upstream": { "license": "Apache-2.0", diff --git a/scripts/_common.sh b/scripts/_common.sh index acd5885..614514e 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -3,13 +3,14 @@ # # Release to install -VERSION=2021.11.4 +VERSION=2021.11.5 # Package dependencies PKG_DEPENDENCIES="python3 python3-dev python3-venv python3-pip libffi-dev libssl-dev libjpeg-dev zlib1g-dev autoconf build-essential libopenjp2-7 libtiff5" # Requirements (Major.Minor.Patch) -# PY_VERSION=$(curl -s "https://www.python.org/ftp/python/" | grep ">3.8" | tail -n1 | cut -d '/' -f 2 | cut -d '>' -f 2) +# PY_VERSION=$(curl -s "https://www.python.org/ftp/python/" | grep ">3.9" | tail -n1 | cut -d '/' -f 2 | cut -d '>' -f 2) +# Pyhton 3.9.2 will be shiped with bullseye PY_REQUIRED_VERSION=3.9.2 # Execute a command as another user From 4bfc67ea440c0ddabe20fd3f13d13efb745e33bd Mon Sep 17 00:00:00 2001 From: Yunohost-Bot <> Date: Wed, 24 Nov 2021 21:37:26 +0000 Subject: [PATCH 12/37] Auto-update README --- README.md | 2 +- README_fr.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f7bc58e..c9f89d2 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/in Home automation platform -**Shipped version:** 2021.11.4~ynh1 +**Shipped version:** 2021.11.5~ynh1 **Demo:** https://demo.home-assistant.io diff --git a/README_fr.md b/README_fr.md index c2ab526..d7cadca 100644 --- a/README_fr.md +++ b/README_fr.md @@ -13,7 +13,7 @@ Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour Plateforme domotique -**Version incluse :** 2021.11.4~ynh1 +**Version incluse :** 2021.11.5~ynh1 **Démo :** https://demo.home-assistant.io From c2152d0c9764cb27c355c9c970bd1414e5b45006 Mon Sep 17 00:00:00 2001 From: ewilly Date: Wed, 24 Nov 2021 22:49:56 +0100 Subject: [PATCH 13/37] Fix --- conf/homeassistant_conf_files/configuration.yaml | 4 ++-- conf/systemd.service | 2 +- scripts/install | 4 +++- scripts/upgrade | 1 + 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/conf/homeassistant_conf_files/configuration.yaml b/conf/homeassistant_conf_files/configuration.yaml index 1815781..557a568 100644 --- a/conf/homeassistant_conf_files/configuration.yaml +++ b/conf/homeassistant_conf_files/configuration.yaml @@ -1,7 +1,7 @@ homeassistant: auth_providers: - type: command_line - command: __PATH__/bin/ynh_ldap-auth.sh + command: __DATA_PATH__/.__APP__/bin/ynh_ldap-auth.sh meta: true http: @@ -19,5 +19,5 @@ switch: - platform: command_line switches: upgrade_homeassistant: - command_on: "nohup bash -c __PATH__/bin/upgrade_homeassistant.sh $1 > /dev/null 2>&1 &" + command_on: "nohup bash -c __DATA_PATH__/.__APP__/bin/upgrade_homeassistant.sh $1 > /dev/null 2>&1 &" friendly_name: Upgrade Home Assistant diff --git a/conf/systemd.service b/conf/systemd.service index 9cfd630..704cce2 100644 --- a/conf/systemd.service +++ b/conf/systemd.service @@ -6,7 +6,7 @@ After=network.target Type=simple User=__APP__ WorkingDirectory=__PATH__ -ExecStart=/opt/yunohost/__APP__/bin/hass --config "__PATH__" --log-file "/var/log/__APP__/__APP__.log" --verbose +ExecStart=/opt/yunohost/__APP__/bin/hass --config "__DATA_PATH__/.__APP__" --log-file "/var/log/__APP__/__APP__.log" --verbose # Sandboxing options to harden security # Depending on specificities of your service/app, you may need to tweak these diff --git a/scripts/install b/scripts/install index 2e0e509..6b258b1 100644 --- a/scripts/install +++ b/scripts/install @@ -68,13 +68,15 @@ ynh_exec_fully_quiet myynh_install_homeassistant --path="$data_path" # set default configuration files and move all homeassistant_conf_files ynh_script_progression --message="Configuring the installation..." ynh_replace_string --match_string="__PORT__" --replace_string="$port" --target_file="../conf/homeassistant_conf_files/configuration.yaml" -ynh_replace_string --match_string="__PATH__" --replace_string="$data_path/.$app" --target_file="../conf/homeassistant_conf_files/configuration.yaml" +ynh_replace_string --match_string="__APP__" --replace_string="$app" --target_file="../conf/homeassistant_conf_files/configuration.yaml" +ynh_replace_string --match_string="__DATA_PATH__" --replace_string="$data_path" --target_file="../conf/homeassistant_conf_files/configuration.yaml" cp -r "../conf/homeassistant_conf_files/." "$data_path/.$app/" chown -R $app: "$data_path/.$app" chmod -R +x "$data_path/.$app/bin/" # setup up systemd service ynh_script_progression --message="Adding the dedicated service..." +ynh_replace_string --match_string="__DATA_PATH__" --replace_string="$data_path" --target_file="../conf/systemd.service" ynh_add_systemd_config --service="$app" ## add service in admin panel diff --git a/scripts/upgrade b/scripts/upgrade index d0b6921..916c10d 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -76,6 +76,7 @@ chmod -R +x "$data_path/.$app/bin/" # setup up systemd service ynh_script_progression --message="Adding the dedicated service..." +ynh_replace_string --match_string="__DATA_PATH__" --replace_string="$data_path" --target_file="../conf/systemd.service" ynh_add_systemd_config --service="$app" # add service in admin panel From 8fb2561dd471a14e7e2ea9aecfc251627c4a9142 Mon Sep 17 00:00:00 2001 From: ewilly Date: Thu, 25 Nov 2021 20:31:25 +0100 Subject: [PATCH 14/37] Fix --- scripts/backup | 3 +++ scripts/remove | 1 + scripts/restore | 5 +++++ 3 files changed, 9 insertions(+) diff --git a/scripts/backup b/scripts/backup index ef34234..c8e6a74 100644 --- a/scripts/backup +++ b/scripts/backup @@ -15,6 +15,8 @@ domain=$(ynh_app_setting_get --app="$app" --key=domain) # definie useful vars final_path="/opt/yunohost/$app" data_path="/home/yunohost.app/$app" +log_file="/var/log/$app/$app.log" +path_url="/" # backup source & conf files ynh_print_info --message="Declaring files to be backed up..." @@ -24,5 +26,6 @@ ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" ynh_backup --src_path="/etc/sudoers.d/$app" ynh_backup --src_path="/etc/systemd/system/$app.service" ynh_backup --src_path="/etc/logrotate.d/$app" +ynh_backup --src_path="$(dirname "$log_file")" ynh_print_info --message="Backup of $app completed" diff --git a/scripts/remove b/scripts/remove index 9271bdb..ec11286 100644 --- a/scripts/remove +++ b/scripts/remove @@ -14,6 +14,7 @@ port=$(ynh_app_setting_get --app=$app --key=port) final_path="/opt/yunohost/$app" data_path="/home/yunohost.app/$app" log_file="/var/log/$app/$app.log" +path_url="/" # Remove a service from the admin panel, added by `yunohost service add` if ynh_exec_warn_less yunohost service status "$app" >/dev/null ; then diff --git a/scripts/restore b/scripts/restore index 5472f39..c8db173 100644 --- a/scripts/restore +++ b/scripts/restore @@ -50,6 +50,11 @@ ynh_restore_file --origin_path="$data_path" chown -R $app: "$data_path" chmod -R +x "$data_path/.$app/bin" +# restore log +ynh_script_progression --message="Restoring the app..." +ynh_restore_file --origin_path="$(dirname "$log_file")" +chown -R $app: "$log_file" + # add required packages ynh_script_progression --message="Restoring the packages dependencies..." myynh_install_dependencies --python="$python" From 9cd5b4b2f24a46b8ce698866f18d225b643b5f0f Mon Sep 17 00:00:00 2001 From: ewilly Date: Thu, 25 Nov 2021 20:47:57 +0100 Subject: [PATCH 15/37] Fix --- conf/nginx.conf | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/conf/nginx.conf b/conf/nginx.conf index b61db04..4aae8e1 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -1,9 +1,6 @@ -location / { +# see https://github.com/home-assistant/addons/blob/master/nginx_proxy/data/nginx.conf - if ($scheme = http) { - rewrite ^ https://$server_name$request_uri? permanent; - } - +location / { proxy_pass http://localhost:__PORT__; proxy_set_header Host $host; proxy_redirect http:// https://; From 3f5c027d5208c05cc5ea34be6482daff5dca169f Mon Sep 17 00:00:00 2001 From: ewilly Date: Thu, 25 Nov 2021 20:48:43 +0100 Subject: [PATCH 16/37] Fix --- manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index 2c2e669..05b2755 100644 --- a/manifest.json +++ b/manifest.json @@ -20,7 +20,7 @@ "email": "ewilly@ewilly.fr" }, "requirements": { - "yunohost": ">= 4.1.0" + "yunohost": ">= 4.3.0" }, "multi_instance": false, "services": [ From 4eaae0532fb6b1d82d7eab87eb1d2cdfcd3b48e7 Mon Sep 17 00:00:00 2001 From: ewilly Date: Sat, 27 Nov 2021 21:27:01 +0100 Subject: [PATCH 17/37] Fix --- conf/sudoers | 8 ++++---- scripts/backup | 12 ++++++------ scripts/install | 20 ++++++++++++-------- scripts/remove | 11 +++++------ scripts/restore | 10 ++++------ scripts/upgrade | 20 ++++++++++++++++---- 6 files changed, 47 insertions(+), 34 deletions(-) diff --git a/conf/sudoers b/conf/sudoers index 4f92b76..6c98bb8 100644 --- a/conf/sudoers +++ b/conf/sudoers @@ -1,5 +1,5 @@ # Grant sudo permissions to the user to manage his own systemd service -__NAME__ ALL=(ALL) NOPASSWD: /bin/systemctl stop __NAME__@__NAME__.service -__NAME__ ALL=(ALL) NOPASSWD: /bin/systemctl start __NAME__@__NAME__.service -__NAME__ ALL=(ALL) NOPASSWD: /bin/systemctl restart __NAME__@__NAME__.service -__NAME__ ALL=(ALL) NOPASSWD: /bin/systemctl status __NAME__@__NAME__.service +__APP__ ALL=(ALL) NOPASSWD: /bin/systemctl stop __APP__.service +__APP__ ALL=(ALL) NOPASSWD: /bin/systemctl start __APP__.service +__APP__ ALL=(ALL) NOPASSWD: /bin/systemctl restart __APP__.service +__APP__ ALL=(ALL) NOPASSWD: /bin/systemctl status __APP__.service diff --git a/scripts/backup b/scripts/backup index c8e6a74..02d2ff8 100644 --- a/scripts/backup +++ b/scripts/backup @@ -11,12 +11,12 @@ ynh_abort_if_errors # retrieve arguments app=$YNH_APP_INSTANCE_NAME domain=$(ynh_app_setting_get --app="$app" --key=domain) - -# definie useful vars -final_path="/opt/yunohost/$app" -data_path="/home/yunohost.app/$app" -log_file="/var/log/$app/$app.log" -path_url="/" +port=$(ynh_app_setting_get --app="$app" --key=port) +final_path=$(ynh_app_setting_get --app="$app" --key=final_path) +data_path=$(ynh_app_setting_get --app="$app" --key=data_path) +log_file=$(ynh_app_setting_get --app="$app" --key=log_file) +path_url=$(ynh_app_setting_get --app="$app" --key=path_url) +python=$(ynh_app_setting_get --app="$app" --key=python) # backup source & conf files ynh_print_info --message="Declaring files to be backed up..." diff --git a/scripts/install b/scripts/install index 6b258b1..85253e9 100644 --- a/scripts/install +++ b/scripts/install @@ -25,24 +25,28 @@ ynh_script_progression --message="Validating installation parameters..." [ ! -d "$final_path" ] || ynh_die --message="This path already contains a folder" ynh_webpath_register --app="$app" --domain="$domain" --path_url="$path_url" -# save app settings -ynh_script_progression --message="Storing installation settings..." -ynh_app_setting_set --app="$app" --key=domain --value="$domain" - # find a free port & open it ynh_script_progression --message="Looking for a free port and opening it..." port=$(ynh_find_port 8123) -ynh_app_setting_set --app="$app" --key=port --value="$port" ynh_exec_fully_quiet yunohost firewall allow TCP "$port" -# create a dedicated system user -ynh_script_progression --message="Creating dedicated user, rights and folders..." -ynh_system_user_create --username="$app" +# save app settings +ynh_script_progression --message="Storing installation settings..." +ynh_app_setting_set --app="$app" --key=domain --value="$domain" +ynh_app_setting_set --app="$app" --key=port --value="$port" +ynh_app_setting_set --app="$app" --key=final_path --value="$final_path" +ynh_app_setting_set --app="$app" --key=data_path --value="$data_path" +ynh_app_setting_set --app="$app" --key=log_file --value="$log_file" +ynh_app_setting_set --app="$app" --key=path_url --value="$path_url" # grant sudo permissions to the user to manage his own systemd service myynh_create_dir "/etc/sudoers.d" ynh_add_config --template="../conf/sudoers" --destination="/etc/sudoers.d/$app" +# create a dedicated system user +ynh_script_progression --message="Creating dedicated user, rights and folders..." +ynh_system_user_create --username="$app" + # create a directory for the installation of Home Assistant myynh_create_dir "$final_path" chown $app: "$final_path" diff --git a/scripts/remove b/scripts/remove index ec11286..9fb0765 100644 --- a/scripts/remove +++ b/scripts/remove @@ -9,12 +9,11 @@ source /usr/share/yunohost/helpers app=$YNH_APP_INSTANCE_NAME domain=$(ynh_app_setting_get --app=$app --key=domain) port=$(ynh_app_setting_get --app=$app --key=port) - -# definie useful vars -final_path="/opt/yunohost/$app" -data_path="/home/yunohost.app/$app" -log_file="/var/log/$app/$app.log" -path_url="/" +final_path=$(ynh_app_setting_get --app="$app" --key=final_path) +data_path=$(ynh_app_setting_get --app="$app" --key=data_path) +log_file=$(ynh_app_setting_get --app="$app" --key=log_file) +path_url=$(ynh_app_setting_get --app="$app" --key=path_url) +python=$(ynh_app_setting_get --app="$app" --key=python) # Remove a service from the admin panel, added by `yunohost service add` if ynh_exec_warn_less yunohost service status "$app" >/dev/null ; then diff --git a/scripts/restore b/scripts/restore index c8db173..864278e 100644 --- a/scripts/restore +++ b/scripts/restore @@ -18,14 +18,12 @@ ynh_abort_if_errors app=$YNH_APP_INSTANCE_NAME domain=$(ynh_app_setting_get --app="$app" --key=domain) port=$(ynh_app_setting_get --app="$app" --key=port) +final_path=$(ynh_app_setting_get --app="$app" --key=final_path) +data_path=$(ynh_app_setting_get --app="$app" --key=data_path) +log_file=$(ynh_app_setting_get --app="$app" --key=log_file) +path_url=$(ynh_app_setting_get --app="$app" --key=path_url) python=$(ynh_app_setting_get --app="$app" --key=python) -# definie useful vars -final_path="/opt/yunohost/$app" -data_path="/home/yunohost.app/$app" -log_file="/var/log/$app/$app.log" -path_url="/" - # check domain/path availability ynh_script_progression --message="Validating recovery parameters..." [ ! -d "$final_path" ] || ynh_die --message="This path already contains a folder" diff --git a/scripts/upgrade b/scripts/upgrade index 916c10d..d20a702 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -15,10 +15,22 @@ domain=$(ynh_app_setting_get --app="$app" --key=domain) port=$(ynh_app_setting_get --app="$app" --key=port) # definie useful vars -final_path="/opt/yunohost/$app" -data_path="/home/yunohost.app/$app" -log_file="/var/log/$app/$app.log" -path_url="/" +if [ -z $(ynh_app_setting_get --app="$app" --key=final_path) ]; then + final_path="/opt/yunohost/$app" + data_path="/home/yunohost.app/$app" + log_file="/var/log/$app/$app.log" + path_url="/" + ynh_app_setting_set --app="$app" --key=final_path --value="$final_path" + ynh_app_setting_set --app="$app" --key=data_path --value="$data_path" + ynh_app_setting_set --app="$app" --key=log_file --value="$log_file" + ynh_app_setting_set --app="$app" --key=path_url --value="$path_url" +else + final_path=$(ynh_app_setting_get --app="$app" --key=final_path) + data_path=$(ynh_app_setting_get --app="$app" --key=data_path) + log_file=$(ynh_app_setting_get --app="$app" --key=log_file) + path_url=$(ynh_app_setting_get --app="$app" --key=path_url) + python=$(ynh_app_setting_get --app="$app" --key=python) +fi # use prior backup and restore on error only if backup feature exists on installed instance ynh_script_progression --message="Creating backup in case of failure..." From 04f69bc521e33a85a673a6f7c6375273d6b17b9c Mon Sep 17 00:00:00 2001 From: ewilly Date: Sat, 27 Nov 2021 21:51:34 +0100 Subject: [PATCH 18/37] Fix --- conf/homeassistant_conf_files/configuration.yaml | 4 ++-- conf/systemd.service | 6 +++--- scripts/install | 5 +++-- scripts/restore | 3 +++ scripts/upgrade | 3 ++- 5 files changed, 13 insertions(+), 8 deletions(-) diff --git a/conf/homeassistant_conf_files/configuration.yaml b/conf/homeassistant_conf_files/configuration.yaml index 557a568..9897aee 100644 --- a/conf/homeassistant_conf_files/configuration.yaml +++ b/conf/homeassistant_conf_files/configuration.yaml @@ -1,7 +1,7 @@ homeassistant: auth_providers: - type: command_line - command: __DATA_PATH__/.__APP__/bin/ynh_ldap-auth.sh + command: __DATAPATH__/.__APP__/bin/ynh_ldap-auth.sh meta: true http: @@ -19,5 +19,5 @@ switch: - platform: command_line switches: upgrade_homeassistant: - command_on: "nohup bash -c __DATA_PATH__/.__APP__/bin/upgrade_homeassistant.sh $1 > /dev/null 2>&1 &" + command_on: "nohup bash -c __DATAPATH__/.__APP__/bin/upgrade_homeassistant.sh $1 > /dev/null 2>&1 &" friendly_name: Upgrade Home Assistant diff --git a/conf/systemd.service b/conf/systemd.service index 704cce2..f8c0ce3 100644 --- a/conf/systemd.service +++ b/conf/systemd.service @@ -5,10 +5,10 @@ After=network.target [Service] Type=simple User=__APP__ -WorkingDirectory=__PATH__ -ExecStart=/opt/yunohost/__APP__/bin/hass --config "__DATA_PATH__/.__APP__" --log-file "/var/log/__APP__/__APP__.log" --verbose +WorkingDirectory=__DATAPATH__/.__APP__ +ExecStart=__FINALPATH__/bin/hass --config "__DATAPATH__/.__APP__" --log-file "__LOGFILE__" --verbose -# Sandboxing options to harden security +# Sandboxing options to harden security__DATA_PATH__ # Depending on specificities of your service/app, you may need to tweak these # .. but this should be a good baseline # Details for these options: https://www.freedesktop.org/software/systemd/man/systemd.exec.html diff --git a/scripts/install b/scripts/install index 85253e9..bba09ef 100644 --- a/scripts/install +++ b/scripts/install @@ -73,14 +73,15 @@ ynh_exec_fully_quiet myynh_install_homeassistant --path="$data_path" ynh_script_progression --message="Configuring the installation..." ynh_replace_string --match_string="__PORT__" --replace_string="$port" --target_file="../conf/homeassistant_conf_files/configuration.yaml" ynh_replace_string --match_string="__APP__" --replace_string="$app" --target_file="../conf/homeassistant_conf_files/configuration.yaml" -ynh_replace_string --match_string="__DATA_PATH__" --replace_string="$data_path" --target_file="../conf/homeassistant_conf_files/configuration.yaml" +ynh_replace_string --match_string="__DATAPATH__" --replace_string="$data_path" --target_file="../conf/homeassistant_conf_files/configuration.yaml" cp -r "../conf/homeassistant_conf_files/." "$data_path/.$app/" chown -R $app: "$data_path/.$app" chmod -R +x "$data_path/.$app/bin/" # setup up systemd service ynh_script_progression --message="Adding the dedicated service..." -ynh_replace_string --match_string="__DATA_PATH__" --replace_string="$data_path" --target_file="../conf/systemd.service" +ynh_replace_string --match_string="__DATAPATH__" --replace_string="$data_path" --target_file="../conf/systemd.service" +ynh_replace_string --match_string="__LOGFILE__" --replace_string="$log_file" --target_file="../conf/systemd.service" ynh_add_systemd_config --service="$app" ## add service in admin panel diff --git a/scripts/restore b/scripts/restore index 864278e..4fafe50 100644 --- a/scripts/restore +++ b/scripts/restore @@ -82,6 +82,9 @@ ynh_restore_file --origin_path="/etc/logrotate.d/$app" # restore nginx ynh_script_progression --message="Restoring nginx web server..." ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" + +sleep 10s #Only necessary for CI test otherwise curl failed to nginx page + ynh_systemd_action --service_name=nginx --action=reload sleep 10s #Only necessary for CI test otherwise curl failed to nginx page diff --git a/scripts/upgrade b/scripts/upgrade index d20a702..b567fbd 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -88,7 +88,8 @@ chmod -R +x "$data_path/.$app/bin/" # setup up systemd service ynh_script_progression --message="Adding the dedicated service..." -ynh_replace_string --match_string="__DATA_PATH__" --replace_string="$data_path" --target_file="../conf/systemd.service" +ynh_replace_string --match_string="__DATAPATH__" --replace_string="$data_path" --target_file="../conf/systemd.service" +ynh_replace_string --match_string="__LOGFILE__" --replace_string="$log_file" --target_file="../conf/systemd.service" ynh_add_systemd_config --service="$app" # add service in admin panel From 8b2a3b9fd7c0f63692591f7bc19aa088d9fe73e5 Mon Sep 17 00:00:00 2001 From: ewilly Date: Sat, 27 Nov 2021 21:57:52 +0100 Subject: [PATCH 19/37] Fix --- scripts/_common.sh | 70 +++++++++++++++++++++++----------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/scripts/_common.sh b/scripts/_common.sh index 614514e..356e3cd 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -100,36 +100,36 @@ myynh_install_dependencies () { MY_PYTHON="python3" else # Either python already built or to build - ynh_print_info --message="Installing additional dependencies..." - PKG_DEPENDENCIES="${PKG_DEPENDENCIES} tk-dev libncurses5-dev libncursesw5-dev libreadline6-dev libdb5.3-dev libgdbm-dev libsqlite3-dev libbz2-dev libexpat1-dev liblzma-dev wget tar" - ynh_install_app_dependencies "${PKG_DEPENDENCIES}" if [ $(myynh_version_compare $PY_BUILT_VERSION $python) -le 1 ]; then # Built >= Required ynh_print_info --message="Using already used python3 built version..." MY_PYTHON="/usr/local/bin/python${PY_BUILT_VERSION:0:3}" else - # APT < Minimal & Actual < Minimal => Build & install Python into /usr/local/bin - ynh_print_info --message="Building python (may take a while)..." - # Store current direcotry - local MY_DIR=$(pwd) - # Download - wget -O "/tmp/Python-$python.tar.xz" "https://www.python.org/ftp/python/$python/Python-$python.tar.xz" 2>&1 - # Extract - cd /tmp - tar xf "Python-$python.tar.xz" - # Install - cd "Python-$python" - ./configure --enable-optimizations - ynh_exec_warn_less make -j4 - ynh_exec_warn_less make altinstall - # Clean - cd .. - ynh_secure_remove "Python-$python" - ynh_secure_remove "Python-$python.tar.xz" - # Set version - MY_PYTHON="/usr/local/bin/python${python:0:3}" - # Go back to working directory - cd $MY_DIR + ynh_print_info --message="Installing additional dependencies to build python..." + PKG_DEPENDENCIES="${PKG_DEPENDENCIES} tk-dev libncurses5-dev libncursesw5-dev libreadline6-dev libdb5.3-dev libgdbm-dev libsqlite3-dev libbz2-dev libexpat1-dev liblzma-dev wget tar" + ynh_install_app_dependencies "${PKG_DEPENDENCIES}" + # APT < Minimal & Actual < Minimal => Build & install Python into /usr/local/bin + ynh_print_info --message="Building python (may take a while)..." + # Store current direcotry + local MY_DIR=$(pwd) + # Download + wget -O "/tmp/Python-$python.tar.xz" "https://www.python.org/ftp/python/$python/Python-$python.tar.xz" 2>&1 + # Extract + cd /tmp + tar xf "Python-$python.tar.xz" + # Install + cd "Python-$python" + ./configure --enable-optimizations + ynh_exec_warn_less make -j4 + ynh_exec_warn_less make altinstall + # Clean + cd .. + ynh_secure_remove "Python-$python" + ynh_secure_remove "Python-$python.tar.xz" + # Set version + MY_PYTHON="/usr/local/bin/python${python:0:3}" + # Go back to working directory + cd $MY_DIR fi fi # Save python version in settings @@ -146,14 +146,14 @@ myynh_install_homeassistant () { # Manage arguments with getopts ynh_handle_getopts_args "$@" - exec_as $app -H -s /bin/bash -c " \ - echo 'create the virtual environment' \ - && $MY_PYTHON -m venv "$final_path" \ - && echo 'activate the virtual environment' \ - && source "$final_path/bin/activate" \ - && echo 'install last version of wheel' \ - && pip --cache-dir "$path/.cache" install --upgrade wheel \ - && echo 'install Home Assistant' \ - && pip --cache-dir "$path/.cache" install --upgrade $app==$VERSION \ - " + exec_as $app -H -s /bin/bash -c " \ + echo 'create the virtual environment' \ + && $MY_PYTHON -m venv "$final_path" \ + && echo 'activate the virtual environment' \ + && source "$final_path/bin/activate" \ + && echo 'install last version of wheel' \ + && pip --cache-dir "$path/.cache" install --upgrade wheel \ + && echo 'install Home Assistant' \ + && pip --cache-dir "$path/.cache" install --upgrade $app==$VERSION \ + " } From cffb4a63efb510226f6eede3faf17d3d54ec08a3 Mon Sep 17 00:00:00 2001 From: ewilly Date: Sun, 28 Nov 2021 14:12:43 +0100 Subject: [PATCH 20/37] Fix --- scripts/_common.sh | 15 +-------------- scripts/install | 4 ++++ 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/scripts/_common.sh b/scripts/_common.sh index 356e3cd..db4736f 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -13,19 +13,6 @@ PKG_DEPENDENCIES="python3 python3-dev python3-venv python3-pip libffi-dev libssl # Pyhton 3.9.2 will be shiped with bullseye PY_REQUIRED_VERSION=3.9.2 -# Execute a command as another user -# usage: exec_as USER COMMAND [ARG ...] -exec_as() { - local USER=$1 - shift 1 - - if [[ $USER = $(whoami) ]]; then - eval "$@" - else - sudo -u "$USER" "$@" - fi -} - # Check if directory/file already exists (path in argument) myynh_check_path () { [ -z "$1" ] && ynh_die "No argument supplied" @@ -146,7 +133,7 @@ myynh_install_homeassistant () { # Manage arguments with getopts ynh_handle_getopts_args "$@" - exec_as $app -H -s /bin/bash -c " \ + ynh_exec_as $app -H -s /bin/bash -c " \ echo 'create the virtual environment' \ && $MY_PYTHON -m venv "$final_path" \ && echo 'activate the virtual environment' \ diff --git a/scripts/install b/scripts/install index bba09ef..e5bbdd8 100644 --- a/scripts/install +++ b/scripts/install @@ -67,7 +67,9 @@ myynh_install_dependencies --python="$PY_REQUIRED_VERSION" # installation in a virtual environment ynh_script_progression --message="Installing Home Assistant in a virtual environment..." +ynh_print_info --message="$(whoami)" ynh_exec_fully_quiet myynh_install_homeassistant --path="$data_path" +ynh_print_info --message="$(whoami)" # set default configuration files and move all homeassistant_conf_files ynh_script_progression --message="Configuring the installation..." @@ -77,12 +79,14 @@ ynh_replace_string --match_string="__DATAPATH__" --replace_string="$data_path" - cp -r "../conf/homeassistant_conf_files/." "$data_path/.$app/" chown -R $app: "$data_path/.$app" chmod -R +x "$data_path/.$app/bin/" +ynh_print_info --message="$(whoami)" # setup up systemd service ynh_script_progression --message="Adding the dedicated service..." ynh_replace_string --match_string="__DATAPATH__" --replace_string="$data_path" --target_file="../conf/systemd.service" ynh_replace_string --match_string="__LOGFILE__" --replace_string="$log_file" --target_file="../conf/systemd.service" ynh_add_systemd_config --service="$app" +ynh_print_info --message="$(whoami)" ## add service in admin panel yunohost service add "$app" --log "$log_file" --description "Home Assistant server" --needs_exposed_ports $port From 5bfd645872a200e3a1fadb331c12bc27a2f803ee Mon Sep 17 00:00:00 2001 From: ewilly Date: Sun, 28 Nov 2021 14:47:09 +0100 Subject: [PATCH 21/37] Fix --- scripts/install | 8 ++------ scripts/upgrade | 4 ++-- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/scripts/install b/scripts/install index e5bbdd8..d5ad9a6 100644 --- a/scripts/install +++ b/scripts/install @@ -54,7 +54,7 @@ chown $app: "$final_path" # create a directory with its log file myynh_create_dir "$(dirname "$log_file")" touch "$log_file" -chown $app: "$log_file" +chown -R $app: "$(dirname "$log_file")" # create a directory for the datas of Home Assistant myynh_create_dir "$data_path/.$app" @@ -67,9 +67,7 @@ myynh_install_dependencies --python="$PY_REQUIRED_VERSION" # installation in a virtual environment ynh_script_progression --message="Installing Home Assistant in a virtual environment..." -ynh_print_info --message="$(whoami)" ynh_exec_fully_quiet myynh_install_homeassistant --path="$data_path" -ynh_print_info --message="$(whoami)" # set default configuration files and move all homeassistant_conf_files ynh_script_progression --message="Configuring the installation..." @@ -79,14 +77,12 @@ ynh_replace_string --match_string="__DATAPATH__" --replace_string="$data_path" - cp -r "../conf/homeassistant_conf_files/." "$data_path/.$app/" chown -R $app: "$data_path/.$app" chmod -R +x "$data_path/.$app/bin/" -ynh_print_info --message="$(whoami)" # setup up systemd service ynh_script_progression --message="Adding the dedicated service..." ynh_replace_string --match_string="__DATAPATH__" --replace_string="$data_path" --target_file="../conf/systemd.service" ynh_replace_string --match_string="__LOGFILE__" --replace_string="$log_file" --target_file="../conf/systemd.service" -ynh_add_systemd_config --service="$app" -ynh_print_info --message="$(whoami)" +ynh_add_systemd_config ## add service in admin panel yunohost service add "$app" --log "$log_file" --description "Home Assistant server" --needs_exposed_ports $port diff --git a/scripts/upgrade b/scripts/upgrade index b567fbd..1aead03 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -66,7 +66,7 @@ if [ ! -f "$log_file" ]; then # create a directory with its log file myynh_create_dir "$(dirname "$log_file")" touch "$log_file" - chown $app: "$log_file" + chown -R $app: "$(dirname "$log_file")" fi if [ -f "/etc/systemd/system/$app@$app.service" ]; then # remove old systemd service @@ -90,7 +90,7 @@ chmod -R +x "$data_path/.$app/bin/" ynh_script_progression --message="Adding the dedicated service..." ynh_replace_string --match_string="__DATAPATH__" --replace_string="$data_path" --target_file="../conf/systemd.service" ynh_replace_string --match_string="__LOGFILE__" --replace_string="$log_file" --target_file="../conf/systemd.service" -ynh_add_systemd_config --service="$app" +ynh_add_systemd_config # add service in admin panel yunohost service add "$app" --log "$log_file" --description "Home Assistant server" --needs_exposed_ports $port From f066806a46ef14e8512bf7b37f5de723fa43c171 Mon Sep 17 00:00:00 2001 From: ewilly Date: Sun, 28 Nov 2021 15:09:32 +0100 Subject: [PATCH 22/37] Fix --- scripts/install | 9 +++++---- scripts/upgrade | 9 +++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/scripts/install b/scripts/install index d5ad9a6..97a16ca 100644 --- a/scripts/install +++ b/scripts/install @@ -39,10 +39,6 @@ ynh_app_setting_set --app="$app" --key=data_path --value="$data_path" ynh_app_setting_set --app="$app" --key=log_file --value="$log_file" ynh_app_setting_set --app="$app" --key=path_url --value="$path_url" -# grant sudo permissions to the user to manage his own systemd service -myynh_create_dir "/etc/sudoers.d" -ynh_add_config --template="../conf/sudoers" --destination="/etc/sudoers.d/$app" - # create a dedicated system user ynh_script_progression --message="Creating dedicated user, rights and folders..." ynh_system_user_create --username="$app" @@ -78,6 +74,11 @@ cp -r "../conf/homeassistant_conf_files/." "$data_path/.$app/" chown -R $app: "$data_path/.$app" chmod -R +x "$data_path/.$app/bin/" +# grant sudo permissions to the user to manage his own systemd service +myynh_create_dir "/etc/sudoers.d" +ynh_add_config --template="../conf/sudoers" --destination="/etc/sudoers.d/$app" +chown -R root: "/etc/sudoers.d/$app" + # setup up systemd service ynh_script_progression --message="Adding the dedicated service..." ynh_replace_string --match_string="__DATAPATH__" --replace_string="$data_path" --target_file="../conf/systemd.service" diff --git a/scripts/upgrade b/scripts/upgrade index 1aead03..bfce734 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -42,10 +42,6 @@ if [ -f "/etc/yunohost/apps/$app/scripts/backup" ] ; then } fi -# grant sudo permissions to the user to manage his own systemd service -ynh_script_progression --message="Creating dedicated user, rights and folders..." -ynh_add_config --template="../conf/sudoers" --destination="/etc/sudoers.d/$app" - # build (if needed) & install Pyhton ynh_script_progression --message="Installing dependencies..." myynh_install_dependencies --python="$PY_REQUIRED_VERSION" @@ -92,6 +88,11 @@ ynh_replace_string --match_string="__DATAPATH__" --replace_string="$data_path" - ynh_replace_string --match_string="__LOGFILE__" --replace_string="$log_file" --target_file="../conf/systemd.service" ynh_add_systemd_config +# grant sudo permissions to the user to manage his own systemd service +ynh_script_progression --message="Creating dedicated user, rights and folders..." +ynh_add_config --template="../conf/sudoers" --destination="/etc/sudoers.d/$app" +chown -R root: "/etc/sudoers.d/$app" + # add service in admin panel yunohost service add "$app" --log "$log_file" --description "Home Assistant server" --needs_exposed_ports $port From 7cdc039ddfbae391666d17a869e79811de5b0d59 Mon Sep 17 00:00:00 2001 From: ewilly Date: Mon, 29 Nov 2021 20:31:10 +0100 Subject: [PATCH 23/37] Fix typo --- conf/systemd.service | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/systemd.service b/conf/systemd.service index f8c0ce3..8283c77 100644 --- a/conf/systemd.service +++ b/conf/systemd.service @@ -8,7 +8,7 @@ User=__APP__ WorkingDirectory=__DATAPATH__/.__APP__ ExecStart=__FINALPATH__/bin/hass --config "__DATAPATH__/.__APP__" --log-file "__LOGFILE__" --verbose -# Sandboxing options to harden security__DATA_PATH__ +# Sandboxing options to harden security # Depending on specificities of your service/app, you may need to tweak these # .. but this should be a good baseline # Details for these options: https://www.freedesktop.org/software/systemd/man/systemd.exec.html From 810d5bd4ab71f111bcb8dd2981ee6fc216e965df Mon Sep 17 00:00:00 2001 From: ewilly Date: Sun, 5 Dec 2021 13:57:12 +0100 Subject: [PATCH 24/37] Fix --- conf/systemd.service | 2 ++ 1 file changed, 2 insertions(+) diff --git a/conf/systemd.service b/conf/systemd.service index 8283c77..e75693b 100644 --- a/conf/systemd.service +++ b/conf/systemd.service @@ -7,6 +7,8 @@ Type=simple User=__APP__ WorkingDirectory=__DATAPATH__/.__APP__ ExecStart=__FINALPATH__/bin/hass --config "__DATAPATH__/.__APP__" --log-file "__LOGFILE__" --verbose +StandardOutput=append:__LOGFILE__ +StandardError=inherit # Sandboxing options to harden security # Depending on specificities of your service/app, you may need to tweak these From 3cb3ea13b0de6cd44909206c29789e6239b7500e Mon Sep 17 00:00:00 2001 From: ewilly Date: Mon, 6 Dec 2021 22:15:06 +0100 Subject: [PATCH 25/37] Remove unecessary ynh_replace_string --- conf/homeassistant_conf_files/configuration.yaml | 4 ++-- conf/systemd.service | 8 ++++---- scripts/install | 6 +----- scripts/upgrade | 2 -- 4 files changed, 7 insertions(+), 13 deletions(-) diff --git a/conf/homeassistant_conf_files/configuration.yaml b/conf/homeassistant_conf_files/configuration.yaml index 9897aee..557a568 100644 --- a/conf/homeassistant_conf_files/configuration.yaml +++ b/conf/homeassistant_conf_files/configuration.yaml @@ -1,7 +1,7 @@ homeassistant: auth_providers: - type: command_line - command: __DATAPATH__/.__APP__/bin/ynh_ldap-auth.sh + command: __DATA_PATH__/.__APP__/bin/ynh_ldap-auth.sh meta: true http: @@ -19,5 +19,5 @@ switch: - platform: command_line switches: upgrade_homeassistant: - command_on: "nohup bash -c __DATAPATH__/.__APP__/bin/upgrade_homeassistant.sh $1 > /dev/null 2>&1 &" + command_on: "nohup bash -c __DATA_PATH__/.__APP__/bin/upgrade_homeassistant.sh $1 > /dev/null 2>&1 &" friendly_name: Upgrade Home Assistant diff --git a/conf/systemd.service b/conf/systemd.service index e75693b..0b8330f 100644 --- a/conf/systemd.service +++ b/conf/systemd.service @@ -5,9 +5,9 @@ After=network.target [Service] Type=simple User=__APP__ -WorkingDirectory=__DATAPATH__/.__APP__ -ExecStart=__FINALPATH__/bin/hass --config "__DATAPATH__/.__APP__" --log-file "__LOGFILE__" --verbose -StandardOutput=append:__LOGFILE__ +WorkingDirectory=__DATA_PATH__/.__APP__ +ExecStart=__FINALPATH__/bin/hass --config "__DATA_PATH__/.__APP__" --log-file "__LOG_FILE__" --verbose +StandardOutput=append:__LOG_FILE__ StandardError=inherit # Sandboxing options to harden security @@ -24,7 +24,7 @@ DevicePolicy=closed ProtectSystem=full ProtectControlGroups=yes ProtectKernelModules=yes -ProtectKernelTunables=yes +# ProtectKernelTunables=yes LockPersonality=yes SystemCallFilter=~@clock @debug @module @mount @obsolete @reboot @setuid @swap diff --git a/scripts/install b/scripts/install index 97a16ca..0a1dd59 100644 --- a/scripts/install +++ b/scripts/install @@ -67,10 +67,8 @@ ynh_exec_fully_quiet myynh_install_homeassistant --path="$data_path" # set default configuration files and move all homeassistant_conf_files ynh_script_progression --message="Configuring the installation..." -ynh_replace_string --match_string="__PORT__" --replace_string="$port" --target_file="../conf/homeassistant_conf_files/configuration.yaml" -ynh_replace_string --match_string="__APP__" --replace_string="$app" --target_file="../conf/homeassistant_conf_files/configuration.yaml" -ynh_replace_string --match_string="__DATAPATH__" --replace_string="$data_path" --target_file="../conf/homeassistant_conf_files/configuration.yaml" cp -r "../conf/homeassistant_conf_files/." "$data_path/.$app/" +ynh_add_config --template="../conf/homeassistant_conf_files/configuration.yaml" --destination="$data_path/.$app/configuration.yaml" chown -R $app: "$data_path/.$app" chmod -R +x "$data_path/.$app/bin/" @@ -81,8 +79,6 @@ chown -R root: "/etc/sudoers.d/$app" # setup up systemd service ynh_script_progression --message="Adding the dedicated service..." -ynh_replace_string --match_string="__DATAPATH__" --replace_string="$data_path" --target_file="../conf/systemd.service" -ynh_replace_string --match_string="__LOGFILE__" --replace_string="$log_file" --target_file="../conf/systemd.service" ynh_add_systemd_config ## add service in admin panel diff --git a/scripts/upgrade b/scripts/upgrade index bfce734..e253200 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -84,8 +84,6 @@ chmod -R +x "$data_path/.$app/bin/" # setup up systemd service ynh_script_progression --message="Adding the dedicated service..." -ynh_replace_string --match_string="__DATAPATH__" --replace_string="$data_path" --target_file="../conf/systemd.service" -ynh_replace_string --match_string="__LOGFILE__" --replace_string="$log_file" --target_file="../conf/systemd.service" ynh_add_systemd_config # grant sudo permissions to the user to manage his own systemd service From b8586fad064e65f1afd420b184cb20438e6cb69f Mon Sep 17 00:00:00 2001 From: ewilly Date: Mon, 6 Dec 2021 22:22:11 +0100 Subject: [PATCH 26/37] Moving HA conf to HA home folder --- conf/homeassistant_conf_files/configuration.yaml | 4 ++-- conf/systemd.service | 4 ++-- scripts/install | 10 +++++----- scripts/restore | 2 +- scripts/upgrade | 8 ++++---- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/conf/homeassistant_conf_files/configuration.yaml b/conf/homeassistant_conf_files/configuration.yaml index 557a568..a500827 100644 --- a/conf/homeassistant_conf_files/configuration.yaml +++ b/conf/homeassistant_conf_files/configuration.yaml @@ -1,7 +1,7 @@ homeassistant: auth_providers: - type: command_line - command: __DATA_PATH__/.__APP__/bin/ynh_ldap-auth.sh + command: __DATA_PATH__/bin/ynh_ldap-auth.sh meta: true http: @@ -19,5 +19,5 @@ switch: - platform: command_line switches: upgrade_homeassistant: - command_on: "nohup bash -c __DATA_PATH__/.__APP__/bin/upgrade_homeassistant.sh $1 > /dev/null 2>&1 &" + command_on: "nohup bash -c __DATA_PATH__/bin/upgrade_homeassistant.sh $1 > /dev/null 2>&1 &" friendly_name: Upgrade Home Assistant diff --git a/conf/systemd.service b/conf/systemd.service index 0b8330f..a42c0db 100644 --- a/conf/systemd.service +++ b/conf/systemd.service @@ -5,8 +5,8 @@ After=network.target [Service] Type=simple User=__APP__ -WorkingDirectory=__DATA_PATH__/.__APP__ -ExecStart=__FINALPATH__/bin/hass --config "__DATA_PATH__/.__APP__" --log-file "__LOG_FILE__" --verbose +WorkingDirectory=__DATA_PATH__ +ExecStart=__FINALPATH__/bin/hass --config "__DATA_PATH__" --log-file "__LOG_FILE__" --verbose StandardOutput=append:__LOG_FILE__ StandardError=inherit diff --git a/scripts/install b/scripts/install index 0a1dd59..14cf165 100644 --- a/scripts/install +++ b/scripts/install @@ -53,7 +53,7 @@ touch "$log_file" chown -R $app: "$(dirname "$log_file")" # create a directory for the datas of Home Assistant -myynh_create_dir "$data_path/.$app" +myynh_create_dir "$data_path" myynh_create_dir "$data_path/.cache" chown -R $app: "$data_path" @@ -67,10 +67,10 @@ ynh_exec_fully_quiet myynh_install_homeassistant --path="$data_path" # set default configuration files and move all homeassistant_conf_files ynh_script_progression --message="Configuring the installation..." -cp -r "../conf/homeassistant_conf_files/." "$data_path/.$app/" -ynh_add_config --template="../conf/homeassistant_conf_files/configuration.yaml" --destination="$data_path/.$app/configuration.yaml" -chown -R $app: "$data_path/.$app" -chmod -R +x "$data_path/.$app/bin/" +cp -r "../conf/homeassistant_conf_files/." "$data_path/" +ynh_add_config --template="../conf/homeassistant_conf_files/configuration.yaml" --destination="$data_path/configuration.yaml" +chown -R $app: "$data_path" +chmod -R +x "$data_path/bin/" # grant sudo permissions to the user to manage his own systemd service myynh_create_dir "/etc/sudoers.d" diff --git a/scripts/restore b/scripts/restore index 4fafe50..5bc9e6e 100644 --- a/scripts/restore +++ b/scripts/restore @@ -46,7 +46,7 @@ chown -R $app: "$final_path" ynh_script_progression --message="Restoring the data..." ynh_restore_file --origin_path="$data_path" chown -R $app: "$data_path" -chmod -R +x "$data_path/.$app/bin" +chmod -R +x "$data_path/bin" # restore log ynh_script_progression --message="Restoring the app..." diff --git a/scripts/upgrade b/scripts/upgrade index e253200..d603e4b 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -55,7 +55,7 @@ ynh_script_progression --message="If needed, migrating to new app architecture.. if [ ! -d "$data_path" ]; then # move $data_path to new directory mv "/""home""/$app" "$data_path" - ynh_replace_string --match_string="/home/homeassistant/.homeassistant" --replace_string="$data_path/.$app" --target_file="$data_path/.$app/configuration.yaml" + ynh_replace_string --match_string="/home/homeassistant/.homeassistant" --replace_string="$data_path" --target_file="$data_path/configuration.yaml" chown -R $app: "$data_path" fi if [ ! -f "$log_file" ]; then @@ -78,9 +78,9 @@ ynh_exec_fully_quiet myynh_install_homeassistant --path="$data_path" # update script in bin ynh_script_progression --message="Updating YunoHost script used by homeassitant..." -cp -r "../conf/homeassistant_conf_files/bin/." "$data_path/.$app/bin/" -chown -R $app: "$data_path/.$app/bin" -chmod -R +x "$data_path/.$app/bin/" +cp -r "../conf/homeassistant_conf_files/bin/." "$data_path/bin/" +chown -R $app: "$data_path/bin" +chmod -R +x "$data_path/bin/" # setup up systemd service ynh_script_progression --message="Adding the dedicated service..." From 77c1e690c9d1f1a69f01df19c6eeab11cebdc6cb Mon Sep 17 00:00:00 2001 From: ewilly Date: Tue, 7 Dec 2021 08:44:15 +0100 Subject: [PATCH 27/37] Remove pip cache dir --- .../bin/upgrade_homeassistant.sh | 9 +++------ scripts/_common.sh | 12 ++---------- scripts/install | 2 +- scripts/upgrade | 4 +++- 4 files changed, 9 insertions(+), 18 deletions(-) diff --git a/conf/homeassistant_conf_files/bin/upgrade_homeassistant.sh b/conf/homeassistant_conf_files/bin/upgrade_homeassistant.sh index 5bd35f1..de7670b 100755 --- a/conf/homeassistant_conf_files/bin/upgrade_homeassistant.sh +++ b/conf/homeassistant_conf_files/bin/upgrade_homeassistant.sh @@ -49,16 +49,13 @@ $MY_PYTHON -m venv "$final_path" # activate the virtual environment source "$final_path/bin/activate" -# install last version of pip -pip install --upgrade pip - # install last version of wheel -pip install --upgrade wheel +pip --no-cache-dir install --upgrade wheel # upgrade homeassistant python package -pip install --upgrade $app +pip --no-cache-dir install --upgrade $app # restart homeassistant systemd service -sudo systemctl restart $app@$app.service +sudo systemctl restart $app.service exit 0 diff --git a/scripts/_common.sh b/scripts/_common.sh index db4736f..15edd5a 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -124,23 +124,15 @@ myynh_install_dependencies () { } # Install/Upgrade Homeassistant in virtual environement -# | arg: -p, --path= - the parent path of cache directory myynh_install_homeassistant () { - # Declare an array to define the options of this helper. - local legacy_args=u - local -A args_array=( [p]=path= ) - local path - # Manage arguments with getopts - ynh_handle_getopts_args "$@" - ynh_exec_as $app -H -s /bin/bash -c " \ echo 'create the virtual environment' \ && $MY_PYTHON -m venv "$final_path" \ && echo 'activate the virtual environment' \ && source "$final_path/bin/activate" \ && echo 'install last version of wheel' \ - && pip --cache-dir "$path/.cache" install --upgrade wheel \ + && pip --no-cache-dir install --upgrade wheel \ && echo 'install Home Assistant' \ - && pip --cache-dir "$path/.cache" install --upgrade $app==$VERSION \ + && pip --no-cache-dir install --upgrade $app==$VERSION \ " } diff --git a/scripts/install b/scripts/install index 14cf165..a34a207 100644 --- a/scripts/install +++ b/scripts/install @@ -63,7 +63,7 @@ myynh_install_dependencies --python="$PY_REQUIRED_VERSION" # installation in a virtual environment ynh_script_progression --message="Installing Home Assistant in a virtual environment..." -ynh_exec_fully_quiet myynh_install_homeassistant --path="$data_path" +ynh_exec_fully_quiet myynh_install_homeassistant # set default configuration files and move all homeassistant_conf_files ynh_script_progression --message="Configuring the installation..." diff --git a/scripts/upgrade b/scripts/upgrade index d603e4b..3d8f5b2 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -53,6 +53,8 @@ ynh_systemd_action --service_name="$app" --action=stop --line_match="Stopped Hom # migrate to new app architecture ynh_script_progression --message="If needed, migrating to new app architecture..." if [ ! -d "$data_path" ]; then + # remove pip cache + ynh_secure_remove --file="/home/homeassistant/.cache" # move $data_path to new directory mv "/""home""/$app" "$data_path" ynh_replace_string --match_string="/home/homeassistant/.homeassistant" --replace_string="$data_path" --target_file="$data_path/configuration.yaml" @@ -74,7 +76,7 @@ fi # installation in a virtual environment ynh_script_progression --message="Installing Home Assistant in a virtual environment..." -ynh_exec_fully_quiet myynh_install_homeassistant --path="$data_path" +ynh_exec_fully_quiet myynh_install_homeassistant # update script in bin ynh_script_progression --message="Updating YunoHost script used by homeassitant..." From 996edf6b89bdfed3fd0f1b91e3295a5610ff0b59 Mon Sep 17 00:00:00 2001 From: ewilly Date: Tue, 7 Dec 2021 09:02:05 +0100 Subject: [PATCH 28/37] Upgrade onboarding to v4 --- conf/homeassistant_conf_files/.storage/onboarding | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/conf/homeassistant_conf_files/.storage/onboarding b/conf/homeassistant_conf_files/.storage/onboarding index b92aa42..9677c86 100644 --- a/conf/homeassistant_conf_files/.storage/onboarding +++ b/conf/homeassistant_conf_files/.storage/onboarding @@ -1,11 +1,12 @@ { + "version": 4, + "key": "onboarding", "data": { "done": [ "user", "core_config", + "analytics", "integration" ] - }, - "key": "onboarding", - "version": 3 + } } From ffa53e5d4559a2360558f85b7033182921f484ce Mon Sep 17 00:00:00 2001 From: ewilly Date: Tue, 7 Dec 2021 17:29:01 +0100 Subject: [PATCH 29/37] Move final path to var_www --- conf/homeassistant_conf_files/bin/upgrade_homeassistant.sh | 2 +- scripts/install | 2 +- scripts/upgrade | 7 ++++++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/conf/homeassistant_conf_files/bin/upgrade_homeassistant.sh b/conf/homeassistant_conf_files/bin/upgrade_homeassistant.sh index de7670b..1de83bb 100755 --- a/conf/homeassistant_conf_files/bin/upgrade_homeassistant.sh +++ b/conf/homeassistant_conf_files/bin/upgrade_homeassistant.sh @@ -8,7 +8,7 @@ DEBUG=0 # define usefull variables app="homeassistant" -final_path="/opt/yunohost/$app" +final_path="/var/www/$app" ########## END OF CONFIGURATION ########## diff --git a/scripts/install b/scripts/install index a34a207..1b52cef 100644 --- a/scripts/install +++ b/scripts/install @@ -15,7 +15,7 @@ domain=$YNH_APP_ARG_DOMAIN is_public=$YNH_APP_ARG_IS_PUBLIC # definie useful vars -final_path="/opt/yunohost/$app" +final_path="/var/www/$app" data_path="/home/yunohost.app/$app" log_file="/var/log/$app/$app.log" path_url="/" diff --git a/scripts/upgrade b/scripts/upgrade index 3d8f5b2..9a52847 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -16,7 +16,7 @@ port=$(ynh_app_setting_get --app="$app" --key=port) # definie useful vars if [ -z $(ynh_app_setting_get --app="$app" --key=final_path) ]; then - final_path="/opt/yunohost/$app" + final_path="/var/www/$app" data_path="/home/yunohost.app/$app" log_file="/var/log/$app/$app.log" path_url="/" @@ -52,6 +52,11 @@ ynh_systemd_action --service_name="$app" --action=stop --line_match="Stopped Hom # migrate to new app architecture ynh_script_progression --message="If needed, migrating to new app architecture..." +if [ ! -d "$final_path" ]; then + # move $final_path to new directory + mv "/opt/yunohost/$app" "$final_path" + chown -R $app: "$final_path" +fi if [ ! -d "$data_path" ]; then # remove pip cache ynh_secure_remove --file="/home/homeassistant/.cache" From e59e463e3d9e17fda6a38b5ebb4254d3ebfc1872 Mon Sep 17 00:00:00 2001 From: ewilly Date: Tue, 7 Dec 2021 20:47:31 +0100 Subject: [PATCH 30/37] Fix permissions --- scripts/_common.sh | 16 ++++++++++++++++ scripts/install | 12 ++++-------- scripts/restore | 12 +++--------- scripts/upgrade | 9 +++------ 4 files changed, 26 insertions(+), 23 deletions(-) diff --git a/scripts/_common.sh b/scripts/_common.sh index 15edd5a..8e8e0bd 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -136,3 +136,19 @@ myynh_install_homeassistant () { && pip --no-cache-dir install --upgrade $app==$VERSION \ " } + +# Set permissions +myynh_set_permissions () { + chown -R $app: "$final_path" + chmod 750 "$final_path" + chmod -R o-rwx "$final_path" + + chown -R $app: "$data_path" + chmod 750 "$data_path" + chmod -R o-rwx "$data_path" + chmod -R +x "$data_path/bin/" + + chown -R $app: "$(dirname "$log_file")" + + chown -R root: "/etc/sudoers.d/$app" +} diff --git a/scripts/install b/scripts/install index 1b52cef..5348086 100644 --- a/scripts/install +++ b/scripts/install @@ -45,17 +45,13 @@ ynh_system_user_create --username="$app" # create a directory for the installation of Home Assistant myynh_create_dir "$final_path" -chown $app: "$final_path" # create a directory with its log file myynh_create_dir "$(dirname "$log_file")" touch "$log_file" -chown -R $app: "$(dirname "$log_file")" # create a directory for the datas of Home Assistant myynh_create_dir "$data_path" -myynh_create_dir "$data_path/.cache" -chown -R $app: "$data_path" # build (if needed) & install Pyhton ynh_script_progression --message="Installing dependencies..." @@ -69,21 +65,21 @@ ynh_exec_fully_quiet myynh_install_homeassistant ynh_script_progression --message="Configuring the installation..." cp -r "../conf/homeassistant_conf_files/." "$data_path/" ynh_add_config --template="../conf/homeassistant_conf_files/configuration.yaml" --destination="$data_path/configuration.yaml" -chown -R $app: "$data_path" -chmod -R +x "$data_path/bin/" # grant sudo permissions to the user to manage his own systemd service myynh_create_dir "/etc/sudoers.d" ynh_add_config --template="../conf/sudoers" --destination="/etc/sudoers.d/$app" -chown -R root: "/etc/sudoers.d/$app" # setup up systemd service ynh_script_progression --message="Adding the dedicated service..." ynh_add_systemd_config -## add service in admin panel +# add service in admin panel yunohost service add "$app" --log "$log_file" --description "Home Assistant server" --needs_exposed_ports $port +# set permissions +myynh_set_permissions + # start systemd service ynh_script_progression --message="Starting the Home Assistant server..." ynh_systemd_action --service_name="$app" --action=start --line_match="Home Assistant initialized" --log_path="$log_file" --timeout=3600 diff --git a/scripts/restore b/scripts/restore index 5bc9e6e..b6dd55c 100644 --- a/scripts/restore +++ b/scripts/restore @@ -40,18 +40,14 @@ ynh_restore_file --origin_path="/etc/sudoers.d/$app" # restore source ynh_script_progression --message="Restoring the app..." ynh_restore_file --origin_path="$final_path" -chown -R $app: "$final_path" # restore data ynh_script_progression --message="Restoring the data..." ynh_restore_file --origin_path="$data_path" -chown -R $app: "$data_path" -chmod -R +x "$data_path/bin" # restore log ynh_script_progression --message="Restoring the app..." ynh_restore_file --origin_path="$(dirname "$log_file")" -chown -R $app: "$log_file" # add required packages ynh_script_progression --message="Restoring the packages dependencies..." @@ -64,6 +60,9 @@ ynh_restore_file --origin_path="/etc/systemd/system/$app.service" # add service in admin panel yunohost service add "$app" --log "$log_file" --description "Home Assistant server" --needs_exposed_ports $port +# set permissions +myynh_set_permissions + # restart the app ynh_script_progression --message="Starting the Home Assistant server..." sed --in-place "/ExecStart/s/$/ --verbose/" "/etc/systemd/system/$app.service" @@ -82,11 +81,6 @@ ynh_restore_file --origin_path="/etc/logrotate.d/$app" # restore nginx ynh_script_progression --message="Restoring nginx web server..." ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" - -sleep 10s #Only necessary for CI test otherwise curl failed to nginx page - ynh_systemd_action --service_name=nginx --action=reload -sleep 10s #Only necessary for CI test otherwise curl failed to nginx page - ynh_script_progression --message="Recovery of $app completed" --last diff --git a/scripts/upgrade b/scripts/upgrade index 9a52847..2a87702 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -55,7 +55,6 @@ ynh_script_progression --message="If needed, migrating to new app architecture.. if [ ! -d "$final_path" ]; then # move $final_path to new directory mv "/opt/yunohost/$app" "$final_path" - chown -R $app: "$final_path" fi if [ ! -d "$data_path" ]; then # remove pip cache @@ -63,13 +62,11 @@ if [ ! -d "$data_path" ]; then # move $data_path to new directory mv "/""home""/$app" "$data_path" ynh_replace_string --match_string="/home/homeassistant/.homeassistant" --replace_string="$data_path" --target_file="$data_path/configuration.yaml" - chown -R $app: "$data_path" fi if [ ! -f "$log_file" ]; then # create a directory with its log file myynh_create_dir "$(dirname "$log_file")" touch "$log_file" - chown -R $app: "$(dirname "$log_file")" fi if [ -f "/etc/systemd/system/$app@$app.service" ]; then # remove old systemd service @@ -86,8 +83,6 @@ ynh_exec_fully_quiet myynh_install_homeassistant # update script in bin ynh_script_progression --message="Updating YunoHost script used by homeassitant..." cp -r "../conf/homeassistant_conf_files/bin/." "$data_path/bin/" -chown -R $app: "$data_path/bin" -chmod -R +x "$data_path/bin/" # setup up systemd service ynh_script_progression --message="Adding the dedicated service..." @@ -96,11 +91,13 @@ ynh_add_systemd_config # grant sudo permissions to the user to manage his own systemd service ynh_script_progression --message="Creating dedicated user, rights and folders..." ynh_add_config --template="../conf/sudoers" --destination="/etc/sudoers.d/$app" -chown -R root: "/etc/sudoers.d/$app" # add service in admin panel yunohost service add "$app" --log "$log_file" --description "Home Assistant server" --needs_exposed_ports $port +# set permissions +myynh_set_permissions + # start systemd service ynh_script_progression --message="Starting the Home Assistant server..." systemctl daemon-reload From cb40e4e59c9b7360811b82e965e3136cafb7bd6f Mon Sep 17 00:00:00 2001 From: ewilly Date: Tue, 7 Dec 2021 21:11:30 +0100 Subject: [PATCH 31/37] Fix --- conf/homeassistant_conf_files/bin/upgrade_homeassistant.sh | 5 +++-- scripts/_common.sh | 4 ++-- scripts/install | 2 +- scripts/upgrade | 4 ++-- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/conf/homeassistant_conf_files/bin/upgrade_homeassistant.sh b/conf/homeassistant_conf_files/bin/upgrade_homeassistant.sh index 1de83bb..36e08c5 100755 --- a/conf/homeassistant_conf_files/bin/upgrade_homeassistant.sh +++ b/conf/homeassistant_conf_files/bin/upgrade_homeassistant.sh @@ -9,6 +9,7 @@ DEBUG=0 # define usefull variables app="homeassistant" final_path="/var/www/$app" +data_path="/home/yunohost.app/$app" ########## END OF CONFIGURATION ########## @@ -50,10 +51,10 @@ $MY_PYTHON -m venv "$final_path" source "$final_path/bin/activate" # install last version of wheel -pip --no-cache-dir install --upgrade wheel +pip --cache-dir "$data_path/.cache" install --upgrade wheel # upgrade homeassistant python package -pip --no-cache-dir install --upgrade $app +pip --cache-dir "$data_path/.cache" install --upgrade $app # restart homeassistant systemd service sudo systemctl restart $app.service diff --git a/scripts/_common.sh b/scripts/_common.sh index 8e8e0bd..98af024 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -131,9 +131,9 @@ myynh_install_homeassistant () { && echo 'activate the virtual environment' \ && source "$final_path/bin/activate" \ && echo 'install last version of wheel' \ - && pip --no-cache-dir install --upgrade wheel \ + && pip --cache-dir "$data_path/.cache" install --upgrade wheel \ && echo 'install Home Assistant' \ - && pip --no-cache-dir install --upgrade $app==$VERSION \ + && pip --cache-dir "$data_path/.cache" install --upgrade $app==$VERSION \ " } diff --git a/scripts/install b/scripts/install index 5348086..a5ad85f 100644 --- a/scripts/install +++ b/scripts/install @@ -51,7 +51,7 @@ myynh_create_dir "$(dirname "$log_file")" touch "$log_file" # create a directory for the datas of Home Assistant -myynh_create_dir "$data_path" +myynh_create_dir "$data_path/.cache" # build (if needed) & install Pyhton ynh_script_progression --message="Installing dependencies..." diff --git a/scripts/upgrade b/scripts/upgrade index 2a87702..681a6e5 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -57,10 +57,10 @@ if [ ! -d "$final_path" ]; then mv "/opt/yunohost/$app" "$final_path" fi if [ ! -d "$data_path" ]; then - # remove pip cache - ynh_secure_remove --file="/home/homeassistant/.cache" # move $data_path to new directory mv "/""home""/$app" "$data_path" + mv "$data_path/.$app/." "$data_path" + rmdir "$data_path/.$app" ynh_replace_string --match_string="/home/homeassistant/.homeassistant" --replace_string="$data_path" --target_file="$data_path/configuration.yaml" fi if [ ! -f "$log_file" ]; then From a622b599605ca4a354c49afdf651ad599cd7b581 Mon Sep 17 00:00:00 2001 From: ewilly Date: Tue, 7 Dec 2021 21:21:38 +0100 Subject: [PATCH 32/37] Fix --- scripts/install | 2 ++ scripts/upgrade | 2 ++ 2 files changed, 4 insertions(+) diff --git a/scripts/install b/scripts/install index a5ad85f..2321a9e 100644 --- a/scripts/install +++ b/scripts/install @@ -45,6 +45,7 @@ ynh_system_user_create --username="$app" # create a directory for the installation of Home Assistant myynh_create_dir "$final_path" +chown -R $app: "$final_path" # create a directory with its log file myynh_create_dir "$(dirname "$log_file")" @@ -52,6 +53,7 @@ touch "$log_file" # create a directory for the datas of Home Assistant myynh_create_dir "$data_path/.cache" +chown -R $app: "$data_path" # build (if needed) & install Pyhton ynh_script_progression --message="Installing dependencies..." diff --git a/scripts/upgrade b/scripts/upgrade index 681a6e5..392f16e 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -55,6 +55,7 @@ ynh_script_progression --message="If needed, migrating to new app architecture.. if [ ! -d "$final_path" ]; then # move $final_path to new directory mv "/opt/yunohost/$app" "$final_path" + chown -R $app: "$final_path" fi if [ ! -d "$data_path" ]; then # move $data_path to new directory @@ -62,6 +63,7 @@ if [ ! -d "$data_path" ]; then mv "$data_path/.$app/." "$data_path" rmdir "$data_path/.$app" ynh_replace_string --match_string="/home/homeassistant/.homeassistant" --replace_string="$data_path" --target_file="$data_path/configuration.yaml" + chown -R $app: "$data_path" fi if [ ! -f "$log_file" ]; then # create a directory with its log file From 1bdcbe6ff52b930f394e89f1e766fcc5aa19297f Mon Sep 17 00:00:00 2001 From: ewilly Date: Tue, 7 Dec 2021 22:03:23 +0100 Subject: [PATCH 33/37] Fix --- scripts/upgrade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/upgrade b/scripts/upgrade index 392f16e..dd085ca 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -60,7 +60,7 @@ fi if [ ! -d "$data_path" ]; then # move $data_path to new directory mv "/""home""/$app" "$data_path" - mv "$data_path/.$app/." "$data_path" + mv "$data_path/.$app/.*" "$data_path/" rmdir "$data_path/.$app" ynh_replace_string --match_string="/home/homeassistant/.homeassistant" --replace_string="$data_path" --target_file="$data_path/configuration.yaml" chown -R $app: "$data_path" From 6e06056f476516f58f271652ec7331e4415d1542 Mon Sep 17 00:00:00 2001 From: ewilly Date: Tue, 7 Dec 2021 22:09:40 +0100 Subject: [PATCH 34/37] Fix --- scripts/upgrade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/upgrade b/scripts/upgrade index dd085ca..3f47ce2 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -60,7 +60,7 @@ fi if [ ! -d "$data_path" ]; then # move $data_path to new directory mv "/""home""/$app" "$data_path" - mv "$data_path/.$app/.*" "$data_path/" + mv "$data_path/.$app/{.,}*" "$data_path/" rmdir "$data_path/.$app" ynh_replace_string --match_string="/home/homeassistant/.homeassistant" --replace_string="$data_path" --target_file="$data_path/configuration.yaml" chown -R $app: "$data_path" From 40cb16ca26b57f59773a11ab02eb3c9cf211ee2b Mon Sep 17 00:00:00 2001 From: ewilly Date: Tue, 7 Dec 2021 22:32:23 +0100 Subject: [PATCH 35/37] Fix --- scripts/upgrade | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/upgrade b/scripts/upgrade index 3f47ce2..0040e5f 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -61,6 +61,7 @@ if [ ! -d "$data_path" ]; then # move $data_path to new directory mv "/""home""/$app" "$data_path" mv "$data_path/.$app/{.,}*" "$data_path/" + find "$data_path/.$app" -maxdepth 1 -mindepth 1 -exec mv {} "$data_path" \; rmdir "$data_path/.$app" ynh_replace_string --match_string="/home/homeassistant/.homeassistant" --replace_string="$data_path" --target_file="$data_path/configuration.yaml" chown -R $app: "$data_path" From f54210c14ee3ea30ecb7243922061bc73e8f9321 Mon Sep 17 00:00:00 2001 From: ewilly Date: Tue, 7 Dec 2021 22:39:07 +0100 Subject: [PATCH 36/37] Fix --- scripts/upgrade | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/upgrade b/scripts/upgrade index 0040e5f..1461ec1 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -60,7 +60,6 @@ fi if [ ! -d "$data_path" ]; then # move $data_path to new directory mv "/""home""/$app" "$data_path" - mv "$data_path/.$app/{.,}*" "$data_path/" find "$data_path/.$app" -maxdepth 1 -mindepth 1 -exec mv {} "$data_path" \; rmdir "$data_path/.$app" ynh_replace_string --match_string="/home/homeassistant/.homeassistant" --replace_string="$data_path" --target_file="$data_path/configuration.yaml" From ce621c1208b9db57ebdabde037e51b6e49173675 Mon Sep 17 00:00:00 2001 From: ewilly Date: Tue, 7 Dec 2021 22:42:52 +0100 Subject: [PATCH 37/37] Fix --- scripts/upgrade | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/scripts/upgrade b/scripts/upgrade index 1461ec1..d75fd2d 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -52,6 +52,13 @@ ynh_systemd_action --service_name="$app" --action=stop --line_match="Stopped Hom # migrate to new app architecture ynh_script_progression --message="If needed, migrating to new app architecture..." +if [ -f "/etc/systemd/system/$app@$app.service" ]; then + # remove old systemd service + if ynh_exec_warn_less yunohost service status "$app@$app" >/dev/null ; then + yunohost service remove "$app@$app" + fi + ynh_remove_systemd_config --service="$app@$app" +fi if [ ! -d "$final_path" ]; then # move $final_path to new directory mv "/opt/yunohost/$app" "$final_path" @@ -70,13 +77,6 @@ if [ ! -f "$log_file" ]; then myynh_create_dir "$(dirname "$log_file")" touch "$log_file" fi -if [ -f "/etc/systemd/system/$app@$app.service" ]; then - # remove old systemd service - if ynh_exec_warn_less yunohost service status "$app@$app" >/dev/null ; then - yunohost service remove "$app@$app" - fi - ynh_remove_systemd_config --service="$app@$app" -fi # installation in a virtual environment ynh_script_progression --message="Installing Home Assistant in a virtual environment..."