diff --git a/TODO b/TODO index da1d017..3c7bb9d 100644 --- a/TODO +++ b/TODO @@ -1,20 +1,3 @@ -- finir le script upgrade - -====================================================================== -====================================================================== -- finir les scripts: install, remove, upgrade - - on crée un utilisateur spécifique pour lancer l'exécutable: syncthingd - - le dossier sera /home/yunohost.syncthing/ est le $HOME du user syncthingd - - le dossier sera /home/yunohost.syncthing/bin pour le binaire - - le dossier sera /home/yunohost.syncthing/sync pour créer des dossiers de synchro (à revoir à l'usage) -ces dossiers appartiennent à syncthingd - -- écrire le script pour le service syncthing - - -wget https://github.com/syncthing/syncthing/releases/download/v$version/syncthing-linux-amd64-v$version.tar.gz - -tar xvf syncthing-linux-amd64-v$version.tar.gz - - -cd syncthing-linux-amd64-v$version +- finaliser le script sysvinit pour se passer de runit +- mettre à jour et finaliser script upgrade +- mettre à jour et finaliser script remove \ No newline at end of file diff --git a/conf/log/run b/conf/log/run deleted file mode 100644 index 0d04579..0000000 --- a/conf/log/run +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -exec logger -t syncthing - diff --git a/conf/run b/conf/run deleted file mode 100644 index 15f2b5c..0000000 --- a/conf/run +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -export USERNAME=debian-syncthing -export HOME="/home/yunohost.syncthing" -export SYNCTHING="$HOME/bin/syncthing" - -exec 2>&1 -exec chpst -u "$USERNAME" "$SYNCTHING" -logflags 0 - diff --git a/conf/syncthing b/conf/syncthing new file mode 100644 index 0000000..ece03b6 --- /dev/null +++ b/conf/syncthing @@ -0,0 +1,160 @@ +#! /bin/sh +### BEGIN INIT INFO +# Provides: skeleton +# Required-Start: $remote_fs $syslog +# Required-Stop: $remote_fs $syslog +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Example initscript +# Description: This file should be used to construct scripts to be +# placed in /etc/init.d. +### END INIT INFO + +# Author: Foo Bar +# +# Please remove the "Author" lines above and replace them +# with your own name if you copy and modify this script. + +# Do NOT "set -e" + +# PATH should only include /usr/* if it runs after the mountnfs.sh script +PATH=/sbin:/usr/sbin:/bin:/usr/bin +DESC="Syncthing daemonisation service" +NAME=syncthing +DAEMON=/home/yunohost.syncthing/bin/$NAME +DAEMON_ARGS=" & " +PIDFILE=/var/run/$NAME.pid +SCRIPTNAME=/etc/init.d/$NAME +DAEMONUSER=debian-syncthing + +# Exit if the package is not installed +[ -x "$DAEMON" ] || exit 0 + +# Read configuration variable file if it is present +[ -r /etc/default/$NAME ] && . /etc/default/$NAME + +# Load the VERBOSE setting and other rcS variables +. /lib/init/vars.sh + +# Define LSB log_* functions. +# Depend on lsb-base (>= 3.2-14) to ensure that this file is present +# and status_of_proc is working. +. /lib/lsb/init-functions + +# +# Function that starts the daemon/service +# +do_start() +{ + # Return + # 0 if daemon has been started + # 1 if daemon was already running + # 2 if daemon could not be started + start-stop-daemon --start --quiet --chuid $DAEMONUSER --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ + || return 1 + start-stop-daemon --start --quiet --chuid $DAEMONUSER --pidfile $PIDFILE --exec $DAEMON -- \ + $DAEMON_ARGS \ + || return 2 & > /dev/null + # Add code here, if necessary, that waits for the process to be ready + # to handle requests from services started subsequently which depend + # on this one. As a last resort, sleep for some time. +} + +# +# Function that stops the daemon/service +# +do_stop() +{ + # Return + # 0 if daemon has been stopped + # 1 if daemon was already stopped + # 2 if daemon could not be stopped + # other if a failure occurred + start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME + RETVAL="$?" + [ "$RETVAL" = 2 ] && return 2 + # Wait for children to finish too if this is a daemon that forks + # and if the daemon is only ever run from this initscript. + # If the above conditions are not satisfied then add some other code + # that waits for the process to drop all resources that could be + # needed by services started subsequently. A last resort is to + # sleep for some time. + start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON + [ "$?" = 2 ] && return 2 + # Many daemons don't delete their pidfiles when they exit. + rm -f $PIDFILE + return "$RETVAL" +} + +# +# Function that sends a SIGHUP to the daemon/service +# +do_reload() { + # + # If the daemon can reload its configuration without + # restarting (for example, when it is sent a SIGHUP), + # then implement that here. + # + start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME + return 0 +} + +case "$1" in + start) + [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" + do_start + case "$?" in + 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; + 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; + esac + ;; + stop) + [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" + do_stop + case "$?" in + 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; + 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; + esac + ;; + status) + status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? + ;; + #reload|force-reload) + # + # If do_reload() is not implemented then leave this commented out + # and leave 'force-reload' as an alias for 'restart'. + # + #log_daemon_msg "Reloading $DESC" "$NAME" + #do_reload + #log_end_msg $? + #;; + restart|force-reload) + # + # If the "reload" option is implemented then remove the + # 'force-reload' alias + # + log_daemon_msg "Restarting $DESC" "$NAME" + do_stop + case "$?" in + 0|1) + do_start + case "$?" in + 0) log_end_msg 0 ;; + 1) log_end_msg 1 ;; # Old process is still running + *) log_end_msg 1 ;; # Failed to start + esac + ;; + *) + # Failed to stop + log_end_msg 1 + ;; + esac + ;; + *) + #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2 + echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 + exit 3 + ;; +esac + +: diff --git a/manifest.json b/manifest.json index be75aac..e995d0d 100644 --- a/manifest.json +++ b/manifest.json @@ -9,6 +9,7 @@ "maintainer": { "name": "txmrl", "email": "txmrl@txmrl.net" + "url": "https://github.com/tuxmouraille/syncthing_ynh" }, "multi_instance": "false", "arguments": { diff --git a/scripts/install b/scripts/install index b7cdc5e..3c35928 100644 --- a/scripts/install +++ b/scripts/install @@ -6,6 +6,11 @@ path=$2 # Configurable variables syncVersion="0.10.29" +syncHome="/home/yunohost.syncthing" +syncUser=debian-syncthing +syncSyncport=22000 +syncUIport=8080 + arch=`uname -m` if [ "$arch" = "x86_64" ] ; then syncArch="amd64" @@ -16,10 +21,6 @@ fi if [ "$arch" = "arm" ] ; then syncArch="arm" fi -syncHome="/home/yunohost.syncthing" -syncUser=debian-syncthing -syncSyncport=22000 -syncUIport=8080 sudo yunohost app checkurl $domain$path -a syncthing @@ -44,7 +45,7 @@ fi sudo yunohost firewall allow TCP $syncSyncport > /dev/null 2>&1 # Create $syncUser user to syncthing service -sudo useradd -m -d $syncHome/ -s /bin/false $syncUser +sudo useradd -m -d $syncHome/ -s /bin/bash $syncUser # Make directories and set rights sudo mkdir -p $syncHome/{bin,sync} @@ -60,13 +61,11 @@ sudo chown $syncUser: $syncHome/bin/syncthing sudo chmod 750 $syncHome/bin/syncthing # Install and monitor service -# les deux lignes ci dessous si il s'avère nécessaire de créer un script sysinit -# sudo cp ../conf/syncthingd /etc/init.d/syncthingd -# sudo update-rc.d syncthingd defaults -sudo apt-get install runit -y -qq -sudo mkdir -p /etc/service/syncthing -sudo cp -R ../conf/run ../conf/log /etc/service/syncthing -sudo yunohost service add runit +sudo cp ../conf/syncthing /etc/init.d/syncthing +sudo chmod 0755 /etc/init.d/syncthing +sudo update-rc.d syncthing defaults +sudo yunohost service add synchting +sudo service syncthing start # Configure Nginx and reload sed -i "s@PATHTOCHANGE@$path@g" ../conf/nginx.conf diff --git a/scripts/remove b/scripts/remove index 4382751..2397f26 100644 --- a/scripts/remove +++ b/scripts/remove @@ -1,16 +1,33 @@ #!/bin/bash +syncVersion="0.10.29" +syncHome="/home/yunohost.syncthing" +syncUser=debian-syncthing syncSyncport=22000 -sudo service runit stop +# Stop and remove syncthing service +sudo service syncthing stop +sudo yunohost service remove syncthing +sudo update-rc.d -f syncthing remove +sudo rm -f /etc/init.d/syncthing + +# Remove syncthing binairy +sudo rm -rf $syncHome/bin/ + +# Backup syncthign HOME directory +sudo mv $syncHome $syncHome.lod +# sudo rm -rf $syncHome + +# Remove syncthing user +sudo userdel $syncUser + +# Close port in firewall sudo yunohost firewall disallow TCP $syncSyncport -sudo yunohost service remove runit + +# Remove syncthing nginx configuration domain=$(sudo yunohost app setting syncthing domain) - sudo rm /etc/nginx/conf.d/$domain.d/syncthing.conf -# sudo rm -rf /home/yunohost.syncthing - -sudo apt-get remove -y -qq runit +# Reload nginx and update ssowatch sudo service nginx reload sudo yunohost app ssowatconf diff --git a/scripts/upgrade b/scripts/upgrade index ca6c6a2..fcb0d32 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -1,7 +1,6 @@ #!/bin/bash # Configurable variables -syncSyncport=22000 syncUser=debian-syncthing syncHome="/home/yunohost.syncthing" @@ -12,21 +11,17 @@ path=$(sudo yunohost app setting syncthing path) # Remove trailing "/" for next commands path=${path%/} -# Open port in firewall -sudo yunohost firewall allow TCP $syncSyncport > /dev/null 2>&1 +# Update syncthing sysvinit script +sudo cp -f ../conf/syncthing /etc/init.d/syncthing +sudo chmod 0755 /etc/init.d/syncthing +sudo update-rc.d syncthing defaults +sudo yunohost service add synchting +sudo service syncthing restart # Upgrade official debian package -sudo apt-get install runit -y -qq sudo -i -u $syncUser $syncHome/bin/syncthing -upgrade -# Make directories and set rights -sudo mkdir -p /home/yunohost.syncthing/{bin,sync} -sudo chown -R debian-syncthing:www-data /home/yunohost.syncthing/ -sudo chown -R debian-syncthing:debian-syncthing /home/yunohost.syncthing/progress -sudo find /home/yunohost.syncthing/ -type f | while read LINE; do sudo chmod 640 "$LINE" ; done -sudo find /home/yunohost.syncthing/ -type d | while read LINE; do sudo chmod 750 "$LINE" ; done - -# Configure Nginx and reload +# Update and reload Nginx sed -i "s@PATHTOCHANGE@$path@g" ../conf/nginx.conf sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/syncthing.conf sudo service nginx reload