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

[RFC] 统一仓库里包的所有者? #1555

Open
lilydjwg opened this issue Apr 2, 2020 · 24 comments
Open

[RFC] 统一仓库里包的所有者? #1555

lilydjwg opened this issue Apr 2, 2020 · 24 comments

Comments

@lilydjwg
Copy link
Member

lilydjwg commented Apr 2, 2020

问题类型 / Type of issues

  • 其它 / other

将所有包交给一个专门的用户 pkgman 管理,这样 repocleaner 将不再需要 root 权限。archrepo2 需要对包进行 chown,可以使用 suid 程序来处理,自身也不必使用 root 权限。

  • 包文件权限:pkgman:pkgman 755 / 644
  • archrepo2 不再监视包目录,仅监视 ~/repo 中的新文件 (删除操作需要监视包目录)
  • 维护者将不再能够自行去仓库里删除或者降级包

大家想想有没有什么问题 / 没考虑到的地方。

@petronny
Copy link
Member

petronny commented Apr 2, 2020

维护者将不再能够自行去仓库里删除或者降级包

要不还是还是放dummy-1.0-1-any.pkg.tar.zst.rm来删除?

@lilydjwg
Copy link
Member Author

lilydjwg commented Apr 2, 2020

要不还是还是放dummy-1.0-1-any.pkg.tar.zst.rm来删除?

手动删包功能有多需要呢?

这样做的话,将需要额外的程序来

  • 检查 rm 文件的所有者是否是包维护者
  • 额外的 root 权限用于回报错误

@petronny
Copy link
Member

petronny commented Apr 2, 2020

手动删包功能有多需要呢?

我本人是不需要派,但我提出这种可能。。。

@lilydjwg
Copy link
Member Author

lilydjwg commented Apr 2, 2020

所以谁需要手动删包,出来说说使用场景呀。

就目前我的感受是,大家很少需要手动删包,所以有需求直接找我或者 felixonmars 就好了。之前软件仓库在另外的服务器上维护的时候,大家都是没法直接删包的……

如果量大了的话,可以像 cleanup-package-files 那样做一个专门删包的程序?使用 rm 文件总感觉怪怪的,也不好回传错误。

@yuyichao
Copy link
Member

yuyichao commented Apr 2, 2020

啥算手动删包?

@lilydjwg
Copy link
Member Author

lilydjwg commented Apr 2, 2020

啥算手动删包?

登录服务器跑 rm 命令。

@yuyichao
Copy link
Member

yuyichao commented Apr 2, 2020

= = 好吧, 没这个需求....

@petronny
Copy link
Member

petronny commented Apr 3, 2020

包 gnome-shell-extension-volume-mixer-git 打的版本为 3.36.1.r3.g4b8fc40-1,但在仓库里已有较新版本 3.36.1.r3.gffc0929-1。

删除需求出现了。。。[狗头]

@farseerfc
Copy link
Member

官方源編譯機的做法是

  1. 在 devtools 有個腳本 commitpkg ,上傳到編譯機的用戶家裏的某個特定文件夾(叫 staging 但是不是 staging 源)
  2. 上傳後跑個編譯機上的腳本,複製出來然後添加數據庫啥的。
  3. 刪包、跨 repo 移動包是編譯機上另幾個腳本。
    步驟中如果出現意外有可能要上編譯機自己處理用戶家裏的文件夾。

覺得如果我們以後計劃提供 archlinuxcn-testing 或者 archlinuxcn arm 啥的,跑腳本的方案可能比較好擴展

@farseerfc
Copy link
Member

補充,上述腳本在 https://github.com/archlinux/dbscripts ,然後官方源編譯機有兩套,一套負責 core/extra ,一套負責 community 。每套都有負責對應的 staging/testing 和 x86_64/any 這些分開的 repo 。
以及 dbscripts 目前還有些限制,比如 split pkg 不能指定不同的 arch=() ,所以有拆 split pkg 的話都得是同樣的 arch=() ,比如不能一個拆包是 x86_64 另一個是 any 。

@holymonson
Copy link
Contributor

