commit
df28a0a24e
@ -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. *Determine if 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.* |
||||
- *When in doubt, post here and we will figure it out together.* |
||||
3. *Delete the 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 the_app |
||||
``` |
||||
- *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.* |
@ -0,0 +1,16 @@ |
||||
## Problem |
||||
|
||||
- *Description of why you made this PR* |
||||
|
||||
## Solution |
||||
|
||||
- *And how do you fix that problem* |
||||
|
||||
## PR Status |
||||
|
||||
- [ ] Code finished and ready to be reviewed/tested |
||||
- [ ] The fix/enhancement were manually tested (if applicable) |
||||
|
||||
## Automatic tests |
||||
|
||||
Automatic tests can be triggered on https://ci-apps-dev.yunohost.org/ *after creating the PR*, by commenting "!testme", "!gogogadgetoci" or "By the power of systemd, I invoke The Great App CI to test this Pull Request!". (N.B. : for this to work you need to be a member of the Yunohost-Apps organization) |
@ -0,0 +1,137 @@ |
||||
#!/bin/bash |
||||
|
||||
#================================================= |
||||
# PACKAGE UPDATING HELPER |
||||
#================================================= |
||||
|
||||
# This script is meant to be run by GitHub Actions |
||||
# The YunoHost-Apps organisation offers a template Action to run this script periodically |
||||
# Since each app is different, maintainers can adapt its contents so as to perform |
||||
# automatic actions when a new upstream release is detected. |
||||
|
||||
# Remove this exit command when you are ready to run this Action |
||||
exit 1 |
||||
|
||||
#================================================= |
||||
# FETCHING LATEST RELEASE AND ITS ASSETS |
||||
#================================================= |
||||
|
||||
# Fetching information |
||||
current_version=$(cat manifest.json | jq -j '.version|split("~")[0]') |
||||
repo=$(cat manifest.json | jq -j '.upstream.code|split("https://github.com/")[1]') |
||||
# Some jq magic is needed, because the latest upstream release is not always the latest version (e.g. security patches for older versions) |
||||
version=$(curl --silent "https://api.github.com/repos/$repo/releases" | jq -r '.[] | select( .prerelease != true ) | .tag_name' | sort -V | tail -1) |
||||
assets=($(curl --silent "https://api.github.com/repos/$repo/releases" | jq -r '[ .[] | select(.tag_name=="'$version'").assets[].browser_download_url ] | join(" ") | @sh' | tr -d "'")) |
||||
|
||||
# Later down the script, we assume the version has only digits and dots |
||||
# Sometimes the release name starts with a "v", so let's filter it out. |
||||
# You may need more tweaks here if the upstream repository has different naming conventions. |
||||
if [[ ${version:0:1} == "v" || ${version:0:1} == "V" ]]; then |
||||
version=${version:1} |
||||
fi |
||||
|
||||
# Setting up the environment variables |
||||
echo "Current version: $current_version" |
||||
echo "Latest release from upstream: $version" |
||||
echo "VERSION=$version" >> $GITHUB_ENV |
||||
echo "REPO=$repo" >> $GITHUB_ENV |
||||
# For the time being, let's assume the script will fail |
||||
echo "PROCEED=false" >> $GITHUB_ENV |
||||
|
||||
# Proceed only if the retrieved version is greater than the current one |
||||
if ! dpkg --compare-versions "$current_version" "lt" "$version" ; then |
||||
echo "::warning ::No new version available" |
||||
exit 0 |
||||
# Proceed only if a PR for this new version does not already exist |
||||
elif git ls-remote -q --exit-code --heads https://github.com/$GITHUB_REPOSITORY.git ci-auto-update-v$version ; then |
||||
echo "::warning ::A branch already exists for this update" |
||||
exit 0 |
||||
fi |
||||
|
||||
# Each release can hold multiple assets (e.g. binaries for different architectures, source code, etc.) |
||||
echo "${#assets[@]} available asset(s)" |
||||
|
||||
#================================================= |
||||
# UPDATE SOURCE FILES |
||||
#================================================= |
||||
|
||||
# Here we use the $assets variable to get the resources published in the upstream release. |
||||
# Here is an example for Grav, it has to be adapted in accordance with how the upstream releases look like. |
||||
|
||||
# Let's loop over the array of assets URLs |
||||
for asset_url in ${assets[@]}; do |
||||
|
||||
echo "Handling asset at $asset_url" |
||||
|
||||
# Assign the asset to a source file in conf/ directory |
||||
# Here we base the source file name upon a unique keyword in the assets url (admin vs. update) |
||||
# Leave $src empty to ignore the asset |
||||
case $asset_url in |
||||
*"admin"*) |
||||
src="app" |
||||
;; |
||||
*"update"*) |
||||
src="app-upgrade" |
||||
;; |
||||
*) |
||||
src="" |
||||
;; |
||||
esac |
||||
|
||||
# If $src is not empty, let's process the asset |
||||
if [ ! -z "$src" ]; then |
||||
|
||||
# Create the temporary directory |
||||
tempdir="$(mktemp -d)" |
||||
|
||||
# Download sources and calculate checksum |
||||
filename=${asset_url##*/} |
||||
curl --silent -4 -L $asset_url -o "$tempdir/$filename" |
||||
checksum=$(sha256sum "$tempdir/$filename" | head -c 64) |
||||
|
||||
# Delete temporary directory |
||||
rm -rf $tempdir |
||||
|
||||
# Get extension |
||||
if [[ $filename == *.tar.gz ]]; then |
||||
extension=tar.gz |
||||
else |
||||
extension=${filename##*.} |
||||
fi |
||||
|
||||
# Rewrite source file |
||||
cat <<EOT > conf/$src.src |
||||
SOURCE_URL=$asset_url |
||||
SOURCE_SUM=$checksum |
||||
SOURCE_SUM_PRG=sha256sum |
||||
SOURCE_FORMAT=$extension |
||||
SOURCE_IN_SUBDIR=true |
||||
SOURCE_FILENAME= |
||||
EOT |
||||
echo "... conf/$src.src updated" |
||||
|
||||
else |
||||
echo "... asset ignored" |
||||
fi |
||||
|
||||
done |
||||
|
||||
#================================================= |
||||
# SPECIFIC UPDATE STEPS |
||||
#================================================= |
||||
|
||||
# Any action on the app's source code can be done. |
||||
# The GitHub Action workflow takes care of committing all changes after this script ends. |
||||
|
||||
#================================================= |
||||
# GENERIC FINALIZATION |
||||
#================================================= |
||||
|
||||
# Replace new version in manifest |
||||
echo "$(jq -s --indent 4 ".[] | .version = \"$version~ynh1\"" manifest.json)" > manifest.json |
||||
|
||||
# No need to update the README, yunohost-bot takes care of it |
||||
|
||||
# The Action will proceed only if the PROCEED environment variable is set to true |
||||
echo "PROCEED=true" >> $GITHUB_ENV |
||||
exit 0 |
@ -0,0 +1,2 @@ |
||||
*~ |
||||
*.sw[op] |
@ -0,0 +1,21 @@ |
||||
MIT License |
||||
|
||||
Copyright (c) 2022 jukefr |
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
of this software and associated documentation files (the "Software"), to deal |
||||
in the Software without restriction, including without limitation the rights |
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
copies of the Software, and to permit persons to whom the Software is |
||||
furnished to do so, subject to the following conditions: |
||||
|
||||
The above copyright notice and this permission notice shall be included in all |
||||
copies or substantial portions of the Software. |
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
||||
SOFTWARE. |
@ -0,0 +1,61 @@ |
||||
<!-- |
||||
N.B.: This README was automatically generated by https://github.com/YunoHost/apps/tree/master/tools/README-generator |
||||
It shall NOT be edited by hand. |
||||
--> |
||||
|
||||
# Ring-MQTT Bridge for YunoHost |
||||
|
||||
[](https://dash.yunohost.org/appci/app/ring-mqtt)   |
||||
[](https://install-app.yunohost.org/?app=ring-mqtt) |
||||
|
||||
*[Lire ce readme en franรงais.](./README_fr.md)* |
||||
|
||||
> *This package allows you to install Ring-MQTT Bridge quickly and simply on a YunoHost server. |
||||
If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/install) to learn how to install it.* |
||||
|
||||
## Overview |
||||
|
||||
The ring-mqtt project acts as a bridge between alarm, smart lighting and camera devices sold by Ring LLC and an MQTT broker thus allowing any automation tools that can leverage the open standards based MQTT protocol to monitor and control these devices. |
||||
|
||||
### Features |
||||
|
||||
See https://github.com/tsightler/ring-mqtt/wiki#supported-devices-and-features |
||||
|
||||
|
||||
**Shipped version:** 1.01~ynh1 |
||||
|
||||
## Screenshots |
||||
|
||||
 |
||||
|
||||
## Disclaimers / important information |
||||
|
||||
After installing the first time you need to open tge web ui to configure your Ring API credentials. |
||||
|
||||
```bash |
||||
# Go to http://yunohost.local:55123 and login, settings are saved automatically |
||||
``` |
||||
|
||||
Make sure two factor is enabled on your Ring account. |
||||
|
||||
## Documentation and resources |
||||
|
||||
* Official app website: <https://github.com/tsightler/ring-mqtt> |
||||
* Official admin documentation: <https://github.com/tsightler/ring-mqtt> |
||||
* Upstream app code repository: <https://github.com/tsightler/ring-mqtt> |
||||
* YunoHost documentation for this app: <https://yunohost.org/app_ring-mqtt> |
||||
* Report a bug: <https://github.com/YunoHost-Apps/ring-mqtt_ynh/issues> |
||||
|
||||
## Developer info |
||||
|
||||
Please send your pull request to the [testing branch](https://github.com/YunoHost-Apps/ring-mqtt_ynh/tree/testing). |
||||
|
||||
To try the testing branch, please proceed like that. |
||||
|
||||
``` bash |
||||
sudo yunohost app install https://github.com/YunoHost-Apps/ring-mqtt_ynh/tree/testing --debug |
||||
or |
||||
sudo yunohost app upgrade ring-mqtt -u https://github.com/YunoHost-Apps/ring-mqtt_ynh/tree/testing --debug |
||||
``` |
||||
|
||||
**More info regarding app packaging:** <https://yunohost.org/packaging_apps> |
@ -0,0 +1,34 @@ |
||||
# See here for more information |
||||
# https://github.com/YunoHost/package_check#syntax-check_process-file |
||||
|
||||
# Move this file from check_process.default to check_process when you have filled it. |
||||
|
||||
;; Test complet |
||||
; Manifest |
||||
domain="domain.tld" |
||||
path="/path" |
||||
is_public=1 |
||||
language="fr" |
||||
admin="john" |
||||
password="1Strong-Password" |
||||
port="666" |
||||
; Checks |
||||
pkg_linter=1 |
||||
setup_sub_dir=1 |
||||
setup_root=1 |
||||
setup_nourl=0 |
||||
setup_private=1 |
||||
setup_public=1 |
||||
upgrade=1 |
||||
upgrade=1 from_commit=CommitHash |
||||
backup_restore=1 |
||||
multi_instance=1 |
||||
port_already_use=0 |
||||
change_url=1 |
||||
;;; Options |
||||
Email= |
||||
Notification=none |
||||
;;; Upgrade options |
||||
; commit=CommitHash |
||||
name=Name and date of the commit. |
||||
manifest_arg=domain=DOMAIN&path=PATH&is_public=1&language=fr&admin=USER&password=pass&port=666& |
@ -0,0 +1,7 @@ |
||||
SOURCE_URL=https://github.com/tsightler/ring-mqtt/archive/refs/tags/v5.0.5.zip |
||||
SOURCE_SUM=e817adb92a3f62086bf6b2ab527d0569317cfd6741557994c27872329dd2072f |
||||
SOURCE_SUM_PRG=sha256sum |
||||
SOURCE_FORMAT=zip |
||||
SOURCE_IN_SUBDIR=true |
||||
SOURCE_FILENAME= |
||||
SOURCE_EXTRACT=true |
@ -0,0 +1,21 @@ |
||||
// this is used to generate the config.json file
|
||||
// pipe the output to a json file
|
||||
// node configurator.js user pass port disarm_code > config.json
|
||||
|
||||
const [user, pass, port, disarm_code] = process.argv.slice(2); |
||||
|
||||
const config = { |
||||
mqtt_url: `mqtt://${user}${pass && ":" + pass}@localhost:${port || 1883}`, |
||||
mqtt_options: "", |
||||
livestream_user: "", |
||||
livestream_pass: "", |
||||
disarm_code: disarm_code || "", |
||||
enable_cameras: true, |
||||
enable_modes: false, |
||||
enable_panic: false, |
||||
hass_topic: "homeassistant/status", |
||||
ring_topic: "ring", |
||||
location_ids: [""], |
||||
}; |
||||
|
||||
console.log(JSON.stringify(config, null, 2)); |
@ -0,0 +1,7 @@ |
||||
#!/bin/bash |
||||
|
||||
set -o errexit |
||||
set -o nounset |
||||
|
||||
__YNH_NPM__ start |
||||
|
@ -0,0 +1,47 @@ |
||||
[Unit] |
||||
Description=Ring-MQTT daemon |
||||
After=network.target mosquitto.target |
||||
|
||||
[Service] |
||||
Type=simple |
||||
Environment=NODE_ENV=production |
||||
Environment="__YNH_NODE_LOAD_PATH__" |
||||
User=__APP__ |
||||
Group=__APP__ |
||||
WorkingDirectory=__FINALPATH__/ |
||||
ExecStart=__FINALPATH__/run.sh |
||||
StandardOutput=syslog |
||||
StandardError=syslog |
||||
|
||||
# Sandboxing options to harden security |
||||
# Depending on specificities of your service/app, you may need to tweak these |
||||
# .. but this should be a good baseline |
||||
# Details for these options: https://www.freedesktop.org/software/systemd/man/systemd.exec.html |
||||
NoNewPrivileges=yes |
||||
PrivateTmp=yes |
||||
PrivateDevices=yes |
||||
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 AF_NETLINK |
||||
RestrictNamespaces=yes |
||||
RestrictRealtime=yes |
||||
DevicePolicy=closed |
||||
ProtectSystem=full |
||||
ProtectControlGroups=yes |
||||
ProtectKernelModules=yes |
||||
ProtectKernelTunables=yes |
||||
LockPersonality=yes |
||||
SystemCallFilter=~@clock @debug @module @mount @obsolete @reboot @setuid @swap |
||||
|
||||
# Denying access to capabilities that should not be relevant for webapps |
||||
# Doc: https://man7.org/linux/man-pages/man7/capabilities.7.html |
||||
CapabilityBoundingSet=~CAP_RAWIO CAP_MKNOD |
||||
CapabilityBoundingSet=~CAP_AUDIT_CONTROL CAP_AUDIT_READ CAP_AUDIT_WRITE |
||||
CapabilityBoundingSet=~CAP_SYS_BOOT CAP_SYS_TIME CAP_SYS_MODULE CAP_SYS_PACCT |
||||
CapabilityBoundingSet=~CAP_LEASE CAP_LINUX_IMMUTABLE CAP_IPC_LOCK |
||||
CapabilityBoundingSet=~CAP_BLOCK_SUSPEND CAP_WAKE_ALARM |
||||
CapabilityBoundingSet=~CAP_SYS_TTY_CONFIG |
||||
CapabilityBoundingSet=~CAP_MAC_ADMIN CAP_MAC_OVERRIDE |
||||
CapabilityBoundingSet=~CAP_NET_ADMIN CAP_NET_BROADCAST CAP_NET_RAW |
||||
CapabilityBoundingSet=~CAP_SYS_ADMIN CAP_SYS_PTRACE CAP_SYSLOG |
||||
|
||||
[Install] |
||||
WantedBy=multi-user.target |
@ -0,0 +1,5 @@ |
||||
The ring-mqtt project acts as a bridge between alarm, smart lighting and camera devices sold by Ring LLC and an MQTT broker thus allowing any automation tools that can leverage the open standards based MQTT protocol to monitor and control these devices. |
||||
|
||||
### Features |
||||
|
||||
See https://github.com/tsightler/ring-mqtt/wiki#supported-devices-and-features |
@ -0,0 +1,7 @@ |
||||
After installing the first time you need to open tge web ui to configure your Ring API credentials. |
||||
|
||||
```bash |
||||
# Go to http://yunohost.local:55123 and login, settings are saved automatically |
||||
``` |
||||
|
||||
Make sure two factor is enabled on your Ring account. |
After Width: | Height: | Size: 36 KiB |
@ -0,0 +1,60 @@ |
||||
{ |
||||
"name": "Ring-MQTT Bridge", |
||||
"id": "ring-mqtt", |
||||
"packaging_format": 1, |
||||
"description": { |
||||
"en": "Ring devices to MQTT bridge.", |
||||
"fr": "Pont MQTT pour peripheriques Ring." |
||||
}, |
||||
"version": "1.03~ynh1", |
||||
"url": "https://github.com/tsightler/ring-mqtt", |
||||
"upstream": { |
||||
"license": "MIT", |
||||
"website": "https://github.com/tsightler/ring-mqtt", |
||||
"admindoc": "https://github.com/tsightler/ring-mqtt", |
||||
"code": "https://github.com/tsightler/ring-mqtt" |
||||
}, |
||||
"license": "MIT", |
||||
"maintainer": { |
||||
"name": "jukefr ", |
||||
"email": "spam@juke.fr" |
||||
}, |
||||
"requirements": { |
||||
"yunohost": ">= 11.0.0" |
||||
}, |
||||
"multi_instance": true, |
||||
"services": ["mosquitto"], |
||||
"arguments": { |
||||
"install": [ |
||||
{ |
||||
"name": "mosquittonumber", |
||||
"type": "string", |
||||
"ask": { |
||||
"en": "Choose the local mosquitto instance number to communicate with the Ring-MQTT bridge", |
||||
"fr": "Choisissez le numรฉro de l'instance mosquitto qui doit communiquer avec la passerelle Ring-MQTT" |
||||
}, |
||||
"example": "2 (for instance mosquitto__2)", |
||||
"help": { |
||||
"en": "If you installed mosquitto only once time, then leave default value 1.", |
||||
"fr": "Si vous n'avez installรฉ qu'une fois mosquitto, gardez la valeur par dรฉfaut 1." |
||||
}, |
||||
"default": "1" |
||||
}, |
||||
{ |
||||
"name": "ringdisarm", |
||||
"type": "string", |
||||
"ask": { |
||||
"en": "Enter the code to disarm the alarm if you have one", |
||||
"fr": "Entrez le code pour desarmer l'alarme si vous en avez une" |
||||
}, |
||||
"example": "1234", |
||||
"help": { |
||||
"en": "If you don't have an alarm just leave the empty default.", |
||||
"fr": "Si vous n'avez pas d'alarme, gardez le defaut vide." |
||||
}, |
||||
"default": "" |
||||
} |
||||
|
||||
] |
||||
} |
||||
} |
@ -0,0 +1,68 @@ |
||||
#!/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 |
||||
|
||||
#================================================= |
||||
# MANAGE SCRIPT FAILURE |
||||
#================================================= |
||||
|
||||
ynh_clean_setup () { |
||||
### Remove this function if there's nothing to clean before calling the remove script. |
||||
true |
||||
} |
||||
# Exit if an error occurs during the execution of the script |
||||
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) |
||||
log_path=$(ynh_app_setting_get --app=$app --key=log_path) |
||||
|
||||
#================================================= |
||||
# DECLARE DATA AND CONF FILES TO BACKUP |
||||
#================================================= |
||||
ynh_print_info --message="Declaring files to be backed up..." |
||||
|
||||
### N.B. : the following 'ynh_backup' calls are only a *declaration* of what needs |
||||
### to be backuped and not an actual copy of any file. The actual backup that |
||||
### creates and fill the archive with the files happens in the core after this |
||||
### script is called. Hence ynh_backups calls takes basically 0 seconds to run. |
||||
|
||||
#================================================= |
||||
# BACKUP THE APP MAIN DIR |
||||
#================================================= |
||||
|
||||
ynh_backup --src_path="$final_path" |
||||
|
||||
#================================================= |
||||
# BACKUP SYSTEMD |
||||
#================================================= |
||||
|
||||
ynh_backup --src_path="/etc/systemd/system/$app.service" |
||||
|
||||
#================================================= |
||||
# BACKUP VARIOUS FILES |
||||
#================================================= |
||||
|
||||
ynh_backup --src_path="$log_path" |
||||
|
||||
|
||||
#================================================= |
||||
# END OF SCRIPT |
||||
#================================================= |
||||
|
||||
ynh_print_info --message="Backup script completed for $app. (YunoHost will then actually copy those files to the archive)." |
@ -0,0 +1,401 @@ |
||||
#!/bin/bash |
||||
|
||||
#================================================= |
||||
# GENERIC START |
||||
#================================================= |
||||
# IMPORT GENERIC HELPERS |
||||
#================================================= |
||||
|
||||
source _common.sh |
||||
source /usr/share/yunohost/helpers |
||||
|
||||
#================================================= |
||||
# MANAGE SCRIPT FAILURE |
||||
#================================================= |
||||
|
||||
ynh_clean_setup () { |
||||
### Remove this function if there's nothing to clean before calling the remove script. |
||||
true |
||||
} |
||||
# Exit if an error occurs during the execution of the script |
||||
ynh_abort_if_errors |
||||
|
||||
#================================================= |
||||
# RETRIEVE ARGUMENTS FROM THE MANIFEST |
||||
#================================================= |
||||
|
||||
mosquittonumber=$YNH_APP_ARG_MOSQUITTONUMBER |
||||
ringdisarm=$YNH_APP_ARG_RINGDISARM |
||||
app=$YNH_APP_INSTANCE_NAME |
||||
|
||||
final_path=/opt/yunohost/$app |
||||
|
||||
if [ $mosquittonumber -eq "1" ] |
||||
then |
||||
mosquitto_instance="mosquitto" |
||||
else |
||||
mosquitto_instance="mosquitto__$mosquittonumber" |
||||
fi |
||||
|
||||
mosquitto_config_path="/etc/$mosquitto_instance" |
||||
# Check Synapse is installed or die early |
||||
if [ ! -d $mosquitto_config_path ] |
||||
then |
||||
ynh_die --message="Could not find $synapse_config_path config directory. Ensure that you installed Mosquitto first and that you entered a correct \"mosquitto instance number\"" |
||||
fi |
||||
|
||||
mqtt_user=$(ynh_app_setting_get --app $mosquitto_instance --key username) |
||||
mqtt_pass=$(ynh_app_setting_get --app $mosquitto_instance --key password) |
||||
mqtt_port=$(ynh_app_setting_get --app $mosquitto_instance --key port) |
||||
log_path="/var/log/$app" |
||||
|
||||
|
||||
#================================================= |
||||
# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS |
||||
#================================================= |
||||
### About --weight and --time |
||||
### ynh_script_progression will show to your final users the progression of each scripts. |
||||
### In order to do that, --weight will represent the relative time of execution compared to the other steps in the script. |
||||
### --time is a packager option, it will show you the execution time since the previous call. |
||||
### This option is implied when running in CI_package_check, you can manually add it if you are manually testing the app. |
||||
### Use the execution time displayed in the CI report or by adding --time to the command, to estimate the weight of a step. |
||||
### A common way to do it is to set a weight equal to the execution time in second +1. |
||||
### The execution time is given for the duration since the previous call. So the weight should be applied to this previous call. |
||||
ynh_script_progression --message="Validating installation parameters..." --weight=1 |
||||
|
||||
### If the app uses NGINX as web server (written in HTML/PHP in most cases), the final path should be "/var/www/$app". |
||||
### If the app provides an internal web server (or uses another application server such as uWSGI), the final path should be "/opt/yunohost/$app" |
||||
test ! -e "$final_path" || ynh_die --message="This path already contains a folder" |
||||
|
||||
# Register (book) web path |
||||
|
||||
#================================================= |
||||
# STORE SETTINGS FROM MANIFEST |
||||
#================================================= |
||||
ynh_script_progression --message="Storing installation settings..." --weight=1 |
||||
|
||||
ynh_app_setting_set --app=$app --key=final_path --value=$final_path |
||||
ynh_app_setting_set --app=$app --key=log_path --value=$log_path |
||||
ynh_app_setting_set --app=$app --key=mqtt_user --value=$mqtt_user |
||||
ynh_app_setting_set --app=$app --key=mqtt_pass --value=$mqtt_pass |
||||
ynh_app_setting_set --app=$app --key=mqtt_port --value=$mqtt_port |
||||
ynh_app_setting_set --app=$app --key=ring_disarm --value=$ringdisarm |
||||
ynh_app_setting_set --app=$app --key=mosquitto_instance --value=$mosquitto_instance |
||||
|
||||
#================================================= |
||||
# STANDARD MODIFICATIONS |
||||
#================================================= |
||||
# FIND AND OPEN A PORT |
||||
#================================================= |
||||
ynh_script_progression --message="Finding an available port..." --weight=1 |
||||
|
||||
### Use these lines if you have to open a port for the application |
||||
### `ynh_find_port` will find the first available port starting from the given port. |
||||
### If you're not using these lines: |
||||
### - Remove the section "CLOSE A PORT" in the remove script |
||||
|
||||
# Find an available port |
||||
port=$(ynh_find_port --port=55123) |
||||
ynh_app_setting_set --app=$app --key=port --value=$port |
||||
|
||||
# Optional: Expose this port publicly |
||||
# (N.B.: you only need to do this if the app actually needs to expose the port publicly. |
||||
# If you do this and the app doesn't actually need you are CREATING SECURITY HOLES IN THE SERVER !) |
||||
|
||||
# Open the port |
||||
# ynh_script_progression --message="Configuring firewall..." --weight=1 |
||||
# ynh_exec_warn_less yunohost firewall allow --no-upnp TCP $port |
||||
|
||||
#================================================= |
||||
# INSTALL DEPENDENCIES |
||||
#================================================= |
||||
ynh_script_progression --message="Installing dependencies..." --weight=1 |
||||
|
||||
### `ynh_install_app_dependencies` allows you to add any "apt" dependencies to the package. |
||||
### Those deb packages will be installed as dependencies of this package. |
||||
### If you're not using this helper: |
||||
### - Remove the section "REMOVE DEPENDENCIES" in the remove script |
||||
### - Remove the variable "pkg_dependencies" in _common.sh |
||||
### - As well as the section "REINSTALL DEPENDENCIES" in the restore script |
||||
### - And the section "UPGRADE DEPENDENCIES" in the upgrade script |
||||
|
||||
ynh_install_nodejs --nodejs_version=$NODEJS_VERSION |
||||
ynh_install_app_dependencies $pkg_dependencies |
||||
|
||||
|
||||
#================================================= |
||||
# CREATE DEDICATED USER |
||||
#================================================= |
||||
ynh_script_progression --message="Configuring system user..." --weight=1 |
||||
|
||||
# Create a system user |
||||
ynh_system_user_create --username=$app --home_dir="$final_path" |
||||
|
||||
# #================================================= |
||||
# # CREATE A MYSQL DATABASE |
||||
# #================================================= |
||||
# ynh_script_progression --message="Creating a MySQL database..." --weight=1 |
||||
|
||||
# ### Use these lines if you need a database for the application. |
||||
# ### `ynh_mysql_setup_db` will create a database, an associated user and a ramdom password. |
||||
# ### The password will be stored as 'mysqlpwd' into the app settings, |
||||
# ### and will be available as $db_pwd |
||||
# ### If you're not using these lines: |
||||
# ### - Remove the section "BACKUP THE MYSQL DATABASE" in the backup script |
||||
# ### - Remove also the section "REMOVE THE MYSQL DATABASE" in the remove script |
||||
# ### - As well as the section "RESTORE THE MYSQL DATABASE" in the restore script |
||||
|
||||
# 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_mysql_setup_db --db_user=$db_user --db_name=$db_name |
||||
|
||||
#================================================= |
||||
# DOWNLOAD, CHECK AND UNPACK SOURCE |
||||
#================================================= |
||||
ynh_script_progression --message="Setting up source files..." --weight=1 |
||||
|
||||
### `ynh_setup_source` is used to install an app from a zip or tar.gz file, |
||||
### downloaded from an upstream source, like a git repository. |
||||
### `ynh_setup_source` use the file conf/app.src |
||||
|
||||
ynh_app_setting_set --app=$app --key=final_path --value=$final_path |
||||
# Download, check integrity, uncompress and patch the source from app.src |
||||
ynh_setup_source --dest_dir="$final_path" |
||||
|
||||
# FIXME: this should be managed by the core in the future |
||||
# Here, as a packager, you may have to tweak the ownerhsip/permissions |
||||
# such that the appropriate users (e.g. maybe www-data) can access |
||||
# files in some cases. |
||||
# But FOR THE LOVE OF GOD, do not allow r/x for "others" on the entire folder - |
||||
# this will be treated as a security issue. |
||||
chmod 750 "$final_path" |
||||
chmod -R o-rwx "$final_path" |
||||
chown -R $app:$app "$final_path" |
||||
|
||||
#================================================= |
||||
# PHP-FPM CONFIGURATION |
||||
#================================================= |
||||
# ynh_script_progression --message="Configuring PHP-FPM..." --weight=1 |
||||
|
||||
# ### `ynh_add_fpm_config` is used to set up a PHP config. |
||||
# ### You can remove it if your app doesn't use PHP. |
||||
# ### `ynh_add_fpm_config` will use the files conf/php-fpm.conf |
||||
# ### If you're not using these lines: |
||||
# ### - You can remove these files in conf/. |
||||
# ### - Remove the section "BACKUP THE PHP-FPM CONFIGURATION" in the backup script |
||||
# ### - Remove also the section "REMOVE PHP-FPM CONFIGURATION" in the remove script |
||||
# ### - As well as the section "RESTORE THE PHP-FPM CONFIGURATION" in the restore script |
||||
# ### with the reload at the end of the script. |
||||
# ### - And the section "PHP-FPM CONFIGURATION" in the upgrade script |
||||
|
||||
# # Create a dedicated PHP-FPM config |
||||
# ynh_add_fpm_config |
||||
|
||||
#================================================= |
||||
# NGINX CONFIGURATION |
||||
#================================================= |
||||
# ynh_script_progression --message="Configuring NGINX web server..." --weight=1 |
||||
|
||||
# ### `ynh_add_nginx_config` will use the file conf/nginx.conf |
||||
|
||||
# # Create a dedicated NGINX config |
||||
# ynh_add_nginx_config |
||||
|
||||
#================================================= |
||||
# SPECIFIC SETUP |
||||
#================================================= |
||||
#================================================= |
||||
# INSTALL NODE DEPENDENCIES |
||||
#================================================= |
||||
ynh_script_progression --message="Building Node dependencies..." --weight=30 |
||||
|
||||
pushd "$final_path" |
||||
ynh_use_nodejs |
||||
ynh_exec_warn_less sudo -u $app env $ynh_node_load_PATH npm install |
||||
popd |
||||
|
||||
#================================================= |
||||
|
||||
# INSTALL RTSP-SIMPLE-SERVER |
||||
# TODO: https://github.com/aler9/rtsp-simple-server |
||||
ynh_script_progression --message="Installing rtsp-simple-server" --weight=5 |
||||
|
||||
arch=$(arch) |
||||
case $arch in |
||||
|
||||
x86_64) |
||||
wget "https://github.com/aler9/rtsp-simple-server/releases/download/v0.20.2/rtsp-simple-server_v0.20.2_linux_amd64.tar.gz" |
||||
;; |
||||
|
||||
aarch64) |
||||
wget "https://github.com/aler9/rtsp-simple-server/releases/download/v0.20.2/rtsp-simple-server_v0.20.2_linux_arm64v8.tar.gz" |
||||
;; |
||||
|
||||
armv7l) |
||||
wget "https://github.com/aler9/rtsp-simple-server/releases/download/v0.20.2/rtsp-simple-server_v0.20.2_linux_armv7.tar.gz" |
||||
;; |
||||
|
||||
armv6l) |
||||
wget "https://github.com/aler9/rtsp-simple-server/releases/download/v0.20.2/rtsp-simple-server_v0.20.2_linux_armv6.tar.gz" |
||||
;; |
||||
|
||||
*) |
||||
echo "Architecture unsupported by RTSP-SIMPLE-SERVER" |
||||
exit 1 |
||||
;; |
||||
esac |
||||
|
||||
tar -xvf rtsp-simple-server*.tar.gz |
||||
chmod +x rtsp-simple-server |
||||
mv rtsp-simple-server /usr/local/bin |
||||
rm LICENSE rtsp-simple-server.yml rtsp-simple-server*.tar.gz |
||||
|
||||
#================================================= |
||||
# ADD A CONFIGURATION |
||||
#================================================= |
||||
ynh_script_progression --message="Adding a configuration file..." --weight=1 |
||||
|
||||
### You can add specific configuration files. |
||||
### |
||||
### Typically, put your template conf file in ../conf/your_config_file |
||||
### The template may contain strings such as __FOO__ or __FOO_BAR__, |
||||
### which will automatically be replaced by the values of $foo and $foo_bar |
||||
### |
||||
### ynh_add_config will also keep track of the config file's checksum, |
||||
### which later during upgrade may allow to automatically backup the config file |
||||
### if it's found that the file was manually modified |
||||
### |
||||
### Check the documentation of `ynh_add_config` for more info. |
||||
|
||||
ynh_add_config --template="configurator.js" --destination="$final_path/configurator.js" |
||||
|
||||
pushd "$final_path" |
||||
ynh_use_nodejs |
||||
ynh_exec_warn_less sudo -u $app env $ynh_node_load_PATH node configurator.js $mqtt_user $mqtt_pass $mqtt_port $ringdisarm > $final_path/config.json |
||||
popd |
||||
|
||||
# FIXME: this should be handled by the core in the future |
||||
# You may need to use chmod 600 instead of 400, |
||||
# for example if the app is expected to be able to modify its own config |
||||
touch "$final_path/ring-state.json" |
||||
chmod 644 "$final_path/ring-state.json" |
||||
chown $app:$app "$final_path/ring-state.json" |
||||
|
||||
|
||||
chmod 644 "$final_path/config.json" |
||||
chown $app:$app "$final_path/config.json" |
||||
|
||||
### For more complex cases where you want to replace stuff using regexes, |
||||
### you shoud rely on ynh_replace_string (which is basically a wrapper for sed) |
||||
### When doing so, you also need to manually call ynh_store_file_checksum |
||||
### |
||||
### ynh_replace_string --match_string="match_string" --replace_string="replace_string" --target_file="$final_path/some_config_file" |
||||
### ynh_store_file_checksum --file="$final_path/some_config_file" |
||||
|
||||
#================================================= |
||||
# SETUP SYSTEMD |
||||
#================================================= |
||||
ynh_script_progression --message="Configuring a systemd service..." --weight=1 |
||||
|
||||
### `ynh_systemd_config` is used to configure a systemd script for an app. |
||||
### It can be used for apps that use sysvinit (with adaptation) or systemd. |
||||
### Have a look at the app to be sure this app needs a systemd script. |
||||
### `ynh_systemd_config` will use the file conf/systemd.service |
||||
### If you're not using these lines: |
||||
### - You can remove those files in conf/. |
||||
### - Remove the section "BACKUP SYSTEMD" in the backup script |
||||
### - Remove also the section "STOP AND REMOVE SERVICE" in the remove script |
||||
### - As well as the section "RESTORE SYSTEMD" in the restore script |
||||
### - And the section "SETUP SYSTEMD" in the upgrade script |
||||
|
||||
# Create startup script |
||||
ynh_add_config --template="run.sh" --destination="$final_path/run.sh" |
||||
|
||||
chmod 750 "$final_path/run.sh" |
||||
chown "$app:$app" "$final_path/run.sh" |
||||
|
||||
# Create a dedicated systemd config |
||||
ynh_add_systemd_config |
||||
|
||||
|
||||
#================================================= |
||||
# CREATE LOG DIR |
||||
#================================================= |
||||
|
||||
mkdir -p -m 700 "$log_path" |
||||
chown $app:$app "$log_path" |
||||
|
||||
|
||||
#================================================= |
||||
# GENERIC FINALIZATION |
||||
#================================================= |
||||
|
||||
#================================================= |
||||
# INTEGRATE SERVICE IN YUNOHOST |
||||
#================================================= |
||||
ynh_script_progression --message="Integrating service in YunoHost..." --weight=1 |
||||
|
||||
### `yunohost service add` integrates a service in YunoHost. It then gets |
||||
### displayed in the admin interface and through the others `yunohost service` commands. |
||||
### (N.B.: this line only makes sense if the app adds a service to the system!) |
||||
### If you're not using these lines: |
||||
### - You can remove these files in conf/. |
||||
### - Remove the section "REMOVE SERVICE INTEGRATION IN YUNOHOST" in the remove script |
||||
### - As well as the section "INTEGRATE SERVICE IN YUNOHOST" in the restore script |
||||
### - And the section "INTEGRATE SERVICE IN YUNOHOST" in the upgrade script |
||||
|
||||
yunohost service add $app --description="A short description of the app" --log="/var/log/$app/$app.log" |
||||
|
||||
### Additional options starting with 3.8: |
||||
### |
||||
### --needs_exposed_ports "$port" a list of ports that needs to be publicly exposed |
||||
### which will then be checked by YunoHost's diagnosis system |
||||
### (N.B. DO NOT USE THIS is the port is only internal!!!) |
||||
### |
||||
### --test_status "some command" a custom command to check the status of the service |
||||
### (only relevant if 'systemctl status' doesn't do a good job) |
||||
### |
||||
### --test_conf "some command" some command similar to "nginx -t" that validates the conf of the service |
||||
### |
||||
### Re-calling 'yunohost service add' during the upgrade script is the right way |
||||
### to proceed if you later realize that you need to enable some flags that |
||||
### weren't enabled on old installs (be careful it'll override the existing |
||||
### service though so you should re-provide all relevant flags when doing so) |
||||
|
||||
#================================================= |
||||
# START SYSTEMD SERVICE |
||||
#================================================= |
||||
ynh_script_progression --message="Starting a systemd service..." --weight=1 |
||||
|
||||
### `ynh_systemd_action` is used to start a systemd service for an app. |
||||
### Only needed if you have configure a systemd service |
||||
### If you're not using these lines: |
||||
### - Remove the section "STOP SYSTEMD SERVICE" and "START SYSTEMD SERVICE" in the backup script |
||||
### - As well as the section "START SYSTEMD SERVICE" in the restore script |
||||
### - As well as the section"STOP SYSTEMD SERVICE" and "START SYSTEMD SERVICE" in the upgrade script |
||||
### - And the section "STOP SYSTEMD SERVICE" and "START SYSTEMD SERVICE" in the change_url script |
||||
|
||||
# Start a systemd service |
||||
ynh_systemd_action --service_name=$app --action="start" |
||||
|
||||
#================================================= |
||||
# SEND A README FOR THE ADMIN |
||||
#================================================= |
||||
|
||||
# Get main domain and buid the url of the admin panel of the app. |
||||
|
||||
echo "You need to login to the Ring API via the one-time __URL_TAG1__web ui__URL_TAG2__http://yunohost.local:55123__URL_TAG3__. |
||||
|
||||
It will be disabled and the configuration saved once you are done, make sure to have two factor enabled on your Ring.com account. |
||||
|
||||
If you're facing an issue or want to improve this app, please open a new issue in this __URL_TAG1__project__URL_TAG2__https://github.com/YunoHost-Apps/ring-mqtt_ynh__URL_TAG3__." > mail_to_send |
||||
|
||||
ynh_send_readme_to_admin --app_message="mail_to_send" --recipients=root --type=install |
||||
|
||||
|
||||
#================================================= |
||||
# END OF SCRIPT |
||||
#================================================= |
||||
|
||||
ynh_script_progression --message="Installation of $app completed" --last |
@ -0,0 +1,100 @@ |
||||
#!/bin/bash |
||||
|
||||
#================================================= |
||||
# GENERIC START |
||||
#================================================= |
||||
# IMPORT GENERIC HELPERS |
||||
#================================================= |
||||
|
||||
source _common.sh |
||||
source /usr/share/yunohost/helpers |
||||
|
||||
#================================================= |
||||
# LOAD SETTINGS |
||||
#================================================= |
||||
ynh_script_progression --message="Loading installation settings..." --weight=1 |
||||
|
||||
app=$YNH_APP_INSTANCE_NAME |
||||
|
||||
port=$(ynh_app_setting_get --app=$app --key=port) |
||||
final_path=$(ynh_app_setting_get --app=$app --key=final_path) |
||||
log_path="/var/log/$app" |
||||
|
||||
#================================================= |
||||
# STANDARD REMOVE |
||||
#================================================= |
||||
# REMOVE SERVICE INTEGRATION IN YUNOHOST |
||||
#================================================= |
||||
|
||||
# Remove the service from the list of services known by YunoHost (added from `yunohost service add`) |
||||
if ynh_exec_warn_less yunohost service status $app >/dev/null |
||||
then |
||||
ynh_script_progression --message="Removing $app service integration..." --weight=1 |
||||
yunohost service remove $app |
||||
fi |
||||
|
||||
#================================================= |
||||
# STOP AND REMOVE SERVICE |
||||
#================================================= |
||||
ynh_script_progression --message="Stopping and removing the systemd service..." --weight=1 |
||||
|
||||
# Remove the dedicated systemd config |
||||
ynh_remove_systemd_config |
||||
|
||||
#================================================= |
||||
# REMOVE APP MAIN DIR |
||||
#================================================= |
||||
ynh_script_progression --message="Removing app main directory..." --weight=1 |
||||
|
||||
# Remove the app directory securely |
||||
ynh_secure_remove --file="$final_path" |
||||
|
||||
|
||||
#================================================= |
||||
# REMOVE DEPENDENCIES |
||||
#================================================= |
||||
ynh_script_progression --message="Removing dependencies..." --weight=1 |
||||
|
||||
# Remove nodejs version if not used by another app |
||||
ynh_remove_nodejs |
||||
# Remove metapackage and its dependencies |
||||
ynh_remove_app_dependencies |
||||
|
||||
rm /usr/local/bin/rtsp-simple-server |
||||
|
||||
|
||||
#================================================= |
||||
# CLOSE A PORT |
||||
#================================================= |
||||
|
||||
if yunohost firewall list | grep -q "\- $port$" |
||||
then |
||||
ynh_script_progression --message="Closing port $port..." --weight=1 |
||||
ynh_exec_warn_less yunohost firewall disallow TCP $port |
||||
fi |
||||
|
||||
#================================================= |
||||
# SPECIFIC REMOVE |
||||
#================================================= |
||||
# REMOVE VARIOUS FILES |
||||
#================================================= |
||||
ynh_script_progression --message="Removing various files..." --weight=1 |
||||
|
||||
# Remove the log files |
||||
ynh_secure_remove --file="$log_path" |
||||
|
||||
#================================================= |
||||
# GENERIC FINALIZATION |
||||
#================================================= |
||||
# REMOVE DEDICATED USER |
||||
#================================================= |
||||
ynh_script_progression --message="Removing the dedicated system user..." --weight=1 |
||||
|
||||
# Delete a system user |
||||
ynh_system_user_delete --username=$app |
||||
|
||||
#================================================= |
||||
# END OF SCRIPT |
||||