apt-get工作顺序

来源:互联网 发布:淘宝代理买吃的要证吗 编辑:程序博客网 时间:2024/05/21 10:00

1 查询源列表

apt命令会访问/etc/apt/sources.list源列表.

deb [by-hash=force] http://packages.deepin.com/deepin unstable main contrib non-free


2.几个和apt-get相关的目录:

/var/lib/dpkg/available
文件的内容是软件包的描述信息, 该软件包括当前系统所使用的 Deepin安装源中的所有软件包,其中包括当前系统中已安装的和未安装的软件包.


/var/cache/apt/archives
目录是在用 apt-get install 安装软件时,软件包的临时存放路径


/etc/apt/sources.list
存放的是软件源站点, 当你执行 sudo apt-get install xxx 时,deepin就去这些站点下载软件包到本地并执行安装


/var/lib/apt/lists
使用apt-get update命令会从/etc/apt/sources.list中下载软件列表,并保存到该目录


3.APT工作原理:

Deepin采用集中式的软件仓库机制,将各式各样的软件包分门别类地存放在软件仓库中,进行有效地组织和管理。然后,将软件仓库置于许许多多的镜像服务器中,并保持基本一致。这样,所有的Deepin用户随时都能获得最新版本的安装软件包。因此,对于用户,这些镜像服务器就是他们的软件源(Reposity)。

然而,由于每位用户所处的网络环境不同,不可能随意地访问各镜像站点。为了能够有选择地访问,在Deepin系统中,使用软件源配置文件/etc/apt/sources.list列出最合适访问的镜像站点地址。


1)apt-get的更新过程:
执行apt-get update
程序分析/etc/apt/sources.list
自动连网寻找list中对应的Packages/Sources/Release列表文件,如果有更新则下载之,存入/var/lib/apt/lists/目录。
然后 apt-get install 相应的包 ,下载并安装。

即使这样,软件源配置文件只是告知Deepin系统可以访问的镜像站点地址,但那些镜像站点具体都拥有什么软件资源并不清楚。若每安装一个软件包,就在服务器上寻找一遍,效率是很低的。因而,就有必要为这些软件资源列个清单(建立索引文件),以便本地主机查询。

apt-get install 下载的软件存放到 /var/cache/apt/archives/下。

同时,APT能够检查Deepin Linux系统中的软件包依赖关系,大大简化了Deepin用户安装和卸载软件包的过程。


2)apt-get install原理:
deb [by-hash=force] http://packages.deepin.com/deepin unstable main contrib non-free

apt-get 每次都会读取这个文件,从而获取的包的信息。从Packages.gz中获取到所有包的信息。

2 查询Packages.gz

Main 的包的相关信息均在 http://pools.corp.deepin.com/deepin/dists/unstable/main/binary-amd64/

下。不是把包放在这里就行了,还需要生成Packages.gz的包文件,因为apt-get 每次都会读取这个文件,从而获取的包的信息。

从Packages.gz中获取到所有包的信息,然后apt-get就可以通过它找到所有的包并且自动下载安装了。

来看看Packages.gz都有什么吧(下面是python包的信息):

Package: zsshSource: zssh (1.5c.debian.1-3.2)Version: 1.5c.debian.1-3.2+b1Installed-Size: 59Maintainer: Ben Wong <ben@wongs.net>Architecture: amd64Depends: lrzsz, openssh-client | telnet | telnet-ssl, libc6 (>= 2.14), libreadline6 (>= 6.0), libtinfo5 (>= 6)Size: 22230SHA256: a3d0b5b9925f6682e47b4db702653144ab3c1f0c52b6cb1fa2b55a5e24e771dfSHA1: f025cd5b8f23f74b4dbfca4f59f4a8935c67951fMD5sum: efc7c34882d5d05f6a0e6acbe3a290f2Description: interactive file transfers over ssh zssh (Zmodem SSH) is a program for interactively transferring files to a remote machine  while using  the secure  shell (ssh).  It is intended to be a convenient  alternative to scp, allowing to  transfer files without having to open another session and re-authenticate oneself. . Files are transferred through the zmodem  protocol,  using the rz and sz commands. .  Homepage: http://zssh.sourceforge.net/Tag: hardware::modem, interface::commandline, protocol::TODO, protocol::ssh, role::program, scope::utility, uitoolkit::ncurses, use::downloadingSection: netPriority: optionalFilename: pool/main/z/zssh/zssh_1.5c.debian.1-3.2+b1_amd64.deb

包含的信息有:

包名,优先级,类型,维护者,架构,源文件(source),版本号,依赖包,冲突性信息,包大小,文件的下载路径,MD5sum,SHA1,包描述,Xul-Appid---应用程序id,Bugs信息,Origin,Supported

从以上可以看到包的下载地址为:

(http://package.deepin.com/deepin)pool/main/z/zssh/zssh_1.5c.debian.1-3.2+b1_amd64.deb

3 下载包或者依赖

它会首先检查依赖,如果不存在则下载依赖包,这个依赖包或许还有依赖(递归下载),在完成了所有依赖包则可以进行下载,安装完成,中间任意一环没有完成则失败退出.这就是整个过程啦.

总结

  1. 更新Packages.gz解析安装包所依赖的文件
  2. 根据1的结果检查是否所需要的依赖都已经安装,假设没有安装,则下载(应该有自己的下载功能)这些依赖并进行安装,这个过程中会对每个依赖重复1、2这两个过程
  3. 解决依赖关系,下载指定软件并安装,2、3中如果找不到软件或者库,则失败.

Packages.gz已经包含所有所依赖的软件及其版本信息、以及下载地址.

apt-get常用命令

  • sudo apt-get install package 安装包
  • sudo apt-get remove package 删除包
  • sudo apt-get update 更新源
  • sudo apt-get upgrade 更新已安装的包
  • apt-get source package 下载该包的源代码

还有一些命令:

  • apt-cache search package 搜索软件包
  • apt-cache show package 获取包的相关信息,如说明、大小、版本等
  • sudo apt-get install package --reinstall 重新安装包
  • sudo apt-get -f install 修复安装
  • sudo apt-get remove package --purge 删除包,包括配置文件等
  • sudo apt-get dist-upgrade 升级系统
  • apt-cache depends package 了解使用该包依赖那些包
  • apt-cache rdepends package 查看该包被哪些包依赖
  • sudo apt-get build-dep package 安装相关的编译环境
  • sudo apt-get clean && sudo apt-get autoclean 清理无用的包
  • sudo apt-get check 检查是否有损坏的依赖

0 0
原创粉丝点击