OpenVPN (rc.openvpn)

Script de inicialização para OpenVPN

Categoria: Init

Software: OpenVPN

[ Hits: 10.441 ]

Por: Michel Angelo da Silva Pereira


Este arquivo inicializa, para e mostra o status do serviço OpenVPN.


#!/bin/sh
#
# Contributed to the OpenVPN project by
# Douglas Keller <doug@voidstar.dyndns.org>
# 2002.05.15
#
# Modified by
# Michel Pereira <michel@michel.eti.br>
# 2005.05.16

# To install:
#   copy this file to /etc/rc.d/rc.openvpn
#   shell> chmod +x /etc/rc.d/rc.openvpn
#   shell> mkdir /etc/openvpn
#   make .conf or .sh files in /etc/openvpn (see below)

# Author's Notes:
#
# I have created an /etc/init.d init script and enhanced openvpn.spec to
# automatically register the init script.  Once the RPM is installed you
# can start and stop OpenVPN with "service openvpn start" and "service
# openvpn stop".
#
# The init script does the following:
#
# - Starts an openvpn process for each .conf file it finds in
#   /etc/openvpn.
#
# - If /etc/openvpn/xxx.sh exists for a xxx.conf file then it executes
#   it before starting openvpn (useful for doing openvpn --mktun...).
#
# - In addition to start/stop you can do:
#
#   service openvpn reload - SIGHUP
#   service openvpn reopen - SIGUSR1

#   service openvpn status - SIGUSR2
#
# Modifications:
#
# 2003.05.02
#   * Changed == to = for sh compliance (Bishop Clark).
#   * If condrestart|reload|reopen|status, check that we were
#     actually started (James Yonan).
#   * Added lock, piddir, and work variables (James Yonan).
#   * If start is attempted twice, without an intervening stop, or
#     if start is attempted when previous start was not properly
#     shut down, then kill any previously started processes, before
#     commencing new start operation (James Yonan).
#   * Do a better job of flagging errors on start, and properly
#     returning success or failure status to caller (James Yonan).
#
# 2005.04.04
#   * Added openvpn-startup and openvpn-shutdown script calls
#     (James Yonan).
#
# 2005.05.16
#   * Customized to run on Slackware
#     (Michel Pereira)


# Location of openvpn binary
openvpn=""
openvpn_locations="/usr/sbin/openvpn /usr/local/sbin/openvpn"
for location in $openvpn_locations
do
  if [ -f "$location" ]
  then
    openvpn=$location
  fi
done

# Lockfile
lock="/var/lock/subsys/openvpn"

# PID directory
piddir="/var/run/openvpn"

# Our working directory
work=/etc/openvpn

# Check that binary exists
if ! [ -f  $openvpn ] 
then
  echo "openvpn binary not found"
  exit 0
fi

# See how we were called.
case "$1" in
  start)
   echo -n $"Starting openvpn: "

   /sbin/modprobe tun >/dev/null 2>&1

   # Run startup script, if defined
   if [ -f $work/openvpn-startup ]; then
       $work/openvpn-startup
   fi

   if [ ! -d  $piddir ]; then
       mkdir $piddir
   fi

   if [ -f $lock ]; then
       # we were not shut down correctly
       for pidf in `/bin/ls $piddir/*.pid 2>/dev/null`; do
         if [ -s $pidf ]; then
      kill `cat $pidf` >/dev/null 2>&1
         fi
         rm -f $pidf
       done
       rm -f $lock
       sleep 2
   fi

   rm -f $piddir/*.pid
   cd $work

   # Start every .conf in $work and run .sh if exists
   errors=0
   successes=0
   for c in `/bin/ls *.conf 2>/dev/null`; do
       bn=${c%%.conf}
       if [ -f "$bn.sh" ]; then
      . $bn.sh
       fi
       rm -f $piddir/$bn.pid
       $openvpn --daemon --writepid $piddir/$bn.pid --config $c --cd $work
       if [ $? = 0 ]; then
      successes=1
       else
      errors=1
       fi
   done

   if [ $errors = 1 ]; then
       echo failure;
   else
       echo success;
   fi

   if [ $successes = 1 ]; then
       touch $lock
   fi
   ;;
  stop)
   echo -n $"Shutting down openvpn: "
   for pidf in `/bin/ls $piddir/*.pid 2>/dev/null`; do
     if [ -s $pidf ]; then
       kill `cat $pidf` >/dev/null 2>&1
     fi
     rm -f $pidf
   done

   # Run shutdown script, if defined
   if [ -f $work/openvpn-shutdown ]; then
       $work/openvpn-shutdown
   fi

   echo success;
   rm -f $lock
   ;;
  restart)
   $0 stop
   sleep 2
   $0 start
   ;;
  reload)
   if [ -f $lock ]; then
       for pidf in `/bin/ls $piddir/*.pid 2>/dev/null`; do
      if [ -s $pidf ]; then
          kill -HUP `cat $pidf` >/dev/null 2>&1
      fi
       done
   else
       echo "openvpn: service not started"
       exit 1
   fi
   ;;
  reopen)
   if [ -f $lock ]; then
       for pidf in `/bin/ls $piddir/*.pid 2>/dev/null`; do
      if [ -s $pidf ]; then
          kill -USR1 `cat $pidf` >/dev/null 2>&1
      fi
       done
   else
       echo "openvpn: service not started"
       exit 1
   fi
   ;;
  condrestart)
   if [ -f $lock ]; then
       $0 stop
       # avoid race
       sleep 2
       $0 start
   fi
   ;;
  status)
   if [ -f $lock ]; then
       for pidf in `/bin/ls $piddir/*.pid 2>/dev/null`; do
      if [ -s $pidf ]; then
          kill -USR2 `cat $pidf` >/dev/null 2>&1
      fi
       done
       echo "Status written to /var/log/messages"
   else
       echo "openvpn: service not started"
       exit 1
   fi
        ;;
  *)
   echo "Usage: openvpn {start|stop|restart|condrestart|reload|reopen|status}"
   exit 1
   ;;
esac
exit 0
  


Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário

  



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts