1 概述
在前面的 win10 快速搭建各种开发环境中,我们已经学会了如何安装 Scoop 以及 Scoop 的基本使用,接下来让我们学习下 Scoop 的一些高级用法。
2 帮助命令
Scoop 命令的信息是内置的,所以我们可以通过下面命令查看内置命令一些信息及用法:
scoop help
运行将会输出下面内容:
alias 管理别名
bucket 管理软件源
cache 显示或清除下载缓存
checkup 检查潜在问题
cleanup 通过删除旧版本来清理应用程序
config 获取或设置配置值
create 创建一个自定义应用程序清单
depends 列出应用程序的依赖项
export 导出(一个可导入的)已安装的应用程序列表
help 显示命令的帮助
hold 禁用应用程序更新
home 打开应用程序主页
info 显示应用程序的信息
install 安装应用程序
list 已安装的应用程序列表
prefix 返回指定应用程序的路径
reset 切换应用程序版本
search 搜索可用的应用程序
status 显示状态和检查新的应用程序版本
unhold 启用应用程序更新
uninstall 卸载应用程序
update 更新应用程序或Scoop本身
virustotal 在virustotal.com上寻找应用程序的哈希
which 定位shim/可执行文件(类似于 Linux 上的 'which')
要查看特定命令的帮助,请运行下面命令:
scoop help <command>
比如想要查看 cache
命令怎样使用,可以运行下面命令:
scoop help cache
3 卸载 Scoop
如果你想卸载 Scoop 和所有与 Scoop 一起安装的程序,你可以运行下面命令:
scoop uninstall scoop
4 App Manifest
4.1 简介
App Manifest 表示应用程序清单,它是一个 JSON 文件,定义了下载、校验、安装软件等信息,一个 App Manifest 就代表了一个软件,许多 App Mainifest 就组成了 Bucket,可以表示为一个软件仓库。
如果已知 App Manifest 文件位置,你还可以运行下面命令来安装软件:
scoop install shared/files/scoop/app.json
# 或者
scoop install https://gist.github.com/xxxx/xxxx/raw/app.json
4.2 属性
4.2.1 必须属性
version
:表示应用程序版本信息。
4.2.2 可选属性
##
: 包含注释的单行字符串或字符串数组。
architecture
:如果应用程序有 32 位和 64 位版本,可以使用这个来表示,它有两个子属性,一个是 32bit
,一个是64bit
,这两个属性都可以使用 bin
、checkver
、extract_dir
、hash
、installer
、pre_install
、post_install
、shortcuts
、uninstaller
、url
等属性,示例如下:
"architecture": {
"64bit": {
"url": "https://7-zip.org/a/7z1900-x64.msi",
"hash": "a7803233eedb6a4b59b3024ccf9292a6fffb94507dc998aa67c5b745d197a5dc"
},
"32bit": {
"url": "https://7-zip.org/a/7z1900.msi",
"hash": "b49d55a52bc0eab14947c8982c413d9be141c337da1368a24aa0484cbb5e89cd"
}
},
autoupdate
:定义如何自动更新 App Manifest 文件,示例如下:
"checkver": {
"re": "/(?<type>early_access|GA)/(?<path>jdk(?<major>[\\d.]+)(?:.*)?/(?<build>[\\d]+)(?:/GPL|/binaries)?)/(?<file>openjdk-(?<version>[\\d.]+)(?<ea>-ea)?(?:\\+[\\d]+)?_windows-x64_bin.(zip|tar.gz))",
"replace": "${version}-${build}${ea}"
},
"autoupdate": {
"architecture": {
"64bit": {
"url": "https://download.java.net/java/$matchType/$matchPath/$matchFile"
}
},
"hash": {
"url": "$url.sha256"
},
"extract_dir": "jdk-$matchVersion"
}
bin
:应用程序可执行文件。您还可以创建别名 shim
,它使用与实际可执行文件不同的名称,并(可选)将参数传递给可执行文件,格式为: [ "program.exe", "alias", "--arguments" ]
,示例如下:
"bin": [
"busybox.exe",
[
"busybox.exe",
"ar",
"ar"
],
[
"busybox.exe",
"arch",
"arch"
]
]
checkver
:应用维护者和开发者可以使用 scoop/bin/checkver
目录下的 checkver.ps1
工具来检查应用版本。checkver
清单中的属性是一个正则表达式,可用于匹配应用主页中应用的当前稳定版本,示例如下:
"checkver": {
"url": "https://golang.org/dl/",
"regex": "go([\\d.]+)\\.windows-"
},
depends
:将自动安装应用程序的运行时依赖项。
description
:对应用程序的描述,不要包含程序的名称,如果它与应用程序的文件名相同。
env_add_path
: 将此目录添加到用户路径或系统路径,该目录是相对于安装目录的,并且必须在安装目录中。
env_set
: 为用户或系统,设置一个或多个环境变量,示例如下:
"env_set": {
"GOROOT": "$dir"
},
extract_dir
: 如果 url 指向一个压缩文件(支持 .zip
、.7z
、.tar
、.gz
、.lzma
和 .lzh
),Scoop 将只提取其中指定的目录。
extract_to
: 如果 url 指向一个压缩文件(.zip
、.7z
、.tar
、.gz
、.lzma
和 .lzh
支持),Scoop 会将所有内容提取到指定的目录。示例如下:
"extract_to": [
"",
"Plugins"
],
hash
: 一个字符串或字符串数组,其中每个 URL 都有一个文件哈希 url。默认情况下,散列是 SHA256
,但您可以通过在散列字符串前加上 sha512:
、sha1:
或md5:
前缀来使用 SHA512、SHA1 或 MD5。
homepage
:程序的主页。
innosetup:true
如果安装程序基于 InnoSetup
,则设置该值。
installer
:运行非 MSI 安装程序的说明。
-
file
: 安装程序可执行文件。 -
script
:要作为安装程序/卸载程序执行的命令。 -
args
:传递给安装程序的参数数组,可选的。 -
keep:true
:如果安装程序在运行后应该保留(以供将来卸载为例),则设置该值,如果省略或设置为任何其他值,安装程序将在运行后被删除。可以参考extras/oraclejdk
示例。在uninstaller
指令中使用时,将忽略此选项。 -
$fname
、$manifest
、$architecture
、$dir
等变量可用于script
和args
属性。 - 在
scoop install
和scoop upgrade
运行期间调用。
license
:程序软件许可证,对于众所周知的许可证,请使用 https://spdx.org/licenses/
上的标识符,对于其他许可证,请使用许可证的 URL(如果可用)。
notes
:单行字符串或字符串数组,在安装应用程序后显示一条消息。
persist
: 应用程序数据持久化。
post_install
:安装应用程序后要执行的命令,可以使用变量,如 $dir
,$persist_dir
和 $version
。
pre_install
: 与post_install
相同的选项,但在安装应用程序之前执行。
psmodule
:作为 PowerShell 模块安装在 ~/scoop/modules
。name
(必需):模块的名称,该名称应至少与解压目录中的一个文件匹配,以便 PowerShell 将其识别为模块。
shortcuts
:在开始菜单中添加快捷方式。该数组必须包含一个可执行文件/标签对。第三个和第四个元素是可选的。
- 目标文件的路径,必填。
- 快捷方式的名称(支持子目录:
<AppsSubDir>\\<AppShortcut>
例如sysinternals
),必需。 - 启动参数, 可选。
- 图标文件的路径, 可选。
suggest
:显示一条建议消息。
uninstaller
:与installer
相同的选项,运行文件/脚本以卸载应用程序。
url
:要下载的文件的 URL。如果有多个 URL,您可以使用 JSON 数组。
4.3 示例
我们可以看下 7zip
这个软件的 App Manifest 是怎样的,7zip
放在 main 这个 git 仓库的 bucket 文件夹下,它的文件名是 7zip.json
,文件内容如下:
{
"version": "19.00",
"description": "A multi-format file archiver with high compression ratios",
"homepage": "https://www.7-zip.org/",
"license": {
"identifier": "Freeware,LGPL-2.0-only,BSD-3-Clause",
"url": "https://www.7-zip.org/license.txt"
},
"architecture": {
"64bit": {
"url": "https://7-zip.org/a/7z1900-x64.msi",
"hash": "a7803233eedb6a4b59b3024ccf9292a6fffb94507dc998aa67c5b745d197a5dc"
},
"32bit": {
"url": "https://7-zip.org/a/7z1900.msi",
"hash": "b49d55a52bc0eab14947c8982c413d9be141c337da1368a24aa0484cbb5e89cd"
}
},
"extract_dir": "Files\\7-Zip",
"bin": "7z.exe",
"shortcuts": [
[
"7zFM.exe",
"7-Zip"
]
],
"checkver": {
"url": "https://www.7-zip.org/download.html",
"regex": "Download 7-Zip ([\\d.]+)"
},
"autoupdate": {
"architecture": {
"64bit": {
"url": "https://7-zip.org/a/7z$cleanVersion-x64.msi"
},
"32bit": {
"url": "https://7-zip.org/a/7z$cleanVersion.msi"
}
}
}
}
该文件描述从哪里下载 7zip
这个软件,怎样校验下载的软件,怎样进行安装等,一般配置 version
、homepage
、architecture
、url
、hash
、bin
这几个属性就可以了,其它的是可选的。
App Manifest 开始编写的时候,需要到官网,把软件下载下来,然后本机查看 hash
,默认为 sha256
码,也有 md5
和 sha1
形式的,命令如下:
certutil -hashfile [file] sha256
certutil -hashfile [file] md5
certutil -hashfile [file] sha1
获取到软件的 hash
后直接填入到 App Manifest。
url
是比较难处理的。简单说,开源软件最方便,很多可以开箱即用,而非开源的不少就特别繁琐,有的甚至处理不了。现在简单介绍下一般情况:
-
.msi
类:一般不需要改变。 -
.zip
类:一般不需要改变,部分需要在下载链接末尾添加#/dl.7z
。 -
.exe
类:大部分都需要在下载链接末尾添加#/dl.7z
,Scoop 默认使用 7zip 进行解压安装,不能直接解压的,如果内置有innosetup
,需要在脚本里添加,"innosetup": true。
5 Bucket
5.1 简介
Bucket 中文意思是桶,在 Scoop 中,Buckets 是应用程序的集合,也可以理解成一个软件配置清单仓库。更具体地说,Buckets 是一个 Git 存储库,其中包含描述如何安装应用程序的 JSON 配置清单。
默认情况下,当您运行 scoop install <app>
,它会在 main
中查找,但也可以从其他 Bucket 安装。
Scoop 支持添加其他 Bucket,任何人都可以设置自己的 Bucket,其他人可以从这个 Bucket 添加和安装——他们只需要知道存储 Bucket 的 Git 存储库的位置。
5.2 查看已知 Bucket
查看已知 Bucket,即 Scoop 已经知道这个桶在哪里,你可以运行下面命令:
scoop bucket known
5.3 添加其它 Bucket
如果 Bucket 是 Scoop 已知的,你可以运行下面命令:
scoop bucket add <bucket name>
# 实例添加 extras bucket
scoop bucket add extras
如果 Bucket 对于 Scoop 是未知的,你必须指定它的位置,即 Git 存储库,你可以运行下面命令:
scoop bucket add <bucket name> <git location>
# 实例添加 extras bucket
scoop bucket add extras https://github.com/lukesampson/scoop-extras.git
5.4 创建 Bucket
Scoop bucket 的创建的关键步骤如下:
- 使用 Bucket 模板创建一个 git 项目。
- 创建 App Manifest 文件。
- 提交文件。
- 将项目上传到 Gitee 或 GitHub。
Bucket 已经有了一套比较好的模板,这是当前 Scoop 社区的 Leader 写的 模板,我们可以直接下载下来使用,其他文件基本不用改动,将自定义的 App Manifest 放在 bucket 文件夹里面就行,App Manifest 配置完成后,提交代码,然后将将项目 push
到 Gitee 或 GitHub,然后本地添加这个 Bucket,添加命令如下:
scoop bucket add <项目名> <项目 git 地址>
6 实战:创建自己的 Bucket 并添加 chiner 软件
6.1 简介
chiner 原名叫 PDMan,它是由国人开发的一款非常好用的数据库建模软件,代码开源,目前托管在码云上,目前 Scoop 的 Bucket 没有添加这个软件,所以让我们来学习下怎样添加这个软件到自己的 Bucket仓库。
6.2 配置 Bucket
- 登录码云,创建一个仓库。
- 选择点击导入。
- 仓库 URL 配置为 Scoop 的模板 URL,然后配置仓库名称,配置完成后选择导入。
- 仓库创建好了,然后复制 URL,在命令运行
git clone <url>
。
- 项目下载完成后,我们需要下载 chiner 这个软件,然后运行下面命令获取
hash
:
certutil -hashfile CHINER-win_v3.3.0.exe sha256
- 进入项目目录,在
bucket
目录里创建chiner.json
文件,文件内容如下:
{
"version": "3.3.0",
"description": "元数建模,一款丰富数据库生态,独立于具体数据库之外的,数据库关系模型设计平台。",
"homepage": "http://www.pdman.cn/#/",
"license": "MIT",
"architecture": {
"32bit": {
"url": "http://chiner-release.httpchk.com/CHINER-win_v3.3.0.exe#/dl.7z",
"hash": "d7ec91e6b820dcf269351829267f5c33c791d81b132bdcc4f15c798724376518",
"pre_install": [
"Expand-7zipArchive \"$dir\\`$PLUGINSDIR\\app-32.7z\" \"$dir\"",
"Remove-Item \"$dir\\`$*\", \"$dir\\Uninstall*\" -Recurse"
]
}
},
"bin": "CHINER元数建模.exe",
"shortcuts": [
[
"CHINER元数建模.exe",
"CHINER元数建模"
]
]
}
bin
属性获取,你可以解压 chiner 这个软件,然后再解压 app-32.7z
,解压后里面的可执行文件就是 bin
的值。
- 保存文件,然后通过下面命令提交文件并推送到 Gitee:
git add *
git commit -m "add chiner app"
git push
6.3 添加 Bucket 并安装软件
安装成功后,在菜单打开该软件。
7 总结
Scoop 还有一些高级用法,我这里并没有列出来,那些用法一般不会用到,如果大家有兴趣,可以去看下官方文档。