我正在尝试安装一堆来自存储在中央服务器上的tarball的RPM。这些RPM彼此依赖,但当我手动安装时,这不是问题,我只是使用:
# yum install *rpm
并且它们都已安装,yum认为依赖项包含在其他RPM中。
使用Ansible我使用以下游戏传输tarball:
- name: Unpack installation bundle
unarchive:
src: /media/shared/archive/{{ sw }}-{{ os }}.tar.gz
dest: $HOME
将tarball复制到远程服务器并解压缩。这很有效。
问题是当我尝试安装RPM时。我目前有以下剧目:
- name: Finding RPM files
find:
paths: "$HOME/{{ sw }}"
patterns: "*.rpm"
register: rpm_result
- name: Install RPM
yum:
name: "{{ item.path }}"
state: present
with_items: "{{ rpm_result.files }}"
become: yes
become_method: sudo
rpm_result.files正确填充了所有RPM,但其中一些没有安装,因为yum模块似乎是单独安装它们,即使文档声称它一起完成它们(请参阅" Notes&# 34;在http://docs.ansible.com/ansible/latest/yum_module.html) 当我运行剧本时,我得到关于缺少依赖关系的投诉:
"Error: Package: snmpagent-1.2.0.0-1.el6.x86_64 (/snmpagent-1.2.0.0-1.el6.x86_64)
Requires: utils >= 3.1.0.0\n", "rc": 1,
(Output shortened and sliced up to make it easier to read)
如果我尝试一次安装一个RPM,这就是我得到的错误。
如何说服yum同时安装所有 RPM?
我正在运行ansible-playbook v2.4.0.0,所以它最近才合理。
答案 0 :(得分:2)
为了说服yum同时安装所有rpms,为了处理基于特定目录中的文件列表解析的依赖关系,需要将整个rpms列表传递给yum命令。以下代码对我有用。
# Get a list of rpms from a directory
- name: find rpm files and register the result
find:
paths: /opt/rpms
patterns: "*.rpm"
register: rpm_files
# Create a list of the rpms to use with the yum install command
- set_fact:
rpm_list: "{{ rpm_files.files | map(attribute='path') | list}}"
# Use yum to install with a list
- name: install rpm files using rpm_list
yum:
name: "{{rpm_list}}"
state: present
答案 1 :(得分:0)
我知道一种解决方法和解决方案。
解决方法是在yum install
或command
模块调用中运行shell
。
解决方案是将RPM文件加载到存储库并将其配置为包源,这通常会使依赖项解析更容易。
答案 2 :(得分:0)
有多种方法可以做到这一点。您可以先直接获取rpm软件包的源,然后像@ChrisSteele提到的那样安装它们,也可以在class UserCredentials {
private let userDefaults: NSUserDefaults
private let authorizationTokenKey = "AuthorizationTokenKey"
init(userDefaults: NSUserDefaults) {
self.userDefaults = userDefaults
}
func getAuthorizationToken() -> String {
let value = userDefaults.stringForKey(authorizationTokenKey)
guard let retVal = value else { return "" }
return retVal
}
}
中注册外部仓库URL。
对于第二个选项,您基本上可以在剧本中创建2个任务。
1)用于在远程服务器的目录结构/etc/yum.repos.d/
中添加.repo文件。如下所示:
/etc/yum.repos.d/
2)循环显示您要使用yum模块安装的所有软件包。
- name: Add .repo file where the rpm packages are present
yum_repository:
name: packages.repo #can give any name with .repo extension
description: adding repo URL in packages.repo file in yum.repo.d
baseurl: "https://###.nexus.com/content/repositories/anything###/Packages/"
enabled: yes
gpgcheck: no