MENU

apt-get背后的知识

March 16, 2018 • 编程开发

apt包管理工具简介

Advanced Packaging Tool(apt)是Linux下的一款安装包管理工具,是一个客户/服务器系统。

最初只有.tar.gz的打包文件,用户必须编译每个他想在GNU/Linux上运行的软件。用户们普遍认为系统很有必要提供一种方法来管理这些安装在机器上的软件包,当Debian诞生时,这样一个管理工具也就应运而生,它被命名为dpkg。从而著名的“package”概念第一次出现在GNU/Linux系统中,稍后Red Hat才决定开发自己的“rpm”包管理系统。

很快一个新的问题难倒了GNU/Linux制作者,他们需要一个快速、实用、高效的方法来安装软件包,当软件包更新时,这个工具应该能自动管理关联文件和维护已有配置文件。Debian再次率先解决了这个问题,APT(Advanced Packaging Tool)作为dpkg的前端诞生了。APT后来还被Conectiva改造用来管理rpm,并被其它Linux发行版本采用为它们的软件包管理工具。

APT由几个名字以apt-打头的程序组成。apt-get、apt-cache 和apt-cdrom是处理软件包的命令行工具。

Linux命令 apt,也是其它用户前台程序的后端,如dselect 和aptitude。

apt-get工作原理

关于/etc/apt/sources.list

/etc/apt/sources.list 作用

Ubuntu采用集中式的软件仓库机制,将各式各样的软件包分门别类地存放在软件仓库中,进行有效地组织和管理。然后,将软件仓库置于许许多多的镜像服务器中,并保持基本一致。

这样,所有的Ubuntu用户随时都能获得最新版本的安装软件包。因此,对于用户,这些镜像服务器就是他们的软件源(Reposity)。

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

/etc/apt/sources.list 格式

以下面这个文件中的内容为例子:

deb http://mirrors.163.com/debian/ wheezy main non-free contrib
deb http://mirrors.163.com/debian/ wheezy-proposed-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ wheezy main non-free contrib
deb-src http://mirrors.163.com/debian/ wheezy-proposed-updates main non-free contrib

其中可以把每一行分为四个部分,当你在线更新某个软件时,debian就是遵照这四个选项(准确的说是后三项)的指示找到软件来给你安装的:

deb    ###   URI地址                         ###  版本代号   ###  限定词
deb    ###   http://mirrors.163.com/debian/ ###  wheezy    ###   main non-free contrib
  1. 第一部分(Archive type):获取的软件包类型
    deb或deb-src 分别表示直接通过.deb文件或源文件的方式进行安装
  2. 第二部分:仓库地址(Repository URL)软件包所在仓库的地址,即URI
  3. 第三部分:发行版(Distribution)
  • 发行版有两种分类方法:一类是发行版的具体代号,如 xenial, trusty, precise等;
    还有一类则是发行版的发行类型,如 oldstable, stable, testing 和 unstable。另外,在发行版后还可能有进一步的指定,如 xenial-updates, trusty-security, stable-backports 等。

参看http://mirrors.163.com/debian/dists/ 网页里面的内容:
1.jpg

  • oldstable顾名思义,就是以前的稳定发行版了,在本例中oldstable就是Debian6.0.8目录的一个链接,两者内容完全一致。
  • stable是指现在的稳定发行版,对于每个debian来说,每个稳定发行版都会有一个代号,

    • 如debian 6叫做squeeze,debian 7叫做wheezy,由于在笔者写本文的时候稳定版是debian7,所以stable就是wheezy的一个链接。
  • testing指目前还暂时处于测试阶段的debian发行版,如wheezy往下发展就是jessie了,所以testing代指的就是jessie目录,它是jessie的一个链接。
  • unstable那就是不稳定版本了,但在这个目录清单里我们并没有看到unstable目录,其实它还有一个代号:sid,我们知道debian的发行版本名称大都来自玩具总动员中的角色名称,而sid就是那个专门破坏玩具的邻居家坏小孩,所以就把unstable这个不稳定的软件目录起名为sid了,这里面的软件一般都是最新的,稳定性、安全稳定值得商榷,如果你想做试验小白鼠,大可使用这里的软件。经过一段时间的测试,这里面的软件可能会进入下一个阶段testing目录从而出现在下一个debian发行版中,要么就夭折被直接抛弃了。
  1. 第四部分:软件包分类 (Component)
    跟在发行版之后的就是软件包的具体分类了,可以有一个或多个

Debian

分类名称类型含义
main包含符合 DFSG 指导原则的自由软件包,而且这些软件包不依赖不符合该指导原则的软件包。 这些软件包被视为 Debian 发型版的一部分。
contrib包含符合 DFSG 指导原则的自由软件包,不过这些软件包依赖不在 main 分类中的软件包。
non-free包含不符合 DFSG 指导原则的非自由软件包。

Ubuntu

分类名称类型含义
main官方支持的自由软件
restricted官方支持的非完全自由的软件
universe社区维护的自由软件
multiverse非自由软件

apt-get update 工作原理

无论用户使用哪些手段配置APT软件源,只是修改了配置文件/etc/apt/sources.list,目的只是告知软件源镜像站点的地址。但那些所指向的镜像站点所具有的软件资源并不清楚,需要将这些资源列个清单,以便本地主机知晓可以申请哪些资源。

用户可以使用apt-get update命令刷新软件源,建立更新软件包列表。

在Ubuntu Linux中,apt-get update命令会扫描每一个软件源服务器,并为该服务器所具有软件包资源建立索引文件,存放在本地的/var/lib/apt/lists/目录中。

使用apt-get执行安装、更新操作时,都将依据这些索引文件,向软件源服务器申请资源。

因此,在计算机设备空闲时,经常使用该命令刷新软件源,是一个好的习惯。

apt-get install 工作流程

  1. 扫描本地存放的软件包更新列表(由“apt-get update”命令刷新更新列表,也就是/var/lib/apt/lists/),找到最新版本的软件包
  2. 第二步,进行软件包依赖关系检查,找到支持该软件正常运行的所有软件包
  3. 第三步,从软件源所指的镜像站点中,下载相关软件包
  4. 第四步,解压软件包,并自动完成应用程序的安装和配置。

常见使用方式

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

Troubleshooting & Suggestions

  1. 一般不建议混用 stable, testing 和 unstable 的源。
    因为很多软件之间都有不同程度的相依性,强行的结果会造成更多软件相依、相斥问题的产生,最终可能影响系统稳定与整个软件升级制度的正常运作。

参考链接

  1. ubuntu APT-GET工作原理
  2. debian软件源source.list文件格式说明
  3. /etc/apt/sources.list 详解
Tags: linux, apt-get
Archives QR Code
QR Code for this page
Tipping QR Code