ฉันมีเครื่องลินุกซ์ในตัวซึ่งมีระบบไฟล์รูทแบบอ่านอย่างเดียวซึ่งโหลดจาก 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
ใครบ้างที่สามารถแบ่งปันข้อมูลเชิงลึกเกี่ยวกับเรื่องนี้?
ขอบคุณ