apt-get install在幕后做了什么?
apt-get install ...
命令有什么作用?
当我输入apt-get install ...
命令时,屏幕上会出现一些文字,但是我没有足够的信息。 我想知道是否创建/编辑了任何文件,启动了任何服务以及其他活动……
apt-get install ...
运行时是否执行了任何.sh
文件? 如果是这样,我怎么能看到该sh
文件的内容?
这个问题的原因是最近我尝试用apt-get install tomcat7
。 一切正常,直到我安装tomcat7-admin
(经理web应用程序),服务器对任何请求都没有响应。 我尝试了很多次,这总是发生。
大多数情况下, apt-get
执行以下操作:
- 检查依赖关系(并要求安装它们),
- 下载包,validation它然后告诉
dpkg
安装它。
dpkg
将:
- 提取包并将内容复制到正确的位置,检查预先存在的文件及其修改,
- 运行包维护者脚本 :
preinst
,postinst
,(和prerm
,之前的postrm
,如果正在升级包) - 根据触发器执行一些操作
您可能对维护者脚本感兴趣,这些脚本通常位于/var/lib/dpkg/info/
。 这些通常是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
可以完成系统成功执行新安装的软件应用程序所需的一切。
更长:
预赛:
从联机帮助页 :
还将检索并安装指定用于安装的软件包所需的所有软件包。
这些包存储在网络中的存储库中。 因此, 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
:包中用于validation的每个文件的md5sums列表 -
templates
:安装期间包含错误说明和对话框的文件
对于实际的引擎盖下的东西,你需要抓住Apt源。 如果您启用了源存储库,则相当简单:
apt-get source apt
apt-get
命令本身位于cmdline/apt-get.cc
。 阅读是痛苦的,但大多数apt-get
的行为在那里被广泛地阐述。 但是,安装通过DoInstall
函数进行映射,该函数位于apt-private/private-install.{cc,h}
。
你必须记住,apt-get只是硬币的一面。
dpkg
正在处理实际安装,但DoInstall
不直接了解dpkg
。 apt-get
实际上是令人惊讶的包管理器不可知。 所有function都通过apt-pkg/package-manager.cc
抽象出来
我只是简单地看,但即使在那里,我也看不到它实际上附加到dpkg
系统的位置。 其中一些似乎是通过apt-pkg/aptconfiguration.cc
自动配置的,但这是一个很好的。 你可以花几天时间解开这个。
源文档虽然很好。 你可以做更糟糕的事情,而不是浏览每个文件并阅读标题以确定实际发生的事情。
这里有一些很棒的答案比这个简短的答案更好,但你可以考虑帮助你更好地理解包管理器所做的更改是Docker 。 您可以使用docker diff
来docker diff
容器中所做的更改,它将显示所有更改。 这对于了解一下apt-get install
对系统的影响非常有用。 快速搜索将为您提供多种 资源来帮助实现此目的。