electron / electron/forge

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
bug maker/dmg platform/macOS
Dominant language
TypeScript
Stars
7.1k
Forks
641
Avg merge
3d 1h
Merged PRs (30d)
30

Description

### Pre-flight checklist

- [x] I have read the [contribution documentation](https://github.com/electron/forge/blob/main/CONTRIBUTING.md) for this project.
- [x] I agree to follow the [code of conduct](https://github.com/electron/electron/blob/main/CODE_OF_CONDUCT.md) that this project uses.
- [x] 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](https://github.com/electron/forge/tree/main/packages/maker/dmg):

```js
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](https://github.com/electron/fiddle) or any other Electrin Forge app.

### Additional information

It calls an API from the [appdmg](https://github.com/LinusU/node-appdmg) package, [appdmg/lib/hdiutil.js](https://github.com/LinusU/node-appdmg/blob/bb0f693a74341fda7934b42fd0adcb37022f6e05/lib/hdiutil.js#L53), which runs the following shell command:

```sh
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.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.