8. Come funziona dentro
8.4 Da dove arrivano gli strumenti
Le fonti ufficiali di ogni componente, le verifiche crittografiche, il download a mano e la tabella completa delle fonti.
Nell'app: «Strumenti»
In breve
- Ogni componente arriva dalla fonte ufficiale del suo produttore, in HTTPS: niente mirror, niente copie di terzi.
- Ogni file viene verificato con la sua impronta crittografica prima di essere usato; se non coincide, viene scartato.
- Se un download non riesce, puoi scaricare il file con il browser e consegnarlo al kit, che lo verifica allo stesso modo.
Il percorso di un download
- ChiedeQual è l'ultima versione e qual è la sua impronta, alla fonte ufficiale.
- ScaricaIn un file .part nella cartella di lavoro; tre tentativi.
- VerificaCalcola l'impronta del file e la confronta con quella attesa.
- Estraezip, tar.gz, tar.xz, 7z o file singolo.
- SostituisceMette la cartella nuova al posto della vecchia, tutta insieme.
- ProvaEsegue il programma per controllare che risponda.
| Verifica | Che cosa vuol dire | Esempi |
|---|---|---|
| SHA-256, SHA-512, SHA3-256 | L'impronta del file deve essere quella pubblicata dal produttore (o fissata nel catalogo del kit). | Python, Node.js, Go, Maven, Caddy, SQLite, l'editor, Pi, llama.cpp, i modelli locali |
| npm sha512 | L'impronta di integrità del registro npm. | Claude Code, Codex |
| Authenticode (solo Windows) | In più, la firma digitale del produttore sul programma, con la verifica della revoca. | Claude Code, Visual C++ runtime |
Quando un download non riesce: «a mano»
Se dopo tre tentativi il download fallisce (proxy che blocca, sito irraggiungibile), sotto la riga del componente compare un riquadro:
- Fai clic su «Scaricalo dal browser: <nome del file>»: si apre l'indirizzo esatto nel browser.
- Quando il file è scaricato, trascinalo nel riquadro o usa «sfoglia…».
- Il kit lo conserva e lo usa solo se la sua impronta è quella pubblicata; l'installazione riparte da sola («Aggiunto …: nuovo tentativo.»).
Il riquadro compare solo quando l'impronta del file è nota. I file consegnati e non usati vengono cancellati dopo 30 giorni.
GitHub e i limiti dell'API
Molti componenti sono pubblicati su GitHub. Senza accesso, l'API di GitHub consente 60 richieste l'ora; con l'account del kit (L'account GitHub del kit (6.1)) o con una variabile GITHUB_TOKEN del PC, 5.000. Il kit conserva le risposte e, se il limite è raggiunto, legge l'ultima versione direttamente dalle pagine di GitHub.
Altri servizi che l'app contatta
| Servizio | Perché |
|---|---|
api.github.com/repos/nabre/atollo/releases | Gli aggiornamenti di Atollo. |
open-vsx.org | Le estensioni dell'editor. |
api.anthropic.com · chatgpt.com · cloudcode-pa.googleapis.com | I limiti dei piani degli agenti, con l'accesso salvato, solo in lettura e solo con la pagina AI aperta. |
huggingface.co | I modelli locali: la ricerca dei file GGUF e i download, che huggingface.co reindirizza alla sua CDN. Solo quando scarichi un modello; il token, se c'è, va solo a huggingface.co. |
github.com/ggml-org/llama.cpp · github.com/earendil-works/pi | Le release di llama.cpp e di Pi, come per gli altri componenti pubblicati su GitHub (sono nella tabella delle fonti qui sotto). |
github.com/nabre/atollo/issues | «Segnala un problema» apre qui una segnalazione nuova nel browser, con versione e sistema nell'indirizzo. Lo apri tu, nel tuo browser: l'app non manda niente, e nulla arriva a GitHub finché non crei la segnalazione. |
registry.npmjs.org · pypi.org · packagist.org… | Solo quando lo chiedono i comandi dei progetti e dei framework. |
Tabella completa delle fonti (39 componenti e 5 parti)
Per ogni componente: da dove il kit legge le versioni, da dove scarica il file, come lo verifica e dove lo mette. Le colonne descrivono Windows; dove macOS e Linux usano un'altra fonte, è scritta sotto l'indirizzo.
| Componente | Versioni da | File da | Verifica | In data\apps\<sistema>\ |
|---|---|---|---|---|
| PowerShell 7 (pwsh) | api.github.com/repos/PowerShell/PowerShell/releases/latest | PowerShell-<v>-win-(x64|arm64).zip | SHA-256 GitHub Release asset.digest | pwsh\<linea>\pwsh.exe |
| GitHub CLI (gh) | api.github.com/repos/cli/cli/releases/latest | gh_<v>_windows_(amd64|arm64).zip | SHA-256 GitHub Release asset.digest | gh\<linea>\bin\gh.exe |
| Editor (VSCodium Reh Web) | Catalogo integrato (versione fissata 1.135.06055, D-58) | github.com/VSCodium/vscodium/releases/download/<v>/vscodium-reh-web-win32-x64-<v>.tar.gzmacOS e Linux: vscodium-reh-web-<target>-<v>.tar.gz, SHA-256 fissato per target (nativo anche su ARM64) | SHA-256 SHA-256 cablato in components.json | vscodium-server\ |
| ConPTY (conpty.dll + OpenConsole.exe) | Catalogo integrato (versione fissata 1.25.260930003, D-148) | api.nuget.org/v3-flatcontainer/microsoft.windows.console.conpty/<v>/microsoft.windows.console.conpty.<v>.nupkgSolo Windows: su macOS e Linux il terminale usa il PTY del sistema | Authenticode + SHA SHA-256 del pacchetto cablato in components.json (SHA-512 di NuGet); conpty.dll e OpenConsole.exe firmati Microsoft Corporation | conpty\ |
| Claude Code | registry.npmjs.org/@anthropic-ai/claude-code-win32-<arch>/latest | Campo dist.tarball del pacchetto npm | Authenticode + SHA Integrità npm sha512 + firma Authenticode Anthropic | claude\<linea>\claude.exe |
| Codex (OpenAI) | registry.npmjs.org/@openai/codex/latest → /<ver>-win32-<arch> | Campo dist.tarball del pacchetto specifico per architettura | npm sha512 Integrità npm dist.integrity (sha512-...) | codex\<linea>\bin\codex.exe |
| Antigravity (Google) | antigravity-cli-auto-updater-974169037036.us-central1.run.app/manifests/windows_(amd64|arm64).json | Campo url del manifesto JSON ufficialemacOS e Linux: manifests/<os>_<arch>.json, archivio .tar.gz | SHA-512 SHA-512 (128 hex) dal campo sha512 del manifesto | antigravity\<linea>\agy.exe (via data\kit\bin\agy.cmd) |
| Pi (Earendil) | api.github.com/repos/earendil-works/pi/releases/latest | github.com/earendil-works/pi/releases/download/v<v>/pi-windows-<arch>.zipmacOS e Linux: pi-<os>-<arch>.tar.gz della stessa release | SHA-256 Digest SHA-256 di GitHub (o SHA256SUMS della release) | pi\<linea>\pi.exe |
| llama.cpp (llama-server) | build bNNNNN fissata nel catalogo di Atollo (D-151) | github.com/ggml-org/llama.cpp/releases/download/<b>/llama-<b>-bin-win-vulkan-<arch>.zipLinux: llama-<b>-bin-ubuntu-vulkan-<arch>.tar.gz; macOS: llama-<b>-bin-macos-<arch>.tar.gz (Metal) | SHA-256 SHA-256 per piattaforma fissato nel catalogo (dal digest di GitHub) | llama\llama-server.exe |
| Git + Git Bash (PortableGit) | api.github.com/repos/git-for-windows/git/releases/latest | PortableGit-<v>-(64-bit|arm64).7z.exe (estratto in Rust)macOS e Linux: GitHub desktop/dugite-native (dugite-native-v<v>-<sha>-<sistema>.tar.gz, .sha256 dell'asset), segue il kit | SHA-256 GitHub Release asset.digest | git\<linea>\cmd\git.exe e git\<linea>\bin\bash.exe |
| Python + pip | raw.githubusercontent.com/astral-sh/python-build-standalone/latest-release/latest-release.json | cpython-3.<minor>.<patch>+<date>-<triple>-install_only_stripped.tar.gz | SHA-256 SHA-256 dall'elenco ufficiale SHA256SUMS | python\<linea>\python.exe (+ pip) |
| Node.js + npm | nodejs.org/dist/index.json (LTS pari >= 18 + ultima major) | nodejs.org/dist/<v>/node-<v>-win-<arch>.zip | SHA-256 SHA-256 da nodejs.org/dist/<v>/SHASUMS256.txt | node\<linea>\node.exe |
| uv (uv, uvx, uvw) | api.github.com/repos/astral-sh/uv/releases/latest | uv-<triple>.zip | SHA-256 GitHub Release asset.digest | uv\<linea>\uv.exe, uvx.exe, uvw.exe |
| PHP (Thread Safe) | windows.php.net/downloads/releases/releases.json (+ archivi EOL 8.1..5.6) | windows.php.net/downloads/releases/php-<v>-Win32-vs*-x64.zipmacOS e Linux: static-php-cli «bulk», archivi cli e fpm con SHA-256 fissato nel catalogo (8.4 e 8.5) | SHA-256 SHA-256 da releases.json (o tabella EOL verificata) | php\<linea>\php.exe |
| ↳ Parte: Composer | getcomposer.org/versions (canale stable o 2.2 LTS per PHP < 7.2.5) | getcomposer.org/download/<v>/composer.phar | SHA-256 SHA-256 da <url>.sha256sum | php\<linea>\composer.phar (+ composer.cmd) |
| ↳ Parte: Bundle CA SSL (curl) | curl.se/ca/cacert.pem.sha256 | curl.se/ca/cacert.pem | SHA-256 SHA-256 da cacert.pem.sha256 | php\<linea>\extras\ssl\cacert.pem |
| ↳ Parte: Visual C++ Runtime | Estratto dal CAB vcRuntimeMinimum_amd64\cab1.cab se assente | aka.ms/vc14/vc_redist.x64.exeSolo Windows | Authenticode + SHA Firma Authenticode O=Microsoft Corporation su exe e vcruntime140.dll | tools\vcruntime\ (copiato in PHP, Apache, MongoDB) |
| Apache httpd | apachelounge.com/download/ (scraping versione e checksum) | apachelounge.com/download/VS<nn>/binaries/httpd-<v>-Win64-VS<nn>.zipmacOS e Linux: build del kit, github.com/nabre/atollo/releases/download/httpd-v<v>/httpd-<v>-<target>.tar.gz, SHA-256 fissato per target nel catalogo, PHP con php-fpm (D-116) | SHA-256 SHA-256 da <url>.txt (SHA256-Checksum for:) | apache\<linea>\bin\httpd.exe |
| Caddy | api.github.com/repos/caddyserver/caddy/releases?per_page=100 | Asset caddy_<v>_windows_amd64.zip dalla release GitHub ufficiale | SHA-256 GitHub Release asset.digest (dalla 2.10.1), altrimenti SHA-512 da caddy_<v>_checksums.txt | caddy\<linea>\caddy.exe |
| Rust (rustup, cargo, clippy) | static.rust-lang.org/dist/channel-rust-stable.toml ([pkg.rustc]) | static.rust-lang.org/rustup/dist/<triple>/rustup-init.exeHost gnu su Windows x64, gnullvm su Windows ARM64 (con C/C++), msvc dalla pagina di Rust in Strumenti («Dettagli»); macOS e Linux: rustup con l'host nativo | SHA-256 SHA-256 da <url>.sha256 | rust\cargo\bin\rustc.exe e rustup.exe |
| Go SDK | go.dev/dl/?mode=json (&include=all) | go.dev/dl/go<v>.windows-(amd64|arm64).zip | SHA-256 SHA-256 dal campo sha256 del JSON ufficiale | go\<linea>\bin\go.exe |
| Java JDK (Eclipse Temurin) | api.adoptium.net/v3/info/available_releases + /v3/assets/latest/<major>/hotspot | Pacchetto .zip restituito dall'API Adoptium | SHA-256 SHA-256 da binary.package.checksum | java\<linea>\bin\java.exe |
| ↳ Parte: Apache Maven | repo.maven.apache.org/maven2/org/apache/maven/apache-maven/maven-metadata.xml | apache-maven-<v>-bin.zip | SHA-512 SHA-512 da <url>.sha512 | maven\bin\mvn.cmd |
| ↳ Parte: Gradle | services.gradle.org/versions/current | Campo downloadUrl del JSON ufficiale | SHA-256 SHA-256 da checksumUrl del JSON | gradle\bin\gradle.bat (via data\kit\bin\gradle.cmd) |
| Kotlin Compiler | api.github.com/repos/JetBrains/kotlin/releases?per_page=100 | Asset kotlin-compiler-<v>.zip | SHA-256 GitHub asset.digest o <asset>.sha256 | kotlin\<linea>\bin\kotlinc.bat |
| Android SDK + Command-line Tools | developer.android.com/studio (tabella commandlinetools-win-*_latest.zip) | dl.google.com/android/repository/commandlinetools-win-<build>_latest.zip | SHA-256 SHA-256 pubblicato nella tabella ufficiale Android | android\cmdline-tools\latest\bin\sdkmanager.bat e adb.exe |
| .NET SDK | builds.dotnet.microsoft.com/dotnet/release-metadata/releases-index.json | Archivio .zip per rid=win-x64|win-arm64 | SHA-512 SHA-512 dal campo hash di releases.json | dotnet\<linea>\dotnet.exe (con junction SDK condivise) |
| Dart SDK | storage.googleapis.com/dart-archive/channels/stable/release/latest/VERSION | dartsdk-windows-<arch>-release.zip | SHA-256 SHA-256 da <url>.sha256sum | dart\<linea>\bin\dart.exe |
| Zig | ziglang.org/download/index.json | Campo tarball per (x86_64|aarch64)-windows | SHA-256 SHA-256 dal campo shasum del JSON | zig\<linea>\zig.exe |
| Julia | julialang-s3.julialang.org/bin/versions.json | Archivio .zip per os=winnt, arch=x86_64 | SHA-256 SHA-256 dal campo sha256 di versions.json | julia\<linea>\bin\julia.exe |
| Bun | api.github.com/repos/oven-sh/bun/releases | Asset bun-windows-(x64|aarch64).zip | SHA-256 GitHub asset.digest o SHASUMS256.txt | bun\<linea>\bun.exe |
| Deno | api.github.com/repos/denoland/deno/releases | Asset deno-(x86_64|aarch64)-pc-windows-msvc.zip | SHA-256 GitHub asset.digest o <asset>.sha256sum | deno\<linea>\deno.exe |
| Typst | api.github.com/repos/typst/typst/releases | Asset typst-(x86_64|aarch64)-pc-windows-msvc.zip | SHA-256 GitHub Release asset.digest | typst\<linea>\typst.exe |
| TinyTeX (LaTeX) | api.github.com/repos/rstudio/tinytex-releases/releases/latest | Asset TinyTeX-1-windows-v*.exe (7z SFX estratto in Rust)macOS e Linux: TinyTeX-1-<os>-<arch>-v*.tar.xz (universale su macOS) | SHA-256 GitHub Release asset.digest | tinytex\bin\windows\tlmgr.bat e pdftex.exe |
| pnpm + yarn (corepack) | registry.npmjs.org/pnpm/latest e /corepack/latest | Installato con npm-cli.js del Node.js del kit | npm sha512 Integrità del registro npm | data\npm-global\pnpm.cmd e yarn.cmd |
| CMake + Ninja | GitHub API: Kitware/CMake e ninja-build/ninja (releases/latest) | cmake-*-windows-(x86_64|arm64).zip e ninja-win(arm64).zip | SHA-256 GitHub Release asset.digest | cmake\<linea>\bin\cmake.exe e tools\ninja.exe |
| C/C++ (llvm-mingw) | api.github.com/repos/mstorsjo/llvm-mingw/releases/latest | Asset llvm-mingw-*-ucrt-(x86_64|aarch64).zipmacOS e Linux: shim cc, c++, gcc, g++, clang sullo zig cc del kit (richiede Zig) e GNU make da conda-forge, non rilocabile | SHA-256 GitHub Release asset.digest | cc\bin\clang.exe (+ make.cmd) |
| Ruby + Bundler | api.github.com/repos/oneclick/rubyinstaller2/releases?per_page=30 | Asset rubyinstaller-<v>-(x64|arm).7zmacOS e Linux: conda-forge ruby (3.2 e successive) con micromamba, non rilocabile | SHA-256 GitHub Release asset.digest | ruby\<linea>\bin\ruby.exe |
| R (conda-forge + OpenBLAS) | api.anaconda.org/package/conda-forge/r-base + mamba-org/micromamba-releases | micromamba-win-64 + pacchetti r-base e libblas=*=*openblasWindows ARM64: i pacchetti win-64 in emulazione x64, da micromamba nativo (--platform win-64). macOS e Linux: gli stessi pacchetti per osx-* e linux-*, lanciatori in kit-bin, non rilocabile | SHA-256 SHA-256 di micromamba + SHA-256 pacchetti conda-forge | r\<linea>\bin\R.cmd e Rscript.cmd |
| MySQL Community Server | Linee 8.4 e 9.7 LTS fissate nel catalogo (sha256ByLine) | cdn.mysql.com/Downloads/MySQL-<linea>/mysql-<v>-winx64.zip | SHA-256 SHA-256 fissato per linea e target dopo la firma GPG di Oracle | mysql\<linea>\bin\mysqld.exe e mysql.exe |
| MongoDB + mongosh + Database Tools | downloads.mongodb.org/current.json, GitHub mongodb-js/mongosh, tools/db/release.json | Archivi .zip Windows x64 di mongod, mongosh e mongodump/mongorestoremacOS: archivi del fornitore; Linux: server da conda-forge (non rilocabile), mongosh generico, Database Tools per distribuzione | SHA-256 SHA-256 dai JSON MongoDB + asset.digest GitHub per mongosh | mongodb\<linea>\bin\mongod.exe, mongosh\, mongodb-tools\ |
| phpMyAdmin (per MySQL) | www.phpmyadmin.net/home_page/version.json | files.phpmyadmin.net/phpMyAdmin/<v>/phpMyAdmin-<v>-all-languages.zip | SHA-256 SHA-256 dal file .sha256 ufficiale + controllo sintattico php -l | phpmyadmin\<linea>\index.php |
| mongo-express (per MongoDB) | versione fissata nel catalogo di Atollo (build del kit, D-147) | github.com/nabre/atollo/releases/download/mongo-express-v<v>/mongo-express-<v>.zip | SHA-256 SHA-256 fissato nel catalogo (o il .sha256 della release del kit); build in CI dal commit fissato di mongo-express | mongo-express\<linea>\app.js |
| SQLite CLI | sqlite.org/download.html (righe CSV PRODUCT,...) | sqlite.org/<anno>/sqlite-tools-win-(x64|arm64)-<v>.zipLinux ARM64: conda-forge sqlite (sqlite.org non pubblica gli strumenti), non rilocabile; Windows ARM64: lo zip x64 se manca quello arm64 | SHA3-256 SHA3-256 pubblicato nella riga PRODUCT della pagina ufficiale | sqlite\<linea>\sqlite3.exe |
Sotto il cofano
- Cartella di lavoro: <temporanei del sistema>\Atollo\<id del kit>\setup, oppure data\tmp\setup se il disco di sistema ha meno di 4 GB liberi o non si può scrivere.
- Tre tentativi a 5 e 10 secondi di distanza; il download riparte da capo a ogni tentativo.
- Connessioni con il proxy delle Impostazioni e con i certificati del sistema più quelli di «Certificati aggiuntivi (file PEM)»: l'ispezione HTTPS di un firewall funziona se il suo certificato è installato nel PC o è in quel file.
- La versione installata viene scritta in data\app\versions\<sistema>\<componente>.txt.