summaryrefslogtreecommitdiff
path: root/scripts/tuntox.debian-init
blob: 1501f9dab102b7b0d348fc3d0cecd3b050a2fbb4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
#!/bin/sh
### BEGIN INIT INFO
# Provides: tuntox
# Required-start: $network $syslog
# Required-stop: $network $syslog
# Default-start: 2 3 4 5
# Default-stop: 0 1 6
# Short-description: This script takes care of starting and stopping the Tutnox daemon.
# Description: tuntox is a daemon for tunnelling TCP connections over the Tox protocol
#    Notes
#    Modeled after init script for NSCA written by Ethan Galstad (nagios@nagios.org)
### END INIT INFO

#
# If you want to use tuntox as a system service, do the following:
# cp tuntox /usr/bin/
# cp scripts/tuntox.debian-init /etc/init.d/tuntox
# update-rc.d tuntox defaults
#
# Edit the User ID below (it needs to be a number in static builds)
#

# User ID to which the program will drop
USERID=13

DESC="TCP-over-Tox daemon"
NAME=tuntox
DAEMON=/usr/bin/$NAME
DAEMON_CFG_DIR=/etc/tuntox/
PIDFILE=/var/run/$NAME/$NAME.pid
DAEMON_ARGS="-C $DAEMON_CFG_DIR -D -F $PIDFILE -U $USERID -d"
SCRIPTNAME=/etc/init.d/$NAME

# Exit if packages not installed
[ -x "$DAEMON" ] || exit 5

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

# Load the VERBOSE setting and other rcS variables
[ -x /lib/init/vars.sh ] && . /lib/init/vars.sh

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

mkdir -p /var/run/$NAME
chown $USERID /var/run/$NAME

#
# Function that starts the daemon/service
#
do_start()
{
    # Return value
    # 0 if daemon has been started
    # 1 if daemon was already started
    # 2 if daemon could not be started

    # Test if daemon already exist
    start-stop-daemon --test --start --quiet --pidfile $PIDFILE \
        --exec $DAEMON > /dev/null \
        || return 1
    # Start it if not
    start-stop-daemon --start --quiet --pidfile $PIDFILE \
        --exec $DAEMON -- $DAEMON_ARGS \
        || return 2
    # Add code here, if the process need to be ready to handle
    # request form service that depend on it. At last resort,
    # sleep some time.
    sleep 1s
}

#
# Function that stop the dameon
#
do_stop() {
    # Return value
    # 0 if daemon has been stopped
    # 1 if daemon was already stopped
    # 2 if daemon could not be stop
    # other if a failure occured
    ###
    # When nsca exits, clean lock file.
    start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
    RETVAL="$?"
    # If process was already stop. Nothing to do. Exit with 1
    [ "$RETVAL" = 1 ] && return 1
    # If process could not be stop. Exit with 2
    [ "$RETVAL" = 2 ] && return 2
    # If the daemon is only run from initscript
    # and forks, wait for children to finish.
    # If this two condition are not satisfied the add code
    # that waits for the process to drop all resources that
    # could be needed by services started subsequently.
    # At a last resort, sleep for some time.
    start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --pidfile $PIDFILE --exec $DAEMON
    [ "$?" = 2 ] && return 2
    # Many daemon do not delete their pidfiles when they exit
    rm -f $PIDFILE
    return "$RETVAL"
}

#
# Function that sends a SIGHUP to the daemon
#
do_reload()
{
    #
    # A basic reload function. Not used.
    start-stop-daemon --stop --quiet --signal 1 --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 ;;
        *) log_end_msg 1 ;; # Failed to start. Fatal
    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 ;;
        *) log_end_msg 1 ;; # Failed to stop. Fatal
    esac
    ;;
 #reload|force-reload)
 #    #
 #    # If do_reload() is not implemented then leave this comment out
 #    # and leave "force-reload" as an alias for "restart".
 #    #
 #    log_daemon_msg "Reloading $DESC" "$NAME"
 #    do_reload
 #    # Note : the basic do_reload always return 0
 #    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 still running
         *) log_end_msg 1 ;; # Failed to start
        esac
        ;;
     *)
        # Failed to stop
        log_end_msg 1
        ;;
    esac
    ;;
 status)
    log_daemon_msg "Checking status of $DESC" "$NAME"
    status_of_proc -p $PIDFILE "$DAEMON" "$NAME"
    log_end_msg "$?"
    exit $?
    ;;
 *)
    # echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload|status}" >&2
    echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload|status}" >&2
    exit 3
    ;;
esac

# ":" = "exit 0"
: