我已经配置了 GPG 密钥。我已经把git源码包克隆到本地了。我正在使用 chroot 进行构建extra-x86_64-build
。我能够构建包没有签名并将它们添加到本地私人仓库中。现在我想构建包,签字并将其添加到我的私有本地存储库中,安装时需要在客户端上进行签名验证pacman
。
步骤是什么?
以下是我当前的步骤,是我从许多不同的 Arch wiki 页面、手册页和其他地方收集的。我提供了一些细节来展示我正在做的事情以及我仍然遇到困惑或麻烦的地方。注意:我能够毫无问题地完成前三个部分。我的问题在那之后就开始了。
初步一般步骤(全部完成):
- 阅读维基页面(例如https://wiki.archlinux.org/index.php/Creating_packages)
- 安装
base-devel
,devtools
,namcap
,shellcheck
systemctl status haveged
# 确保它处于活动状态
初步包签名步骤(全部完成):
- 查看 /usr/share/devtools/pacman-extra.conf
- 我在这里添加了我的本地私有/自定义存储库(使用默认的 SigLevel)
- 编辑/etc/makepkg.conf:
BUILDENV=(!distcc color !ccache check sign)
# 确保sign
处于活动状态PACKAGER="My Name <[email protected]>
”GPGKEY="1234ABCD09876"
# 使用您的密钥全指纹大写,没有空格
- 使用用户密钥环上现有的 GPG 密钥执行以下步骤:
gpg --armor --output mykey.sec --export-secret-keys 1234ABCD09876
sudo pacman-key -a mykey.sec
sudo pacman-key --finger 1234ABCD09876
sudo pacman-key --lsign-key 1234ABCD09876
准备源文件,PKGBUILD(已完成):
git clone ${url}
# 或者 git pull 如果已经克隆- 检查 PKGBUILD
namcap -i PKGBUILD
makepkg --packagelist
# 检查版本号(可选)
问题:
- 仅供参考 - 我从内部和可信源文件开始。它们没有签名,并且我开始时的 PKGBUILD 中没有任何金额。
- 如何修改 PKGBUILD 以包含构建的包及其
.sig
文件的总和?- 包的
.sig
文件在哪一步添加到 PKGBUILD 中?这是怎么做到的?
- 包的
- 构建包的总和何时添加到 PKGBUILD?
- 我什么时候运行这一步? makepkg -g >> PKGBUILD
- 什么时候使用这个?更新包总和
接下来,在 chroot 环境中构建包(我可以这样做只有没有包裹签名)
`extra-x86\_64-build`
注意:我遇到了这个问题:makepkg:无法使用动态版本签署源包https://bbs.archlinux.org/viewtopic.php?id=259771(我想这将在 pacman 的下一个版本中得到解决?目前,我想解决方法是硬编码版本号而不是使用 VCS 派生版本?)
如何添加到私有存储库(我可以在没有 pkg 签名的情况下执行此操作,但我尚未成功创建用于测试的签名包):
- newpkg="mypackage.r10.918a28e-1-any.pkg.tar.zst" # 示例
namcap -i "$newpkg"
repoctl add --require-signature "$newpkg"
回购问题:
--require-signature
上面的行中需要 arg吗?
答案1
假设您已经$pkg
在内部构建了一个包~/build
并且想要签名,然后将其添加到已签名的数据库中命名为test_repo
.以下是如何使用gpg
和执行此操作的步骤repo-add
。
pkg=some-package-0.0.2-1-any.pkg.tar.zst
# Create a detached signature.
gpg --use-agent --output ~/build/"${pkg}".sig --detach-sig ~/build/"${pkg}"
# Copy package and its signature to repository directory.
cp ~/build/"${pkg}"{,.sig} ~/repo/
# Add package to repository and sign it.
repo-add --verify --sign ~/repo/test_repo.db.tar.gz ~/repo/"${pkg}"
到安装包装和测试签名是否有效,您可以将存储库添加到/etc/pacman.conf
:
[test_repo]
SigLevel = Required TrustedOnly
Server = file:///home/YOUR-USERNAME/repo
然后运行pacman -Syu
并pacman -S some-package
.
如果您的签名密钥尚未导入到 pacman 密钥环中,pacman 将向您显示密钥 ID 并要求导入它。说是的。然后使用 签署导入的密钥sudo pacman-key --lsign <key-id>
并尝试再次安装该软件包。
资料来源:
https://archlinux.org/pacman/makepkg.conf.5.html
- 使用
--sign
选项makepkg
覆盖sign
中的设置makepkg.conf
。 “这将gpg --detach-sign --use-agent
在构建的包上执行,以使用 GPG 代理(如果可用)生成一个分离的签名文件。签名文件将是带有“.sig”扩展名的包的完整文件名。”
- 使用
https://wiki.archlinux.org/title/DeveloperWiki:Package_signing#Arch_implementation
- “[...] using
repo-add --verify --sign
.[...] 独立于这些选项,repo-add
将检测分离的签名,通过 base64 将其转换为 ASCII,并将其添加到存储库数据库中。
- “[...] using
我没有经验报告,但希望以上内容对您有所帮助。也许创建 gpg 签名然后运行就足够了repoctl add --require-signature ~/build/"${pkg}"