build: 即使在删除 RPM 或 DEB 包之后,也会同步仓库元数据
作者: leogr创建于 2021年6月10日更新于 2026年9月8日
标签help wantedkind/featurearea/build
动机
发布新版本时,新的 git 标签会触发 CI 编译和发布包。在 RPM 和 DEB 发布过程中,新包会被上传,然后 repo 元数据会被更新。以下脚本实现了此过程:
- https://GitHub.com/falcosecurity/falco/blob/master/scripts/publish-rpm
- https://GitHub.com/falcosecurity/falco/blob/master/scripts/publish-deb 基本上,这些脚本仅在有新包时才能正常工作。 然而,在发布包后发现问题的情况也可能发生,因此需要覆盖或清理包。 覆盖包是自动完成的(脚本默认采用此策略)。 另一方面,没有办法仅删除已发布的包,然后更新 repo 元数据。 功能
脚本应该允许我们在删除 RPM 或 DEB 包时同步 repo 元数据。 这种能力可能在紧急情况下需要,例如需要取消发布某个包或整个版本。 此外,基础设施应该提供按需运行此任务的能力。 替代方案
目前,同步 RPM/DEB 仓库元数据的唯一方法是手动在本地环境中运行修改过的这些脚本。 然而,我认为这不是一个可靠的解决方案。 其他上下文
这些情况实际上发生了,因为我们不得不停止 0.28.2 的构建过程,因为我们在包中发现了问题。 后来,我们还决定取消 0.28.2 以支持 0.29.0,因此需要删除包。 手动从 S3 中删除这些包后,我必须手动同步 RPM/DEB 仓库。 以下是我使用的修改脚本的复制。 publish-deb
#!/usr/bin/env bash
set -e
usage() {
echo "usage: $0 -f <package.deb> -r <deb|deb-dev>"
exit 1
}
check_program() {
if ! command -v $1 &> /dev/null
then
echo "$1 is required and could not be found"
exit
fi
}
# Update the local DEB repository
#
# $1: path of the repository
# $2: suite (eg. "stable")
update_repo() {
# fixme(leogr): we cannot use apt-ftparchive --arch packages ...
# since our .deb files ends with "_x86_64" instead of "amd64".
# See https://manpages.debian.org/jessie/apt-utils/apt-ftparchive.1.en.html
#
# As a workaround, we temporarily stick here with "amd64"
# (the only supported arch at the moment)
local arch=amd64
local component=main
local debs_dir=$2
local release_dir=dists/$2
local packages_dir=${release_dir}/${component}/binary-${arch}
pushd $1 > /dev/null
# packages metadata
apt-ftparchive packages ${debs_dir} > ${packages_dir}/Packages
gzip -c ${packages_dir}/Packages > ${packages_dir}/Packages.gz
bzip2 -z -c ${packages_dir}/Packages > ${packages_dir}/Packages.bz2
# release metadata
apt-ftparchive release \
-o APT::FTPArchive::Release::Origin=Falco \
-o
…内容来源: falcosecurity/falco