Điểm:0

Ansible không tìm thấy rsyslog.service trong khi chèn sẵn late_command

lá cờ pt

Tôi liên tục thấy rằng một số thứ "không hoạt động" khi chạy dưới dạng chèn sẵn/late_command trong tệp chèn sẵn Ubuntu Bionic. (Điều tương tự cũng áp dụng cho cài đặt tự động cho Ubuntu Focal.) Trong trường hợp cụ thể này, tôi đang cố gắng chạy Ansible Role (cụ thể là Canonical Ubuntu 18.04 LTS cho Ansible STIG) chống lại mục tiêu như một trễ_command:

d-i preseed/late_command chuỗi \
    trong mục tiêu /usr/bin/curl -fsSL -o /opt/stig.zip {{ di_preseed.stig_role_url }}; \
    trong mục tiêu /usr/bin/unzip -qq /opt/stig.zip -d /opt; \
    trong mục tiêu /usr/bin/unzip -qq /opt/ubuntu1804STIG-ansible.zip -d /opt; \
    trong mục tiêu /bin/sh -c -- 'cd /opt && ANSIBLE_LOG_PATH=/var/log/ansible.log /bin/sh thi hành.sh'

Đây thi hành.sh chỉ là một cái bọc xung quanh ansible-playbook.

Cài đặt này từ ISO trên Virtualbox không thành công với:

Chạy lệnh chèn sẵn không thành công... <lệnh> kết thúc với mã thoát 2

Tôi vẫn có thể đăng nhập vào hộp như Ubuntu và trở thành nguồn gốc. Tôi thấy rằng Ansible đã được cài đặt thành công (ban đầu nó được chỉ định trong gói/bao gồm).

sau đó tôi mở ra /var/log/trình cài đặt/syslog trên mục tiêu và tìm thấy rằng ansible-playbook thất bại khi nó không thể tìm thấy rsyslog.service:

nhập mô tả hình ảnh ở đây

Điều này là khó hiểu như rsyslog.service chắc chắn được kích hoạt và hoạt động sau khi cài đặt, tôi có thể xác nhận điều này với systemctl (trạng thái | đang hoạt động) rsyslog.

Vì vậy, những gì tôi đang tìm cách hiểu ở đây là:

  • Tại sao Ansible không thể tìm thấy rsyslog.service trong khi cài đặt mặc dù có vẻ như nó đã được bật?
  • Những yếu tố nào khác nhau về quá trình cài đặt dẫn đến những thứ dường như thường bị hỏng hoặc không khả dụng?
  • Tôi có nên chạy tập lệnh này dưới dạng tập lệnh khởi động trong init.rc không, rồi dòng cuối cùng nó sẽ tự xóa sau khi thực hiện xong?

Có liên quan: Một số lệnh (ví dụ: modprobe hoặc usermod) không thành công do các lệnh muộn trong cài đặt tự động Ubuntu

Điểm:1
lá cờ jp

Điều quan trọng cần nhớ là trong mục tiêu lệnh được thực hiện trong một chroot môi trường. Chúng không được thực thi trong một hệ thống được khởi động đầy đủ, nơi các quy trình cốt lõi như systemd đang chạy và khả dụng.

thử nghiệm

Tôi thiết lập một playbook dựa trên các tác vụ STIG trong ảnh chụp màn hình và chạy nó từ phần chèn sẵn. Tôi thấy kết quả tương tự như bạn.

  • vở kịch
---
- máy chủ: localhost
  thu thập_sự thật: không
  kết nối: cục bộ

  nhiệm vụ:
    - tên: kiểm tra xem rsyslog.service đã được cài đặt chưa
      vỏ bọc: ! systemctl list-unit-files | grep "^rsyslog.service[ \t]\+"
      đã thay đổi khi: Sai
      check_mode: không
      đăng ký: kết quả
      fail_khi: result.rc > 1

    - tên: stigrule_219160_rsyslog_enable
      dịch vụ:
        tên: rsyslog.service
        đã bật: "có"
  • Tập tin chèn sẵn một phần
d-i pkgsel/bao gồm chuỗi ansible
d-i preseed/late_command chuỗi \
    wget -P /target/ http://REDACTED/my_playbook.yml ; \
    trong mục tiêu ansible-playbook -i /dev/null -b -v /my_playbook.yml

