maker-dmg fails with "hdiutil: attach failed - Resource busy" on macOS 26.4 Beta

Open
#4,147 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
35/100
Issue type
Bug
Clarity
Needs clarification
Activity status
Stale
Tech stack
macos, typescript

Research direction

Start with the MakerDMG implementation in packages/maker/dmg and the linked appdmg/lib/hdiutil.js entry point, then reproduce electron-forge make on macOS 26.4 Beta using the reported configuration. Compare the hdiutil and diskarbitrationd output with macOS 13.7.4; done means identifying a project-side compatibility change or documenting that the failure is external and verifying the result on the affected versions.

Written by the indexing model from the issue text.

Description

bug maker/dmg platform/macOS
Pre-flight checklist
  • I have read the contribution documentation for this project.
  • I agree to follow the code of conduct that this project uses.
  • I have searched the issue tracker for a bug that matches the one I want to file, without success.
Forge version

7.10.2

Electron version

36.3.2

Operating system

macOS 26.4 Beta (25E5207k)

Last known working Forge version

No response

Expected behavior

Running electron-forge make on macOS, when using MakerDMG, should succeed.

Actual behavior

It fails with the following message:

An unhandled rejection has occurred inside Forge:
Error: Command failed: hdiutil attach /var/folders/0m/nf10bfxx6rgft8tn29fznymc0000gn/T/2TZ7JTG.dmg -nobrowse -noverify -noautoopen
hdiutil: attach failed - no mountable file systems
at makeError (/Users/jamie/Documents/git/banana_native/node_modules/appdmg/node_modules/execa/index.js:174:9)
    at /Users/jamie/Documents/git/banana_native/node_modules/appdmg/node_modules/execa/index.js:278:16
    at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
 ELIFECYCLE  Command failed with exit code 1.
Steps to reproduce

Install macOS 26.4 Beta (25E5207k) and run electron-forge make with the following config for @electron-forge/maker-dmg:

new MakerDMG(
  {
    name: "banana_macos_installer",
    icon: path.resolve(workspace, "assets/icons/banana/icon.icns"),
    format: "ULFO",
    background: path.resolve(workspace, "assets/dmg/banana-background.tiff"),
    contents: (opts) => [
      { x: 253, y: 298, type: "file", path: opts.appPath },
      { x: 590, y: 298, type: "link", path: "/Applications" },
    ],
    additionalDMGOptions: {
      window: {
        size: { width: 842, height: 595 },
      },
    },
  },
  ["darwin"],
),

For an example project, try adding MakerDMG into Electron Fiddle or any other Electrin Forge app.

Additional information

It calls an API from the appdmg package, appdmg/lib/hdiutil.js, which runs the following shell command:

hdiutil attach /var/folders/0m/nf10bfxx6rgft8tn29fznymc0000gn/T/2TZ7JTG.dmg -nobrowse -noverify -noautoopen

On a colleague's computer running an older non-beta version of macOS, 13.7.4 (22H420), it succeeds with:

/dev/disk2          	GUID_partition_scheme
/dev/disk2s1        	Apple_HFS                      	/Volumes/banana_macos_installer

On my own computer, since updating to macOS 26.4 Beta (25E5207k) (it worked on my computer on older versions of macOS), it has been failing as follows:

hdiutil: attach failed - Resource busy

When I run sudo log show --predicate 'process == "diskarbitrationd"' --last 5m | tail -1000, I get the following debug logs:

