一、背景及概述
1.背景
1)最近在做的一个项目,linux环境是ubuntu16.04,需要把多个开源包打在一起形成一个安装包供其他人使用,这就面临一个问题,开源包依赖很多的linux依赖库,同时不能保证外部使用环境一定联网,稳妥的办法就是把所有依赖包都打到安装包中,此时便需要制作ubuntu的apt本地源
2.概述
1)ubuntu中的apt源由配置文件驱动,配置文件为/etc/apt/source.list,文件通过http地址指向具体的apt源位置,可以是官方的源,也可以是公司内部提供的源。基于以上的说明,我们就可以通过改变source.list的指向来达到制作本地源的目的
二、具体制作步骤
1.制作源
以libpcap库为例,当安装包中的开源模块需要libpcap库的时候,我们需要把libpcap包以及它的所有依赖全部下载下来。
1)apt install -d命令
通过此命令下载指定包和所有依赖,并且不会在系统中安装指定包。
下载的所有包均在/var/cache/apt/archives/目录下
具体命令:apt install -d libpcap-dev,操作后效果如下图
![]()
2)创建本地源
创建一个目录,起任意名字,我的目录名为debs,将下载的所有包拷贝到文件夹中
dpkg-scanpackages命令的作用为创建一个描述文件,描述当前文件夹中有哪些依赖包
以及依赖包之间的依赖关系。
具体命令:dpkg-scanpackages debs/ /dev/null | gzip> debs/Packages.gz
现在debs文件夹中的内容为依赖包+描述文件Packages.gz
此时debs就是一个可用的本地源
2.使用本地源
1)将源文件夹拷贝到指定文件夹,如/var/debs
2)修改apt源配置文件
mv /etc/apt/source.list /etc/apt/source.list.bak 备份原有源
touch /etc/apt/source.list 创建空文件
echo"deb [trusted=yes] file:/var debs/" > /etc/apt/source.list 指定本地源
3)更新源并安装
apt update,此时apt源即指向我们的本地源
apt install libpcap-dev,安装pcap库,此时便可以安装成功
2.扩展
本文示例中只是针对一个libpcap库进行的本地源创建源操作,如实际项目需求中需要集成多个依赖包有几种方式。
方式1:把所有依赖包都集中在一个debs文件夹中
当目标库依赖的包数量较少且互相依赖的版本不冲突时可以使用方式1。
方式2:每个目标库都对应不同的debs文件夹
当目标库依赖的包数量较多且互相依赖的版本有冲突时可以使用方式2
例如我们要在系统中安装gcc,那么此时我们要为gcc提供一个单独的gcc-debs文件夹
通过多次的source.list配置文件修改、apt update、apt install切换不同的本地源