rsyslog.service not found by Ansible during preseed late_command

Я постоянно обнаруживаю, что некоторые вещи "просто не работают" при запуске как preseed/late_command в файле Ubuntu Bionic preseed. (То же самое относится к автоустановке для Ubuntu Focal.) В данном конкретном случае я пытаюсь запустить Ansible Role (в частности, Canonical Ubuntu 18.04 LTS for Ansible STIG) против цели как late_command:

d-i    preseed/late_command    string \
    in-target /usr/bin/curl -fsSL -o /opt/stig.zip {{ di_preseed.stig_role_url }}; \
    in-target /usr/bin/unzip -qq /opt/stig.zip -d /opt; \
    in-target /usr/bin/unzip -qq /opt/ubuntu1804STIG-ansible.zip -d /opt; \
    in-target /bin/sh -c -- 'cd /opt && ANSIBLE_LOG_PATH=/var/log/ansible.log /bin/sh enforce.sh'

Здесь enforce.sh - это просто обертка вокруг ansible-playbook.

Эта установка из ISO на Virtualbox не удается:

Failed to run preseeded command ... <command> finished with exit code 2

Я все еще могу войти в систему как ubuntu и стать root. Я вижу, что Ansible был успешно установлен (он изначально указан в pkgsel/include).

Затем я открываю /var/log/installer/syslog на цели и обнаруживаю, что ansible-playbook потерпел неудачу, когда не смог найти rsyslog. service:

enter image description here

Это сбивает с толку, поскольку rsyslog.service наверняка включен и активен после установки, что я могу подтвердить с помощью systemctl (status|is-active) rsyslog.

Итак, что я хочу понять:

  • Почему Ansible не может найти rsyslog.service во время установки, хотя он, кажется, включен?
  • Какие факторы отличаются в установке, что приводит к тому, что вещи, кажется, часто ломаются или недоступны?
  • Не лучше ли мне запустить это как onboot скрипт в init.rc, тогда последняя строка удалится сама после завершения?

Связанное: Некоторые команды (например, modprobe или usermod) не работают как поздние команды в автоустановке Ubuntu

0
задан 28 July 2021 в 18:06

1 ответ

Главное, что нужно помнить, это то, что команды in-target выполняются в среде chroot . Они не выполняются в полностью загруженной системе, в которой работают и доступны основные процессы, такие как systemd.

Тестирование

Я настраивал playbook на основе задач STIG, показанных на скриншоте, и запускал его из предварительной версии. Я видел те же результаты, что и вы.

  • Playbook
---
- hosts: localhost
  gather_facts: no
  connection: local

  tasks:
    - name: check if rsyslog.service is installed
      shell: ! systemctl list-unit-files | grep "^rsyslog.service[ \t]\+"
      changed_when: False
      check_mode: no
      register: result
      failed_when: result.rc > 1

    - name: stigrule_219160_rsyslog_enable
      service:
        name: rsyslog.service
        enabled: "yes"
  • Частичный файл предварительной загрузки
d-i pkgsel/include string ansible
d-i preseed/late_command string \
    wget -P /target/ http://REDACTED/my_playbook.yml ; \
    in-target ansible-playbook -i /dev/null -b -v /my_playbook.yml

Доступны пакеты Bionic 2.5.1 и эта версия служебного модуля , похоже, выполняет systemctl show rsyslog.service . Это не работает в среде chroot. Чтобы продемонстрировать, если я открою терминал в среде установщика и запустил in-target systemctl show rsyslog.service , тогда файл журнала покажет результат

in-target: Running in chroot, ignoring request: show

Возможное исправление

Я нашел в Ansible 2.3 патч, который решает проблему , при которой systemctl игнорирует команды при работе в среде chroot. Это применялось только к модулю systemd , но не к модулю службы . Я обновил свою книгу, и она работает успешно.

---
- hosts: localhost
  gather_facts: no
  connection: local

  tasks:
    - name: check if rsyslog.service is installed
      shell: ! systemctl list-unit-files | grep "^rsyslog.service[ \t]\+"
      changed_when: False
      check_mode: no
      register: result
      failed_when: result.rc > 1

    - name: stigrule_219160_rsyslog_enable fixed
      systemd:
        name: rsyslog.service
        enabled: "yes"

Таким образом, вы можете продвинуться дальше, изменив задачи STIG с использования модуля службы на использование модуля systemd .

1
ответ дан 20 August 2021 в 10:31

Другие вопросы по тегам:

Похожие вопросы: