Usage

Show help

It is a command lne tool. With -h or --help you get a list of supported options.

$ ./eol_check.sh -h
_______________________________________________________________________________

  EOL CHECK v0.26
_______________________________________________________________________________

Get end of life information of a product and show if a locally installed 
version is still naintained and what is the newest version.
Data source is https://endoflife.date/ API.

This tool requires 'curl' and 'jq' to run.

👤 Author: Axel Hahn; Institute for Medical Education; University of Bern
📄 Source: <https://git-repo.iml.unibe.ch/iml-open-source/eol-check>
📜 License: GNU GPL 3.0
📗 Docs: <https://os-docs.iml.unibe.ch/eol-check/>
_______________________________________________________________________________

✨ SYNTAX:

    eol_check.sh [OPTIONS] PRODUCT [VERSION]


🔷 OPTIONS:

    -h|--help            show this help and exit

    -a|--api             force api request and ignore cache
    -c|--category NAME   list products of given category name
    -d|--details         show details
    -f|--full            show all details (same like '-d -r')
    -g|--getversion COMMAND 
                         Override command to get version 
    -l|--list MODE       list items (products|categories|identifiers|tags) 
                         from endoflife.date
                         default is 'products'
    -n|--newest          show newest version data as json for given product
                         without check of local installation
    -o|--os              deect OS and check its eol status.
    -r|--raw             show raw output for versions (JSON)
    -s|--show            show end of life data as JSON and exit without check
                         of local installation
    -t|--tag NAME        list products of given tag name
    -v|--verbose         show more output (written to STDERR)
    -w|--wipe            Wipe created cache files


🔷 PARAMETER:

    PRODUCT              product name to check; use --list for a list of
                         known products

    VERSION              optional: check a given version; default: the locally
                         installed version will be detected

🏁 EXITCODES:

    0: OK - up to date
    1: minor update available
    2: major update available
    3: no support for your version
    4: no support for the product

    10 and higher: execution erors - version check was not performed


👉🏼XAMPLES:

    With autodetection of installed version:

    eol_check.sh ansible    Eol infos in 2..3 lines output
    eol_check.sh -d -r php  full output with details and JSON
    eol_check.sh -v java    verbode mode with details during execution
    eol_check.sh -n ruby    Show newest version data for ruby
    eol_check.sh -d -o      Detect a linux OS and show its eol status with details

    With given versipon version a product won't be tested:

    eol_check.sh debian 12  Test Debian linux version 12
    eol_check.sh -s rocky   Dump Json response of api for Rocky Linux

    Other functions

    eol_check.sh -l         List all products as <product> <tab> <description>
    eol_check.sh -l tags    List tags

    eol_check.sh -w         Wipe cache data

Check eol data of current version

Installed products

You can just add a product name.

Simple output:

$ ./eol_check.sh php
✅ PHP v8.4.11: You are up to date.
   OK, your version is maintained.
   End of life date: 2028-12-31 (1230 days left)

or

$ ./eol_check.sh node
⚠️ Node.js v20.19.4: Update with new major version is available: '24.6.0'.
   OK, your version is maintained.
   End of life date: 2026-04-30 (254 days left)

Full output:

./eol_check.sh -f node
⚠️ Node.js v20.19.4: Update with new major version is available: '24.6.0'.
   OK, your version is maintained.
   End of life date: 2026-04-30 (254 days left)

----------------------------------------------------------------------

  Node.js

Latest major            24
Latest version          24.6.0
Category                framework
Discontinued?           (not set)

Links                   https://endoflife.date/nodejs
                        https://nodejs.org/en/about/previous-releases

----------------------------------------------------------------------
Your version            20.19.4
is Maintained           true

End of life             2026-04-30
End of ext. security    (not set)

----------------------------------------------------------------------
Data for latest version:
{
  "name": "24",
  "codename": null,
  "label": "24 (Upcoming LTS)",
  "releaseDate": "2025-05-06",
  "isLts": false,
  "ltsFrom": "2025-10-28",
  "isEoas": false,
  "eoasFrom": "2026-10-20",
  "isEol": false,
  "eolFrom": "2028-04-30",
  "isEoes": null,
  "eoesFrom": null,
  "isMaintained": true,
  "latest": {
    "name": "24.6.0",
    "date": "2025-08-14",
    "link": "https://github.com/nodejs/node/blob/main/doc/changelogs/CHANGELOG_V24.md#24.6.0"
  },
  "custom": null
}
----------------------------------------------------------------------
Data for your version:
{
  "name": "20",
  "codename": null,
  "label": "20 (LTS)",
  "releaseDate": "2023-04-18",
  "isLts": true,
  "ltsFrom": "2023-10-24",
  "isEoas": true,
  "eoasFrom": "2024-10-22",
  "isEol": false,
  "eolFrom": "2026-04-30",
  "isEoes": null,
  "eoesFrom": null,
  "isMaintained": true,
  "latest": {
    "name": "20.19.4",
    "date": "2025-07-15",
    "link": "https://github.com/nodejs/node/blob/main/doc/changelogs/CHANGELOG_V20.md#20.19.4"
  },
  "custom": null
}

