我通常添加这样的存储库:
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
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