包文件权限:pkgman:pkgman 755 / 644
维护者将不再能够自行去仓库里删除或者降级包

  1. 包文件夹 pkgman:pkgman 775,维护者加 group pkgman,就有权限删包了。
  2. 或者在 /etc/sudoers 给特定权限。

@lilydjwg
Copy link
Member Author

lilydjwg commented Apr 6, 2020 via email

@holymonson
Copy link
Contributor

#!/bin/sh

for f in "$@"; do
    [[ `stat --printf %u "$f"` == `id -u` ]] && rm "$f"
done

把上面保存成 /usr/local/sbin/rm-own ,权限 root:root 755。然后在 /etc/sudoers 加一条

ALL ALL=(ALL) NOPASSWD: /usr/local/sbin/rm-own 

那么每个人都可以删自己的文件了。

@lilydjwg
Copy link
Member Author

lilydjwg commented Apr 6, 2020 via email

@holymonson
Copy link
Contributor

不需要统一所有者呀, 统一 group 就可以了吧,repocleaner 加group给权限。而且只要文件夹有写权限就可以删包。你的目的就是想让 repocleaner 能删包但不要有 root 权限而已吧?

@hubutui
Copy link
Contributor

hubutui commented Apr 6, 2020

手动删包的情况很少的,到时候找管理员删一下就好了。

@yan12125
Copy link
Member

yan12125 commented Apr 6, 2020

我認為任何情況都不應該手動刪包。如果要回退版本應該用epoch(這也是為何我先前在lilac加上禁止回退版本的檢查),如果不小心打了不該打的包(例如不可再分發的包),先把包從git倉庫刪掉,再讓repocleaner刪包。

By the way, 可能需要一個手動trigger repocleaner的機制。

@lilydjwg
Copy link
Member Author

lilydjwg commented Apr 6, 2020 via email

@lilydjwg
Copy link
Member Author

lilydjwg commented Apr 6, 2020 via email

@yan12125
Copy link
Member

yan12125 commented Apr 6, 2020

像是曾經維護過x86_64 & i686,但是後來拋棄i686的包嗎?似乎這種情況下repocleaner不會把i686的包刪掉...我有好幾個包在i686還留著舊的版本。

@lilydjwg
Copy link
Member Author

lilydjwg commented Apr 6, 2020 via email

@yan12125
Copy link
Member

yan12125 commented Apr 7, 2020

Looking into /data/repo/i686/*-i686.pkg.*, there are a few stale packages maintained/co-maintained by me:

/data/repo/i686/qterminal-git-0.6.0.5.gffe4f25-1-i686.pkg.tar.xz
/data/repo/i686/qterminal-git-0.6.0.65.g7f2c9e0-1-i686.pkg.tar.xz
/data/repo/i686/qterminal-git-0.6.0.65.g7f2c9e0-1-i686.pkg.tar.xz.sig
/data/repo/i686/qtermwidget-git-0.6.0.33.gda6838d-1-i686.pkg.tar.xz
/data/repo/i686/qtermwidget-git-0.6.0.50.g3bfdfe8-1-i686.pkg.tar.xz
/data/repo/i686/qtermwidget-git-0.6.0.50.g3bfdfe8-1-i686.pkg.tar.xz.sig
/data/repo/i686/screengrab-git-1.0.66.g79fd576-1-i686.pkg.tar.xz
/data/repo/i686/screengrab-git-1.0.66.g79fd576-1-i686.pkg.tar.xz.sig

Upstream are still active, while those packages are more than 4 years old. @lilydjwg Could you remove those packages?

/cc @ykelvis - co-maintainer of screengrab-git.

@lilydjwg
Copy link
Member Author

lilydjwg commented Apr 7, 2020

@yan12125 all removed.

@lilydjwg
Copy link
Member Author

lilydjwg commented Apr 18, 2020

STEPS

  • code chowner: chown packages in spool directory and move into another for archrepo2
  • add user for archrepo2, spool directory, update its service file, stop service
  • chown all current packages and start archrepo2 service
  • start chowner service

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

7 participants