从另一个版本重新安装 deb 包

Posted

技术标签:

【中文标题】从另一个版本重新安装 deb 包【英文标题】:Reinstall deb package from another release 【发布时间】:2017-09-30 07:45:23 【问题描述】:

我需要从另一个目标版本重新安装包。问题是如果软件包已经安装,则不采取任何行动。我的 ansible 剧本片段是:

- name: Add jessie-backports repo
  apt_repository:
    repo: 'deb http://httpredir.debian.org/debian jessie-backports main'
    state: present

- name: install libssl from jessie-backports
  apt:
    name: libssl1.0.0
    default_release: jessie-backports

答案是:

ptmp3 | SUCCESS => 
    "cache_update_time": 1493744770, 
    "cache_updated": true, 
    "changed": false, 
    "invocation": 
        ....
    

我可以在安装新版本之前删除旧版本,但一大堆软件包取决于libssl(例如ssh)。

顺便说一句,远程主机上的命令apt-get install libssl1.0.0 -t jessie-backports 有效,并且libssl 已更新

【问题讨论】:

为什么你的 apt 任务中没有 state=present? state= present 是默认值 您是否尝试过将force: true 与 apt 模块一起使用? 是的,我试过了 试试 'dpkg_options: force-downgrade' 和 'force: true' 【参考方案1】:

解决方案是在 apt 任务中包含要安装的软件包的确切版本。确切版本可以通过apt-cache (apt-cache policy libssl1.0.0) 获取。

适当的剧本是:

- name: Add jessie-backports repo
  apt_repository:
    update_cache: yes
    repo: 'deb http://httpredir.debian.org/debian jessie-backports main'
    state: present

- name: get libssl1.0.0 jessie-backports version
  shell: apt-cache policy libssl1.0.0 | grep jessie-backports -B1 | head -n1 | sed -e 's/^\s*\**\s*\(\S*\).*/\1/'
  register: libsslinstalled

- name: install libssl from jessie-backports
  apt:
    name: "libssl1.0.0= libsslinstalled.stdout_lines[0] "

【讨论】:

以上是关于从另一个版本重新安装 deb 包的主要内容,如果未能解决你的问题,请参考以下文章

在 DEB 安装后将用户添加到组而无需重新启动

ZooKeeper deb 打包方法

ZooKeeper deb 打包方法

ZooKeeper deb 打包方法

如何使用 DKMS 将 NVIDIA .run 驱动程序重新打包到 .deb 中

archlinux怎么安装搜狗输入法