首页 > 解决方案 > 使用 Ansible 在 CentOS 7 中设置语言和时区:无法安装语言环境包

问题描述

我找到了locale_gen模块以确保系统上存在语言环境,并按照此处所述进行了尝试:

- 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/supported.d/local 丢失。软件包“语言环境”是否已安装?

所以我尝试安装它:

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

Ansible 和手动安装sudo yum install locales都不起作用。我也尝试启用 EPEL 回购但没有成功。

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

标签: ansiblecentoslocalecentos7

解决方案


自 2018 年 8 月 27 日以来,有一个开放的错误报告,用于 centos 支持。我建议你投票给它,这样我们就有机会爬上优先级列表(如果你有所需的技能和足够的时间,也可以提交 PR)

在解决此问题之前,您可能可以应用@wojciech-kopras 于 2019 年 4 月根据您的问题改编的工作方法(针对dockercentos: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 }}"

推荐阅读