add-apt-repository 不支持源列表中的 glob 吗?

add-apt-repository 不支持源列表中的 glob 吗?

我通常添加这样的存储库:

add-apt-repository --no-update --yes "deb [arch=amd64] https://download.docker.com/linux/ubuntu jammy stable"

这很好用,在设置 Ubuntu 机器时,我运行安装脚本循环遍历仓库列表并使用该命令添加它们。

问题是,当遇到这种格式的 repo 源时,它会失败:

deb [signed-by=/etc/apt/trusted.gpg.d/repo.charm.sh.gpg] https://repo.charm.sh/apt/ * *

然后它就会失败Unable to handle repository shortcut 'deb [signed-by=/etc/apt/trusted.gpg.d/repo.charm.sh.gpg] https://repo.charm.sh/apt/ * *'

当然,我可以解决这个特殊情况,按照文档说的做,然后将内容粘贴到文件中,但如果 Stuff 正常工作,我就不必这样做。那么,在使用实用程序命令时,我是否无法正确处理格式,或者是否只是由于内部解析位缺少功能而无法识别格式?如果不是,我该怎么做才能让它不失败?

答案1

实际上*不是一个 glob,而只是一个*

然而,这不是这里的问题。add-apt-repository使用 的Python 库python-apt(由 的开发人员维护apt)不支持源代码行的arch和选项以外的任何内容。trusted

v2.5.0 版本的源代码

if pieces[1].strip()[0] == "[":
    options = pieces.pop(1).strip("[]").split()
    for option in options:
        try:
            key, value = option.split("=", 1)
        except Exception:
            self.invalid = True
        else:
            if key == "arch":
                self.architectures = value.split(",")
            elif key == "trusted":
                self.trusted = apt_pkg.string_to_bool(value)
            else:
                self.invalid = True

在这种情况下,您可以自己写入文件:

printf "%s\n" 'deb [signed-by=/etc/apt/trusted.gpg.d/repo.charm.sh.gpg] https://repo.charm.sh/apt/ * *' | sudo tee /etc/apt/sources.list.d/charm.list

答案2

不幸的是,这是 Debian 的一个已知错误,请参阅 add-apt-repository 应该使用signed-by

相关内容