If you’ve tried to create a bootable OS X El Capitan installer on a modern Apple Silicon Mac, you’ve likely encountered frustrating compatibility errors. The legacy installer package includes architecture checks that prevent installation on ARM-based systems or macOS versions newer than 10.11. This technical barrier can feel like a roadblock when you need to restore or upgrade an older Intel-based Mac.
Fortunately, you can bypass these limitations by manually extracting and processing the installer files directly from the DMG. This guide demonstrates how to use built-in macOS tools like pkgutil, hdiutil, and asr (Apple Software Restore) to build a complete bootable installer without running the incompatible installer application.
Legacy Mac systems (2006-2010 era) often require older operating systems like El Capitan for optimal performance or compatibility with specific software. Whether you’re:
…this technique enables you to create proper installation media from modern hardware.
By following this guide, you’ll be able to:
hdiutil for custom bootable mediaImportant Warnings:
What You’ll Need:
First, ensure you have the correct El Capitan installer file:
⚠️ Critical Step: This process completely erases your target media. Back up any existing data first.
Applications > Utilities > Disk Utility⌘ + Space, type “Disk Utility”, and press EnterSDCard (or any simple name without spaces)Mac OS Extended (Journaled)GUID Partition Map (critical for Intel Mac booting)/Volumes/SDCardIf you prefer the command line, identify your device first:
# List all disks (identify your SD card carefully!)
diskutil list
Then erase it (replace diskX with your actual disk identifier):
# DANGER: This erases the entire disk
sudo diskutil eraseDisk JHFS+ SDCard GPT /dev/diskX
This phase bypasses the compatibility checks by manually extracting the installer payload without running the incompatible installer application.
Objective: Access the installer package files
Implementation:
# Mount the El Capitan installer DMG
hdiutil attach ~/Downloads/InstallMacOSX.dmg -noverify -nobrowse
Expected Result: A volume named “OS X El Capitan Install” (or similar) appears in Finder
What’s Happening: The -noverify flag speeds up mounting by skipping checksum verification, while -nobrowse prevents the volume from appearing in Finder windows (though it’s still accessible).
Objective: Extract the installer package to a working location
Via Finder:
InstallMacOSX.pkg file to your DesktopVia Terminal (faster):
# Copy the installer package to Desktop
cp /Volumes/Install\ OS\ X\ El\ Capitan/InstallMacOSX.pkg ~/Desktop/
Objective: Extract the package contents without running the installer
Implementation:
# Open Terminal if not already open
# Navigate to Desktop
cd ~/Desktop
# Expand the .pkg file into a directory structure
pkgutil --expand InstallMacOSX.pkg Installer
Expected Result: A new folder named Installer appears on your Desktop containing the unpacked package structure
Understanding pkgutil: The --expand option flattens the package structure, making individual components accessible without installation.
Objective: Unpack the compressed payload containing the actual installer files
Implementation:
# Navigate into the expanded package
cd ~/Desktop/Installer/InstallMacOSX.pkg
# Extract the tar-compressed payload
tar -xvf Payload
Expected Result: You’ll see extraction progress for numerous files. The -xvf flags mean:
x: Extract filesv: Verbose output (show file names)f: Read from file (not stdin)Troubleshooting: If you see “No such file or directory”, verify you’re in the correct directory with pwd (should show /Users/[yourname]/Desktop/Installer/InstallMacOSX.pkg)
Objective: Find and extract the InstallESD.dmg file, which contains the actual OS installation files
Implementation:
# The extracted files create an Applications directory structure
# Move the critical InstallESD.dmg to Desktop for easier access
mv InstallESD.dmg ~/Desktop/
# Alternative: Find it if the structure differs
find ~/Desktop/Installer -name "InstallESD.dmg" -exec mv {} ~/Desktop/ \;
Expected Result: InstallESD.dmg now exists on your Desktop (approximately 6 GB)
Objective: Free up disk space and unmount the original installer
# Eject the original mounted DMG
hdiutil detach "/Volumes/Install OS X El Capitan"
# Optional: Remove the expanded package to save space
rm -rf ~/Desktop/Installer
What We’ve Accomplished: You now have the core installer image (InstallESD.dmg) extracted and ready for processing, without running any incompatible installer code.
This phase transforms the extracted installer into a complete, bootable disk image. We’ll use a sparse image format for efficient manipulation before creating the final compressed image.
Objective: Access the base system files needed for booting
Implementation:
# Mount InstallESD.dmg to a specific location
hdiutil attach ~/Desktop/InstallESD.dmg -noverify -nobrowse -mountpoint /Volumes/install_app
Expected Result: The image mounts silently at /Volumes/install_app
Technical Note: Custom mount points prevent conflicts if you have other volumes mounted and provide predictable paths for scripting.
Objective: Create a modifiable working copy of the base system
Implementation:
# Convert BaseSystem.dmg to a sparse (resizable) format
hdiutil convert /Volumes/install_app/BaseSystem.dmg -format UDSP -o /tmp/Installer
Expected Result: Creates /tmp/Installer.sparseimage (approximately 2 GB initially)
Why Sparse Images?: Unlike standard DMG files, sparse images can grow dynamically as we add content, making them perfect for building custom installers.
Objective: Expand the sparse image to hold the complete installer
Implementation:
# Resize to 8GB (sufficient for El Capitan installer)
hdiutil resize -size 8g /tmp/Installer.sparseimage
Expected Result: Image capacity increases to 8 GB without immediately using that disk space
Troubleshooting: If you see “Resource busy”, ensure no other process is accessing the image. Use lsof | grep Installer to check.
Objective: Access the sparse image to add installer components
Implementation:
# Mount the resized sparse image
hdiutil attach /tmp/Installer.sparseimage -noverify -nobrowse -mountpoint /Volumes/install_build
Expected Result: Mounted at /Volumes/install_build, ready for modification
Objective: Remove the symbolic link and add actual installer packages
Implementation:
# Remove the placeholder Packages symlink
rm -r /Volumes/install_build/System/Installation/Packages
# Copy the complete package directory from the source
cp -av /Volumes/install_app/Packages /Volumes/install_build/System/Installation/
Expected Result: Progress output showing copied files (approximately 5.5 GB)
Understanding -av flags:
a: Archive mode (preserves permissions, timestamps, etc.)v: Verbose output (shows what’s being copied)Troubleshooting: If the copy fails with “Operation not permitted”, ensure Terminal has Full Disk Access:
Objective: Add the files needed for the installer to boot correctly
Implementation:
# Copy the chunklist verification file
cp -av /Volumes/install_app/BaseSystem.chunklist /Volumes/install_build/
# Copy the base system image
cp -av /Volumes/install_app/BaseSystem.dmg /Volumes/install_build/
Expected Result: Two additional files copied to the root of the installer
What Are These Files?:
BaseSystem.chunklist: Cryptographic verification data for secure bootBaseSystem.dmg: The minimal system needed to boot and run the installerObjective: Safely detach volumes before finalizing the image
Implementation:
# Unmount the source installer
hdiutil detach /Volumes/install_app
# Unmount the working sparse image
hdiutil detach /Volumes/install_build
Expected Result: Both volumes disappear from Finder and /Volumes/
Why This Matters: Unmounting ensures all file buffers are flushed to disk and prevents corruption.
Objective: Shrink the sparse image to its minimum required size
Implementation:
# Calculate minimum size and resize
hdiutil resize -size $(hdiutil resize -limits /tmp/Installer.sparseimage | tail -n 1 | awk '{print $1}')b /tmp/Installer.sparseimage
Expected Result: Image size reduces to approximately 6.2 GB (just enough for the content)
Command Breakdown:
hdiutil resize -limits: Reports minimum, current, and maximum sizestail -n 1: Gets the last line (the actual numbers)awk '{print $1}': Extracts the first column (minimum size in sectors)b: Appends ‘b’ to specify bytesObjective: Convert the sparse image to a compressed, efficient DMG
Implementation:
# Convert to compressed DMG format
hdiutil convert /tmp/Installer.sparseimage -format UDZO -o /tmp/Installer
Expected Result: Creates /tmp/Installer.dmg (approximately 5.8 GB compressed)
Format Details:
UDZO: UDIF zlib-compressed (read-only, maximum compression)Objective: Place the final installer image where it’s easy to find
Implementation:
# Move the completed installer to Desktop
mv /tmp/Installer.dmg ~/Desktop/ElCapitan-Bootable.dmg
Expected Result: ElCapitan-Bootable.dmg now on your Desktop, ready to restore to physical media
Cleanup (optional):
# Remove the sparse image to free up space
rm /tmp/Installer.sparseimage
The final phase writes the bootable installer image to your SD card or USB drive using Apple Software Restore (ASR).
Objective: Confirm the target device is mounted and ready
Implementation:
# List all mounted volumes
ls -la /Volumes/
# Specifically check for your SD card
ls -la /Volumes/SDCard
Expected Result: You should see your formatted SD card listed (we named it “SDCard” earlier)
Troubleshooting: If not found:
diskutil list to see all devicesObjective: Block-copy the bootable installer to physical media
Implementation:
# Restore the image to your SD card
sudo asr restore --source ~/Desktop/ElCapitan-Bootable.dmg --target /Volumes/SDCard --noprompt --noverify --erase
You’ll Be Asked For: Your administrator password
Expected Result:
--noverify, basic checks occur)Command Breakdown:
sudo: Required for low-level disk operationsasr restore: Apple Software Restore in restore mode--source: Path to your bootable DMG--target: Destination volume (will be erased)--noprompt: Skips confirmation dialog (we’re sure!)--noverify: Skips checksum verification (speeds up process)--erase: Ensures clean write to destinationProgress Indicators:
Validating target...done
Validating source...done
Retrieving scan information...done
Validating sizes...done
Restoring ....10....20....30....40....50....60....70....80....90....100
Verifying ....10....20....30....40....50....60....70....80....90....100
Restored target device is /Volumes/OS X Base System
Objective: Confirm the bootable installer is properly written
Implementation:
# Check the renamed volume
ls -la /Volumes/
# Verify installer contents
ls -la "/Volumes/OS X Base System/"
Expected Result:
System/, Library/, BaseSystem.dmg, etc.Additional Verification (optional):
# Check the volume's bootability
bless --info "/Volumes/OS X Base System" --getBless
This should show blessing information confirming the volume is bootable.
Objective: Properly unmount the media before physical removal
Via Finder:
Via Terminal:
# Safely eject the volume
diskutil eject "/Volumes/OS X Base System"
Expected Result: Message confirming successful ejection
Critical: Always eject properly to prevent data corruption. Don’t just pull out the media!
Objective: Free up disk space by removing temporary files
Implementation:
# Remove the extracted installer files (if still present)
rm -rf ~/Desktop/Installer
# Remove the working DMG files
rm ~/Desktop/InstallESD.dmg
rm ~/Desktop/InstallMacOSX.pkg
# Optional: Keep the final bootable DMG for future use
# rm ~/Desktop/ElCapitan-Bootable.dmg
Expected Result: Approximately 12 GB of disk space freed
Best Practice: Keep ElCapitan-Bootable.dmg as a master copy for creating additional bootable media later.
Objective: Verify the installer boots correctly on legacy hardware
Implementation Steps:
Option (⌥) keyExpected Result: OS X Utilities menu with options:
Success Indicators:
Firmware Boot Picker (if Option key doesn’t work):
Command (⌘) + Option (⌥) + O + Fboot usb0/disk@1:2,\\:tbxi
Or try variations: usb1, sd0, etc.
Target Disk Mode Test (advanced):
T keySymptoms: SD card doesn’t appear in Startup Manager
Causes:
Solutions:
Command to check:
# See if your Mac's model identifier supports SD boot
system_profiler SPHardwareDataType | grep "Model Identifier"
Then search Apple’s support database for your specific model.
Symptoms: Circle with line through it (🚫) appears when booting
Causes:
Solutions:
Symptoms: Multi-language panic message appears
Causes:
Solutions:
Command + Option + P + RSymptoms: Progress bar freezes, Mac doesn’t respond
Causes:
Solutions:
Symptoms: “Operation not permitted” when copying files
Causes: Terminal lacks Full Disk Access
Solutions:
# Run with explicit sudo if needed
sudo bash -c 'cp -av /source /destination'
Before considering this project complete, verify:
Best Practice: Test installation on a non-critical Mac first
If you have access to VMware Fusion or Parallels:
# Create VM with El Capitan support
# Configure VM to boot from your bootable DMG
# Test installer flow in isolated environment
Note: VM testing confirms image integrity but doesn’t guarantee hardware compatibility.
Apple’s installer packages include built-in compatibility checks that verify:
When you try to run InstallMacOSX.pkg on an Apple Silicon Mac, these checks fail because:
Manual extraction bypasses these checks by accessing the payload directly without running any verification code.
Understanding what each component does helps troubleshoot issues:
| File/Component | Purpose | Critical? |
|---|---|---|
InstallESD.dmg |
Complete installer image with all OS files | ✅ Essential |
BaseSystem.dmg |
Minimal bootable system that runs the installer | ✅ Essential |
BaseSystem.chunklist |
Cryptographic verification for secure boot | ✅ Essential |
Packages/ |
Individual OS components and updates | ✅ Essential |
InstallMacOSX.pkg |
Wrapper with compatibility checks | ⚠️ Only for extraction |
Sparse Images (UDSP):
Compressed Images (UDZO):
Conversion Process:
Read/Write DMG → Sparse Image → Modified Sparse → Compressed DMG
(BaseSystem.dmg) → (Working copy) → (Added packages) → (Final installer)
ASR performs block-level copying with several advantages:
Why not just copy files?: Simple file copying misses:
Once you have ElCapitan-Bootable.dmg, you can easily create additional installers:
# Fast restoration to another drive (replace diskX)
sudo asr restore --source ~/Desktop/ElCapitan-Bootable.dmg \
--target /Volumes/AnotherDrive --noprompt --erase
Create a reusable script (make-elcapitan-installer.sh):
#!/bin/bash
# Automated El Capitan Bootable Installer Creator
# Usage: ./make-elcapitan-installer.sh /path/to/InstallMacOSX.dmg
set -e # Exit on any error
SOURCE_DMG="$1"
WORK_DIR="/tmp/elcapitan-build"
OUTPUT="$HOME/Desktop/ElCapitan-Bootable.dmg"
if [ -z "$SOURCE_DMG" ]; then
echo "Usage: $0 <path-to-InstallMacOSX.dmg>"
exit 1
fi
echo "🚀 Starting El Capitan bootable installer creation..."
# Create work directory
mkdir -p "$WORK_DIR"
cd "$WORK_DIR"
# Mount source
echo "📦 Mounting source installer..."
hdiutil attach "$SOURCE_DMG" -noverify -nobrowse -mountpoint /Volumes/install_source
# Extract package
echo "📂 Extracting installer package..."
pkgutil --expand /Volumes/install_source/InstallMacOSX.pkg "$WORK_DIR/Installer"
cd "$WORK_DIR/Installer/InstallMacOSX.pkg"
tar -xvf Payload
# Get InstallESD
echo "💾 Locating InstallESD.dmg..."
find . -name "InstallESD.dmg" -exec cp {} "$WORK_DIR/" \;
# Build bootable image
echo "🔨 Building bootable image..."
hdiutil attach "$WORK_DIR/InstallESD.dmg" -noverify -nobrowse -mountpoint /Volumes/install_app
hdiutil convert /Volumes/install_app/BaseSystem.dmg -format UDSP -o "$WORK_DIR/Installer"
hdiutil resize -size 8g "$WORK_DIR/Installer.sparseimage"
hdiutil attach "$WORK_DIR/Installer.sparseimage" -noverify -nobrowse -mountpoint /Volumes/install_build
# Copy packages
echo "📦 Copying installer packages..."
rm -rf /Volumes/install_build/System/Installation/Packages
cp -av /Volumes/install_app/Packages /Volumes/install_build/System/Installation/
cp -av /Volumes/install_app/BaseSystem.* /Volumes/install_build/
# Finalize
echo "✨ Finalizing image..."
hdiutil detach /Volumes/install_app
hdiutil detach /Volumes/install_build
hdiutil resize -size $(hdiutil resize -limits "$WORK_DIR/Installer.sparseimage" | tail -n 1 | awk '{print $1}')b "$WORK_DIR/Installer.sparseimage"
hdiutil convert "$WORK_DIR/Installer.sparseimage" -format UDZO -o "$OUTPUT"
# Cleanup
echo "🧹 Cleaning up..."
hdiutil detach /Volumes/install_source
rm -rf "$WORK_DIR"
echo "✅ Complete! Bootable installer: $OUTPUT"
Make it executable and use:
chmod +x make-elcapitan-installer.sh
./make-elcapitan-installer.sh ~/Downloads/InstallMacOSX.dmg
This technique works for other legacy macOS releases:
Install macOS Sierra.app)For Sierra and later, the installer is an app bundle, so adjust the extraction:
# For Sierra-style installers
cp -R "/Volumes/Install macOS Sierra/Install macOS Sierra.app" /Applications/
sudo /Applications/Install\ macOS\ Sierra.app/Contents/Resources/createinstallmedia \
--volume /Volumes/SDCard --applicationpath /Applications/Install\ macOS\ Sierra.app
For multiple Mac restorations, consider NetBoot:
N key for network bootCombine multiple installers on one large USB drive:
# Partition the drive
diskutil partitionDisk /dev/diskX 2 GPT \
JHFS+ "El Capitan" 8G \
JHFS+ "Sierra" 8G
# Restore each partition
sudo asr restore --source ~/Desktop/ElCapitan-Bootable.dmg \
--target /Volumes/El\ Capitan --noprompt --erase
sudo asr restore --source ~/Desktop/Sierra-Bootable.dmg \
--target /Volumes/Sierra --noprompt --erase
Result: Single USB drive with multiple bootable partitions.
man hdiutil in Terminalman diskutil in Terminalman asr in TerminalDisk Utility Alternatives:
Verification Tools:
# Verify bootability
bless --info "/Volumes/OS X Base System" --getBless
# Check partition scheme
diskutil info "/Volumes/OS X Base System" | grep "Partition Type"
# Verify file integrity
shasum -a 256 ~/Desktop/ElCapitan-Bootable.dmg
Search for these topics on YouTube:
Through this guide, you’ve learned:
pkgutil and tar to bypass installer restrictionshdiutilasrArchitecture Limitations: Understanding why certain software won’t run on incompatible hardware architecture (ARM vs Intel).
Installer Anatomy: Modern macOS installers are multi-layered with:
Bootability Requirements: For media to boot a Mac, it needs:
You’ve completed: 🟡 Intermediate system administration
Next challenges to tackle:
These skills are valuable for:
IT Support Roles:
Personal Projects:
Professional Development:
If something goes wrong, verify these key steps:
# 1. Verify source DMG integrity
hdiutil verify ~/Downloads/InstallMacOSX.dmg
# 2. Check available disk space (need ~12GB free)
df -h
# 3. Verify Terminal permissions
ls -la ~/Desktop/InstallESD.dmg
# 4. Check target media is writable
diskutil info /Volumes/SDCard | grep "Read-Only"
# 5. Verify final image is valid
hdiutil verify ~/Desktop/ElCapitan-Bootable.dmg
| Error Message | Likely Cause | Solution |
|---|---|---|
| “Operation not permitted” | Permissions issue | Grant Terminal Full Disk Access |
| “Resource busy” | Volume in use | Unmount with diskutil unmount |
| “No such file or directory” | Wrong path | Verify path with pwd and ls |
| “Not enough space” | Insufficient disk space | Free up space or use external drive |
| “Invalid argument” | Syntax error | Check command syntax carefully |
| “Device not found” | Media not mounted | Check with diskutil list |
If the process fails mid-way:
hdiutil detach /Volumes/install_app
hdiutil detach /Volumes/install_build
rm -rf /tmp/Installer*
rm -rf ~/Desktop/Installer
Start fresh: Re-download the source DMG if suspect corruption
log show --predicate 'process == "hdiutil"' --last 10m
Creating bootable installers for legacy macOS versions on modern Apple Silicon Macs demonstrates an important principle in system administration: understanding the underlying technology enables creative problem-solving. While Apple’s tools include restrictions designed to prevent errors, knowing how to work around them (safely and purposefully) is a valuable skill.
This technique preserves access to older systems that remain useful for specific tasks, software compatibility, or historical preservation. Whether you’re maintaining a vintage Mac lab, supporting legacy applications, or simply exploring computing history, these skills bridge the gap between modern and legacy technology.
Did this guide help you successfully create an El Capitan installer? Encounter any unique challenges or discover improvements to the process? Share your experience in the comments below to help others in the community.
Continue your legacy Mac journey:
Article last updated: October 13, 2025
Tested on: MacBook Pro (M3, 2024) running macOS Sequoia 15.0
Target hardware: MacBook (Late 2009, Early 2010)