文档章节

制作已签名的Debian仓库

anglix
 anglix
发布于 2015/11/19 13:56
字数 819
阅读 498
收藏 3

普通仓库

  • 以 Debian 8 / Jessie 为例,使用官方的ISO里的软件包制作apt仓库
apt-get -y install nginx reprepro dpkg-sig
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

挂载到本地

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

创建仓库

  • reprepro 根据 distributions 生成仓库:
head -9 /mnt/d1/dists/jessie/Release | sed '/Date:/d' - > /data/mirror/debian/conf/distributions
reprepro -Vb /data/mirror/debian includedeb jessie $(find /mnt/d{1,2,3}/pool/ -type f -name "*.deb")

提供HTTP服务

  • 安装Nginx并修改配置指向仓库根目录,/etc/nginx/nginx.conf 片段配置:
server {
        listen       80 backlog=8192; # backlog代表此端口允许同时打开(tcp_syn)的最大值
        server_name  mirrors.biliops.com;
        charset utf-8;
        location / { 
                root /data/mirror;
                autoindex on;
                autoindex_exact_size off;
                autoindex_localtime on;
                access_log  /data/log/nginx/access.log; #访问过程不记日志
        }
        location ~ ^(.*)\/\.(svn|git|hg|bzr|cvs)\/ { # 屏蔽这些目录
                deny all;
                access_log off;
                log_not_found off;
        }
        location ~ /\. { # 屏蔽.开头的目录或文件,比如  .htaccess .bash_history
                deny all;
                access_log off;
                log_not_found off;
        }
}

测试使用

  • 修改 /etc/apt/sources.list 指向 mirrors.biliops.com
deb http://mirrors.biliops.com/debian jessie main contrib
  • 更新本地源数据
apt-get update

仓库签名

制作签名

  • 生成自定义密钥:
gpg --gen-key
# Real name: mirror-key
# gpg: directory `~/.gnupg' created
# gpg: new configuration file `~/.gnupg/gpg.conf' created
# gpg: WARNING: options in `~/.gnupg/gpg.conf' are not yet active during this run
# gpg: keyring `~/.gnupg/secring.gpg' created
# gpg: keyring `~/.gnupg/pubring.gpg' created
# Not enough random bytes available.
rngd -r /dev/urandom -o /dev/random -f -t 1
  • 查看密钥:
gpg --list-keys 
gpg --list-secret-keys 
apt-key list
  • 备份和恢复:
gpg -o ~/gpg-pub.key -a --export mirror-key # 导出公钥
gpg -o ~/gpg-sec.key -a --export-secret-keys mirror-key # 导出私钥
gpg --import ~/gpg-sec.key ~/gpg-pub.key # 恢复公、私钥

给仓库签名

  • 实际上就在配置里加上 SignWith: mirror-key,然后重新生成源数据即可:
head -9 /mnt/d1/dists/jessie/Release | sed 's/^Date:.*/SignWith: mirror-key/g' - > /data/mirror/debian/conf/distributions
# rm -rfv /data/mirror/debian/{db,dists,lists} # 可删除
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")

手动打签名

  • 爱折腾的话,手动打签名脚本可参考:
#!/bin/bash
if [ "$1" == "checksum_md5" ]; then
	printf ' '$(md5sum $2 | cut --delimiter=' ' --fields=1)' %16d '$2'\n' $(wc --bytes $2 | cut --delimiter=' ' --fields=1)
	exit 0
elif [ "$1" == "checksum_sha1" ]; then
	printf ' '$(sha1sum $2 | cut --delimiter=' ' --fields=1)' %16d '$2'\n' $(wc --bytes $2 | cut --delimiter=' ' --fields=1)
	exit 0
elif [ "$1" == "checksum_sha256" ]; then
	printf ' '$(sha256sum $2 | cut --delimiter=' ' --fields=1)' %16d '$2'\n' $(wc --bytes $2 | cut --delimiter=' ' --fields=1)
	exit 0
