当前位置: 首页>>技术问答>>正文


apt-get安装在引擎盖下做什么?

ubuntuer 技术问答 , , 去评论

问题描述

apt-get install ...命令有什么作用?

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

apt-get install ...运行时是否执行了任何.sh文件?如果是这样,我怎么能看到sh文件的内容?

这个问题的原因是最近我尝试用apt-get install tomcat7安装tomcat7。一切正常,直到我安装tomcat7-admin(经理Web应用程序),服务器对任何请求都没有响应。我尝试了很多次,这总是发生。

最佳解决方案

大多数情况下,apt-get执行以下操作:

  • 检查依赖关系(并要求安装它们),

  • 下载包,验证它,然后告诉dpkg安装它。

dpkg将:

  • 提取包并将内容复制到正确的位置,检查pre-existing文件及其修改,

  • 运行package maintainer scriptspreinstpostinst,(以及之前的prermpostrm,如果正在升级包装)

  • 基于triggers执行一些操作

您可能对维护者脚本感兴趣,这些脚本通常位于/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

次佳解决方案

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

更长:

预赛:

来自manpage

All packages required by the package(s) specified for installation will also be retrieved and installed.

这些包存储在网络中的存储库中。因此,apt-get将所有需要的内容下载到临时目录(/var/cache/apt/archives/)中。它们将从网络或ftp-server下载。它们在所谓的sources.list中指定;存储库列表。从那时起,他们逐个程序地逐个安装。

第一个是那些没有进一步依赖的;所以不必为他们安装其他包。通过它,其他包(以前具有依赖关系)现在已经没有依赖关系了。系统会一直反复执行该过程,直到安装指定的软件包。

每个包都经过安装程序。

包装安装:

在Debian-based Linux发行版中,作为Ubuntu,这些包采用指定的标准化格式:deb – The Debian binary package format

这样的包包含要在系统上安装的文件。它们还包含control file。该文件包含打包系统应在特定情况下执行的脚本;所谓的maintainer scripts。这些脚本分为:

  • preinst:在将文件安装到系统文件层次结构之前

  • postinst:安装完成后

  • prerm:卸载前

  • postrm:卸载后

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

apt,software-installation,ubuntu

还有更多的control-files,最重要的是如下:

  • control:依赖项的list,以及识别包的其他有用信息

  • conffiles:配置文件的list(通常是/etc中的那些)

  • debian-binary:包含deb-package版本,currently 2.0

  • md5sums:软件包中每个文件的md5sums列表,用于验证

  • templates:安装期间带有error descriptions and dialogs的文件

第三种解决方案

对于实际的under-the-hood内容,您需要获取Apt源。如果您启用了源存储库,则相当简单:

apt-get source apt

apt-get命令本身位于cmdline /apt-get.cc中。阅读是痛苦的,但大多数apt-get的行动在那里被广泛地阐述。但是,安装通过DoInstall函数进行映射,该函数位于apt-private /private-install。{cc,h}中。

你必须记住,apt-get只是硬币的一面。 dpkg正在处理实际安装,但DoInstall不直接了解dpkgapt-get实际上令人惊讶的是package-manager不可知。所有功能都通过apt-pkg/package-manager.cc抽象出来

我只是简单地看一下,但即使在那里,我也看不到它实际附着在dpkg系统上的哪个位置。其中一些似乎是通过apt-pkg/aptconfiguration.cc自动配置,但这是一个深井。你可以花几天时间解开这个。

源文档虽然很好。你可以做更糟糕的事情,而不是浏览每个文件并阅读标题以确定实际发生的事情。

第四种方案

这里有一些很棒的答案比这个简短的答案更好,但你可以考虑帮助你更好地理解包管理器所做的更改是Docker。您可以使用docker diff <container>对容器中所做的更改进行区分,它将显示所有更改。这对于了解apt-get install对系统的作用非常有用。快速搜索将获得several resources来帮助实现这一点。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1455.html,未经允许,请勿转载。