|
5 | 5 |
|
6 | 6 | OPENVPN_CONFIG=${1:-/client/config.ovpn}
|
7 | 7 |
|
8 |
| -# Run in background, rely on bash for job management |
| 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 | + |
| 14 | +# Run in background using bash job management, setup trap to clean-up |
| 15 | +trap "{ jobs -p | xargs -r kill; wait; }" EXIT |
9 | 16 | openvpn --config "$OPENVPN_CONFIG" --management 127.0.0.1 9999 &
|
10 | 17 |
|
11 | 18 | # Spin waiting for interface to exist signifying connection
|
12 | 19 | timeout=10
|
13 | 20 | for i in $(seq $timeout); do
|
| 21 | + # Allow to start-up |
| 22 | + sleep 0.5 |
| 23 | + |
| 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 |
14 | 27 |
|
15 |
| - # Break when connected |
16 |
| - #echo state | busybox nc 127.0.0.1 9999 | grep -q "CONNECTED,SUCCESS" && break; |
| 28 | +if [ $i -ge $timeout ]; then |
| 29 | + echo "Error connecting to OpenVPN mgmt interface, i=$i, exiting." |
| 30 | + exit 2 |
| 31 | +fi |
17 | 32 |
|
18 |
| - # Bash magic for tcp sockets |
19 |
| - if exec 3<>/dev/tcp/127.0.0.1/9999; then |
20 |
| - # Consume all header input |
21 |
| - while read -t 0.1 <&3; do true; done |
22 |
| - echo "state" >&3 |
23 |
| - read -t 1 <&3 |
24 |
| - echo -n $REPLY | grep -q "CONNECTED,SUCCESS" && break || true |
25 |
| - exec 3>&- |
26 |
| - fi |
| 33 | +# Consume all header input and echo, look for errors here |
| 34 | +while read -t 0.1 <&3; do echo $REPLY; done |
27 | 35 |
|
28 |
| - # 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 |
29 | 42 | sleep 1
|
30 | 43 | done
|
31 | 44 |
|
32 | 45 | if [ $i -ge $timeout ]; then
|
33 |
| - echo "Error starting OpenVPN, i=$i, exiting." |
34 |
| - exit 2; |
| 46 | + echo "Error connecting to OpenVPN, i=$i, exiting." |
| 47 | + exit 3 |
35 | 48 | fi
|
36 | 49 |
|
37 |
| -# The show is over. |
38 |
| -kill %1 |
| 50 | +exec 3>&- |
0 commit comments