Comment installer syslinux / extlinux dans un fichier image disque sans avoir besoin des privilèges root

13

J'ai construit une distribution Linux maison, et je peux créer le fichier d'image disque complet en tant qu'utilisateur non root à une exception près - l'installation du chargeur de démarrage. J'utilise syslinux (en fait extlinux), et pour l'installer, je dois monter en boucle la partition de démarrage, ce qui nécessite des privilèges root / sudo. Les commandes sont exécutées à partir d'un makefile, et les noms des variables doivent clairement indiquer par quoi les remplacer.

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)

Existe-t-il un moyen d'écrire syslinux ou extlinux dans le fichier d'image disque sans avoir besoin des privilèges root?

Patrick
la source
Vous vous demandez s'il est possible de faire toutes ces commandes sans root? Ou tout simplement la commande extlinux?
BenjiWiebe
@BenjiWiebe S'il existe un autre moyen, alors quelles que soient les commandes requises, mais si je comprends bien, vous avez besoin d'un système de fichiers monté pour exécuter extlinux, puis extlinux doit s'exécuter avec les privilèges root lorsqu'il est fait de cette façon.

Réponses:

8

Ceci est possible pour syslinux:

syslinux ~/floppy.ima

Le programme d' syslinuxinstallation contient suffisamment de magie pour être exécuté sur un système de fichiers non monté. (En fait, il est conçu pour cela.) Le programme d' extlinuxinstallation s'attend toutefois à être exécuté sur un système de fichiers monté.

Il est presque certainement possible de diviser le programme d' extlinuxinstallation en une partie qui copie les fichiers ( quelque chose comme mtools for FAT , ce qui est rare mais semble exister , bien que l'on puisse simplement les intégrer directement genext2fs), et une partie qui installe le secteur de démarrage ( Je pourrais peut-être bricoler cela ensemble).

J'ai fait quelque chose comme ça pour GRUB 2, qui s'installe dans l'espace entre le MBR et la première partition, pour Grml ; c'était en fait plus facile à faire car GRUB, contrairement à SYSLINUX, n'exige pas autant du secteur de démarrage. Cela dépend essentiellement de vos besoins plus larges. Si la partie ci-dessus sur SYSLINUX ne vous aide pas, contactez-moi, afin que nous puissions trouver une solution.

mirabilos
la source
Merci pour cette information. J'utilise genext2fs, donc votre suggestion semble être la meilleure option. S'agit-il simplement de définir le code extlinux dans le MBR et de copier les fichiers dans le fs, ou les fichiers doivent-ils aller dans certains blocs au sein du fs?
Je n'ai pas encore examiné EXTLINUX en détail (le fera et supprimera ce commentaire, mais donnez-moi un peu de temps) mais pour SYSLINUX, LILO, GRUB et d'autres chargeurs de démarrage, c'est généralement pour que le code soit copié dans le PBR (enregistrement de démarrage de partition, vulgo bootsector, pas MBR), puis le code est édité pour avoir la position du fichier codé en dur (d'où la nécessité d'un installateur). Je vais bricoler quelque chose ensemble pour vous.
mirabilos
@Patrick J'ai un besoin de discussion à ce sujet, j'ai ouvert un chat
mirabilos
Pouvez-vous m'indiquer votre implémentation en utilisant grub? J'ai actuellement grub-install, mais il nécessite toujours la partition de démarrage pour être monté.
copie du
@copy c'est la façon dont il est utilisé dans OpenADK, qui a génération d'image encore plus souple que grml (qui n'a besoin que de créer un système de fichiers ISO 9660). Peut-être que cela aide? Sinon, contactez-moi directement. - Edit: oh attendez, non, génération… laissez- moi voir… vérifiez ici pour l' appel. Cela dépend fortement de l'environnement cible (en gros, quels modules sont nécessaires pour charger dynamiquement les autres; GRUB 1 était beaucoup plus facile). core.imggrub-mkimage
mirabilos
5

Si vous ajoutez une ligne en /etc/fstabdisant quelque chose comme:

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

vous pouvez ensuite monter / démonter en /dev/loop0tant qu'utilisateur régulier.

Et si vous le faites chown youruser:youruser <MOUNTPOINT> <LOOPDEVICE>alors extlinux, losetup, mkfs, etc peut être fait comme youruser.

BenjiWiebe
la source
Je veux que cela fasse partie d'un processus de construction générique, et l'emplacement du fichier image et du point de montage peut varier d'un utilisateur à l'autre. Je préférerais ne pas exiger la modification de fstab pour chaque utilisateur.
@Patrick Editing fstab est global.
BenjiWiebe
Mais losetup reste root uniquement, non?
bmargulies
@bmargulies Pas lorsque le périphérique de boucle a été affiché ou modifié afin que l'utilisateur y ait accès ... ou, sur Fedora au moins, vous pouvez simplement ajouter l'utilisateur au diskgroupe. (Ou créez un loopgroupe et utilisez-le ...)
BenjiWiebe