tis-adoptium-openjdk21-jre icon

Adoptium OpenJDK 21 JRE

Silent install package for Adoptium OpenJDK 21 JRE

21.0.12.1-5
System and network
System and network

  • package: tis-adoptium-openjdk21-jre
  • name: Adoptium OpenJDK 21 JRE
  • version: 21.0.12.1-5
  • categories: System and network
  • maintainer: WAPT Team,Tranquil IT,Jimmy PELÉ,Clément BAZIRET
  • editor: AdoptOpenJDK
  • licence: opensource_free,cpe:/a:gnu:gpl_v2,wapt_public
  • locale: all
  • target_os: debian_based
  • impacted_process: java,jfr,jrunscript,jwebserver,keytool,rmiregistry
  • architecture: x64
  • signature_date:
  • size: 32.39 Mo
  • installed_size: 39.41 Mo
  • homepage : https://adoptium.net/

package           : tis-adoptium-openjdk21-jre
version           : 21.0.12.1-5
architecture      : x64
section           : base
priority          : optional
name              : Adoptium OpenJDK 21 JRE
categories        : System and network
maintainer        : WAPT Team,Tranquil IT,Jimmy PELÉ,Clément BAZIRET
description       : Eclipse Temurin (formerly Adoptium OpenJDK, formerly AdoptOpenJDK) with Hotspot is an open source Java SE build based upon OpenJDK
depends           : 
conflicts         : 
maturity          : PROD
locale            : all
target_os         : debian_based
min_wapt_version  : 2.5
sources           : https://adoptium.net/temurin/releases/?version=21
installed_size    : 39407616
impacted_process  : java,jfr,jrunscript,jwebserver,keytool,rmiregistry
description_fr    : Eclipse Temurin (anciennement Adoptium OpenJDK, anciennement AdoptOpenJDK) avec Hotspot est une version open source de Java SE basée sur OpenJDK
description_pl    : Eclipse Temurin (dawniej Adoptium OpenJDK, dawniej AdoptOpenJDK) z Hotspotem to open source'owa kompilacja Java SE oparta na OpenJDK
description_de    : Eclipse Temurin (ehemals Adoptium OpenJDK, ehemals AdoptOpenJDK) mit Hotspot ist ein quelloffener Java SE Build, der auf OpenJDK basiert
description_es    : Eclipse Temurin (antes Adoptium OpenJDK, antes AdoptOpenJDK) con Hotspot es una compilación de Java SE de código abierto basada en OpenJDK
description_pt    : O Eclipse Temurin (anteriormente Adoptium OpenJDK, anteriormente AdoptOpenJDK) com Hotspot é uma compilação Java SE de código aberto baseada no OpenJDK
description_it    : Eclipse Temurin (ex Adoptium OpenJDK, ex AdoptOpenJDK) con Hotspot è una build open source di Java SE basata su OpenJDK
description_nl    : Eclipse Temurin (voorheen Adoptium OpenJDK, voorheen AdoptOpenJDK) met Hotspot is een open source Java SE build gebaseerd op OpenJDK
description_ru    : Eclipse Temurin (ранее Adoptium OpenJDK, ранее AdoptOpenJDK) с Hotspot - это сборка Java SE с открытым исходным кодом, основанная на OpenJDK
audit_schedule    : 
editor            : AdoptOpenJDK
keywords          : adopt,open,jdk,adoptopenjdk,java,jre
licence           : opensource_free,cpe:/a:gnu:gpl_v2,wapt_public
homepage          : https://adoptium.net/
package_uuid      : 5f794a0e-f35a-4db1-941b-c7512216f8fc
valid_from        : 
valid_until       : 
forced_install_on : 
changelog         : https://adoptium.net/temurin/release-notes/
min_os_version    : 11
max_os_version    : 
icon_sha256sum    : 841c3b8e2f19942f438049a68b7920c2a49eb3997fb991dc6b41f3a8f242d3a3
signer            : Tranquil IT
signer_fingerprint: 8c5127a75392be9cc9afd0dbae1222a673072c308c14d88ab246e23832e8c6bb
signature_date    : 2026-09-14T10:29:23.000000
signed_attributes : package,version,architecture,section,priority,name,categories,maintainer,description,depends,conflicts,maturity,locale,target_os,min_wapt_version,sources,installed_size,impacted_process,description_fr,description_pl,description_de,description_es,description_pt,description_it,description_nl,description_ru,audit_schedule,editor,keywords,licence,homepage,package_uuid,valid_from,valid_until,forced_install_on,changelog,min_os_version,max_os_version,icon_sha256sum,signer,signer_fingerprint,signature_date,signed_attributes
signature         : TW6DqIqQ7+m6hs0LoxObtpLZFpJ55tjOjMPufvpiatt0Ef14Oa8f3rzpDovvlwo1//v6sqj6d1qXAz9rKI+6NaZJgrqjDZBj9myuCf4hbKGfBdTILDCGZWrnBWaXhBvUOxw84h/P4ZScKXWJRqLv6vi+h3I8sItfMslJBDz6pzh7DWgUF5G2iHKb/YSM1JIlQkqVWeWz+bbUfg+rroQpZlUo8ahuX+qG7kTQ4TermGOnDiyhv57dmWQ0ATkjcbYstwqawpG83PSZ0PfON3AR479BlGPylajB8hV9HEzJZj+Bx4UaKI1S2NpbAEvJOjm2A5loahpZtUxMvV9yPna5Xg==

