apt-get install在后台有什么作用?


60

apt-get install ...命令做什么?

当我输入apt-get install ...命令时,屏幕上会出现一些文本,但是这些文本对我来说没有足够的信息。我想知道是否创建/编辑了任何文件,是否启动了任何服务以及其他活动...

运行.sh时是否执行任何文件apt-get install ...?如果是这样,我如何查看该sh文件的内容?

出现此问题的原因是最近我尝试使用安装tomcat7 apt-get install tomcat7。一切正常,直到我安装tomcat7-admin(管理器Web应用程序),服务器对任何请求均无响应。我尝试了很多次,而且这种情况经常发生。




有关更多详细信息,请访问wiki.debian.org/Apt
Pandya

2
从14.04开始,apt-get由取代apt。置换尚未完成,但它的工作原理为installupgradedist-upgrade等。
帕迪·兰道

@PaddyLandau是替代品还是额外的/包装工具?
muru

Answers:


49

通常,apt-get执行以下操作:

  • 检查依赖项(并要求安装它们),
  • 下载该软件包,验证它,然后告诉dpkg您安装它。

dpkg 将:

  • 解压缩软件包并将内容复制到正确的位置,然后检查文件是否已存在及其上的修改,
  • 运行包维护者脚本preinstpostinst,(和prermpostrm前这些,如果程序包正在升级)
  • 根据触发器执行一些动作

您可能对维护脚本(通常位于)感兴趣/var/lib/dpkg/info/<package-name>.{pre,post}{rm,inst}。这些通常是shell脚本,但是没有硬性规定。例如:

$ ls /var/lib/dpkg/info/xml-core.{pre,post}{rm,inst}
/var/lib/dpkg/info/xml-core.postinst
/var/lib/dpkg/info/xml-core.postrm
/var/lib/dpkg/info/xml-core.preinst
/var/lib/dpkg/info/xml-core.prerm

30

简而言之apt-get install请执行系统可以成功执行新安装的软件应用程序所需的一切。

更长:

初步资料:

联机帮助页

指定安装的软件包所需的所有软件包也将被检索并安装。

这些软件包存储在网络中的存储库中。因此,apt-get将所有需要的文件下载到一个临时目录(/var/cache/apt/archives/)中。它们将从Web或ftp服务器下载。它们在所谓的中指定sources.list;存储库列表。从那时起,他们将按程序一步一步安装。

第一个是没有进一步依赖性的。因此无需为其安装其他软件包。这样,其他软件包(以前具有依赖性)现在不再具有依赖性。系统会一遍又一遍地执行该过程,直到安装了指定的软件包。

每个软件包都经过一个安装过程。

软件包安装:

在基于Debian的Linux发行版中(如Ubuntu),这些软件包采用指定的标准化格式,称为:deb- Debian二进制软件包格式

这样的软件包包含要在系统上安装的文件。它们还包含一个控制文件。该文件包含包装系统应在特定情况下执行的脚本;所谓的维护者脚本。这些脚本分为:

  • preinst:在将文件安装到系统文件层次结构之前
  • postinst:安装后
  • prerm:卸载前
  • postrm:卸载后

有一张有趣的图片,显示了新软件包的安装过程:

安装

控制文件也更多,最重要的如下:

  • control:依赖关系列表以及其他用于标识程序包的有用信息
  • conffiles:配置文件列表(通常是中的文件/etc
  • debian-binary:包含deb-package版本,当前为2.0
  • md5sums:软件包中用于验证的每个文件的md5sums列表
  • templates:安装过程中带有错误描述和对话框的文件

11

对于实际的下引擎罩 的东西,你需要抓住APT源。如果启用了源存储库,则非常简单:

apt-get source apt

apt-get命令本身位于cmdline/apt-get.cc。阅读起来很痛苦,但是其中的大多数apt-get动作都在其中详细说明。但是,安装是通过位于中的DoInstall功能进行映射的apt-private/private-install.{cc,h}

您必须记住,apt-get仅仅是硬币的一面。
dpkg正在处理实际安装,但DoInstalldpkg直接知道。apt-get实际上令人惊讶的是,软件包管理器不可知。所有功能都通过抽象apt-pkg/package-manager.cc

我只是简短地看一下,但是即使在那儿,我也看不到它实际附加在dpkg系统上的位置。其中一些似乎是通过自动配置的,apt-pkg/aptconfiguration.cc但这是一本很好的书。您可能需要花费数天的时间对此进行分解。

虽然源文档很好。您可能要做的比遍历每个文件并阅读标题了解实际发生的事情还要糟糕。


6

这里有一些很棒的答案,比这简短的答案更好,但是您可能会考虑使用Docker来帮助您更好地了解软件包管理器所做的更改。您可以使用来比较在容器中进行的更改docker diff <container>,它将显示所有更改。这对于深入了解系统的作用尤其有用apt-get install。快速搜索将为您提供一些 资源来帮助实现此目标。


1
多谢您提出意见。在Docker容器中,我安装了firefox,在另一个终端选项卡中,我密切监视了容器的差异,并了解了容器中所有文件的变化。它帮助我更清楚地了解。
abhy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.