diff --git a/make/openvpn.mk b/make/openvpn.mk new file mode 100644 index 000000000..faacedac7 --- /dev/null +++ b/make/openvpn.mk @@ -0,0 +1,66 @@ +############################################################# +# +# openvpn +# +# NOTE: Uses start-stop-daemon in init script, so be sure +# to enable that within busybox +# +############################################################# +OPENVPN_SOURCE:=openvpn-1.5.0.tar.gz +OPENVPN_SITE:=http://aleron.dl.sourceforge.net/sourceforge/openvpn/ +OPENVPN_DIR:=$(BUILD_DIR)/openvpn-1.5.0 +OPENVPN_CAT:=zcat +OPENVPN_BINARY:=openvpn +OPENVPN_TARGET_BINARY:=usr/sbin/openvpn +#OPENVPN_PATCH:=$(SOURCE_DIR)/openvpn.patch + +$(DL_DIR)/$(OPENVPN_SOURCE): + $(WGET) -P $(DL_DIR) $(OPENVPN_SITE)/$(OPENVPN_SOURCE) + +openvpn-source: $(DL_DIR)/$(OPENVPN_SOURCE) + +$(OPENVPN_DIR)/.unpacked: $(DL_DIR)/$(OPENVPN_SOURCE) + $(OPENVPN_CAT) $(DL_DIR)/$(OPENVPN_SOURCE) | tar -C $(BUILD_DIR) -xvf - + #cat $(OPENVPN_PATCH) | patch -p1 -d $(OPENVPN_DIR) + touch $(OPENVPN_DIR)/.unpacked + +$(OPENVPN_DIR)/.configured: $(OPENVPN_DIR)/.unpacked + (cd $(OPENVPN_DIR); rm -rf config.cache; \ + $(TARGET_CONFIGURE_OPTS) \ + ./configure \ + --target=$(GNU_TARGET_NAME) \ + --host=$(GNU_TARGET_NAME) \ + --build=$(GNU_HOST_NAME) \ + --prefix=/usr \ + --exec-prefix=/usr \ + --bindir=/usr/bin \ + --sbindir=/usr/sbin \ + --libexecdir=/usr/lib \ + --sysconfdir=/etc \ + --datadir=/usr/share \ + --localstatedir=/var \ + --mandir=/usr/man \ + --infodir=/usr/info \ + --program-prefix="" \ + ); + touch $(OPENVPN_DIR)/.configured + +$(OPENVPN_DIR)/$(OPENVPN_BINARY): $(OPENVPN_DIR)/.configured + $(MAKE) -C $(OPENVPN_DIR) + +$(TARGET_DIR)/$(OPENVPN_TARGET_BINARY): $(OPENVPN_DIR)/$(OPENVPN_BINARY) + $(MAKE) DESTDIR=$(TARGET_DIR) -C $(OPENVPN_DIR) install + mkdir -p $(TARGET_DIR)/etc/openvpn + cp $(SOURCE_DIR)/openvpn $(TARGET_DIR)/etc/init.d/openvpn + rm -rf $(TARGET_DIR)/share/locale $(TARGET_DIR)/usr/info \ + $(TARGET_DIR)/usr/man $(TARGET_DIR)/usr/share/doc + +openvpn: uclibc lzo $(TARGET_DIR)/$(OPENVPN_TARGET_BINARY) + +openvpn-clean: + $(MAKE) DESTDIR=$(TARGET_DIR) -C $(OPENVPN_DIR) uninstall + -$(MAKE) -C $(OPENVPN_DIR) clean + +openvpn-dirclean: + rm -rf $(OPENVPN_DIR) + diff --git a/sources/openvpn b/sources/openvpn new file mode 100755 index 000000000..94bdc600e --- /dev/null +++ b/sources/openvpn @@ -0,0 +1,103 @@ +#!/bin/sh -e +# +# Original version by Robert Leslie +# , edited by iwj and cs +# Modified for openvpn by Alberto Gonzalez Iniesta +# Modified for restarting / starting / stopping single tunnels by Richard Mueller + +test $DEBIAN_SCRIPT_DEBUG && set -v -x + +DAEMON=/usr/sbin/openvpn +CONFIG_DIR=/etc/openvpn +test -x $DAEMON || exit 0 +test -d $CONFIG_DIR || exit 0 + +start_vpn () { + $DAEMON --daemon --writepid /var/run/openvpn.$NAME.pid \ + --config $CONFIG_DIR/$NAME.conf --cd $CONFIG_DIR || echo -n " FAILED->" + echo -n " $NAME" +} +stop_vpn () { + kill `cat $PIDFILE` || true + rm $PIDFILE +} + +case "$1" in +start) + echo -n "Starting openvpn:" + + if test -z $2 ; then + for CONFIG in `cd $CONFIG_DIR; ls *.conf 2> /dev/null`; do + NAME=${CONFIG%%.conf} + start_vpn + done + else + if test -e $CONFIG_DIR/$2.conf ; then + NAME=$2 + start_vpn + else + echo -n " No such VPN: $2" + fi + fi + echo "." + + ;; +stop) + echo -n "Stopping openvpn:" + + if test -z $2 ; then + for PIDFILE in `ls /var/run/openvpn.*.pid 2> /dev/null`; do + NAME=`echo $PIDFILE | cut -c18-` + NAME=${NAME%%.pid} + stop_vpn + echo -n " $NAME" + done + else + if test -e /var/run/openvpn.$2.pid ; then + PIDFILE=`ls /var/run/openvpn.$2.pid 2> /dev/null` + NAME=`echo $PIDFILE | cut -c18-` + NAME=${NAME%%.pid} + stop_vpn + echo -n " $NAME" + else + echo -n " No such VPN: $2" + fi + fi + echo "." + ;; +# We only 'reload' for running VPNs. New ones will only start with 'start' or 'restart'. +reload|force-reload) + echo -n "Reloading openvpn:" + for PIDFILE in `ls /var/run/openvpn.*.pid 2> /dev/null`; do + NAME=`echo $PIDFILE | cut -c18-` + NAME=${NAME%%.pid} +# If openvpn if running under a different user than root we'll need to restart + if egrep '^( |\t)*user' $CONFIG_DIR/$NAME.conf > /dev/null 2>&1 ; then + stop_vpn + sleep 1 + start_vpn + echo -n "(restarted)" + else + kill -HUP `cat $PIDFILE` || true +# start-stop-daemon --stop --signal HUP --quiet --oknodo \ +# --exec $DAEMON --pidfile $PIDFILE + echo -n " $NAME" + fi + done + echo "." + ;; + +restart) + $0 stop $2 + sleep 1 + $0 start $2 + ;; +*) + echo "Usage: $0 {start|stop|reload|restart|force-reload}" >&2 + exit 1 + ;; +esac + +exit 0 + +# vim:set ai et sts=2 sw=2 tw=0: