How to edit Mac dmg file on Linux Platform.

By | March 16, 2019

For example I have Apache Web server where Mac dmg file is located. I want to modify for every download adding specific readme file, depending on the region where download request is coming from. A special shell script can do this job, but before I need to verify all script steps manually. This article explains how to do it on Centos6 64-bit Linux.

Preparation steps:

1. Install ELRepo (Before installing ELRepo check the current version:

# rpm –import
# yum install

2. Install hfs and hfsplus Apple file system

# yum install kmod-hfs
# yum install kmod-hfsplus

3. install dmg2img utility

# yum install dmg2img

Resolving problems with dmg2img installation.
4. install genisoimage

# yum install genisoimage

After installation I rebooted my Linux device because it did not see Apple hfs and hfsplus Apple file system.

DMG modification:
Now we need some dmg file to play with. Let us download some, I selected Avast antivirus, you may used other:

curl -O

Next we need to convert dmg file to img:

# dmg2img avast_security_online.dmg avast_security_online.img
dmg2img v1.6.2 is derived from dmg2iso by vu1tur (
avast_security_online.dmg –> avast_security_online.img
reading property list, 8326 bytes from address 15071232 …
opening partition 0 … 100.00% ok
opening partition 1 … 100.00% ok
opening partition 2 … 100.00% ok
opening partition 3 … 100.00% ok
opening partition 4 … 100.00% ok
opening partition 5 … 100.00% ok
opening partition 6 … 100.00% ok
opening partition 7 … 100.00% ok
Archive successfully decompressed as avast_security_online.img
Image appears to have GUID Partition Table with 1 HFS+ partition.
You should be able to mount it [as root] by:

modprobe hfsplus
mount -t hfsplus -o loop,offset=20480 avast_security_online.img /mnt

Check result of conversion:

# ls -l avast_security_online*
-rw-r–r– 1 root root 15080070 Mar 12 12:19 avast_security_online.dmg
-rw-r–r– 1 root root 18284544 Mar 12 12:24 avast_security_online.img

Create /mnt/dmg directory:

# mkdir /mnt/dmg

Mount converted avast_security_online.img to /mnt/dmg directory:

# mount -t hfsplus -o loop,offset=20480 avast_security_online.img /mnt/dmg

Check content of/mnt/dmg directory after mounting:

# ls -l /mnt/dmg
total 12520
-rw-r–r–. 1 506 games 12816864 Feb 25 08:26 Avast Security.pkg
drwxr-xr-x. 1 506 games 3 Feb 25 08:26
Sometime mount produces the following error: “mount: wrong fs type, bad option, bad superblock on /dev/loop0, missing codepage or helper program, or other error”.

If hfsplus has been installed successfully, check offet and sizelimit values:
# fdisk -l abc.img
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

Disk abc.img: 47 MB, 47226880 bytes, 92240 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: gpt
Disk identifier: 40AD8A9F-9A0A-41E2-85D1-0559B67AE123

# Start End Size Type Name
1 40 92199 45M Apple HFS/HFS+ disk image

recalculating output of fdisk, to get the same result as from parted:
Offset: 40*512 = 20480
sizeLimit 45*1024*1024 = 47185920

Now mount it successful:
# mount -v -t hfsplus -o loop,offset=20480,sizelimit=47185920 abc.img /mnt/dmg/
mount: /dev/loop0 mounted on /mnt/dmg

Create /tmp/dmg directory:

# mkdir /tmp/dmg

Copy content of /mnt/dmg directory to /mnt/tmp directory, then copy your readme file to /tmp/dmg directory.
Check /tmp/dmg directory content

# ls /tmp/dmg
Avast Security.pkg readme.txt

Create new dmg file from /tmp/dmg directory:

# genisoimage -V “AvastInstallation” -D -R -apple -no-pad -o newAvast.dmg /tmp/dmg

Unmount /mnt/dmg

# umount /mnt/dmg

Download newAvast.dmg file on your Mac machine, doulbe click on the file and what you will see:
Mounted DMG file
or check AvastInstallation volume:

# ls -l /Volumes/AvastInstallation/
total 25040
-rw-r–r– 1 root wheel 12816864 Mar 14 12:37 Avast Security.pkg
drwxr-xr-x 3 root wheel 2048 Mar 14 12:37
-rw-r–r– 1 root wheel 0 Mar 14 12:40 readme.txt

Leave a Reply

Your email address will not be published. Required fields are marked *