tis-rust icon

Rust

Silent install package for Rust

1.88.0-1

  • package: tis-rust
  • name: Rust
  • version: 1.88.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: arm
  • signature_date:
  • size: 410.75 Mo
  • installed_size: 375.83 Mo

package           : tis-rust
version           : 1.88.0-1
architecture      : arm
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          : PROD
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      : cb819721-a638-4b3b-85dc-dec7ed43b412
valid_from        : 
valid_until       : 
forced_install_on : 
changelog         : https://releases.rs/
min_os_version    : 
max_os_version    : 
icon_sha256sum    : fe914ad761fb21126e7ec721598b2397368d3d44a06e7569419adb608ae67efc
signer            : Tranquil IT
signer_fingerprint: 8c5127a75392be9cc9afd0dbae1222a673072c308c14d88ab246e23832e8c6bb
signature_date    : 2025-07-01T20:06:00.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         : vw344nx2W/D6ujV6S9nZExOM8H9VEnNWYgnKKMvrRJWXuo0fFaWeImKloot2EJkoI4QH3pn3vfU1ku1sUAaTJOU/YN+eij3l5iZD0uaEV1Zv8BHAy9BQwTt4kPXH/aZn0Bwv3k6/unOfpZHnDNyQf6NRuFuqnklMlP8ltUy3hC1+ZtOHGLaD6MEM1FOL+cPjZMYDOeAftjLSYrvxChnk2f8zlroum/NYGWNqAsYzDs3mMChfBUpVAg5YwKa1oBxzkTSZbn+H5iskLIxorPv1sMwlmzQ0LhQ63mqbYgm6cAg3kbuvWvQdIVW+bRNVXGwUPFMUpQp2Z3v7ThaVVROgYw==

# -*- 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-armv7-unknown-linux-gnueabihf"]
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-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

38d056ab130f7bf7c481c12636a4e9959de36561d3dfcbe54c6e3571bc0c1dc3 : WAPT/certificate.crt
1d427a6b2fc6efdb17d1b67c3b2976039dbab94aef17db6bab040d62e8faf099 : WAPT/control
fe914ad761fb21126e7ec721598b2397368d3d44a06e7569419adb608ae67efc : WAPT/icon.png
378f2547821fd48481f3294d2d793db94d7c8877751ac3116feb7360da362a46 : luti.json
718b8110c8f8ea40282b4a0e2efa09c4a91472eec45739f3b37ecc03f2b53954 : rust-1.88.0-armv7-unknown-linux-gnueabihf.tar.gz
13fd2ebd21f9af4bc898ed8c0460d59a633dddaf8f9274d18493569e549e4be9 : setup.py
f6674b248a0b9619f358fda11ad6d3a0c4486c6459e3fc2cb4d0bbe7164b5813 : update_package.py