Назад | Перейти на главную страницу

установка выбора debconf для конфигурации клавиатуры не выполняется ... макет заканчивается как афганский

У меня есть машина, которую я установил по сети, с немецкой клавиатурой, но она проигнорировала мои настройки, и она установлена ​​с американской клавиатурой. Я уверен, что установил его, потому что, если я его не установлю, он запрашивает интерактивно, но мне нужна автоматическая установка.

Это Ubuntu 12.04.3

Итак, после этого я хочу написать исправление, чтобы сделать его немецкой клавиатурой.

Итак, сначала я в интерактивном режиме устанавливаю параметры на одном компьютере, затем читаю параметры, чтобы увидеть их значения, а затем на другом компьютере я устанавливаю параметры с помощью:

debconf-set-selections <<< "keyboard-configuration keyboard-configuration/altgr select The default for the keyboard layout"
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/compose select No compose key"
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/ctrl_alt_bksp boolean false"
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/layoutcode string de"
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/layout select German"
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/modelcode string pc105"
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/model select Generic 105-key (Intl) PC"
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/optionscode string "
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/store_defaults_in_debconf_db boolean true"
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/switch select No temporary switch"
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/toggle select No toggling"
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/unsupported_config_layout boolean true"
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/unsupported_config_options boolean true"
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/unsupported_layout boolean true"
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/unsupported_options boolean true"
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/variantcode string "
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/variant select German"
debconf-set-selections <<< "keyboard-configuration keyboard-configuration/xkb-keymap select "

Затем я показываю выбор с помощью:

debconf-show keyboard-configuration

И вот результат:

* keyboard-configuration/modelcode: pc105
* keyboard-configuration/unsupported_config_options: true
* keyboard-configuration/unsupported_config_layout: true
* keyboard-configuration/toggle: No toggling
* keyboard-configuration/compose: No compose key
* keyboard-configuration/layout: German
* keyboard-configuration/xkb-keymap:
* keyboard-configuration/variant: German
  debian-installer/console-setup-udeb/title:
* keyboard-configuration/switch: No temporary switch
* keyboard-configuration/unsupported_options: true
  console-setup/detect:
  console-setup/detected:
* keyboard-configuration/altgr: The default for the keyboard layout
* keyboard-configuration/ctrl_alt_bksp: false
* keyboard-configuration/unsupported_layout: true
* keyboard-configuration/variantcode:
* keyboard-configuration/model: Generic 105-key (Intl) PC
* console-setup/ask_detect: false
* keyboard-configuration/layoutcode: de
  keyboard-configuration/other:
* keyboard-configuration/store_defaults_in_debconf_db: true
* keyboard-configuration/optionscode:

А затем, чтобы перенастроить пакет, чтобы система действительно использовала настройки, я запускаю:

DEBIAN_FRONTEND=noninteractive dpkg-reconfigure keyboard-configuration

И вот результат:

update-initramfs: deferring update (trigger activated)

А потом, чтобы проверить, что произошло, снова проверяю настройки:

debconf-show keyboard-configuration

И вот результат:

* keyboard-configuration/modelcode: a4techKB21
  keyboard-configuration/unsupported_config_options: true
  keyboard-configuration/unsupported_config_layout: true
* keyboard-configuration/toggle: Caps Lock
* keyboard-configuration/compose: No compose key
* keyboard-configuration/layout: Afghani
* keyboard-configuration/xkb-keymap: af
* keyboard-configuration/variant: Afghani
  debian-installer/console-setup-udeb/title:
* keyboard-configuration/switch: No temporary switch
  keyboard-configuration/unsupported_options: true
  console-setup/detect:
  console-setup/detected:
* keyboard-configuration/altgr: The default for the keyboard layout
* keyboard-configuration/ctrl_alt_bksp: false
  keyboard-configuration/unsupported_layout: true
* keyboard-configuration/variantcode: ,
* keyboard-configuration/model: A4Tech KB-21
* console-setup/ask_detect: false
* keyboard-configuration/layoutcode: us,af
  keyboard-configuration/other:
* keyboard-configuration/store_defaults_in_debconf_db: true
* keyboard-configuration/optionscode: grp:caps_toggle,grp_led:scroll

Почему, зачем он превратил его в макет афгани (выбирается первым в алфавитном списке для каждого вопроса)? Почему он не может просто использовать мои настройки или, по крайней мере, игнорировать их, а не устанавливать их с поддельными значениями!

Раньше я использовал что-то подобное, но с другими вещами (например, postfix и т. Д.):

apt-get install --reinstall keyboard-configuration

Но в этом случае с конфигурацией клавиатуры он делает то же, что и

DEBIAN_FRONTEND=noninteractive dpkg-reconfigure.

Я также сравнил интерактивно настроенную машину с той, которая была написана с помощью вышеупомянутого сценария до перенастройки, и debconf всей машины идентичен, за исключением «grub-pc grub-pc / install_devices ...», у которого есть идентификатор, и он, очевидно, не Соответствующий. И если я запускаю метод сценария на интерактивно установленной машине, он не сбрасывается на афгани, поэтому системы работают по-разному, несмотря на идентичный debconf.

Есть ли этому решение?

Я уже видел:

