mirror of
https://github.com/YunoHost-Apps/zeronet_ynh.git
synced 2024-09-03 17:46:12 +02:00
Merge pull request #13 from YunoHost-Apps/fixes
Updated to latest YNH helpers and other fixes
This commit is contained in:
commit
22d2b6b6fe
18 changed files with 809 additions and 399 deletions
34
README.md
34
README.md
|
@ -1,33 +1,30 @@
|
||||||
# ZeroNet for YunoHost
|
# ZeroNet for YunoHost
|
||||||
|
|
||||||
[![Integration level](https://dash.yunohost.org/integration/zeronet.svg)](https://dash.yunohost.org/appci/app/zeronet) ![](https://ci-apps.yunohost.org/ci/badges/zeronet.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/zeronet.maintain.svg)
|
[![Integration level](https://dash.yunohost.org/integration/zeronet.svg)](https://dash.yunohost.org/appci/app/zeronet) ![](https://ci-apps.yunohost.org/ci/badges/zeronet.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/zeronet.maintain.svg)
|
||||||
[![Install ZeroNet with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=zeronet)
|
[![Install ZeroNet with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=zeronet)
|
||||||
|
|
||||||
*[Lire ce readme en français.](./README_fr.md)*
|
*[Lire ce readme en français.](./README_fr.md)*
|
||||||
|
|
||||||
> *This package allows you to install REPLACEBYYOURAPP quickly and simply on a YunoHost server.
|
> *This package allows you to install ZeroNet 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.*
|
If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/install) to learn how to install it.*
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
eroNet allows you to publish static and dynamic websites on a distributed web platform.
|
ZeroNet allows you to publish static and dynamic websites on a distributed web platform using Bitcoin crypto and the BitTorrent network.
|
||||||
|
|
||||||
**Shipped version:** 0.7.1
|
**Shipped version:** 0.7.1
|
||||||
|
|
||||||
## Screenshots
|
## Screenshots
|
||||||
|
|
||||||
![](https://camo.githubusercontent.com/4629a7d44a828f5bb20cedd90522ae62f0947b35/68747470733a2f2f692e696d6775722e636f6d2f4836304f4148592e706e67)
|
![](https://camo.githubusercontent.com/7b79b9725df29fa5403ba490ff9870e0464a00e106bad5536867602625ca94cc/68747470733a2f2f692e696d6775722e636f6d2f4836304f4148592e706e67)
|
||||||
|
|
||||||
## Demo
|
|
||||||
|
|
||||||
* [Official demo](Link to a demo site for this app.)
|
## Install instructions
|
||||||
|
|
||||||
## Install
|
|
||||||
- This app can only be installed on root path, i.e you will need to use a dedicated domain name, e.g.`zeronet.domain.tld`.
|
- This app can only be installed on root path, i.e you will need to use a dedicated domain name, e.g.`zeronet.domain.tld`.
|
||||||
- The app is installed in private mode only so unauthenticated users can not temper with your content.
|
- You can setup Tor which has to be done manually till its implimented in the app.[how to use zeronet with Tor](https://zeronet.readthedocs.io/en/latest/faq/#how-to-use-zeronet-with-tor)
|
||||||
- If you want to be a proper ZeroNet peer (serving your and other's content) you will want to open TCP port 15441 in your firewall and make sure requests to this port reach your instance [do i need to have a port opened](https://zeronet.readthedocs.io/en/latest/faq/#do-i-need-to-have-a-port-opened)
|
|
||||||
- Alternatively you can setup Tor which has to be done manually [how to use zeronet with Tor](https://zeronet.readthedocs.io/en/latest/faq/#how-to-use-zeronet-with-tor)
|
|
||||||
|
|
||||||
## Multiple Instances
|
## Multiple Instances
|
||||||
- Installing multiple instances of the app is *experimental*. Internally each instance it will use a unique port for both for ZeroNet UserInterface and FileServer. However, the tracker will see all instances as one peer, as they all use one and the same external IP address.
|
- Installing multiple instances of the app is *experimental*. Internally each instance will use an unique port for both for ZeroNet UserInterface and FileServer. However, the tracker will see all instances as one peer, as they all use one and the same external IP address. But you try it and explain your user case.
|
||||||
- A solution that hasn't been confirmed yet is to use Tor instead. Each instance should then have a unique external address.
|
- A solution that hasn't been confirmed yet is to use Tor instead. Each instance should then have a unique external address.
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
@ -39,21 +36,24 @@ eroNet allows you to publish static and dynamic websites on a distributed web pl
|
||||||
|
|
||||||
#### Multi-user support
|
#### Multi-user support
|
||||||
|
|
||||||
Are LDAP and HTTP auth supported?
|
Are LDAP and HTTP auth supported? No
|
||||||
Can the app be used by multiple users?
|
|
||||||
|
#### Android app (Still in beta)
|
||||||
|
|
||||||
|
[Android app](https://github.com/canewsin/zeronet_mobile)
|
||||||
|
|
||||||
#### Supported architectures
|
#### Supported architectures
|
||||||
|
|
||||||
* x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/REPLACEBYYOURAPP%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/REPLACEBYYOURAPP/)
|
* x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/zeronet%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/zeronet/)
|
||||||
* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/REPLACEBYYOURAPP%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/REPLACEBYYOURAPP/)
|
* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/zeronet%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/zeronet/)
|
||||||
|
|
||||||
## Limitations
|
## Limitations
|
||||||
|
|
||||||
* Any known limitations.
|
* App can not be used inside SSO. See [here](https://github.com/HelloZeroNet/ZeroNet/issues/2541) and [here](https://github.com/YunoHost/issues/issues/1580).
|
||||||
|
|
||||||
## Additional information
|
## Additional information
|
||||||
|
|
||||||
* Other info you would like to add about this app.
|
* Other info you would like to add about this Zeronet.
|
||||||
|
|
||||||
**More info on the documentation page:**
|
**More info on the documentation page:**
|
||||||
https://yunohost.org/packaging_apps
|
https://yunohost.org/packaging_apps
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
;; Nom du test
|
;; Complete Test
|
||||||
auto_remove=1
|
# Comment ignored
|
||||||
# Commentaire ignoré
|
|
||||||
; Manifest
|
; Manifest
|
||||||
domain="sub.domain.tld" (DOMAIN)
|
domain="sub.domain.tld" (DOMAIN)
|
||||||
# path="/" (PATH)
|
# path="/" (PATH)
|
||||||
admin="john" (USER)
|
password="seceret123" (USER)
|
||||||
# language="fr"
|
# language="fr"
|
||||||
# is_public="Yes" (PUBLIC|public=Yes|private=No)
|
# is_public="Yes" (PUBLIC|public=Yes|private=No)
|
||||||
# is_public=0 (PUBLIC|public=1|private=0)
|
# is_public=0 (PUBLIC|public=1|private=0)
|
||||||
|
@ -19,25 +18,12 @@
|
||||||
# setup_private=0 test disabled because app is always installed as private
|
# setup_private=0 test disabled because app is always installed as private
|
||||||
setup_public=0
|
setup_public=0
|
||||||
upgrade=1
|
upgrade=1
|
||||||
backup_restore=1
|
backup_restore=1
|
||||||
multi_instance=0
|
multi_instance=q
|
||||||
# multi_instance=1 test disabled because it requires installation on sub-path which is not available. successfully conducted test manually
|
;;; Options
|
||||||
wrong_user=1
|
Email=
|
||||||
wrong_path=0
|
Notification=none
|
||||||
incorrect_path=0
|
;;; Upgrade options
|
||||||
# corrupt_source=0
|
; commit=CommitHash
|
||||||
fail_download_source=0
|
name=Name and date of the commit.
|
||||||
port_already_use=1 (66)
|
manifest_arg=domain=DOMAIN&path=PATH&admin=USER&is_public=1&password=pass&
|
||||||
final_path_already_use=1
|
|
||||||
;;; Levels
|
|
||||||
Level 1=auto
|
|
||||||
Level 2=auto
|
|
||||||
Level 3=auto
|
|
||||||
Level 4=na
|
|
||||||
# level 4: the app does not directly use Yunohost user data
|
|
||||||
Level 5=auto
|
|
||||||
Level 6=auto
|
|
||||||
Level 7=auto
|
|
||||||
Level 8=0
|
|
||||||
Level 9=0
|
|
||||||
Level 10=0
|
|
|
@ -1,3 +1,7 @@
|
||||||
SOURCE_URL=https://github.com/HelloZeroNet/ZeroNet/archive/v0.7.1.tar.gz
|
SOURCE_URL=https://github.com/HelloZeroNet/ZeroNet/archive/v0.7.1.tar.gz
|
||||||
SOURCE_SUM=78a27e1687d8e3699a854b77b516c95b30a8ba667f7ebbef0aabf7ec6ec7272d
|
SOURCE_SUM=78a27e1687d8e3699a854b77b516c95b30a8ba667f7ebbef0aabf7ec6ec7272d
|
||||||
SOURCE_VERSION=0.7.1
|
SOURCE_SUM_PRG=sha256sum
|
||||||
|
SOURCE_FORMAT=tar.gz
|
||||||
|
SOURCE_IN_SUBDIR=true
|
||||||
|
SOURCE_FILENAME=0.7.1
|
||||||
|
SOURCE_EXTRACT=true
|
||||||
|
|
9
conf/nginx.conf
Normal file
9
conf/nginx.conf
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
|
||||||
|
location / {
|
||||||
|
|
||||||
|
proxy_pass http://127.0.0.1:__PORT__;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection "upgrade";
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
}
|
|
@ -1,14 +0,0 @@
|
||||||
location YNH_WWW_PATH {
|
|
||||||
|
|
||||||
proxy_pass http://127.0.0.1:YNH_LOCAL_PORT;
|
|
||||||
proxy_http_version 1.1;
|
|
||||||
proxy_set_header Upgrade $http_upgrade;
|
|
||||||
proxy_set_header Connection "upgrade";
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
||||||
proxy_set_header Accept 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
|
|
||||||
|
|
||||||
# Include SSOWAT user panel.
|
|
||||||
include conf.d/yunohost_panel.conf.inc;
|
|
||||||
}
|
|
15
conf/systemd.service
Normal file
15
conf/systemd.service
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
[Unit]
|
||||||
|
Description=__APP__ service
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
User=__APP__
|
||||||
|
Group=__APP__
|
||||||
|
WorkingDirectory=__FINALPATH__
|
||||||
|
ExecStart=/usr/bin/python3 __FINALPATH__/zeronet.py --ui_port __PORT__ --ui_host __DOMAIN__ --fileserver_port __FS_PORT__ --data_dir __DATADIR__/data --log_dir __DATADIR__/log --ui_password __PASSWORD__
|
||||||
|
ExecReload=/bin/kill -HUP $MAINPID
|
||||||
|
KillMode=process
|
||||||
|
Restart=on-failure
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
|
@ -1,14 +0,0 @@
|
||||||
[Unit]
|
|
||||||
Description=ZeroNet for __USER__
|
|
||||||
After=network.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
User=__USER__
|
|
||||||
ExecStart=/usr/bin/python2 ./zeronet.py --ui_port __UI_PORT__ --ui_host __UI_HOST__ --fileserver_port __FS_PORT__ --data_dir __DATA_DIR__ --log_dir __LOG_DIR__
|
|
||||||
WorkingDirectory=__WORKING_DIRECTORY__
|
|
||||||
ExecReload=/bin/kill -HUP $MAINPID
|
|
||||||
KillMode=process
|
|
||||||
Restart=on-failure
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
55
issue_template.md
Normal file
55
issue_template.md
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
---
|
||||||
|
name: Bug report
|
||||||
|
about: When creating a bug report, please use the following template to provide all the relevant information and help debugging efficiently.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**How to post a meaningful bug report**
|
||||||
|
1. *Read this whole template first.*
|
||||||
|
2. *Make sure you are on the right place:*
|
||||||
|
- *If you were performing an action on the app from the webadmin or the CLI (install, update, backup, restore, change_url...), you are on the right place!*
|
||||||
|
- *Otherwise, the issue may be due to the app itself. Refer to its documentation or repository for help.*
|
||||||
|
- *In doubt, ask here and we will figure it out together.*
|
||||||
|
3. *Delete these italic comments as you write over them below, and remove this guide.*
|
||||||
|
---
|
||||||
|
|
||||||
|
### Describe the bug
|
||||||
|
|
||||||
|
*A clear and concise description of what the bug is.*
|
||||||
|
|
||||||
|
### Context
|
||||||
|
|
||||||
|
- Hardware: *VPS bought online / Old laptop or computer / Raspberry Pi at home / Internet Cube with VPN / Other ARM board / ...*
|
||||||
|
- YunoHost version: x.x.x
|
||||||
|
- I have access to my server: *Through SSH | through the webadmin | direct access via keyboard / screen | ...*
|
||||||
|
- Are you in a special context or did you perform some particular tweaking on your YunoHost instance ?: *no / yes*
|
||||||
|
- If yes, please explain:
|
||||||
|
- Using, or trying to install package version/branch:
|
||||||
|
- If upgrading, current package version: *can be found in the admin, or with `yunohost app info $app_id`*
|
||||||
|
|
||||||
|
### Steps to reproduce
|
||||||
|
|
||||||
|
- *If you performed a command from the CLI, the command itself is enough. For example:*
|
||||||
|
```sh
|
||||||
|
sudo yunohost app install zeronet
|
||||||
|
```
|
||||||
|
- *If you used the webadmin, please perform the equivalent command from the CLI first.*
|
||||||
|
- *If the error occurs in your browser, explain what you did:*
|
||||||
|
1. *Go to '...'*
|
||||||
|
2. *Click on '...'*
|
||||||
|
3. *Scroll down to '...'*
|
||||||
|
4. *See error*
|
||||||
|
|
||||||
|
### Expected behavior
|
||||||
|
|
||||||
|
*A clear and concise description of what you expected to happen. You can remove this section if the command above is enough to understand your intent.*
|
||||||
|
|
||||||
|
### Logs
|
||||||
|
|
||||||
|
*When an operation fails, YunoHost provides a simple way to share the logs.*
|
||||||
|
- *In the webadmin, the error message contains a link to the relevant log page. On that page, you will be able to 'Share with Yunopaste'. If you missed it, the logs of previous operations are also available under Tools > Logs.*
|
||||||
|
- *In command line, the command to share the logs is displayed at the end of the operation and looks like `yunohost log display [log name] --share`. If you missed it, you can find the log ID of a previous operation using `yunohost log list`.*
|
||||||
|
|
||||||
|
*After sharing the log, please copypaste directly the link provided by YunoHost (to help readability, no need to copypaste the entire content of the log here, just the link is enough...)*
|
||||||
|
|
||||||
|
*If applicable and useful, add screenshots to help explain your problem.*
|
|
@ -32,13 +32,14 @@
|
||||||
"example": "zeronet.domain.tld"
|
"example": "zeronet.domain.tld"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "admin",
|
"name": "password",
|
||||||
"type": "user",
|
"type": "password",
|
||||||
|
"optional": true,
|
||||||
"ask": {
|
"ask": {
|
||||||
"en": "Choose an admin user (the one who will be able to access the admin interface)",
|
"en": "Set the password for the Zeronet.",
|
||||||
"fr": "Choisissez l'administrateur (seul autorisé à accéder à l'interface d'administration)"
|
"fr": "Définissez le mot de passe pour votre Zeronet."
|
||||||
},
|
},
|
||||||
"example": "john doe"
|
"example": "myreallystrengthpassword"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
18
pull_request_template.md
Normal file
18
pull_request_template.md
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
## Problem
|
||||||
|
- *Description of why you made this PR*
|
||||||
|
|
||||||
|
## Solution
|
||||||
|
- *And how do you fix that problem*
|
||||||
|
|
||||||
|
## PR Status
|
||||||
|
- [ ] Code finished.
|
||||||
|
- [ ] Tested with Package_check.
|
||||||
|
- [ ] Fix or enhancement tested.
|
||||||
|
- [ ] Upgrade from last version tested.
|
||||||
|
- [ ] Can be reviewed and tested.
|
||||||
|
|
||||||
|
## Package_check results
|
||||||
|
---
|
||||||
|
*If you have access to [App Continuous Integration for packagers](https://yunohost.org/#/packaging_apps_ci) you can provide a link to the package_check results like below, replacing '-NUM-' in this link by the PR number and USERNAME by your username on the ci-apps-dev. Or you provide a screenshot or a pastebin of the results*
|
||||||
|
|
||||||
|
[![Build Status](https://ci-apps-dev.yunohost.org/jenkins/job/zeronet_ynh%20PR-NUM-%20(USERNAME)/badge/icon)](https://ci-apps-dev.yunohost.org/jenkins/job/zeronet_ynh%20PR-NUM-%20(USERNAME)/)
|
20
scripts/_common.sh
Normal file
20
scripts/_common.sh
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# COMMON VARIABLES
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
# dependencies used by the app
|
||||||
|
pkg_dependencies="python3-venv python3-pip"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# PERSONAL HELPERS
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# EXPERIMENTAL HELPERS
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# FUTURE OFFICIAL HELPERS
|
||||||
|
#=================================================
|
|
@ -1,24 +1,63 @@
|
||||||
#!/usr/bin/env bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# GENERIC START
|
||||||
|
#=================================================
|
||||||
|
# IMPORT GENERIC HELPERS
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
#Keep this path for calling _common.sh inside the execution's context of backup and restore scripts
|
||||||
|
source ../settings/scripts/_common.sh
|
||||||
source /usr/share/yunohost/helpers
|
source /usr/share/yunohost/helpers
|
||||||
|
|
||||||
main() {
|
#=================================================
|
||||||
ynh_abort_if_errors
|
# MANAGE SCRIPT FAILURE
|
||||||
|
#=================================================
|
||||||
|
|
||||||
local app=$YNH_APP_INSTANCE_NAME
|
ynh_clean_setup () {
|
||||||
local backup_dir=$YNH_APP_BACKUP_DIR
|
### Remove this function if there's nothing to clean before calling the remove script.
|
||||||
local deploy_path=$( ynh_app_setting_get $app deploy_path )
|
true
|
||||||
local nginx_config_file=$( ynh_app_setting_get $app nginx_config_file )
|
|
||||||
local systemd_service_name=$( ynh_app_setting_get $app systemd_service_name )
|
|
||||||
local systemd_service_file=$( ynh_app_setting_get $app systemd_service_file )
|
|
||||||
local user_zeronet_dir=$( ynh_app_setting_get $app user_zeronet_dir )
|
|
||||||
|
|
||||||
ynh_backup $deploy_path "sources"
|
|
||||||
|
|
||||||
mkdir --parent ./conf
|
|
||||||
ynh_backup $nginx_config_file "conf/nginx.conf"
|
|
||||||
ynh_backup $systemd_service_file "conf/${systemd_service_name}"
|
|
||||||
ynh_backup $user_zeronet_dir "conf/.zeronet"
|
|
||||||
}
|
}
|
||||||
|
# Exit if an error occurs during the execution of the script
|
||||||
|
ynh_abort_if_errors
|
||||||
|
|
||||||
main
|
#=================================================
|
||||||
|
# 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)
|
||||||
|
datadir=$(ynh_app_setting_get --app=$app --key=datadir)
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# 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"
|
||||||
|
ynh_backup --src_path="$datadir"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# BACKUP THE NGINX CONFIGURATION
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# BACKUP SYSTEMD
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
ynh_backup --src_path="/etc/systemd/system/$app.service"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# END OF SCRIPT
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
ynh_print_info --message="Backup script completed for $app. (YunoHost will then actually copy those files to the archive)."
|
||||||
|
|
129
scripts/change_url
Normal file
129
scripts/change_url
Normal file
|
@ -0,0 +1,129 @@
|
||||||
|
#!/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
|
||||||
|
|
||||||
|
app=$YNH_APP_INSTANCE_NAME
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# LOAD SETTINGS
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Loading installation settings..."
|
||||||
|
|
||||||
|
# Needed for helper "ynh_add_nginx_config"
|
||||||
|
final_path=$(ynh_app_setting_get --app=$app --key=final_path)
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Backing up the app before changing its URL (may take a while)..."
|
||||||
|
|
||||||
|
# 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 a systemd service..."
|
||||||
|
|
||||||
|
ynh_systemd_action --service_name=$app --action="start" --log_path="$datadir/log/debug-last.log" --line_match="Ui.UiServer Web interface" --timeout=120
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# 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
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# GENERIC FINALISATION
|
||||||
|
#=================================================
|
||||||
|
# INTEGRATE SERVICE IN YUNOHOST
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Integrating service in YunoHost..."
|
||||||
|
|
||||||
|
ynh_replace_string --match_string="$old_domain" --replace_string="$new_domain" --target_file="/etc/systemd/system/${app}.service"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# START SYSTEMD SERVICE
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
ynh_systemd_action --service_name=$app --action="start" --log_path="$datadir/log/debug-last.log"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# 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"
|
|
@ -1,65 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
install_dependencies() {
|
|
||||||
apt-get install --quiet --yes python-msgpack python-gevent
|
|
||||||
}
|
|
||||||
|
|
||||||
app_config_get() {
|
|
||||||
local app_config=$1
|
|
||||||
local attribute=$2
|
|
||||||
|
|
||||||
cat ${app_config} \
|
|
||||||
| grep ${attribute} \
|
|
||||||
| cut --delimiter== --fields=2
|
|
||||||
}
|
|
||||||
|
|
||||||
make_deploy_path() {
|
|
||||||
local app=$1
|
|
||||||
local source_version=$2
|
|
||||||
|
|
||||||
echo "/var/www/${app}-v${source_version}" # e.g. /var/www/zeronet__2-0.5.3
|
|
||||||
}
|
|
||||||
|
|
||||||
download_file() {
|
|
||||||
local url=$1
|
|
||||||
local output_document=$2
|
|
||||||
wget --no-verbose --output-document=${output_document} ${url}
|
|
||||||
}
|
|
||||||
|
|
||||||
check_file_integrity() {
|
|
||||||
local file=$1
|
|
||||||
local expected_checksum=$2
|
|
||||||
|
|
||||||
echo "${expected_checksum} ${file}" | sha256sum --check --status \
|
|
||||||
|| ynh_die "Corrupt source!"
|
|
||||||
}
|
|
||||||
|
|
||||||
extract_archive() {
|
|
||||||
local src_file=$1
|
|
||||||
local deploy_path=$2
|
|
||||||
|
|
||||||
mkdir --parents ${deploy_path}
|
|
||||||
tar --extract --file=${src_file} --directory=${deploy_path} --overwrite --strip-components 1
|
|
||||||
}
|
|
||||||
|
|
||||||
obtain_and_deploy_source() {
|
|
||||||
local app_config=$1
|
|
||||||
local deploy_path=$2
|
|
||||||
local symlink_to_deploy_path=$3
|
|
||||||
local user=$4
|
|
||||||
local src_url=$(app_config_get $app_config "SOURCE_URL")
|
|
||||||
local src_checksum=$(app_config_get $app_config "SOURCE_SUM")
|
|
||||||
local src_file="/tmp/source.tar.gz"
|
|
||||||
|
|
||||||
download_file $src_url $src_file
|
|
||||||
check_file_integrity $src_file $src_checksum
|
|
||||||
extract_archive $src_file $deploy_path
|
|
||||||
|
|
||||||
rm -f $symlink_to_deploy_path
|
|
||||||
ln --symbolic --force $deploy_path $symlink_to_deploy_path
|
|
||||||
|
|
||||||
chown $user: -LR $symlink_to_deploy_path
|
|
||||||
chown $user: -h $symlink_to_deploy_path
|
|
||||||
}
|
|
254
scripts/install
254
scripts/install
|
@ -1,155 +1,161 @@
|
||||||
#!/usr/bin/env bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# GENERIC START
|
||||||
|
#=================================================
|
||||||
|
# IMPORT GENERIC HELPERS
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
source _common.sh
|
||||||
source /usr/share/yunohost/helpers
|
source /usr/share/yunohost/helpers
|
||||||
source functions.sh
|
|
||||||
|
|
||||||
nginx_config_file() {
|
#=================================================
|
||||||
local app=$1
|
# MANAGE SCRIPT FAILURE
|
||||||
local domain=$2
|
#=================================================
|
||||||
|
|
||||||
mkdir --parents "/etc/nginx/conf.d/${domain}.d"
|
ynh_clean_setup () {
|
||||||
|
### Remove this function if there's nothing to clean before calling the remove script.
|
||||||
echo "/etc/nginx/conf.d/${domain}.d/${app}.conf"
|
true
|
||||||
}
|
}
|
||||||
|
# Exit if an error occurs during the execution of the script
|
||||||
|
ynh_abort_if_errors
|
||||||
|
|
||||||
update_nginx_configuration() {
|
#=================================================
|
||||||
local app=$1
|
# RETRIEVE ARGUMENTS FROM THE MANIFEST
|
||||||
local config_template=$2
|
#=================================================
|
||||||
local config_file=$3
|
|
||||||
local path=$4
|
|
||||||
local ui_port=$5
|
|
||||||
|
|
||||||
cp $config_template $config_file
|
domain=$YNH_APP_ARG_DOMAIN
|
||||||
|
path_url="/"
|
||||||
|
password=$YNH_APP_ARG_PASSWORD
|
||||||
|
|
||||||
sed --in-place "s@YNH_WWW_PATH@${path}@g" ${config_file}
|
app=$YNH_APP_INSTANCE_NAME
|
||||||
sed --in-place "s@YNH_LOCAL_PORT@${ui_port}/@g" ${config_file}
|
datadir="/home/yunohost.app/${app}"
|
||||||
|
#=================================================
|
||||||
|
# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Validating installation parameters..."
|
||||||
|
|
||||||
service nginx reload
|
final_path=/var/www/$app
|
||||||
}
|
test ! -e "$final_path" || ynh_die --message="This path already contains a folder"
|
||||||
|
|
||||||
systemd_service_name() {
|
# Register (book) web path
|
||||||
local app=$1
|
ynh_webpath_register --app=$app --domain=$domain --path_url=$path_url
|
||||||
local user=$2
|
|
||||||
|
|
||||||
echo "ynh-${app}-${user}.service"
|
#=================================================
|
||||||
}
|
# STORE SETTINGS FROM MANIFEST
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Storing installation settings..."
|
||||||
|
|
||||||
#
|
ynh_app_setting_set --app=$app --key=domain --value=$domain
|
||||||
# Creates service which runs zeronet on unique
|
ynh_app_setting_set --app=$app --key=path --value=$path_url
|
||||||
# UserInterace and FileServer port for the user
|
ynh_app_setting_set --app=$app --key=datadir --value=$datadir
|
||||||
# ZeroNet data is stored in the users home directory in ~/.zeronet
|
ynh_app_setting_set --app=$app --key=password --value=$password
|
||||||
#
|
|
||||||
update_systemd_configuration() {
|
|
||||||
local app=$1
|
|
||||||
local service_template=$2
|
|
||||||
local service_name=$3
|
|
||||||
local service_file=$4
|
|
||||||
local user=$5
|
|
||||||
local ui_port=$6
|
|
||||||
local symlink_to_deploy_path=$7
|
|
||||||
local zeronet_dir=$8
|
|
||||||
local ui_host=$9
|
|
||||||
local fs_port=${10} # only works with bash
|
|
||||||
|
|
||||||
# create zeronet user data location
|
#=================================================
|
||||||
local data_dir=$zeronet_dir/data
|
# STANDARD MODIFICATIONS
|
||||||
local log_dir=$zeronet_dir/log
|
#=================================================
|
||||||
|
# FIND AND OPEN A PORT
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Configuring firewall..."
|
||||||
|
|
||||||
mkdir -p $data_dir
|
# Find an available port
|
||||||
mkdir -p $log_dir
|
port=$(ynh_find_port --port=43110)
|
||||||
chown -R $user: $zeronet_dir
|
fs_port=$(ynh_find_port --port=15441)
|
||||||
|
ynh_app_setting_set --app=$app --key=port --value=$port
|
||||||
|
ynh_app_setting_set --app=$app --key=fs_port --value=$fs_port
|
||||||
|
|
||||||
# configure systemd service
|
# Open the port
|
||||||
cp $service_template $service_file
|
ynh_exec_warn_less yunohost firewall allow --no-upnp TCP $fs_port
|
||||||
|
|
||||||
sed --in-place "s@__USER__@$user@g" $service_file
|
#=================================================
|
||||||
sed --in-place "s@__UI_PORT__@$ui_port@g" $service_file
|
# INSTALL DEPENDENCIES
|
||||||
sed --in-place "s@__FS_PORT__@$fs_port@g" $service_file
|
#=================================================
|
||||||
sed --in-place "s@__UI_HOST__@$ui_host@g" $service_file
|
ynh_script_progression --message="Installing dependencies..."
|
||||||
sed --in-place "s@__APP_NAME__@$app@g" $service_file
|
|
||||||
sed --in-place "s@__WORKING_DIRECTORY__@$symlink_to_deploy_path@g" $service_file
|
|
||||||
sed --in-place "s@__DATA_DIR__@$data_dir@g" $service_file
|
|
||||||
sed --in-place "s@__LOG_DIR__@$log_dir@g" $service_file
|
|
||||||
|
|
||||||
systemctl daemon-reload
|
ynh_install_app_dependencies $pkg_dependencies
|
||||||
systemctl enable $service_name
|
|
||||||
systemctl start $service_name
|
|
||||||
}
|
|
||||||
|
|
||||||
# Source: https://github.com/YunoHost/yunohost/blob/901e3df9b604f542f2c460aad05bcc8efc9fd054/data/helpers.d/network
|
pip3 install gevent-websocket msgpack-python gevent base58 merkletools rsa PySocks pyasn1 websocket_client gevent-ws coincurve maxminddb
|
||||||
#
|
|
||||||
# Find a free port and return it
|
|
||||||
#
|
|
||||||
# example: port=$(ynh_find_port 8080)
|
|
||||||
#
|
|
||||||
# usage: ynh_find_port begin_port
|
|
||||||
# | arg: begin_port - port to start to search
|
|
||||||
ynh_find_port () {
|
|
||||||
port=$1
|
|
||||||
|
|
||||||
while netcat -z 127.0.0.1 $port # Check if the port is free
|
#=================================================
|
||||||
do
|
# DOWNLOAD, CHECK AND UNPACK SOURCE
|
||||||
port=$((port+1)) # Else, pass to next port
|
#=================================================
|
||||||
done
|
ynh_script_progression --message="Setting up source files..."
|
||||||
echo $port
|
|
||||||
}
|
|
||||||
|
|
||||||
main() {
|
ynh_app_setting_set --app=$app --key=final_path --value=$final_path
|
||||||
ynh_abort_if_errors
|
# Download, check integrity, uncompress and patch the source from app.src
|
||||||
|
ynh_setup_source --dest_dir="$final_path"
|
||||||
|
|
||||||
local app=$YNH_APP_INSTANCE_NAME
|
#=================================================
|
||||||
local number=$YNH_APP_INSTANCE_NUMBER
|
# NGINX CONFIGURATION
|
||||||
local domain=$YNH_APP_ARG_DOMAIN
|
#=================================================
|
||||||
local user=$YNH_APP_ARG_ADMIN
|
ynh_script_progression --message="Configuring NGINX web server..."
|
||||||
|
|
||||||
local ui_port=$( ynh_find_port 43110 ) # the port zeronet ui listens on
|
# Create a dedicated NGINX config
|
||||||
local fs_port=$( ynh_find_port 15441 ) # the port zeronet fileserver listens on
|
ynh_add_nginx_config
|
||||||
|
|
||||||
local path="/"
|
#=================================================
|
||||||
local is_public=0 # by defaut access to zeronet is private
|
# CREATE DEDICATED USER
|
||||||
local nginx_config_template=../conf/nginx.conf.template
|
#=================================================
|
||||||
local systemd_service_template=../conf/systemd.service.template
|
ynh_script_progression --message="Configuring system user..."
|
||||||
local app_config=../conf/app.src
|
|
||||||
local systemd_service_dir=/etc/systemd/system
|
|
||||||
|
|
||||||
local url=$domain$path
|
# Create a system user
|
||||||
local source_version=$( app_config_get $app_config "SOURCE_VERSION" )
|
ynh_system_user_create --username=$app --home_dir=$datadir -s
|
||||||
local systemd_service_name=$( systemd_service_name $app $user )
|
|
||||||
local systemd_service_file="${systemd_service_dir}/${systemd_service_name}"
|
|
||||||
local nginx_config_file=$( nginx_config_file $app $domain )
|
|
||||||
local user_zeronet_dir="/home/${user}/.zeronet"
|
|
||||||
local deploy_path=$( make_deploy_path $app $source_version )
|
|
||||||
local symlink_to_deploy_path="/var/www/${app}"
|
|
||||||
|
|
||||||
ynh_webpath_available $domain $path
|
#=================================================
|
||||||
ynh_webpath_register $app $domain $path
|
# SETUP SYSTEMD
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Configuring a systemd service..."
|
||||||
|
|
||||||
ynh_user_exists $user
|
# Create a dedicated systemd config
|
||||||
|
ynh_add_systemd_config
|
||||||
|
|
||||||
ynh_app_setting_set $app is_public $is_public
|
#=================================================
|
||||||
ynh_app_setting_set $app domain $domain
|
# SETUP APPLICATION PERMISSIONS
|
||||||
ynh_app_setting_set $app path $path
|
#=================================================
|
||||||
ynh_app_setting_set $app url $url
|
|
||||||
ynh_app_setting_set $app admin $user
|
|
||||||
ynh_app_setting_set $app allowed_users $user
|
|
||||||
ynh_app_setting_set $app deploy_path $deploy_path
|
|
||||||
ynh_app_setting_set $app symlink_to_deploy_path $symlink_to_deploy_path
|
|
||||||
ynh_app_setting_set $app ui_port $ui_port
|
|
||||||
ynh_app_setting_set $app fs_port $fs_port
|
|
||||||
ynh_app_setting_set $app installed_version $source_version
|
|
||||||
ynh_app_setting_set $app nginx_config_file $nginx_config_file
|
|
||||||
ynh_app_setting_set $app user $user
|
|
||||||
ynh_app_setting_set $app user_zeronet_dir $user_zeronet_dir
|
|
||||||
ynh_app_setting_set $app systemd_service_name $systemd_service_name
|
|
||||||
ynh_app_setting_set $app systemd_service_file $systemd_service_file
|
|
||||||
|
|
||||||
install_dependencies
|
# Enable password authentication for Zeronet
|
||||||
|
mv $final_path/plugins/disabled-UiPassword $final_path/plugins/UiPassword
|
||||||
|
|
||||||
obtain_and_deploy_source $app_config $deploy_path $symlink_to_deploy_path $user
|
# Set right permissions
|
||||||
|
mkdir -p $datadir/data
|
||||||
|
mkdir -p $datadir/log
|
||||||
|
chown -R $app: $final_path
|
||||||
|
chown -R $app: $datadir
|
||||||
|
|
||||||
update_nginx_configuration $app $nginx_config_template $nginx_config_file $path $ui_port
|
#=================================================
|
||||||
update_systemd_configuration $app $systemd_service_template $systemd_service_name $systemd_service_file \
|
# INTEGRATE SERVICE IN YUNOHOST
|
||||||
$user $ui_port $symlink_to_deploy_path $user_zeronet_dir $domain $fs_port
|
#=================================================
|
||||||
}
|
ynh_script_progression --message="Integrating service in YunoHost..."
|
||||||
|
|
||||||
main
|
ynh_add_systemd_config --service="$app" --template="systemd.service" --others_var="fs_port port domain datadir password"
|
||||||
|
|
||||||
|
yunohost service add $app --description "$app service" --log "$datadir/log/debug-last.log" --needs_exposed_ports "$fs_port"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# START SYSTEMD SERVICE
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Starting a systemd service..."
|
||||||
|
|
||||||
|
# Start a systemd service
|
||||||
|
ynh_systemd_action --service_name=$app --action="start" --log_path="$datadir/log/debug-last.log" --line_match="Ui.UiServer Web interface" --timeout=120
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# SETUP SSOWAT
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Configuring permissions..."
|
||||||
|
|
||||||
|
# Allow the app to be public
|
||||||
|
ynh_permission_update --permission="main" --add="visitors"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# 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="Installation of $app completed"
|
||||||
|
|
127
scripts/remove
127
scripts/remove
|
@ -1,57 +1,96 @@
|
||||||
#!/usr/bin/env bash
|
#!/bin/bash
|
||||||
set -u
|
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# GENERIC START
|
||||||
|
#=================================================
|
||||||
|
# IMPORT GENERIC HELPERS
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
source _common.sh
|
||||||
source /usr/share/yunohost/helpers
|
source /usr/share/yunohost/helpers
|
||||||
|
|
||||||
remove_systemd_service_() {
|
#=================================================
|
||||||
local service_name=$1
|
# LOAD SETTINGS
|
||||||
local service_file=$2
|
#=================================================
|
||||||
|
ynh_script_progression --message="Loading installation settings..."
|
||||||
|
|
||||||
systemctl stop $service_name
|
app=$YNH_APP_INSTANCE_NAME
|
||||||
systemctl disable $service_name
|
|
||||||
rm $service_file
|
|
||||||
systemctl daemon-reload
|
|
||||||
systemctl reset-failed
|
|
||||||
}
|
|
||||||
|
|
||||||
remove_nginx_config() {
|
domain=$(ynh_app_setting_get --app=$app --key=domain)
|
||||||
local nginx_config_file=$1
|
port=$(ynh_app_setting_get --app=$app --key=port)
|
||||||
|
fs_port=$(ynh_app_setting_get --app=$app --key=fs_port)
|
||||||
|
final_path=$(ynh_app_setting_get --app=$app --key=final_path)
|
||||||
|
datadir=$(ynh_app_setting_get --app=$app --key=datadir)
|
||||||
|
|
||||||
ynh_secure_remove $nginx_config_file
|
#=================================================
|
||||||
service nginx reload
|
# STANDARD REMOVE
|
||||||
}
|
#=================================================
|
||||||
|
# REMOVE SERVICE INTEGRATION IN YUNOHOST
|
||||||
|
#=================================================
|
||||||
|
|
||||||
remove_user_data() {
|
# Remove the service from the list of services known by Yunohost (added from `yunohost service add`)
|
||||||
local user_zeronet_dir=$1
|
if ynh_exec_warn_less yunohost service status $app >/dev/null
|
||||||
|
then
|
||||||
|
ynh_script_progression --message="Removing $app service integration..."
|
||||||
|
yunohost service remove $app
|
||||||
|
fi
|
||||||
|
|
||||||
ynh_secure_remove $user_zeronet_dir
|
#=================================================
|
||||||
}
|
# STOP AND REMOVE SERVICE
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Stopping and removing the systemd service..."
|
||||||
|
|
||||||
remove_zeronet() {
|
# Remove the dedicated systemd config
|
||||||
local deploy_path=$1
|
ynh_remove_systemd_config
|
||||||
local symlink_to_deploy_path=$2
|
|
||||||
|
|
||||||
ynh_secure_remove $deploy_path
|
#=================================================
|
||||||
ynh_secure_remove $symlink_to_deploy_path
|
# REMOVE DEPENDENCIES
|
||||||
}
|
#=================================================
|
||||||
|
ynh_script_progression --message="Removing dependencies..."
|
||||||
|
|
||||||
main() {
|
# Remove metapackage and its dependencies
|
||||||
local app=${YNH_APP_INSTANCE_NAME}
|
pip3 uninstall -y gevent-websocket msgpack-python gevent base58 merkletools rsa PySocks pyasn1 websocket_client gevent-ws coincurve maxminddb
|
||||||
local domain=$( ynh_app_setting_get $app domain )
|
ynh_remove_app_dependencies
|
||||||
local user=$( ynh_app_setting_get $app admin )
|
|
||||||
local nginx_config_file=$( ynh_app_setting_get $app nginx_config_file )
|
|
||||||
local systemd_service_name=$( ynh_app_setting_get $app systemd_service_name )
|
|
||||||
local systemd_service_file=$( ynh_app_setting_get $app systemd_service_file )
|
|
||||||
local deploy_path=$( ynh_app_setting_get $app deploy_path )
|
|
||||||
local symlink_to_deploy_path=$( ynh_app_setting_get $app symlink_to_deploy_path )
|
|
||||||
local user_zeronet_dir=$( ynh_app_setting_get $app user_zeronet_dir )
|
|
||||||
|
|
||||||
if [ -n $domain ]; then
|
#=================================================
|
||||||
remove_nginx_config $nginx_config_file
|
# REMOVE APP MAIN DIR
|
||||||
remove_user_data $user_zeronet_dir
|
#=================================================
|
||||||
remove_systemd_service_ $systemd_service_name $systemd_service_file
|
ynh_script_progression --message="Removing app main directory..."
|
||||||
remove_zeronet $deploy_path $symlink_to_deploy_path
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
main
|
# Remove the app directory securely
|
||||||
|
ynh_secure_remove --file="$final_path"
|
||||||
|
ynh_secure_remove --file="$datadir"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# REMOVE NGINX CONFIGURATION
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Removing NGINX web server configuration..."
|
||||||
|
|
||||||
|
# Remove the dedicated NGINX config
|
||||||
|
ynh_remove_nginx_config
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# CLOSE A PORT
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
if yunohost firewall list | grep -q "\- $fs_port$"
|
||||||
|
then
|
||||||
|
ynh_script_progression --message="Closing port $port..."
|
||||||
|
ynh_exec_warn_less yunohost firewall disallow TCP $fs_port
|
||||||
|
fi
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# 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"
|
||||||
|
|
149
scripts/restore
149
scripts/restore
|
@ -1,61 +1,124 @@
|
||||||
#!/usr/bin/env bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# GENERIC START
|
||||||
|
#=================================================
|
||||||
|
# IMPORT GENERIC HELPERS
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
source ../settings/scripts/_common.sh
|
||||||
source /usr/share/yunohost/helpers
|
source /usr/share/yunohost/helpers
|
||||||
|
|
||||||
# TODO: enable with fix of https://github.com/YunoHost/yunohost/pull/246
|
#=================================================
|
||||||
# source .hfunctions
|
# MANAGE SCRIPT FAILURE
|
||||||
|
#=================================================
|
||||||
|
|
||||||
# TODO: remove with fix of https://github.com/YunoHost/yunohost/pull/246
|
ynh_clean_setup () {
|
||||||
install_dependencies() {
|
true
|
||||||
apt-get install --quiet --yes python-msgpack python-gevent
|
|
||||||
}
|
}
|
||||||
|
# Exit if an error occurs during the execution of the script
|
||||||
|
ynh_abort_if_errors
|
||||||
|
|
||||||
is_app_restorable() {
|
#=================================================
|
||||||
local -r domain=$1
|
# LOAD SETTINGS
|
||||||
local -r path=$2
|
#=================================================
|
||||||
local -r deploy_path=$3
|
ynh_script_progression --message="Loading installation settings..."
|
||||||
|
|
||||||
ynh_webpath_available $domain $path \
|
app=$YNH_APP_INSTANCE_NAME
|
||||||
|| ynh_die "Path not available: ${domain}${path}"
|
|
||||||
|
|
||||||
test ! -d $deploy_path \
|
domain=$(ynh_app_setting_get --app=$app --key=domain)
|
||||||
|| ynh_die "There is already a directory: $deploy_path"
|
path_url=$(ynh_app_setting_get --app=$app --key=path)
|
||||||
}
|
final_path=$(ynh_app_setting_get --app=$app --key=final_path)
|
||||||
|
port=$(ynh_app_setting_get --app=$app --key=port)
|
||||||
|
fs_port=$(ynh_app_setting_get --app=$app --key=fs_port)
|
||||||
|
datadir=$(ynh_app_setting_get --app=$app --key=datadir)
|
||||||
|
|
||||||
main() {
|
#=================================================
|
||||||
ynh_abort_if_errors
|
# CHECK IF THE APP CAN BE RESTORED
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Validating restoration parameters..."
|
||||||
|
|
||||||
local app=$YNH_APP_INSTANCE_NAME
|
ynh_webpath_available --domain=$domain --path_url=$path_url \
|
||||||
local domain=$(ynh_app_setting_get $app domain)
|
|| ynh_die --message="Path not available: ${domain}${path_url}"
|
||||||
local path=$(ynh_app_setting_get $app path)
|
test ! -d $final_path \
|
||||||
local deploy_path=$(ynh_app_setting_get $app deploy_path)
|
|| ynh_die --message="There is already a directory: $final_path "
|
||||||
local symlink_to_deploy_path=$(ynh_app_setting_get $app symlink_to_deploy_path)
|
|
||||||
local nginx_config_file=$( ynh_app_setting_get $app nginx_config_file )
|
|
||||||
local systemd_service_name=$( ynh_app_setting_get $app systemd_service_name )
|
|
||||||
local systemd_service_file=$( ynh_app_setting_get $app systemd_service_file )
|
|
||||||
local user=$( ynh_app_setting_get $app user )
|
|
||||||
local user_zeronet_dir=$( ynh_app_setting_get $app user_zeronet_dir )
|
|
||||||
|
|
||||||
local url=$(ynh_app_setting_get $app url)
|
#=================================================
|
||||||
|
# STANDARD RESTORATION STEPS
|
||||||
|
#=================================================
|
||||||
|
# RESTORE THE NGINX CONFIGURATION
|
||||||
|
#=================================================
|
||||||
|
|
||||||
is_app_restorable $domain $path $deploy_path
|
ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf"
|
||||||
|
|
||||||
install_dependencies
|
#=================================================
|
||||||
|
# RESTORE THE APP MAIN DIR
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Restoring the app main directory..."
|
||||||
|
|
||||||
cp -a "./sources" $deploy_path
|
ynh_restore_file --origin_path="$final_path"
|
||||||
ln --symbolic --force $deploy_path $symlink_to_deploy_path
|
ynh_restore_file --origin_path="$datadir"
|
||||||
chown $user: -LR $symlink_to_deploy_path
|
|
||||||
chown $user: -h $symlink_to_deploy_path
|
|
||||||
|
|
||||||
ynh_secure_remove $user_zeronet_dir
|
#=================================================
|
||||||
cp -aR "./conf/.zeronet" $user_zeronet_dir
|
# RECREATE THE DEDICATED USER
|
||||||
chown -R $user: $user_zeronet_dir
|
#=================================================
|
||||||
|
ynh_script_progression --message="Recreating the dedicated system user..."
|
||||||
|
|
||||||
cp -a "./conf/nginx.conf" $nginx_config_file
|
# Create the dedicated user (if not existing)
|
||||||
service nginx reload
|
ynh_system_user_create --username=$app --home_dir=$datadir -s
|
||||||
|
|
||||||
cp -a "./conf/${systemd_service_name}" $systemd_service_file
|
#=================================================
|
||||||
systemctl restart $systemd_service_name
|
# RESTORE USER RIGHTS
|
||||||
}
|
#=================================================
|
||||||
|
|
||||||
main
|
# Restore permissions on app files
|
||||||
|
chown -R $app: $final_path
|
||||||
|
chown -R $app: $datadir
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# SPECIFIC RESTORATION
|
||||||
|
#=================================================
|
||||||
|
# REINSTALL DEPENDENCIES
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Reinstalling dependencies..."
|
||||||
|
|
||||||
|
# Define and install dependencies
|
||||||
|
ynh_install_app_dependencies $pkg_dependencies
|
||||||
|
pip3 install gevent-websocket msgpack-python gevent base58 merkletools rsa PySocks pyasn1 websocket_client gevent-ws coincurve maxminddb
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# RESTORE SYSTEMD
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Restoring the systemd configuration..."
|
||||||
|
|
||||||
|
ynh_restore_file --origin_path="/etc/systemd/system/$app.service"
|
||||||
|
systemctl enable $app.service
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# INTEGRATE SERVICE IN YUNOHOST
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Integrating service in YunoHost..."
|
||||||
|
|
||||||
|
yunohost service add $app --description "$app service" --log "$datadir/log/debug-last.log" --needs_exposed_ports "$fs_port"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# START SYSTEMD SERVICE
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Starting a systemd service..."
|
||||||
|
|
||||||
|
ynh_systemd_action --service_name=$app --action="start" --log_path="$datadir/log/debug-last.log" --line_match="Ui.UiServer Web interface" --timeout=120
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# GENERIC FINALIZATION
|
||||||
|
#=================================================
|
||||||
|
# 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"
|
||||||
|
|
163
scripts/upgrade
163
scripts/upgrade
|
@ -1,33 +1,152 @@
|
||||||
#!/usr/bin/env bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# GENERIC START
|
||||||
|
#=================================================
|
||||||
|
# IMPORT GENERIC HELPERS
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
source _common.sh
|
||||||
source /usr/share/yunohost/helpers
|
source /usr/share/yunohost/helpers
|
||||||
source functions.sh
|
|
||||||
|
|
||||||
main() {
|
#=================================================
|
||||||
ynh_abort_if_errors
|
# LOAD SETTINGS
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Loading installation settings..."
|
||||||
|
|
||||||
local app=${YNH_APP_INSTANCE_NAME}
|
app=$YNH_APP_INSTANCE_NAME
|
||||||
local user=$( ynh_app_setting_get $app user )
|
|
||||||
local deploy_path=$( ynh_app_setting_get $app deploy_path )
|
|
||||||
local symlink_to_deploy_path=$( ynh_app_setting_get $app symlink_to_deploy_path )
|
|
||||||
local installed_version=$( ynh_app_setting_get $app installed_version )
|
|
||||||
local systemd_service_name=$( ynh_app_setting_get $app systemd_service_name )
|
|
||||||
local app_config=../conf/app.src
|
|
||||||
local source_version=$(app_config_get $app_config "SOURCE_VERSION")
|
|
||||||
|
|
||||||
local old_deploy_path=$deploy_path
|
domain=$(ynh_app_setting_get --app=$app --key=domain)
|
||||||
local new_deploy_path=$( make_deploy_path $app $source_version )
|
path_url=$(ynh_app_setting_get --app=$app --key=path)
|
||||||
|
final_path=$(ynh_app_setting_get --app=$app --key=final_path)
|
||||||
|
port=$(ynh_app_setting_get --app=$app --key=port)
|
||||||
|
fs_port=$(ynh_app_setting_get --app=$app --key=fs_port)
|
||||||
|
datadir=$(ynh_app_setting_get --app=$app --key=datadir)
|
||||||
|
password=$(ynh_app_setting_get --app=$app --key=password)
|
||||||
|
|
||||||
obtain_and_deploy_source $app_config $new_deploy_path $symlink_to_deploy_path $user
|
#=================================================
|
||||||
|
# CHECK VERSION
|
||||||
|
#=================================================
|
||||||
|
|
||||||
systemctl restart $systemd_service_name
|
upgrade_type=$(ynh_check_app_version_changed)
|
||||||
|
|
||||||
ynh_app_setting_set $app installed_version $source_version
|
#=================================================
|
||||||
ynh_app_setting_set $app deploy_path $new_deploy_path
|
# ENSURE DOWNWARD COMPATIBILITY
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Ensuring downward compatibility..."
|
||||||
|
|
||||||
if [ $new_deploy_path != $old_deploy_path ]; then
|
# If final_path doesn't exist, create it
|
||||||
ynh_secure_remove $old_deploy_path
|
if [ -z "$final_path" ]; then
|
||||||
fi
|
final_path=/var/www/$app
|
||||||
|
ynh_app_setting_set --app=$app --key=final_path --value=$final_path
|
||||||
|
fi
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Backing up the app before upgrading (may take a while)..."
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
main
|
#=================================================
|
||||||
|
# STANDARD UPGRADE STEPS
|
||||||
|
#=================================================
|
||||||
|
# STOP SYSTEMD SERVICE
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Stopping a systemd service..."
|
||||||
|
|
||||||
|
ynh_systemd_action --service_name=$app --action="stop" --log_path="$datadir/log/debug-last.log"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# DOWNLOAD, CHECK AND UNPACK SOURCE
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
if [ "$upgrade_type" == "UPGRADE_APP" ]
|
||||||
|
then
|
||||||
|
ynh_script_progression --message="Upgrading source files..."
|
||||||
|
|
||||||
|
# Download, check integrity, uncompress and patch the source from app.src
|
||||||
|
ynh_secure_remove --file="$final_path"
|
||||||
|
ynh_setup_source --dest_dir="$final_path"
|
||||||
|
fi
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# NGINX CONFIGURATION
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Upgrading NGINX web server configuration..."
|
||||||
|
|
||||||
|
# Create a dedicated NGINX config
|
||||||
|
ynh_add_nginx_config
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# UPGRADE DEPENDENCIES
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Upgrading dependencies..."
|
||||||
|
|
||||||
|
ynh_install_app_dependencies $pkg_dependencies
|
||||||
|
|
||||||
|
pip3 install gevent-websocket msgpack-python gevent base58 merkletools rsa PySocks pyasn1 websocket_client gevent-ws coincurve maxminddb
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# CREATE DEDICATED USER
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Making sure dedicated system user exists..."
|
||||||
|
|
||||||
|
# Create a dedicated user (if not existing)
|
||||||
|
ynh_system_user_create --username=$app --home_dir=$datadir -s
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# SETUP SYSTEMD
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Upgrading systemd configuration..."
|
||||||
|
|
||||||
|
# Create a dedicated systemd config
|
||||||
|
ynh_add_systemd_config
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# GENERIC FINALIZATION
|
||||||
|
#=================================================
|
||||||
|
# SECURE FILES AND DIRECTORIES
|
||||||
|
#=================================================
|
||||||
|
|
||||||
|
# Enable password authentication for Zeronet
|
||||||
|
mv $final_path/plugins/disabled-UiPassword $final_path/plugins/UiPassword
|
||||||
|
|
||||||
|
# Set permissions on app files
|
||||||
|
chown -R $app: $final_path
|
||||||
|
chown -R $app: $datadir
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# INTEGRATE SERVICE IN YUNOHOST
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Integrating service in YunoHost..."
|
||||||
|
|
||||||
|
ynh_add_systemd_config --service="$app" --template="systemd.service" --others_var="fs_port port domain datadir password"
|
||||||
|
yunohost service add $app --description "$app service" --log "$datadir/log/debug-last.log" --needs_exposed_ports "$fs_port"
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# START SYSTEMD SERVICE
|
||||||
|
#=================================================
|
||||||
|
ynh_script_progression --message="Starting a systemd service..."
|
||||||
|
|
||||||
|
ynh_systemd_action --service_name=$app --action="start" --log_path="$datadir/log/debug-last.log" --line_match="Ui.UiServer Web interface" --timeout=120
|
||||||
|
|
||||||
|
#=================================================
|
||||||
|
# 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"
|
||||||
|
|
Loading…
Reference in a new issue