Operating systems

With parameter --os or -o you don’t need to add a product name. It detects the current linux distribution.

./eol_check.sh -d -o
⚠️ Debian v12: Update with new major version is available: '13.0'.
   OK, your version is maintained.
   End of security: 2028-06-30 (1046 days left)

----------------------------------------------------------------------

  Debian

Latest major            13
Latest version          13.0
Category                os
Discontinued?           (not set)

Links                   https://endoflife.date/debian
                        https://wiki.debian.org/DebianReleases

----------------------------------------------------------------------
Your version            12
is Maintained           true

End of life             2026-06-10
End of ext. security    2028-06-30

Only distibutions that are available on endoflife.date can be verified, eg. operating systems with a rolling release are not in the database.

❌ ERROR: OS 'manjaro' is not in the list of available OSes in endoflife.data api.

Custom version command

Sometines the locally instaled version cannot be detected. Maybe because it is no installed in /usr/bin or another path not included in $PATH or you need to connect a service first and have no permissions.

Define a custon command by cli parameter

The parameter -g "<command>" or --getcommand "<command>" overrides the conmand in the response data from endoflife.date.

Example:

./eol_check.sh -g "/opt/keycloak/bin/kc.sh --version" keycloak

Create a custom script

If you need more logic or you want apply the same custom command to ll your servers then you can create a file in the folder ./eol_check-env/. The filename must be the same like your product key.

There you can buildup every logic to locate your instalation or execute the command to fetch the version number.

Another idea is to use such a custom script if the version number cannot be detected automatically.

The response is the minor version of the product.

Custom version command II

If you have a better alternative to get a version command than given by endoflife.date api (hint: use -v) and you are sure it is the better choice for the public then it can be added in the eol script in the comment section on top:

# ----- Get commands to get version of a product
#       SYNTAX
#       VERSION:<key>:<command>
# VERSION:docker-engine:docker --version
# VERSION:podman:podman --version
# VERSION:postgres:psql --version

Contact the autor and send your update.

Information without installation

Get a list of known products

Use -lor --list to get a list from the api what products are supported:

$ ./eol_check.sh -l
akeneo-pim              Akeneo PIM
alibaba-ack             Alibaba ACK
alibaba-dragonwell      Alibaba Dragonwell
almalinux               AlmaLinux OS
alpine-linux            Alpine Linux
...
yocto                   Yocto Project
zabbix                  Zabbix
zentyal                 Zentyal
zerto                   Zerto
zookeeper               Apache ZooKeeper

Test a given version number

You need to know what is a valid version number for your product. Then you can add it as 2nd parameter:

./eol_check.sh almalinux 9
⚠️ AlmaLinux OS v9: Update with new major version is available: '10.0'.
   OK, your version is maintained.
   End of life date: 2032-05-31 (2477 days left)

Get raw data for a product

If you want to see all data from the endoflife.data api us -s or --show. Use the ist keyword from the list of --list output.

With this option no local version will be checked.

The response is json.

$ ./eol_check.sh -s ruby
{
  "schema_version": "1.2.0",
  "generated_at": "2025-07-02T05:32:23+00:00",
  "last_modified": "2025-06-01T10:30:23+00:00",
  "result": {
    "name": "ruby",
    "aliases": [],
    "label": "Ruby",
    "category": "lang",
    "tags": [
      "lang"
    ],
    "versionCommand": "ruby --version",
    ...
  }
}

Show newest version of product

Next to the raw data is --newest a flag that shows data only without checking a local version.

./eol_check.sh --newest node
----------------------------------------------------------------------

  Node.js

Latest version      24
Category            framework

Link                https://endoflife.date/nodejs
EOL                 Security Support
Discontinued        null

----------------------------------------------------------------------
{
  "name": "24",
  "codename": null,
  "label": "24 (Upcoming LTS)",
  "releaseDate": "2025-05-06",
  "isLts": false,
  "ltsFrom": "2025-10-28",
  "isEoas": false,
  "eoasFrom": "2026-10-20",
  "isEol": false,
  "eolFrom": "2028-04-30",
  "isEoes": null,
  "eoesFrom": null,
  "isMaintained": true,
  "latest": {
    "name": "24.4.0",
    "date": "2025-07-09",
    "link": "https://github.com/nodejs/node/blob/main/doc/changelogs/CHANGELOG_V24.md#24.4.0"
  },
  "custom": null
}