# -*- coding: utf-8 -*-
from setuphelpers import *


def install():
    bin_name = glob.glob("*.deb")
    install_deb(" ".join(bin_name))


def uninstall():
    uninstall_apt("temurin-21-jre")

    if installed_softwares("adoptium-ca-certificates"):
        uninstall_apt("adoptium-ca-certificates")

# -*- coding: utf-8 -*-
from setuphelpers import *
from io import BytesIO
import gzip
import os
import re


class DebianPackagesParser:

    def __init__(self, file):
        file_text = self.__read_input(file)
        file_text = self.__remove_pgp_key(file_text)

        packages = file_text.split("\n\n")

        self.raw_pkg_info = []
        if len(packages[0]):
            self.raw_pkg_info = [self.__get_raw_info(pkg) for pkg in packages]

    def __read_input(self, input_obj):
        """Ensures valid input type"""
        if type(input_obj) is not str:
            raise TypeError("input must be string or string path to file")
        elif os.path.exists(os.path.abspath(input_obj)):
            with open(input_obj, "r", encoding="utf8") as f:
                file_text = f.read().strip()
            return file_text
        else:
            return input_obj.strip()

    def __remove_pgp_key(self, text):
        gpg_regex = re.compile(r"^-----BEGIN PGP PUBLIC KEY BLOCK-----[a-zA-Z\d\n\/.:+= ]+-----END PGP PUBLIC KEY BLOCK-----$", flags=re.MULTILINE)
        return re.sub(gpg_regex, '', text)

    def __get_raw_info(self, text):
        """Parses a Debian control file and returns raw dictionary"""
        split_regex = re.compile(r"^[A-Za-z0-9-]+:\s", flags=re.MULTILINE)

        keys = [key[:-2].lower() for key in split_regex.findall(text)]
        values = [value.strip() for value in re.split(split_regex, text)[1:]]

        if values:
            return dict(zip(keys, values))
        else:
            raise ValueError("file or text don't match Debian Control File schema")

def get_all_dep_version_package(list_package, package_name, all_dep):
    """Recursively get all dependencies of a given package."""
    # Get the latest version of the package
    last_package = sorted([u for u in list_package if u['package'] == package_name], 
                          key=lambda p: Version(p['version']), reverse=True)
    if not last_package:
        return  # Exit if the package is not found
    
    last_package = last_package[0]
    
    # Add the last package to the dependencies list
    if last_package not in all_dep:
        all_dep.append(last_package)
    
    # Parse the dependencies
    dependencies = last_package.get('depends', '').split(',')
    
    for dep_group in dependencies:
        dep_candidates = dep_group.split('|')
        
        # Pick the first available candidate
        for dep in dep_candidates:
            dep_name = dep.split('(')[0].strip()
            # Recursively fetch dependencies for this package
            get_all_dep_version_package(list_package, dep_name, all_dep)

