2023-02-15 13:16:31 +01:00
#!/usr/bin/env bash
2025-02-25 16:32:34 +00:00
set -euo pipefail
shopt -s nullglob
shopt -s failglob
2025-09-16 09:40:30 +01:00
VERSION = "v0.7.1"
2023-02-02 22:02:41 +01:00
2024-11-16 18:24:58 +00:00
# Variables for self-updating
2023-03-04 19:56:26 +01:00
ScriptArgs = ( " $@ " )
ScriptPath = " $( readlink -f " $0 " ) "
ScriptWorkDir = " $( dirname " $ScriptPath " ) "
2023-01-18 11:50:00 +01:00
2025-09-16 09:28:05 +01:00
# ChangeNotes: Sync with dockcheck v0.7.1 - Added advanced notifications, async processing, configuration system
2025-02-25 16:32:34 +00:00
Github = "https://github.com/sudo-kraken/podcheck"
RawUrl = "https://raw.githubusercontent.com/sudo-kraken/podcheck/main/podcheck.sh"
2025-09-16 09:28:05 +01:00
# Source helper functions
source_if_exists_or_fail( ) {
if [ [ -s " $1 " ] ] ; then
source " $1 "
[ [ " ${ DisplaySourcedFiles :- false } " = = true ] ] && echo " * sourced config: ${ 1 } "
return 0
else
return 1
fi
}
# User customizable defaults
source_if_exists_or_fail " ${ HOME } /.config/podcheck.config " || source_if_exists_or_fail " ${ ScriptWorkDir } /podcheck.config "
2025-02-25 16:32:34 +00:00
cleanup( ) {
# Temporarily disable failglob for cleanup
shopt -u failglob
# Remove temporary files if any
rm -f /tmp/podcheck-* 2>/dev/null
# Remove backup file if update failed
[ -f " $ScriptPath .bak " ] && rm -f " $ScriptPath .bak "
# Clean up any temporary downloaded binaries
[ -f "/tmp/regctl.tmp" ] && rm -f "/tmp/regctl.tmp"
[ -f "/tmp/jq.tmp" ] && rm -f "/tmp/jq.tmp"
# Re-enable failglob
shopt -s failglob
}
trap cleanup EXIT
2024-11-16 18:24:58 +00:00
# Check if there's a new release of the script
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
LatestRelease = " $( curl -s -r 0-100 " $RawUrl " | sed -n "/VERSION/s/VERSION=//p" | tr -d '"' ) "
LatestChanges = " $( curl -s -r 0-200 " $RawUrl " | sed -n "/ChangeNotes/s/# ChangeNotes: //p" ) "
2023-03-05 20:44:05 +01:00
2025-02-25 16:32:34 +00:00
# After getting LatestRelease
if [ [ -n " $LatestRelease " && " $LatestRelease " != " $VERSION " ] ] ; then
printf "\nNew version available: %s\nCurrent version: %s\nChanges: %s\n" \
" $LatestRelease " " $VERSION " " $LatestChanges "
read -r -p "Do you want to update? [y/N] " update
if [ [ " $update " = ~ [ yY] ] ] ; then
self_update
fi
fi
2023-01-19 12:09:29 +01:00
Help( ) {
2025-09-16 09:28:05 +01:00
echo "Syntax: podcheck.sh [OPTION] [comma separated names to include]"
echo "Example: podcheck.sh -y -x 10 -d 10 -e nextcloud,heimdall"
2023-02-09 12:03:27 +00:00
echo
echo "Options:"
echo "-a|y Automatic updates, without interaction."
2025-09-16 09:28:05 +01:00
echo "-c D Exports metrics as prom file for the prometheus node_exporter. Provide the collector textfile directory."
echo "-d N Only update to new images that are N+ days old. Lists too recent with +prefix and age. 2xSlower."
2023-12-23 20:47:23 +01:00
echo "-e X Exclude containers, separated by comma."
2024-11-16 18:24:58 +00:00
echo "-f Force pod restart after update."
2025-09-16 09:28:05 +01:00
echo "-F Only compose up the specific container, not the whole compose stack (useful for master-compose structure)."
2023-12-23 20:47:23 +01:00
echo "-h Print this Help."
2024-01-06 00:11:33 +01:00
echo "-i Inform - send a preconfigured notification."
2025-09-16 09:28:05 +01:00
echo "-I Prints custom releasenote urls alongside each container with updates in CLI output (requires urls.list)."
2024-01-18 20:59:55 +01:00
echo "-l Only update if label is set. See readme."
2025-09-16 09:28:05 +01:00
echo "-m Monochrome mode, no printf color codes and hides progress bar."
echo "-M Prints custom releasenote urls as markdown (requires template support)."
2024-11-16 18:24:58 +00:00
echo "-n No updates; only checking availability."
echo "-p Auto-prune dangling images after update."
echo "-r Allow updating images for podman run; won't update the container."
echo "-s Include stopped containers in the check."
2025-09-16 09:28:05 +01:00
echo "-t N Set a timeout (in seconds) per container for registry checkups, 10 is default."
echo "-u Allow automatic self updates - caution as this will pull new code and autorun it."
2024-02-02 20:52:01 +01:00
echo "-v Prints current version."
2025-09-16 09:28:05 +01:00
echo "-x N Set max asynchronous subprocesses, 1 default, 0 to disable, 32+ tested."
2024-09-28 14:22:09 +02:00
echo
echo " Project source: $Github "
2023-02-09 12:03:27 +00:00
}
2023-01-19 12:09:29 +01:00
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
# Colours
2023-12-19 20:24:34 +01:00
c_red = "\033[0;31m"
c_green = "\033[0;32m"
c_yellow = "\033[0;33m"
c_blue = "\033[0;34m"
c_teal = "\033[0;36m"
c_reset = "\033[0m"
2025-09-16 09:28:05 +01:00
# Initialise variables
Timeout = ${ Timeout :- 10 }
MaxAsync = ${ MaxAsync :- 1 }
BarWidth = ${ BarWidth :- 50 }
AutoMode = ${ AutoMode :- false }
DontUpdate = ${ DontUpdate :- false }
AutoPrune = ${ AutoPrune :- false }
AutoSelfUpdate = ${ AutoSelfUpdate :- false }
OnlyLabel = ${ OnlyLabel :- false }
Notify = ${ Notify :- false }
ForceRestartStacks = ${ ForceRestartStacks :- false }
DRunUp = ${ DRunUp :- false }
MonoMode = ${ MonoMode :- false }
PrintReleaseURL = ${ PrintReleaseURL :- false }
PrintMarkdownURL = ${ PrintMarkdownURL :- false }
Stopped = ${ Stopped :- "" }
CollectorTextFileDirectory = ${ CollectorTextFileDirectory :- }
Exclude = ${ Exclude :- }
DaysOld = ${ DaysOld :- }
OnlySpecific = ${ OnlySpecific :- false }
SpecificContainer = ${ SpecificContainer :- "" }
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
Excludes = ( )
GotUpdates = ( )
NoUpdates = ( )
GotErrors = ( )
SelectedUpdates = ( )
2025-09-16 09:28:05 +01:00
CurlArgs = " --retry ${ CurlRetryCount :- 3 } --retry-delay ${ CurlRetryDelay :- 1 } --connect-timeout ${ CurlConnectTimeout :- 5 } -sf "
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
regbin = ""
2025-09-16 09:28:05 +01:00
jqbin = ""
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
set -euo pipefail
2025-09-16 09:28:05 +01:00
while getopts "ayfFhiIlmMnprsuvc:e:d:t:x:" options; do
2023-02-09 12:03:27 +00:00
case " ${ options } " in
2025-09-16 09:28:05 +01:00
a| y) AutoMode = true ; ;
c) CollectorTextFileDirectory = " ${ OPTARG } " ; ;
d) DaysOld = ${ OPTARG } ; ;
e) Exclude = ${ OPTARG } ; ;
f) ForceRestartStacks = true ; ;
F) OnlySpecific = true ; ;
i) Notify = true ; ;
I) PrintReleaseURL = true ; ;
2024-01-18 20:59:55 +01:00
l) OnlyLabel = true ; ;
2025-09-16 09:28:05 +01:00
m) MonoMode = true ; ;
M) PrintMarkdownURL = true ; ;
n) DontUpdate = true; AutoMode = true; ;
p) AutoPrune = true ; ;
r) DRunUp = true ; ;
2023-12-13 19:50:58 +01:00
s) Stopped = "-a" ; ;
2024-08-17 08:50:39 -04:00
t) Timeout = " ${ OPTARG } " ; ;
2025-09-16 09:28:05 +01:00
u) AutoSelfUpdate = true ; ;
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
v) printf "%s\n" " $VERSION " ; exit 0 ; ;
2025-09-16 09:28:05 +01:00
x) MaxAsync = ${ OPTARG } ; ;
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
h| *) Help; exit 2 ; ;
2023-02-09 12:03:27 +00:00
esac
done
shift " $(( OPTIND-1)) "
2023-01-19 12:09:29 +01:00
2025-09-16 09:28:05 +01:00
# Set $1 to a variable for name filtering later, rewriting if multiple
SearchName = " ${ 1 :- } "
if [ [ ! -z " $SearchName " ] ] ; then
SearchName = " ^( ${ SearchName //,/| } ) $"
fi
# Check if there's a new release of the script
LatestSnippet = " $( curl ${ CurlArgs } -r 0-200 " $RawUrl " || printf "undefined" ) "
LatestRelease = " $( echo " ${ LatestSnippet } " | sed -n "/VERSION/s/VERSION=//p" | tr -d '"' ) "
LatestChanges = " $( echo " ${ LatestSnippet } " | sed -n "/ChangeNotes/s/# ChangeNotes: //p" ) "
# Basic notify configuration check
if [ [ " ${ Notify } " = = true ] ] && [ [ ! -s " ${ ScriptWorkDir } /notify.sh " ] ] && [ [ -z " ${ NOTIFY_CHANNELS :- } " ] ] ; then
printf "Using v2 notifications with -i flag passed but no notify channels configured in podcheck.config. This will result in no notifications being sent.\n"
fi
# Setting up options and sourcing functions
if [ [ " $DontUpdate " = = true ] ] ; then AutoMode = true; fi
if [ [ " $MonoMode " = = true ] ] ; then declare c_{ red,green,yellow,blue,teal,reset} = "" ; fi
if [ [ " $Notify " = = true ] ] ; then
source_if_exists_or_fail " ${ ScriptWorkDir } /notify.sh " || source_if_exists_or_fail " ${ ScriptWorkDir } /notify_templates/notify_v2.sh " || Notify = false
fi
if [ [ -n " $Exclude " ] ] ; then
IFS = ',' read -ra Excludes <<< " $Exclude "
unset IFS
fi
if [ [ -n " $DaysOld " ] ] ; then
if ! [ [ $DaysOld = ~ ^[ 0-9] +$ ] ] ; then
printf "Days -d argument given (%s) is not a number.\n" " $DaysOld "
exit 2
fi
fi
if [ [ -n " $CollectorTextFileDirectory " ] ] ; then
if ! [ [ -d $CollectorTextFileDirectory ] ] ; then
printf "The directory (%s) does not exist.\n" " $CollectorTextFileDirectory "
exit 2
else
source " ${ ScriptWorkDir } /addons/prometheus/prometheus_collector.sh "
fi
fi
exec_if_exists( ) {
if [ [ $( type -t $1 ) = = function ] ] ; then " $@ " ; fi
}
exec_if_exists_or_fail( ) {
[ [ $( type -t $1 ) = = function ] ] && " $@ "
}
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
# Now get the search name from the first remaining positional parameter
SearchName = " ${ 1 :- } "
2024-11-16 18:24:58 +00:00
# Self-update functions
2023-03-04 19:56:26 +01:00
self_update_curl( ) {
cp " $ScriptPath " " $ScriptPath " .bak
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
if command -v curl & >/dev/null; then
curl -L " $RawUrl " > " $ScriptPath "
chmod +x " $ScriptPath "
2024-01-31 21:33:14 +01:00
printf "\n%s\n" "--- starting over with the updated version ---"
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
exec " $ScriptPath " " ${ ScriptArgs [@] } "
exit 1
elif command -v wget & >/dev/null; then
wget " $RawUrl " -O " $ScriptPath "
chmod +x " $ScriptPath "
2024-01-31 21:33:14 +01:00
printf "\n%s\n" "--- starting over with the updated version ---"
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
exec " $ScriptPath " " ${ ScriptArgs [@] } "
exit 1
2023-03-04 19:56:26 +01:00
else
2024-04-22 21:02:13 +02:00
printf "curl/wget not available - download the update manually: %s \n" " $Github "
2023-03-04 19:56:26 +01:00
fi
}
2024-01-31 21:33:14 +01:00
self_update( ) {
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
cd " $ScriptWorkDir " || { printf "Path error, skipping update.\n" ; return ; }
if command -v git & >/dev/null && [ [ " $( git ls-remote --get-url 2>/dev/null) " = ~ .*"sudo-kraken/podcheck" .* ] ] ; then
2024-01-31 21:33:14 +01:00
printf "\n%s\n" "Pulling the latest version."
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
git pull --force || { printf "Git error, manually pull/clone.\n" ; return ; }
2024-01-31 21:33:14 +01:00
printf "\n%s\n" "--- starting over with the updated version ---"
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
cd - || { printf "Path error.\n" ; return ; }
exec " $ScriptPath " " ${ ScriptArgs [@] } "
exit 1
2024-01-31 21:33:14 +01:00
else
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
cd - || { printf "Path error.\n" ; return ; }
2024-01-31 21:33:14 +01:00
self_update_curl
2023-03-04 19:56:26 +01:00
fi
2023-03-05 14:08:56 +01:00
}
choosecontainers( ) {
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
while [ [ -z " ${ ChoiceClean :- } " ] ] ; do
2023-03-05 14:08:56 +01:00
read -r -p "Enter number(s) separated by comma, [a] for all - [q] to quit: " Choice
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
if [ [ " $Choice " = ~ [ qQnN] ] ] ; then
2023-03-05 14:08:56 +01:00
exit 0
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
elif [ [ " $Choice " = ~ [ aAyY] ] ] ; then
2023-03-05 14:08:56 +01:00
SelectedUpdates = ( " ${ GotUpdates [@] } " )
ChoiceClean = ${ Choice //[,. : ;]/ }
else
ChoiceClean = ${ Choice //[,. : ;]/ }
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
for CC in $ChoiceClean ; do
if [ [ " $CC " -lt 1 || " $CC " -gt $UpdCount ] ] ; then
echo " Number not in list: $CC "
unset ChoiceClean
break 1
2023-03-05 14:08:56 +01:00
else
SelectedUpdates += ( " ${ GotUpdates [ $CC -1] } " )
fi
done
fi
done
printf "\nUpdating containers:\n"
printf "%s\n" " ${ SelectedUpdates [@] } "
printf "\n"
}
2025-09-16 09:40:30 +01:00
# Function to add user-provided urls to releasenotes
releasenotes( ) {
unset Updates
for update in " ${ GotUpdates [@] } " ; do
found = false
while read -r container url; do
if [ [ " $update " = = " $container " ] ] && [ [ " $PrintMarkdownURL " = = true ] ] ; then
Updates += ( " - [ $update ]( $url ) " ) ; found = true;
elif [ [ " $update " = = " $container " ] ] ; then
Updates += ( " $update -> $url " ) ; found = true;
fi
done < " ${ ScriptWorkDir } /urls.list "
if [ [ " $found " = = false ] ] && [ [ " $PrintMarkdownURL " = = true ] ] ; then
Updates += ( " - $update -> url missing " ) ;
elif [ [ " $found " = = false ] ] ; then
Updates += ( " $update -> url missing " ) ;
else
continue ;
fi
done
}
# Numbered List function
# if urls.list exists add release note url per line
list_options( ) {
num = 1
for update in " ${ Updates [@] } " ; do
echo " $num ) $update "
( ( num++) )
done
2023-12-13 19:50:58 +01:00
}
2024-01-17 20:26:18 +01:00
progress_bar( ) {
QueCurrent = " $1 "
QueTotal = " $2 "
2025-09-16 09:40:30 +01:00
BarWidth = ${ BarWidth :- 50 }
2024-02-01 20:19:04 +01:00
( ( Percent = 100*QueCurrent/QueTotal) )
2025-09-16 09:40:30 +01:00
( ( Complete = BarWidth*Percent/100) )
( ( Left = BarWidth-Complete) ) || true # to not throw error when result is 0
2024-01-17 20:26:18 +01:00
BarComplete = $( printf " % ${ Complete } s " | tr " " "#" )
BarLeft = $( printf " % ${ Left } s " | tr " " "-" )
2025-09-16 09:40:30 +01:00
if [ [ " $QueTotal " != " $QueCurrent " ] ] ; then
printf "\r[%s%s] %s/%s " " $BarComplete " " $BarLeft " " $QueCurrent " " $QueTotal "
else
printf "\r[%b%s%b] %s/%s \n" " $c_teal " " $BarComplete " " $c_reset " " $QueCurrent " " $QueTotal "
fi
}
datecheck( ) {
ImageDate = $( " $regbin " -v error image inspect " $RepoUrl " --format= '{{.Created}}' | cut -d" " -f1)
ImageEpoch = $( date -d " $ImageDate " +%s 2>/dev/null) || ImageEpoch = $( date -f "%Y-%m-%d" -j " $ImageDate " +%s)
ImageAge = $(( ( $( date +%s) - ImageEpoch ) / 86400 ))
if [ [ " $ImageAge " -gt " $DaysOld " ] ] ; then
return 0
else
return 1
fi
2024-01-17 20:26:18 +01:00
}
2023-12-13 19:50:58 +01:00
2025-09-16 09:40:30 +01:00
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
t_out = $( command -v timeout 2>/dev/null || echo "" )
if [ [ -n " $t_out " ] ] ; then
t_out = $( realpath " $t_out " 2>/dev/null || readlink -f " $t_out " )
if [ [ " $t_out " = ~ "busybox" ] ] ; then
t_out = " timeout ${ Timeout } "
else
t_out = " timeout --foreground ${ Timeout } "
fi
else
t_out = ""
fi
2024-11-25 14:05:30 +01:00
binary_downloader( ) {
BinaryName = " $1 "
BinaryUrl = " $2 "
case " $( uname --machine) " in
x86_64| amd64) architecture = "amd64" ; ;
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
arm64| aarch64) architecture = "arm64" ; ;
*) printf "\n%bArchitecture not supported, exiting.%b\n" " $c_red " " $c_reset " ; exit 1 ; ;
2024-11-25 14:05:30 +01:00
esac
GetUrl = " ${ BinaryUrl /TEMP/ " $architecture " } "
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
if command -v curl & >/dev/null; then
curl -L " $GetUrl " > " $ScriptWorkDir / $BinaryName "
elif command -v wget & >/dev/null; then
wget " $GetUrl " -O " $ScriptWorkDir / $BinaryName "
else
printf "%s\n" " curl/wget not available - get $BinaryName manually from the repo link, exiting. "
exit 1
2024-11-25 14:05:30 +01:00
fi
[ [ -f " $ScriptWorkDir / $BinaryName " ] ] && chmod +x " $ScriptWorkDir / $BinaryName "
}
distro_checker( ) {
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
if [ [ -f /etc/arch-release ] ] ; then
PkgInstaller = "pacman -S"
elif [ [ -f /etc/redhat-release ] ] ; then
PkgInstaller = "dnf install"
elif [ [ -f /etc/SuSE-release ] ] ; then
PkgInstaller = "zypper install"
elif [ [ -f /etc/debian_version ] ] ; then
PkgInstaller = "apt-get install"
else
PkgInstaller = "ERROR"
printf "\n%bNo distribution could be determined%b, falling back to static binary.\n" " $c_yellow " " $c_reset "
2024-11-25 14:05:30 +01:00
fi
}
2025-09-16 09:40:30 +01:00
# Static binary downloader for dependencies
binary_downloader( ) {
BinaryName = " $1 "
BinaryUrl = " $2 "
case " $( uname -m) " in
x86_64| amd64) architecture = "amd64" ; ;
arm64| aarch64) architecture = "arm64" ; ;
*) printf "\n%bArchitecture not supported, exiting.%b\n" " $c_red " " $c_reset " ; exit 1; ;
esac
GetUrl = " ${ BinaryUrl /TEMP/ " $architecture " } "
if command -v curl & >/dev/null; then
curl ${ CurlArgs } -L " $GetUrl " > " $ScriptWorkDir / $BinaryName " || { printf "ERROR: Failed to curl binary dependency. Rerun the script to retry.\n" ; exit 1; }
elif command -v wget & >/dev/null; then
wget --waitretry= 1 --timeout= 15 -t 10 " $GetUrl " -O " $ScriptWorkDir / $BinaryName " ;
else
printf "\n%bcurl/wget not available - get %s manually from the repo link, exiting.%b" " $c_red " " $BinaryName " " $c_reset " ; exit 1;
2024-11-25 14:05:30 +01:00
fi
2025-09-16 09:40:30 +01:00
[ [ -f " $ScriptWorkDir / $BinaryName " ] ] && chmod +x " $ScriptWorkDir / $BinaryName "
}
2024-11-25 14:05:30 +01:00
2025-09-16 09:40:30 +01:00
distro_checker( ) {
isRoot = false
[ [ ${ EUID :- } = = 0 ] ] && isRoot = true
if [ [ -f /etc/alpine-release ] ] ; then
[ [ " $isRoot " = = true ] ] && PkgInstaller = "apk add" || PkgInstaller = "doas apk add"
elif [ [ -f /etc/arch-release ] ] ; then
[ [ " $isRoot " = = true ] ] && PkgInstaller = "pacman -S" || PkgInstaller = "sudo pacman -S"
elif [ [ -f /etc/debian_version ] ] ; then
[ [ " $isRoot " = = true ] ] && PkgInstaller = "apt-get install" || PkgInstaller = "sudo apt-get install"
elif [ [ -f /etc/redhat-release ] ] ; then
[ [ " $isRoot " = = true ] ] && PkgInstaller = "dnf install" || PkgInstaller = "sudo dnf install"
elif [ [ -f /etc/SuSE-release ] ] ; then
[ [ " $isRoot " = = true ] ] && PkgInstaller = "zypper install" || PkgInstaller = "sudo zypper install"
elif [ [ $( uname -s) = = "Darwin" ] ] ; then
PkgInstaller = "brew install"
else
PkgInstaller = "ERROR" ; printf "\n%bNo distribution could be determined%b, falling back to static binary.\n" " $c_yellow " " $c_reset "
fi
}
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
2025-09-16 09:40:30 +01:00
# Dependency check + installer function
dependency_check( ) {
AppName = " $1 "
AppVar = " $2 "
AppUrl = " $3 "
if command -v " $AppName " & >/dev/null; then
export " $AppVar " = " $AppName " ;
elif [ [ -f " $ScriptWorkDir / $AppName " ] ] ; then
export " $AppVar " = " $ScriptWorkDir / $AppName " ;
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
else
2025-09-16 09:40:30 +01:00
printf "\nRequired dependency %b'%s'%b missing, do you want to install it?\n" " $c_teal " " $AppName " " $c_reset "
read -r -p "y: With packagemanager (sudo). / s: Download static binary. y/s/[n] " GetBin
GetBin = ${ GetBin :- no } # set default to no if nothing is given
if [ [ " $GetBin " = ~ [ yYsS] ] ] ; then
[ [ " $GetBin " = ~ [ yY] ] ] && distro_checker
if [ [ -n " ${ PkgInstaller :- } " && " ${ PkgInstaller :- } " != "ERROR" ] ] ; then
[ [ $( uname -s) = = "Darwin" && " $AppName " = = "regctl" ] ] && AppName = "regclient"
if $PkgInstaller " $AppName " ; then
AppName = " $1 "
export " $AppVar " = " $AppName "
printf "\n%b%b installed.%b\n" " $c_green " " $AppName " " $c_reset "
else
PkgInstaller = "ERROR"
printf "\n%bPackagemanager install failed%b, falling back to static binary.\n" " $c_yellow " " $c_reset "
fi
fi
if [ [ " $GetBin " = ~ [ sS] ] ] || [ [ " $PkgInstaller " = = "ERROR" ] ] ; then
binary_downloader " $AppName " " $AppUrl "
[ [ -f " $ScriptWorkDir / $AppName " ] ] && { export " $AppVar " = " $ScriptWorkDir / $1 " && printf "\n%b%s downloaded.%b\n" " $c_green " " $AppName " " $c_reset " ; }
fi
else
printf "\n%bDependency missing, exiting.%b\n" " $c_red " " $c_reset " ; exit 1;
fi
2023-02-09 12:03:27 +00:00
fi
2025-09-16 09:40:30 +01:00
# Final check if binary is correct
[ [ " $1 " = = "jq" ] ] && VerFlag = "--version"
[ [ " $1 " = = "regctl" ] ] && VerFlag = "version"
${ !AppVar } " $VerFlag " & > /dev/null || { printf "%s\n" " $AppName is not working - try to remove it and re-download it, exiting. " ; exit 1; }
}
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
2025-09-16 09:40:30 +01:00
# Use the new dependency management system
dependency_check "regctl" "regbin" "https://github.com/regclient/regclient/releases/latest/download/regctl-linux-TEMP"
dependency_check "jq" "jqbin" "https://github.com/jqlang/jq/releases/latest/download/jq-linux-TEMP"
2023-02-15 13:16:31 +01:00
2025-09-16 09:52:04 +01:00
# Version check & initiate self update
if [ [ " $LatestRelease " != "undefined" ] ] ; then
if [ [ " $VERSION " != " $LatestRelease " ] ] ; then
printf "New version available! %b%s%b ⇒ %b%s%b \n Change Notes: %s \n" " $c_yellow " " $VERSION " " $c_reset " " $c_green " " $LatestRelease " " $c_reset " " $LatestChanges "
if [ [ " $AutoMode " = = false ] ] ; then
read -r -p "Would you like to update? y/[n]: " SelfUpdate
[ [ " $SelfUpdate " = ~ [ yY] ] ] && self_update
elif [ [ " $AutoMode " = = true ] ] && [ [ " $AutoSelfUpdate " = = true ] ] ; then
self_update;
else
[ [ " $Notify " = = true ] ] && { exec_if_exists_or_fail podcheck_notification " $VERSION " " $LatestRelease " " $LatestChanges " || printf "Could not source notification function.\n" ; }
fi
fi
else
printf "ERROR: Failed to curl latest Podcheck.sh release version.\n"
fi
# Version check for notify templates
[ [ " $Notify " = = true ] ] && [ [ ! -s " ${ ScriptWorkDir } /notify.sh " ] ] && { exec_if_exists_or_fail notify_update_notification || printf "Could not source notify notification function.\n" ; }
2024-11-16 18:24:58 +00:00
# Check podman compose binary
2025-09-16 09:52:04 +01:00
podman info & >/dev/null || { printf "\n%bYour current user does not have permissions to the podman socket - may require root / podman group. Exiting.%b\n" " $c_red " " $c_reset " ; exit 1; }
if podman compose version & >/dev/null; then
PodmanBin = "podman compose" ;
elif podman-compose version & >/dev/null; then
PodmanBin = "podman-compose" ;
elif podman -v & >/dev/null; then
printf "%s\n" "No podman compose binary available, using plain podman (Not recommended!)"
printf "%s\n" "'podman run' will ONLY update images, not the container itself."
2023-02-09 12:03:27 +00:00
else
2024-11-16 18:24:58 +00:00
printf "%s\n" "No podman binaries available, exiting."
2023-02-15 13:16:31 +01:00
exit 1
2023-02-09 12:03:27 +00:00
fi
2023-01-30 10:08:13 +01:00
2025-09-16 09:52:04 +01:00
# Listing typed exclusions
if [ [ -n ${ Excludes [*] :- } ] ] ; then
printf "\n%bExcluding these names:%b\n" " $c_blue " " $c_reset "
printf "%s\n" " ${ Excludes [@] } "
printf "\n"
fi
2023-01-30 10:08:13 +01:00
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
if [ [ -n " ${ Excludes [*] } " ] ] ; then
2024-02-01 20:19:04 +01:00
printf "\n%bExcluding these names:%b\n" " $c_blue " " $c_reset "
2023-06-21 20:09:31 +02:00
printf "%s\n" " ${ Excludes [@] } "
printf "\n"
fi
2024-11-19 21:01:39 +01:00
ContCount = $( podman ps $Stopped --filter " name= $SearchName " --format '{{.Names}}' | wc -l)
2024-01-17 20:26:18 +01:00
RegCheckQue = 0
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
start_time = $( date +%s)
2024-01-17 20:26:18 +01:00
2025-02-25 17:01:05 +00:00
printf "\n%bStarting container update check%b\n" " $c_blue " " $c_reset "
2025-02-25 16:32:34 +00:00
2025-09-16 09:52:04 +01:00
# Testing and setting timeout binary
t_out = $( command -v timeout || echo "" )
if [ [ $t_out ] ] ; then
t_out = $( realpath " $t_out " 2>/dev/null || readlink -f " $t_out " )
if [ [ $t_out = ~ "busybox" ] ] ; then
t_out = " timeout ${ Timeout } "
else
t_out = " timeout --foreground ${ Timeout } "
fi
else
t_out = ""
fi
check_image( ) {
i = " $1 "
local Excludes = ( $Excludes_string )
for e in " ${ Excludes [@] } " ; do
if [ [ " $i " = = " $e " ] ] ; then
printf "%s\n" " Skip $i "
return
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
fi
done
2025-09-16 09:52:04 +01:00
# Skipping non-compose containers unless option is set
ContLabels = $( podman inspect " $i " --format '{{json .Config.Labels}}' )
ContPath = $( $jqbin -r '."com.docker.compose.project.working_dir"' <<< " $ContLabels " )
[ [ " $ContPath " = = "null" ] ] && ContPath = ""
if [ [ -z " $ContPath " ] ] && [ [ " $DRunUp " = = false ] ] ; then
printf "%s\n" " NoUpdates ! $i - not checked, no compose file "
return
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
fi
2025-09-16 09:52:04 +01:00
local NoUpdates GotUpdates GotErrors
ImageId = $( podman inspect " $i " --format= '{{.Image}}' )
RepoUrl = $( podman inspect " $i " --format= '{{.Config.Image}}' )
LocalHash = $( podman image inspect " $ImageId " --format '{{.RepoDigests}}' )
# Checking for errors while setting the variable
if RegHash = $( $t_out " $regbin " -v error image digest --list " $RepoUrl " 2>& 1) ; then
if [ [ " $LocalHash " = = *" $RegHash " * ] ] ; then
printf "%s\n" " NoUpdates $i "
else
if [ [ -n " ${ DaysOld :- } " ] ] && ! datecheck; then
printf "%s\n" " NoUpdates + $i ${ ImageAge } d "
2024-08-17 08:50:39 -04:00
else
2025-09-16 09:52:04 +01:00
printf "%s\n" " GotUpdates $i "
2023-12-13 19:50:58 +01:00
fi
fi
2023-02-09 12:03:27 +00:00
else
2025-09-16 09:52:04 +01:00
printf "%s\n" " GotErrors $i - ${ RegHash } " # Reghash contains an error code here
2023-02-09 12:03:27 +00:00
fi
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
}
2025-09-16 09:52:04 +01:00
# Make required functions and variables available to subprocesses
export -f check_image datecheck
export Excludes_string = " ${ Excludes [*] :- } " # Can only export scalar variables
export t_out regbin RepoUrl DaysOld DRunUp jqbin
2023-01-18 11:50:00 +01:00
2025-09-16 09:52:04 +01:00
# Check for POSIX xargs with -P option, fallback without async
if ( echo "test" | xargs -P 2 >/dev/null 2>& 1) && [ [ " $MaxAsync " != 0 ] ] ; then
XargsAsync = " -P $MaxAsync "
else
XargsAsync = ""
[ [ " $MaxAsync " != 0 ] ] && printf "%bMissing POSIX xargs, consider installing 'findutils' for asynchronous lookups.%b\n" " $c_yellow " " $c_reset "
fi
# Variables for progress_bar function
ContCount = $( podman ps $Stopped --filter " name= $SearchName " --format '{{.Names}}' | wc -l)
RegCheckQue = 0
# Asynchronously check the image-hash of every running container VS the registry
while read -r line; do
( ( RegCheckQue += 1) )
if [ [ " $MonoMode " = = false ] ] ; then progress_bar " $RegCheckQue " " $ContCount " ; fi
Got = ${ line %% * } # Extracts the first word (NoUpdates, GotUpdates, GotErrors)
item = ${ line #* }
case " $Got " in
NoUpdates) NoUpdates += ( " $item " ) ; ;
GotUpdates) GotUpdates += ( " $item " ) ; ;
GotErrors) GotErrors += ( " $item " ) ; ;
Skip) ; ;
*) echo " Error! Unexpected output from subprocess: ${ line } " ; ;
esac
done < <( \
podman ps $Stopped --filter " name= $SearchName " --format '{{.Names}}' | \
xargs $XargsAsync -I { } bash -c 'check_image "{}"' \
)
# Sort arrays alphabetically
2024-06-12 20:50:10 +02:00
IFS = $'\n'
2025-09-16 09:52:04 +01:00
NoUpdates = ( $( sort <<< " ${ NoUpdates [*] :- } " ) )
GotUpdates = ( $( sort <<< " ${ GotUpdates [*] :- } " ) )
2024-06-12 20:50:10 +02:00
unset IFS
2025-09-16 09:52:04 +01:00
# Run the prometheus exporter function
if [ [ -n " ${ CollectorTextFileDirectory :- } " ] ] ; then
exec_if_exists_or_fail prometheus_exporter ${# NoUpdates [@] } ${# GotUpdates [@] } ${# GotErrors [@] } || printf "%s\n" "Could not source prometheus exporter function."
fi
# Define how many updates are available
UpdCount = " ${# GotUpdates [@] } "
# List what containers got updates or not
if [ [ -n ${ NoUpdates [*] :- } ] ] ; then
2023-12-19 20:24:34 +01:00
printf "\n%bContainers on latest version:%b\n" " $c_green " " $c_reset "
2023-01-18 11:50:00 +01:00
printf "%s\n" " ${ NoUpdates [@] } "
fi
2025-09-16 09:52:04 +01:00
if [ [ -n ${ GotErrors [*] :- } ] ] ; then
printf "\n%bContainers with errors, won't get updated:%b\n" " $c_red " " $c_reset "
2023-01-20 12:47:17 +01:00
printf "%s\n" " ${ GotErrors [@] } "
2024-04-22 21:02:13 +02:00
printf "%binfo:%b 'unauthorized' often means not found in a public registry.\n" " $c_blue " " $c_reset "
2023-01-20 12:47:17 +01:00
fi
2025-09-16 09:52:04 +01:00
if [ [ -n ${ GotUpdates [*] :- } ] ] ; then
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
printf "\n%bContainers with updates available:%b\n" " $c_yellow " " $c_reset "
2025-09-16 09:52:04 +01:00
if [ [ -s " $ScriptWorkDir /urls.list " ] ] && [ [ " $PrintReleaseURL " = = true ] ] ; then
releasenotes;
else
Updates = ( " ${ GotUpdates [@] } " ) ;
fi
[ [ " $AutoMode " = = false ] ] && list_options || printf "%s\n" " ${ Updates [@] } "
[ [ " $Notify " = = true ] ] && { exec_if_exists_or_fail send_notification " ${ GotUpdates [@] } " || printf "\nCould not source notification function.\n" ; }
else
[ [ " $Notify " = = true ] ] && [ [ ! -s " ${ ScriptWorkDir } /notify.sh " ] ] && { exec_if_exists_or_fail send_notification " ${ GotUpdates [@] } " || printf "\nCould not source notification function.\n" ; }
2023-01-30 10:08:13 +01:00
fi
2023-01-18 11:50:00 +01:00
2025-09-16 09:52:04 +01:00
# Optionally get updates if there's any
if [ [ -n " ${ GotUpdates :- } " ] ] ; then
if [ [ " $AutoMode " = = false ] ] ; then
printf "\n%bChoose what containers to update.%b\n" " $c_teal " " $c_reset "
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
choosecontainers
2025-09-16 09:52:04 +01:00
else
SelectedUpdates = ( " ${ GotUpdates [@] } " )
2023-01-30 10:08:13 +01:00
fi
2025-09-16 09:52:04 +01:00
if [ [ " $DontUpdate " = = false ] ] ; then
printf "\n%bUpdating container(s):%b\n" " $c_blue " " $c_reset "
printf "%s\n" " ${ SelectedUpdates [@] } "
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
2023-06-27 19:34:20 +02:00
NumberofUpdates = " ${# SelectedUpdates [@] } "
2025-09-16 09:52:04 +01:00
CurrentQue = 0
for i in " ${ SelectedUpdates [@] } " ; do
( ( CurrentQue += 1) )
printf "\n%bNow updating (%s/%s): %b%s%b\n" " $c_teal " " $CurrentQue " " $NumberofUpdates " " $c_blue " " $i " " $c_reset "
ContLabels = $( podman inspect " $i " --format '{{json .Config.Labels}}' )
ContImage = $( podman inspect " $i " --format= '{{.Config.Image}}' )
ContPath = $( $jqbin -r '."com.docker.compose.project.working_dir"' <<< " $ContLabels " )
[ [ " $ContPath " = = "null" ] ] && ContPath = ""
ContUpdateLabel = $( $jqbin -r '."mag37.dockcheck.update"' <<< " $ContLabels " )
[ [ " $ContUpdateLabel " = = "null" ] ] && ContUpdateLabel = ""
# Checking if Label Only -option is set, and if container got the label
[ [ " $OnlyLabel " = = true ] ] && { [ [ " $ContUpdateLabel " != true ] ] && { echo "No update label, skipping." ; continue ; } }
# Checking if compose-values are empty - hence started with podman run
if [ [ -z " $ContPath " ] ] ; then
if [ [ " $DRunUp " = = true ] ] ; then
podman pull " $ContImage "
printf "%s\n" " $i got a new image downloaded, rebuild manually with preferred 'podman run'-parameters "
else
printf "\n%b%s%b has no compose labels, probably started with podman run - %bskipping%b\n\n" " $c_yellow " " $i " " $c_reset " " $c_yellow " " $c_reset "
fi
continue
fi
podman pull " $ContImage " || { printf "\n%bPodman error, exiting!%b\n" " $c_red " " $c_reset " ; exit 1; }
done
printf "\n%bDone pulling updates. %bRecreating updated containers.%b\n" " $c_green " " $c_blue " " $c_reset "
2023-06-27 19:34:20 +02:00
CurrentQue = 0
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
for i in " ${ SelectedUpdates [@] } " ; do
2023-06-27 19:34:20 +02:00
( ( CurrentQue += 1) )
2023-03-01 20:39:02 +01:00
unset CompleteConfs
2025-09-16 09:52:04 +01:00
# Extract labels and metadata
2024-11-16 18:24:58 +00:00
ContLabels = $( podman inspect " $i " --format '{{json .Config.Labels}}' )
2025-09-16 09:52:04 +01:00
ContImage = $( podman inspect " $i " --format= '{{.Config.Image}}' )
2024-11-25 14:05:30 +01:00
ContPath = $( $jqbin -r '."com.docker.compose.project.working_dir"' <<< " $ContLabels " )
2025-09-16 09:52:04 +01:00
[ [ " $ContPath " = = "null" ] ] && ContPath = ""
2024-11-25 14:05:30 +01:00
ContConfigFile = $( $jqbin -r '."com.docker.compose.project.config_files"' <<< " $ContLabels " )
2025-09-16 09:52:04 +01:00
[ [ " $ContConfigFile " = = "null" ] ] && ContConfigFile = ""
ContName = $( $jqbin -r '."com.docker.compose.service"' <<< " $ContLabels " )
[ [ " $ContName " = = "null" ] ] && ContName = ""
ContEnv = $( $jqbin -r '."com.docker.compose.project.environment_file"' <<< " $ContLabels " )
[ [ " $ContEnv " = = "null" ] ] && ContEnv = ""
ContUpdateLabel = $( $jqbin -r '."mag37.dockcheck.update"' <<< " $ContLabels " )
[ [ " $ContUpdateLabel " = = "null" ] ] && ContUpdateLabel = ""
ContRestartStack = $( $jqbin -r '."mag37.dockcheck.restart-stack"' <<< " $ContLabels " )
[ [ " $ContRestartStack " = = "null" ] ] && ContRestartStack = ""
ContOnlySpecific = $( $jqbin -r '."mag37.dockcheck.only-specific-container"' <<< " $ContLabels " )
[ [ " $ContOnlySpecific " = = "null" ] ] && ContRestartStack = ""
printf "\n%bNow recreating (%s/%s): %b%s%b\n" " $c_teal " " $CurrentQue " " $NumberofUpdates " " $c_blue " " $i " " $c_reset "
# Checking if compose-values are empty - hence started with podman run
[ [ -z " $ContPath " ] ] && { echo "Not a compose container, skipping." ; continue ; }
# Checking if Label Only -option is set, and if container got the label
[ [ " $OnlyLabel " = = true ] ] && { [ [ " $ContUpdateLabel " != true ] ] && { echo "No update label, skipping." ; continue ; } }
# cd to the compose-file directory to account for people who use relative volumes
cd " $ContPath " || { printf "\n%bPath error - skipping%b %s" " $c_red " " $c_reset " " $i " ; continue ; }
## Reformatting path + multi compose
if [ [ $ContConfigFile = = '/' * ] ] ; then
CompleteConfs = $( for conf in ${ ContConfigFile //,/ } ; do printf -- "-f %s " " $conf " ; done )
else
CompleteConfs = $( for conf in ${ ContConfigFile //,/ } ; do printf -- "-f %s/%s " " $ContPath " " $conf " ; done )
fi
# Check if the container got an environment file set and reformat it
ContEnvs = ""
if [ [ -n " $ContEnv " ] ] ; then
ContEnvs = $( for env in ${ ContEnv //,/ } ; do printf -- "--env-file %s " " $env " ; done ) ;
fi
# Set variable when compose up should only target the specific container, not the stack
if [ [ $OnlySpecific = = true ] ] || [ [ $ContOnlySpecific = = true ] ] ; then
SpecificContainer = " $ContName " ;
fi
# Check if the whole stack should be restarted
if [ [ " $ContRestartStack " = = true ] ] || [ [ " $ForceRestartStacks " = = true ] ] ; then
${ PodmanBin } ${ CompleteConfs } stop; ${ PodmanBin } ${ CompleteConfs } ${ ContEnvs } up -d || { printf "\n%bPodman error, exiting!%b\n" " $c_red " " $c_reset " ; exit 1; }
else
${ PodmanBin } ${ CompleteConfs } ${ ContEnvs } up -d ${ SpecificContainer } || { printf "\n%bPodman error, exiting!%b\n" " $c_red " " $c_reset " ; exit 1; }
fi
done
if [ [ " $AutoPrune " = = false ] ] && [ [ " $AutoMode " = = false ] ] ; then
printf "\n" ; read -rep "Would you like to prune dangling images? y/[n]: " AutoPrune;
fi
if [ [ " $AutoPrune " = = true ] ] || [ [ " $AutoPrune " = ~ [ yY] ] ] ; then
printf "\nAuto pruning.." ; podman image prune -f;
fi
printf "\n%bAll done!%b\n" " $c_green " " $c_reset "
else
printf "\nNo updates installed, exiting.\n"
fi
else
printf "\nNo updates available, exiting.\n"
fi
exit 0
2024-11-25 14:05:30 +01:00
ContName = $( $jqbin -r '."com.docker.compose.service"' <<< " $ContLabels " )
2024-11-16 18:24:58 +00:00
[ " $ContName " = = "null" ] && ContName = ""
2024-11-25 14:05:30 +01:00
ContEnv = $( $jqbin -r '."com.docker.compose.project.environment_file"' <<< " $ContLabels " )
2024-11-16 18:24:58 +00:00
[ " $ContEnv " = = "null" ] && ContEnv = ""
2024-11-25 14:05:30 +01:00
ContUpdateLabel = $( $jqbin -r '."sudo-kraken.podcheck.update"' <<< " $ContLabels " )
2024-11-16 18:24:58 +00:00
[ " $ContUpdateLabel " = = "null" ] && ContUpdateLabel = ""
2024-11-25 14:05:30 +01:00
ContRestartStack = $( $jqbin -r '."sudo-kraken.podcheck.restart-stack"' <<< " $ContLabels " )
2024-11-16 18:24:58 +00:00
[ " $ContRestartStack " = = "null" ] && ContRestartStack = ""
2025-02-25 17:01:05 +00:00
# Add spacing and colors to systemd unit detection
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
if [ -z " $ContPath " ] ; then
2025-02-25 17:01:05 +00:00
printf "\n%bChecking systemd units for container: %s%b\n\n" \
" $c_teal " " $i " " $c_reset "
2025-02-25 16:32:34 +00:00
2025-02-25 17:01:05 +00:00
unit = $( podman inspect " $i " --format '{{.Config.Labels.PODMAN_SYSTEMD_UNIT}}' )
if [ -n " $unit " ] ; then
printf "%bDetected Quadlet-managed container: %s (unit: %s)%b\n\n" \
" $c_green " " $i " " $unit " " $c_reset "
printf "%bPulling new image...%b\n\n" " $c_teal " " $c_reset "
if podman pull " $ContImage " ; then
printf "\n%bSuccessfully pulled new image%b\n\n" " $c_green " " $c_reset "
else
printf "\n%bFailed to pull image for %s%b\n\n" " $c_red " " $i " " $c_reset "
continue
2025-02-25 16:32:34 +00:00
fi
2025-02-25 17:01:05 +00:00
printf "%bAttempting to restart unit...%b\n\n" " $c_teal " " $c_reset "
if timeout 60 systemctl --user restart " $unit " ; then
printf "\n%bQuadlet container %s updated and restarted (user scope)%b\n\n" \
" $c_green " " $i " " $c_reset "
else
printf "\n%bFailed to restart unit %s%b\n" " $c_red " " $unit " " $c_reset "
systemctl --user status " $unit "
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
fi
fi
2025-02-25 17:01:05 +00:00
continue
fi
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
cd " $ContPath " || { echo " Path error - skipping $i " ; continue ; }
if [ [ $ContConfigFile = /* ] ] ; then
CompleteConfs = $( for conf in ${ ContConfigFile //,/ } ; do printf -- "-f %s " " $conf " ; done )
2023-02-09 12:00:29 +00:00
else
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
CompleteConfs = $( for conf in ${ ContConfigFile //,/ } ; do printf -- "-f %s/%s " " $ContPath " " $conf " ; done )
2023-02-09 12:00:29 +00:00
fi
2023-12-19 20:24:34 +01:00
printf "\n%bNow updating (%s/%s): %b%s%b\n" " $c_teal " " $CurrentQue " " $NumberofUpdates " " $c_blue " " $i " " $c_reset "
2025-02-25 16:32:34 +00:00
echo " Processing update for container: $i "
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
[ [ " $OnlyLabel " = = true ] ] && { [ [ " $ContUpdateLabel " != "true" ] ] && { echo "No update label, skipping." ; continue ; } }
2024-11-16 18:24:58 +00:00
podman pull " $ContImage "
2025-02-25 16:32:34 +00:00
ContEnvs = ""
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
if [ -n " $ContEnv " ] ; then
ContEnvs = $( for env in ${ ContEnv //,/ } ; do printf -- "--env-file %s " " $env " ; done )
fi
if [ [ " $ContRestartStack " = = "true" ] ] || [ [ " $ForceRestartPods " = = true ] ] ; then
2025-09-16 09:52:04 +01:00
${ PodmanBin } ${ CompleteConfs } down
${ PodmanBin } ${ CompleteConfs } ${ ContEnvs } up -d
2023-02-19 14:21:22 +01:00
else
2025-09-16 09:52:04 +01:00
${ PodmanBin } ${ CompleteConfs } ${ ContEnvs } up -d ${ ContName }
2023-02-19 14:21:22 +01:00
fi
2023-01-30 10:08:13 +01:00
done
2025-09-16 09:52:04 +01:00
if [ [ " $AutoPrune " = = false ] ] && [ [ " $AutoMode " = = false ] ] ; then
printf "\n" ; read -rep "Would you like to prune dangling images? y/[n]: " AutoPrune;
Upstream patches and additional patching (#2)
* Ensures DSM GUI refreshes its updates
* Removed whale icon and changed verbosity
* Added addon for Prometheus+node_exporter
* Changed local image check to check on image ID rather than name
* Update podcheck.sh
changed docker->podman, typo
* - **v0.6.0**:
- **Grafana & Prometheus Integration:**
- Added a detailed Prometheus metrics exporter that now reports not only the number of containers with updates, no-updates, and errors, but also the total number of containers checked, the duration of the update check, and the epoch timestamp of the last check.
- Enhanced documentation with instructions on integrating these metrics with Grafana for visual monitoring.
- **Improved Error Handling & Code Refactoring:**
- Introduced `set -euo pipefail` and local variable scoping within functions to improve reliability and prevent unexpected behaviour.
- Standardised container name handling and refined the Quadlet detection logic.
- **Self-Update Enhancements:**
- Updated the self-update mechanism to support both Git-based and HTTP-based updates, with an automatic restart that preserves the original arguments.
- **Miscellaneous Improvements:**
- Enhanced dependency installer to support both package manager and static binary installations for `jq` and `regctl`.
- General code refactoring across the project for better readability and maintainability.
* Update podcheck.sh
* increment version
* Update Quadlet detection logic
Update Quadlet detection logic to support flexible service naming
- Modified the quadlet update block to first try an exact match for "$i.service".
- If no exact match is found, build a regex pattern from the container name (allowing underscores and hyphens interchangeably) and search user service units.
- When multiple candidate units are found, the script attempts to choose the one that exactly matches (ignoring case) or defaults to the first candidate.
- This update allows containers like "containera" to match service units named "container_a.service" and supports scenarios with multiple counterparts (e.g., matrix-a, matrix-b, matrix_db).
* search name fix
* fixes to arg parsing
* Logic overhaul, verbose output and better syntax
* Added support for prometheus
---------
Co-authored-by: mag37 <robin.ivehult@gmail.com>
2025-02-25 14:12:01 +00:00
fi
2025-09-16 09:52:04 +01:00
if [ [ " $AutoPrune " = = true ] ] || [ [ " $AutoPrune " = ~ [ yY] ] ] ; then
printf "\nAuto pruning.." ; podman image prune -f;
2025-02-25 16:32:34 +00:00
fi
2025-09-16 09:52:04 +01:00
printf "\n%bAll done!%b\n" " $c_green " " $c_reset "
2023-01-30 10:08:13 +01:00
else
printf "\nNo updates installed, exiting.\n"
2023-01-20 11:52:47 +01:00
fi
2023-01-18 11:50:00 +01:00
else
2023-01-18 21:45:31 +01:00
printf "\nNo updates available, exiting.\n"
2023-01-18 11:50:00 +01:00
fi
2023-01-30 10:08:13 +01:00
exit 0