tis-wapt-python310-relocatable icon

tis-wapt-python310-relocatable

Paquet d’installation silencieuse pour tis-wapt-python310-relocatable

3.10.19-53

Les paquets PREPROD sont des paquets construits via LUTI. Ils restent généralement 5 jours en PREPROD, après quoi un deuxième scan VirusTotal est effectué pour vérifier que le status n'a pas changé.
Si le paquet réussit ce dernier contrôle, il est promu en PROD et publié sur le store.

  • package: tis-wapt-python310-relocatable
  • version: 3.10.19-53
  • maintainer: sfonteneau
  • locale: all
  • target_os: linux
  • architecture: x64
  • signature_date:
  • size: 58.30 Mo

package           : tis-wapt-python310-relocatable
version           : 3.10.19-53
architecture      : x64
section           : base
priority          : optional
name              : 
categories        : 
maintainer        : sfonteneau
description       : Package for tis-wapt-python310-relocatable
depends           : 
conflicts         : 
maturity          : PREPROD
locale            : all
target_os         : linux
min_wapt_version  : 2.0
sources           : 
installed_size    : 
impacted_process  : 
description_fr    : Paquet pour tis-wapt-python310-relocatable
description_pl    : Pakiet dla tis-wapt-python310-relocatable
description_de    : Paket für tis-wapt-python310-relocatable
description_es    : Paquete para tis-wapt-python310-relocatable
description_pt    : Pacote para tis-wapt-python310-relocatable
description_it    : Pacchetto per tis-wapt-python310-relocatable
description_nl    : Pakket voor tis-wapt-python310-relocatable
description_ru    : Пакет для tis-wapt-python310-relocatable
audit_schedule    : 
editor            : 
keywords          : 
licence           : 
homepage          : 
package_uuid      : 76fbbadf-09ae-40a3-a076-620582c133b6
valid_from        : 
valid_until       : 
forced_install_on : 
changelog         : 
min_os_version    : 
max_os_version    : 
icon_sha256sum    : b55b23fa81945c6cd4c2f4f114188aa9f8f3d0c3cbb9fb353b2803ffbb67b43b
signer            : test
signer_fingerprint: b82fc8ef4a4475c0f69ac168176c2bfc58f572eb716c4eadd65e4785c155dd8e
signature_date    : 2026-01-26T12:06:49.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         : KlWvMaqsw6qSN6KAsAVz8BVdP9VqCdAvQSnOVTU8Xv560gV5HTrR2mjAwzuT6V2TE9fyEOcX+4xywpInvcVlzXc7jGrTmDmepYaSaRNxwtQk25MjfBHW2Gmcr8G9TIM8JSp5pcNcUACvkEVFoYMdhBHi1Z2i1CkrhPKjhSrkY9Y7Q18C8a+MERRTJO8oTldJRV2R8hpA2iyU0PBYGtDFKM6jcoPf62ZfGncfBul1tLaxEgNI1p6FzI0g7/I0goxjuYQcTOqICG0eacXQuLmmQvtO+Zykkn6jHkeGK/zzMC/bz3/76EjBW2jpDIxen7IJ6DNrBKpnytuQwZH8lzvAKQ==

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

def install():
    mkdirs('/opt/wapt/')
    f= glob.glob('*.tar.gz')[0]
    python_version = control.get_software_version()

    with tarfile.open(f, 'r:gz') as tar:
        tar.extractall(path='/opt/wapt')
    # run('cd /opt/wapt/ ; tar -xzf %s' % makepath(basedir,f))

def audit():
    python_version = run('/opt/wapt/bin/python3 -V').split(' ')[1].strip()

    if Version(python_version) != control.get_software_version():
        print('version install : %s' % python_version)
        return "ERROR"
    else:
        return "OK"

# -*- coding: utf-8 -*-

from setupdevhelpers import *
from waptutils import CustomZipFile
from waptutils import create_recursive_zip

import distro
import platform
import tarfile
import json
import subprocess
import datetime
import sys
sys.path.append('.')
from get_cots import download_cots, get_cots_version, get_cots_filename

