古老的基础设施:使用邮件提交补丁
修复
最近Arch上的debuginfod更新了,也带来了bug...在启动shell时会显示无匹配错误:
/etc/profile.d/debuginfod.sh:14: no matches found: /etc/debuginfod/*.certpath
,
于是我就找这个文件看
1 | # $HOME/.profile* or similar files may first set $DEBUGINFOD_URLS. |
bash与zsh对于glob的处理
对于bash来说当匹配不到字符串时,会保留原字符串,例如*.nothing -> '*.nothing'
,
而这个字符串接着传到cat
中,由于不存在这个文件,会输出错误,紧接着错误被丢弃,
因此对于bash来说,这段代码能够正常运行。
然而,zsh视无法匹配的glob为错误,并终止当前命令,因此会打印出zsh的错误, 这里不是cat的错误。
一开始想着这不是加个shebang的事?加上以后发现无济于事。profile.d
...?
经过查找,这个文件是被source
加载的,并不是直接运行,因此只能是由当前shell运行脚本。
继续调查,/etc/debuginfod/
下没有其他文件夹,因此可以使用find
来匹配文件并运行。
把cat /dev/null "/etc/debuginfod"/*.urls 2>/dev/null | tr '\n' ' ' || :
修改为:
find "/etc/debuginfod" -name "*.urls" -print0 2>/dev/null | xargs -0 cat 2>/dev/null | tr '\n' ' ' || :
|| :
中的:
不做任何事。find
缺省使用空格分隔文件名,-print0
可以让xargs
分清带有空格的文件名。
PATCH IT
知道怎么修之后,就可以向上游发送补丁了。但是 elfutils 属于一个
project run by Unix bros who want the 90s back,他们不使用GitHub或是Gitlab等现代化设施接受PR,
而是使用git send-email
,通过邮件的方式发送补丁。类似的,Linux同样使用这个方式来接受补丁。
为了发送补丁,首先需要拉取上游:git clone git://sourceware.org/git/elfutils.git
,
然后对文件做出修改后commit。再用git format-patch origin/main
生成一个邮件patch,
最后使用git send-email 0001-${COMMIT}.patch
发送邮件。
还可以提前配置发送对象,这样就不用每次都在发送时输入一遍。
1 | [sendemail] |
SEND IT
一切准备就绪,接下去就是发送邮件了。我平时使用outlook邮箱,但是微软不再允许使用简单认证登录, 换言之,不能使用密码或是应用密码登录,必须使用OAuth2的方式登录。然而, git并没有内建OAuth2支持。因此,无法使用outlook邮箱。奇怪的是,用gmail同样不行。 看起来git自带的send-email写的一坨,可用性存在问题。于是我看到可以用msmtp。
要调试git-send-email需要使用参数--smtp-debug=1
,只有--smtp-debug
不起效
我看到博客里一般用gmail,因为gmail的应用密码没有微软那样的校验,可以直接登录, 于是配置好msmtp后,再把git配置一下就可以发送邮件了。
1 | account default |
1 | [sendemail] |
可以在gmail网页端中找到应用密码的申请入口
ACCEPTED
过了几天后,我的patch顺利被合入到主线了。
又过了几天,我看到debuginfod的包更新了,于是我在arch包的gitlab帖子中看到有人反映这个bug, 然后打包者发现了我的patch,做了一个cherry-pick,把bug修了。 在帖子里我还看到了fedora的bugzilla引用, 感觉这个patch帮助了不少人呢。
outlook: more than OAuth2
原本我还是想使用outlook邮箱的,因为我看到了oama
等工具能使用OAuth2认证。
然而,看了一系列类似的工具,无不需要client_id
和client_secret
这样的客户端认证信息
(是认证客户端,不是认证用户)。但这个认证信息,需要自己到微软企业端申请,
虽然账户可以免费注册,但是需要登记一张visa信用卡,之后才能申请邮箱客户端认证。
然后我并没有visa信用卡,只好作罢。
这些工具还说可以找开源客户端的认证信息,但是我并没有找到...在自己的电脑上装了KMail, 也成功发出了邮件,看来KMail是配置了认证信息,不过我并不知道从哪里获取它的认证信息, 并且也KMail不能作为邮件代理,用来发送git的邮件。
参考
- 标题: 古老的基础设施:使用邮件提交补丁
- 作者: RocketDev
- 创建于 : 2024-11-23 09:22:00
- 更新于 : 2024-11-23 23:10:00
- 链接: https://rocketmadev.github.io/2024/11/23/PRbyMail/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。