ansible - 如何解决 Ansible 中本地下载包的依赖关系?当包 A 依赖于包 B
问题描述
我有一个简单的剧本,试图在我的服务器上安装本地下载的 Debian 软件包。该剧本在 localhost 上运行,并将 Debian 软件包安装在同一系统中。但是这个剧本给出了一个错误“对于某些包的依赖关系是不满足的,即使依赖包在本地存储库中是可用的。
我可以使用在我的本地存储库中下载特定包所需的所有依赖项apt-get install --download-only package_name
但是在我的剧本中,我应该有一种机制来先安装依赖项而不是安装实际的包。此任务应该是动态的,剧本应该自行解决任何软件包安装的依赖关系。
当包依赖于另一个包时,剧本如何动态解析。
探索的一些选项:
Using ordered indexed_items, using gdebi.. Looking for efficient Logic.
本地存储库有包-> 它可以根据要求增长:
wireshark_3.0.5-1_amd64.deb wireshark-qt_3.0.5-1_amd64.deb
这里wireshark_3.0.5-1_amd64.deb依赖于wireshark-qt_3.0.5-1_amd64.deb。
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
解决方案
首先在远程服务器中设置本地存储库并在远程服务器中下载安装包apt-get install --download-only package_name
。修改本地系统 /etc/apt/sources.list 以指向本地存储库包。
当 ansible 脚本尝试使用 apt-get -y install 安装时,它将连接到本地存储库并获取包并解析依赖项。
请查看以下链接以获取更多信息
https://kerneltalks.com/package/how-to-configure-local-apt-repository/ https://askubuntu.com/questions/170348/how-to-create-a-local-apt-repository
推荐阅读
- python - 如何计算像素的方向向量?
- python - Flask cpanel Godaddy 服务器
- c++ - Clang 词法分析器进入 SEGFAULT
- r - DataCamp Light在flutter webview中不起作用
- html - 如何在 HTML 中显示 SVG 路径?
- c# - 调试步骤进入本地 Nuget 包
- laravel - 无法创建新的 Laravel 项目
- java - 我可以使用 jdk 13 运行 Eclipse 氧气吗?
- android - 如何从父 LinearLayout 中分离 2 个具有权重属性的 LinearLayout
- laravel - 格式如何给我错误。不给我正确的日期