Score:0

rsyslog.service ไม่พบโดย Ansible ระหว่าง preseed late_command

ธง pt

ฉันพบว่าบางสิ่ง "ไม่ทำงาน" อย่างต่อเนื่องเมื่อเรียกใช้เป็น preseed/late_command ในไฟล์ Preseed ของ Ubuntu Bionic (เช่นเดียวกับการติดตั้งอัตโนมัติสำหรับ Ubuntu Focal) ในกรณีนี้ ฉันพยายามเรียกใช้ Ansible Role (โดยเฉพาะอย่างยิ่ง Canonical Ubuntu 18.04 LTS สำหรับ STIG ที่ใช้งานได้) กับเป้าหมายเป็น late_command:

d-i preseed/late_command สตริง \
    ในเป้าหมาย /usr/bin/curl -fsSL -o /opt/stig.zip {{ di_preseed.stig_role_url }}; \
    ในเป้าหมาย /usr/bin/unzip -qq /opt/stig.zip -d /opt; \
    ในเป้าหมาย /usr/bin/unzip -qq /opt/ubuntu1804STIG-ansible.zip -d /opt; \
    ในเป้าหมาย /bin/sh -c -- 'cd /opt && ANSIBLE_LOG_PATH=/var/log/ansible.log /bin/sh บังคับ.sh'

ที่นี่ บังคับ.sh เป็นเพียงสิ่งห่อหุ้ม ansible-playbook.

การติดตั้งนี้จาก ISO บน Virtualbox ล้มเหลวด้วย:

ไม่สามารถรันคำสั่ง preseed ... <command> จบด้วย exit code 2

ฉันยังคงสามารถเข้าสู่ระบบในกล่องเป็น อูบุนตู และกลายเป็น ราก. ฉันเห็นว่าติดตั้ง Ansible สำเร็จแล้ว (แต่เดิมระบุไว้ใน pkgsel/รวม).

แล้วฉันก็เปิดใจ /var/log/installer/syslog บนเป้าหมายและพบว่า ansible-playbook ล้มเหลวเมื่อไม่พบ rsyslog.service:

ป้อนคำอธิบายรูปภาพที่นี่

นี่ก็งงเหมือนกัน rsyslog.service เปิดใช้งานและใช้งานได้อย่างแน่นอนที่สุดหลังจากการติดตั้ง ซึ่งฉันสามารถยืนยันได้ systemctl (สถานะ|ใช้งานอยู่) rsyslog.

ดังนั้นสิ่งที่ฉันพยายามจะเข้าใจคือ:

  • เหตุใด Ansible จึงไม่สามารถค้นหาได้ rsyslog.service ระหว่างการติดตั้งแม้ว่าจะเปิดใช้งานอยู่หรือไม่
  • ปัจจัยใดที่แตกต่างกันในการติดตั้งซึ่งส่งผลให้สิ่งต่างๆ ดูเหมือนจะพังหรือใช้งานไม่ได้
  • ฉันจะดีกว่าถ้าเรียกใช้สิ่งนี้เป็นสคริปต์เปิดเครื่องภายใต้ init.rc จากนั้นบรรทัดสุดท้ายจะลบตัวเองออกหลังจากเสร็จสิ้น

ที่เกี่ยวข้อง: คำสั่งบางอย่าง (เช่น modprobe หรือ usermod) ล้มเหลวเนื่องจากคำสั่งล่าช้าในการติดตั้งอัตโนมัติของ Ubuntu

Score:1
ธง jp

สิ่งสำคัญที่ต้องจำไว้ก็คือ เข้าเป้า คำสั่งถูกดำเนินการในไฟล์ โครต สิ่งแวดล้อม. พวกมันไม่ได้ถูกเรียกใช้งานในระบบที่บู๊ตอย่างสมบูรณ์ซึ่งกระบวนการหลักเช่น systemd กำลังทำงานอยู่และพร้อมใช้งาน

การทดสอบ

ฉันตั้งค่า playbook ตามงาน STIG ในภาพหน้าจอและรันจาก preseed ฉันเห็นผลลัพธ์เช่นเดียวกับคุณ

  • คู่มือการเล่น
---
- โฮสต์: localhost
  Gather_facts: ไม่
  การเชื่อมต่อ: ท้องถิ่น

  งาน:
    - ชื่อ: ตรวจสอบว่ามีการติดตั้ง rsyslog.service หรือไม่
      เปลือก: ! systemctl รายการหน่วยไฟล์ | grep "^rsyslog.service[ \t]\+"
      change_when: เท็จ
      check_mode: ไม่
      ลงทะเบียน: ผลลัพธ์
      ล้มเหลวเมื่อ: result.rc > 1

    - ชื่อ: stigrule_219160_rsyslog_enable
      บริการ:
        ชื่อ: rsyslog.service
        เปิดใช้งาน: "ใช่"
  • ไฟล์ preseed บางส่วน
