2

I have simple playbook where trying to install the Debian packages downloaded locally in my server. This playbook runs on localhost and install the Debian packages in the same system. But this playbook gives an error "Dependency is not satisfiable for some of the packages even tough the dependency package is available in the local repository.

I can download all the dependencies required for the specific package in my local repository using apt-get install --download-only package_name

But in my playbook, i should have a mechanism to install the dependencies first than install the actual package. This task should be dynamic, playbook should resolve the dependencies by itself for any package install.

When the package has dependency over another package, How the playbook resolve dynamically.

Some of the options explored:

Using ordered indexed_items, using gdebi.. Looking for efficient Logic.

install_dependencies.yml

---
- hosts: localhost
  vars:
    remote_media_directory: "/home/local_repository"
  become: yes
  tasks:
    - name: find all debian Packages
      find:
         paths:
             - "{{ remote_media_directory }}"
         file_type: file
         recurse: yes
         use_regex: yes
         patterns:
           - '.*deb$'
      register: files_matched_subdirectory

    - name: installation debian packages
      apt:
        deb: "{{ item.path }}"
      with_items: "{{ files_matched_subdirectory.files }}"
      when: ansible_distribution == "Ubuntu"

ansible-playbook install_dependencies.yml

PLAY [localhost] **********************************************************************************************************************************************************************************************

TASK [Gathering Facts] ****************************************************************************************************************************************************************************************
ok: [localhost]

TASK [find all debian Packages] *******************************************************************************************************************************************************************************
ok: [localhost]

TASK [installation debian packages] ***************************************************************************************************************************************************************************
failed: [localhost] (item={u'uid': 0, u'woth': False, u'mtime': 1571850269.5720358, u'inode': 31195175, u'isgid': False, u'size': 46700, u'roth': True, u'isuid': False, u'isreg': True, u'pw_name': u'root', u'gid': 0, u'ischr': False, u'wusr': True, u'xoth': False, u'rusr': True, u'nlink': 1, u'issock': False, u'rgrp': True, u'gr_name': u'root', u'path': u'/home/local_repository/wireshark_3.0.5-1_amd64.deb', u'xusr': False, u'atime': 1571850391.3553286, u'isdir': False, u'ctime': 1571850312.2437878, u'wgrp': False, u'xgrp': False, u'dev': 2051, u'isblk': False, u'isfifo': False, u'mode': u'0644', u'islnk': False}) => {"changed": false, "item": {"atime": 1571850391.3553286, "ctime": 1571850312.2437878, "dev": 2051, "gid": 0, "gr_name": "root", "inode": 31195175, "isblk": false, "ischr": false, "isdir": false, "isfifo": false, "isgid": false, "islnk": false, "isreg": true, "issock": false, "isuid": false, "mode": "0644", "mtime": 1571850269.5720358, "nlink": 1, "path": "/home/local_repository/wireshark_3.0.5-1_amd64.deb", "pw_name": "root", "rgrp": true, "roth": true, "rusr": true, "size": 46700, "uid": 0, "wgrp": false, "woth": false, "wusr": true, "xgrp": false, "xoth": false, "xusr": false}, "msg": "Dependency is not satisfiable: wireshark-qt (= 3.0.5-1)\n"}
failed: [localhost] (item={u'uid': 0, u'woth': False, u'mtime': 1571850269.4560366, u'inode': 31195174, u'isgid': False, u'size': 3605060, u'roth': True, u'isuid': False, u'isreg': True, u'pw_name': u'root', u'gid': 0, u'ischr': False, u'wusr': True, u'xoth': False, u'rusr': True, u'nlink': 1, u'issock': False, u'rgrp': True, u'gr_name': u'root', u'path': u'/home/local_repository/wireshark-qt_3.0.5-1_amd64.deb', u'xusr': False, u'atime': 1571850394.3993108, u'isdir': False, u'ctime': 1571850312.2437878, u'wgrp': False, u'xgrp': False, u'dev': 2051, u'isblk': False, u'isfifo': False, u'mode': u'0644', u'islnk': False}) => {"changed": false, "item": {"atime": 1571850394.3993108, "ctime": 1571850312.2437878, "dev": 2051, "gid": 0, "gr_name": "root", "inode": 31195174, "isblk": false, "ischr": false, "isdir": false, "isfifo": false, "isgid": false, "islnk": false, "isreg": true, "issock": false, "isuid": false, "mode": "0644", "mtime": 1571850269.4560366, "nlink": 1, "path": "/home/local_repository/wireshark-qt_3.0.5-1_amd64.deb", "pw_name": "root", "rgrp": true, "roth": true, "rusr": true, "size": 3605060, "uid": 0, "wgrp": false, "woth": false, "wusr": true, "xgrp": false, "xoth": false, "xusr": false}, "msg": "Dependency is not satisfiable: libc6 (>= 2.29)\n"}
ok: [localhost] => (item={u'uid': 0, u'woth': False, u'mtime': 1571850217.1323407, u'inode': 31195169, u'isgid': False, u'size': 40654, u'roth': True, u'isuid': False, u'isreg': True, u'pw_name': u'root', u'gid': 0, u'ischr': False, u'wusr': True, u'xoth': False, u'rusr': True, u'nlink': 1, u'issock': False, u'rgrp': True, u'gr_name': u'root', u'path': u'/home/local_repository/tree_1.7.0-5_amd64.deb', u'xusr': False, u'atime': 1571850397.4392931, u'isdir': False, u'ctime': 1571850312.2437878, u'wgrp': False, u'xgrp': False, u'dev': 2051, u'isblk': False, u'isfifo': False, u'mode': u'0644', u'islnk': False})
ok: [localhost] => (item={u'uid': 0, u'woth': False, u'mtime': 1571850217.0163412, u'inode': 31195168, u'isgid': False, u'size': 52132, u'roth': True, u'isuid': False, u'isreg': True, u'pw_name': u'root', u'gid': 0, u'ischr': False, u'wusr': True, u'xoth': False, u'rusr': True, u'nlink': 1, u'issock': False, u'rgrp': True, u'gr_name': u'root', u'path': u'/home/local_repository/dstat_0.7.3-1_all.deb', u'xusr': False, u'atime': 1571850399.3192823, u'isdir': False, u'ctime': 1571850312.2437878, u'wgrp': False, u'xgrp': False, u'dev': 2051, u'isblk': False, u'isfifo': False, u'mode': u'0644', u'islnk': False})
        to retry, use: --limit @/home/upgrade/ansible/install_dependencies.retry

