У меня есть машина, которую я установил по сети, с немецкой клавиатурой, но она проигнорировала мои настройки, и она установлена с американской клавиатурой. Я уверен, что установил его, потому что, если я его не установлю, он запрашивает интерактивно, но мне нужна автоматическая установка.
Это 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- *, на которые я ссылался выше:
keyboard-configuration keyboard-configuration/layout select English (UK)
* 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 }}