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: macos
- architecture: x64
- signature_date:
- size: 43.15 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 : macos
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 : ecf6d457-8952-4ec4-8174-a1c031ce4715
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:25:34.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 : IlXTZvq7rAMEvsycGtPx4OhMOaF+RGPoCAgurOGvUiOmeMM3g4vDmsywswX0N0JdqcHOcFsIem9yBGuqR7WlDzWTbszRWKlcBXcC4qgq4xlMlYPjlIj3ugYYQnwT5NxpxQD8pVRgJ4C0NGuMAaUaUTDAeZ9CBkVdWft5ztUgYphuzLHliDFjqf75mK2TkG/8jQS6C5t9efgAR1huSsWG+DOnCfuUaUUuQF70hxXHLgvLKH3WwtA6eS0ivGiLEXgZNqmholrhs4ENke1DWmAmUYNp4BCWnYDtq4axf4jBWLPP/aUu0+tdXRljTcnYOdeOts8aBIKmoHYAIR7PBe7IHg==
# -*- coding: utf-8 -*-
from setuphelpers import *
import glob
def install():
mkdirs('/opt/wapt/')
f= glob.glob('*.tar.gz')[0]
python_version = control.get_software_version()
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
af70e6b01de3eaf20fcf5179cec0592c3bef5823d0db961aae7d8fb03fd364e3 : WAPT/control
b55b23fa81945c6cd4c2f4f114188aa9f8f3d0c3cbb9fb353b2803ffbb67b43b : WAPT/icon.png
f8b1554394dcefc950d8fc3411b0da482008abc897f98447464f4042022c18de : get_cots.py
76b9151a809d2d962b5f749281f68cde760e7be7f4c3b36d624af93fc8ded2bd : luti.json
51c64c83fda92390ef865610bf8ac9b94e2e48ffc6ec591041312f4a23d064b2 : python-darwin_x86_64.tar.gz
5a3524a82e588428d30d53dd7d5f34d389bd5bcf13381a263fbef8d7f70c2aea : python_sbom.cdx.json
cd0d759357de9fd771e9b0d7c2b6a253cc0487d36c77a191b140a5f6c272124a : 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