Gói Bionic ansible 2.5.1phiên bản đó của mô-đun dịch vụ xuất hiện để thực hiện systemctl hiển thị rsyslog.service. Điều này không hoạt động trong môi trường chroot. Để chứng minh, nếu tôi mở một thiết bị đầu cuối trong môi trường trình cài đặt và chạy chương trình systemctl trong mục tiêu rsyslog.service sau đó tệp nhật ký sẽ hiển thị đầu ra

trong mục tiêu: Chạy trong chroot, bỏ qua yêu cầu: hiển thị

Khắc phục tiềm năng

Tôi đã tìm thấy một bản vá trong Ansible 2.3 giải quyết vấn đề systemctl đó sẽ bỏ qua các lệnh khi chạy trong môi trường chroot. Điều này chỉ được áp dụng cho hệ thống mô-đun mặc dù và không phải là dịch vụ mô-đun. Tôi đã cập nhật playbook của mình và điều này chạy thành công.

---
- máy chủ: localhost
  thu thập_sự thật: không
  kết nối: cục bộ

  nhiệm vụ:
    - tên: kiểm tra xem rsyslog.service đã được cài đặt chưa
      vỏ bọc: ! systemctl list-unit-files | grep "^rsyslog.service[ \t]\+"
      đã thay đổi khi: Sai
      check_mode: không
      đăng ký: kết quả
      fail_khi: result.rc > 1

    - tên: stigrule_219160_rsyslog_enable đã sửa
      hệ thống:
        tên: rsyslog.service
        đã bật: "có"

Do đó, bạn có thể tiến xa hơn bằng cách sửa đổi (các) tác vụ STIG bằng cách sử dụng dịch vụ mô-đun để sử dụng hệ thống mô-đun.

Brad Solomon avatar
lá cờ pt
Cảm ơn vì câu trả lời hữu ích này. Hôm nay, tôi đã có một bước đột phá khi phát hiện ra rằng `ctrl+z` sẽ đưa bạn vào bash shell với quyền root trong môi trường trình cài đặt với /cdrom và /target nằm trên hệ thống tệp (trước đây là iso được gắn kết). Điều đó đã mở ra rất nhiều cách gỡ lỗi dễ dàng hơn, bao gồm cả việc phát hiện ra, như bạn đã đề cập ở đây, rằng hầu hết systemctl không khả dụng trong môi trường chroot. Vì vậy, đó không phải là một vấn đề có thể xảy ra, và thực tế là curtin trong mục tiêu là một chroot/mục tiêu dưới mui xe dường như là nguyên nhân cơ bản của hầu hết các vấn đề về hành vi mà tôi gặp phải.
Brad Solomon avatar
lá cờ pt
FWIW, chúng tôi có thể sẽ chọn đi theo con đường sử dụng ansible từ một nút điều khiển riêng biệt thông qua ssh (vì nó thực sự phải được thực hiện, tôi tranh luận) sau khi quá trình cài đặt hoàn tất cho một nhóm các nút và chúng có thể truy cập được thông qua ssh, trong đó chroot nằm ngoài hình ảnh.
Brad Solomon avatar
lá cờ pt
Nhờ có thể truy cập trình bao trình cài đặt, giờ đây tôi đã có thể giải quyết vấn đề này: https://askubuntu.com/a/1355980/919528. Bạn có thể thấy điều đó thú vị
Andrew Lowther avatar
lá cờ jp
@BradSolomon Tôi nghĩ rằng việc chạy ansible từ một nút điều khiển sẽ ít gặp sự cố hơn. Cần có một tùy chọn để mở trình bao từ trình đơn thả xuống "Trợ giúp" trong giao diện người dùng của trình cài đặt. Tôi thường chỉ sử dụng `Alt-F2`. Xem https://askubuntu.com/a/1257186/376778 . Bạn thậm chí có thể SSH vào môi trường trình cài đặt nếu bạn đặt (hoặc chụp) mật khẩu người dùng `trình cài đặt` (YMMV tùy thuộc vào phiên bản phụ): https://askubuntu.com/a/1322129/376778

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.