Como instalar o syslinux / extlinux em um arquivo de imagem de disco sem exigir privilégios de root

13

Eu construí uma distribuição Linux doméstica e posso criar o arquivo de imagem de disco completo como um usuário não raiz com uma exceção - instalar o carregador de inicialização. Estou usando o syslinux (na verdade extlinux), e para instalá-lo, tenho que montar em loopback a partição de inicialização, o que requer privilégios de root / sudo. Os comandos são executados a partir de um makefile e os nomes das variáveis ​​devem indicar claramente com o que substituí-los.

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 uma maneira de gravar syslinux ou extlinux no arquivo de imagem de disco sem exigir privilégios de root?

Patrick
fonte
Você está se perguntando se é possível executar todos esses comandos sem root? Ou apenas o comando extlinux?
BenjiWiebe
@BenjiWiebe Se houver outra maneira, sejam quais forem os comandos necessários, mas pelo que entendi, você precisa de um sistema de arquivos montado para executar o extlinux e, em seguida, o extlinux precisa executar com privilégios de root quando for feito dessa maneira.

Respostas:

8

Isso é possível para syslinux:

syslinux ~/floppy.ima

O syslinuxinstalador contém mágica suficiente para ser executado em um sistema de arquivos desmontado. (De fato, ele foi projetado para fazer isso.) O extlinuxinstalador espera ser executado em um sistema de arquivos montado.

É quase certamente possível dividir o extlinuxinstalador em uma parte que copia os arquivos ( algo como mtools for FAT , que é raro, mas parece existir , embora alguém possa apenas integrá-los diretamente genext2fs) e uma parte que instala o setor de inicialização ( Talvez eu consiga juntar isso).

Eu fiz algo assim para o GRUB 2, que é instalado no espaço entre o MBR e a primeira partição, para o Grml ; isso foi realmente mais fácil de fazer, porque o GRUB, ao contrário do SYSLINUX, não requer muito do setor de inicialização. Basicamente, depende de seus requisitos mais amplos. Se a parte acima sobre o SYSLINUX não ajudar, entre em contato comigo, para que possamos resolver algo.

mirabilos
fonte
Obrigado por esta informação. Estou usando o genext2fs, então sua sugestão parece a melhor opção. É simplesmente uma questão de inserir o código extlinux no MBR e copiar os arquivos para o fs, ou eles precisam ir em certos blocos dentro do fs?
Ainda não examinei o EXTLINUX em detalhes (o fará e excluirá esse comentário, mas me dê um pouco de tempo), mas para SYSLINUX, LILO, GRUB e outros gerenciadores de inicialização, geralmente é para que o código seja copiado no PBR (registro de inicialização da partição, setor de inicialização vulgo, não MBR) e, em seguida, o código é editado para ter a posição do arquivo codificado nele (daí a necessidade de um instalador). Vou preparar algo juntos para você.
mirabilos 21/05
@Patrick eu tenho alguma necessidade de discussão sobre isso, eu abri um bate-papo
mirabilos
Você pode me indicar sua implementação usando grub? Atualmente grub-install, tenho , mas ainda requer que a partição de inicialização seja montada.
copie
@copy esta é a forma como ele é usado em OpenADK, que tem geração de imagem ainda mais flexível do que GRML (que só precisa criar um sistema de arquivos ISO 9660). Talvez isso ajude? Caso contrário, entre em contato comigo diretamente. - Edit: oh espere, não, core.imggeração ... deixe-me ver ... verifique aqui a grub-mkimageligação. Isso depende muito do ambiente de destino (basicamente, quais módulos são necessários para carregar os outros dinamicamente; o GRUB 1 era muito mais fácil).
mirabilos
5

Se você adicionar uma linha ao /etc/fstabdizer algo como:

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

você pode montar / desmontar /dev/loop0como um usuário comum.

E se você fizer chown youruser:youruser <MOUNTPOINT> <LOOPDEVICE>, então extlinux, losetup, mkfs, etc pode ser feito como youruser.

BenjiWiebe
fonte
Quero que isso faça parte de um processo genérico de criação, e a localização do arquivo de imagem e o ponto de montagem podem variar de usuário para usuário. Eu preferiria não exigir a edição do fstab para cada usuário.
@Patrick Editing O fstab é global.
BenjiWiebe
Mas o losetup permanece apenas raiz, não?
bmargulies
@bmargulies Não quando o dispositivo de loop foi chown'd ou chmod'ed para que o usuário tenha acesso a ele ... ou, pelo menos no Fedora, você pode simplesmente adicionar o usuário ao diskgrupo. (Ou crie um loopgrupo e usar isso ...)
BenjiWiebe