2023-03-04 09:56:16 +01:00
< p align = "center" >
2024-11-16 18:24:58 +00:00
< img src = "extras/podcheck.png" width = "160" title = "Podcheck" >
2023-03-04 09:56:16 +01:00
< / p >
2024-08-17 08:50:39 -04:00
< p align = "center" >
2023-03-08 12:48:36 +01:00
< img src = "https://img.shields.io/badge/bash-4.3-green?style=flat-square&logo=gnubash" alt = "bash" >
2023-03-04 09:56:16 +01:00
< a href = "https://www.gnu.org/licenses/gpl-3.0.html" > < img src = "https://img.shields.io/badge/license-GPLv3-red?style=flat-square" alt = "GPLv3" > < / a >
2024-11-16 18:24:58 +00:00
< img src = "https://img.shields.io/github/v/tag/sudo-kraken/podcheck?style=flat-square&label=release" alt = "release" >
< a href = "https://www.buymeacoffee.com/jharrison94" > < img src = "https://img.shields.io/badge/-buy_me_a%C2%A0coffee-gray?logo=buy-me-a-coffee" alt = "Buy Me A Coffee" >
2023-03-04 09:56:16 +01:00
< / p >
2024-11-16 18:24:58 +00:00
< h3 align = "center" > CLI tool to automate Podman image updates. < br > Selective updates, optional notifications, and image pruning when done.< / h3 >
2024-02-04 21:15:21 +01:00
< h2 align = "center" > Now with simple notification integrations!< / h2 >
2024-11-16 18:24:58 +00:00
< h4 align = "center" > Features include excluding specific containers, custom container labels, auto-prune when done, and more.< / h4 >
2023-03-04 09:56:16 +01:00
2024-01-14 20:32:46 +01:00
___
## :bell: Changelog
2024-11-16 18:24:58 +00:00
- **v0.5.6**: Directly checking for systemd units matching container names.
- Improved Quadlet detection by checking for systemd units named after the container.
- Ensures better compatibility with Quadlet-managed containers.
- **v0.5.5**: Switched to podman compose command.
- Adjusted the script to use podman compose instead of podman-compose.
- Removed unnecessary messages.
- **v0.5.4**: Improved Quadlet detection by matching container IDs with systemd units.
- The script now searches systemd unit files for references to the container ID.
- Provides reliable detection of Quadlet-managed containers.
2024-11-19 20:35:34 +00:00
- **v0.5.0**: Initial release of Podcheck, inspired by [Dockcheck ](https://github.com/mag37/dockcheck ).
2024-11-16 18:24:58 +00:00
- Supports updating containers managed by Podman Compose and Quadlet.
- Includes options for automatic updates, notifications, and more.
2023-01-18 13:46:00 +01:00
___
2023-02-09 19:38:00 +01:00
2024-11-16 18:24:58 +00:00
## :mag_right: `podcheck.sh`
2023-02-10 21:17:15 +01:00
```
2024-11-16 18:24:58 +00:00
$ ./podcheck.sh -h
Syntax: podcheck.sh [OPTION] [part of name to filter]
Example: podcheck.sh -y -d 10 -e nextcloud,heimdall
2024-01-21 20:29:29 +01:00
2024-11-16 18:24:58 +00:00
Options:
2024-01-21 20:29:29 +01:00
-a|y Automatic updates, without interaction.
2024-11-16 18:24:58 +00:00
-d N Only update to new images that are N+ days old. Lists too recent with +prefix and age.
2024-01-21 20:29:29 +01:00
-e X Exclude containers, separated by comma.
2024-11-16 18:24:58 +00:00
-f Force pod restart after update.
2024-01-21 20:29:29 +01:00
-h Print this Help.
-i Inform - send a preconfigured notification.
-l Only update if label is set. See readme.
-m Monochrome mode, no printf color codes.
2024-11-16 18:24:58 +00:00
-n No updates; only checking availability.
-p Auto-prune dangling images after update.
-r Allow updating images for podman run; won't update the container.
-s Include stopped containers in the check.
2024-06-03 22:19:07 +02:00
-t Set a timeout (in seconds) per container for registry checkups, 10 is default.
2024-02-02 21:18:19 +01:00
-v Prints current version.
2023-01-19 12:16:49 +01:00
```
2023-01-22 13:44:48 +01:00
2024-01-14 20:32:46 +01:00
### Basic example:
2023-02-10 21:17:15 +01:00
```
2024-11-16 18:24:58 +00:00
$ ./podcheck.sh
...
2023-01-18 21:07:52 +01:00
Containers on latest version:
2024-11-16 18:24:58 +00:00
filebrowser
foundryvtt
2023-01-18 21:07:52 +01:00
2023-01-30 10:37:41 +01:00
Containers with updates available:
2024-11-16 18:24:58 +00:00
1) joplin-db
2) it-tools
2023-01-30 10:37:41 +01:00
2023-02-09 19:38:00 +01:00
Choose what containers to update:
2023-02-15 13:14:05 +01:00
Enter number(s) separated by comma, [a] for all - [q] to quit:
2023-01-18 21:12:00 +01:00
```
2024-11-16 18:24:58 +00:00
Then it proceeds to run podman pull and podman compose up -d, or restarts systemd units for every container with updates.
After the updates are complete, you'll be prompted if you'd like to prune dangling images
2023-01-19 12:20:02 +01:00
2024-02-04 21:15:21 +01:00
___
## :nut_and_bolt: Dependencies
2024-11-16 18:24:58 +00:00
- Podman: Ensure you have Podman installed and properly configured.
- Podman Compose: For containers managed with podman compose, make sure it's installed.
- Note: podman compose is included in recent versions of Podman.
- Quadlet: If you're using systemd units to manage your containers, ensure they are correctly set up.
2024-06-16 19:37:18 +02:00
- Bash shell or compatible shell of at least v4.3
2024-08-17 08:50:39 -04:00
- [regclient/regctl ](https://github.com/regclient/regclient ) (Licensed under [Apache-2.0 License ](http://www.apache.org/licenses/LICENSE-2.0 ))
- User will be prompted to download `regctl` if not in `PATH` or `PWD` .
2024-02-04 21:15:21 +01:00
- regctl requires `amd64/arm64` - see [workaround ](#roller_coaster-workaround-for-non-amd64--arm64 ) if other architecture is used.
2024-11-25 14:05:30 +01:00
- [jq ](https://github.com/jqlang/jq ): Used for parsing JSON output from podman inspect. User will be prompted to install.
2024-11-16 18:24:58 +00:00
- timeout: Optional but recommended for setting timeouts on registry checks.
2024-02-04 21:15:21 +01:00
2024-03-27 21:49:23 +01:00
## :tent: Install Instructions
Download the script to a directory in **PATH** , I'd suggest using `~/.local/bin` as that's usually in **PATH** .
```sh
2024-11-16 18:24:58 +00:00
# Using curl:
curl -L https://raw.githubusercontent.com/sudo-kraken/podcheck/main/podcheck.sh -o ~/.local/bin/podcheck.sh
chmod +x ~/.local/bin/podcheck.sh
2024-03-31 20:41:38 +02:00
2024-11-16 18:24:58 +00:00
# Or using wget:
wget -O ~/.local/bin/podcheck.sh "https://raw.githubusercontent.com/sudo-kraken/podcheck/main/podcheck.sh" & & chmod +x ~/.local/bin/podcheck.sh
2024-03-27 21:49:23 +01:00
```
2024-11-16 18:24:58 +00:00
Then call the script anywhere with `podcheck.sh` .
Add your preferred notify.sh template to the same directory—this will not be touched by the script's self-update function.
2024-02-04 21:15:21 +01:00
2024-01-14 20:32:46 +01:00
## :loudspeaker: Notifications
2024-08-17 08:50:39 -04:00
Trigger with the `-i` flag.
2024-01-06 20:33:21 +01:00
Run it scheduled with `-ni` to only get notified when there's updates available!
2024-01-03 21:56:07 +01:00
2024-09-18 16:44:32 +02:00
Use a `notify_X.sh` template file from the **notify_templates** directory, copy it to `notify.sh` alongside the script, modify it to your needs! (notify.sh is added to .gitignore)
2024-06-21 06:25:06 +02:00
**Current templates:**
2024-01-05 21:45:13 +01:00
- Synology [DSM ](https://www.synology.com/en-global/dsm )
2024-07-24 20:49:23 +02:00
- Email with [mSMTP ](https://wiki.debian.org/msmtp ) (or deprecated alternative [sSMTP ](https://wiki.debian.org/sSMTP ))
2024-01-06 07:47:41 +01:00
- Apprise (with it's [multitude ](https://github.com/caronc/apprise#supported-notifications ) of notifications)
- both native [caronc/apprise ](https://github.com/caronc/apprise ) and the standalone [linuxserver/docker-apprise-api ](https://github.com/linuxserver/docker-apprise-api )
2024-01-13 19:53:50 +01:00
- Read the [QuickStart ](extras/apprise_quickstart.md )
2024-01-20 10:33:32 +01:00
- [ntfy.sh ](https://ntfy.sh/ ) - HTTP-based pub-sub notifications.
2024-06-21 06:25:06 +02:00
- [Gotify ](https://gotify.net/ ) - a simple server for sending and receiving messages.
2024-01-20 10:33:32 +01:00
- [Pushbullet ](https://www.pushbullet.com/ ) - connecting different devices with cross-platform features.
2024-02-02 21:39:00 +01:00
- [Telegram ](https://telegram.org/ ) - Telegram chat API.
2024-02-11 16:13:23 +01:00
- [Matrix-Synapse ](https://github.com/element-hq/synapse ) - [Matrix ](https://matrix.org/ ), open, secure, decentralised communication.
2024-09-18 16:44:32 +02:00
- [Pushover ](https://pushover.net/ ) - Simple Notifications (to your phone, wearables, desktops)
2024-10-13 22:28:39 +02:00
- [Discord ](https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks ) - Discord webhooks.
2024-01-05 21:45:13 +01:00
2024-08-17 08:50:39 -04:00
Further additions are welcome - suggestions or PR!
2024-11-19 20:35:34 +00:00
< sub >< sup > Initiated and first contributed by [mag37 ](https://github.com/mag37 ) as [eck ](https://github.com/mag37/eck ).</ sup ></ sub >
2024-01-03 21:56:07 +01:00
2024-10-04 23:07:01 +02:00
### :date: Release notes addon to Notifications
2024-11-16 18:24:58 +00:00
There's a function to use a lookup file to add release note URLs to the notification message.
Copy the notify_templates/urls.list file to the script directory—it will be used automatically if it's there. Modify it as necessary; the names of interest in the left column need to match your container names.
2024-10-04 23:07:01 +02:00
The output of the notification will look something like this:
```
Containers on hostname with updates available:
2024-11-16 18:24:58 +00:00
joplin-db -> https://github.com/laurent22/joplin/releases
it-tools -> https://github.com/CorentinTh/it-tools/releases
2024-10-04 23:07:01 +02:00
...
```
The `urls.list` file is just an example and I'd gladly see that people contribute back when they add their preferred URLs to their lists.
2024-01-21 20:29:29 +01:00
## :bookmark: Labels
2024-11-16 18:24:58 +00:00
Optionally, you can add labels to your containers to control how Podcheck handles them. Currently, these are the usable labels:
```yaml
labels:
sudo-kraken.podcheck.restart-stack: true
sudo-kraken.podcheck.update: true
2024-01-21 20:29:29 +01:00
```
2024-11-16 18:24:58 +00:00
- `sudo-kraken.podcheck.restart-stack` : true works instead of the `-f` option, forcing a restart of the entire pod or compose stack when an update is applied. Caution: This will restart the entire stack for every updated container within it.
- `sudo-kraken.podcheck.update` : true will, when used with the `-l` option, only update containers with this label and skip the rest. It will still list all available updates.
2024-01-21 20:29:29 +01:00
2024-01-14 20:32:46 +01:00
## :roller_coaster: Workaround for non **amd64** / **arm64**
2024-01-06 20:33:21 +01:00
`regctl` provides binaries for amd64/arm64, to use on other architecture you could try this workaround.
2024-01-06 20:52:03 +01:00
Run regctl in a container wrapped in a shell script. Copied from [regclient/docs/install.md ](https://github.com/regclient/regclient/blob/main/docs/install.md ):
2024-01-06 08:40:26 +01:00
```sh
cat >regctl < < EOF
#!/bin/sh
opts=""
case "\$*" in
"registry login"*) opts="-t";;
esac
docker container run \$opts -i --rm --net host \\
-u "\$(id -u):\$(id -g)" -e HOME -v \$HOME:\$HOME \\
-v /etc/docker/certs.d:/etc/docker/certs.d:ro \\
ghcr.io/regclient/regctl:latest "\$@"
EOF
chmod 755 regctl
```
2024-11-19 20:35:34 +00:00
Test it with `./regctl --help` and then either add the file to the same path as *eck.sh* or in your path (eg. `~/.local/bin/regctl` ).
2024-01-06 08:40:26 +01:00
2024-03-27 21:49:23 +01:00
## :guardsman: Function to auth with docker hub before running
2024-02-02 21:21:56 +01:00
**Example** - Change names, paths, and remove cat+password flag if you rather get prompted:
2024-02-02 21:18:19 +01:00
```sh
function dchk {
2024-11-16 18:24:58 +00:00
cat ~/pwd.txt | podman login --username YourUser --password-stdin docker.io
~/podcheck.sh "$@"
2024-02-02 21:18:19 +01:00
}
```
2024-01-14 20:32:46 +01:00
## :hammer: Known issues
- No detailed error feedback (just skip + list what's skipped).
- Not respecting `--profile` options when re-creating the container.
2024-09-18 16:44:32 +02:00
- Not working well with containers created by **Portainer** .
- **Watchtower** might cause issues due to retagging images when checking for updates (and thereby pulling new images).
2024-01-06 08:40:26 +01:00
2024-01-14 20:32:46 +01:00
## :warning: `-r flag` disclaimer and warning
2024-08-17 08:50:39 -04:00
**Wont auto-update the containers, only their images. (compose is recommended)**
2024-11-16 18:24:58 +00:00
`podman run` does not support using new images just by restarting a container.
2024-01-14 20:32:46 +01:00
Containers need to be manually stopped, removed and created again to run on the new image.
2023-02-21 21:10:38 +01:00
2024-09-18 16:44:32 +02:00
## :wrench: Debugging
If you hit issues, you could check the output of the `extras/errorCheck.sh` script for clues.
2024-11-16 18:24:58 +00:00
Another option is to run the main script with debugging in a subshell `bash -x podcheck.sh` - if there's a particular container/image that's causing issues you can filter for just that through `bash -x podcheck.sh nginx` .
2024-09-18 16:44:32 +02:00
2024-01-14 20:32:46 +01:00
## :scroll: License
2024-11-16 18:24:58 +00:00
podcheck is created and released under the [GNU GPL v3.0 ](https://www.gnu.org/licenses/gpl-3.0-standalone.html ) license.
___
2024-09-28 14:24:34 +02:00
2024-11-16 18:24:58 +00:00
### :floppy_disk: The Story Behind Podcheck
2024-11-19 20:35:34 +00:00
Podcheck was created to bring the convenience of automated container updates to the Podman ecosystem. As a user of [Dockcheck ](https://github.com/mag37/dockcheck ) for Docker, the need for a similar tool for Podman became apparent. Podcheck aims to provide the same ease of use and automation, tailored for Podman users.
2024-01-13 20:34:34 +01:00
2024-11-16 18:24:58 +00:00
## :star2: Acknowledgments
2024-11-19 20:35:34 +00:00
Podcheck is inspired by the original [Dockcheck ](https://github.com/mag37/dockcheck ) script. Without Dockcheck, there wouldn't have been a Podcheck. Many thanks to mag37 and all the contributors to Dockcheck for their work and inspiration.
2023-02-15 17:01:44 +01:00
___
2024-11-16 18:24:58 +00:00
Please feel free to contribute, open issues, or submit pull requests to improve Podcheck!
2024-09-28 14:24:34 +02:00