-
Notifications
You must be signed in to change notification settings - Fork 78
我们的工作习惯
不是让软件能出包就算修复,对于 Patch 的内容我们有着一些不成文的约定。你可以在这篇文章中了解我们以往对某个错误的通用修复方式,也可以了解我们的一些要求。
该文件应该保持字典序, 可以通过以下命令向该文件中添加一个新的包:
echo "包名" | LC_ALL=C sort -o qemu-user-blacklist.txt - qemu-user-blacklist.txt
注意 LC_ALL=C
是必须的. 不指定 LC_ALL=C
会导致 sort
按照当前系统的本地化设置进行排序, 可能会忽略除字母和数字之外的其他字符, 导致最后顺序不一样. 参考 man sort
和此链接.
解决方案:删除 PKGBUILD 里的 --target "$CARCH-unknown-linux-gnu"
参数
解决方案:使用肥猫 patch 后的 ring
。在 PKGBUILD 的 prepare
函数(如果没有这个函数就自己加上)内加入下面两行:
echo -e "\n[patch.crates-io]\nring = { git = 'https://github.com/felixonmars/ring', branch = '0.16.20' }" >> Cargo.toml
cargo update -p ring
解决方案:给上游发 PR,把 jemallocator 这个 crate 换成 tikv-jemallocator。
参考 PR:
打开 htop,摁 F4 搜索编译程序的名字,可以用方向键移动。在 S 那一列里查看应用状态,如果是 Z
,即 Zombie
僵尸状态,说明编译程序卡死了,需要杀掉重开。选上这个程序之后按 k
键,左侧会弹出 Send Signal 窗口,选择 SIGABRT
信号并回车,程序就会被干掉了,然后你再重试。
编辑 go.mod
,用 replace 语法进行替换(可以放在文件最后面)。
例子:把 modernc.org/libc 的 v1.4.1 版本升到 v1.14.11 版本
replace modernc.org/libc v1.4.1 => modernc.org/libc v1.14.11
然后把这个修改生成出 patch,在 PKGBUILD 的 prepare 函数里添加:
patch -Ni ../fix-libc.patch
go get -d modernc.org/libc
最后把 riscv64.patch 和修改的 patch 放在一起,提交 PR。
解决方案:
- 首先向上游汇报他们的
config.guess
和config.sub
文件过老。 - 然后在 PKGBUILD 里尝试使用
autoreconf -fi
命令来更新 config.guess - 如果上游的 config.guess 文件已经老到无法更新,将
/usr/share/autoconf/build-aux/
目录下的config.guess
和config.sub
文件拷贝到本地。 - 提交 PR,并附带上你的上游汇报链接。
- 持续跟踪你的上游报告,上游更新完并发版之后删除 patch。
具体参考: https://blog.jiejiss.com/A-RISC-V-gcc-pitfall-revealed-by-a-glibc-update/