ฉันจะติดตั้ง syslinux / extlinux ลงในไฟล์อิมเมจดิสก์ได้อย่างไรโดยไม่ต้องใช้สิทธิ์พิเศษ


13

ฉันสร้างลินุกซ์ในบ้านและฉันสามารถสร้างไฟล์อิมเมจของดิสก์ที่สมบูรณ์แบบในฐานะผู้ใช้ที่ไม่ใช่รูทด้วยข้อยกเว้นเพียงข้อเดียวนั่นคือการติดตั้งบูตโหลดเดอร์ ฉันใช้ syslinux (extlinux จริง ๆ ) และติดตั้งฉันต้องวนกลับเมานต์พาร์ทิชันบูตซึ่งต้องใช้สิทธิ์ root / sudo คำสั่งถูกเรียกใช้จาก makefile และชื่อตัวแปรควรระบุสิ่งที่จะแทนที่ด้วยอย่างชัดเจน

sudo losetup -o $(BOOT_FS_PARTITION_OFFSET) $(LOOP_DEVICE) $(IMAGE_FILE_NAME)
sudo mount $(LOOP_DEVICE) $(LOOP_MOUNT_POINT)
sudo $(EXTLINUX) -S $(DISK_SECTORS) -H $(DISK_HEADS) -i $(LOOP_MOUNT_POINT)
sudo umount $(LOOP_MOUNT_POINT)
sudo losetup -d $(LOOP_DEVICE)

มีวิธีเขียน syslinux หรือ extlinux ไปยังไฟล์อิมเมจของดิสก์โดยไม่ต้องใช้สิทธิ์ root หรือไม่?


คุณสงสัยหรือไม่ว่าจะสามารถทำตามคำสั่งทั้งหมดที่ไม่มีรูทได้หรือไม่? หรือเพียงแค่คำสั่ง extlinux
BenjiWiebe

@BenjiWiebe หากมีวิธีอื่นแล้วคำสั่งอะไรก็ตามที่จำเป็น แต่ฉันเข้าใจว่าคุณต้องการระบบไฟล์ที่ติดตั้งเพื่อที่จะเรียกใช้ extlinux แล้ว extlinux จะต้องทำงานด้วยสิทธิพิเศษของ root เมื่อทำเช่นนี้

คำตอบ:


8

สิ่งนี้เป็นไปได้สำหรับsyslinux:

syslinux ~/floppy.ima

syslinuxติดตั้งมีความมหัศจรรย์มากพอที่จะทำงานบนระบบแฟ้มเดินเท้า (ในความเป็นจริงมันถูกออกแบบมาเพื่อทำเช่นนั้น) ตัวextlinuxติดตั้งคาดว่าจะทำงานบนระบบไฟล์ที่ประกอบเข้าด้วยกัน

เป็นไปได้ที่จะแยกตัวextlinuxติดตั้งออกเป็นส่วนที่คัดลอกไฟล์ ( เช่น mtools สำหรับ FATซึ่งหายากแต่ดูเหมือนมีอยู่แม้ว่าจะสามารถรวมเข้ากับโดยตรงgenext2fs) และส่วนที่ติดตั้งบูทเตอร์ ( ฉันอาจจะสามารถทำสิ่งนี้ด้วยกัน)

ฉันทำสิ่งนี้กับ GRUB 2 ซึ่งติดตั้งลงในช่องว่างระหว่าง MBR และพาร์ติชันแรกสำหรับGrml ; สิ่งนี้ง่ายกว่าที่จะทำเพราะ GRUB ซึ่งแตกต่างจาก SYSLINUX ไม่ต้องการมากจาก bootsector โดยทั่วไปจะขึ้นอยู่กับข้อกำหนดที่กว้างขึ้นของคุณ หากส่วนด้านบนเกี่ยวกับ SYSLINUX ไม่ช่วยคุณโปรดติดต่อฉันเพื่อที่เราจะสามารถทำงานได้


