tis-adoptium-openjdk21-jdk icon

Adoptium OpenJDK 21 JDK

Paquet d'installation silencieuse pour Adoptium OpenJDK 21 JDK

21.0.12.1-9
System and network
System and network

  • package: tis-adoptium-openjdk21-jdk
  • name: Adoptium OpenJDK 21 JDK
  • version: 21.0.12.1-9
  • 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: arm64
  • signature_date:
  • size: 174.83 Mo
  • installed_size: 39.41 Mo
  • homepage : https://adoptium.net/

package           : tis-adoptium-openjdk21-jdk
version           : 21.0.12.1-9
architecture      : arm64
section           : base
priority          : optional
name              : Adoptium OpenJDK 21 JDK
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      : fd63d6df-b9dc-42a5-92b7-ea8018bc2b88
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-28T11:15:58.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         : Dwj6MKk77u7VAr+wegR5H7rptJ55gIfDXptrafwPgiXvcb7/U3vSAOF1Tewh4kwqJ68svX5OMh7AuCtKGveNbVNWJ/vEh8eCO4O6uD0dMdLTQbkqVg1/C75XG5xoVkD56anAHeAwDUk/spWQVPk0DOjD/RGIiGBQIji1K6cfNCWkI9HOMNLnDWphwVRgNEy81S5I4QniF1/8NbFl4w74FVuXEZpJlr8iACA/8C5oixtUkj2MdVXVPTlKtUPc3PZcVH4unsRzyazSZ3+pwEnBMRj89x0Kwfzn/QTCppWNsGVIfT+e9Bu8TVmB8cyyCLOfFXQf/0UfcLfQpGzgCQMW4Q==

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


def install():
    install_deb("adoptium-ca-certificates_*.deb")
    install_deb("temurin-21-jdk*_arm64.deb")


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

    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 = "arm64"
    package_name = "temurin-21-jdk"

    # 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
b4f30937976cf8dd5d8a2c80d861a5e89ac47891a6680d8d92a86617d8eb56af : WAPT/control
841c3b8e2f19942f438049a68b7920c2a49eb3997fb991dc6b41f3a8f242d3a3 : WAPT/icon.png
bd146cae76f600fedcaf0ca1776cf099b48bcd01fdaa42479c3b1f3dc0d5f2f0 : adoptium-ca-certificates_1.0.6-1_all.deb
4d695ad2a48559496b23d5bffbf2e24254d185f860735c78420efe5a041b451b : luti.json
837a181c79ee2801266273479644a96164af10fcc34b199e1304e724186687a9 : setup.py
e10e9c7497901c3e93ea89e709317da14e1e3428d6c31fab3926631bf868cf41 : temurin-21-jdk_21.0.12.1.0+1-0_arm64.deb
fd536fe7dd4218ac7153fd25b8eef4002846088b29436e7980217bfada024ae4 : update_package.py