详解Scoop清单Manifests属性

偏向技术
/ 0 评论 / 370 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年03月31日,已超过1332天没有更新,若内容或图片失效,请留言反馈。

Scoop下载安装应用是基于App Manifests描述的信息来执行的,

version

必填,指定安装应用程序的版本

##

注释,单行字符串或字符串数组

architecture

如果应用程序包含32位和64位版本,architecture字段可以用来包含这两种架构

32bit | 64bit

包含特定于架构的指令,bin, checkver, extract_dir, hash, installer, pre_install, post_install, shortcuts, uninstaller, url, 和 msi(不推荐)

autoupdate

定义如何自动更新,除了autoupdate.note属性之外,所有属性都可以为architecture全局设置,也可以为architecture.64bit和architecture.32bit单独设置,全局属性可用于更新每个architecture属性,即,如果仅全局设置,则autoupdate.url可用于更新architecture.64bit.url或architecture.32bit.url

  • url:"uri",用于生成新url的网址模板
    • scoop将通过在URL后面附加#/dl.7z或#/pngcrush.exe重命名文件(用于提取安装程序或重命名可执行文件的版本字符串)
    • 支持捕获变量
    • 支持版本变量
  • hash:"object",设置此属性以获取哈希值,而无需下载实际文件
    • 哈希值可以通过以下方法直接提取(autoupdate.hash.mode):
    • 对纯文本文件或网页使用RegEx(extract, predefined fosshub, sourceforge)
    • 将JSONPath用于JSON文件(json)
    • 将XPath用于XML文件(xpath)
    • 对RDF文件使用摘要(rdf)
    • 对Metalink使用下载头或.meta4(metalink)
    • hash.url支持捕获变量、版本变量和url变量
    • 属性说明
    • mode:"string|enum"
      • extract:RegEx从纯文本文件或网页中提取(默认,可以省略)
      • json:通过JSONPath从JSON文件中提取
      • xpath:XPath从XML文件中提取
      • rdf:从RDF文件中提取
      • metalink:从Metalink的标题或.meta4文件中提取
      • fosshub:自动。为FossHub预先定义
      • sourceforge:自动。为SourceForge预先定义
      • download:下载应用程序文件并在本地对其进行哈希处理(Fallback)
    • url:"uri",用于下载RDF / JSON文件或提取哈希的URL模板
    • regex|find:"regex",RegEx表达式以提取哈希
    • jsonpath|jp:"jsonpath",JSONPath表达式提取哈希
    • xpath:"string",XPath表达式提取哈希
    • extract_dir:"string",选择更新extract_dir
    • note:"string",运行autoupdate命令时显示的可选消息

bin

程序(可执行文件或脚本)的字符串或字符串数​​组,可在用户的环境变量中使用

  • 你可以创建一个与实际可执行文件名称不同的别名shim,并且允许将参数传递给可执行文件,而不仅仅是使用字符串,[ "program.exe", "alias", "--arguments" ]
  • 但是,如果仅声明一个这样的shim,则必须确保将其封装在外部数组中,[ [ "program.exe", "alias" ] ],否则,它将被视为单独的shim

checkver

应用程序维护人员和开发人员可以使用bin/checkver工具来检查应用程序的更新版本。checkver属性在manifest中是一个正则表达式,可用于匹配应用程序首页中应用程序的当前稳定版本。属性有url和regex,checkver: "regex",用于在主页上查找版本

  • github:应用程序的Github存储库的URL
  • url:可以找到版本的页面地址,支持版本变量
  • regex|re:"regex",正则表达式,用于寻找版本
  • jsonpath|jp: "jsonpath",JSONPath表达式,用于寻找版本
  • xpath:"string",XPath表达式,用于寻找版本
  • reverse:“boolean”,是否与找到的最后一个匹配
  • replace:"string",将匹配值替换为计算值,支持版本变量
  • useragent:"string",用来获取网页内容的用户代理(仅在fiddler中使用),支持版本变量

depends

应用程序的运行时依赖关系,它将自动安装。另请参见suggest(下文),以替代depends

description

字符串,包含对该应用程序的简短描述。如果程序名称与应用程序的文件名相同,则不要包含该程序的名称

env_add_path

将此目录添加到用户路径(如果使用--global,则添加到系统路径)。该目录是相对于安装目录的,必须在安装目录内

env_set

为用户(或系统,如果使用--global)设置一个或多个环境变量

extract_dir

如果url指向压缩文件(支持.zip,.7z,.tar,.gz,.lzma和.lzh),则Scoop将从其中提取指定的目录

extract_to

