Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

package不定义版本(add_versions) #930

Closed
compilelife opened this issue Aug 29, 2020 · 6 comments
Closed

package不定义版本(add_versions) #930

compilelife opened this issue Aug 29, 2020 · 6 comments

Comments

@compilelife
Copy link
Contributor

你在什么场景下需要该功能?

add_versions在某些情况会是累赘:

  1. 每次release一个版本,都需要修改repo来添加版本,这样用户才能拉取
  2. 用户的本地repo更新前,拉取不到新的版本

我的场景下如下:我们给公司搭二进制仓库,作模块的复用;为保证软件构建的可复现,我们会在add_requires的时候指到固定版本号。

我们期望的是一个模块通过持续集成发布后,就可以告知别人可用,但实际不是,因为还需要更新repo去新增版本,还需要通知用户repo -u下。

描述可能的解决方案

是否可以考虑这样的规则:是否定义add_versions是可选的

  1. 根据是否定义add_versions,取得一个versions列表;没有定义,则列表为空
  2. 依赖versions列表,计算add_requires的目标版本,如果存在,走现有逻辑;
  3. 如果不存在,则将$(version)直接翻译到url里进行请求,http请求成功,则忽略checksum下载;http 404则报错
@waruqi
Copy link
Member

waruqi commented Aug 29, 2020

加version的目的就是为了 通过 checksum 确保下载的完整性,可靠性。

去掉这些 就会存在很多的不可靠因素在里面,安全性也没法得到保证,包源可以被随意篡改。

暂时不会考虑去掉,不过目前是支持通过set_urls 为git url,然后在 add_requires("zlib master")里面通过指定分支的方式来拉取最新commit,这种是可以没有versions的

如果你非要去掉,可以有git branch/tags的方式来动态拉取,跳过校验

由于git下载失败和完整性 由git会保证,所以目前开放了这种模式,但是git源自身的可靠性只能自己保证了

而对于tar包 目前不考虑去除version shasum校验

@compilelife
Copy link
Contributor Author

加version的目的就是为了 通过 checksum 确保下载的完整性,可靠性。

去掉这些 就会存在很多的不可靠因素在里面,安全性也没法得到保证,包源可以被随意篡改。

暂时不会考虑去掉,不过目前是支持通过set_urls 为git url,然后在 add_requires("zlib master")里面通过指定分支的方式来拉取最新commit,这种是可以没有versions的

如果你非要去掉,可以有git branch/tags的方式来动态拉取,跳过校验

由于git下载失败和完整性 由git会保证,所以目前开放了这种模式,但是git源自身的可靠性只能自己保证了

而对于tar包 目前不考虑去除version shasum校验

嗯,有checksum肯定是安全的。

不过我们是内网环境,可以保障包的可靠性。

如果通过add_require的config启用呢?比如add_require("zlib", {unsafe=true})

@waruqi
Copy link
Member

waruqi commented Aug 29, 2020

这倒也不用 只需要repo里面不设置 versions 那么这个package就是不安全的包,包的安全可靠性由 repo的拥有者维护,像 xmake-repo官方仓库 提交的包 肯定是有 versions 所以是安全可靠的

如果是自建仓库 那就自己决定是否要完全可靠好了,我可以考虑搞成没 versions的包直接尝试下载安装

不过这样还是有一些限制的,比如版本语义的匹配就不行了 >= 1.0 这种,只能对写死固定版本的生效

另外对于tar是否下载成功,只能依赖curl wget的ret code,如果真的中途断掉,尤其是走了http chunked这种情况,不到下载完不知道实际大小的 ,不确定curl是否会正常报错 那就只能当正常下载好了 多少会存在解压安装失败的问题

@waruqi waruqi added this to the v2.3.7 milestone Aug 29, 2020
@waruqi
Copy link
Member

waruqi commented Aug 29, 2020

这个我支持了,不过多少还是会有些局限的,因为没有了版本列表和checksum,所以下载后的包 是无法确认完整性的,缓存会失效。每次安装都需要重新下载一遍。 xmake update -s dev

@compilelife
Copy link
Contributor Author

👍有用!

@waruqi
Copy link
Member

waruqi commented Nov 5, 2020

我dev加了个参数,可以让用户忽略版本列表和sha校验,这样可以指定任意版本安装,即使包定义版本列表中没有这个版本

add_requires("curl 7.67.0", {verify = false})

详情见:

#1009

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants