|
5 | 5 |
|
6 | 6 | OPENVPN_CONFIG=${1:-/client/config.ovpn}
|
7 | 7 |
|
| 8 | +# For some reason privileged mode creates the char device and cap-add=NET_ADMIN doesn't |
| 9 | +mkdir -p /dev/net |
| 10 | +if [ ! -c /dev/net/tun ]; then |
| 11 | + mknod /dev/net/tun c 10 200 |
| 12 | +fi |
| 13 | + |
8 | 14 | # Run in background using bash job management, setup trap to clean-up
|
9 | 15 | trap "{ jobs -p | xargs -r kill; wait; }" EXIT
|
10 | 16 | openvpn --config "$OPENVPN_CONFIG" --management 127.0.0.1 9999 &
|
11 | 17 |
|
12 | 18 | # Spin waiting for interface to exist signifying connection
|
13 | 19 | timeout=10
|
14 | 20 | for i in $(seq $timeout); do
|
| 21 | + # Allow to start-up |
| 22 | + sleep 0.5 |
15 | 23 |
|
16 |
| - # Break when connected |
17 |
| - #echo state | busybox nc 127.0.0.1 9999 | grep -q "CONNECTED,SUCCESS" && break; |
| 24 | + # Use bash magic to open tcp socket on fd 3 and break when successful |
| 25 | + exec 3<>/dev/tcp/127.0.0.1/9999 && break |
| 26 | +done |
| 27 | + |
| 28 | +if [ $i -ge $timeout ]; then |
| 29 | + echo "Error connecting to OpenVPN mgmt interface, i=$i, exiting." |
| 30 | + exit 2 |
| 31 | +fi |
18 | 32 |
|
19 |
| - # Bash magic for tcp sockets |
20 |
| - if exec 3<>/dev/tcp/127.0.0.1/9999; then |
21 |
| - # Consume all header input |
22 |
| - while read -t 0.1 <&3; do true; done |
23 |
| - echo "state" >&3 |
24 |
| - read -t 1 <&3 |
25 |
| - echo -n $REPLY | grep -q "CONNECTED,SUCCESS" && break || true |
26 |
| - exec 3>&- |
27 |
| - fi |
| 33 | +# Consume all header input and echo, look for errors here |
| 34 | +while read -t 0.1 <&3; do echo $REPLY; done |
28 | 35 |
|
29 |
| - # Else sleep |
| 36 | +# Request state over mgmt interface |
| 37 | +timeout=10 |
| 38 | +for i in $(seq $timeout); do |
| 39 | + echo "state" >&3 |
| 40 | + state=$(head -n1 <&3) |
| 41 | + echo -n "$state" | grep -q 'CONNECTED,SUCCESS' && break |
30 | 42 | sleep 1
|
31 | 43 | done
|
32 | 44 |
|
33 | 45 | if [ $i -ge $timeout ]; then
|
34 |
| - echo "Error starting OpenVPN, i=$i, exiting." |
35 |
| - exit 2 |
| 46 | + echo "Error connecting to OpenVPN, i=$i, exiting." |
| 47 | + exit 3 |
36 | 48 | fi
|
37 | 49 |
|
| 50 | +exec 3>&- |
0 commit comments