tis-rust icon

Rust

Paquet d’installation silencieuse pour Rust

1.93.0-1
Development
Development

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-rust
  • name: Rust
  • version: 1.93.0-1
  • categories: Development
  • maintainer: WAPT Team,Tranquil IT,Jimmy PELÉ
  • licence: opensource_free,wapt_public
  • locale: all
  • target_os: linux
  • impacted_process: rustc,rustdoc,rust-lld,rust-analyzer-proc-macro-srv,cargo-credential-wincred,cargo-credential-1password,cargo
  • architecture: x86
  • signature_date:
  • size: 505.67 Mo
  • installed_size: 375.83 Mo

package           : tis-rust
version           : 1.93.0-1
architecture      : x86
section           : base
priority          : optional
name              : Rust
categories        : Development
maintainer        : WAPT Team,Tranquil IT,Jimmy PELÉ
description       : Rust is a multi-paradigm compiled programming language designed and developed by Mozilla Research since 2010. It was designed to be "a reliable, concurrent, practical language"
depends           : 
conflicts         : 
maturity          : PREPROD
locale            : all
target_os         : linux
min_wapt_version  : 2.3
sources           : https://forge.rust-lang.org/infra/other-installation-methods.html#standalone-installers
installed_size    : 375830794
impacted_process  : rustc,rustdoc,rust-lld,rust-analyzer-proc-macro-srv,cargo-credential-wincred,cargo-credential-1password,cargo
description_fr    : Rust est un langage de programmation compilé multi-paradigme conçu et développé par Mozilla Research depuis 2010. Il a été conçu pour être "un langage fiable, concurrent et pratique"
description_pl    : Rust to wieloparadygmatowy, kompilowany język programowania zaprojektowany i rozwijany przez Mozilla Research od 2010 roku. Został zaprojektowany jako "niezawodny, współbieżny, praktyczny język"
description_de    : Rust ist eine kompilierte Multi-Paradigma-Programmiersprache, die seit 2010 von Mozilla Research entworfen und entwickelt wird. Sie soll "eine zuverlässige, nebenläufige, praktische Sprache" sein
description_es    : Rust es un lenguaje de programación compilado multiparadigma diseñado y desarrollado por Mozilla Research desde 2010. Fue diseñado para ser "un lenguaje fiable, concurrente y práctico"
description_pt    : Rust é uma linguagem de programação compilada multiparadigma concebida e desenvolvida pela Mozilla Research desde 2010. Foi concebida para ser "uma linguagem fiável, concorrente e prática"
description_it    : Rust è un linguaggio di programmazione compilato multi-paradigma progettato e sviluppato da Mozilla Research a partire dal 2010. È stato progettato per essere "un linguaggio affidabile, concorrente e pratico"
description_nl    : Rust is een multi-paradigma gecompileerde programmeertaal, ontworpen en ontwikkeld door Mozilla Research sinds 2010. Het is ontworpen om "een betrouwbare, gelijktijdige, praktische taal" te zijn
description_ru    : Rust - это мультипарадигмальный компилируемый язык программирования, разработанный и развиваемый Mozilla Research с 2010 года. Он был задуман как "надежный, параллельный, практичный язык"
audit_schedule    : 
editor            : 
keywords          : 
licence           : opensource_free,wapt_public
homepage          : 
package_uuid      : ffba58d3-badb-45bd-8817-85802ebabd95
valid_from        : 
valid_until       : 
forced_install_on : 
changelog         : https://releases.rs/
min_os_version    : 
max_os_version    : 
icon_sha256sum    : fe914ad761fb21126e7ec721598b2397368d3d44a06e7569419adb608ae67efc
signer            : test
signer_fingerprint: b82fc8ef4a4475c0f69ac168176c2bfc58f572eb716c4eadd65e4785c155dd8e
signature_date    : 2026-01-22T14:44:40.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         : d4DPk+EERykM79JPi+fhFar8FqvlzntBmB8VifDt4kvPOUvzqji76n9HO4u6MauK9m64MHacOgsNYhcAP0sILG7I3BEYJQ9Nbfm02r2qCxDQE79x364GpMMUbS5MtLRUe2iOc+veXKl6s8X2NusIQftEktoLpYsFJ+P612z54zDjY3a7iP5KaJlJLqlJ9TdZtVF3P6WaSAQ0bKH86Qg/ZDIRRLCTH1+YKbpf2ueFaRl2wEr6/ov2Kp/OIvuv/oF4LAUhdLCawM4ix3DVp2rr6NcYZjS9kQBUfGppEThWwllwTZpoLeEcGMiJ/Cmvn9u7PNCl4RYp72Faij4YYmmfCg==

