安装脚本在 apt-get install 中有什么作用?

She*_*Lei 14 linux ubuntu installation apt-get

似乎apt-get install会下载一个 Debian 软件包并尝试运行以下安装脚本:

  • 创建适当的目录
  • 创建适当的帐户
  • 复制二进制文件
  • 复制数据文件
  • 复制 Conf 文件
  • 复制 init.d 脚本
  • 启动服务
  • 等等。

我真的对它很感兴趣,想一步一步地弄清楚发生了什么。有什么办法可以看到吗?就像在“试运行”模式下打印 shell 命令一样?

cha*_*aos 25

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

更长的版本:

预赛:

联机帮助页

指定用于安装的包所需的所有包也将被检索和安装。

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

首先安装的是那些没有其他依赖项的;因此无需安装其他软件包即可正常工作。通过这个,其他包(以前有依赖关系)现在不再依赖了。系统会一遍又一遍地执行该过程,直到安装了指定的软件包。

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

包安装过程:

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

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

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

这些脚本是创建特定用户或需要重新启动的某些服务或程序包工作所需的其他准备工作的地方。

除了这些脚本之外,包系统还有用于特定事件的触发器。例如,在安装新内核版本或 ldconfig 或 man-db 时重新生成 initrds。它们由一个或多个包激活并在整个安装过程结束时运行。

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

安装

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

有兴趣的可以手动解压一个deb包(下载后),看看里面有什么:

# to only download the package (no installation)
apt-get download package
# to unpack the deb file
ar x package.deb
Run Code Online (Sandbox Code Playgroud)

现在您会看到一个data.tar.gz包含文件的文件和一个control.tar.gz包含四个维护者脚本和上述控制文件的文件。