Comment modifier des images ISO (y compris les images ISO de démarrage)

30

Je recherche des outils pour Ubuntu pouvant être utilisés pour MODIFIER des images ISO. Y compris des images ISO qui sont amorçables comme Ubuntu et Windows ISO. Non seulement éditez mais enregistrez l'ISO édité et pouvez toujours démarrer lorsqu'il est gravé sur une clé USB ou un CD / DVD.

Luis Alvarado
la source

Réponses:

42

Maître ISO installer isomaster

J'ai déjà utilisé ISO Master pour ajouter des fichiers aux ISO. Il convient à ce dont vous avez besoin car il conserve l'état de démarrage ou non de l'ISO. Je l'ai utilisé dans le passé pour ajouter d'autres contenus (comme de la musique) à un disque en direct. Notez cependant qu'après avoir apporté des modifications à un fichier ISO, vous ne pouvez que "Enregistrer sous", c'est-à-dire qu'un autre fichier ISO sera créé, alors assurez-vous d'avoir suffisamment d'espace disque pour les deux.

isomaster

dv3500ea
la source
2

PowerISO vient de publier une version Linux de son logiciel d'édition ISO. Comme ISO Master , il conserve l'état de démarrage ou non de l'ISO. Cependant, il vous permet d'enregistrer directement dans le fichier d'origine (en le supprimant d'abord), il n'est donc pas nécessaire d'avoir suffisamment d'espace disque pour les deux fichiers. Je trouve également que son interface est plus facile et plus intuitive à utiliser que ISO Master.

capture d'écran de PowerISO pour Linux

Ploni
la source
1

La réponse commune à cela est de décompresser le fichier iso, de le modifier et de le recompresser. Il semble que "ISO Master", comme mentionné dans la réponse du dv3500ea, soit une bonne interface pour le faire.

Si:

  • vous n'avez pas assez d'espace pour ça
  • vous voulez seulement faire une modification chirurgicale au lieu de réécrire le tout
  • vous souhaitez modifier un périphérique de stockage qui contient un système de fichiers isofs (alias iso9660) sans copier l'intégralité du périphérique, ou
  • si vous pensez que ce truc de déballage / reconditionnement n'est tout simplement pas assez hacky

Alors cette réponse est pour toi!

En résumé, nous remplacerons un fichier existant dans le système de fichiers isofs par notre fichier souhaité. Notre fichier souhaité doit être plus petit que le fichier existant (cible), et les espaces de fin (ou les ordures) doivent être acceptables. En réalité, cela ne nécessite que deux commandes, mais attention: une faute de frappe peut détruire complètement le système de fichiers cible, ou même écraser le fichier source. Les sauvegardes sont votre ami!

Dans mon cas, je voulais stocker un script dans un démarrage en direct afin de ne pas avoir à le retaper à chaque fois. Le script est à script.pyet ma cible (une clé USB) est à /dev/sdc. La taille du script est de 202 octets, donc notre première étape consiste à trouver un fichier de plus de 202 octets, afin que nous puissions l'écraser. Après l'avoir monté sur /mnt, j'ai trouvé un fichier approprié sur /mnt/info.txt.

Nous ne pouvons pas simplement écraser info.txtsur le point de montage, il se plaindra qu'il s'agit d'un système de fichiers en lecture seule. Nous sommes root, cependant, montrons-leur ce que cela signifie! Nous devons déterminer où se info.txttrouve le système de fichiers. Recherchez une chaîne qui est (probablement) unique info.txt, par exemple This is the official distribution CD of X., et recherchez-la sur le disque:

$ sudo strings -a -t d /dev/sdc | grep 'CD of X.'
2573588480 This is the official distribution CD of X. See INSTALL for how to [...]

Sinon, cela peut aussi être fait avec grep, ce qui est beaucoup plus rapide, mais vous devez le préciser dès le début: $ sudo grep -oba 'This is ...' /dev/sdc.

Maintenant que nous savons où il se trouve, il nous suffit de remplacer ces octets par notre fichier:

$ sudo dd if=script.py of=/dev/sdc conv=notrunc bs=1 seek=2573588480 count=202

Cette ligne:

  • copie les octets du fichier d'entrée ( if) dans le fichier de sortie ( of), et il ne se soucie pas que le fichier de sortie soit en fait un périphérique, car "tout est un fichier".
  • conv=notrunc lui dit de ne pas tronquer le fichier de sortie, car nous voulons seulement écraser quelques octets, pas écraser le fichier à partir d'un certain point.
  • bs=1 définit la taille du bloc à 1. Vous voulez généralement une taille de bloc de 4k ou plus, mais cela évite d'avoir à faire des calculs (en ligne) et nous permet de spécifier l'emplacement exact de l'octet.
  • seek=Ncherche à un certain point dans le fichier de sortie (notez que seek=Nc'est différent skip=Ncar il skipsaute les octets du fichier d'entrée!). Nous le réglons, bien sûr, là où se trouve le texte cible.
  • count=Ncopier uniquement ce nombre d'octets. Je pense que cela peut être omis car il remarquera la fin du fichier d'entrée, mais je l'ai laissé juste pour être sûr.

Et le tour est joué, le fichier est écrasé!

Mais attendez, le fichier cible était plus grand que notre script, donc sur la clé USB, le fichier est maintenant quelque chose comme: "while do if run () blah; blah (); yright 2007 X Inc.". Il y a des ordures traînantes. Deux façons de résoudre ce problème: allonger notre fichier d'entrée (ajouter des espaces) ou ajouter un symbole de commentaire à la fin. Notez que de nombreux éditeurs ajoutent une nouvelle ligne à la fin, vous pouvez donc définir count=des N-1octets (si votre fichier fait maintenant 203 octets et que vous remarquez que le dernier octet est une nouvelle ligne, définissez le nombre sur 202). Vous pouvez rechercher des sauts de ligne dans un fichier en utilisant xxd script.py | tailet en vérifiant si le dernier octet est 0a(ou, dans des cas étranges, 0d).

Le processus est identique pour un .isofichier, il suffit de le remplacer mentalement /dev/sdcpar your.iso.

Notez que lorsque vous vérifiez la cible dans votre point de montage pour voir si cela fonctionne, vous devrez peut-être stringsréutiliser (cette fois en recherchant votre script) car le fichier est probablement toujours dans le cache de lecture.

Luc
la source