# -*- coding: utf-8 -*-
from setuphelpers import *
import tarfile
from typing import List, Optional

"""
sudo ./install.sh --help

Usage: ./install.sh [options]

Options:

    --uninstall                      only uninstall from the installation prefix
    --destdir=[<none>]               set installation root
    --prefix=[/usr/local]            set installation prefix
    --without=[<none>]               comma-separated list of components to not install
    --components=[<none>]            comma-separated list of components to install
    --list-components                list available components
    --sysconfdir=[/etc]              install system configuration files
    --bindir=[/bin]                  install binaries
    --libdir=[/lib]                  install libraries
    --datadir=[/share]               install data
    --mandir=[/share/man]            install man pages in PATH
    --docdir=[\<default\>]           install documentation in PATH
    --disable-ldconfig               don't run ldconfig after installation (Linux only)
    --disable-verify                 don't obsolete
    --verbose                        run with verbose output


sudo ./install.sh --list-components

# Available components

* rustc
* rust-std-x86_64-unknown-linux-gnu
* rust-docs
* rust-docs-json-preview
* rust-demangler-preview
* cargo
* rustfmt-preview
* rls-preview
* rust-analyzer-preview
* llvm-tools-preview
* clippy-preview
* rust-analysis-x86_64-unknown-linux-gnu

"""
components_to_install = ["rustc", "cargo", "rust-std-i686-unknown-linux-gnu"]
app_dir = "/opt/rust"
app_sys_path = makepath(app_dir, "bin")

     
def install():
    zip_name = glob.glob("rust-*.tar.gz")[0]
    sub_dir = zip_name.rsplit(".tar", 1)[0]

    print(f"Installing: {zip_name} to: {app_dir}")
    
    # Get components list (corresponding to subfolders)
    with tarfile.open(zip_name, "r") as tar:
        file = tar.extractfile(f"{sub_dir}/components")
        if file:
            content = file.read()
    components = content.decode().splitlines()

    exclude_list = [f'{sub_dir}/{c}' for c in components if c and c not in components_to_install]
    extract_tar(zip_name, exclude_list=exclude_list)
    
    print(run(f'{makepath(sub_dir, "install.sh")} --prefix="{app_dir}" --components="{",".join([a for a in components_to_install])}"'))

    print('Linking rustc binary')
    if os.path.isfile('/opt/rust/bin/rustc'):
        print('ln -s /opt/rust/bin/rustc /usr/bin/rustc')
        remove_file('/usr/bin/rustc')
        run('ln -s /opt/rust/bin/rustc /usr/bin/rustc')

    print('Linking cargo binary')
    if os.path.isfile('/opt/rust/bin/cargo'):
        print('ln -s /opt/rust/bin/cargo /usr/bin/cargo')
        remove_file('/usr/bin/cargo')
        run('ln -s /opt/rust/bin/cargo /usr/bin/cargo')

def uninstall():
    if isfile(makepath(app_dir, "/lib/rustlib/uninstall.sh")):
        run(makepath(app_dir, "/lib/rustlib/uninstall.sh"))
    if isdir(app_dir):
        remove_tree(app_dir)
    remove_file('/usr/bin/cargo')
    remove_file('/usr/bin/rustc')

