web-dev-qa-db-fra.com

Démarrage USB avec un fichier iso personnalisé

Je suis les étapes de la documentation Ubuntu https://help.ubuntu.com/community/LiveCDInternetKiosk

J'ai essayé de remplacer l'étape finale qui utilise mkisofs avec xorriso, n'a pas aidé. Ma clé USB ne me permet pas de réserver, je reçois un message vierge Invite. Pensez que cela peut être lié au système de fichiers (NTFS/FAT masqué au lieu de VFAT), mais sa modification à l'aide de cfdisk ne résout pas le problème. La table de partition est "dos", ça a l'air bien et/dev/sdb1 est actif c'est-à-dire amorçable. L’image .iso d’origine est le nouveau serveur Ubuntu 17.10 et celle modifiée est copiée avec dd. Les fichiers système ne sont pas modifiés sur une version modifiée.

Si j'essaie ensuite d'installer syslinx sur une clé USB (syslinux -i/dev/sdb), l'erreur suivante apparaît: "syslinux: signature de support non valide (n'est pas un volume FAT/NTFS?)"

Si je télécharge le fichier .iso vers USB en utilisant unetbootin, le système se charge correctement. Je n'avais qu'à faire isolinux -> sysline rename pour éviter l'invite de démarrage par défaut de unetbootin.

J'aimerais pouvoir écrire un script pour cette dernière étape sans utiliser X ou la moindre interaction de l'utilisateur.

Quelques étapes pertinentes:

Sudo rm extract-cd/casper/filesystem.squashfs
Sudo mksquashfs edit extract-cd/casper/filesystem.squashfs

Sudo chmod a+w extract-cd/casper/filesystem.size
printf $(Sudo du -sx --block-size=1 edit | cut -f1) > extract-cd/casper/filesystem.size


cd extract-cd
Sudo rm md5sum.txt
find -type f -print0 | Sudo xargs -0 md5sum | grep -v syslinux/boot.cat | Sudo tee md5sum.txt
cd ..

xorriso -as mkisofs \
  -o xgogi.iso \
  -isohybrid-mbr /usr/lib/SYSLINUX/mbr.bin \
  -c syslinux/boot.cat \
  -b syslinux/syslinux.bin \
   -no-emul-boot -boot-load-size 4 -boot-info-table \
  extract-cd/

#copy to USB works, needs X
Sudo unetbootin lang=en method=diskimage isofile=xgogi.iso installtype=USB targetdrive=/dev/sdb1 autoinstall=yes

# doesn't work and I am badly frustrated why
Sudo dd bs=4M if=gogi.iso of=/dev/sdb
1
kometonja

Comme vous l'avez découvert, vous avez besoin d'un MBR spécialement préparé comme entrée pour xorriso. Son travail inhabituel est de trouver et de démarrer le programme "isolinux.bin" dans l’ISO.

Le projet SYSLINUX propose un MBR approprié sous le nom "isohdpfx.bin". Le paquet binaire Debian "isolinux" a pour nom /usr/lib/ISOLINUX/isohdpfx.bin.

Bien que SYSLINUX soit peu développé, il faut veiller à combiner isohdpfx.bin et isolinux.bin uniquement à partir de versions compatibles. Ainsi, lors de la modification d'une image ISO et de la conservation de son fichier isolinux.bin, il est judicieux d'extraire les 432 premiers octets de cette image ISO et de les utiliser comme entrée MBR. (Il n’est pas dangereux de copier tous les 512 octets du premier bloc. Xorriso écrasera les octets en surplus avec les valeurs appropriées.)

2
Thomas Schmitt

Mon confrère était incorrect. Au lieu de cela, je devais en créer un nouveau à partir du fichier .iso d'origine. Comme ça:

$ Sudo dd if=ubuntu-16.04-desktop-AMD64.iso bs=512 count=1 of=custom-iso/isolinux/isohdpfx.bin

Trouvé sur ce bel article: https://linuxconfig.org/legacy-bios-uefi-and-secureboot-ready-ubuntu-live-image-customization

0
kometonja