From 4926ee5117030a55da0c4c8e0752360f49f545fb Mon Sep 17 00:00:00 2001 From: Daan Selen Date: Fri, 2 May 2025 10:02:38 +0200 Subject: [PATCH] Fix https://github.com/donaldzou/WGDashboard/issues/723 and more --- docker/entrypoint.sh | 39 ++++++++++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index da3f585..85427e3 100644 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -7,7 +7,7 @@ trap 'stop_service' SIGTERM stop_service() { echo "[WGDashboard] Stopping WGDashboard..." - bash ./wgd.sh stop + /bin/bash ./wgd.sh stop exit 0 } @@ -18,51 +18,68 @@ ensure_installation() { # When using a custom directory to store the files, this part moves over and makes sure the installation continues. echo "Quick-installing..." + # Make the wgd.sh script executable. chmod +x "${WGDASH}"/src/wgd.sh cd "${WGDASH}"/src || exit + # Github issue: https://github.com/donaldzou/WGDashboard/issues/723 + echo "Checking for stale pids..." + if [[ -f ${WGDASH}/src/gunicorn.pid ]]; then + echo "Found stale pid, removing..." + rm ${WGDASH}/src/gunicorn.pid + fi + + # Removing clear shell command from the wgd.sh script to enhance docker logging. echo "Removing clear command from wgd.sh for better Docker logging." sed -i '/clear/d' ./wgd.sh + # Create the databases directory if it does not exist yet. if [ ! -d "/data/db" ]; then echo "Creating database dir" mkdir /data/db fi + # Linking the database on the persistent directory location to where WGDashboard expects. if [ ! -d "${WGDASH}/src/db" ]; then ln -s /data/db "${WGDASH}/src/db" fi + # Create the wg-dashboard.ini file if it does not exist yet. if [ ! -f "${config_file}" ]; then echo "Creating wg-dashboard.ini file" touch "${config_file}" fi + # Link the wg-dashboard.ini file from the persistent directory to where WGDashboard expects it. if [ ! -f "${WGDASH}/src/wg-dashboard.ini" ]; then ln -s "${config_file}" "${WGDASH}/src/wg-dashboard.ini" fi + # Create the Python virtual environment. python3 -m venv "${WGDASH}"/src/venv . "${WGDASH}/src/venv/bin/activate" + # Due to this pip dependency being available as a system package we can just move it to the venv. echo "Moving PIP dependency from ephemerality to runtime environment: psutil" mv /usr/lib/python3.12/site-packages/psutil* "${WGDASH}"/src/venv/lib/python3.12/site-packages + # Due to this pip dependency being available as a system package we can just move it to the venv. echo "Moving PIP dependency from ephemerality to runtime environment: bcrypt" mv /usr/lib/python3.12/site-packages/bcrypt* "${WGDASH}"/src/venv/lib/python3.12/site-packages - ./wgd.sh install + # Use the bash interpreter to install WGDashboard according to the wgd.sh script. + /bin/bash ./wgd.sh install echo "Looks like the installation succeeded. Moving on." # This first step is to ensure the wg0.conf file exists, and if not, then its copied over from the ephemeral container storage. - # This is done so WGDashboard it works out of the box + # This is done so WGDashboard it works out of the box, it also sets a randomly generated private key. if [ ! -f "/etc/wireguard/wg0.conf" ]; then echo "Standard wg0 Configuration file not found, grabbing template." cp -a "/configs/wg0.conf.template" "/etc/wireguard/wg0.conf" - echo "Setting a secure private key." # SORRY 4 BE4 - Daan + echo "Setting a secure private key." local privateKey privateKey=$(wg genkey) @@ -106,6 +123,7 @@ set_envvars() { sed -i "s/^peer_global_dns = .*/peer_global_dns = ${global_dns}/" "${config_file}" fi + # Checking the current set public IP and changing it if it has changed. current_public_ip=$(grep "remote_endpoint = " "${config_file}" | awk '{print $NF}') if [ "${public_ip}" == "" ]; then default_ip=$(curl -s ifconfig.me) @@ -118,6 +136,7 @@ set_envvars() { echo "Public-IP is correct, moving on." fi + # Checking the current WGDashboard web port and changing if needed. current_wgd_port=$(grep "app_port = " "${config_file}" | awk '{print $NF}') if [ "${current_wgd_port}" == "${wgd_port}" ]; then echo "Current WGD port is set correctly, moving on." @@ -131,11 +150,18 @@ set_envvars() { start_core() { printf "\n---------------------- STARTING CORE -----------------------\n" + # Due to some instances complaining about this, making sure its there every time. + mkdir -p /dev/net + mknod /dev/net/tun c 10 200 + chmod 600 /dev/net/tun + + # Actually starting WGDashboard echo "Activating Python venv and executing the WireGuard Dashboard service." - bash ./wgd.sh start + /bin/bash ./wgd.sh start } ensure_blocking() { + # Wait a second before continuing, to give the python program some time to get ready. sleep 1s echo -e "\nEnsuring container continuation." @@ -147,9 +173,12 @@ ensure_blocking() { # Only tail the logs if they are found if [ -n "$latestErrLog" ]; then tail -f "$latestErrLog" & + + # Wait for the tail process to end. wait $! else echo "No log files found to tail. Something went wrong, exiting..." + exit 1 fi }