def extract_tar(
    tar_path: str,
    extract_path: str = ".",
    exclude_list: Optional[List[str]] = None,
    include_list: Optional[List[str]] = None
) -> None:
    """
    Extracts a tar archive to the given directory, with optional inclusion or exclusion filtering.

    :param tar_path: Path to the .tar (or .tar.gz, .tar.bz2, etc.) archive.
    :param extract_path: Directory where files should be extracted.
    :param exclude_list: List of path prefixes to exclude from extraction.
    :param include_list: List of path prefixes to include exclusively. Overrides exclude_list if provided.
    """
    with tarfile.open(tar_path, 'r:*') as tar:
        all_members = tar.getmembers()

        if include_list:
            include_set = set(include_list)
            members = [
                m for m in all_members
                if any(m.name.startswith(inc) for inc in include_set)
            ]
        elif exclude_list:
            exclude_set = set(exclude_list)
            members = [
                m for m in all_members
                if not any(m.name.startswith(exc) for exc in exclude_set)
            ]
        else:
            members = all_members

        tar.extractall(path=extract_path, members=members)
   

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


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


    git_repo = "rust-lang/rust"
    url_api = "https://api.github.com/repos/%s/releases/latest" % git_repo

    # Getting latest informations from Github API
    json_load = json.loads(wgets(url_api, proxies=proxies))

    version = json_load["tag_name"]


    download_dict = {
        "windows-x64": f"https://static.rust-lang.org/dist/rust-{version}-x86_64-pc-windows-msvc.msi",
        "windows-x86": f"https://static.rust-lang.org/dist/rust-{version}-i686-pc-windows-msvc.msi",
        "windows-all": f"https://static.rust-lang.org/dist/rust-{version}-i686-pc-windows-msvc.msi",
        "linux-x64": f"https://static.rust-lang.org/dist/rust-{version}-x86_64-unknown-linux-gnu.tar.gz",
        "linux-x86": f"https://static.rust-lang.org/dist/rust-{version}-i686-unknown-linux-gnu.tar.gz",
        "linux-arm64": f"https://static.rust-lang.org/dist/rust-{version}-aarch64-unknown-linux-gnu.tar.gz",
        "darwin-x64": f"https://static.rust-lang.org/dist/rust-{version}-x86_64-apple-darwin.tar.gz",
        "darwin-arm": f"https://static.rust-lang.org/dist/rust-{version}-aarch64-apple-darwin.tar.gz",
        "linux-arm": f"https://static.rust-lang.org/dist/rust-{version}-armv7-unknown-linux-gnueabihf.tar.gz"
    }
    download_url = download_dict[control.target_os + "-" + ensure_list(control.architecture)[0]]
    latest_bin = download_url.split("/")[-1]

    # Downloading latest binaries
    print("Download URL is: %s" % download_url)
    if not isfile(latest_bin):
        print("Downloading: %s" % latest_bin)
        wget(download_url, latest_bin, proxies=proxies)
    else:
        print("Binary is present: %s" % latest_bin)

    # Changing version of the package
    if Version(version, 4) > Version(control.get_software_version(), 4):
        print("Software version updated (from: %s to: %s)" % (control.get_software_version(), Version(version)))
        package_updated = True
    else:
        print("Software version up-to-date (%s)" % Version(version))
    control.set_software_version(version)
    control.save_control_to_wapt()

    # Deleting outdated binaries
    remove_outdated_binaries(latest_bin, ["exe", "msi", "deb", "rpm", "dmg", "pkg", ".tar.gz", ".tar"])

    # Validating or not update-package-sources
    return package_updated

01ca7fe94636e5a08fcb73849d3b5df25d51e2c82f4dd1a08f01798b25899819 : WAPT/certificate.crt
c30d0547bf2eb07617fa71b5f2b22714b087117644c818470dae1db7de7575b3 : WAPT/control
fe914ad761fb21126e7ec721598b2397368d3d44a06e7569419adb608ae67efc : WAPT/icon.png
2419b3d8d89f0a51796386f5c51fe79ff9efcf34f940b8503810baee73cfb72a : luti.json
10036f92f7dbbef6519bd16c4b9ce3699071e8fa49c58b4b8204b69803c7cd54 : rust-1.93.0-i686-unknown-linux-gnu.tar.gz
8cc5b8e3d279e915651a4068118da13e74e2b87efd72002f8267f3b7134a5703 : setup.py
f36d783b4baf7e76f0b79ee36059e1add7e7020d4feb424b19a0fb26239c8e9b : update_package.py