Ubuntu 18.04仓库的InRelease段是否为必填项?
先直接回应你的两个核心疑问:
InRelease是否为必填项?
对于Ubuntu 18.04来说,InRelease并非严格意义上的强制文件,但缺少它会触发安全验证失败,进而导致apt无法正常识别并使用你的仓库。
InRelease是仓库Release文件的明文签名版本,和Release.gpg(Release文件的二进制签名)配合工作,用于apt验证仓库内容的完整性与真实性。Ubuntu 18.04的apt客户端默认会优先尝试读取InRelease,如果找不到,会退而尝试Release.gpg;但如果两者都缺失,apt就会判定仓库未签名,直接拒绝信任该仓库——这就是你遇到The repository 'http://[our_repo]/Debian/apt-repo bionic InRelease' is not signed.报错的原因,同时也会导致无法搜索到仓库内的软件包。
解决方法:配置Freight生成签名文件
问题的核心是Freight默认未启用GPG签名,所以不会自动生成InRelease和签名文件。你可以按以下步骤配置:
生成GPG密钥对(如果还没有的话)
在运行Freight的服务器上执行:gpg --gen-key按照终端提示完成密钥生成流程,记住生成的密钥ID(通常是输出内容里最后8位的字符串)。
配置Freight启用签名
编辑Freight的主配置文件(默认路径为/etc/freight.conf),添加或修改以下行:GPG_KEY=你的密钥ID比如你的密钥ID是
87654321,就写GPG_KEY=87654321。重新生成仓库内容
执行以下命令让Freight重新构建仓库并生成签名文件:freight cache --verbose freight update验证文件生成
检查你的仓库根目录(/Debian/apt-repo)下是否出现了InRelease、Release和Release.gpg三个文件,出现即说明签名配置生效。
额外排查点
- 确保Ubuntu 18.04机器上的
sources.list配置正确,比如你的仓库条目应该是:
根据你的包所在组件,可能需要追加deb http://[our_repo]/Debian/apt-repo bionic maincontrib或non-free。 - 检查仓库服务器的web权限:确保Nginx/Apache等web服务器能读取仓库目录下的所有文件,包括新生成的签名文件。
- 确认GPG密钥的权限:如果Freight是以系统用户身份运行的,要确保该用户能访问你的GPG私钥(可以把密钥导入到系统用户的GPG密钥环中)。
内容的提问来源于stack exchange,提问作者Dima Kreisserman