如果url指向压缩文件(支持.zip,.7z,.tar,.gz,.lzma和.lzh),则Scoop会将所有内容提取到指定的目录中

hash

url中的每个URL带有文件哈希的字符串或字符串数​​组。默认情况下,哈希是SHA256,但是您可以通过在哈希字符串前添加“ sha512:”,“ sha1:”或“ md5:”来使用SHA512,SHA1或MD5

homepage

程序的主页,比如官网首页

innosetup

如果安装程序基于InnoSetup,则设置为布尔值true(不带引号)

installer

运行非MSI安装程序的说明

  • file:安装程序可执行文件。对于installer,默认为上次下载的URL。必须为uninstaller指定
  • script:作为installer/uninstaller要执行的命令,而不是file的单行字符串或字符串数​​组
  • args:传递给安装程序的参数数组(可选)
  • keep:"true",是否应在运行后保留安装程序(例如,将来用于卸载),如果省略或设置为任何其他值,则运行后将删除安装程序,在uninstaller指令中使用时,此选项将被忽略

license

该程序的软件许可证的字符串或哈希值,对于知名许可证,请使用在spdx上找到的标识符,比如MIT,对于其他许可证,使用许可证的URL,如果URL不可用,请酌情使用“Freeware”,“Proprietary”,“Public Domain”,“Shareware”或“Unknown”,如果不同的文件具有不同的许可证,请使用(,)分隔单独的许可证,如果整个应用程序都是双重许可的,请使用(|)分隔单独的许可。

  • identifier:SPDX标识符,或适当的“Freeware”, “Proprietary”, “Public Domain”, “Shareware”, or “Unknown”
  • url:对于非SPDX许可证,请包含许可证链接。也可以包含指向SPDX许可证的链接
  • 如果很难确定所有不同的许可证,可以在SPDX列表的末尾添加省略号(...),如果既有开源许可证又没有开源许可证,请首先列出所有非开源许可证(例如,Freeware/Proprietary/Shareware)。
  • 如果您无法确定该应用程序拥有什么许可证,请使用“Unknown”。

notes

单行字符串或字符串数​​组,并在安装应用程序后显示一条消息。

persist

目录和文件的字符串或字符串数​​组,用于保留在应用程序的数据目录中。

post_install

安装应用程序后要执行的命令的单行字符串或字符串数​​组。可以使用$dir, $persist_dir, 和 $version等变量,具体详见说明

pre_install

与post_install相同的选项,但在安装应用程序之前执行。

psmodule

作为powershell模块安装在~/scoop/modules目录下

  • name:必选,模块的名称,该名称应与提取目录中的至少一个文件匹配,以便PowerShell将其识别为模块。

shortcuts

指定在开始菜单中可用的快捷方式值,该数组必须包含一个可执行文件/标签对。第三和第四元素是可选的。
i. 目标文件的路径[必填]
ii. 快捷方式的名称(支持子目录:\)[必需]
iii. 启动参数[可选]
iv. 图标文件的路径[可选]

suggest

显示一条消息,提示提供补充功能的可选应用

  • ["Feature Name"] = [ "app1", "app2"... ],比如,"JDK": [ "extras/oraclejdk", "openjdk" ],如果已经安装了针对该功能建议的任何应用,则该功能将被视为“已实现”,用户将看不到任何建议

uninstaller

与安装程序相同的选项,但运行file/script来卸载应用程序

url

