Как установить syslinux / extlinux в файл образа диска, не требуя привилегий root

13

Я создал собственный дистрибутив Linux и могу создать полный файл образа диска для пользователя без полномочий root, с одним исключением - установкой загрузчика. Я использую syslinux (на самом деле extlinux), и для его установки я должен монтировать загрузочный раздел с обратной петлей, для чего требуются права root / sudo. Команды запускаются из make-файла, и имена переменных должны четко указывать, чем их заменить.

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 в файл образа диска, не требуя прав суперпользователя?

Патрик
источник
Вам интересно, можно ли выполнять все эти команды без рута? Или просто команда extlinux?
BenjiWiebe
@BenjiWiebe Если есть другой способ, тогда любые команды требуются, но, насколько я понимаю, вам нужна смонтированная файловая система для запуска extlinux, и тогда extlinux должен запускаться с привилегиями root, когда это делается таким образом.

Ответы:

8

Это возможно для syslinux:

syslinux ~/floppy.ima

syslinuxИнсталлятор содержит достаточно магии , чтобы быть запущен на убранной файловой системы. (На самом деле, он предназначен для этого.) Однако extlinuxустановщик ожидает запуска в смонтированной файловой системе.

Почти наверняка можно разделить extlinuxустановщик на часть, которая копирует файлы ( что-то вроде mtools для FAT , что встречается редко, но существует , хотя их можно просто интегрировать напрямую genext2fs), и часть, которая устанавливает загрузочный сектор ( Я мог бы сделать это вместе).

Я сделал что-то подобное для GRUB 2, который устанавливается в пространство между MBR и первым разделом для Grml ; на самом деле это было проще сделать, потому что GRUB, в отличие от SYSLINUX, не требует столько от загрузочного сектора. Это в основном зависит от ваших более широких требований. Если вышеприведенная часть о SYSLINUX не поможет вам, свяжитесь со мной, чтобы мы могли что-то решить.

mirabilos
источник
Спасибо за эту информацию. Я использую genext2fs, поэтому ваше предложение звучит как лучший вариант. Это просто вопрос добавления кода extlinux в MBR и копирования файлов в fs, или файлы должны идти в определенных блоках внутри fs?
Я еще не рассматривал EXTLINUX подробно (сделаю это, а затем удалю этот комментарий, но уделю мне немного времени), но для SYSLINUX, LILO, GRUB и других загрузчиков обычно используется для копирования кода в PBR. (загрузочная запись раздела, загрузочный сектор vulgo, а не MBR), а затем код редактируется так, чтобы в нем была жестко прописана позиция файла (отсюда и необходимость в установщике). Я сделаю тебе кое-что вместе.
Мирабилось
@Patrick У меня есть потребность обсудить это, я открыл чат
mirabilos
Можете ли вы указать мне на вашу реализацию, используя grub? В настоящее время я имею grub-install, но это все еще требует, чтобы загрузочный раздел был установлен.
скопировать
@copy - это то , как он используется в OpenADK, который генерирует изображения даже более гибко, чем Grml (которому нужно только создать файловую систему ISO 9660). Возможно, это помогает? Если нет, свяжитесь со мной напрямую. - Изменить: о, подожди, нет, core.imgпоколение ... дай мне посмотреть ... проверить здесь для grub-mkimageвызова. Это сильно зависит от целевой среды (в основном, какие модули необходимы для динамической загрузки других; GRUB 1 был намного проще).
Мирабилось
5

Если вы добавите строку, /etc/fstabговоря что-то вроде:

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

затем вы можете смонтировать / размонтировать /dev/loop0как обычный пользователь.

И если вы делаете chown youruser:youruser <MOUNTPOINT> <LOOPDEVICE>то extlinux, losetup, mkfsи т.д. может быть сделано youruser.

BenjiWiebe
источник
Я хочу, чтобы это было частью общего процесса сборки, а расположение файла образа и точки монтирования может варьироваться от пользователя к пользователю. Я бы предпочел не требовать редактирования fstab для каждого пользователя.
@Patrick Редактирование fstab является глобальным.
BenjiWiebe
Но проигрыш остается только для root, нет?
bmargulies
@bmargulies Не тогда, когда устройство цикла было chown'd или chmod'ed, чтобы пользователь имел к нему доступ ... или, по крайней мере, в Fedora, вы можете просто добавить пользователя в diskгруппу. (Или создайте loopгруппу и используйте это ...)
BenjiWiebe