使用 Reprepro 构建自己的 APT 仓库

最近使用 Puppet 的过程中,发现用 dpkg 做 Package 的 Provider 时总是会在报告里留下 ensure changed 'purged' to 'present' 这样子的日志,即使这个包已经被安装过了还是如此。

于是我的 Foreman 就被这样的日志强暴了三天。。。

Snip20130903_16.png

问了下 Eric 酱,好像只能自建 APT 仓库了,Debian 官方的 Wiki 里有好多种建立 APT 仓库的工具。
这里我使用 reprepro,功能足够,设置简单,嗯,就它了。

安装 Reprepro

1
apt-get install -y reprepro

配置 Reprepro

首先呢,创建一个文件夹来存放你的仓库咯,我放在 /data/repo/ 这个目录。

1
mkdir -p /data/repo/conf

然后需要创建 distributions 这个文件用来标识发行版,我管理的机器主要有三个发行版,以下的内容按自己实际情况修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Origin: Aveline Swan
Label: aveline
Suite: precise
Codename: precise
Version: 12.04
Architectures: i386 amd64
Components: main
Description: Packages for Aveline Swan

Origin: Aveline Swan
Label: aveline
Suite: squeeze
Codename: squeeze
Version: 6.0
Architectures: i386 amd64
Components: main
Description: Packages for Aveline Swan

Origin: Aveline Swan
Label: aveline
Suite: wheezy
Codename: wheezy
Version: 7.0
Architectures: i386 amd64
Components: main
Description: Packages for Aveline Swan

添加包

/data/repo 这个目录执行 reprepro includedeb 发行版 deb包位置 命令添加既可。

设置 Web 服务

这里我直接使用了 nginx,配置文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
server {
listen 80;
server_name apt.swan.im;

location / {
root /home/apt;
autoindex on;
}

location /conf {
return 403;
}
}

添加 APT 仓库到服务器

在 Puppet Master 上执行 puppet module install puppetlabs/apt 安装 apt 模块。

然后在 site.pp 里添加

1
2
3
4
5
6
7
include apt

apt::source { 'swan':
location => 'http://apt.swan.im',
repos => 'main',
include_src=> false
}

如果你的仓库里不包含源码的话,记得要把 include_src 这个设置为 false,不然会报错。