Cross-Platform Alternatives: Replacing Ubuntu’s genisoimage and qemu-img Commands on macOS


2 views

When transitioning from Ubuntu to macOS, two commonly used commands in virtualization and disk management need equivalents:

  • genisoimage for creating ISO images with metadata
  • qemu-img for converting disk image formats

The macOS equivalent for genisoimage is hdiutil, Apple's native disk image utility. Here's how to create a similar ISO:

hdiutil makehybrid \
  -o init.iso \
  -hfs -joliet -iso -default-volume-name cidata \
  user-data meta-data

Key parameters explanation:

  • -o: Specifies output file
  • -hfs -joliet -iso: Sets filesystem formats
  • -default-volume-name: Equivalent to -volid

If you prefer a more Linux-like experience, install cdrtools via Homebrew:

brew install cdrtools

Then use mkisofs (which is what genisoimage typically aliases to):

mkisofs -output init.iso -volid cidata -joliet -rock user-data meta-data

For qemu-img functionality, you have several options:

Option 1: Using qemu installed via Homebrew

brew install qemu
qemu-img convert -O raw disk.img disk.img.raw

Option 2: Using hdiutil for native conversion

hdiutil convert disk.img -format UDRW -o disk.img.raw

Note that UDRW format is equivalent to raw format.

When working with large disk images:

  • For hdiutil, add -shadow flag to enable incremental operations
  • For qemu-img, use -p flag to show progress
  • Consider using pv pipe viewer for better progress monitoring

Creating a cloud-init ISO with multiple files:

hdiutil makehybrid -o cloud-init.iso \
  -hfs -joliet -iso -default-volume-name cidata \
  -filemode 0644 -mode 0644 \
  user-data meta-data network-config

Converting a VMDK to raw format:

qemu-img convert -p -O raw virtualdisk.vmdk virtualdisk.raw

If you encounter permission problems with hdiutil:

hdiutil makehybrid -o init.iso \
  -hfs -joliet -iso -default-volume-name cidata \
  -uid 0 -gid 80 \
  user-data meta-data

For sparse image conversion with qemu-img:

qemu-img convert -O raw -S 0 disk.img disk.img.raw

When transitioning between Linux (Ubuntu) and macOS development environments, you'll frequently encounter situations where equivalent toolchains are needed. Two particularly important utilities for virtualization and disk image manipulation are:

  • genisoimage for creating ISO images
  • qemu-img for disk image conversion

The native solution on macOS is hdiutil, Apple's disk image utility. However, for ISO creation that mimics genisoimage behavior, consider these options:

# Using hdiutil (native macOS)
hdiutil makehybrid -iso -joliet -o output.iso source_folder

# Using mkisofs (available via Homebrew)
brew install cdrtools
mkisofs -output init.iso -volid cidata -joliet -rock user-data meta-data

For qemu-img functionality on macOS, these options are available:

# Using qemu-img (via Homebrew)
brew install qemu
qemu-img convert -O raw disk.img disk.img.raw

# Using hdiutil for basic conversion
hdiutil convert disk.img -format UDRW -o disk.img.raw

Here's a complete workflow for creating cloud-init data and converting a QCOW2 image on macOS:

# Create cloud-init ISO
mkisofs -output cloud-init.iso -volid cidata -joliet -rock user-data meta-data

# Convert QCOW2 to raw format
qemu-img convert -f qcow2 -O raw ubuntu.qcow2 ubuntu.raw

When working with large disk images on macOS:

  • qemu-img tends to be faster than hdiutil for format conversions
  • For ISO creation, mkisofs offers more compatibility with Linux-generated images
  • Consider using pv (pipe viewer) for monitoring progress with large files

If you encounter permission problems with Homebrew-installed tools:

# Fix qemu-img permissions
sudo chmod +x $(brew --prefix qemu)/bin/qemu-img

For mkisofs/joliet compatibility issues:

mkisofs -J -r -V "VOLUME_ID" -o output.iso source_dir