手动自建 APT 仓库步骤

Tony 219m2020-12-211732 次点击1 人感谢
### 生成签名用的 GPG KEY

运行命令: `gpg --full-gen-key`

按照提示输入姓名、邮箱,确认,有效期,输入密码,`~/.gnupg/openpgp-revocs.d/`目录下生成`.rev`的 key 文件,有效期两年。

随机 16 位密码: `openssl rand -base64 16`

### 生成 ASCII 格式的 Public Key 文件

`gpg --output devicepackages@uniontech.com.gpg.key --armor --export devicepackages@uniontech.com`

实际测试,`--output选项须在前`

### 手动构建软件包

进入源码仓库文件夹:

```bash
dpkg-buildpackage -us -uc
```

### 对 deb 包进行签名

`apt-get install dpkg-sig`

如果在打包 deb 之前已经做好了签名 key,且软件包的 changelog 中的姓名、邮箱与生成 GPG KEY 所用一样,在执行`dpkg-buildpackage`打包时自动签名。

否则,手动签名:`dpkg-sig --sign builder mypackage_0.1.2_amd64.deb`

### Web 服务器

- 安装 apache2 服务器

`sudo apt install apache2`

`sudo mkdir -p /var/www/repos/apt/`

在`*/etc/apache2/apache2.conf*` 添加 `ServerName localhost`

- 添加 apt 仓库配置文件

`sudo vi /etc/apache2/conf.d/repos`

```bashbash
# /etc/apache2/conf.d/repos
# Apache HTTP Server 2.4

<Directory /var/www/repos/ >
# We want the user to be able to browse the directory manually
Options Indexes FollowSymLinks Multiviews
Require all granted
</Directory>

# This syntax supports several repositories, e.g. one for Debian, one for Ubuntu.
# Replace * with debian, if you intend to support one distribution only.
<Directory "/var/www/repos/*/*/db/">
Require all denied
</Directory>

<Directory "/var/www/repos/*/*/conf/">
Require all denied
</Directory>

<Directory "/var/www/repos/*/*/incoming/">
Require all denied
</Directory>
```

- 修改 80 端口主页指向 apt 仓库地址:

`sudo vi /etc/apache2/sites-available/000-default.conf`

`DocumentRoot /var/www/repos/apt`

### 创建 APT 仓库

首先创建一个仓库用的文件夹,名字没有特定要求。在其中创建一个文件夹`conf`,

- 在`conf`文件夹中创建一个`distributions`文本文件,如下格式:

```bash
Origin: Linux Deepin
Label: Deepin
Codename: fou
Version: 2019
Update: fou
Architectures: amd64 arm64 mips64el sw_64 source
Components: main
UDebComponents: main
Contents: percomponent nocompatsymlink .bz2
SignWith: devicepackages@uniontech.com
Description: Deepin debian packages

Origin: Linux Deepin
Label: Deepin
Codename: fou/sp1
Version: 2019
Update: sp1
Architectures: amd64 arm64 mips64el sw_64 source
Components: main
UDebComponents: main
Contents: percomponent nocompatsymlink .bz2
SignWith: devicepackages@uniontech.com
Description: Deepin debian packages

Origin: Linux Deepin
Label: Deepin
Codename: fou/sp2
Version: 2019
Update: sp2
Architectures: amd64 arm64 mips64el sw_64 source
Components: main
UDebComponents: main
Contents: percomponent nocompatsymlink .bz2
SignWith: devicepackages@uniontech.com
Description: Deepin debian packages
```

- `apt-get install reprepro`

`reprepro`会自动创建仓库所需要的结构。

- 创建或更新`distributions`后,执行:`reprepro export`刷新仓库。

- 添加软件包到仓库:

```bash
reprepro --ask-passphrase -Vb . includedeb codename packages.deb
# --aks-passphrase 询问密码,在生成GPG KEY设置的密码
# -V verbose 详细模式,输出详细信息
# -b basedir
# . 当前目录
# includedeb 添加软件包
# codename 比如fou, fou/sp1, fou/sp2
```

- 删除软件包,指定 codename

`reprepro remove codename packagesname`

- 删除软件代码,指定 codename

`reprepro removedsc codename packagesname`

### 添加 key

`wget -O - http://×××/devicepackages@uniontech.com.gpg.key | sudo apt-key add -`

### 添加仓库地址到 `/etc/apt/sources.list`

测试仓库:`deb http://192.168.122.1/unstable fou main`

稳定仓库:`deb http://192.168.122.1/stable fou main`

### 修改仓库优先级

`vi /etc/apt/preferences`

```bash
Package: *
Pin: origin 192.168.122.1
Pin-Priority: 900
```
[via](https://github.com/sandylaw/reprepro)
收藏 ♥ 感谢
Spoony 小组长 2020-12-21 
不错,原来是这么搭的。学习了
沐风MWind 63.05m 2020-12-22 
好东西
Tony 219m 2020-12-22 
@Spoony 自己建了一个 https://github.com/hmsjy2017/packages
可以帮我测试一下吗?
Spoony 小组长 2020-12-23 
测试了下可以 update
install 找不到包
Tony 219m 2020-12-23 
@Spoony 目前就放了blockpi,code-oss,code,codium,com.github.johnfactotum.foliate,v2raya这几个包,可以试试apt install

sudo apt install PACKAGE_NAME,把PACKAGE_NAME替换为你要安装的软件包
手头没设备,不好测试
Spoony 小组长 2020-12-23  ♥ 1
可以,速度慢了点,安装没问题
Tony 219m 2020-12-23 
@Spoony 准备在Gitee,Coding上建个镜像,GitHub真心太慢

LEDSTICK PRO已收到,感谢组长
Spoony 小组长 2020-12-24 
@Tony OK
v2less 10cm 2020-12-24  ♥ 1
这是我编写的,请署名来源哦。

登录注册 后可回复。