2.7.15. 小型公共软件包档案库

[提示]提示

手动建立软件仓库是极其复杂的。有数个软件仓库管理工具可供用户选用。网上有一个 详尽的列表 可供参阅。

下面是一个建立小型公共软件包档案库的示例,兼容了 secure APT 系统(参见 第 2.5.2 节 “顶层“Release”文件及真实性”)。让我们进行一些假定。

  • 账号名:“foo

  • 主机名:“www.example.com

  • 所需软件包:apt-utilsgnupg 和其它软件包

  • URL: “http://www.example.com/~foo/“ ( → “/home/foo/public_html/index.html“)

  • 软件包架构:“amd64

在该服务器上使用如下方式为 Foo 创建一个 APT 源钥匙对。

  1. $ ssh foo@www.example.com
  2. $ gpg --gen-key
  3. ...
  4. $ gpg -K
  5. ...
  6. sec 1024D/3A3CB5A6 2008-08-14
  7. uid Foo (ARCHIVE KEY) <foo@www.example.com>
  8. ssb 2048g/6856F4A7 2008-08-14
  9. $ gpg --export -a 3A3CB5A6 >foo.public.key

公布 “foo.public.key“文件,即公钥 ID 为 “3A3CB5A6“的源公钥文件,该文件可用于 Foo 源的发布

使用如下方式创建一个名为”Origin: Foo”的源目录树。

  1. $ umask 022
  2. $ mkdir -p ~/public_html/debian/pool/main
  3. $ mkdir -p ~/public_html/debian/dists/unstable/main/binary-amd64
  4. $ mkdir -p ~/public_html/debian/dists/unstable/main/source
  5. $ cd ~/public_html/debian
  6. $ cat > dists/unstable/main/binary-amd64/Release << EOF
  7. Archive: unstable
  8. Version: 4.0
  9. Component: main
  10. Origin: Foo
  11. Label: Foo
  12. Architecture: amd64
  13. EOF
  14. $ cat > dists/unstable/main/source/Release << EOF
  15. Archive: unstable
  16. Version: 4.0
  17. Component: main
  18. Origin: Foo
  19. Label: Foo
  20. Architecture: source
  21. EOF
  22. $ cat >aptftp.conf <<EOF
  23. APT::FTPArchive::Release {
  24. Origin "Foo";
  25. Label "Foo";
  26. Suite "unstable";
  27. Codename "sid";
  28. Architectures "amd64";
  29. Components "main";
  30. Description "Public archive for Foo";
  31. };
  32. EOF
  33. $ cat >aptgenerate.conf <<EOF
  34. Dir::ArchiveDir ".";
  35. Dir::CacheDir ".";
  36. TreeDefault::Directory "pool/";
  37. TreeDefault::SrcDirectory "pool/";
  38. Default::Packages::Extensions ".deb";
  39. Default::Packages::Compress ". gzip bzip2";
  40. Default::Sources::Compress "gzip bzip2";
  41. Default::Contents::Compress "gzip bzip2";
  42. BinDirectory "dists/unstable/main/binary-amd64" {
  43. Packages "dists/unstable/main/binary-amd64/Packages";
  44. Contents "dists/unstable/Contents-amd64";
  45. SrcPackages "dists/unstable/main/source/Sources";
  46. };
  47. Tree "dists/unstable" {
  48. Sections "main";
  49. Architectures "amd64 source";
  50. };
  51. EOF

通过 dupload,你可以自动重复更新你服务器系统上的 APT 档案库内容。

当 “~/.dupload.conf” 包含如下内容时,在客户端执行 “dupload -t foo changes_file” 将所有的软件包文件放入 “~foo/public_html/debian/pool/main/”。

  1. $cfg{'foo'} = {
  2. fqdn => "www.example.com",
  3. method => "scpb",
  4. incoming => "/home/foo/public_html/debian/pool/main",
  5. # The dinstall on ftp-master sends emails itself
  6. dinstall_runs => 1,
  7. };
  8. $cfg{'foo'}{postupload}{'changes'} = "
  9. echo 'cd public_html/debian ;
  10. apt-ftparchive generate -c=aptftp.conf aptgenerate.conf;
  11. apt-ftparchive release -c=aptftp.conf dists/unstable >dists/unstable/Release ;
  12. rm -f dists/unstable/Release.gpg ;
  13. gpg -u 3A3CB5A6 -bao dists/unstable/Release.gpg dists/unstable/Release'|
  14. ssh foo@www.example.com 2>/dev/null ;
  15. echo 'Package archive created!'";

dupload(1)触发postupload钩子脚本,该脚本为每次上传创建软件包文件.

你可以通过下面的方法将这个小型公共档案库添加到你客户端系统的 apt 源中。

  1. $ sudo bash
  2. # echo "deb http://www.example.com/~foo/debian/ unstable main" \
  3. >> /etc/apt/sources.list
  4. # apt-key add foo.public.key
[提示]提示

如果档案库位于本地文件系统中,你可以使用 “deb file:///home/foo/debian/ …”。