python - 是否可以确定性地设置 Debian 系统?

标签 python linux ansible raspberry-pi

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

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

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

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

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

除了 apt 之外,还有什么方法可以做 pip 所做的事情吗?卡住当前安装的软件包版本,然后在新系统上安装时安装那些确切版本的软件包?或者类似的东西。

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

最佳答案

使用 ansible,您可以指定要安装的包版本。

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

然后为了防止在系统升级时升级软件包,将软件包标记为保持这种方式

- dpkg_selections:
    name: python
    selection: hold

关于python - 是否可以确定性地设置 Debian 系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61903495/

相关文章:

Python 文件 io 缓冲

python - cv2 triangulatePoints 总是返回相同的 Z 值

python - 查找 XML 标记值并选择包含所请求标记值的父级

linux - 在 bash 脚本中为 ssh 命令提供密码,不使用公钥和 Expect

linux - 我如何将这个 echo 语句传递到我的 bash 函数中?

linux - Docker容器中的Docker未映射.ssh卷

ansible - 如果未安装软件包,如何让 Ansible 执行 shell 脚本

python - Linux 中的安全 Python 环境

amazon-ec2 - ansible get tag_Name 并在多个主机上设置主机名

bash - Ansible playbook 不显示来自某个 shell 管道的输出