Jak zainstalować syslinux / extlinux w pliku obrazu dysku bez konieczności posiadania uprawnień roota

13

Zbudowałem własną dystrybucję Linuksa i mogę zrobić pełny plik obrazu dysku jako użytkownik inny niż root, z jednym wyjątkiem - instalacją modułu ładującego. Korzystam z syslinux (właściwie extlinux) i aby go zainstalować, muszę zamontować partycję rozruchową z pętlą wsteczną, co wymaga uprawnień root / sudo. Polecenia są uruchamiane z pliku makefile, a nazwy zmiennych powinny wyraźnie wskazywać, na co je zastąpić.

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)

Czy istnieje sposób na zapisanie syslinux lub extlinux do pliku obrazu dysku bez konieczności posiadania uprawnień roota?

Patrick
źródło
Zastanawiasz się, czy można wykonać wszystkie te polecenia bez rootowania? A może po prostu polecenie extlinux?
BenjiWiebe
@BenjiWiebe Jeśli istnieje inny sposób, wymagane są wszelkie polecenia, ale jak rozumiem, potrzebujesz zamontowanego systemu plików, aby uruchomić extlinux, a następnie extlinux musi działać z uprawnieniami roota po wykonaniu tej czynności.

Odpowiedzi:

8

Jest to możliwe dla syslinux:

syslinux ~/floppy.ima

syslinuxInstalator zawiera wystarczającą ilość magii być uruchamiane na odmontowanej plików. (W rzeczywistości jest to zaprojektowane.) extlinuxInstalator spodziewa się jednak, że zostanie uruchomiony na zamontowanym systemie plików.

Niemal na pewno możliwe jest podzielenie extlinuxinstalatora na część, która kopiuje pliki ( coś takiego jak mtools dla FAT , co jest rzadkie, ale wydaje się , że istnieje , chociaż można je po prostu bezpośrednio zintegrować genext2fs), oraz część, która instaluje bootsector ( Być może uda mi się to połączyć).

Zrobiłem coś takiego dla GRUB 2, który instaluje się w przestrzeni między MBR a pierwszą partycją dla Grml ; było to w rzeczywistości łatwiejsze, ponieważ GRUB, w przeciwieństwie do SYSLINUX, nie wymaga tyle od bootsectora. Zasadniczo zależy to od twoich szerszych wymagań. Jeśli powyższa część dotycząca SYSLINUX ci nie pomoże, skontaktuj się ze mną, abyśmy mogli coś wypracować.

mirabilos
źródło
Dziękuję za te informacje. Używam genext2fs, więc twoja sugestia brzmi jak najlepsza opcja. Czy to po prostu kwestia dodania kodu extlinux do MBR i skopiowania plików do fs, czy też pliki muszą przejść w niektórych blokach w fs?
Nie przyjrzałem się jeszcze szczegółowo EXTLINUX (zrobię to, a następnie usunę ten komentarz, ale poświęcę trochę czasu), ale w przypadku SYSLINUX, LILO, GRUB i innych programów ładujących zwykle jest to tak, że kod jest kopiowany do PBR (rekord rozruchowy partycji, vulgo bootsector, a nie MBR), a następnie kod jest edytowany w celu zapisania w nim pozycji pliku na stałe (stąd potrzeba instalatora). Zrobię dla ciebie coś razem.
mirabilos
@Patrick Potrzebuję dyskusji na ten temat, otworzyłem czat
mirabilos
Czy możesz wskazać mi swoją implementację za pomocą grub? Obecnie mam grub-install, ale nadal wymaga zamontowania partycji rozruchowej.
skopiuj
@copy to jest sposób, w jaki jest używany w OpenADK, który ma jeszcze bardziej elastyczne generowanie obrazu niż Grml (który potrzebuje tylko stworzyć system plików ISO 9660). Może to pomaga? Jeśli nie, skontaktuj się ze mną bezpośrednio. - Edycja: och, czekaj, nie, core.imggeneracja… daj mi zobaczyć… sprawdź tutaj, aby uzyskać grub-mkimagepołączenie. Jest to wysoce zależne od środowiska docelowego (w zasadzie, które moduły są potrzebne do dynamicznego ładowania innych; GRUB 1 był znacznie łatwiejszy).
mirabilos
5

Jeśli dodasz wiersz /etc/fstabmówiąc:

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

następnie możesz zamontować / odmontować /dev/loop0jako zwykły użytkownik.

A jeśli nie chown youruser:youruser <MOUNTPOINT> <LOOPDEVICE>wtedy extlinux, losetup, mkfsitp mogą być wykonane jako youruser.

BenjiWiebe
źródło
Chcę, aby było to częścią ogólnego procesu kompilacji, a lokalizacja pliku obrazu i punktu montowania może być różna dla różnych użytkowników. Wolałbym nie wymagać edycji fstab dla każdego użytkownika.
@Patrick Edycja fstab ma charakter globalny.
BenjiWiebe
Ale losetup pozostaje tylko rootem, nie?
bmargulies
@bmargulies Nie wtedy, gdy urządzenie pętli zostało podzielone lub chmod'ed, aby użytkownik miał do niego dostęp ... lub przynajmniej w Fedorze możesz po prostu dodać użytkownika do diskgrupy. (Lub stwórz loopgrupę i użyj tego ...)
BenjiWiebe