使用 curl/wget 一键安装 CLI 程序
🛠️

使用 curl/wget 一键安装 CLI 程序

Tags
Golang
GoReleaser
Published
Aug 4, 2022

背景

我们在看一些知名开源项目的时候,经常可以看到它们提供通过脚本一键安装命令,比如:
notion image
notion image
这种安装方式比较优雅,也十分极客。
本文探讨如何实现通过脚本一键安装 CLI 程序的方式。
这里补充一下为什么我会写这篇文章探讨脚本安装方式?
其实我之前维护的一个 CLI 程序提供了 homebrew 安装方式,用户可以通过执行 brew install xxx 一键安装 CLI 程序,同样十分优雅。
但是不可避免的是,包管理工具仍然有它们自己的依赖,比如 homebrew 的依赖之一 sofawareupdate 如果版本过低的话,会导致安装失败。
曾经有个用户就遇到了这个问题,他用 homebrew 安装失败后跑过来问你们还有其它安装方式吗?我只能指导他去 Github Release 页面直接下载安装包,这个过程中还需要询问用户是什么平台的操作系统,指导他将安装包解压到指定位置,然后配置 PATH,额外耗费了不少沟通成本。
安装脚本就是另外一种可以将这个过程自动化、且依赖更少的安装 CLI 程序的方式。
 

分析和实现

使用脚本一键安装 CLI 程序的优势和限制:
优势
  • 一键安装,十分优雅+极客
  • 相比 homebrew 或者使用其它包管理工具的方式,依赖更少,只有 curl/wget
 
限制
  • 只能提供给类 UNIX 系统使用,比如 Linux、MacOS,Windows 系统只能去下载 binary(为 windows 用户鸣不平)
 
实现
  • 准备好安装脚本,包含自动识别操作系统、shell 名称、准备下载链接、下载安装包、解压缩、自动覆写 PATH(比如 shell 是 zsh 就自动将 PATH 命令追加到 .zshrc 中)等功能; 这种脚本在 Github 上面有很多借鉴,比如 wasmtime 或者 volta 的安装脚本。 这里我准备好了一个样例程序 go-cli-prototype,帮助你快速搭建自己的安装脚本,可以参考:go-cli-prototype/install.sh at master · elliotxx/go-cli-prototype (github.com)
  • 准备好能够获取到安装脚本的链接地址,比如存放到代码仓库中通过 Github Raw 链接获取脚本内容,或者像一些知名项目一样将安装脚本挂载到官方域名下面; 这里推荐直接将安装脚本放到 Github 仓库中,简单粗暴。 以上面的样例程序 go-cli-prototype 为例,你可以通过下面链接地址一键安装 CLI 程序: curl -sSf https://raw.githubusercontent.com/elliotxx/go-cli-prototype/master/scripts/install.sh | bash
    • 安装界面如下:
      notion image
 

参考资料