apt get package making - downgoon/hello-world GitHub Wiki
ubuntu 制作 apt-get 源
有了制作 rpm
源的基础,制作 deb
源是大体一样的。需要的东西:
- deb 包:用工具提前把 deb 包制作好。
- meta 信息:用
dpkg-scanpackages
工具,生成 deb 包对应的meta信息。 - HTTP服务:一个HTTP服务,把生成的meta和deb都放一个目录,并通过HTTP对外提供访问。当然也可以本地 file:// 方式或者 ftp:// 方式。
温馨提醒
尽管deb包是ubuntu上的,但是提供apt-get源,却也可以在centos上,只需要安装
dpkg-scanpackages
工具即可(它包含在dpkg-dev
包里,dpkg-dev
表示dpkg
的开发版,才包含dpkg-scanpackages
),执行命令:
$ yum install dpkg-dev
源制作
HTTP 源
apt-get的HTTP源与yum的有所不同:yum的包和相关meta是在同一个目录下,而apt-get的包和相关目录是有规定的层次的(类似maven的src/main/java和test/main/java,有这种约定)。
服务端配置
假设我们有一个 boxstore
目录,用来存放盒子应用(名字类似AppStore),它的目录结构:
[root@XXX]# tree boxstore
boxstore # 存放软件的根目录
├── dists # 约定的meta输出目录 (名字必须叫 dists )
│ └── trusty # 约定的子目录 (名字必须叫 trusty, 或者其他规定的名字)
│ └── main # 约定的子目录 (名字必须叫 main,或者其他规定的名字)
│ └── binary-armhf # 不同平台的包,armhf是CPU名。也有叫 binary-x86等的。
│ └── Packages.gz # 生成的meta包,名字必须叫 Packages.gz
└── packs # 存放 .deb 软件的子目录,名字可以自定义
└── boxeden_0.2.2_armhf.deb # .deb 软件,可以多个。
5 directories, 2 files
- 生成目录结构
cd boxstore
mkdir -p packs dists/trusty/main/binary-armhf
# tree .
.
├── dists
│ └── trusty
│ └── main
│ └── binary-armhf
└── packs
- 存软件于packs
cp XXX/boxeden_0.2.2_armhf.deb boxstore/packs/
- 生成meta信息
cd boxstore
dpkg-scanpackages packs /dev/null | gzip > dists/trusty/main/binary-armhf/Packages.gz -r
- 配置HTTP服务
只需用 nginx,提供一个文件目录浏览服务即可:
location /boxstore {
alias /path/to/boxstore;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
用浏览器访问:http://host:port/boxstore/
客户端配置
- 添加HTTP源
制作完HTTP源后,就需要在客户端的 apt-get 里添加 HTTP 源。
编辑 /etc/apt/sources.list
文件,增加一行:
$ vim /etc/apt/sources.list
deb [arch=armhf] http://10.213.42.230/boxstore/ trusty main
因为我们上面只生成了 binary-armhf
,针对 armhf 体系的,所以deb [arch=armhf]
源限定只提供armhf。末尾的 trusty main 是固定的,跟dists/trusty/main/binary-armhf
是对应的。
- 更新源信息
apt-get update
- 安装boxeden
apt-get install boxeden
- 设置代理
有的时候客户端网络环境要求必须设置代理才能访问某些HTTP服务,apt-get 支持 ---proxy
参数设置代理,也支持 http_proxy
环境变量:
export http_proxy=http://10.77.145.90:8080
export https_proxy=$http_proxy
export no_proxy="localhost,127.0.0.1,*.local,10.213.42.230"
本地源
apt-get 除了支持 HTTP源外,还支持 FTP 和 本地源。本地源的.deb包 和 meta 信息可以放同一个目录(这点跟yum是一样的)。
依然以 /path/to/boxstore
目录为例,子目录 packs
存放 .deb包,并且直接在 packs
子目录下生成meta信息。
- 生成meta
cd boxstore
dpkg-scanpackages packs /dev/null | gzip > packs/Packages.gz -r
- 查看packs
# ls -l packs/
总用量 1120
-rw-r--r-- 1 root root 1139546 4月 4 10:34 boxeden_0.2.2_armhf.deb
-rw-r--r-- 1 root root 405 4月 4 11:08 Packages.gz
- 客户端配置
编辑 /etc/apt/sources.list
文件,增加一行:
$ vim /etc/apt/sources.list
deb file:///path/to/boxstore/ packs/
注意:格式上,packs 前面有个空格,后面有个斜杠。
- 更新源并安装
apt-get update
apt-get install boxeden
- 思考题
本地源安装 和
dpkg -i boxeden_0.2.2_armhf.deb
安装方式有什么区别? 相同点是.deb包都从本地读取,不同点是本地源安装时,会自动分析包的依赖,并下载(除了配置本地源,还需配置依赖包对应的HTTP源);而后者只能手工安装依赖。
参考资料
-
制作apt-get源(英文) https://linuxconfig.org/easy-way-to-create-a-debian-package-and-local-package-repository
-
制作 本地 apt-get源(中文-五星) http://www.cnblogs.com/xwdreamer/p/3875857.html
-
building-an-apt-repository-on-centos https://bgstack15.wordpress.com/2016/06/22/building-an-apt-repository-on-centos/
-
ubuntu 源配置文件解释 ( /etc/apt/source.list 格式说明) http://jiachenmianyu.iteye.com/blog/1403036