migrated to alpine and better scripts

This commit is contained in:
2025-06-13 07:46:38 +02:00
parent d6a005e72b
commit fc0da52a92
5 changed files with 213 additions and 64 deletions

View File

@@ -1,5 +1,5 @@
# FROM debian:bookworm
FROM debian:bookworm-slim as BUILDER
FROM debian:bookworm as BUILDER
ARG URL
ARG DEBNAME
RUN \
@@ -9,19 +9,17 @@ RUN \
tar xv -C /tmp -f /tmp/client.tar.gz && \
dpkg -i "/tmp/${DEBNAME}"
FROM debian:bookworm-slim
FROM alpine:3.21
COPY --from=BUILDER /usr/local/bin/barracudavpn /app/
RUN \
DEBIAN_FRONTEND=noninteractive apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get upgrade -y && \
DEBIAN_FRONTEND=noninteractive apt-get install -y iproute2 gettext-base tini && \
rm -rf /var/lib/apt/lists/*
apk -U upgrade && \
apk add iproute2 gettext tini
COPY rootfs /
HEALTHCHECK --interval=30s --start-period=30s --timeout=3s \
CMD /app/healthcheck.sh
ENTRYPOINT [ "/usr/bin/tini-static", "--", "/app/entrypoint.sh" ]
ENTRYPOINT [ "/sbin/tini", "--", "/app/entrypoint.sh" ]

View File

@@ -0,0 +1,90 @@
ADAccessibility=0
adapterReordering=0
allowENA=1
allowFWRule=1
AuthType=2
AuthUser=0
BINDIP = 0
certenhancedKeyUsage="1.3.6.1.5.5.7.3.2"
certissuer=""
certissuerX500=""
CertLookupPattern=""
CertMultipleSelection=0
certname=""
CertSEarchOrder=0
certserialnumber=""
certSerialNummberAutoUpdate=1
clientIP=0
CloseOnConnect=0
compress=1
credential_Persist=0
CryptoMode=1
Default=1
dhcp=2
DHCPv6=2
driverLessMode=0
enableMSLogon=0
encryption=4
FallbackProfile=""
fastDynReconnect=1
fastDynReconnectPermanent=1
hash=1
ipFamily=23
ipLegacyMode=1
KEEPALIVE = 10
KeySpec=0
lastActiveDirectory=""
license=""
mode=1
mustConnect=0
oneTimePassword=0
phionX509=0
PrivateEncrypt=1
ProbeEncryption=0
proxy=""
proxydomain=""
proxyType=0
proxyport=""
proxyuser=""
reconnectAdapterReset=0
reconnectCycle=1
ReconnectImmediate=1
redirectBlockingTCP=0
redirectNonBlockingTCP=0
redirectUDP=0
rememberLoginUser=0
SERVER = ${SERVER}
SERVERPORT = ${SERVERPORT}
ShowPopup=1
silent=0
simulateSSL=0
smartcard_keynumber=0
smartcard=0
SPECIAL = NESSUNO
startScript=""
startScriptAsServiceUser=0
startScriptInteractive=0
stopScript=""
stopScriptAsServiceUser=0
stopScriptInteractive=0
store="MY"
StoreFlags=-1
streamCompression=1
TAP = /dev/tun0
TerminateCountdown=2
timeoutAlive=10
timeoutIfUSerLogout=1
tracereport=1
TryTimeout=60
TUNNELENC = AES128-MD5
TUNNELMODE = UDP
tunnelProbing=0
TUNNELREKEY =
tunnelRTT=0
tunnelSoftHeartbeat=0
unattended=1
usePolSrv=0
usePolSrvInterceptVPNHandshake=0
usePolSrvTerminateVPN=0
usePolSrvTimeout=30
WRITEDNS = MERGE

View File

@@ -1,58 +1,7 @@
#!/bin/bash
#!/bin/sh
stty -echoctl # hide ^C
set +H # disable history expansion, to enable the use of exclamation mark in the password
# set +o histexpand
# add tap device if it doesn't exists
if [ ! -d /sys/class/net/tap0 ] ; then
ip tuntap add mode tap tap0
fi
# TODO: check if /sys/class/net/tap0/operstate says "up" and quit?
CONFIGDIR=/app/config/
CONFIGFILE="${CONFIGDIR}/barracudavpn.conf"
mkdir -p "${CONFIGDIR}"
if [ -z "${VPN_PASSWORD}${VPN_PASSWORD_FILE}" ]; then
echo "You need to specify the password (VPN_PASSWORD or VPN_PASSWORD_FILE env variable)"
exit 1
fi
if [ ! -z "${VPN_PASSWORD_FILE}" ]; then
if [ ! -r "${LIC_FILE}" ]; then
echo "The specified password file (${VPN_PASSWORD_FILE}) is not readable"
exit 1
fi
fi
VPN_PASSWORD_FILE_CONTENT=$(cat "${VPN_PASSWORD_FILE}")
VPN_PASSWORD=${VPN_PASSWORD:-$VPN_PASSWORD_FILE_CONTENT}
if [ -z "${LIC_FILE}" ]; then
echo "You need to specify the path to the license file (LIC_FILE env variable)"
exit 1
fi
if [ ! -r "${LIC_FILE}" ]; then
echo "The license file (${LIC_FILE}) is not readable"
exit 1
fi
if [ -z "${SERVER}" ]; then
echo "You need to specify the server (SERVER env variable)"
exit 1
fi
export SERVERPORT=${SERVERPORT:-691}
# generate new config file
envsubst < /app/barracudavpn.conf.tpl > "${CONFIGFILE}"
stop_vpn() {
echo Closing VPN connection
/app/barracudavpn --config "${CONFIGDIR}" --stop
@@ -60,14 +9,117 @@ stop_vpn() {
exit
}
start_vpn() {
start_vpn_licfile() {
echo Opening VPN connection
/app/barracudavpn --config "${CONFIGDIR}" --start --keypwd "${VPN_PASSWORD}" --serverpwd "${VPN_PASSWORD}"
}
start_vpn_credentials() {
echo Opening VPN connection
/app/barracudavpn --config "${CONFIGDIR}" --start --login "${USERNAME}" --serverpwd "${PASSWORD}"
}
generate_config_licfile() {
if [ -z "${VPN_PASSWORD}${VPN_PASSWORD_FILE}" ]; then
echo "You need to specify the password (VPN_PASSWORD or VPN_PASSWORD_FILE env variable)"
exit 1
fi
if [ ! -z "${VPN_PASSWORD_FILE}" ]; then
if [ ! -r "${VPN_PASSWORD_FILE}" ]; then
echo "The specified password file (${VPN_PASSWORD_FILE}) is not readable"
exit 1
fi
VPN_PASSWORD_FILE_CONTENT=$(cat "${VPN_PASSWORD_FILE}")
VPN_PASSWORD=${VPN_PASSWORD:-${VPN_PASSWORD_FILE_CONTENT}}
fi
if [ -z "${LIC_FILE}" ]; then
echo "You need to specify the path to the license file (LIC_FILE env variable)"
exit 1
fi
if [ ! -r "${LIC_FILE}" ]; then
echo "The license file (${LIC_FILE}) is not readable"
exit 1
fi
# generate new config file
envsubst < /app/barracudavpn.conf_licfile.tpl > "${CONFIGFILE}"
}
generate_config_credentials() {
if [ -z "${USERNAME}${USERNAME_FILE}" ]; then
echo "You need to specify the username (USERNAME or USERNAME_FILE env variable)"
exit 1
fi
if [ ! -z "${USERNAME_FILE}" ]; then
if [ ! -r "${USERNAME_FILE}" ]; then
echo "The specified username file (${USERNAME_FILE}) is not readable"
exit 1
fi
USERNAME_FILE_CONTENT=$(cat "${USERNAME_FILE}")
USERNAME=${USERNAME:-${USERNAME_FILE_CONTENT}}
fi
if [ -z "${PASSWORD}${PASSWORD_FILE}" ]; then
echo "You need to specify the password (PASSWORD or PASSWORD_FILE env variable)"
exit 1
fi
if [ ! -z "${PASSWORD_FILE}" ]; then
if [ ! -r "${PASSWORD_FILE}" ]; then
echo "The specified password file (${PASSWORD_FILE}) is not readable"
exit 1
fi
PASSWORD_FILE_CONTENT=$(cat "${PASSWORD_FILE}")
PASSWORD=${PASSWORD:-${PASSWORD_FILE_CONTENT}}
fi
# generate new config file
envsubst < /app/barracudavpn.conf_credentials.tpl > "${CONFIGFILE}"
}
TAP_IFACE=${TAP_IFACE:-tap0}
# add tap device if it doesn't exists
if [ ! -d "/sys/class/net/${TAP_IFACE}" ] ; then
echo Creating "${TAP_IFACE}"
ip tuntap add mode tap "${TAP_IFACE}"
sleep 5
fi
# TODO: check if /sys/class/net/${TAP_IFACE}/operstate says "up" and quit?
CONFIGDIR=/app/config/
CONFIGFILE="${CONFIGDIR}/barracudavpn.conf"
mkdir -p "${CONFIGDIR}"
AUTH_MODE=${AUTH_MODE:-licfile}
if [ -z "${SERVER}" ]; then
echo "You need to specify the server (SERVER env variable)"
exit 1
fi
export SERVERPORT=${SERVERPORT:-691}
trap 'stop_vpn' INT TERM
start_vpn
case "${AUTH_MODE}" in
licfile)
generate_config_licfile
start_vpn_licfile
;;
credentials)
generate_config_credentials
start_vpn_credentials
;;
*)
echo "Invalid AUTH_MODE (${AUTH_MODE})"
exit 1
esac
while : ; do
sleep 1m
done

View File

@@ -1,9 +1,18 @@
#!/bin/bash
#!/bin/sh
CONFIGDIR=/app/config/
STATUS_OUTPUT=$(/app/barracudavpn --config "${CONFIGDIR}" --status)
VPN_EXIT=$?
/app/barracudavpn --config "${CONFIGDIR}" --status|grep '^Status:\s*CONNECTED$' && exit 0
exit 1
if [ "${VPN_EXIT}" -ne 0 ]; then
exit 1
fi
if echo "${STATUS_OUTPUT}" | grep -q '^Status:[[:space:]]*CONNECTED$'; then
exit 0
else
exit 1
fi
# A "connected" answer contains:
# Status: CONNECTED