Tools mkhybrid(8) for mac68k/macppc ISO9660/HFS install ISO images
Izumi Tsutsui <[email protected]>
| Newsgroups | gmane.os.netbsd.devel.toolchain |
|---|---|
| Message-ID | <[email protected]> |
Hi, As you guys have seen here last weekend, I've added "cd9660 fs support" to installboot(8) for hp300 bootable CD image support. As the next project, I've also revived my old private project to "use old mkhybrid(8) as a build tool to create ISO9660/HFS hybrid CD ISO images for mac68k and macppc". # Background - NetBSD/mac68k needs to be installed on or booted from MacOS, so NetBSD installation CD media should be created as an ISO9660/HFS hybrid image, to make MacOS recognizes various our MacOS tools on the install CD. - Some macppc machines (with OpenFirmware 1.x and 2.x) require special data structures like the Apple partition map in the CD, and currently only mkisofs (and mkhybrid, an old fork of mkisofs) can handle such Apple specific specific boot structures (AFAIK). - Some newer macppc machines (OpenFirmware 3.x) might also require Apple specific structures to recoginze bootloaders in the CD image. (but I'm not sure) - It may be a hard work and unlikely to add HFS and Apple partition map support to our native makefs(8) tools, just to create ISO images for the old Macs. - Currently release builds require an external (pkgsrc) mkisofs(8) tool to create usable mac68k and bootable macppc installcd images, but such external tools often updated their options and behaviors and we had to catch up them in our Makefiles. (though the cdrtools project seems inactive nowadays) - As noted above newer mkisofs(8) is a part of cdrtools, and cdrtools-2.01 (and later) use their own "Schily make" to handle machine dependent environments like GNU configure. However, the smake and its Makefiles are too complicated to manage them in our NetBSD's src/tools infrastructures. - mkhybrid(8) was an old fork of mkisofs(8) that added support for the Apple specific features (HFS and partition map etc.) and it used old GNU autoconf (around 2.12). OpenBSD has used it to build their ISO images, including macppc. # Overview of "tools mkhybrid" See README.md in my github tree: https://github.com/tsutsui/netbsd-src/blob/tsutsui-tools-mkhybrid-rebase/external/gpl2/mkhybrid/README.md ``` # tools'fied mkhybrid to build HFS/ISO9660 hybrid image for mac68k and macppc (See src/distrib/cdrom/README how to fetch set binaries and build iso images) ## What's this? This external/gpl2/mkhybrid provides tools'fied mkhybrid(8) to build HFS/ISO9660 hybrid CD images for mac68k and macppc install media, based on mkhybrid 1.12b5.1 in OpenBSD 7.3: http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/gnu/usr.sbin/mkhybrid/src/ ## Changes from OpenBSD's one - pull sources in OpenBSD's src/gnu/usr.sbin/mkhybrid/src except libfile into NetBSD's src/external/gpl2/mkhybrid/dist (unnecessary files for tools builds are not imported) - pull 2 clause BSD licensed libfile sources from upstream cdrtools-3.01 - pull Makefile in OpenBSD's src/gnu/usr.sbin/mkhybrid/mkhybrid into NetBSD's src/external/gpl2/mkhybrid/bin - src/external/gpl2/mkhybrid/bin is prepared to build tools version in src/tools/mkhybrid using src/tools/Makefile.host - tweak configure to pull several header files for NetBSD tools builds - appease various dumb warnings - pull -hide-rr-moved option from upstream mkisofs-1.13 - pull -graft-points option from upstream mkisofs-1.13 and cdrtools-2.01 - pull malloc related fixes in tree.c from upstream cdrtools-2.01 ## Current status - builds on NetBSD, ubuntu, and Cygwin hosts are tested See github commit logs and diffs for more details. https://github.com/tsutsui/netbsd-src/commits/tsutsui-tools-mkhybrid-rebase/ ## TODO - add support to specify permissions via mtree-specfiles as native makefs(8) for non-root build ``` More detailed diffs and commits are on my github: https://github.com/tsutsui/netbsd-src/compare/c05c85b7...tsutsui-tools-mkhybrid-rebase Note GNU configure is not used on tools/mkhybrid build, but tools/mkhybrid builds and works even on ubuntu 22.04.4 LTS, and and even on the latest Cygwin 3.5.3 on Windows 10. I've also confirmed "macppccd-current.iso" built on the Cygwin can boot on my old Apus 2000 (with OpenFiwmare 2.0). This tools mkhybrid is built only on mac68k and macppc and used only to build iso-image, so I hope it won't break other ports. # Future works - Currently a special "mapppc_installboot" tool is necessary to make macppc install CD ISO bootable, in the "old CD method" described in src/distrib/cdrom directory. This old macppc_installboot tool (written by me) should be merged into MI src/usr.sbin/installboot to build a macppc installcd iso on "build.sh iso-image" target and to abandon the old method. However, it also requires more work and cleanups around Apple partition map stuff in src/usr.sbin/installboot/arch/macppc.c. - As noted in the above TODO, we should handle owner/group/permission and timestamp etc. in the target ISO images to full reproducible builds as our makefs(8) does, but it should be a future work because currently used pkgsrc mkisofs(8) doesn't handle them either. I believe it's a better strategy to "drop pkgsrc mkisofs(8) and use a (dumb and old but) own build tool," even if it isn't perfect. Comments? Thanks, --- Izumi Tsutsui