See diskarbitrationd logs
Timestamp                       Thread     Type        Activity             PID    TTL  
2026-02-20 16:23:26.997526+0900 0xba389    Default     0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] created disk, id = /dev/disk14.
2026-02-20 16:23:26.999032+0900 0xba389    Default     0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] created disk, id = /dev/disk14s1.
2026-02-20 16:23:26.999135+0900 0xba389    Default     0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] encryption status changed, id = /dev/disk14.
2026-02-20 16:23:26.999481+0900 0xba389    Default     0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] probed disk, id = /dev/disk14s1, with hfs, ongoing.
2026-02-20 16:23:27.002247+0900 0xba389    Default     0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] encryption status changed, id = /dev/disk14s1.
2026-02-20 16:23:27.023833+0900 0xba389    Default     0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default]  fsck status 6 /dev/rdisk14s1
2026-02-20 16:23:27.025937+0900 0xba389    Default     0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] probed disk, id = /dev/disk14s1, with hfs, success.
2026-02-20 16:23:27.027389+0900 0xba389    Default     0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default]   diskimages-helper [10979]:104519 queued solicitation, id = 0000000000000005:0000000000000005, kind = disk claim, disk = /dev/disk14s1, options = 0x00000000.
2026-02-20 16:23:27.028527+0900 0xba389    Default     0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Found FSModule: {
    CFBundleName = "exfat_fskit";
    FSBundleID = "com.apple.fskit.exfat";
    FSImplementation =     (
        UserFS,
        kext
    );
    FSIsFSModule = 1;
    FSMediaTypes =     {
        "EBD0A0A2-B9E5-4433-87C0-68B6B72699C7" =         {
            FSMediaProperties =             {
                "Content Hint" = "EBD0A0A2-B9E5-4433-87C0-68B6B72699C7";
                Leaf = 1;
            };
            FSProbeArguments = "-p";
            FSProbeExecutable = "exfat.util";
            FSProbeOrder = 2000;
        };
        Partitionless =         {
            FSMediaProperties =             {
                Leaf = 1;
                Whole = 1;
            };
            FSProbeArguments = "-p";
            FSProbeExecutable = "exfat.util";
            FSProbeOrder = 4000;
        };
        "Windows_NTFS" =         {
            FSMediaProperties =             {
                "Content Hint" = "Windows_NTFS";
                Leaf = 1;
            };
            FSPro<…>
2026-02-20 16:23:27.028666+0900 0xba389    Default     0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Found FSModule: {
    CFBundleName = "msdos_fskit";
    FSBundleID = "com.apple.fskit.msdos";
    FSImplementation =     (
        UserFS,
        kext
    );
    FSIsFSModule = 1;
    FSMediaTypes =     {
        "C12A7328-F81F-11D2-BA4B-00A0C93EC93B" =         {
            FSMediaProperties =             {
                "Content Hint" = "C12A7328-F81F-11D2-BA4B-00A0C93EC93B";
                Leaf = 1;
            };
            FSProbeArguments = "-p";
            FSProbeExecutable = "msdos.util";
            FSProbeOrder = 1000;
            autodiskmount = 0;
        };
        "DOS_FAT_12" =         {
            FSMediaProperties =             {
                "Content Hint" = "DOS_FAT_12";
                Leaf = 1;
            };
            FSProbeArguments = "-p";
            FSProbeExecutable = "msdos.util";
            FSProbeOrder = 1000;
        };
        "DOS_FAT_16" =         {
            FSMediaProperties =             {
                "Content Hint" = "DOS_FAT_16";
            <…>
2026-02-20 16:23:27.030654+0900 0xbcde9    Default     0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default]   diskimages-helper [10979]:104519 queued solicitation, id = 0000000000000007:0000000000000007, kind = disk claim, disk = /dev/disk14, options = 0x00000000.
2026-02-20 16:23:27.033483+0900 0xbcde9    Default     0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] claimed disk, id = /dev/disk14, success.
2026-02-20 16:23:27.036488+0900 0xbcde9    Default     0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] claimed disk, id = /dev/disk14s1, success.
2026-02-20 16:23:27.048215+0900 0xbcde9    Default     0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default]  Mount options -u=501,-g=20,-m=755,nodev,noowners,nosuid
2026-02-20 16:23:27.048221+0900 0xbcde9    Default     0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] repaired disk, id = /dev/disk14s1, ongoing.
2026-02-20 16:23:27.053440+0900 0xbcde9    Default     0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] repaired disk, id = /dev/disk14s1, failure.
2026-02-20 16:23:27.053444+0900 0xbcde9    Error       0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] unable to repair /dev/disk14s1 (status code 0x00000006).
2026-02-20 16:23:27.053496+0900 0xbcde9    Default     0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default]  Mount options -u=501,-g=20,-m=755,nodev,noowners,nosuid,rdonly
2026-02-20 16:23:27.053513+0900 0xbcde9    Error       0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Unknown mount arg string -u=501
2026-02-20 16:23:27.053514+0900 0xbcde9    Error       0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Unknown mount arg string -u=501
2026-02-20 16:23:27.053515+0900 0xbcde9    Error       0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Unknown mount arg string -u=501
2026-02-20 16:23:27.053516+0900 0xbcde9    Error       0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Unknown mount arg string -u=501
2026-02-20 16:23:27.053518+0900 0xbcde9    Error       0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Unknown mount arg string -u=501
2026-02-20 16:23:27.053520+0900 0xbcde9    Error       0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Unknown mount arg string -g=20
2026-02-20 16:23:27.053522+0900 0xbcde9    Error       0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Unknown mount arg string -g=20
2026-02-20 16:23:27.053523+0900 0xbcde9    Error       0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Unknown mount arg string -g=20
2026-02-20 16:23:27.053524+0900 0xbcde9    Error       0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Unknown mount arg string -g=20
2026-02-20 16:23:27.053526+0900 0xbcde9    Error       0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Unknown mount arg string -m=755
2026-02-20 16:23:27.053528+0900 0xbcde9    Error       0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Unknown mount arg string -m=755
2026-02-20 16:23:27.053529+0900 0xbcde9    Error       0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Unknown mount arg string -m=755
2026-02-20 16:23:27.053530+0900 0xbcde9    Error       0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Unknown mount arg string -m=755
2026-02-20 16:23:27.053531+0900 0xbcde9    Error       0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] Unknown mount arg string -m=755
2026-02-20 16:23:27.053628+0900 0xbcde9    Default     0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] mounted disk, id = /dev/disk14s1, ongoing.
2026-02-20 16:23:27.064739+0900 0xbcde9    Default     0x0                  365    7    diskarbitrationd: [com.apple.DiskArbitration.diskarbitrationd:default] mounted disk, id = /dev/disk14s1, success.

As the -noverify and -noautoopen flags alone each work, it may suggest some change in macOS's support for the -nobrowse flag. The above logs seem to suggest that the -u=501,-g=20,-m=755 mount args are not recognised. But I'm not sure. This is way out of my familiarity zone.

Dominant language
TypeScript
Stars
7.1k
Forks
642
Avg merge
2d 8h
Merged PRs (30d)
35

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from electron/forge

All issues in electron/forge

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.