fi
BASEDIR=/data/mirror/debian
HEADER=${BASEDIR}/conf/main-info
OS_CODENAME=jessie
SELF_SCRIPT="`pwd`/$0"
cd ${BASEDIR}
dpkg-scanpackages pool/${OS_CODENAME} 2>/tmp/deb.log | tee dists/${OS_CODENAME}/main/binary-amd64/Packages | gzip -9c > dists/${OS_CODENAME}/main/binary-amd64/Packages.gz
cat dists/${OS_CODENAME}/main/binary-amd64/Packages | bzip2 -9c > dists/${OS_CODENAME}/main/binary-amd64/Packages.bz2
cd ${BASEDIR}/dists/${OS_CODENAME}
/bin/cp -fv ${HEADER} ${BASEDIR}/dists/${OS_CODENAME}/binary-amd64/Release
/bin/cp -fv ${HEADER} Release
echo "MD5Sum:" >> Release
find main/ -type f | xargs -n 1 $SELF_SCRIPT checksum_md5 >> Release
echo "SHA1:" >> Release
find main/ -type f | xargs -n 1 $SELF_SCRIPT checksum_sha1 >> Release
echo "SHA256:" >> Release
find main/ -type f | xargs -n 1 $SELF_SCRIPT checksum_sha256 >> Release
rm Release.gpg InRelease
gpg --clearsign -o InRelease Release
gpg -abs -o Release.gpg Release

© 著作权归作者所有

共有 人打赏支持
anglix

anglix

粉丝 31
博文 35
码字总数 17615
作品 0
珠海
系统管理员
Docker搭建私有registry

----------------------------------------- 一、版本说明 二、Server配置(registry 仓库) 制作签名 安装registry 制作tag 上传测试 复制证书到Client 三、Client配置 添加hosts记录 下载测...

_诺千金
2017/10/13
0
0
Debian for armel 进展情况

目前制作的debian文件系统存在驱动问题,主要表现在触摸屏无法触控,鼠标,键盘无法使用,但是驱动设备节点的数据都可以正常输出,原因待查,解决起来可能会比较慢;其他硬件接口未使用,所以...

tsuibin
2015/12/16
57
0
邮件服务解决方案 iRedMail-0.5.0-beta1 发布

开源邮件服务解决方案 iRedMail-0.5.0-beta1 发布了,支持 Debian 系统。现在支持的操作系统有:RHEL, CentOS, Debian。还将移植到 Ubuntu 系统。这个版本主要是加入了对 Debian (Lenny, 5.0...

红薯
2009/05/06
203
0
Zero Install 项目发布1.0版

Zero Install是一个去中心化的跨发行版软件安装系统,采用 LGPL授权。它让软件开发者直接在自己的网站上发布程序,功能上类似于中心化的发行仓库,支持共享库,自动更新和数字签名。它的初衷...

红薯
2011/05/24
1K
1
【译】Metasploit:搭建开发环境

原文地址:https://github.com/rapid7/metasploit-framework/wiki/Setting-Up-a-Metasploit-Development-Environment 作者:Metasploit Community 译者:王一航 & Google 2018-06-15 校对:王......

王一航
06/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JS:异步 - 面试惨案

为什么会写这篇文章,很明显不符合我的性格的东西,原因是前段时间参与了一个面试,对于很多程序员来说,面试时候多么的鸦雀无声,事后心里就有多么的千军万马。去掉最开始毕业干了一年的Jav...

xmqywx
今天
0
0
Win10 64位系统,PHP 扩展 curl插件

执行:1. 拷贝php安装目录下,libeay32.dll、ssleay32.dll 、 libssh2.dll 到 C:\windows\system32 目录。2. 拷贝php/ext目录下, php_curl.dll 到 C:\windows\system32 目录; 3. p...

放飞E梦想O
今天
0
0
谈谈神秘的ES6——(五)解构赋值【对象篇】

上一节课我们了解了有关数组的解构赋值相关内容,这节课,我们接着,来讲讲对象的解构赋值。 解构不仅可以用于数组,还可以用于对象。 let { foo, bar } = { foo: "aaa", bar: "bbb" };fo...

JandenMa
今天
1
0
OSChina 周一乱弹 —— 有人要给本汪介绍妹子啦

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享水木年华的单曲《中学时代》@小小编辑 手机党少年们想听歌,请使劲儿戳(这里) @须臾时光:夏天还在做最后的挣扎,但是晚上...

小小编辑
今天
18
4
centos7安装redis及开机启动

配置编译环境: sudo yum install gcc-c++ 下载源码: wget http://download.redis.io/releases/redis-3.2.8.tar.gz 解压源码: tar -zxvf redis-3.2.8.tar.gz 进入到解压目录: cd redis-3......

hotsmile
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部