python_name_file = str(platform.system().lower() + '_' + platform.machine().lower() + '_' .strip('_'))
download_directory = r'c:\tranquilit'




def update_package():
    if platform.system() =='Linux':
        update_package_linux()
        return
    elif platform.system() =='Windows':
        update_package_windows()
        return
    elif platform.system() == 'Darwin':
        update_package_macos()
    else:
        print('non supported os')
        raise()

def update_package_linux():
    unix_python_dir='/opt/wapt'
    print("[UTC %s] start building chroot env" % datetime.datetime.utcnow())
    if type_debian():
        subprocess.run('bash step1_prepare_debian_chroot.sh %s' % unix_python_dir, shell=True, stderr=sys.stdout, stdout=open('/root/compile_python.log','w'), check=True)
    elif type_redhat():
        subprocess.run('bash step1_prepare_redhat_chroot.sh %s' % unix_python_dir, shell=True, stderr=sys.stdout, stdout=open('/root/compile_python.log','w'), check=True)

    print("[UTC %s] start downloading cots" % datetime.datetime.utcnow())
    download_cots(download_directory=r'/root/python_build_chroot/root/')

    print("[UTC %s] start compiling python" % datetime.datetime.utcnow())
    filecopyto('step2_compile_python_in_chroot.sh','/root/python_build_chroot/root/')
    subprocess.run('chroot /root/python_build_chroot /bin/bash /root/step2_compile_python_in_chroot.sh  %s' % unix_python_dir, shell=True, stderr=sys.stdout, stdout=open('/root/compile_python.log','a'), check=True)

    print("[UTC %s] targzipping python distrib" % datetime.datetime.utcnow())
    run('tar -zcf %s/python-%s.tar.gz -C /root/python_build_chroot/%s .' % (basedir, python_name_file, unix_python_dir))

    if params:
        commit_count = params.get("commit_count",0)
    else:
        val = subprocess.check_output('git rev-list --count HEAD', shell=True)
        commit_count = int(val)
    control.version = "%s-%s" % (control.version.split('-')[0], commit_count)
    control.save_control_to_wapt()

def print_utc(message):
    print("[UTC %s] %s" % (datetime.datetime.utcnow(), message))

