archlinuxcn / lilac

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

source PKGBUILD to get pkgname #142

Closed holymonson closed 2 years ago

holymonson commented 4 years ago

get_all_managed_packages()中统一用source PKGBUILD去获得pkgname,就不需要package.list了。 commit是盲打的,没有经过测试。 fix https://github.com/archlinuxcn/repo/pull/1554#issuecomment-607618213

farseerfc commented 4 years ago

source 某些 PKGBUILD 會有意外的輸出,還有可能執行到意外的代碼。 archlinuxcn/repo 裏面跑 pre-commit 的時候用了個精簡過的 parse-pkgbuild 去 source PKGBUILD 然後輸出 .SRCINFO 的格式 https://github.com/archlinuxcn/repo/blob/master/parse-pkgbuild pre-commit 只是檢查,我還沒考慮好能不能把 parse-pkgbuild 搬來 lilac 用

lilydjwg commented 4 years ago

呃,你改错地方了。package.list 是 repocleaner 需要的,而它是不执行 PKGBUILD 的。

holymonson commented 4 years ago

@lilydjwg 一样的逻辑,重复的代码,这里统一改了,repocleaner import 再调用不好吗。。 @farseerfc PKGBUILD本身就要求是安全的,不然makepkg的时候就出问题了。意外情况能举个例子?

lilydjwg commented 4 years ago

repocleaner 不执行 PKGBUILD。我是不会让 repocleaner 这类具有 root 权限的程序执行 PKGBUILD 这种外来不安全的代码的。

lilydjwg commented 4 years ago

你要说降权执行倒也还行。但依旧有风险:如果因为某种原因降权后执行失败,那打出来的包就没了。

lilydjwg commented 4 years ago

实际上我都想把 lilac 在 chroot 外执行 PKGBUILD 的代码装进沙盒里执行了。不然哪天遇到个 rm -rf /* 就很惨。

holymonson commented 4 years ago

直接在obtain_array包装,把source PKGBUILD的subprocess的权限设成nobody,我晚点可以给个commit。

lilydjwg commented 4 years ago

好,不过注意 lilac 没权限 setuid,nobody 也没权限读 PKGBUILD。

另外你不要改 lilac2/packages.py 那边。那里要读取的是 pkgbase 不是 pkgname。

holymonson commented 4 years ago

lilac2/packages.py 就是读的pkgname啊,一模一样的逻辑。 能先把这个PR打开么?好对着代码说。

lilydjwg commented 4 years ago

咦还真是。这个函数被 in-official-cleaner 用到了,repocleaner 里的是一份副本。

holymonson commented 4 years ago

同名函数还不一样的输出。。repocleaner加句下面的可以吧

from lilac.api import get_all_managed_packages

another_get_all_managed_packages = lambda:(t[1] for t in get_all_managed_packages())
lilydjwg commented 4 years ago

repocleaner 复制代码是因为这样部署维护更简单。不是同一用户,无法引用到对方的文件。

holymonson commented 4 years ago

checkout stable branch,放固定的地方,让 misc_scripts 里的脚本都可以用? 或者让 misc_scripts submodule lilac 的 stable branch?

lilydjwg commented 4 years ago

checkout stable branch,放固定的地方,让 misc_scripts 里的脚本都可以用? 或者让 misc_scripts submodule lilac 的 stable branch?

还是权限的问题。这个共有的地方由谁的管理?

这个 repocleaner 脚本基本上是 self-contained 的。如果非要共享,最好的做法是和那个 archpkg 模块一样,把对应的文件复制一份。所以共享的部分会从 lilac2 这个包独立出来。

lilydjwg commented 4 years ago

repocleaner 本质上是软件仓库的管理者(和 archrepo2 类似),而 lilac(以及其它几个操作 git repo 的脚本)是打包脚本的管理者。两者角色上有差异。

holymonson commented 4 years ago

这个 repocleaner 脚本基本上是 self-contained 的。如果非要共享,最好的做法是和那个 archpkg 模块一样,把对应的文件复制一份。所以共享的部分会从 lilac2 这个包独立出来。

把这个共享的部分扩展一下,就是 misc_scripts submodule lilac,你不手动更新,那就是静态的。只要函数接口不大变,基本不会有太大问题?

lilydjwg commented 4 years ago

差不多是这个意思。