PLAY RECAP ****************************************************************************************************************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=1
3
  • does install_recommends: true on the apt task have any effect? Oct 24 '19 at 7:44
  • I don't have any idea about this.. Oct 24 '19 at 14:39
  • Have you tried installing with dkpg -i then do a apt-get install -f? The module APT with option dpkg_options might be needed. I think this is a Debian related issue, more than an Ansible one.
    – Nico
    Nov 22 '19 at 14:13
2

Any specific reason that you aren't using your own real package repository? If you use Ansible you seem to see the benefit of automating things, so this would be a natural step. And it would enable the appropriate installation order merely based on the dependency graph and the packages available. There are other tools as well for the job, but reprepo is easy to use and seems ideal for smaller scale package repositories.

You don't give information about the system on which this playbook fails. But the symptoms are rather clear. And none of that has anything to do with Ansible specifically.

  • /home/local_repository/wireshark_3.0.5-1_amd64.deb could not be installed because it requires exactly wireshark-qt (= 3.0.5-1) (i.e. exactly that version of the wireshark-qt package)
  • /home/local_repository/wireshark-qt_3.0.5-1_amd64.deb (the dependency named in the previous item) failed because its dependency libc6 (>= 2.29) was not available.

In order to figure out what exactly is going on you would have had to give information about the system. However, I can tell you how you can find out more details.

Simply use apt-cache policy <package-name> on both the dependencies (wireshark-qt and libc) to see which versions of the packages are at all available.

If I were to guess your problem is that you attempt to install this on a system which is older than the prerequisites required for the packages you attempt to install. And trying to forcibly install a newer libc package is a really bad idea, given its role in the system. It could leave your system unusable.

For example if you were attempting this on the current Debian 10 (i.e. currently Buster==stable), you can see in this table (contents are bound to change, so I am including the screenshot) that alone the libc6 (>= 2.29) prerequisite cannot be satisfied:

Overview of libc versions on the various Debian releases

Alternatively you can look here and navigate between the current releases in the top right (at the time of this writing):

Navigate between Debian release to see available package versions

The first step to figure out whether there is a newer package available would be to look at the package search for your current release. To find out what that is, use lsb_release -a (to see all information) or lsb_release -cs to see the short codename (e.g. buster).

Here is a similar overview for Ubuntu:

Ubuntu package search for wireshark

Looking at the package versions you attempt to install, I'd guess you are attempting to install the eoan (19.10) package on an older Ubuntu, am I right?

You could attempt to download the sources (apt-get source <package-name>) of the two packages in question (wireshark and wireshark-qt) and attempt to build it yourself. If you're lucky you can build that new Wireshark version against whatever Qt and libc versions are included in your specific release. Arguably Qt (and its dependencies) would be more likely to be an issue than libc.

Alas, chances are that it will be easier to upgrade your system to 19.10, wait ~4 months until focal aka Focal Fossa (Ubuntu 20.04) gets released or install a VM or container enabling you to run that newer Wireshark version.

But again, none of that has anything to do with Ansible, except that you used Ansible to invoke the installation commands.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.