d-i pkgsel/include สตริง ansible
d-i preseed/late_command สตริง \
    wget -P /target/ http://REDACTED/my_playbook.yml ; \
    ansible-playbook ในเป้าหมาย -i /dev/null -b -v /my_playbook.yml

แพ็คเกจไบโอนิคใช้งานได้ 2.5.1 และ โมดูลบริการเวอร์ชันนั้น ดูเหมือนจะดำเนินการ systemctl แสดง rsyslog.service. สิ่งนี้ใช้ไม่ได้ในสภาพแวดล้อม chroot เพื่อสาธิต ถ้าฉันเปิดเทอร์มินัลในสภาพแวดล้อมของตัวติดตั้งและเรียกใช้ systemctl ในเป้าหมายแสดง rsyslog.service จากนั้นไฟล์บันทึกจะแสดงผลลัพธ์

ในเป้าหมาย: ทำงานใน chroot ละเว้นคำขอ: แสดง

การแก้ไขที่อาจเกิดขึ้น

ฉันพบแพตช์ใน Ansible 2.3 ที่ แก้ไขปัญหา systemctl นั้นจะละเว้นคำสั่งเมื่อทำงานในสภาพแวดล้อม chroot สิ่งนี้ถูกนำมาใช้เฉพาะกับ ระบบ โมดูลแม้ว่าจะไม่ใช่ บริการ โมดูล. ฉันอัปเดต Playbook ของฉันแล้ว และสิ่งนี้ก็ทำงานได้สำเร็จ

---
- โฮสต์: localhost
  Gather_facts: ไม่
  การเชื่อมต่อ: ท้องถิ่น

  งาน:
    - ชื่อ: ตรวจสอบว่ามีการติดตั้ง rsyslog.service หรือไม่
      เปลือก: ! systemctl รายการหน่วยไฟล์ | grep "^rsyslog.service[ \t]\+"
      change_when: เท็จ
      check_mode: ไม่
      ลงทะเบียน: ผลลัพธ์
      ล้มเหลวเมื่อ: result.rc > 1

    - ชื่อ: stigrule_219160_rsyslog_enable แก้ไขแล้ว
      ระบบ:
        ชื่อ: rsyslog.service
        เปิดใช้งาน: "ใช่"

ดังนั้น คุณอาจก้าวหน้าต่อไปได้โดยแก้ไขงาน STIG จากการใช้ บริการ โมดูลการใช้ ระบบ โมดูล.

Brad Solomon avatar
pt flag
ขอบคุณสำหรับคำตอบที่เป็นประโยชน์นี้ ฉันประสบความสำเร็จเมื่อฉันค้นพบในวันนี้ว่า `ctrl+z` จะนำคุณเข้าสู่ bash shell ในฐานะรูทในสภาพแวดล้อมของตัวติดตั้งที่มี /cdrom และ /target อยู่บนระบบไฟล์ (เดิมคือ iso ที่เมาท์) นั่นทำให้การดีบักง่ายขึ้นมาก รวมถึงการค้นพบอย่างที่คุณพูดถึงที่นี่ว่า systemctl ส่วนใหญ่ไม่พร้อมใช้งานในสภาพแวดล้อม chroot นั่นไม่ใช่ปัญหาที่เข้าใจได้ และความจริงที่ว่า curtin in-target เป็น chroot /target ภายใต้ประทุนดูเหมือนจะเป็นสาเหตุพื้นฐานของปัญหาพฤติกรรมส่วนใหญ่ที่ฉันพบ
Brad Solomon avatar
pt flag
FWIW เราน่าจะเลือกใช้เส้นทางของการใช้ ansible จากโหนดควบคุมแยกต่างหากผ่าน ssh (ฉันขอแย้งว่าควรทำจริงๆ) หลังจากกระบวนการติดตั้งเสร็จสิ้นสำหรับกลุ่มของโหนดและสามารถเข้าถึงได้ผ่าน ssh โดยที่ chroot อยู่นอกภาพ
Brad Solomon avatar
pt flag
ขอบคุณที่สามารถเข้าไปในเชลล์ตัวติดตั้ง ตอนนี้ฉันสามารถแก้ปัญหานี้ได้แล้ว: https://askubuntu.com/a/1355980/919528 คุณอาจพบว่าน่าสนใจ
Andrew Lowther avatar
jp flag
@BradSolomon ฉันคิดว่าการรัน ansible จากโหนดควบคุมจะมีปัญหาน้อยลง ควรมีตัวเลือกในการเปิดเชลล์จากดรอปดาวน์ "วิธีใช้" ใน UI ของตัวติดตั้ง ฉันมักจะใช้ `Alt-F2` ดู https://askubuntu.com/a/1257186/376778 คุณยังสามารถใช้ SSH ในสภาพแวดล้อมของตัวติดตั้งได้หากคุณตั้งค่า (หรือบันทึก) รหัสผ่านผู้ใช้ `ตัวติดตั้ง` (YMMV ขึ้นอยู่กับเวอร์ชันย่อย): https://askubuntu.com/a/1322129/376778

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา