Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux 命令列建立 DMG 映像檔完整腳本流程:從版本號擷取到最終壓縮

編輯:關於 Linux

DMG 是 macOS 專用磁碟映像格式。在 Linux 上可透過 hdiutil (需 macOS 環境) 或跨平台工具建立,本文提供一套完整 Shell 腳本:自動讀取 Info.plist 版本號、計算暫存目錄大小、建立可讀寫暫存 DMG、掛載後自訂背景圖示/視窗大小、最終轉換為唯讀壓縮 DMG 釋出。

DMG 建立流程示意圖

DMG 格式簡介

  • macOS 原生磁碟映像格式,支援壓縮、加密、唯讀、混合映像
  • Linux 直接操作需 dmg2img、7z 解壓;建立需 macOS hdiutil
  • Windows 可用 TransMac、PowerISO 開啟/燒錄

自動化建立腳本 build_dmg.sh

#!/bin/bash
set -euo pipefail

APP_NAME="Soulver"
VERSION=$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "${APP_NAME}.app/Contents/Info.plist")
DMG_BACKGROUND_IMG="Background.png"
VOL_NAME="${APP_NAME} ${VERSION}"
DMG_TMP="${VOL_NAME}-temp.dmg"
DMG_FINAL="${VOL_NAME}.dmg"
STAGING_DIR="./Install"

# 清理舊檔
rm -rf "${STAGING_DIR}" "${DMG_TMP}" "${DMG_FINAL}"

# 建立暫存目錄並複製 App
mkdir -p "${STAGING_DIR}"
cp -Rp "${APP_NAME}.app" "${STAGING_DIR}/"

# 計算所需大小 (MB) + 1MB 餘量
SIZE=$(du -sm "${STAGING_DIR}" | awk '{print $1}')
SIZE=$(echo "${SIZE} + 1" | bc | awk '{print int($1+0.5)}')
[ $? -ne 0 ] && { echo "Error: Cannot compute size"; exit 1; }

# 建立暫存可讀寫 DMG (HFS+)
hdiutil create -srcfolder "${STAGING_DIR}" \
  -volname "${VOL_NAME}" -fs HFS+ \
  -fsargs "-c c=64,a=16,e=16" \
  -format UDRW -size ${SIZE}M "${DMG_TMP}"
echo "Created DMG: ${DMG_TMP}"

# 掛載暫存 DMG 進行視窗美化
DEVICE=$(hdiutil attach -readwrite -noverify "${DMG_TMP}" | egrep '^/dev/' | head -1 | awk '{print $1}')
sleep 2

# 此處可加入 osascript 設定 Finder 視窗大小、背景圖、圖示位置
# 範例略過,參考 AppleScript 文件

# 卸載並轉換為最終壓縮唯讀 DMG
hdiutil detach "${DEVICE}"
hdiutil convert "${DMG_TMP}" -format UDZO -o "${DMG_FINAL}"
rm -f "${DMG_TMP}"
echo "Final DMG: ${DMG_FINAL}"

關鍵指令解析

指令用途
PlistBuddy讀取/修改 macOS plist 設定檔 (版本號、Bundle ID 等)
hdiutil create建立映像檔:-format UDRW 可讀寫、-fs HFS+ 檔案系統
hdiutil attach掛載映像檔,回傳裝置路徑 (如 /dev/disk2)
hdiutil convert格式轉換:UDZO 壓縮唯讀、UDBZ bzip2 壓縮、ULFO lzfse
hdiutil detach卸載映像檔

跨平台替代方案

純 Linux 環境建議使用 genisoimage/mkisofs 產出 ISO,或 tar.gz/zip 釋出;macOS 專屬發布才需 DMG。

Copyright © Windows教程網 All Rights Reserved