写在打包一年零2个月之时...
我在简历上写了曾经给 Alpine Linux 长期维护若干软件,但是面试官提问,说看起来都是升级版本的记录,“你的贡献具体表现在哪里”(大概意思)听到后有点泄气,但是我在结束后才反应过来应该介绍一下自己的工作。回忆了一下,我的工作只能说很有教育意义,下面梳理一下🙃
非常感谢开源社区的帮助,同时感谢面试官的引导
如果对 Alpine 打包有什么疑问或者发现什么错误,不要犹豫快来联系我
Workflow
我一开始对 Git 的理解是不到位的,没有 checkout 到新分支,这会让后续的 merge 及 rebase 产生冲突。其次未能习惯性的检查项目规范性文档,导致代码和提交格式不符合要求。感谢 psy 的帮助,希望他(她或它)每天都能开心。
这个包 cloudflared 后续因为依赖库的 go 版本不兼容在很长一段时间内都未启用,不过最终 cf 还是修复了
Environment
通过对 Wiki 的学习,成功搭建 Alpine Linux 打包构建环境,修复了第一个 MR 的问题。
Patch
看到群友一直在说 xmake 作为 cmake 的平替非常好用,但查无此包,于是开打。
遇到第一个问题,项目推荐使用 git submodule 并自带所有第三方依赖,这对大部分发行版(除了 Arch 和 Nix)来说都是不可接受的,在和上游充分交流之后,只能自己来做。最后制作了缺失的依赖包、修改源代码中的头文件、补齐 pkgconfig 等。
遇到第二个问题,abuild rootbld
不好用,看了构建脚本(不到 3000 行的 posix shell 脚本)是逻辑写的比较死,我给 Wiki 对应的地方加了条 Tip,希望有机会把构建脚本改了。
Depends
这是个纯 C 的项目,需要很多依赖,不过好在这个时间我已经成功搭建了搜包网站,拥有很方便的模糊搜索和动态链接库的检索能力。
作者也蛮好的,反馈了好几个问题都修复了,后来更是亲自维护起了这个包
Chroot
这个项目是 C 语言的模板引擎,当时想做 C 网站后端,用这个模板引擎做 SSR(后来技术栈换 Rust 了)
学会了如何使用 qemu 和 chroot 对其他架构进行测试,并发现了一些问题…本来怀疑是上游,但是测试到后面发现是 valgrind 坏了😢
Shell
和上游进行了很开心的讨论,也是努力看了看源码,希望理解上游的发布思路,最终把原来的一个 json 库改成了对上游三个 json 库的全部支持。后来也是一鼓作气,用 meson 给上游的 Makefile 重构了。
学会了拆包,还学会了好几个 shell 小技巧,包括 trim,for,case 等。
Version
这是个反面问题,错误的把上游的 2.0.0-10 理解为了 2.0.0.10(实际是 pre)导致后面的 2.0.0 发布时版本大小错误
Go
头一次接触 Go,从上游的流水线和 Makefile 里抠出来必要的构建过程,这个包是我刚来 GitHub 时最想体验的软件。Go 对架构的版本描述和 Alpine 不一样,必要情况下可以用 shell 的 case 做个转换
Rust
第一次打 Rust,实际体验下来有点慢,我就把在 IRC 群里学到的小技巧反馈给了上游,后来快多了!从 1000 ms 减小到 18 ms!
Script
https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/68086
https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/48570
通过 cat 实现安装完成后给用户打印一些帮助信息,也可以为守护进程提前创建系统用户
Check
看了好久源码,终于尽可能补齐了所有离线测试,现在 Alpine Linux 的 xmake 是所有发行版当中测试最多的,仅次于上游流水线
Maintainership
接手 Bats 这个 Bash 生态中最好用的测试框架,并补齐了若干官方插件,还做了 meta 包来方便操作,也是为了向后兼容
Remove
删除比添加更难一点,不过这个包问题很严重,删了
好困,想休息了,有关自举这部分没做过,有关架构这部分做到的也不多
希望以后能成为学习到更多有关操作系统的知识,成为 Alpine Linux 中文社区甚至官方社区的能手!
Subscribe to my newsletter
Read articles from qaqland directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by