在前面的 win10 快速搭建各种开发环境中,我们已经学会了如何安装 Scoop 以及 Scoop 的基本使用,接下来让我们学习下 Scoop 的一些高级用法。
2 帮助命令Scoop 命令的信息是内置的,所以我们可以通过下面命令查看内置命令一些信息及用法:
scoophelp
运行将会输出下面内容:
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')
要查看特定命令的帮助,请运行下面命令:
scoophelp<command>
比如想要查看 cache 命令怎样使用,可以运行下面命令:
scoophelpcache
3 卸载 Scoop
如果你想卸载 Scoop 和所有与 Scoop 一起安装的程序,你可以运行下面命令:
scoopuninstallscoop
4 App Manifest4.1 简介
App Manifest 表示应用程序清单,它是一个 JSON 文件,定义了下载、校验、安装软件等信息,一个 App Manifest 就代表了一个软件,许多 App Mainifest 就组成了 Bucket,可以表示为一个软件仓库。
如果已知 App Manifest 文件位置,你还可以运行下面命令来安装软件:
scoopinstallshared/files/scoop/app.json
#或者
scoopinstallhttps://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[1] 这个 git 仓库的 bucket 文件夹下,它的文件名是 7zip.json,文件内容如下:
{
"version":"19.00",
"description":"Amulti-formatfilearchiverwithhighcompressionratios",
"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":"Download7-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。
Bucket 中文意思是桶,在 Scoop 中,Buckets 是应用程序的集合,也可以理解成一个软件配置清单仓库。更具体地说,Buckets 是一个 Git 存储库,其中包含描述如何安装应用程序的 JSON 配置清单。
默认情况下,当您运行 scoop install <app>,它会在 main 中查找,但也可以从其他 Bucket 安装。
Scoop 支持添加其他 Bucket,任何人都可以设置自己的 Bucket,其他人可以从这个 Bucket 添加和安装——他们只需要知道存储 Bucket 的 Git 存储库的位置。
5.2 查看已知 Bucket查看已知 Bucket,即 Scoop 已经知道这个桶在哪里,你可以运行下面命令:
scoopbucketknown
5.3 添加其它 Bucket
如果 Bucket 是 Scoop 已知的,你可以运行下面命令:
scoopbucketadd<bucketname>
#实例添加extrasbucket
scoopbucketaddextras
如果 Bucket 对于 Scoop 是未知的,你必须指定它的位置,即 Git 存储库,你可以运行下面命令:
scoopbucketadd<bucketname><gitlocation>
#实例添加extrasbucket
scoopbucketaddextrashttps://GitHub.com/lukesampson/scoop-extras.git
5.4 创建 Bucket
Scoop bucket 的创建的关键步骤如下:
- 使用 Bucket 模板创建一个 git 项目。
- 创建 App Manifest 文件。
- 提交文件。
- 将项目上传到 Gitee 或 GitHub。
Bucket 已经有了一套比较好的模板,这是当前 Scoop 社区的 Leader 写的 模板[2],我们可以直接下载下来使用,其他文件基本不用改动,将自定义的 App Manifest 放在 bucket 文件夹里面就行,App Manifest 配置完成后,提交代码,然后将将项目 push 到 Gitee 或 GitHub,然后本地添加这个 Bucket,添加命令如下:
scoopbucketadd<项目名><项目git地址>
6 实战:创建自己的 Bucket 并添加 chiner 软件6.1 简介
chiner 原名叫 PDMan,它是由国人开发的一款非常好用的数据库建模软件,代码开源,目前托管在码云上,目前 Scoop 的 Bucket 没有添加这个软件,所以让我们来学习下怎样添加这个软件到自己的 Bucket仓库。
6.2 配置 Bucket1.登录码云,创建一个仓库。
2.选择点击导入。
3.仓库 URL 配置为 Scoop 的模板 URL,然后配置仓库名称,配置完成后选择导入。
4.仓库创建好了,然后复制 URL,在命令运行 git clone <url>。
5.项目下载完成后,我们需要下载 chiner 这个软件,然后运行下面命令获取 hash:
certutil-hashfileCHINER-win_v3.3.0.exesha256
6.进入项目目录,在 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 的值。
7.保存文件,然后通过下面命令提交文件并推送到 Gitee:
gitadd*
gitcommit-m"addchinerapp"
gitpush
6.3 添加 Bucket 并安装软件
安装成功后,在菜单打开该软件。
7 总结Scoop 还有一些高级用法,我这里并没有列出来,那些用法一般不会用到,如果大家有兴趣,可以去看下官方文档。
参考资料[1] main: https://github.com/ScoopInstaller/Main
[2] 模板: https://github.com/Ash258/GenericBucket
,