ขอบคุณสำหรับข้อมูลนี้ ฉันใช้ genext2fs ดังนั้นข้อเสนอแนะของคุณดูเหมือนจะเป็นตัวเลือกที่ดีที่สุด มันเป็นเพียงเรื่องของการเข้ารหัส extlinux ลงใน MBR และการคัดลอกไฟล์ไปยัง fs หรือไฟล์จำเป็นต้องไปในบางช่วงใน fs หรือไม่?

ฉันยังไม่ได้ดู EXTLINUX ในรายละเอียด (จะทำเช่นนั้นแล้วลบความคิดเห็นนี้ แต่ให้เวลาฉันเล็กน้อย) แต่สำหรับ SYSLINUX, LILO, GRUB และ bootloaders อื่น ๆ โดยทั่วไปแล้วจะมีการคัดลอกรหัสลงใน PBR (บันทึกพาร์ติชันสำหรับบูตบูท vulgo bootsector ไม่ใช่ MBR) จากนั้นโค้ดจะได้รับการแก้ไขเพื่อให้มีตำแหน่งของไฟล์ที่ฮาร์ดโค้ดในนั้น (ดังนั้นจึงจำเป็นต้องมีโปรแกรมติดตั้ง) ฉันจะ Cobble บางสิ่งบางอย่างร่วมกันเพื่อคุณ
mirabilos

@ แพทริคฉันมีความต้องการบางอย่างสำหรับการอภิปรายเกี่ยวกับเรื่องนี้ฉันเปิดแชท
mirabilos

คุณช่วยชี้ให้ฉันเห็นการดำเนินการนี้ด้วยด้วงได้หรือไม่? ฉันมีอยู่ในขณะนี้grub-installแต่ก็ยังต้องมีพาร์ทิชันบูตที่จะติดตั้ง
คัดลอก

@copy นี่เป็นวิธีที่ใช้ใน OpenADK ซึ่งมีการสร้างภาพที่ยืดหยุ่นกว่า Grml (ซึ่งจะต้องสร้างระบบไฟล์ ISO 9660 เท่านั้น) บางทีนั่นอาจช่วยได้? ถ้าไม่ติดต่อฉันโดยตรง - แก้ไข: โอ้เดี๋ยวก่อนไม่core.imgรุ่น… lemme ดู…ตรวจสอบที่นี่สำหรับการgrub-mkimageโทร สิ่งนี้ขึ้นอยู่กับสภาพแวดล้อมเป้าหมายเป็นอย่างมาก (โดยทั่วไปโมดูลที่จำเป็นสำหรับการโหลดโมดูลแบบไดนามิกอื่นนั้นคือ GRUB 1 ง่ายกว่ามาก)
mirabilos

5

หากคุณเพิ่มบรรทัดในการ/etc/fstabพูดสิ่งที่ชอบ:

/dev/loop0      /mnt                                    ext4    defaults,user   0 0

จากนั้นคุณสามารถเมานต์ / เลิกเมานท์/dev/loop0ในฐานะผู้ใช้ทั่วไป

และถ้าคุณทำchown youruser:youruser <MOUNTPOINT> <LOOPDEVICE>แล้วextlinux, losetup, mkfsฯลฯ youruserสามารถทำได้เช่น


ฉันต้องการให้สิ่งนี้เป็นส่วนหนึ่งของกระบวนการสร้างทั่วไปและตำแหน่งของไฟล์รูปภาพและจุดเชื่อมต่ออาจแตกต่างกันไปตามผู้ใช้ ฉันไม่ต้องการแก้ไข fstab สำหรับผู้ใช้แต่ละคน

@Patrick การแก้ไข fstab นั้นเป็นสากล
BenjiWiebe

แต่ losetup ยังคงเป็น root เท่านั้นไม่ใช่หรือ
bmargulies

@bmargulies ไม่ใช่เมื่ออุปกรณ์วนรอบถูก chown'd หรือ chmod'ed เพื่อให้ผู้ใช้เข้าถึงได้ ... หรืออย่างน้อยใน Fedora คุณสามารถเพิ่มผู้ใช้ในdiskกลุ่มได้ (หรือสร้างloopกลุ่มและใช้สิ่งนั้น ... )
BenjiWiebe
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.