Что на самом деле делает "dpkg-reconfigure keyboard-configuration"? http://ubuntuforums.org/showthread.php?t=1793250 автоматизировать dpkg-перенастроить tzdata

Я понимаю ваше разочарование по этому поводу. Вот как я справляюсь с этим в аналогичном контексте (бродячие положения), так что, надеюсь, этот день настал.

Ключ в том, чтобы использовать debconf-utils для описания конфигурации. Первый:

sudo apt-get install debconf-utils

Вы можете увидеть текущую конфигурацию с помощью:

debconf-get-selections | grep keyboard-configuration

Работа со всеми этими параметрами конфигурации может быть немного утомительной, поэтому вы можете выполнить интерактивную dpkg-reconfigure keyboard-configuration на одной машине, как в предлагаемом решении. Затем экспортируйте новые настройки с помощью команды выше в новый файл, скажем file.conf.

Перенесите файл на машины, которым требуется настройка, и:

debconf-set-selections < file.conf
dpkg-reconfigure keyboard-configuration -f noninteractive

Это действительно так.

БОНУС: Ответные задачи

Если вы используете Ansible, вот отрывок из моей инструкции по этому поводу:

- name: Configuring keyboard [creating file]
  template: src=templates/deb-keyboard.conf.j2 dest=/home/vagrant/.deb-keybard.conf
  register: debconf_template

- name: Configuring keyboard [setting selections]
  shell: debconf-set-selections < /home/vagrant/.deb-keybard.conf
  become: true
  when: debconf_template.changed
  # or use handlers

- name: Configuring keyboard [reconfiguring dpkg]
  command: dpkg-reconfigure keyboard-configuration -f noninteractive
  become: true
  when: debconf_template.changed

Итак ... надеюсь, когда-нибудь у кого-то еще будет правильный ответ, но вот что я в итоге сделал, то же самое, что я делал много лет назад без preseed:

интерактивная настройка клавиатуры на одном узле:

dpkg-reconfigure keyboard-configuration

Затем, когда это будет сделано, скопируйте настройки консоли

cd
tar czf console-setup.tgz /etc/console-setup

Затем отправьте этот файл на все узлы или поместите его куда-нибудь по http.

Затем установите его на каждом узле с помощью сценария, а не в интерактивном режиме по одному:

cd
wget http://somewebserver/console-setup.gz -O ~/console-setup.tgz
cd /
mv /etc/console-setup /etc/console-setup.bak
tar xzf ~/console-setup.tgz
gunzip -c /etc/console-setup/cached.kmap.gz | loadkeys

И пока вы не перенастроите клавиатуру каким-либо другим способом, она, вероятно, останется такой (как это было в течение многих лет при предыдущей установке). Но, возможно, есть некоторые вещи, которые снова могут испортить, например:

DEBIAN_FRONTEND=noninteractive dpkg-reconfigure keyboard-configuration

Оказалось, что в моем случае я не указал правильный тип для модулей debconf в Ansible. Если кто-то еще пытается сделать это с помощью Ansible, то на вашем «шаблоне» (той, которую вы используете для получения всех правильных настроек в первую очередь) установите debconf-utils и беги debconf-get-selections | grep keyboard-config затем беги debconf-show keyboard-configuration. Это дает вам список вещей, которые были изменены (элементы, отмеченные знаком *). Обратите внимание, что элементы в debconf-get-selections скажите, к какому они типу.

Для меня установить их на English (UK) Мне нужна была следующая доступная задача playbook:

- name: Set keyboard layout debconf: name: "keyboard-configuration" question: "keyboard-configuration/{{ item.key }}" value: "{{ item.value }}" vtype: "{{ item.type|default('string') }}" with_items: - { key: "altgr", value: "The default for the keyboard layout", vtype: "select" } - { key: "compose", value: "No compose key", vtype: "select" } - { key: "ctrl_alt_bksp", value: "false", type: "boolean" } - { key: "variant", value: "English (UK)", vtype: "select" } - { key: "layout", value: "English (UK)", vtype: "select" } - { key: "model", value: "Generic 105-key PC (intl.)", vtype: "select" }

Вот две примерные строки из команд debconf- *, на которые я ссылался выше:

  • (debconf-get-selections) keyboard-configuration keyboard-configuration/layout select English (UK)
  • (debconf-шоу) * keyboard-configuration/layout: English (UK)

Я использовал ответы здесь, чтобы запустить его с солончаком:

Я использовал шаблон jinja для конфигурации (я удалил некоторые записи, чтобы сделать его короче):

{% if grains["domain"] == "mydomain.de" %}
{% load_yaml as keyboard_data %}
  "keyboard-configuration/layoutcode":
    "type": "string"
    "value": "de"
  "keyboard-configuration/layout":
    "type": "select"
    "value": "German"
{% endload %}
{% else %}
{% load_yaml as keyboard_data %}
  "keyboard-configuration/layoutcode":
    "type": "string"
    "value": "us"
  "keyboard-configuration/layout":
    "type": "select"
    "value": "English (US)"
{% endload %}
{% endif %}

и теперь мое состояние такое:

keyboard_conf:
  debconf.set:
  - name: "keyboard-configuration"
  - data: {{ keyboard_data }}