使用Ansible在CentOS 7中设置语言和时区:无法安装语言环境软件包

时间:2020-01-10 14:17:47

标签: ansible centos locale centos7

我找到了locale_gen模块,以确保系统上存在语言环境,并尝试了like described here

- name: Install EN locale
  locale_gen:
    name: "de_DE.UTF-8"
    state: present

- name: Install DE locale
  locale_gen:
    name: "en_US.UTF-8"
    state: present

这会引发错误:

/etc/locale.gen和/var/lib/locales/support.d/local丢失。是否已安装软件包“ locales”?

所以我尝试安装它:

- name: Install locales package
  become: yes
  yum:
    name: locales
    state: present

使用sudo yum install locales的Ansible和手动安装均无效。我也尝试过启用EPEL回购,但没有成功。

如何确保目标系统中存在请求的语言?

2 个答案:

答案 0 :(得分:0)

自2018年8月27日起,有open bug report用于centos支持。我建议您投票给它,以便我们有机会爬上优先级列表(如果您具备必要的技能和足够的时间,则可以提交PR)

在此问题解决之前,您可以根据问题应用以下改编的workarround proposed by @wojciech-kopras on april 2019(已针对docker centos:7容器成功测试):

- name: Define needed locales (for example, can be set in vars or inventory)
  set_fact:
    system_settings_locales:
      - en_US.UTF-8
      - de_DE.UTF-8

- name: Check existing locales
  shell: "locale -a | grep -i {{ item | regex_replace('-', '') | quote }}"
  register: found_locales
  changed_when: false
  failed_when: false
  loop: "{{ system_settings_locales }}"

- name: Create missing locales
  command: "localedef -i {{ item.item | regex_replace('(.*)\\..*', '\\1') | quote }} -f {{ item.item | regex_replace('.*\\.(.*)', '\\1') | quote }} {{ item.item | quote }}"
  when: item.rc != 0
  loop: "{{ found_locales.results }}"

答案 1 :(得分:0)

此外,对于某些添加的上下文,没有名为locales的软件包,这就是为什么yum原始任务失败的原因。包含语言环境数据的软件包名称为glibc-common(至少在RHEL / CentOS 7上应与8相同)。但是,正如第一位评论者所述,似乎有一个错误。

相关问题