def download_all_dependencies(list_package, package_name, urldepot, proxies=None):
    """Download all dependencies of a package."""
    all_dep = []

    # Fetch all dependencies of the package
    get_all_dep_version_package(list_package, package_name, all_dep)

    # Create the list of URLs for all dependencies
    list_deb = [urldepot + '/' + u['filename'] for u in all_dep]

    # Download each dependency
    for f in list_deb:
        filename = f.split('/')[-1]
        if not isfile(filename):
            print(f"Download URL is: {f}")
            wget(f, filename, proxies=proxies)
        else:
            print(f"{filename} already exists.")

def get_package_version(input_obj):
    parts = input_obj.split(':', 1)
    if len(parts) == 2:
        epoch, version = parts
    else:
        epoch, version = 0, parts[0]
        
    for i in "+~":
        version = version.split(i)[0]
    return epoch, str(Version(version, 4))

def update_package():
    # Declaring local variables
    package_updated = False
    proxies = get_proxies_from_wapt_console()
    if not proxies:
        proxies = get_proxies()
    app_name = control.name

    base_url = "https://packages.adoptium.net/artifactory/deb"
    dist = "trixie"
    arch = "amd64"
    package_name = "temurin-21-jre"

    # We remove all deb file first
    for deb in glob.glob('*.deb'):
        remove_file(deb)

    urldepot = f"{base_url}/dists/{dist}/main/binary-{arch}/Packages.gz"
    print(f"Repo url is {urldepot}")

    with gzip.open(BytesIO(wgets(urldepot, proxies=proxies))) as f:
        data = f.read().decode('utf-8')

    list_package = DebianPackagesParser(data).raw_pkg_info

    # Getting latest version of the package
    last_package = sorted([u for u in list_package if u['package'] == package_name], key=lambda p: (Version(p['version'])), reverse=True)[0]
    epoch, version = get_package_version(last_package['version'])

    print(f"Latest {app_name} version is: {version}")
    download_all_dependencies(list_package, package_name, base_url, proxies)

    # Changing version of the package
    if Version(version) > Version(control.get_software_version()):
        print(f"Software version updated (from: {control.get_software_version()} to: {Version(version)})")
        package_updated = True
    else:
        print(f"Software version up-to-date ({Version(version)})")

    control.set_software_version(version)
    control.save_control_to_wapt()

    return package_updated

38d056ab130f7bf7c481c12636a4e9959de36561d3dfcbe54c6e3571bc0c1dc3 : WAPT/certificate.crt
75ea513cf3a545d0c5b02d6dfacdf9f00a31c8c5e2df27f103ff889dee5f6032 : WAPT/control
841c3b8e2f19942f438049a68b7920c2a49eb3997fb991dc6b41f3a8f242d3a3 : WAPT/icon.png
bd146cae76f600fedcaf0ca1776cf099b48bcd01fdaa42479c3b1f3dc0d5f2f0 : adoptium-ca-certificates_1.0.6-1_all.deb
0db176368ff03123a9f3e93bd33217ec027498c7dd04d3f8b63b73b2b40a190a : luti.json
a6bd85f8c137141ff07db0989407c36dcab68464fc2c2e25fdfcd7450d4ac5d3 : setup.py
6c36c5cae76391a558926db5b8df2114dc41ed2ba889edf962370083944588b3 : temurin-21-jre_21.0.12.1.0+1-0_amd64.deb
1e717680b4e1fbd8cb6ca76ac5481fc74ac7f260609cabf1e7ffb5607331c741 : update_package.py