制作已签名的Debian仓库(redflag)
jilidi 2021-1-25 13024

普通仓库

  • 以 Debian 8 / Jessie 为例,使用官方的ISO里的软件包制作apt仓库

  1. apt-get -y install nginx reprepro dpkg-sig

  2. mkdir -pv /data/file /mnt/d{1,2,3} /data/mirror/debian/conf


下载DVD镜像

wget -P /data/file http://mirrors.yun-idc.com/debian-cd/current/amd64/iso-dvd/debian-8.2.0-amd64-DVD-{1,2,3}.iso

挂载到本地

  1. mount -t iso9660 -o ro,loop /data/file/debian-8.2.0-amd64-DVD-1.iso /mnt/d1

  2. mount -t iso9660 -o ro,loop /data/file/debian-8.2.0-amd64-DVD-2.iso /mnt/d2

  3. mount -t iso9660 -o ro,loop /data/file/debian-8.2.0-amd64-DVD-3.iso /mnt/d3


创建仓库

  • reprepro 根据 distributions 生成仓库:

  1. head -9 /mnt/d1/dists/jessie/Release | sed '/Date:/d' - > /data/mirror/debian/conf/distributions

  2. reprepro -Vb /data/mirror/debian includedeb jessie $(find /mnt/d{1,2,3}/pool/ -type f -name "*.deb")


提供HTTP服务

  • 安装Nginx并修改配置指向仓库根目录,/etc/nginx/nginx.conf 片段配置:

  1. server {

  2. listen 80 backlog=8192# backlog代表此端口允许同时打开(tcp_syn)的最大值

  3. server_name mirrors.biliops.com;

  4. charset utf-8;

  5. location / {

  6. root /data/mirror;

  7. autoindex on;

  8. autoindex_exact_size off;

  9. autoindex_localtime on;

  10. access_log /data/log/nginx/access.log; #访问过程不记日志

  11. }

  12. location ~ ^(.*)\/\.(svn|git|hg|bzr|cvs)\/ { # 屏蔽这些目录

  13. deny all;

  14. access_log off;

  15. log_not_found off;

  16. }

  17. location ~ /\. { # 屏蔽.开头的目录或文件,比如 .htaccess .bash_history

  18. deny all;

  19. access_log off;

  20. log_not_found off;

  21. }

  22. }


测试使用

  • 修改 /etc/apt/sources.list 指向 mirrors.biliops.com :

deb http://mirrors.biliops.com/debian jessie main contrib

  • 更新本地源数据

apt-get update

仓库签名

制作签名

  • 生成自定义密钥:

  1. gpg --gen-key

  2. # Real name: mirror-key

  3. # gpg: directory `~/.gnupg' created

  4. # gpg: new configuration file `~/.gnupg/gpg.conf' created

  5. # gpg: WARNING: options in `~/.gnupg/gpg.conf' are not yet active during this run

  6. # gpg: keyring `~/.gnupg/secring.gpg' created

  7. # gpg: keyring `~/.gnupg/pubring.gpg' created

  8. # Not enough random bytes available.

  9. rngd -r /dev/urandom -o /dev/random -f -t 1


  • 查看密钥:

  1. gpg --list-keys

  2. gpg --list-secret-keys

  3. apt-key list


  • 备份和恢复:

  1. gpg -o ~/gpg-pub.key -a --export mirror-key # 导出公钥

  2. gpg -o ~/gpg-sec.key -a --export-secret-keys mirror-key # 导出私钥

  3. gpg --import ~/gpg-sec.key ~/gpg-pub.key # 恢复公、私钥


给仓库签名

  • 实际上就在配置里加上 SignWith: mirror-key,然后重新生成源数据即可:

  1. head -9 /mnt/d1/dists/jessie/Release | sed 's/^Date:.*/SignWith: mirror-key/g' - > /data/mirror/debian/conf/distributions

  2. # rm -rfv /data/mirror/debian/{db,dists,lists} # 可删除

  3. reprepro -Vb /data/mirror/debian export jessie


测试仓库的签名

  • 客户端需要导入公钥,否则无法使用 apt-get update :


  • 导入公钥即可正常使用,apt-key add :

wget -q -O - mirrors.biliops.com/gpg-pub.key | sudo apt-key add -


  • 至此,我们的仓库需要有签名才能使用啦!

打包签名

  • 如果仓库不需要签名,可以只对指定的软件包签名。需要 dpkg-sig 打,示例:

dpkg-sig -k mirror-key --sign higkoo $(find /data/mirror/debian/pool -type f -name "*.deb")




最新回复 (4)
  • 1 2

    2021-1-25 回复
  • 0 3
    一会我分享一个图形中加源的
    2021-1-25 收起回复
    jilidi : 好的,正愁没有配置图文资料。2021-1-25回复
  • 0 4
    坐等loverf的分享
    2021-1-25 收起回复
    loverf : 我那个没技术含量2021-1-26回复
  • zdl
    0 5
    很不错··支持一下·
    2021-1-26 回复
返回