#1674·falco

build: 即使在删除 RPM 或 DEB 包之后,也会同步仓库元数据

作者: leogr创建于 2021年6月10日更新于 2026年9月8日
标签help wantedkind/featurearea/build

动机

发布新版本时,新的 git 标签会触发 CI 编译和发布包。在 RPM 和 DEB 发布过程中,新包会被上传,然后 repo 元数据会被更新。以下脚本实现了此过程:

脚本应该允许我们在删除 RPM 或 DEB 包时同步 repo 元数据。 这种能力可能在紧急情况下需要,例如需要取消发布某个包或整个版本。 此外,基础设施应该提供按需运行此任务的能力。 替代方案

目前,同步 RPM/DEB 仓库元数据的唯一方法是手动在本地环境中运行修改过的这些脚本。 然而,我认为这不是一个可靠的解决方案。 其他上下文

这些情况实际上发生了,因为我们不得不停止 0.28.2 的构建过程,因为我们在包中发现了问题。 后来,我们还决定取消 0.28.2 以支持 0.29.0,因此需要删除包。 手动从 S3 中删除这些包后,我必须手动同步 RPM/DEB 仓库。 以下是我使用的修改脚本的复制。 publish-deb

bash
#!/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