ถาวร systemd machine-id ในสภาวะแวดล้อมลินุกซ์ฝังตัวแบบไร้รัฐ (UBI / UBIFS)


2

ฉันมีเครื่องลินุกซ์ในตัวซึ่งมีระบบไฟล์รูทแบบอ่านอย่างเดียวซึ่งโหลดจาก UBI / UBIFS

ทุกครั้งที่อุปกรณ์บู๊ตเครื่องจะสร้าง systemd machine-id ใหม่ซึ่งฉันเข้าใจจากการอ่านเอกสาร :

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

จากการอ่านไฟล์ systemd machine-id-setup.cฉันมีความเข้าใจเกี่ยวกับวิธีการทำงานในแง่ที่ว่ามันจะพยายามสร้างรหัสเครื่องที่ / etc / machine-id ถ้าไม่มี ที่ล้มเหลวและพาร์ติชันเป็นแบบอ่านอย่างเดียวมันจะสร้างขึ้นใน / รัน / machine-id และเมานต์เป็น / etc / machine-id (ไม่ใช่ symlink)

มีคำถามคือฉันจะมีรหัสประจำตัวแบบตายตัวสำหรับอุปกรณ์ไร้สัญชาติได้หรือไม่? สองตัวเลือกที่ฉันมีคือ:

1) จัดเก็บ machine-id ไปยังหน่วยเก็บข้อมูลแบบไม่ลบเลือน (ภายนอก / eMMC):

  • หลังจากบูทตรวจสอบว่ามี / etc / machine-id อยู่หรือไม่
  • หากไม่มีอยู่ให้ดำเนินการต่อผ่านบริการ systemd ผ่าน service / mount ซึ่งสร้าง machine-id (ตามปกติ)
  • ไฟล์บริการใหม่: เมื่อสร้างรหัสเครื่องแล้วให้คัดลอกสตริงนี้ไปยังพาร์ติชันที่ไม่ได้อยู่ในหน่วยความจำ / NAND เช่น eMMC (ไม่ลบเลือน)

ดังนั้นตอนนี้อุปกรณ์ได้รับการเริ่มต้นอย่างน้อยหนึ่งครั้งและรหัสเครื่องถูกเก็บไว้ในสื่อจัดเก็บข้อมูลแบบไม่ลบเลือน ลำดับการบู๊ตตอนนี้เป็นดังนี้:

  • อุปกรณ์บู๊ตและติดตั้งพาร์ติชันที่ไม่ลบเลือน
  • ตรวจสอบว่าไม่มีรหัสเครื่องที่ไม่ลบเลือน (เช่นเดียวกับขั้นตอนแรกข้างต้น)
  • ไฟล์นี้มีอยู่แล้วดังนั้นเราจึงเมานต์ไปที่ / etc / machine-id
  • ไฟล์บริการที่จัดการประชากรของ / etc / machine-id ตอนนี้ไม่ได้ดำเนินการเพราะมีอยู่แล้ว

2) แก้ไขไฟล์ systemd machine-id-setup.cและเปลี่ยนไดเรกทอรี hardcoded ที่สร้างรหัสเครื่องจัดเก็บและบันทึก อย่างไรก็ตามฉันต้องการหลีกเลี่ยงการแก้ปัญหานี้เพราะมันหมายความว่าฉันจะต้องแก้ไขไฟล์ระบบ systemd

ใครบ้างที่สามารถแบ่งปันข้อมูลเชิงลึกเกี่ยวกับเรื่องนี้?

ขอบคุณ

คำตอบ:


0

คุณกำลังขอให้ผสมผสานแนวคิดที่ขัดแย้ง: ความคงทนหมายถึงสถานะ แต่คุณต้องการให้ระบบไร้สัญชาติ

นอกจากตัวเลือกที่คุณกล่าวถึงคุณสามารถดูด้วยการใช้ระบบไฟล์ "Union" หรือ "Overlay" สิ่งนี้จะสั่งให้ระบบปฏิบัติการค้นหาไฟล์บนระบบไฟล์แบบถาวรก่อนจากนั้นหากไม่มีอยู่ให้ตรวจสอบระบบไฟล์แบบไร้สถานะ นี่คือวิธีการที่ LiveCD ถูกนำไปใช้โดยให้การพาดพิงถึงความสามารถในการแก้ไขไฟล์บนสื่อที่เป็นแบบอ่านอย่างเดียว


0

ฉันได้แก้ไขปัญหานี้แล้วโดยการติดตั้ง rootfs read-write ( mount -o remount,rw /) อีกครั้งและบันทึกหมายเลขเครื่องที่สร้างแบบสุ่มไปยัง/etc/machine-idไฟล์


0

ตัวเลือกที่ง่ายที่สุดและดีที่สุดของคุณน่าจะเป็นที่จะผ่านมันเป็นตัวแปรบรรทัดคำสั่งเคอร์เนลตามเอกสารอย่างเป็นทางการsystemd.machine_id หากคุณต้องการที่จะได้รับแฟนซีคุณสามารถให้ bootloader ของคุณสร้างมันขึ้นอยู่กับสิ่งที่ไม่ซ้ำกันอย่างแท้จริงเกี่ยวกับ SoC ที่คุณกำลังทำงานอยู่ (เช่นหมายเลขซีเรียล, ที่อยู่ MAC, ฯลฯ )

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.