def update_package_windows():

    print_utc("start building")

    #remove linux specific files from include dir
    remove_file('*.sh')

    if control.architecture.strip()=='x64':
        target_architecture = 'x64'
    else:
        target_architecture = 'x32'

    print_utc("start downloading cots")
    download_cots(download_directory=basedir)

    #Download and extract python source
    python_version_from_control = control.version.split('-')[0]

    python_version_from_sbom = get_cots_version('Python')
    if python_version_from_control !=python_version_from_sbom:
        raise Exception('Different version in sbom and in control file, please check')
    python_version = python_version_from_sbom

    unzip_with_7zip(f'Python-{python_version}.tgz',f'Python-{python_version}-tar')
    unzip_with_7zip(rf'Python-{python_version}-tar\Python-{python_version}.tar','.')

    remove_tree(f'Python-{python_version}-tar')
    remove_file(f'Python-{python_version}.tgz')

    #Download and extract openssl source
    openssl_version =get_cots_version('openssl')
    unzip_with_7zip(rf'openssl-{openssl_version}.tar.gz',rf'openssl-{openssl_version}-tar')
    unzip_with_7zip(rf'openssl-{openssl_version}-tar\openssl-{openssl_version}.tar','.')
    remove_tree(rf'openssl-{openssl_version}-tar')
    remove_file(rf'openssl-{openssl_version}.tar.gz')

    if not isfile(r'C:\Program Files\NASM\nasm.exe'):
        error(r'C:\Program Files\NASM\nasm.exe not found')

    print_utc("running get_external.bat")
    run(rf'Python-{python_version}\PCbuild\get_externals.bat',timeout=5000)

    data_custom = r"""## -*- mode: perl; -*-
## Personal configuration targets

my %targets = (
    "VC-WIN32-rtt" => {
        inherit_from     => [ "VC-WIN32" ],
        cflags           => sub{my $v=pop; $v=~ s/\/MD/\/MT/ig; return $v},
        lflags           => "/nologo /release",
    },
    "VC-WIN64A-rtt" => {
        inherit_from     => [ "VC-WIN64A" ],
        cflags           => sub{my $v=pop; $v=~ s/\/MD/\/MT/ig; return $v},
        lflags           => "/nologo /release",
    },
);"""

    with open(rf'openssl-{openssl_version}\Configurations\60-custom.conf','w') as f:
        f.write(data_custom)

    add_to_system_path(r'C:\Program Files\NASM')



    print_utc("compiling openssl")
    if target_architecture=='x64':
        run(rf'cd openssl-{openssl_version} & set path=C:\Program Files\NASM;%path% &"C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvars64.bat" &"C:\Strawberry\perl\bin\perl.exe" configure VC-WIN64A-rtt & nmake',timeout=5000)
        name_openssl_folder = glob.glob(rf'Python-{python_version}\externals\openssl-bin-*')[0].split('\\')[-1]
        shutil.move(rf'Python-{python_version}\externals\{name_openssl_folder}\amd64',rf'Python-{python_version}\externals\{name_openssl_folder}\amd64old')
        shutil.move(rf'openssl-{openssl_version}',rf'Python-{python_version}\externals\{name_openssl_folder}\amd64')
        filecopyto(rf'Python-{python_version}\externals\{name_openssl_folder}\amd64old\include\applink.c',rf'Python-{python_version}\externals\{name_openssl_folder}\amd64\include\applink.c')


        with open(makepath(f'Python-{python_version}','PCbuild','openssl.props'), 'r') as f:
            data=f.read()
        data = data.replace(r"<_DLLSuffix>-3</_DLLSuffix>",r"<_DLLSuffix>-3-x64</_DLLSuffix>")
        with open(makepath(f'Python-{python_version}','PCbuild','openssl.props'), 'w') as f:
            f.write(data)

    else:
        run(rf'cd openssl-{openssl_version} & set path=C:\Program Files\NASM;%path% &"C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvars32.bat" &"C:\Strawberry\perl\bin\perl.exe" configure VC-WIN32-rtt & nmake',timeout=7200)
        name_openssl_folder = glob.glob(rf'Python-{python_version}\externals\openssl-bin-*')[0].split('\\')[-1]
        shutil.move(rf'Python-{python_version}\externals\{name_openssl_folder}\win32',rf'Python-{python_version}\externals\{name_openssl_folder}\win32old')
        shutil.move(rf'openssl-{openssl_version}',rf'Python-{python_version}\externals\{name_openssl_folder}\win32')
        filecopyto(rf'Python-{python_version}\externals\{name_openssl_folder}\win32old\include\applink.c',rf'Python-{python_version}\externals\{name_openssl_folder}\win32\include\applink.c')

        #Disable VENV_REDIRECT, only for x86
        for vcxproj in ['venvlauncher.vcxproj','venvwlauncher.vcxproj']:
            with open(makepath(f'Python-{python_version}','PCbuild',vcxproj), 'r') as f:
                data=f.read()
            data = data.replace(r";VENV_REDIRECT;",r";")
            with open(makepath(f'Python-{python_version}','PCbuild',vcxproj), 'w') as f:
                f.write(data)

    print_utc("compiling python")
    run(rf'Python-{python_version}\PCbuild\build.bat { "-p x64" if target_architecture=="x64" else "-p Win32" }  -t Rebuild',timeout=5000)
    run(rf'"C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin\msbuild.exe" "%s\Python-{python_version}\Tools\msi\make_zip.proj" /t:Build  { "/p:Platform=x64" if target_architecture=="x64" else "" }  /p:OutputPath="%s"' % (basedir,basedir))

    print_utc("packaging python")
    name_generate = glob.glob('*.zip')[0]
    os.rename(name_generate,f'Python-%s-{target_architecture}.zip' % python_name_file)

    remove_tree(f'Python-{python_version}')
    #remove_tree(f'openssl-{openssl_version}')
    remove_file('*.tar.gz')
    remove_file('*.tar.xz')
    remove_file('*.tar.bz2')

    commit_count = params.get("commit_count",0)
    control.version = "%s-%s" % (Version(python_version), commit_count)
    control.save_control_to_wapt()






def update_package_macos():
    unix_python_dir = '/opt/python311'

    print("[UTC %s] start downloading cots" % datetime.datetime.utcnow())
    download_cots(download_directory=r'/var/root/')

    print("[UTC %s] start compiling python" % datetime.datetime.utcnow())
    filecopyto('step2_compile_python_macos.sh','/var/root/')
    subprocess.run('/bin/bash step2_compile_python_macos.sh %s' % unix_python_dir, shell=True, stderr=sys.stdout, stdout=open('/var/root/compile_python.log','a'), check=True)


    # should it be done for *.dylib also?
    # should add more glob.glob for lib version evolution
    for filename in glob.glob(os.path.join('opt','python311','lib') + "/**/*.so",recursive=True):
        cmd = '/usr/bin/install_name_tool -rpath  /opt/python311/lib/ /opt/wapt/lib/  %s' % filename
        print("Updating rpath : %s " % cmd)
        try:
            run(cmd)
        except:
            print('error while changing rpath on %s ' % filename)

    print("[UTC %s] targzipping python distrib" % datetime.datetime.utcnow())
    run('tar -zcf %s/python-%s.tar.gz -C /opt/python311 .' % (basedir, python_name_file))

    if params:
        commit_count = params.get("commit_count",0)
    else:
        val = subprocess.check_output('git rev-list --count HEAD', shell=True)
        commit_count = int(val)
    control.version = "%s-%s" % (control.version.split('-')[0], commit_count)
    control.save_control_to_wapt()



01ca7fe94636e5a08fcb73849d3b5df25d51e2c82f4dd1a08f01798b25899819 : WAPT/certificate.crt
01e8819e098b1752e1e6330735a728e051c6d237717ba0fe09805488317f848c : WAPT/control
b55b23fa81945c6cd4c2f4f114188aa9f8f3d0c3cbb9fb353b2803ffbb67b43b : WAPT/icon.png
3abc78fd9135b020a7c610d3082bb81c496372e817fa4f53d0dca7cbb622f10c : WAPT/wapt.psproj
02518a680e8f358e65b4d4c38020564e2e4ef86123346f428920b46b16b3a723 : dnf_centos7.conf
f8b1554394dcefc950d8fc3411b0da482008abc897f98447464f4042022c18de : get_cots.py
31379ee1dc1679d48f1ea1620ef71978ae673c18b21623a6e76c8566c4680579 : luti.json
523980caf82c7e370bdca0508b2b36ecf68e624a21313824ae2a9a4e0735918f : python-linux_x86_64.tar.gz
5a3524a82e588428d30d53dd7d5f34d389bd5bcf13381a263fbef8d7f70c2aea : python_sbom.cdx.json
3b3faa17c95af406d9d5d736f4ca74ac71a4a27730d03d4a027a0640b7bdc2a6 : setup.py
f096a3e762d3487d67959e4e1c7aff23c7512247616a9d8de09814df0f2b0bbe : step1_prepare_debian_chroot.sh
9379ac2dc56c4f9320d34c0ba409e5ca3eb2a70b404a8c45eec5a730689f3813 : step1_prepare_redhat_chroot.sh
977dda40efde0b8f6d2316d1a0a8a3672147333bce0c550adac6f446d1b739bc : step2_compile_python_in_chroot.sh
46b9481f06e378a26559c546424eded7306e83842eebfabdf13de521f9cfd48d : step2_compile_python_macos.sh
99c25d834ab84412ddc5c6d49cf165e5d4275a0fbad554e7f3a958c6ddf3afd7 : update_package.py