File: tinc.init

package info (click to toggle)
tinc 1.0.36-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye
  • size: 2,284 kB
  • sloc: ansic: 13,148; sh: 4,378; makefile: 130
file content (140 lines) | stat: -rw-r--r-- 2,762 bytes parent folder | download | duplicates (3)
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
#! /bin/sh
#
### BEGIN INIT INFO
# Provides:          tinc
# Required-Start:    $remote_fs $network
# Required-Stop:     $remote_fs $network
# Should-Start:      $syslog $named
# Should-Stop:       $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start tinc daemons
# Description:       Create a file $NETSFILE (/etc/tinc/nets.boot),
#                    and put all the names of the networks in there.
#                    These names must be valid directory names under
#                    $TCONF (/etc/tinc). Lines starting with a # will be
#                    ignored in this file.
### END INIT INFO
#
# Based on Lubomir Bulej's Redhat init script.

. /lib/lsb/init-functions

DAEMON="/usr/sbin/tincd"
NAME="tinc"
DESC="tinc daemons"
TCONF="/etc/tinc"
NETSFILE="$TCONF/nets.boot"
NETS=""

test -f $DAEMON || exit 0

[ -r /etc/default/tinc ] && . /etc/default/tinc

# foreach_net "what-to-say" action [arguments...]
foreach_net() {
  if [ ! -f $NETSFILE ] ; then
    echo "Please create $NETSFILE."
    exit 0
  fi
  echo -n "$1"
  shift
  egrep '^[ ]*[a-zA-Z0-9_-]+' $NETSFILE | while read net args; do
    echo -n " $net"
    "$@" $net $args
  done
  echo "."
}

signal_running() {
  for i in /var/run/tinc.*pid; do
    if [ -f "$i" ]; then
      head -1 $i | while read pid; do
        kill -$1 $pid
      done
    fi
  done
}

setlimits() {
  while [ $# -gt 0 ]; do
    parm=$1 ; shift
    if [ -n "$1" -a "${1#-}" = "$1" ]; then
      value=$1 ; shift
      ulimit $parm $value
    else
      ulimit $parm
    fi
  done
}

test -n "$LIMITS" && setlimits $LIMITS

start() {
  $DAEMON $EXTRA -n "$@"
}

stop() {
  [ -f /var/run/tinc.$1.pid ] || return
  read pid rest </var/run/tinc.$1.pid || return
  kill -0 "$pid" 2>/dev/null || return

  $DAEMON -n $1 -k || return

  i=0;
  /bin/sleep 0.5

  # Wait for the pidfile to disappear
  while [ -f /var/run/tinc.$1.pid ]; do
    # And check that there is an actual process running
    kill -0 "$pid" 2>/dev/null || return

    if [ $i = '10' ] ; then
      # It's still alive, kill it again and give up
        $DAEMON -n $1 -k && /bin/sleep 0.5
      break
    else
      echo -n "."
      i=$(($i+1))
    fi

    /bin/sleep 0.5
  done
}

reload() {
  $DAEMON -n $1 -kHUP
}

alarm() {
  $DAEMON -n $1 -kALRM
}

restart() {
  stop "$@"
  start "$@"
}

case "$1" in
  start)
    foreach_net "Starting $DESC:" start
  ;;
  stop)
    foreach_net "Stopping $DESC:" stop
  ;;
  reload|force-reload)
    foreach_net "Reloading $DESC configuration:" reload
  ;;
  restart)
    foreach_net "Restarting $DESC:" restart
  ;;
  alarm)
    signal_running ALRM
  ;;
  *)
    echo "Usage: /etc/init.d/$NAME {start|stop|reload|restart|force-reload|alarm}"
    exit 1
  ;;
esac

exit 0