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

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

Open
petronny opened this issue Jun 29, 2020 · 14 comments
Open

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

petronny opened this issue Jun 29, 2020 · 14 comments

Comments

@petronny
Copy link
Member

petronny commented Jun 29, 2020

如题。

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

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

multilib特判成x86_64

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

@lilydjwg
Copy link
Member

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

@petronny
Copy link
Member Author

那我跳过吧。。。

@yan12125
Copy link
Member

yan12125 commented Jun 29, 2020

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

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

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

_repo_package_versions = {p.name: p.version for p in db.pkgcache}

或許可以改成 (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
Copy link
Member Author

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

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

我试试改改

@lilydjwg
Copy link
Member

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

@petronny
Copy link
Member Author

petronny commented Jun 29, 2020

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

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
Copy link
Member Author

petronny commented Jun 29, 2020

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

我记得原先有个dropbox的例子

@petronny
Copy link
Member Author

petronny commented Jun 29, 2020

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

@yan12125
Copy link
Member

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

[1] archlinuxcn/repo#976

@lilydjwg
Copy link
Member

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

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

@petronny
Copy link
Member Author

petronny commented Jun 30, 2020

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

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

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

@yan12125
Copy link
Member

yan12125 commented Jul 1, 2020

多session是指 #145 ? 那的確多隻不容易做...

@lilydjwg
Copy link
Member

lilydjwg commented Feb 3, 2023

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

@petronny
Copy link
Member Author

petronny commented Feb 3, 2023

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

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

No branches or pull requests

3 participants