From ba39fc8bf76943a06bb6abdd5925fff5ac55acb5 Mon Sep 17 00:00:00 2001 From: JensDiemer Date: Mon, 7 Dec 2020 16:20:37 +0100 Subject: [PATCH] init --- .gitignore | 3 + LICENSE | 8 +- README.md | 56 +++++++ conf/gunicorn.conf.py | 19 +++ conf/manage.py | 14 ++ conf/nginx.conf | 38 +++++ conf/pyinventory.service | 17 +++ conf/secret.txt | 1 + conf/wsgi.py | 9 ++ conf/ynh_pyinventory_settings.py | 134 +++++++++++++++++ manifest.json | 71 +++++++++ scripts/_common.sh | 146 ++++++++++++++++++ scripts/backup | 79 ++++++++++ scripts/change_url | 153 +++++++++++++++++++ scripts/install | 251 +++++++++++++++++++++++++++++++ scripts/remove | 103 +++++++++++++ scripts/restore | 133 ++++++++++++++++ scripts/upgrade | 250 ++++++++++++++++++++++++++++++ 18 files changed, 1481 insertions(+), 4 deletions(-) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 conf/gunicorn.conf.py create mode 100755 conf/manage.py create mode 100644 conf/nginx.conf create mode 100644 conf/pyinventory.service create mode 100644 conf/secret.txt create mode 100644 conf/wsgi.py create mode 100644 conf/ynh_pyinventory_settings.py create mode 100644 manifest.json create mode 100644 scripts/_common.sh create mode 100755 scripts/backup create mode 100644 scripts/change_url create mode 100755 scripts/install create mode 100755 scripts/remove create mode 100755 scripts/restore create mode 100755 scripts/upgrade diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d226724 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.* +!.gitignore +__pycache__ \ No newline at end of file diff --git a/LICENSE b/LICENSE index f288702..94a9ed0 100644 --- a/LICENSE +++ b/LICENSE @@ -1,7 +1,7 @@ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 - Copyright (C) 2007 Free Software Foundation, Inc. + Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -645,7 +645,7 @@ the "copyright" line and a pointer to where the full notice is found. GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see . + along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. @@ -664,11 +664,11 @@ might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see -. +. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read -. +. diff --git a/README.md b/README.md new file mode 100644 index 0000000..24b650d --- /dev/null +++ b/README.md @@ -0,0 +1,56 @@ +# PyInventory for YunoHost + +[![Integration level](https://dash.yunohost.org/integration/pyinventory.svg)](https://dash.yunohost.org/appci/app/pyinventory) ![](https://ci-apps.yunohost.org/ci/badges/pyinventory.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/pyinventory.maintain.svg) +[![Install PyInventory with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=pyinventory) + +> *This package allows you to install PyInventory 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.* + +Current status is pre-alpha: This app doesn't work, yet ;) + +Pull requests welcome ;) + +## Overview + +PyInventory is a libre web-based management to catalog things including state and location etc. using Python/Django. + +## Screenshots + +![](https://raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/PyInventory/PyInventory%20v0.2.0%20screenshot%201.png) +![](https://raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/PyInventory/PyInventory%20v0.1.0%20screenshot%202.png) +![](https://raw.githubusercontent.com/jedie/jedie.github.io/master/screenshots/PyInventory/PyInventory%20v0.1.0%20screenshot%203.png) + +## Admin account + +An admin user is created at installation, the login is what you provided at installation, the password is **pyinventory**. + +## Settings and upgrades + +Almost everything related to PyInventory's configuration is handled in a `"../conf/ynh_pyinventory_settings.py"` file. +You can edit the file `$final_path/local_settings.py` to enable or disable features. + +# Miscellaneous + +## LDAP connexion + +TODO: https://github.com/django-auth-ldap/django-auth-ldap + +## Links + + * Report a bug about this package: https://github.com/jedie/pyinventory_ynh + * Report a bug about PyInventory itself: https://github.com/jedie/PyInventory + * YunoHost website: https://yunohost.org/ + +--- + +Developer info +---------------- + +Please send your pull request to https://github.com/jedie/pyinventory_ynh + +Try e.g.: +``` +sudo yunohost app install https://github.com/jedie/pyinventory_ynh/tree/main --debug +or +sudo yunohost app upgrade pyinventory -u https://github.com/jedie/pyinventory_ynh/tree/main --debug +``` diff --git a/conf/gunicorn.conf.py b/conf/gunicorn.conf.py new file mode 100644 index 0000000..88cb667 --- /dev/null +++ b/conf/gunicorn.conf.py @@ -0,0 +1,19 @@ +""" + Configuration for Gunicorn +""" +import multiprocessing + + +bind = '127.0.0.1:__PORT__' + +# https://docs.gunicorn.org/en/latest/settings.html#workers +workers = multiprocessing.cpu_count() * 2 + 1 + +# https://docs.gunicorn.org/en/latest/settings.html#logging +loglevel = 'info' + +# https://docs.gunicorn.org/en/latest/settings.html#syslog +syslog = True + +# https://docs.gunicorn.org/en/latest/settings.html#pidfile +pidfile = '__FINAL_HOME_PATH__/gunicorn.pid' diff --git a/conf/manage.py b/conf/manage.py new file mode 100755 index 0000000..944c2a6 --- /dev/null +++ b/conf/manage.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python3 + +import os +import sys + + +def main(): + os.environ['DJANGO_SETTINGS_MODULE'] = 'ynh_pyinventory_settings' + from django.core.management import execute_from_command_line + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main() diff --git a/conf/nginx.conf b/conf/nginx.conf new file mode 100644 index 0000000..a308033 --- /dev/null +++ b/conf/nginx.conf @@ -0,0 +1,38 @@ + +location /static/ { + alias __PUBLIC_PATH__/static/; + expires 30d; +} + +# TODO: django-sendfile2: +#location __PATH__/media/ { +# # DATA_DIR/media/ +# alias __PUBLIC_PATH__/media/; +# expires 30d; +#} + +location / { + # this is needed if you have file import via upload enabled + client_max_body_size 100M; + + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Protocol $scheme; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Cert-Hash $ssl_client_fingerprint; + proxy_set_header X-SSL-Protocol $ssl_protocol; + proxy_set_header X-Scheme $scheme; + + proxy_read_timeout 30; + proxy_send_timeout 30; + proxy_connect_timeout 30; + proxy_redirect off; + + set $upstream http://127.0.0.1:__PORT__/; + proxy_pass $upstream; + + # Include SSOWAT user panel. + #include conf.d/yunohost_panel.conf.inc; +} diff --git a/conf/pyinventory.service b/conf/pyinventory.service new file mode 100644 index 0000000..858b289 --- /dev/null +++ b/conf/pyinventory.service @@ -0,0 +1,17 @@ +[Unit] +Description=PyInventory application server +After=redis.service postgresql.service + +[Service] +User=__APP__ +Group=__APP__ +WorkingDirectory=__FINALPATH__/ + +ExecStart=__FINALPATH__/virtualenv/bin/gunicorn --config __FINALPATH__/gunicorn.conf.py wsgi + +StandardOutput=syslog +StandardError=syslog +SyslogIdentifier=__APP__-server + +[Install] +WantedBy=multi-user.target diff --git a/conf/secret.txt b/conf/secret.txt new file mode 100644 index 0000000..f47048a --- /dev/null +++ b/conf/secret.txt @@ -0,0 +1 @@ +Dihmi_RjizdIJsCMt0y6UbRhtYyzegbBx6BF4MDzC_WIS1iNBkXQcWSlN049hfkJbdkBGPjczk79qONSfF5JfZ-SnXyzB7_7ZVZyTvDY_6jLAw0FIfH-vQzH4ETy8_FYfY7Mj3e2YJqZ_jJiR-WgBO2F2WE__yqiSlQ-8LFhHZI \ No newline at end of file diff --git a/conf/wsgi.py b/conf/wsgi.py new file mode 100644 index 0000000..d9598cf --- /dev/null +++ b/conf/wsgi.py @@ -0,0 +1,9 @@ +""" + WSGI config +""" + + +from django.core.wsgi import get_wsgi_application + + +application = get_wsgi_application() diff --git a/conf/ynh_pyinventory_settings.py b/conf/ynh_pyinventory_settings.py new file mode 100644 index 0000000..e7f2f09 --- /dev/null +++ b/conf/ynh_pyinventory_settings.py @@ -0,0 +1,134 @@ +################################################################################ +################################################################################ + +# Please do not modify this file, it will be reset at the next update. +# You can edit the file __FINAL_HOME_PATH__/local_settings.py and add/modify the settings you need. +# The parameters you add in local_settings.py will overwrite these, +# but you can use the options and documentation in this file to find out what can be done. + +################################################################################ +################################################################################ +from logging.handlers import SysLogHandler +from pathlib import Path as __Path + +from inventory_project.settings.base import * # noqa + +DEBUG = False + +# ----------------------------------------------------------------------------- + +FINAL_HOME_PATH = '__FINAL_HOME_PATH__' +FINAL_WWW_PATH = '__FINAL_WWW_PATH__' + +# ----------------------------------------------------------------------------- + +ADMINS = ( + ('__ADMIN__', '__ADMINMAIL__'), +) + +MANAGERS = ADMINS + +SECRET_KEY = '__KEY__' + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.postgresql', + 'NAME': '__APP__', + 'USER': '__APP__', + 'PASSWORD': '__DB_PWD__', + 'HOST': '127.0.0.1', + 'PORT': '5432', # Default Postgres Port + 'CONN_MAX_AGE': 600, + } +} + +# Title of site to use +SITE_TITLE = '__APP__' + +# Site domain +SITE_DOMAIN = '__DOMAIN__' + +# Subject of emails includes site title +EMAIL_SUBJECT_PREFIX = f'[{SITE_TITLE}] ' + + +# E-mail address that error messages come from. +SERVER_EMAIL = 'noreply@__DOMAIN__' + +# Default email address to use for various automated correspondence from +# the site managers. Used for registration emails. +DEFAULT_FROM_EMAIL = '__ADMINMAIL__' + +# List of URLs your site is supposed to serve +ALLOWED_HOSTS = ['__DOMAIN__'] + + +# _____________________________________________________________________________ +# Configuration for caching +CACHES = { + 'default': { + 'BACKEND': 'django_redis.cache.RedisCache', + 'LOCATION': 'redis://127.0.0.1:6379/__REDIS_DB__', + # If redis is running on same host as PyInventory, you might + # want to use unix sockets instead: + # 'LOCATION': 'unix:///var/run/redis/redis.sock?db=1', + 'OPTIONS': { + 'CLIENT_CLASS': 'django_redis.client.DefaultClient', + 'PARSER_CLASS': 'redis.connection.HiredisParser', + 'PASSWORD': None, + 'CONNECTION_POOL_KWARGS': {}, + }, + 'KEY_PREFIX': '__APP__', + }, +} + +# _____________________________________________________________________________ +# Static files (CSS, JavaScript, Images) + +STATIC_URL = '/static/' +STATIC_ROOT = str(__Path(FINAL_WWW_PATH, 'static')) + +MEDIA_URL = '/media/' +MEDIA_ROOT = str(__Path(FINAL_WWW_PATH, 'media')) + +# ----------------------------------------------------------------------------- + +LOGGING = { + 'version': 1, + 'disable_existing_loggers': True, + 'formatters': { + 'verbose': { + 'format': '{asctime} {levelname} {name} {module}.{funcName} {message}', + 'style': '{', + }, + }, + 'handlers': { + 'mail_admins': { + 'level': 'ERROR', + 'formatter': 'verbose', + 'class': 'django.utils.log.AdminEmailHandler', + 'include_html': True, + }, + 'syslog': { + 'level': 'DEBUG', + 'class': 'logging.handlers.SysLogHandler', + 'formatter': 'verbose', + 'address': '/dev/log', + 'facility': SysLogHandler.LOG_LOCAL2, + }, + }, + 'loggers': { + '': {'handlers': ['syslog', 'mail_admins'], 'level': 'DEBUG', 'propagate': False}, + 'django': {'handlers': ['syslog', 'mail_admins'], 'level': 'INFO', 'propagate': False}, + 'axes': {'handlers': ['syslog', 'mail_admins'], 'level': 'WARNING', 'propagate': False}, + 'django_tools': {'handlers': ['syslog', 'mail_admins'], 'level': 'INFO', 'propagate': False}, + 'inventory': {'handlers': ['syslog', 'mail_admins'], 'level': 'DEBUG', 'propagate': False}, + }, +} + +# ----------------------------------------------------------------------------- + +try: + from .local_settings import * # noqa +except ImportError: + pass diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..f55a7b8 --- /dev/null +++ b/manifest.json @@ -0,0 +1,71 @@ +{ + "name": "PyInventory", + "id": "pyinventory", + "packaging_format": 1, + "description": { + "en": "Web based management to catalog things including state and location etc." + }, + "version": "0.8.1rc1~ynh1", + "url": "https://github.com/jedie/PyInventory", + "license": "GPL-3.0", + "maintainer": { + "name": "", + "email": "" + }, + "previous_maintainers": [{ + "name": "Jens Diemer", + "email": "pyinventory_yng@jensdiemer.de" + }], + "requirements": { + "yunohost": ">= 4.0.8" + }, + "multi_instance": true, + "services": [ + "nginx" + ], + "arguments": { + "install" : [ + { + "name": "domain", + "type": "domain", + "ask": { + "en": "Choose a domain for PyInventory", + "fr": "Choisissez un domaine pour PyInventory" + }, + "example": "domain.org" + }, + { + "name": "path", + "type": "path", + "ask": { + "en": "Choose a path for PyInventory", + "fr": "Choisissez un chemin pour PyInventory" + }, + "example": "/pyinventory", + "default": "/pyinventory" + }, + { + "name": "is_public", + "type": "boolean", + "ask": { + "en": "Should PyInventory be public accessible?", + "fr": "PyInventory doit-il être accessible au public ?" + }, + "help": { + "en": "Any YunoHost user and anonymous people from the web will be able to access the application", + "fr": "Tout utilisateur YunoHost et les personnes anonymes pourront accéder à l'application" + }, + "default": false + }, + { + "name": "admin", + "type": "user", + "ask": { + "en": "Choose an admin user for PyInventory", + "fr": "Choisissez l'administrateur pour PyInventory" + }, + "example": "johndoe" + } + ] + } +} diff --git a/scripts/_common.sh b/scripts/_common.sh new file mode 100644 index 0000000..a1a741d --- /dev/null +++ b/scripts/_common.sh @@ -0,0 +1,146 @@ +#!/bin/bash + +#================================================= +# RETRIEVE ARGUMENTS FROM THE MANIFEST +#================================================= + +domain=$YNH_APP_ARG_DOMAIN +path_url=$YNH_APP_ARG_PATH +admin=$YNH_APP_ARG_ADMIN +is_public=$YNH_APP_ARG_IS_PUBLIC + +app=$YNH_APP_INSTANCE_NAME + + +#================================================= +# SET CONSTANTS +#================================================= + +public_path=/var/www/$app +final_path=/opt/yunohost/$app + + +#================================================= +# COMMON VARIABLES +#================================================= + +# dependencies used by the app +pkg_dependencies="build-essential python3-dev python3-pip python3-virtualenv virtualenv git \ + postgresql postgresql-contrib" + +python_version="$(python3 -V | cut -d' ' -f2 | cut -d. -f1-2)" + +# PyInventory's version for PIP and settings file +pyinventory_version="0.8.1rc1" + + +#================================================= +# EXPERIMENTAL HELPERS +#================================================= + +# Send an email to inform the administrator +# +# usage: ynh_send_readme_to_admin app_message [recipients] +# | arg: app_message - The message to send to the administrator. +# | arg: recipients - The recipients of this email. Use spaces to separate multiples recipients. - default: root +# example: "root admin@domain" +# If you give the name of a YunoHost user, ynh_send_readme_to_admin will find its email adress for you +# example: "root admin@domain user1 user2" +ynh_send_readme_to_admin() { + local app_message="${1:-...No specific information...}" + local recipients="${2:-root}" + + # Retrieve the email of users + find_mails () { + local list_mails="$1" + local mail + local recipients=" " + # Read each mail in argument + for mail in $list_mails + do + # Keep root or a real email address as it is + if [ "$mail" = "root" ] || echo "$mail" | grep --quiet "@" + then + recipients="$recipients $mail" + else + # But replace an user name without a domain after by its email + if mail=$(ynh_user_get_info "$mail" "mail" 2> /dev/null) + then + recipients="$recipients $mail" + fi + fi + done + echo "$recipients" + } + recipients=$(find_mails "$recipients") + + local mail_subject="☁️🆈🅽🅷☁️: \`$app\` was just installed!" + + local mail_message="This is an automated message from your beloved YunoHost server. + +Specific information for the application $app. + +$app_message + +--- +Automatic diagnosis data from YunoHost + +$(yunohost tools diagnosis | grep -B 100 "services:" | sed '/services:/d')" + + # Define binary to use for mail command + if [ -e /usr/bin/bsd-mailx ] + then + local mail_bin=/usr/bin/bsd-mailx + else + local mail_bin=/usr/bin/mail.mailutils + fi + + # Send the email to the recipients + echo "$mail_message" | $mail_bin -a "Content-Type: text/plain; charset=UTF-8" -s "$mail_subject" "$recipients" +} + +#================================================= +# Redis HELPERS +#================================================= + +# get the first available redis database +# +# usage: ynh_redis_get_free_db +# | returns: the database number to use +ynh_redis_get_free_db() { + local result max db + result=$(redis-cli INFO keyspace) + + # get the num + max=$(cat /etc/redis/redis.conf | grep ^databases | grep -Eow "[0-9]+") + + db=0 + # default Debian setting is 15 databases + for i in $(seq 0 "$max") + do + if ! echo "$result" | grep -q "db$i" + then + db=$i + break 1 + fi + db=-1 + done + + test "$db" -eq -1 && ynh_die "No available Redis databases..." + + echo "$db" +} + +# Create a master password and set up global settings +# Please always call this script in install and restore scripts +# +# usage: ynh_redis_remove_db database +# | arg: database - the database to erase +ynh_redis_remove_db() { + local db=$1 + redis-cli -n "$db" flushall +} + + + + diff --git a/scripts/backup b/scripts/backup new file mode 100755 index 0000000..bac28eb --- /dev/null +++ b/scripts/backup @@ -0,0 +1,79 @@ +#!/bin/bash + +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + +source ../settings/scripts/_common.sh +source /usr/share/yunohost/helpers + +ynh_abort_if_errors + +#================================================= +# LOAD SETTINGS +#================================================= +ynh_print_info --message="Loading installation settings..." + +app=$YNH_APP_INSTANCE_NAME + +final_path=$(ynh_app_setting_get --app="$app" --key=final_path) +domain=$(ynh_app_setting_get --app="$app" --key=domain) +db_name=$(ynh_app_setting_get --app="$app" --key=db_name) + +#================================================= +# STOP SYSTEMD SERVICE +#================================================= +ynh_print_info --message="Stopping systemd services..." + +ynh_systemd_action --service_name="$app" --action="stop" + +#================================================= +# DECLARE DATA AND CONF FILES TO BACKUP +#================================================= +ynh_print_info --message="Declaring files to be backed up..." + +#================================================= +# BACKUP THE APP MAIN DIR +#================================================= + +ynh_backup --src_path="$final_path" + +#================================================= +# BACKUP THE NGINX CONFIGURATION +#================================================= + +ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" + +#================================================= +# BACKUP THE PostgreSQL DATABASE +#================================================= + +ynh_psql_dump_db --database="$db_name" > db.sql + +#================================================= +# SPECIFIC BACKUP +#================================================= +# BACKUP LOGROTATE +#================================================= + +ynh_backup --src_path="/etc/logrotate.d/$app" + +#================================================= +# BACKUP SYSTEMD +#================================================= + +ynh_backup --src_path="/etc/systemd/system/$app.service" + +#================================================= +# START SYSTEMD SERVICE +#================================================= + +ynh_systemd_action --service_name="$app" --action="start" + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_print_info --message="Backup script completed for $app. (YunoHost will then actually copy those files to the archive)." diff --git a/scripts/change_url b/scripts/change_url new file mode 100644 index 0000000..d841e6e --- /dev/null +++ b/scripts/change_url @@ -0,0 +1,153 @@ +#!/bin/bash + +#================================================= +# GENERIC STARTING +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + +source _common.sh +source /usr/share/yunohost/helpers + +#================================================= +# RETRIEVE ARGUMENTS +#================================================= + +old_domain=$YNH_APP_OLD_DOMAIN +old_path=$YNH_APP_OLD_PATH + +new_domain=$YNH_APP_NEW_DOMAIN +new_path=$YNH_APP_NEW_PATH + +#================================================= +# LOAD SETTINGS +#================================================= +ynh_script_progression --message="Loading installation settings..." + +public_path=$(ynh_app_setting_get --app="$app" --key=public_path) +final_path=$(ynh_app_setting_get --app="$app" --key=final_path) +is_public=$(ynh_app_setting_get --app="$app" --key=is_public) + +#================================================= +# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP +#================================================= +ynh_script_progression --message="Backing up the app before changing its url (may take a while)..." --weight=40 + +# Backup the current version of the app +ynh_backup_before_upgrade +ynh_clean_setup () { + # Remove the new domain config file, the remove script won't do it as it doesn't know yet its location. + ynh_secure_remove --file="/etc/nginx/conf.d/$new_domain.d/$app.conf" + + # restore it if the upgrade fails + ynh_restore_upgradebackup +} +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors + +#================================================= +# CHECK WHICH PARTS SHOULD BE CHANGED +#================================================= + +change_domain=0 +if [ "$old_domain" != "$new_domain" ] +then + change_domain=1 +fi + +change_path=0 +if [ "$old_path" != "$new_path" ] +then + change_path=1 +fi + +#================================================= +# STANDARD MODIFICATIONS +#================================================= +# STOP SYSTEMD SERVICE +#================================================= +ynh_script_progression --message="Stopping systemd services..." + +ynh_systemd_action --service_name="$app" --action="stop" + +#================================================= +# STANDARD MODIFICATIONS +#================================================= +# MODIFY URL IN NGINX CONF +#================================================= +ynh_script_progression --message="Updating nginx web server configuration..." + +nginx_conf_path=/etc/nginx/conf.d/$old_domain.d/$app.conf + +# Change the path in the nginx config file +if [ $change_path -eq 1 ] +then + # Make a backup of the original nginx config file if modified + ynh_backup_if_checksum_is_different --file="$nginx_conf_path" + # Set global variables for nginx helper + domain="$old_domain" + path_url="$new_path" + # Create a dedicated nginx config + ynh_add_nginx_config +fi + +# Change the domain for nginx +if [ $change_domain -eq 1 ] +then + # Delete file checksum for the old conf file location + ynh_delete_file_checksum --file="$nginx_conf_path" + mv $nginx_conf_path /etc/nginx/conf.d/$new_domain.d/$app.conf + # Store file checksum for the new config file location + ynh_store_file_checksum --file="/etc/nginx/conf.d/$new_domain.d/$app.conf" +fi + +#================================================= +# SPECIFIC MODIFICATIONS +#================================================= +# MODIFY SETTINGS +#================================================= +ynh_script_progression --message="Modify PyInventory's config file..." + +settings="$final_path/ynh_pyinventory_settings.py" +ynh_backup_if_checksum_is_different --file="$settings" + +# Change the path in the nginx config file +if [ $change_path -eq 1 ] +then + ynh_replace_string --match_string="URL_PREFIX = \"${old_path%/}\"" --replace_string="URL_PREFIX = \"${new_path%/}\"" --target_file="$settings" +fi + +# Change the domain for nginx +if [ $change_domain -eq 1 ] +then + # replace SERVER_EMAIL + ynh_replace_string --match_string="noreply@$old_domain" --replace_string="noreply@$new_domain" --target_file="$settings" + # replace SITE_DOMAIN + ynh_replace_string --match_string="SITE_DOMAIN = \"$old_domain\"" --replace_string="SITE_DOMAIN = \"$new_domain\"" --target_file="$settings" + # replace ALLOWED_HOSTS + ynh_replace_string --match_string="ALLOWED_HOSTS = \[\"$old_domain\"\]" --replace_string="ALLOWED_HOSTS = \[\"$new_domain\"\]" --target_file="$settings" +fi + +ynh_store_file_checksum --file="$settings" + +#================================================= +# GENERIC FINALISATION +#================================================= +# START SYSTEMD SERVICE +#================================================= +ynh_script_progression --message="Starting systemd services..." --weight=5 + +ynh_systemd_action --service_name="$app" --action="start" + +#================================================= +# RELOAD NGINX +#================================================= +ynh_script_progression --message="Reloading nginx web server..." + +ynh_systemd_action --service_name=nginx --action=reload + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Change of URL completed for $app" --last diff --git a/scripts/install b/scripts/install new file mode 100755 index 0000000..301b3a2 --- /dev/null +++ b/scripts/install @@ -0,0 +1,251 @@ +#!/bin/bash + +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + +source _common.sh +source /usr/share/yunohost/helpers + +#================================================= +# MANAGE SCRIPT FAILURE +#================================================= + +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors + +#================================================= +# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS +#================================================= +ynh_script_progression --message="Validating installation parameters..." + +# Path for e.g. "static" files, served by nginx: +test ! -e "$public_path" || ynh_die --message="This path already contains a folder" + +# Path for own config files, e.g.: Django's settings.py: +test ! -e "$final_path" || ynh_die --message="This path already contains a folder" + +# Register (book) web path +ynh_webpath_register --app=$app --domain=$domain --path_url=$path_url + +mkdir -p "$public_path/media" "$public_path/static" +mkdir -p "$final_path" + +#================================================= +# STORE SETTINGS FROM MANIFEST +#================================================= +ynh_script_progression --message="Storing installation settings..." + +ynh_app_setting_set --app="$app" --key=domain --value="$domain" +ynh_app_setting_set --app="$app" --key=path --value="$path_url" +ynh_app_setting_set --app="$app" --key=admin --value="$admin" +ynh_app_setting_set --app="$app" --key=is_public --value="$is_public" +ynh_app_setting_set --app="$app" --key=public_path --value="$public_path" +ynh_app_setting_set --app="$app" --key=final_path --value="$final_path" + +#================================================= +# STANDARD MODIFICATIONS +#================================================= +# INSTALL DEPENDENCIES +#================================================= +ynh_script_progression --message="Installing dependencies..." --weight=40 + +ynh_exec_warn_less ynh_install_app_dependencies "$pkg_dependencies" + +#================================================= +# CREATE A PostgreSQL DATABASE +#================================================= +ynh_script_progression --message="Creating a PostgreSQL database..." + +db_name=$(ynh_sanitize_dbid --db_name="$app") +db_user=$db_name +ynh_app_setting_set --app="$app" --key=db_name --value="$db_name" + +ynh_psql_test_if_first_run + +# Initialize database and store postgres password for upgrade +ynh_psql_setup_db --db_user="$db_user" --db_name="$db_name" + +#================================================= +# NGINX CONFIGURATION +#================================================= +ynh_script_progression --message="Configuring nginx web server..." + +# Create a dedicated nginx config +# https://github.com/YunoHost/yunohost/blob/dev/data/helpers.d/nginx +ynh_add_nginx_config "public_path" + +#================================================= +# CREATE DEDICATED USER +#================================================= +ynh_script_progression --message="Configuring system user..." + +# A home directory for venv and settings etc. +ynh_system_user_create --username="$app" --home_dir="$final_path" --use_shell + +#================================================= +# SPECIFIC SETUP +#================================================= +# PIP INSTALLATION +#================================================= +ynh_script_progression --message="Install PyInventory using PIP..." --weight=80 + +virtualenv --python=python3 "${final_path}/venv" +chown -R "$app": "$final_path" + +#run source in a 'sub shell' +( + set +o nounset + source "${final_path}/venv/bin/activate" + set -o nounset + sudo -u $app $final_path/venv/bin/pip install --upgrade pip + sudo -u $app $final_path/venv/bin/pip install --upgrade setuptools wheel psycopg2-binary + sudo -u $app $final_path/venv/bin/pip install --upgrade pyinventory=="$pyinventory_version" +) + +#================================================= +# SPECIFIC SETUP +# ================================================= +ynh_script_progression --message="Create pyinventory configuration file..." + +# Find a free port +port=$(ynh_find_port --port=8000) +# Set port as application setting +# https://github.com/YunoHost/yunohost/blob/dev/data/helpers.d/setting +ynh_app_setting_set --app="$app" --key=port --value="$port" + +gunicorn_conf="$final_path/gunicorn.conf.py" +cp "../conf/gunicorn.conf.py" "$gunicorn_conf" +ynh_replace_string --match_string="__FINAL_HOME_PATH__" --replace_string="$final_path" --target_file="$gunicorn_conf" +ynh_replace_string --match_string="__PORT__" --replace_string="$port" --target_file="$gunicorn_conf" + +cp ../conf/manage.py "$final_path/manage.py" +chmod +x "$final_path/manage.py" + +cp ../conf/wsgi.py "$final_path/wsgi.py" + +settings="$final_path/ynh_pyinventory_settings.py" +cp "../conf/ynh_pyinventory_settings.py" "$settings" + +touch "$final_path/local_settings.py" + +db_pwd=$(ynh_app_setting_get --app="$app" --key=psqlpwd) +admin_mail=$(ynh_user_get_info --username="$admin" --key=mail) +key=$(ynh_string_random --length=50) +redis_db=$(ynh_redis_get_free_db) + +ynh_replace_string --match_string="__APP__" --replace_string="$app" --target_file="$settings" +ynh_replace_string --match_string="__DB_PWD__" --replace_string="$db_pwd" --target_file="$settings" +ynh_replace_string --match_string="__ADMIN__" --replace_string="$admin" --target_file="$settings" +ynh_replace_string --match_string="__ADMINMAIL__" --replace_string="$admin_mail" --target_file="$settings" +ynh_replace_string --match_string="__DOMAIN__" --replace_string="$domain" --target_file="$settings" +ynh_replace_string --match_string="__KEY__" --replace_string="$key" --target_file="$settings" +ynh_replace_string --match_string="__FINAL_HOME_PATH__" --replace_string="$final_path" --target_file="$settings" +ynh_replace_string --match_string="__FINAL_WWW_PATH__" --replace_string="$public_path" --target_file="$settings" +ynh_replace_string --match_string="__REDIS_DB__" --replace_string="$redis_db" --target_file="$settings" +ynh_replace_string --match_string="__PYTHON_VERSION__" --replace_string="$python_version" --target_file="$settings" + +ynh_app_setting_set --app="$app" --key=redis_db --value="$redis_db" + +#================================================= +# MIGRATE / COLLECTSTATIC / CREATEADMIN +#================================================= +ynh_script_progression --message="migrate/collectstatic/createadmin..." --weight=10 + +( + set +o nounset + source "${final_path}/venv/bin/activate" + set -o nounset + cd "${final_path}" + + # Just for debugging: + ./manage.py diffsettings + + ./manage.py migrate --no-input + ./manage.py collectstatic --no-input + echo "from django.contrib.auth import get_user_model; get_user_model().objects.create_superuser('$admin', '$admin_mail', 'pyinventory')" | ./manage.py shell + + # Check the configuration + # This may fail in some cases with errors, etc., but the app works and the user can fix issues later. + ./manage.py check --deploy || true +) + +#================================================= +# STORE THE CHECKSUM OF THE CONFIG FILE +#================================================= + +# Calculate and store the config file checksum into the app settings +ynh_store_file_checksum --file="$settings" + +#================================================= +# SETUP SYSTEMD +#================================================= +ynh_script_progression --message="Configuring a systemd service..." + +# https://github.com/YunoHost/yunohost/blob/dev/data/helpers.d/systemd +ynh_add_systemd_config --service="$app" --template="pyinventory.service" + +#================================================= +# GENERIC FINALIZATION +#================================================= +# SECURE FILES AND DIRECTORIES +#================================================= + +# Set permissions to app files +chown -R "$app": "$final_path" + +#================================================= +# SETUP LOGROTATE +#================================================= +ynh_script_progression --message="Configuring log rotation..." + +# Use logrotate to manage application logfile(s) +ynh_use_logrotate --non-append + +#================================================= +# INTEGRATE SERVICE IN YUNOHOST +#================================================= +ynh_script_progression --message="Integrating service in YunoHost..." + +yunohost service add "$app" --log "/var/log/$app/pyinventory.log" + +#================================================= +# SETUP SSOWAT +#================================================= +ynh_script_progression --message="Configuring SSOwat..." + +# Make app public if necessary +if [ "$is_public" -eq 1 ] +then + # unprotected_uris allows SSO credentials to be passed anyway. + ynh_app_setting_set --app="$app" --key=unprotected_uris --value="/" +fi + +#================================================= +# Start pyinventory +#================================================= +ynh_script_progression --message="Starting PyInventory's services..." --weight=5 + +ynh_systemd_action --service_name="$app" --action="start" + +#================================================= +# RELOAD NGINX +#================================================= +ynh_script_progression --message="Reloading nginx web server..." + +ynh_systemd_action --service_name="nginx" --action="reload" + +#================================================= +# SEND A README FOR THE ADMIN +#================================================= + +message=" +PyInventory settings file : $settings +If you facing an issue or want to improve this app, please open a new issue in this project: https://github.com/jedie/pyinventory_ynh +" + +ynh_send_readme_to_admin "$message" "$admin" + +ynh_script_progression --message="Installation of $app completed" --last diff --git a/scripts/remove b/scripts/remove new file mode 100755 index 0000000..1f156c3 --- /dev/null +++ b/scripts/remove @@ -0,0 +1,103 @@ +#!/bin/bash + +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + +source _common.sh +source /usr/share/yunohost/helpers + +#================================================= +# LOAD SETTINGS +#================================================= +ynh_script_progression --message="Loading installation settings..." + +domain=$(ynh_app_setting_get --app="$app" --key=domain) +db_name=$(ynh_app_setting_get --app="$app" --key=db_name) +db_user=$db_name +public_path=$(ynh_app_setting_get --app="$app" --key=public_path) +final_path=$(ynh_app_setting_get --app="$app" --key=final_path) + +#================================================= +# STANDARD REMOVE +#================================================= +# REMOVE SERVICE FROM ADMIN PANEL +#================================================= + +# Remove a service from the admin panel, added by `yunohost service add` +if yunohost service status "$app" >/dev/null 2>&1 +then + ynh_script_progression --message="Removing $app service integration..." + yunohost service remove "$app" +fi + +#================================================= +# STOP PYINVENTORY'S SERVICES +#================================================= +ynh_script_progression --message="Stopping and removing systemd services..." --weight=5 + +ynh_remove_systemd_config --service="$app" + +#================================================= +# REMOVE THE PostgreSQL DATABASE +#================================================= +ynh_script_progression --message="Removing the PostgreSQL database..." + +# Remove a database if it exists, along with the associated user +ynh_psql_remove_db --db_user=$db_user --db_name=$db_name + +##================================================= +## REMOVE REDIS DB +##================================================= +# +#ynh_redis_remove_db + +#================================================= +# REMOVE DEPENDENCIES +#================================================= +ynh_script_progression --message="Removing dependencies..." --weight=10 + +# Remove metapackage and its dependencies +ynh_exec_warn_less ynh_remove_app_dependencies + +#================================================= +# REMOVE APP MAIN DIR +#================================================= +ynh_script_progression --message="Removing app main directory..." + +# Remove the app directory securely +ynh_secure_remove --file="$public_path" +ynh_secure_remove --file="$final_path" + +#================================================= +# REMOVE NGINX CONFIGURATION +#================================================= +ynh_script_progression --message="Removing nginx web server configuration..." + +# Remove the dedicated nginx config +ynh_remove_nginx_config + +#================================================= +# REMOVE LOGROTATE CONFIGURATION +#================================================= +ynh_script_progression --message="Removing logrotate configuration..." + +# Remove the app-specific logrotate config +ynh_remove_logrotate + +#================================================= +# GENERIC FINALIZATION +#================================================= +# REMOVE DEDICATED USER +#================================================= +ynh_script_progression --message="Removing the dedicated system user..." + +# Delete a system user +ynh_system_user_delete --username="$app" + +#================================================= +# END OF SCRIPT +#================================================= +ynh_script_progression --message="Removal of $app completed" --last diff --git a/scripts/restore b/scripts/restore new file mode 100755 index 0000000..27da747 --- /dev/null +++ b/scripts/restore @@ -0,0 +1,133 @@ +#!/bin/bash + +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + +source ../settings/scripts/_common.sh +source /usr/share/yunohost/helpers + +#================================================= +# MANAGE SCRIPT FAILURE +#================================================= + +ynh_abort_if_errors + +#================================================= +# LOAD SETTINGS +#================================================= +ynh_script_progression --message="Loading settings..." + +domain=$(ynh_app_setting_get --app="$app" --key=domain) +path_url=$(ynh_app_setting_get --app="$app" --key=path) +public_path=$(ynh_app_setting_get --app="$app" --key=public_path) +final_path=$(ynh_app_setting_get --app="$app" --key=final_path) +db_name=$(ynh_app_setting_get --app="$app" --key=db_name) +db_user=$db_name +db_pwd=$(ynh_app_setting_get --app="$app" --key=psqlpwd) + +#================================================= +# CHECK IF THE APP CAN BE RESTORED +#================================================= +ynh_script_progression --message="Validating restoration parameters..." + +ynh_webpath_available --domain=$domain --path_url=$path_url \ + || ynh_die --message="Path not available: ${domain}${path_url}" +test ! -d $final_path \ + || ynh_die --message="There is already a directory: $final_path " + +#================================================= +# STANDARD RESTORATION STEPS +#================================================= +# RESTORE THE NGINX CONFIGURATION +#================================================= + +ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" + +#================================================= +# RESTORE THE APP MAIN DIR +#================================================= +ynh_script_progression --message="Restoring the app main directory..." + +ynh_restore_file --origin_path="$final_path" + +touch "$final_path/local_settings.py" + +#================================================= +# RECREATE THE DEDICATED USER +#================================================= +ynh_script_progression --message="Recreating the dedicated system user..." + +# Create the dedicated user (if not existing) +ynh_system_user_create --username=$app --home_dir="$final_path" --use_shell + +#================================================= +# RESTORE USER RIGHTS +#================================================= + +# Restore permissions on app files +chown -R "$app": "$public_path" +chown -R "$app": "$final_path" + +#================================================= +# SPECIFIC RESTORATION +#================================================= +# REINSTALL DEPENDENCIES +#================================================= +ynh_script_progression --message="Reinstalling dependencies..." --weight=40 + +ynh_exec_warn_less ynh_install_app_dependencies "$pkg_dependencies" + +#================================================= +# RESTORE THE PostgreSQL DATABASE +#================================================= +ynh_script_progression --message="Restoring the PostgreSQL database..." --weight=5 + +ynh_psql_test_if_first_run +ynh_psql_setup_db --db_user="$db_user" --db_name="$db_name" --db_pwd="$db_pwd" +ynh_psql_connect_as --user=$db_user --password=$db_pwd --database=$db_name < ./db.sql + +#================================================= +# RESTORE SYSTEMD +#================================================= +ynh_script_progression --message="Restoring the systemd configuration..." + +ynh_restore_file --origin_path="/etc/systemd/system/$app.service" +systemctl enable $app.service --quiet + +#================================================= +# INTEGRATE SERVICE IN YUNOHOST +#================================================= +ynh_script_progression --message="Integrating service in YunoHost..." + +yunohost service add "$app" --log "/var/log/$app/pyinventory.log" + +#================================================= +# RESTORE THE LOGROTATE CONFIGURATION +#================================================= + +mkdir -p "/var/log/$app" +ynh_restore_file --origin_path="/etc/logrotate.d/$app" + +#================================================= +# GENERIC FINALIZATION +#================================================= +# START PYINVENTORY +#================================================= +ynh_script_progression --message="Starting a systemd service..." --weight=5 + +ynh_systemd_action --service_name="$app" --action="start" + +#================================================= +# RELOAD NGINX +#================================================= +ynh_script_progression --message="Reloading nginx web server..." + +ynh_systemd_action --service_name="nginx" --action="reload" + +#================================================= +# END OF SCRIPT +#================================================= +ynh_script_progression --message="Restoration completed for $app" --last diff --git a/scripts/upgrade b/scripts/upgrade new file mode 100755 index 0000000..0ed260d --- /dev/null +++ b/scripts/upgrade @@ -0,0 +1,250 @@ +#!/bin/bash + +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= +source _common.sh +source /usr/share/yunohost/helpers + +#================================================= +# LOAD SETTINGS +#================================================= +ynh_script_progression --message="Loading installation settings..." + +path_url=$(ynh_app_setting_get --app="$app" --key=path) +is_public=$(ynh_app_setting_get --app="$app" --key=is_public) +public_path=$(ynh_app_setting_get --app="$app" --key=public_path) +final_path=$(ynh_app_setting_get --app="$app" --key=final_path) +db_name=$(ynh_app_setting_get --app="$app" --key=db_name) +db_user=$db_name +domain=$(ynh_app_setting_get --app="$app" --key=domain) +db_pwd=$(ynh_app_setting_get --app="$app" --key=psqlpwd) +admin=$(ynh_app_setting_get --app="$app" --key=admin) +admin_mail=$(ynh_user_get_info "$admin" mail) +key=$(ynh_string_random 50) +#redis_db=$(ynh_app_setting_get --app="$app" --key=redis_db) + +#================================================= +# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP +#================================================= +ynh_script_progression --message="Backing up the app before upgrading (may take a while)..." --weight=40 + +# Backup the current version of the app +ynh_backup_before_upgrade +ynh_clean_setup () { + # restore it if the upgrade fails + ynh_restore_upgradebackup +} +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors + +#================================================= +# ENSURE DOWNWARD COMPATIBILITY +#================================================= +ynh_script_progression --message="Ensuring downward compatibility..." + +# Fix is_public as a boolean value +if [ "$is_public" = "Yes" ]; then + ynh_app_setting_set --app=$app --key=is_public --value=1 + is_public=1 +elif [ "$is_public" = "No" ]; then + ynh_app_setting_set --app=$app --key=is_public --value=0 + is_public=0 +fi + +if [[ -d "$final_path/bin/" ]] +then + ynh_secure_remove --file="$final_path/bin/" +fi + +#================================================= +# STANDARD UPGRADE STEPS +#================================================= +# STOP SYSTEMD SERVICE +#================================================= +ynh_script_progression --message="Stopping systemd services..." --weight=5 + +ynh_systemd_action --service_name="$app" --action="stop" + +#================================================= +# NGINX CONFIGURATION +#================================================= +ynh_script_progression --message="Upgrading nginx web server configuration..." + +# Create a dedicated nginx config +ynh_add_nginx_config + +#================================================= +# SPECIFIC UPGRADE +#================================================= +# Update dependencies +#================================================= +ynh_script_progression --message="Upgrading dependencies..." + +ynh_exec_warn_less ynh_install_app_dependencies "$pkg_dependencies" + +#================================================= +# CREATE DEDICATED USER +#================================================= +ynh_script_progression --message="Making sure dedicated system user exists..." + +# Create a system user +ynh_system_user_create --username="$app" --home_dir="$final_path" --use_shell + +#================================================= +# SETUP SYSTEMD +#================================================= +ynh_script_progression --message="Configuring a systemd service..." + +ynh_add_systemd_config --service="$app" --template="pyinventory.service" + +#================================================= +# UPGRADE PYINVENTORY +#================================================= + +upgrade() { + new_version=$1 + settings_template=$2 + #================================================= + # PIP INSTALLATION + #================================================= + ynh_script_progression --message="Install pyinventory using PIP..." --weight=15 + + virtualenv --python=python3 "${final_path}/venv" + chown -R "$app": "$final_path/venv" + + #run source in a 'sub shell' + ( + set +o nounset + source "${final_path}/venv/bin/activate" + set -o nounset + sudo -u $app $final_path/venv/bin/pip install --upgrade pip + sudo -u $app $final_path/venv/bin/pip install --upgrade setuptools wheel psycopg2-binary + sudo -u $app $final_path/venv/bin/pip install --upgrade pyinventory=="$new_version" + ) + + #================================================= + # MODIFY A CONFIG FILE + #================================================= + ynh_script_progression --message="Create pyinventory configuration file..." + + ynh_backup_if_checksum_is_different --file="$final_path/wsgi.py" + cp ../conf/wsgi.py "$final_path/wsgi.py" + + ynh_backup_if_checksum_is_different --file="$final_path/manage.py" + cp ../conf/wsgi.py "$final_path/manage.py" + chmod +x "$final_path/manage.py" + + # save old settings file + settings="$final_path/ynh_pyinventory_settings.py" + + ynh_backup_if_checksum_is_different --file="$settings" + cp "$settings_template" "$settings" + + ynh_replace_string --match_string="__APP__" --replace_string="$app" --target_file="$settings" + ynh_replace_string --match_string="__DB_PWD__" --replace_string="$db_pwd" --target_file="$settings" + ynh_replace_string --match_string="__ADMIN__" --replace_string="$admin" --target_file="$settings" + ynh_replace_string --match_string="__ADMINMAIL__" --replace_string="$admin_mail" --target_file="$settings" + ynh_replace_string --match_string="__DOMAIN__" --replace_string="$domain" --target_file="$settings" + ynh_replace_string --match_string="__KEY__" --replace_string="$key" --target_file="$settings" + ynh_replace_string --match_string="__FINAL_HOME_PATH__" --replace_string="$final_path" --target_file="$settings" + ynh_replace_string --match_string="__FINAL_WWW_PATH__" --replace_string="$public_path" --target_file="$settings" + ynh_replace_string --match_string="__PYTHON_VERSION__" --replace_string="$python_version" --target_file="$settings" + + # remove last "/" of $path_url + ynh_replace_string --match_string="__PATHURL__" --replace_string="${path_url%/}" --target_file="$settings" + + # Recalculate and store the config file checksum into the app settings + ynh_store_file_checksum --file="$settings" + + touch "$final_path/local_settings.py" + + #================================================= + # MIGRATE PYINVENTORY + #================================================= + ynh_script_progression --message="Run migration scripts..." --weight=10 + + ( + set +o nounset + source "${final_path}/venv/bin/activate" + set -o nounset + cd "${final_path}" + + ./manage.py migrate --noinput + ./manage.py collectstatic --noinput + + # Check the configuration + # This may fail in some cases with errors, etc., but the app works and the user can fix issues later. + if [ "$new_version" == "$pyinventory_version" ]; then + ./manage.py check --deploy || true + fi + ) +} + +file_version="${final_path}/venv/lib/python$python_version/site-packages/pyinventory/__init__.py" +if [ -e $file_version ] +then + current_version=$(cat $file_version | grep "^VERSION = " | grep -o "[0-9].[0-9]" | head -n1 | cut -d"." -f1) +else + current_version=3 +fi + +upgrade $pyinventory_version "../conf/ynh_pyinventory_settings.py" + +#================================================= +# SETUP LOGROTATE +#================================================= +ynh_script_progression --message="Upgrading logrotate configuration..." + +# Use logrotate to manage app-specific logfile(s) +ynh_use_logrotate --non-append + +#================================================= +# INTEGRATE SERVICE IN YUNOHOST +#================================================= +ynh_script_progression --message="Integrating service in YunoHost..." + +yunohost service add "$app" --log "/var/log/$app/pyinventory.log" + +#================================================= +# GENERIC FINALIZATION +#================================================= +# SECURE FILES AND DIRECTORIES +#================================================= + +# Set right permissions for curl installation +chown -R "$app": "$final_path" + +#================================================= +# START SYSTEMD SERVICES +#================================================= +ynh_script_progression --message="Starting systemd services..." --weight=5 + +ynh_systemd_action --service_name="$app" --action="start" + +#================================================= +# SETUP SSOWAT +#================================================= +ynh_script_progression --message="Upgrading SSOwat configuration..." + +# Make app public if necessary +if [ "$is_public" -eq 1 ] +then + # unprotected_uris allows SSO credentials to be passed anyway. + ynh_app_setting_set --app="$app" --key=unprotected_uris --value="/" +fi + +#================================================= +# RELOAD NGINX +#================================================= +ynh_script_progression --message="Reloading nginx web server..." + +ynh_systemd_action --service_name=nginx --action=reload + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Upgrade of $app completed" --last \ No newline at end of file