尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

iii 引擎安装指南:从 curl|sh 一行安装到 install.sh 脚本全机制解析

iii 引擎安装指南:从 curl|sh 一行安装到 install.sh 脚本全机制解析 iii 引擎安装指南从 curl|sh 一行安装到 install.sh 脚本全机制解析【免费下载链接】iiiEffortlessly compose, extend, and observe every service in real-time for the first time ever.项目地址: https://gitcode.com/GitHub_Trending/mo/iii本文围绕 iii 官方安装文档docs/0-12-0/install.mdx展开先用官方脚本完成 iii 引擎的安装与版本校验再结合仓库中 850 余行的 engine/install.sh 及其配套测试讲清安装脚本的版本选择、平台检测、伴生二进制、幂等重跑与 PATH 配置等完整机制。读完本文你既能独立完成 iii 的安装也能理解脚本在每一步背后的行为与可定制参数。1. 一行命令安装 iii 引擎官方文档给出的标准安装方式是curl -fsSL https://install.iii.dev/iii/main/install.sh | sh该命令拉取安装脚本并交给sh执行。脚本是纯 POSIX shell 实现文件头为#!/usr/bin/env shset -eu不依赖 Node、Python 等运行时。根据 engine/install.sh 中内嵌的--help文本运行安装脚本需要三个前置工具curl下载发布资产jq解析 GitHub Release 的 JSON 元数据tar解包.tar.gz/.tgz资产若资产为.zip则还需要unzip。脚本在检测到缺失依赖时会输出带有修复提示的错误信息例如根据系统上已存在的包管理器brew/apt-get/dnf/yum/apk/pacman给出对应的安装建议对应 pkg_manager_hint() 函数该行为由单元测试 engine/tests/install_sh_unit.bats 中的 missing curl produces error with fix hint 用例守护。文档中另有一处面向后续迭代的注释TODO为不想校验远程脚本的用户和 Windows 用户增加直接下载二进制的替代路径。因此当前阶段curl | sh是文档给出的唯一安装入口需要预编译二进制时应直接查看仓库发布页的资产列表脚本在找不到匹配目标时会打印该提示见 install.sh 的资产缺失报错分支。1.1 安装脚本支持的命令行选项脚本的参数解析在 install.sh L224-L299完整选项如下选项作用-h,--help打印用法并退出--next安装最新的 next 预发布版本tag 名含-next.--rc安装最新的 release candidatetag 形如iii/vX.Y.Z-rc.N[VERSION]位置参数指定要安装的引擎版本号--no-cli/--cli-version/--cli-dir已废弃的空操作仅打印 deprecation 警告将在下个 minor 版本移除几个值得注意的约束--next与--rc不能同时使用脚本会在任何网络请求之前直接报错退出未知选项会触发unknown option: ... (use --help for usage)错误指定的版本若为预发布prerelease: true而未显式传入--next/--rc同样会被拒绝。这些行为都有自动化测试覆盖engine/tests/install_sh_integration.sh 验证了--help输出、未知 flag 拒绝、--next --rc冲突拒绝与--no-cli弃用警告。1.2 可用的环境变量--help文本声明了以下环境变量见 install.sh L259-L270变量说明VERSION要安装的引擎版本如0.11.0BIN_DIR引擎二进制安装目录默认取$PREFIX/bin若设置了 PREFIX否则为$HOME/.local/binPREFIX安装前缀默认$HOME/.localTARGET显式指定目标三元组如x86_64-apple-darwin、aarch64-unknown-linux-gnuIII_USE_GLIBCLinux x86_64 上使用 glibc 构建默认 musl任意非空值启用GITHUB_TOKEN为 GitHub API 调用鉴权把匿名限流从 60 次/小时提升到 5000 次/小时任意具有公开读取权限的 token 即可无需 scopehelp中给出的典型用法示例# 安装最新稳定版 curl -fsSL install.sh | sh # 安装 next 预发布 / release candidate curl -fsSL install.sh | sh -s -- --next curl -fsSL install.sh | sh -s -- --rc # 锁定版本 curl -fsSL install.sh | VERSION0.11.0 sh # 指定安装目录 curl -fsSL install.sh | BIN_DIR/usr/local/bin sh以上示例取自 install.sh 的 USAGE 文本install.sh处替换为实际的安装脚本地址即可。2. 脚本如何挑选要安装的版本理解版本选择逻辑才能明白VERSION、--next、--rc各自的触发时机。整个决策链在 install.sh L379-L462优先级从高到低为III_RELEASE_TAG显式钉住一个精确的 release tag例如独立命名空间下的 alpha tag。此路径绕过常规的iii/vversiontag 构造允许安装位于不同 tag 命名空间的隔离 alpha 发布且不做预发布拒绝。VERSION按iii/vversion查询 GitHub Release查不到再回退尝试vversion。命中的 release 若是预发布且未显式选择预发布通道则报错提示改用稳定版或传--next/--rc。--rc列出最近 20 个 release用正则^iii/v\d\.\d\.\d-rc\.\d$选出第一个 RC。--next同样列出最近 20 个 release选出 tag 含-next.的第一个。默认latest先调用/releases/latest单次 API 调用GitHub 保证非预发布并校验 tag 以iii/v开头校验失败则回退到列表过滤prerelease false的iii/v*release。所有 GitHub API 调用都经过 curl_retry() 包装--retry 5 --retry-delay 2 --retry-max-time 120 --connect-timeout 10注释明确说明只使用 curl 7.12.32005 年即有的 flag避免--retry-all-errors这类 7.71 才引入的选项以兼容老版本 curl。遇到 403/429 时脚本会给出明确的限流错误提示并建议设置GITHUB_TOKEN见 github_rate_limited / check_rate_limit_or_continue。3. 平台检测与资产选择3.1 目标三元组推导平台检测逻辑在 install.sh L317-L373架构由uname -m映射x86_64/amd64→x86_64arm64/aarch64→aarch64armv7*→armv7不支持的架构直接报错并提示可用TARGET覆盖。操作系统映射Darwin→apple-darwinLinux 下按架构细分aarch64→aarch64-unknown-linux-gnuarmv7→armv7-unknown-linux-gnueabihfx86_64→ 默认musl静态构建unknown-linux-musl仅当显式设置III_USE_GLIBC时才走 glibc 构建且会先用ldd --version探测系统 glibc要求不低于 2.35不满足时打印警告并回退到 musl见 L344-L357。3.2 主二进制与伴生二进制脚本从 release 的assets中按iii-target前缀匹配.tar.gz/.tgz/.zip资产L476-L479。匹配不到时会列出该 release 中所有可用的主二进制目标并给出四条建议装稳定版、钉版本、覆盖 TARGET、浏览发布页然后以error: no release asset found for target: target退出。除主二进制外脚本还会按平台安装两个伴生二进制best-effort失败只警告不致命伴生二进制目标用途脚本注释iii-initLinux x86_64 用 musl 构建aarch64 用 gnu 构建macOS 两种架构均安装运行在 VM 内部的 Linux ELF 初始化程序macOS 宿主的 libkrun 客户机也需要它iii-worker仅 Linux x86_64/aarch64gnu 构建与 macOS aarch64依赖 glibcKVM/libkrunmacOS Intel 上不可用下载阶段三个 tarball 会被解析 URL 后顺序下载终端可见时带进度条主二进制缺失是致命错误伴生二进制缺失只记警告L628-L683。安装完成后脚本对两类失败场景分别打印说明iii-init缺失时VM-based sandbox workers will be unavailableiii-worker缺失时VM isolation features will be unavailable并提示可重跑 install.sh 或从发布页手动补装L796-L808。macOS Intel 机器还会额外收到一行提示VM 隔离sandboxed workers特性在该机器上不可用L790-L794。4. 幂等重跑、升级路径与 PATH 配置4.1 幂等性已安装同版本则直接跳过脚本在开始下载前会比较目标目录中已有二进制的版本与目标版本iii_detect_from_version() 通过bin --version | awk {print $NF}提取版本号若已是目标版本打印iii is already at vX.Y.Z — nothing to do后直接退出L544-L550——这条必须不重复下载的规则被集成测试中的 idempotent re-run detected 用例显式守护install_sh_integration.sh L113-L121。若存在旧版本脚本把本次操作标记为upgrade输出upgraded iii: vold - vnew而非installed并有独立测试用例验证该消息差异L124-L148测试用一个伪造的iii 0.0.1-test-shim版本垫片模拟升级场景。4.2 安装动作本身主二进制被以 mode 755 安装到$BIN_DIR/iii优先用install -m 755否则cpchmod 755见 install_bin()。安装后立即执行一次bin --version做校验若无输出则警告二进制可能无法在本机运行Gatekeeperlibc 不匹配并给出手动重试命令L782-L784。4.3 PATH 引导若$BIN_DIR不在PATH中脚本会按当前 shell 给出针对性指引L814-L851# bashmacOS 用 .bash_profileLinux 用 .bashrc echo export PATH$HOME/.local/bin:$PATH ~/.bashrc source ~/.bashrc # zsh echo export PATH$HOME/.local/bin:$PATH ~/.zshrc # fish fish_add_path $HOME/.local/bin注意脚本打印的这些行中$PATH、$bin_dir是有意保持字面量的等待用户 shell 启动时再展开源码注释里专门对 shellcheck 做了 disable 说明。5. 验证安装iii --version安装完成后文档要求执行验证命令iii --version应返回一个版本号。在源码层面--version/-v由 clap 定义在 engine/src/main.rs L108-L110处理逻辑是打印编译期注入的CARGO_PKG_VERSION后立即退出main.rs L329-L332因此该命令不依赖任何引擎服务或网络。当前仓库中引擎的版本声明为0.23.0-rc.9见 engine/Cargo.toml。6. 引擎与 SDK 的版本对齐文档中特别强调了一条版本纪律Info 框引擎与各 SDK 包在同一个 minor 线内可能有不同的 patch 版本。除非 release note 另有说明应保持引擎与 SDK 处于同一 minor 版本例如0.11.x。仓库中的多语言 SDK 位于 sdk/ 目录node、python、rust、go四个子包sdk/README.md 与其各语言包 manifest 是核对 SDK 版本线时的依据。实际使用时把该条规则理解为锁定引擎 minor 版本后SDK 依赖也应钉在同一 minor 线避免跨 minor 的协议/行为漂移。7. 隐藏细节安装脚本与 CLI 之间的遥测协议安装脚本在安装/升级成功与失败时会通过一个隐藏 CLI flag 向二进制发送生命周期事件。脚本侧的发送逻辑在 iii_emit_event()以--install-only-generate-ids --install-event-type type --install-event-properties json调用目标二进制任何失败都被静默吞掉|| true绝不影响安装结果。二进制侧这三个隐藏 flag 定义在 engine/src/main.rs L116-L126hide true不出现在常规 help 中。命中时程序生成/解析设备 ID 与执行上下文并把install_event_properties的 JSON 反序列化后交给cli::telemetry::send_install_lifecycle_event发送main.rs L334-L349随后立即返回、不启动引擎。事件类型包括install_started/install_succeeded/install_failed/upgrade_started/upgrade_succeeded/upgrade_failed属性中带install_method: sh、源版本/目标版本、错误阶段等信息。由于发送路径完全 best-effort对普通用户而言这只是安装输出的附属行为。另一个隐藏机制是测试钩子设置环境变量III_INSTALL_SH_TEST_MODE后脚本在函数定义完成后即提前返回install.sh L207-L214。Bats 单元测试正是借此 source 脚本并只测json_str、pkg_manager_hint、install_bin、iii_detect_from_version等辅助函数而不触发真实安装engine/tests/install_sh_unit.bats。8. 测试如何守护安装脚本仓库对 install.sh 有两层测试可作为该脚本行为可信的依据单元测试engine/tests/install_sh_unit.batsBats 框架覆盖 JSON 转义引号、反斜杠、换行、空串、install_bin权限位 755、版本号提取、--help输出内容含jq依赖提示、目标三元组示例、环境变量前置写法、未知 flag 报错、弃用 flag 警告、缺依赖时的修复提示。集成冒烟测试engine/tests/install_sh_integration.sh需要网络本地默认跳过RUN_NETWORK_TESTS1或 CI 中执行。它对真实 GitHub API 走完整安装验证点包括--help用法输出、未知 flag 与--next --rc冲突被拒绝、钉住PINNED_VERSION默认0.11.0真实安装后iii --version有输出、同版本重跑幂等、升级路径输出upgraded。脚本注释还解释了为何不直接装latest而钉版本新 release 发布中时/releases/latest可能指向资产尚未上传完成的 tag导致过滤器取空。9. 下一步快速上手安装并验证后跟随 Quickstart 探索一个运行中的 iii 应用生产使用查阅 using-iii 文档目录 了解引擎配置、console、部署等主题本机配置参考仓库自带的 engine/config.yaml 是引擎配置的一个真实样例可作为安装后编写config.yaml的起点。安装完成后若iii --version无输出可优先按脚本自身给出的排查顺序检查Gatekeeper 拦截macOS、libc 不匹配Linux glibc 构建、以及$BIN_DIR是否真的在PATH中。【免费下载链接】iiiEffortlessly compose, extend, and observe every service in real-time for the first time ever.项目地址: https://gitcode.com/GitHub_Trending/mo/iii创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表