More lists

You can get a filtered list by tag or category.

set one of the modes behind –list

  • products (default)
  • categories
  • identifiers
  • tags
 ./eol_check.sh -l categories
server-app  
service     
lang        
os          
framework   
app         
database    
device      
standard    

To get a list of products matching a category or filter use ./eol_check.sh --category <category> or ./eol_check.sh --tag <tagname>

Check other operating systems

The endoflife.date website lists not only software products - among the list are operating systems too.

Show all tags:

 ./eol_check.sh --tag 
php-runtime         
server-app          
alibaba             
...
linux-distribution  
os                    <<<
amazon              
...
veeam               
windows             
zerto  

To see supported operating systems we filter by tag “os”

./eol_check.sh --tag os
almalinux            AlmaLinux OS
alpine-linux         Alpine Linux
amazon-linux         Amazon Linux
android              Android OS
antix                antiX Linux
tvos                 Apple tvOS
big-ip               BIG-IP
centos-stream        CentOS Stream
centos               CentOS
cos                  Google Container-Optimized OS (COS)
debian               Debian
devuan               Devuan
eurolinux            EuroLinux
fedora               Fedora Linux
fortios              FortiOS
freebsd              FreeBSD
ibm-aix              IBM AIX
ibm-i                IBM iSeries
ios                  Apple iOS
ipados               Apple iPadOS
kde-plasma           KDE Plasma
lineageos            LineageOS
linux                Linux Kernel
linuxmint            Linux Mint
macos                Apple macOS
mageia               Mageia
mxlinux              MX Linux
netapp-ontap         NetApp ONTAP
netbsd               NetBSD
nixos                NixOS
nutanix-aos          Nutanix AOS
openbsd              OpenBSD
opensuse             openSUSE
openwrt              OpenWrt
oracle-linux         Oracle Linux
oracle-solaris       Oracle Solaris
panos                Palo Alto Networks PAN-OS
pop-os               Pop!_OS
postmarketos         postmarketOS
proxmox-ve           Proxmox VE
rhel                 Red Hat Enterprise Linux
rocky-linux          Rocky Linux
slackware            Slackware Linux
sles                 SUSE Linux Enterprise Server
steamos              SteamOS
tails                Tails
ubuntu               Ubuntu
visionos             Apple visionOS
esxi                 VMware ESXi
photon               VMware Photon
watchos              Apple watchOS
windows-embedded     Microsoft Windows Embedded
windows-nano-server  Microsoft Nano Server
windows-server-core  Microsoft Windows Server Core
windows-server       Microsoft Windows Server
windows              Microsoft Windows
xcp-ng               XCP-ng
yocto                Yocto Project
zentyal              Zentyal

You can see the raw endoflife api data with –show … and to extract the latest version filter it with jq. Here is an example for debian as opearting system:

 ./eol_check.sh -s debian | jq ".result .releases.[0]"
{
  "name": "12",
  "codename": "Bookworm",
  "label": "12 (Bookworm)",
  "releaseDate": "2023-06-10",
  "isLts": false,
  "ltsFrom": null,
  "isEol": false,
  "eolFrom": "2026-06-10",
  "isEoes": false,
  "eoesFrom": "2028-06-10",
  "isMaintained": true,
  "latest": {
    "name": "12.11",
    "date": "2025-05-17",
    "link": "https://www.debian.org/News/2025/20250111"
  },
  "custom": null
}

Use it in scripts

Existcodes

You can use the exitcodes to get the logical result and show your own message or initialize an action.

Exitcode Description
0 OK - up to date
1 A minor update is available
2 A major update is available
3 No more support for your version
4 The company stopped the support for the product

Errorcodes of 10 and higher mean that the script stopped without performing a version check.

Filter JSON and Debug output

The get the response data from endoflife api you can use -s <PRODICT>. You can pipe the command to jq to perform a custom filter.

Even when enabling debug information it will work because debug text is written to STDERR.

./eol_check.sh -v -s ruby |  jq '.result .versionCommand' 
DEBUG: _fetchData products ruby
DEBUG: Using cache /tmp/eol-cache__products__ruby.json; its age is 76 sec vs ttl 86400 sec; no request to https://endoflife.date/api/v1/products/ruby
DEBUG: Showing full response of endoflife API
"ruby --version"

Handle caching

By default a first request to the api of endoflife.data is needed. The response will be stored in /tmp/eol-cache__<name>.json. For 1 day the cache file is used für the same api request.

You can override the local cache by using --api.

With --wipe all generated cache files can be deleted.