tis-wapt-python310-relocatable
Paquet d’installation silencieuse pour tis-wapt-python310-relocatable
3.10.20-62
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.20-62
- maintainer: sfonteneau
- locale: all
- target_os: windows
- architecture: x86
- signature_date:
- size: 8.54 Mo
package : tis-wapt-python310-relocatable
version : 3.10.20-62
architecture : x86
section : base
priority : optional
name :
categories :
maintainer : sfonteneau
description : Package for tis-wapt-python310-relocatable
depends :
conflicts :
maturity : PREPROD
locale : all
target_os : windows
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 : 9063537d-a6d6-4d71-ac96-8c57f736072e
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-03-03T15:16:19.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 : gfeOKkD1bHXFAtsIUDSf/xReQ1fYiXdYwnm+L/MvHyMSlIaYR39u+zJPa8cGBZR5Zrig6HsyUC9BU16SmRLXWNIAfvlNuTHdCfOFV7VLnbk+IUdrMGb/cqStUWSx5DHKGvmhIOmjTbhdyyK+irVp+BO4tOXOMlwGvA7ZfGo6yQFw07Kfnh43XS6de8nKNm4Yo4daDSj3gv9jpsjk+GcmT83SUA7Buj/7vuEYHne8Ip1WiwfD7WbzIij0cweprV1F6+1mWN3fsAJYMBCaIxQmp8+7rZSF3b0j5vMwXmP4qKuwL5DG3VyzbRx28AsXlGR1r4oUvEWyjUOg5R4Ro5m5Uw==
# -*- coding: utf-8 -*-
from setuphelpers import *
from waptutils import default_overwrite
import glob
path_python311_tis = makepath(programfiles32,"python311-tis")
def install():
copytree2('Python-%s' % control.get_software_version(),path_python311_tis,onreplace=default_overwrite)
run("%s --version" % makepath(path_python311_tis,'python.exe'))
def uninstall():
remove_tree(path_python311_tis)
# -*- 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')
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")
filecopyto('get_externals.bat',rf'Python-{python_version}\PCbuild\get_externals.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")
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')
with open(makepath(f'Python-{python_version}','PCbuild','openssl.props'), 'r') as f:
data=f.read()
data = data.replace(r"<_DLLSuffix>-1_1</_DLLSuffix>",r"<_DLLSuffix>-3</_DLLSuffix>")
with open(makepath(f'Python-{python_version}','PCbuild','openssl.props'), 'w') as f:
f.write(data)
#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 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:OutputPath="%s"' % (basedir,basedir))
print_utc("packaging python")
name_generate = glob.glob('*.zip')[0]
os.rename(name_generate,f'Python-%s-x86.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()
ddf4b3cf969f832b89df49735ba21125fb36925c9e7d3971819454cb40150702 : Python-windows_amd64-x86.zip
01ca7fe94636e5a08fcb73849d3b5df25d51e2c82f4dd1a08f01798b25899819 : WAPT/certificate.crt
0b9f9ae25986319d66f4140a70c89263fa3889ee57e8344f25c2a12dfedb74f9 : WAPT/control
b55b23fa81945c6cd4c2f4f114188aa9f8f3d0c3cbb9fb353b2803ffbb67b43b : WAPT/icon.png
0fd11ebf11860588319c08c1fb69a12cadba748410842d40c95c92fe3589aa27 : WAPT/wapt.psproj
f8b1554394dcefc950d8fc3411b0da482008abc897f98447464f4042022c18de : get_cots.py
ca10098527f5f2cd1ba87acaaf22d3d57c64467b3b41ab450fe213344c9b6c1d : get_externals.bat
425d851124936170077566cf5bdb628639740b3ea91778965b00d680dbb11efe : luti.json
461fd299f160c1ef573f372baadb07e9f9855f721a846c990ddde781e8d62ee4 : python_sbom.cdx.json
720e5576d0635f0d7af20bb86ab7a5971d3356001a9b7b7777d156712777eab6 : setup.py
4abf0f6462ad8b165dec404aaee5dc70e9a2d0179e8422539b0cde41c6c1a6b5 : step1_prepare_debian_chroot.sh
b94767e35afea7ff091c974c7f018c4d0951030b393134052eca5edf5d339f14 : step1_prepare_redhat_chroot.sh
7cbb704eb2ff3f4de227f4cd887e9772e8f3bfc1b52e33b6f44c5c205d031719 : step2_compile_python_in_chroot.sh
5f19c564c44eb4d463bd8bae26ff5b5f4604996969506c4872b3be6d3ba56364 : step2_compile_python_macos.sh
1da4dbb9cfa657a1601913c2bd7ffed5fe0731961904eed4077d9f5c2822b6be : update_package.py