最近在做一个项目要用搭建一个我们自己的Ubuntu的源更新仓库。于是查找了一些debian和Ubuntu的一些资料。并根据理解搭建了一个自己的DEB仓库。
Ubuntu的更新源仓库主要是根据目录结构以及一些index contents 以及relase来进行分析的。客户端会自动根据版本平台已经仓库的提供的相关信息进行自动更新,就是我我们只要将目录结构搭建正确,相关文件生成的正确就完成仓库的搭建了,下面说一下Ubuntu的目录结构和相关文件
|–repository
| |– dists
| | |– stable
| | | |– Contents-i386.gz
| | | |– apt.conf
| | | |– Release
| | | |– Release.gpg
| | | |– main
| | | | |– binary-amd64
| | | | |– binary-i386
| | | | | |– Packages
| | | | | |– Packages.gz
| | | | |– source
| | | |– multiverse
| | | | |– binary-amd64
| | | | |– binary-i386
| | | | |– source
| | | |– restricted
| | | | |– binary-amd64
| | | | |– binary-i386
| | | | |– source
| | | |– universe
| | | | |– binary-amd64
| | | | |– binary-i386
| | | | | |– Packages
| | | | | |– Packages.gz
| | | | |– source
| |– pool
| | |– main
| | | |– p
| | | | |– pidgind_2.5.6_ie86.deb
| | |– multiverse
| | |– restricted
| | |– universe
| |– project
| | |– keyring.gpg
目录结构基本上就是这样
repository:是仓库的主目录没有什么要求随便定义
dists:注意这个目录是位于主目录下名字必须是这个名字用于存放一些仓库的的相关信息archieve 以及 package 和 platorm信息的。
pool:这个是用于存放deb的目录所有的deb必须放在这个下面,子目录会在后面说。
project:用于存放项目的相关文件的信息,比如gpg的密钥文件。
dists/{stable,unstable,notfree,contrib}下的子目录 这个目录下面可以有多个目录 是每个archieve 的名字。名字可以自己定义
dists/stable/{main,restrict,universe} 这个是component名字,这个名字也可以自己定义但一般按照规范会定义成符合规范的名字。
dists/stable/main/{binary-i386,binary-arm,binary-amd64..} 这个目录是根据平台来定义的,目录的名字必须以binary-平台 形式来定义,客户端更新时会根据自己的平台查到相应的目录所以文件。
dists/stable/main/source 用于存在源代码的索引文件的目录。
pool/{main,restrict,universe} 这个目录是根据component的名字来定义这个名字应该可以不一样,但我没试过,
基本目录已经基本说完。下面说一下各个目录的文件。
| | | |– Contents-i386.gz –内容的索引文件(干什么用的,我没具体看,但看名字知道 格式:Contents-平台.gz
| | | |– apt.conf –apt-get时使用的相关信息
| | | |– Release–相关的release 文件
| | | |– Release.gpg –gpg对releaese的签名文件
| | | | |– binary-i386
| | | | | |– Packages –该平台下的索引文件
| | | | | |– Packages.gz –该平台下的索引的压缩文件
基本的概念基本已经完成,下面说一下基本的搭建仓库的步骤和命令。
首先创建目录结构
mkdir -p respo/dists/stable/{main,restrict}/{binary-i386,binary-amd64}
mkdir -p respo/pool/{main,restrict}
mkdir -p respo/project
然后创建GPG的加密文件
gpg -K (如果没有生成过配置文件,则会创建一些相关的信息。创建过会列车密钥)
gpg –gen-key (生成密钥)
gpg –export -a BC907093 > respo/project/keyring.gpg #导出密钥文件到项目目录下
然后拷贝几个可以安装的 deb包到 respol/pool/main 下面
这里我们就用main和i386平台来做演示
下面这个步骤很重要
cd respo 如果不在仓库目录则更新时下载的deb路径会有问题
#生成索引文件
apt-ftparchive packages pool/main > dists/stable/main/binary-i386/Packages
cat dists/stable/main/binary-i386/Packages | gzip -9c > dists/stable/main/binary-i386/Packages.gz
#生成内容文件
apt-ftparchive contents pool/ | gzip -9c > dists/stable/Contents-i386.gz
#生成apt.conf文件
echo “APT::FTPArchive::Release {” >> dists/stable/apt.conf
echo “Origin \”Ubuntu\”;” >> dists/stable/apt.conf
echo “Label \”Ubuntu\”;” >> dists/stable/apt.conf
echo “Suite \”stable\”;” >> dists/stable/apt.conf
echo “Codename \”$ARCHIVE_NAME\”;” >> dists/stable/apt.conf
echo “Versin \”2.1\”;” >> dists/stable/apt.conf
echo “Architecture \”arm i386\”;” >> dists/stable/apt.conf
echo “Components \”main\”;” >> dists/stable/apt.conf
echo “Description \”my arm\”;” >> dists/stable/apt.conf
echo “};” >> dists/stable/apt.conf
#生成release文件
apt-ftparchive -c dists/stable/apt.conf release dists/stable> dists/stable/Release
#签名release文件
gpg -a –detach-sign -o dists/stable/Release.gpg dists/stable/Release
忘记说ubuntu的源配置了:
/etc/apt/source.list 下修改
deb http://…/respo stable main
然后
去project 目录 apt-key add keyring.gpg 添加密钥文件
最后 apt-get update 可以看到效果