要下载的文件的URL。如果下载地址不止一个,则可以使用JSON数组,比如,"url": [ "http://example.org/program.zip", "http://example.org/dependencies.zip" ],下载地址支持HTTP, HTTPS 和 FTP协议

  • 要更改下载的URL的文件名,可以将URL片段(以#开头)附加到URL。比如
  • "http://example.org/program.exe" -> "http://example.org/program.exe#/dl.7z"
  • 请注意,该片段必须以#/开头才能起作用。
  • 在上面的示例中,Scoop将下载program.exe,但将其保存为dl.7z,然后将使用7-Zip自动提取,此技术通常在Scoop清单中用于绕过可执行安装程序,这些安装程序可能具有不良的副作用,例如注册表更改,放置在安装目录之外的文件或管理员提升提示。

cookie

内部可用变量

捕获变量(Captured variables)

  • 用于checkver.replace
    • ${1}, ${2}, ${3}...,未命名的组
    • ${name1}, ${Name2}, ${NAME3},命名组
    • (?...), (?...), (?...)...
  • 用于autoupdate
    • $match1, $match2, $match3,未命名的组
    • $matchName1, $matchName2, $matchName3...,命名组
    • (?...), (?...), (?...)...
    • 注意变量名中唯一的大写字符

版本变量(Version variables)

  • $version: 3.7.1
  • $underscoreVersion: 3_7_1
  • $dashVersion: 3-7-1
  • $cleanVersion: 371
  • $version(比如3.7.1.2)由(.)符号分割,并将值分配给:
    • $majorVersion: 3
    • $minorVersion: 7
    • $patchVersion: 1
    • $buildVersion: 2
  • $matchHead:返回由(.)分隔的前两位或三位数,(比如 3.7.1-rc.1 = 3.7.1 , 3.7.1.2-rc.1 = 3.7.1 or 3.7-rc.1 = 3.7)
  • $matchTail:返回$matchHead的其余部分,(比如 3.7.1-rc.1 = -rc.1 , 3.7.1.2-rc.1 = .2-rc.1 or 3.7-rc.1 = -rc.1)
  • $preReleaseVersion:在(-)后面的所有字符, (比如. 3.7.1-rc.1 = rc.1)
  • checkver属性中的每个捕获组都添加一个$matchX变量(命名组也被允许),比如使用正则表达式 v(?[\d.]+)\/(?[\d.]+) 匹配 v3.7.1/3.7,将返回:
    • $match1 or $matchVersion: 3.7.1
    • $match2 or $matchShort: 3.7

URL变量(URL variables)

哈希变量(Hash variables)

  • $md5:([a-fA-F0-9]{32}),MD5哈希类型
  • $sha1:([a-fA-F0-9]{40}),SHA-1哈希类型
  • $sha256:([a-fA-F0-9]{64}),SHA-256哈希类型
  • $sha512:([a-fA-F0-9]{128}),SHA-512哈希类型
  • $checksum:([a-fA-F0-9]{32,128}),MD5,SHA-1,SHA-256或SHA-512哈希类型
  • $base64:([a-zA-Z0-9+\/=]{24,88}),BASE64编码的checksum(可以是MD5,SHA-1,SHA-256或SHA-512)

持久性数据

如果您需要存储在更新之间应保留的数据,则应使用~/scoop/persist//。在清单内部,$persist_dir变量中提供了数据目录的路径。
目录和文件可以添加到应用清单中的persist。持久数据通过目录连接或硬链接从已安装的应用程序目录链接到数据目录。
在安装过程中,所有持久数据都将复制到数据目录中并链接到该目录。
如果只需要保存一个目录或一个文件,则persist可以是一个字符串,也可以是多个目录或多个文件的数组。
[可选] 目录或文件在数据目录中可以具有不同的名称

json
{
    "persist": [
        "keeps_its_name",
        ["original_name", "new_name_inside_the_data_dir"]
    ]
}
123456

卸载应用程序时,有一个用于清除所有持久性数据的标志。默认情况下,数据将一直保留到您将其删除为止。

powershell
scoop uninstall -p nodejs
1

安装脚本Pre and Post install scripts

变量

以下变量可在pre_install / post_install脚本中使用

变量 示例 说明
$dir C:\Users\username\scoop\apps\$app\current
$original_dir C:\Users\username\scoop\apps\$app\1.2.3
$persist_dir C:\Users\username\scoop\persist\$app
$manifest @{homepage=https://example.com/; description=Example app; version=2.4.1; url=http://example.com/app-setup.exe;... 反序列化的清单(PowerShell对象)
$version 1.2.3 正在安装的版本
$app exampleapp 应用程序名称(清单文件名称)
$architecture 64bit
$scoopdir C:\Users\username\scoop Scoop安装目录
$oldscoopdir C:\Users\username\AppData\Local\scoop
$globaldir C:\ProgramData\scoop
$cachedir C:\Users\username\scoop\cache
$bucketsdir C:\Users\username\scoop\buckets
$modulesdir C:\Users\username\scoop\modules
$cfgpath ~/.scoop Scoop配置路径
$cfg {SCOOP_BRANCH, SCOOP_REPO, lastupdate} Scoop配置(Powershell对象)

方法

appdir:参考另一个独家应用程序。例如,要检查是否安装了另一个应用程序,可以使用:

powershell
"post_install": [ "if (Test-Path \"$(appdir otherapp)\\current\\otherapp.exe\") { <# .. do something .. #> }"
1

其他

假设有一个应用app,版本为1.0.0,下载地址为……/setup.exe
在pre_install和post_install中

powershell
$dir = C:\users\<name>\scoop\apps\<app>\1.0.0
$fname = setup.exe
$persist_dir = C:\users\<name>\scoop\persist\app
123
2

评论 (0)

取消