So bearbeiten Sie ISO-Images (einschließlich bootfähiger ISOs)

30

Ich suche Tools für Ubuntu , die verwendet werden können EDIT ISO Images. Einschließlich bootfähiger ISO-Images wie Ubuntu und Windows-ISOs. Bearbeiten Sie nicht nur die bearbeitete ISO-Datei, sondern speichern Sie sie, und Sie können sie auch beim Brennen auf ein USB-Laufwerk oder eine CD / DVD starten.

Luis Alvarado
quelle

Antworten:

42

ISO-Master Installieren Sie Isomaster

Ich habe ISO Master verwendet, um Dateien zu ISOs hinzuzufügen. Es ist für Ihre Anforderungen geeignet, da es den Status beibehält, ob die ISO bootfähig ist oder nicht. Ich habe es in der Vergangenheit verwendet, um andere Inhalte (wie Musik) zu einer Live-Disk hinzuzufügen. Beachten Sie jedoch, dass Sie nach Änderungen an einer ISO-Datei nur "Speichern unter", dh eine andere ISO-Datei wird erstellt. Stellen Sie daher sicher, dass Sie über genügend Speicherplatz für beide verfügen.

isomaster

dv3500ea
quelle
2

PowerISO hat gerade eine Linux-Version seiner ISO-Bearbeitungssoftware veröffentlicht. Wie der ISO-Master behält er den Status bei, ob der ISO bootfähig ist oder nicht. Sie können jedoch direkt in der Originaldatei speichern (indem Sie diese zuerst löschen), sodass nicht genügend Speicherplatz für beide Dateien erforderlich ist. Ich finde auch, dass die Benutzeroberfläche einfacher und intuitiver zu bedienen ist als ISO Master.

Screenshot von PowerISO für Linux

Ploni
quelle
1

Die übliche Antwort darauf ist, die ISO-Datei zu entpacken, zu ändern und erneut zu packen. Es sieht so aus, als wäre "ISO Master", wie in der Antwort von dv3500ea erwähnt, ein gutes Frontend, um dies zu tun.

Ob:

  • Sie haben nicht genug Platz dafür
  • Sie möchten nur eine chirurgische Modifikation vornehmen, anstatt das Ganze neu zu schreiben
  • Sie möchten ein Speichergerät ändern, das ein isofs-Dateisystem (aka iso9660) enthält, ohne das gesamte Gerät zu kopieren, oder
  • wenn Sie denken, dass dieses Auspacken / Umpacken einfach nicht hackig genug ist

Dann ist diese Antwort für Sie!

Zusammenfassend werden wir eine vorhandene Datei im isofs-Dateisystem durch unsere gewünschte Datei ersetzen. Unsere gewünschte Datei muss kleiner sein als die vorhandene (Ziel-) Datei, und abschließende Whitespaces (oder Garbages) müssen akzeptabel sein. Dies erfordert eigentlich nur zwei Befehle, aber seien Sie vorsichtig: Ein Tippfehler kann das Zieldateisystem vollständig zerstören oder sogar die Quelldatei überschreiben. Backups sind dein Freund!

In meinem Fall wollte ich ein Skript in einem Live-Boot speichern, damit ich es nicht jedes Mal neu eingeben muss. Das Skript ist auf script.pyund mein Ziel (ein USB-Stick) ist auf /dev/sdc. Die Größe des Skripts beträgt 202 Bytes. In unserem ersten Schritt suchen wir eine Datei, die größer als 202 Bytes ist, damit wir sie überschreiben können. Nachdem /mntich es bei gemountet hatte , fand ich eine passende Datei bei /mnt/info.txt.

Wir können info.txtden Mountpoint nicht einfach überschreiben , er wird sich beschweren, dass es sich um ein schreibgeschütztes Dateisystem handelt. Wir sind Root, also zeigen wir ihnen, was das bedeutet! Wir müssen herausfinden, wo info.txtsich das Dateisystem befindet. Hier finden Sie einige Zeichenfolge, die (wahrscheinlich) ist einzigartig info.txt, zum Beispiel This is the official distribution CD of X., und suchen Sie sie auf der Festplatte:

$ 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 [...]

Alternativ kann dies auch mit grep erfolgen, was viel schneller ist, aber dann müssen Sie es von Anfang an fest: $ sudo grep -oba 'This is ...' /dev/sdc.

Jetzt, wo wir wissen, wo es ist, müssen wir nur diese Bytes durch unsere Datei ersetzen:

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

Diese Linie:

  • kopiert Bytes von der Eingabedatei ( if) in die Ausgabedatei ( of), und es ist egal, dass die Ausgabedatei tatsächlich ein Gerät ist, da "alles eine Datei ist".
  • conv=notrunc weist es an, die Ausgabedatei nicht zu kürzen, da wir nur einige Bytes überschreiben möchten und die Datei ab einem bestimmten Punkt nicht mehr überschreiben möchten.
  • bs=1 Setzt die Blockgröße auf 1. Normalerweise möchten Sie eine Blockgröße von 4 KB oder höher, aber dies vermeidet, dass (Inline-) Berechnungen durchgeführt werden müssen, und lässt uns die Position genau auf das Byte festlegen.
  • seek=Nsucht bis zu einem gewissen Punkt in der Ausgabedatei (beachten Sie, dass seek=Nvon dem unterscheidet, skip=Nda skipspringt aus der Eingabedatei Bytes!). Wir legen natürlich fest, wo sich der Zieltext befindet.
  • count=NKopieren Sie nur so viele Bytes. Ich denke, dies kann weggelassen werden, da es das Ende der Eingabedatei bemerkt, aber ich habe es nur zur Sicherheit belassen.

Und voila, die Datei wird überschrieben!

Aber warten Sie, die Zieldatei war größer als unser Skript. Auf dem USB-Stick lautet die Datei nun etwa "while do if run () blah; blah (); yright 2007 X Inc.". Es gibt Müll. Zwei Möglichkeiten, dies zu beheben: Verlängern Sie die Eingabedatei (fügen Sie Leerzeichen hinzu) oder fügen Sie am Ende ein Kommentarsymbol hinzu. Beachten Sie, dass viele Redakteure eine neue Zeile am Ende hinzufügen, damit Sie festlegen möchten vielleicht count=zu N-1Bytes (wenn die Datei 203 Bytes ist jetzt, und Sie feststellen , dass das letzte Byte ist ein Newline - Set Zählung 202). Sie können eine Datei auf Zeilenumbrüche xxd script.py | tailprüfen, indem Sie das letzte Byte verwenden und prüfen 0a(oder in seltsamen Fällen 0d).

Der Vorgang ist für eine .isoDatei identisch , nur mental ersetzen /dev/sdcdurch your.iso.

Wenn Sie das Ziel in Ihrem Mountpoint überprüfen, um festzustellen, ob es funktioniert hat, müssen Sie es möglicherweise stringserneut verwenden (diesmal nach Ihrem Skript suchen), da sich die Datei wahrscheinlich noch im Lesecache befindet.

Luc
quelle