repo 源配置解析
openEuler 的软件源配置文件位于/etc/yum.repos.d/目录下,以.repo 为后缀名,文件名可以任意取,但是必须以.repo 结尾。
#generic-repos is licensed under the Mulan PSL v2.
#You can use this software according to the terms and conditions of the Mulan PSL v2.
#You may obtain a copy of Mulan PSL v2 at:
# http://license.coscl.org.cn/MulanPSL2
#THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
#IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
#PURPOSE.
#See the Mulan PSL v2 for more details.
[OS]
name=OS
baseurl=http://repo.openeuler.org/openEuler-23.09/OS/$basearch/
metalink=https://mirrors.openeuler.org/metalink?repo=$releasever/OS&arch=$basearch
metadata_expire=1h
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-23.09/OS/$basearch/RPM-GPG-KEY-openEuler
[source]
name=source
baseurl=http://repo.openeuler.org/openEuler-23.09/source/
metalink=https://mirrors.openeuler.org/metalink?repo=$releasever&arch=source
metadata_expire=1h
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-23.09/source/RPM-GPG-KEY-openEuler
其中各个配置项的含义如下:
- [repoid]中的 repoid 为软件仓库(repository)的 ID 号,所有.repo 配置文件中的各 repoid 不能重复,必须唯一。示例中 repoid 为 OS 和 source。
- name 为软件仓库描述的字符串,可以任意取,但是建议取一个有意义的名称,方便用户理解。示例中 name 为 OS 和 source。
- baseurl 为软件仓库的地址,可以是 http、https、ftp 等协议,也可以是本地目录。
- enabled 为是否启用该软件源仓库,可选值为 1 和 0。默认值为 1,表示启用该软件源仓库。示例中 enabled 为 1。
- metalink 为动态的镜像地址,用于镜像加速。
- metadata_expire 为元数据过期时间,单位为秒。默认值为 90 分钟,即 5400 秒。示例中 metadata_expire 为 1h,即 1 小时。
- gpgcheck 可设置为 1 或 0,1 表示进行 gpg(GNU Private Guard)校验,0 表示不进行 gpg 校验,gpgcheck 可以确定 rpm 包的来源是有效和安全的。
- gpgkey 为验证签名用的公钥地址,如果 gpgcheck 为 1,则必须设置 gpgkey。
gpgcheck 详解
RPM-GPG-KEY
是一个公共密钥,用于验证由该密钥签名的RPM包的真实性和完整性。在使用 yum
或 dnf
这样的包管理工具时,这些工具会使用 GPG 密钥来验证软件包的签名,以确保软件包来自于可信的源,且未被篡改。
命名约定:
RPM-GPG-KEY
是一个命名约定,通常与其所属的仓库或发行版相关。例如,如果你在使用某个特定发行版的官方仓库,它可能会提供一个RPM-GPG-KEY
文件来进行软件包签名验证。如openEuler官方仓库提供的RPM-GPG-KEY
文件名为RPM-GPG-KEY-openEuler
。密钥生成: 这个密钥是通过 GPG(GNU Privacy Guard)工具生成的。GPG 是一个用于进行加密和签名的开源工具。
RPM-GPG-KEY
文件包含了一个公钥,该公钥由仓库所有者使用私钥签署软件包,而用户使用公钥验证软件包。验证软件包: 当用户使用
yum
或dnf
安装软件包时,这些工具会检查软件包的签名,并使用相应的RPM-GPG-KEY
文件中的公钥来验证签名。如果验证通过,工具会认为软件包是可信的,否则将会发出警告或拒绝安装。导入密钥: 为了使用
RPM-GPG-KEY
文件,用户通常需要将密钥导入到本地系统中。这通常可以通过运行类似于以下命令的导入密钥的操作来完成:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-openEuler
上述命令中的
/etc/pki/rpm-gpg/RPM-GPG-KEY-openEuler
路径可能会因发行版和配置而有所不同。
RPM包签名
对于发布的 RPM 包进行 GPG 签名是一种重要的安全措施,可以确保接收者能够验证软件包的真实性和完整性。以下是一般的步骤:
生成 GPG 密钥: 如果你还没有 GPG 密钥对,你需要使用 GPG 工具生成一对密钥,包括私钥和公钥。你可以运行以下命令来生成密钥:
gpg --gen-key
当你运行
gpg --gen-key
命令时,它会启动 GPG(GNU Privacy Guard)的密钥生成过程。这个过程将引导你提供一些必要的信息以生成密钥对,包括私钥和公钥。以下是这个命令的详细步骤:选择密钥类型: 你将被要求选择密钥的类型。通常,默认的 RSA 和 DSA 都是可接受的选择,你可以通过键入数字来选择。
选择密钥大小: 你将被要求选择密钥的大小。通常,默认值(通常是2048位)是足够的,但你也可以选择更大的值。
选择密钥的有效期: 你将被要求选择密钥的有效期。你可以选择密钥永久有效,或者在一段特定的时间内有效。如果你选择了特定的时间,你需要输入一个表示有效期的值,例如1y表示一年,1m表示一个月。
提供用户标识信息: 你将被要求提供与密钥相关联的用户标识信息。这包括你的真实姓名、电子邮件地址和一个可选的注释。
确认提供的信息: GPG 将显示你提供的信息并询问你是否确认。如果确认无误,你可以输入
O
或直接按回车键。输入保护密语(passphrase): 你将被要求输入保护密语,用于保护你的私钥。请确保选择一个强密码。
等待密钥生成: GPG 将使用提供的信息生成密钥对。这可能需要一些时间,具体取决于你选择的密钥大小。
生成完成: 一旦生成完成,你将看到一条消息表明密钥生成成功。
在整个过程中,你将看到类似以下的一些提示:
gpg: key ABCDEFGH marked as ultimately trusted gpg: revocation certificate stored as '/home/your_user/.gnupg/openpgp-revocs.d/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.rev' public and secret key created and signed. gpg: checking the trustdb gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model gpg: depth: 0 valid: 2 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 2u pub 2048R/XXXXXXXX 2024-01-01 [expires: 2024-01-01] Key fingerprint = XXXX YYYY ZZZZ AAAA BBBB CCCC DDDD EEEE FFFF 1111 uid Your Name <your.email@example.com> sub 2048R/YYYYYYYY 2024-01-01 [expires: 2024-01-01]
在这个例子中,
XXXXXXXX
是你的密钥 ID,YYYYYYYY
是子密钥的 ID。你可以使用这些 ID 来引用你的密钥。导出公钥: 生成密钥后,你需要将公钥导出。运行以下命令:
gpg --output RPM-GPG-KEY-your-repo --armor --export your@email.com
这将生成一个 ASCII 格式的公钥文件
RPM-GPG-KEY-your-repo
,你可以与软件包一起发布。为 RPM 包签名: 在构建 RPM 包时,使用
rpmbuild
命令时,可以通过添加--sign
选项来指示rpmbuild
对 RPM 包进行签名。例如:rpmbuild -ba your-package.spec --sign
当你执行
rpmbuild -ba your-package.spec --sign
命令时,rpmbuild
会使用默认的 GPG 密钥进行签名。这通常是你在系统上配置为默认 GPG 密钥的密钥。你可以通过检查
rpmbuild
使用的 GPG 密钥来确认它是哪个密钥:rpm -q gpg-pubkey --qf '%{name}-%{version}-%{release} --> %{summary}\n'
这个命令将显示系统上安装的 GPG 公钥,其中默认的密钥可能是 “gpg-pubkey-xxxxxxxx-yyyyyyyy”。你可以根据密钥的 “xxxxxxxx-yyyyyyyy” 部分来确定默认使用的 GPG 密钥。
如果你想使用不同的 GPG 密钥进行签名,可以在
rpmbuild
命令中使用--signwith
选项,例如:rpmbuild -ba your-package.spec --signwith <key-id>
其中
<key-id>
是你想要使用的 GPG 密钥的 ID。这会覆盖默认的密钥。确保你在构建和签名 RPM 包时使用的是正确的 GPG 密钥。导入密钥: 为了验证你的软件包,用户需要导入你的公钥。他们可以运行以下命令:
rpm --import RPM-GPG-KEY-your-repo
发布: 将签名的 RPM 包和公钥一起发布。确保用户知道他们可以使用导入的公钥来验证软件包的签名。