是否可以以确定性的方式设置 Debian 系统?



在工作中,我们开发了一些在Raspbian(基于Debian(上运行的Python软件,在Raspberry Pi上。

我们有一些 Ansible 脚本,可以获取新的 Raspbian 映像,在 Raspberry Pi 上启动,并将其配置为运行我们的软件。Ansible 做了几件事:

  • 使用 apt 安装一些必需的软件包
  • 设置一个 Python 虚拟环境,并使用 pip 和需求文件来安装运行软件所需的 Python 库的确切版本

事实上,每次 Ansible 运行时,它都会安装我们测试过软件的 Python 库(来自 PyPi(的确切版本,这很棒。不幸的是,这不适用于通过 apt 安装的软件包。

执行apt-get install package或 Ansible 等效项,将安装该软件包的最新版本。今天的版本可能与明天的版本不同。这意味着如果我今天运行我的 Ansible 脚本来设置 Raspberry Pi,我的软件可能会完美运行,但明天在新的 Raspberry Pi 上运行 Ansible 可能会从 apt 安装新版本的软件,这可能会破坏我们的软件。

有什么方法可以做pip所做的,但是对于apt?冻结当前安装的软件包版本,然后,在全新系统上安装时,安装这些确切版本的软件包?或类似的东西。

我知道我们可以安装我们想要的任何版本的软件包,并将 SD 卡克隆到其他 PI,但这首先违背了拥有 Ansible 脚本的目的。

使用 ansible,您可以指定以这种方式安装哪个版本的打包。

- name: Install the version '1.00' of package "foo"
apt:
name: foo=1.00

然后为了防止在系统升级时升级软件包,将软件包标记为保留

- dpkg_selections:
name: python
selection: hold

有这个工具值得一提。 https://github.com/TrevorSundberg/apt-lock

apt 和 apt-get 的包装器,用于强制实施软件包安装确定性。灵感来自 npm 的 package-lock.json。

最新更新