mirror of
https://github.com/alexbelgium/hassio-addons.git
synced 2026-01-09 17:31:03 +01:00
216 lines
6.8 KiB
Bash
Executable File
216 lines
6.8 KiB
Bash
Executable File
#!/usr/bin/bashio
|
|
# shellcheck shell=bash
|
|
|
|
####################
|
|
# Export variables #
|
|
####################
|
|
|
|
bashio::log.info "Exporting variables"
|
|
for k in $(bashio::jq "/data/options.json" 'keys | .[]'); do
|
|
bashio::log.blue "$k"="$(bashio::config "$k")"
|
|
export "$k"="$(bashio::config "$k")"
|
|
done
|
|
echo ""
|
|
|
|
mkdir -p "$TRANSMISSION_HOME"/openvpn
|
|
|
|
###########################
|
|
# Correct download folder #
|
|
###########################
|
|
|
|
if [ -f "$TRANSMISSION_HOME"/settings.json ]; then
|
|
echo "Updating variables"
|
|
sed -i "/download-dir/c \"download-dir\": \"$(bashio::config 'TRANSMISSION_DOWNLOAD_DIR')\"," "$TRANSMISSION_HOME"/settings.json
|
|
if bashio::config.has_value 'TRANSMISSION_INCOMPLETE_DIR'; then
|
|
sed -i "/\"incomplete-dir\"/c \"incomplete-dir\": \"$(bashio::config 'TRANSMISSION_INCOMPLETE_DIR')\"," "$TRANSMISSION_HOME"/settings.json || true
|
|
sed -i "/\"incomplete-dir-enabled\"/c \"incomplete-dir-enabled\": true," "$TRANSMISSION_HOME"/settings.json || true
|
|
fi
|
|
sed -i "/watch-dir/c \"watch-dir\": \"$(bashio::config 'TRANSMISSION_WATCH_DIR')\"," "$TRANSMISSION_HOME"/settings.json || true
|
|
sed -i.bak ':begin;$!N;s/,\n}/\n}/g;tbegin;P;D' "$TRANSMISSION_HOME"/settings.json
|
|
fi
|
|
|
|
#######################
|
|
# Correct permissions #
|
|
#######################
|
|
|
|
# Get variables
|
|
DOWNLOAD_DIR="$(bashio::config 'TRANSMISSION_DOWNLOAD_DIR')"
|
|
INCOMPLETE_DIR="$(bashio::config 'TRANSMISSION_INCOMPLETE_DIR')"
|
|
WATCH_DIR="$(bashio::config 'TRANSMISSION_WATCH_DIR')"
|
|
TRANSMISSION_HOME="$(bashio::config 'TRANSMISSION_HOME')"
|
|
|
|
# Get id
|
|
if bashio::config.has_value 'PUID' && bashio::config.has_value 'PGID'; then
|
|
echo "Using PUID $(bashio::config 'PUID') and PGID $(bashio::config 'PGID')"
|
|
PUID="$(bashio::config 'PUID')"
|
|
PGID="$(bashio::config 'PGID')"
|
|
else
|
|
PUID="$(id -u)"
|
|
PGID="$(id -g)"
|
|
fi
|
|
|
|
# Update permissions
|
|
for folder in "$DOWNLOAD_DIR" "$INCOMPLETE_DIR" "$WATCH_DIR" "$TRANSMISSION_HOME"; do
|
|
mkdir -p "$folder"
|
|
chown -R "$PUID:$PGID" "$folder"
|
|
done
|
|
|
|
###################
|
|
# Custom provider #
|
|
###################
|
|
|
|
# Migrate OPENVPN_CUSTOM_PROVIDER to OPENVPN_PROVIDER
|
|
if bashio::config.true 'OPENVPN_CUSTOM_PROVIDER'; then
|
|
# Use new option
|
|
bashio::addon.option "OPENVPN_PROVIDER" "custom"
|
|
# Remove previous option
|
|
bashio::addon.option "OPENVPN_CUSTOM_PROVIDER"
|
|
# log
|
|
bashio::log.yellow "OPENVPN_CUSTOM_PROVIDER actived, OPENVPN_PROVIDER set to custom"
|
|
# Restart
|
|
bashio::addon.restart
|
|
fi
|
|
|
|
# Function to check for files path
|
|
function check_path() {
|
|
|
|
# Get variable
|
|
file="$1"
|
|
|
|
# Double check exists
|
|
if [ ! -f "$file" ]; then
|
|
bashio::warning "$file not found"
|
|
return 1
|
|
fi
|
|
|
|
cp "$file" /tmpfile
|
|
|
|
# Loop through each line of the input file
|
|
while read -r line; do
|
|
# Check if the line contains a txt file
|
|
if [[ "$line" =~ \.txt ]] || [[ "$line" =~ \.crt ]]; then
|
|
# Extract the txt file name from the line
|
|
file_name="$(echo "$line" | awk -F' ' '{print $2}')"
|
|
# Check if the txt file exists
|
|
if [ ! -f "$file_name" ]; then
|
|
# Check if the txt file exists in the /config/openvpn/ directory
|
|
if [ -f "/etc/openvpn/custom/${file_name##*/}" ]; then
|
|
# Append /config/openvpn/ in front of the original txt file in the ovpn file
|
|
sed -i "s|$file_name|/etc/openvpn/custom/${file_name##*/}|g" "$file"
|
|
# Print a success message
|
|
bashio::log.warning "Appended /etc/openvpn/custom/ to ${file_name##*/} in $file"
|
|
else
|
|
# Print an error message
|
|
bashio::log.warning "$file_name is referenced in your ovpn file but does not exist in the $TRANSMISSION_HOME/openvpn folder"
|
|
sleep 5
|
|
fi
|
|
fi
|
|
fi
|
|
done < /tmpfile
|
|
|
|
rm /tmpfile
|
|
|
|
# Ensure config ends with a line feed
|
|
sed -i "\$q" "$file"
|
|
|
|
}
|
|
|
|
# Define custom file
|
|
if [ "$(bashio::config "OPENVPN_PROVIDER")" == "custom" ]; then
|
|
|
|
# Validate ovpn file
|
|
openvpn_config="$(bashio::config "OPENVPN_CONFIG")"
|
|
|
|
# If contains *.ovpn, clean option
|
|
if [[ "$openvpn_config" == *".ovpn" ]]; then
|
|
bashio::log.warning "OPENVPN_CONFIG should not end by ovpn, correcting"
|
|
bashio::addon.option 'OPENVPN_CONFIG' "${openvpn_config%.ovpn}"
|
|
bashio::addon.restart
|
|
fi
|
|
|
|
# Add ovpn
|
|
openvpn_config="${openvpn_config}.ovpn"
|
|
|
|
# log
|
|
bashio::log.info "OPENVPN_PROVDER set to custom, will use the openvpn file OPENVPN_CONFIG : $openvpn_config"
|
|
|
|
# If file found
|
|
if [ -f "$TRANSMISSION_HOME"/openvpn/"$openvpn_config" ]; then
|
|
echo "... configured ovpn file : using $TRANSMISSION_HOME/openvpn/$openvpn_config"
|
|
# Copy files
|
|
rm -r /etc/openvpn/custom
|
|
# Symlink folder
|
|
echo "... symlink the $TRANSMISSION_HOME/openvpn foplder to /etc/openvpn/custom"
|
|
ln -s "$TRANSMISSION_HOME"/openvpn /etc/openvpn/custom
|
|
# Check path
|
|
check_path /etc/openvpn/custom/"$openvpn_config"
|
|
else
|
|
bashio::exit.nok "Configured ovpn file : $openvpn_config not found! Are you sure you added it in $TRANSMISSION_HOME/openvpn ?"
|
|
fi
|
|
|
|
else
|
|
|
|
bashio::log.info "Custom openvpn provider not selected, the provider $OPENVPN_PROVIDER will be used"
|
|
|
|
fi
|
|
|
|
###################
|
|
# Accept local ip #
|
|
###################
|
|
|
|
ip route add 10.0.0.0/8 via 172.30.32.1
|
|
ip route add 192.168.0.0/16 via 172.30.32.1
|
|
ip route add 172.16.0.0/12 via 172.30.32.1
|
|
ip route add 172.30.0.0/16 via 172.30.32.1
|
|
|
|
################
|
|
# Auto restart #
|
|
################
|
|
|
|
if bashio::config.true 'auto_restart'; then
|
|
|
|
bashio::log.info "Auto restarting addon if openvpn down"
|
|
(
|
|
set -o posix
|
|
export -p
|
|
) > /env.sh
|
|
chmod 755 /env.sh
|
|
chmod +x /usr/bin/restart_addon
|
|
sed -i "1a . /env.sh; /usr/bin/restart_addon >/proc/1/fd/1 2>/proc/1/fd/2" /etc/openvpn/tunnelDown.sh
|
|
|
|
fi
|
|
|
|
if [ -f /data/addonrestarted ]; then
|
|
bashio::log.warning "Warning, transmission had failed and the addon has self-rebooted as 'auto_restart' option was on. Please check that it is still running"
|
|
rm /data/addonrestarted
|
|
fi
|
|
|
|
#######################
|
|
# Run haugene scripts #
|
|
#######################
|
|
|
|
bashio::log.info "Running userscript"
|
|
chmod +x /etc/transmission/userSetup.sh
|
|
/./etc/transmission/userSetup.sh
|
|
echo ""
|
|
|
|
# Correct mullvad
|
|
if [ "$(bashio::config "OPENVPN_PROVIDER")" == "mullvad" ]; then
|
|
bashio::log.info "Mullvad selected, copying script for IPv6 disabling"
|
|
chown "$PUID:$PGID" /opt/modify-mullvad.sh
|
|
chmod +x /opt/modify-mullvad.sh
|
|
sed -i '$i/opt/modify-mullvad.sh' /etc/openvpn/start.sh
|
|
fi
|
|
|
|
bashio::log.info "Starting app"
|
|
/./etc/openvpn/start.sh &
|
|
echo ""
|
|
|
|
#################
|
|
# Allow ingress #
|
|
#################
|
|
|
|
bashio::net.wait_for 9091 localhost 900
|
|
bashio::log.info "Ingress ready"
|
|
exec nginx
|