首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在postgresql安装过程中不可见的"apt缓存更新失败“

在postgresql安装过程中不可见的"apt缓存更新失败“
EN

Stack Overflow用户
提问于 2022-08-18 09:59:56
回答 2查看 300关注 0票数 0

我正在尝试使用Ansible在远程主机上安装postgresql。我有两个解决方案,但这两个方案只工作一半,我希望他们工作/结果。

1.解决方案1(使用apt模块);

代码语言:javascript
复制
- name: Get Postgres latest repository release
  become: yes
  apt_repository:
    repo: deb https://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main
    state: present
    filename: pgdg.list

该选项首先看起来在执行时是成功的,但最终给出了一个错误(apt缓存更新失败):

2.解决方案2(使用模块)

代码语言:javascript
复制
- name: Get Postgres latest repository release
  become: yes
  shell: sh -c 'echo "deb  http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

这完成了完全相同的操作(如果我错了,请纠正我),然后给出一些其他异常(没有包匹配):

所以我不会再拿我的剧本了,有什么建议吗?

我要安装PostgreSQL13(或14)的游戏:

代码语言:javascript
复制
- name: Install Postgres dependencies (if not installed)
  become: yes
  apt:
    name: 
    - postgresql-{{ postgres_version }}
    - postgresql-doc-{{ postgres_version }}
    - postgresql-contrib
    - zabbix-sql-scripts
  when:
    - "not 'postgresql-13' in ansible_facts.packages"
    - "not 'postgresql-doc-13' in ansible_facts.packages"
    - "not 'postgresql-contrib' in ansible_facts.packages"
    - "not 'zabbix-sql-scripts' in ansible_facts.packages"

存储库键在另一个剧本中提供,并且执行时没有错误。

这是在带有Ubuntu20.04LTS、AnbleVersion2.9.6、PythonVersion3.8.10的主机上执行的。

我已经寻找了这两个问题,但没有找到一个具体的答案解决了我的问题。

如果手动执行与Ansible相同的操作,则它都会安装很好的命令(使用的命令):

代码语言:javascript
复制
sudo sh -c ‘echo “deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main” > /etc/apt/sources.list.d/pgdg.list’

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

sudo apt-get update

sudo apt-get -y install postgresql-13 postgresql-doc-13

编辑:似乎在回购链接的开头(在deb https://..之前)也缺少了一个引号(")。

我有过:repo: deb https://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main"

应该是:"repo: deb https://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main"

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-18 12:53:35

基本上,必须说,像apt_repository这样的不可访问模块通常比shell模块更可取。

然而,在您的方法中有一些错误。

如您所见,apt_repository自动更新包源,即存储库密钥必须已经存在。您可以将存储库密钥与apt_key模块一起添加,但是您需要安装gpg包,首先应该确保安装这个包。

如下所述:

  1. 安装gpg - name:确保gpg被安装apt: name: gpg
  2. 添加存储库密钥-名称:添加存储库签名密钥apt_key: url:"https://www.postgresql.org/media/keys/ACCC4CF8.asc“状态:存在
  3. 添加存储库源-名称: add存储库apt_repository: repo:"deb https://apt.postgresql.org/pub/repos/apt/ { ansible_distribution_release }-pgdg main“状态:当前文件名: pgdg

使用apt_repository时,您的问题之一是保持了$(lsb_release -cs)不变,但这只能通过shell工作,而必须在使用Ansible时使用变量ansible_distribution_release。此外,filename参数不需要扩展(.list),因为文档告诉您:“将自动添加.list扩展。”您的规范创建了文件pgdg.list.list

再一次,作为一个整体,剧本:

代码语言:javascript
复制
- name: Database Server
  hosts: databaseserver
  become: yes

  tasks:
    - name: Ensure gpg is installed
      apt:
        name: gpg

    - name: Add repository signing key
      apt_key:
        url: "https://www.postgresql.org/media/keys/ACCC4CF8.asc"
        state: present

    - name: Add postgresql repository
      apt_repository:
        repo: "deb https://apt.postgresql.org/pub/repos/apt/ {{ ansible_distribution_release }}-pgdg main"
        state: present
        filename: pgdg

现在,如果包是由包含的存储库提供的,那么您应该能够安装所需的包。

票数 1
EN

Stack Overflow用户

发布于 2022-08-18 11:38:49

也许这就是导致你的问题的原因:回答

在添加存储库之前,您需要:

  1. 加上APT键。
  2. 添加存储库。
  3. 安装软件包。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73401069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档