archlinuxcn / lilac

Lilac is the build bot for archlinuxcn
GNU General Public License v3.0
113 stars 40 forks source link

pkgbuild.check_srcinfo对多arch的支持不好 #155

Closed petronny closed 1 week ago

petronny commented 4 years ago

如题。

_repo_package_versions永远是x86_64的那个。(还是不同arch的同名包只取最新的那个?) 非x86_64的不应该读这个的。

建议把build_prefix传给check_srcinfo,然后取最后一段当做arch再做判断吧

multilib特判成x86_64

PS. 我目前用到的各种奇怪的build_prefix有:

lilydjwg commented 4 years ago

头疼……这部分并不支持官方 Arch 之外的发行版。做起来也挺麻烦,还不一定能成功。倒是可以对其它发行版的包,把这部分跳过。

petronny commented 4 years ago

那我跳过吧。。。

yan12125 commented 4 years ago

啊,我的鍋...當初沒有想到不同arch版本可能不同的問題,因為Arch還支援i686的時候,x86_64和i686通常是同時更新的

_repo_package_versions永远是x86_64的那个。(还是不同arch的同名包只取最新的那个?)

嗯都不是,是看包在*.db中的順序

https://github.com/archlinuxcn/lilac/blob/d039393d14fd43f73edbaaeb1b9af6f0d550c863/lilac2/pkgbuild.py#L95

或許可以改成 (not tested)

    arch = build_prefix.split('-')[-1]
    if arch == 'multilib':
        arch = 'x86_64'
    _repo_package_versions = {p.name: p.version for p in db.pkgcache if p.arch == arch}

那我跳过吧。。。

跳過會有問題。這段code是用來防止打出舊版本的包。如果x86_64是1.0.0-10,aarch64要是從1.0.0-8升級到1.0.0-9會失敗。

petronny commented 4 years ago

如果x86_64是1.0.0-10,aarch64要是從1.0.0-8升級到1.0.0-9會失敗。

对。。。就是这个情况。。。

我试试改改

lilydjwg commented 4 years ago

_repo_package_versions 并不需要为每个架构单独处理。它需要为每个发行版+架构单独处理。现有逻辑在只支持 Arch Linux (x96_64) 的时候是没有问题的,alarm、Arch linux 32 那些会有问题。

petronny commented 4 years ago

发行版这个问题就更大了,我今天还想来着。 架构不重叠是一种情况,架构重叠是另一种情况了。

archlinux和alarm好在是架构不重叠,我认为放到同一个lilac repo里没事。 _repo_package_versions只做个多架构支持就行。。。

但还有架构重叠的,比如如果要做yayyay-manjaro的话,即后者是用manjaro-x86_64打包,情况会复杂很多了。

不光_repo_package_versions要改, 现在lilac的ini配置文件里写死了只会向一个arch repo输出, 真要支持多发行版那得在这里支持多repo,然后在lilac.py中设置是哪个repo。

总之我觉得archlinux, alarm, Arch linux 32放在同一个arch repo里面,靠架构区分没事。 manjaro单独放一个arch repo,万一哪天有manjaro-arm了,就也放这个里。

但archlinux, alarm, Arch linux 32, manjaro, manjaro-arm这些要不要放同一个lilac repo我觉得有待讨论。 实在不行分2个得了。。。

petronny commented 4 years ago

然后还有一个地方也有多arch repo输出的需求。 就是 包A可下载打包不可分发,但基于包A的包B可分发。 这时候要让lilac打A,但是A输出到private repo(或者不输出) 然后lilac就可以正常打B了

我记得原先有个dropbox的例子

petronny commented 4 years ago

总之总结一下是, 有个问题是要不要做到多个arch repo的输出? 然后无论做不做,都要做_repo_package_versions的多arch改进 做的话还要有多arch repo的改进

yan12125 commented 4 years ago

多repo我覺得不一定需要。當初討論[archlinuxcn-testing]的時候 [1] 我有考慮過這點。看了code之後,覺得跑多個lilac,用不同的config.ini比較容易做。

[1] https://github.com/archlinuxcn/repo/issues/976

lilydjwg commented 4 years ago

多个发行版 / repo,你跑多只 lilac 就好了呀。(所以其实 alarm 应该单开一只 lilac。) 当然 lilac 并没有在同一服务器、同一用户、同一 git repo、同一 github 用户下跑多只的支持。可能会有问题,需要慢慢改。

只打包不输出这个要做也不难,只要添加一个配置项,出包之后不调用 cp -l 就行了。

petronny commented 4 years ago

多只不如一只。。。 现在一只的多打包session还没上线, 多只岂不是要独立维护一个session管理。。。难道部署个redis不成。。。?

这种情况下我站多arch repo输出

不过现在是多arch就够用。。。

yan12125 commented 4 years ago

多session是指 https://github.com/archlinuxcn/lilac/issues/145 ? 那的確多隻不容易做...

lilydjwg commented 1 year ago

这个在 pre_build() 函数里设置 os.environ['CARCH'] = 'xxx' 应该有用。

petronny commented 1 year ago

我现在的解决方案是先对老 PKGBUILD 求一次版本号,然后拖 PKGBUILD,再 makepkg -od --noprepare ,然后再求一次版本号,然后比较新旧。。