#!/bin/bash set -e [ -n "${DEBUG+x}" ] && set -x OPENVPN_CONFIG=${1:-/client/config.ovpn} # Run in background, rely on bash for job management openvpn --config "$OPENVPN_CONFIG" --management 127.0.0.1 9999 & # Spin waiting for interface to exist signifying connection timeout=10 for i in $(seq $timeout); do # Break when connected #echo state | busybox nc 127.0.0.1 9999 | grep -q "CONNECTED,SUCCESS" && break; # Bash magic for tcp sockets if exec 3<>/dev/tcp/127.0.0.1/9999; then # Consume all header input while read -t 0.1 <&3; do true; done echo "state" >&3 read -t 1 <&3 echo -n $REPLY | grep -q "CONNECTED,SUCCESS" && break || true exec 3>&- fi # Else sleep sleep 1 done if [ $i -ge $timeout ]; then echo "Error starting OpenVPN, i=$i, exiting." exit 2; fi # The show is over. kill %1