安装 gnupg reprepro
sudo apt install -y gnupg reprepro
创建 GPG 密钥
gpg --full-gen
gpg (GnuPG) 2.2.12; Copyright (C) 2018 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
请选择您要使用的密钥类型:
(1) RSA 和 RSA (默认)
(2) DSA 和 Elgamal
(3) DSA(仅用于签名)
(4) RSA(仅用于签名)
您的选择是?
RSA 密钥的长度应在 1024 位与 4096 位之间。
您想要使用的密钥长度?(3072)
请求的密钥长度是 3072 位
请设定这个密钥的有效期限。
0 = 密钥永不过期
<n> = 密钥在 n 天后过期
<n>w = 密钥在 n 周后过期
<n>m = 密钥在 n 月后过期
<n>y = 密钥在 n 年后过期
密钥的有效期限是?(0)
密钥永远不会过期
这些内容正确吗? (y/N) y
GnuPG 需要构建用户标识以辨认您的密钥。
真实姓名: 123456
电子邮件地址: 123456@qq.com
注释:
您选定了此用户标识:
“123456 <123456@qq.com>”
更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)? o
我们需要生成大量的随机字节。在质数生成期间做些其他操作(敲打键盘
、移动鼠标、读写硬盘之类的)将会是一个不错的主意;这会让随机数
发生器有更好的机会获得足够的熵。
gpg: /root/.gnupg/trustdb.gpg:建立了信任度数据库
gpg: 密钥 2E39C9D9A984D19C 被标记为绝对信任
gpg: 目录‘/root/.gnupg/openpgp-revocs.d’已创建
gpg: 吊销证书已被存储为‘/root/.gnupg/openpgp-revocs.d/190FC0E324E3DE84F505DF2E2E39C9D9A984D19C.rev’
公钥和私钥已经生成并被签名。
pub rsa3072 2022-07-23 [SC]
190FC0E324E3DE84F505DF2E2E3
uid 123456 <123456@qq.com>
sub rsa3072 2022-07-23 [E]
列出系统中的 GPG 密钥
gpg --list-keys
gpg: 正在检查信任度数据库
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: 深度:0 有效性: 1 已签名: 0 信任度:0-,0q,0n,0m,0f,1u
/root/.gnupg/pubring.kbx
------------------------
pub rsa3072 2022-07-23 [SC]
190FC0E324E3DE84F505DF2E2E3
uid [ 绝对 ] 123456 <123456@qq.com>
sub rsa3072 2022-07-23 [E]
创建站点仓库目录
mkdir -p data/www/repo/key data/www/repo/conf data/www/repo/deb
导出 GPG 公钥到站点仓库
gpg --armor --export 190FC0E324E3DE84F505DF2E2E3 > data/www/repo/key
查看公钥
cat data/www/repo/key/public.key
-----BEGIN PGP PUBLIC KEY BLOCK-----
......
OQMwxy6rMe8P3fz1PqKp3uyWyuyndUZ8ZKou7l
nrk=
=iDv0
-----END PGP PUBLIC KEY BLOCK-----
配置仓库信息 vim data/www/repo/conf/distributions
Origin: mydeb
Suite: stable
Codename: mydeb # 这是debian10的代号,可以随便叫,记住就行,之后经常用到
Version: 1.0
Architectures: amd64 source # 拉取构架和源码(不要源码去掉source就行)
Components: main contrib non-free
UDebComponents: main contrib non-free
Description: this is a test repo # 描述信息
SignWith: 190FC0E324E3DE84F505DF2E2E3
#Update: # update 配置信息,用于从上游仓库更新
重要的配置字段解释:
字段 | 说明 |
Origin | 库的名字, 如 mydeb |
Label | 库的标签, 如 mydeb |
Suite | 套件类型,stable 或 unstable |
Codename | 版本的代号,对应/etc/apt/source.list中URL的相关字段,非常重要 !!!!!! |
Version | 发布版本,如 1.0 |
Architectures | 仓库中deb包支持的架构,包括i386,amd64,mips64,sw_64 source。需要根据实现情况填写,支持什么架构添加什么架构 |
Components | 仓库中deb包的组件类型,包括 main,contrib,non-free |
UDebComponents | 包括 main,contrib,non-free |
Description | 描述 |
SignWith | gpg公钥GPG Key-ID,如 190FC0E324E3DE84F505DF2E2E3 |
Update | update 配置信息,用于从上游仓库更新 |
将包导入仓库:
reprepro -b ${DEB_PATH} includedeb ${codename} xxx.deb
如:
reprepro -b data/www/repo/ includedeb mydeb nginx_1.14.2-2+deb10u4_all.deb
查看仓库列表
reprepro -b ${DEB_PATH} list ${codename} xxx.deb
如:
reprepro -b data/www/repo list mydeb
>>>:
mydeb|main|amd64: nginx 1.14.2-2+deb10u4
删除指定的包
reprepro -b ${DEB_PATH} remove ${codename} xxx.deb
如:
reprepro -b data/www/repo remove mydeb nginx
>>>:
Exporting indices...
Deleting files no longer referenced...