Образ диска мак ос. Клонирование Mac OS X: создаем свою «овечку Долли

  • Tutorial

Приветствую достопочтенных жителей Хабра!

Сегодня я расскажу вам о том, как красиво преподнести пользователю инсталлятор своей программы. Наверняка каждый, кто пользуется не только программами из AppStore, сталкивался с красивыми образами диска.dmg, как вот у Адиума, к примеру. Такой образ представляет из себя, так сказать, интерактивный инсталлятор, в котором дана чёткая подсказка: перетащи значок вот сюда. Всё предельно понятно и просто.

Конечно, для бывалого маковода и zip-архив сгодится, но ведь все любят, чтоб было красиво и удобно. Так что мы с вами, дорогие читатели, озаботимся сегодня созданием такого вот красивого образа диска для своей (ну или чужой) программы.


Можно, конечно, проделать это всё вручную, но это не_наш_метод™ , так что мы будем писать shell-скрипт для автоматизации сего процесса. Автоматизация нам так же пригодится в случае ввода в эксплуатацию билд-сервера, тогда этот сервер будет не только собирать программу из исходников, но и делать образ диска для дистрибьюции.

Если Вам не нужно знать как работает такой скрипт, а нужен лишь инструмент - в конце имеется ссылка на весьма универсальный скрипт, готовый к применению.

План действий вкратце:

  • Скопировать бандл во временную директорию
  • Создать образ диска из временной директории, доступный для чтения и записи
  • Примонтровать полученный образ
  • Кастомизировать внешний вид образа с помощью AppleScript: создать симлинк для /Applications, задать фон и расположение элементов
  • Задать иконку для образа диска
  • Отмонтировать образ
  • Конвертировать образ в сжатый ридонли
  • Готово! Можно выкладывать на сайт или в Sparkle-каст.
ВАЖНО! Скрипт (точнее, его часть, задействующая AppleScript) не будет работать должным образом, если установлен TotalFinder (или аналогичная штука), и это может привести к непредсказуемым последствиям! Серьёзно.

Для начала нам надо определить что будем упаковывать и какое имя образа получим в конце. Для этого в скрипте пишем так:

TMP_DIR="./tmp" APP_BUNDLE_NAME="MyGreatApplication.app" APP_VERSION=`/usr/libexec/PlistBuddy -c "Print:CFBundleShortVersionString" "${APP_BUNDLE_NAME}/Contents/Info.plist"` APP_BUILD_VERSION=`/usr/libexec/PlistBuddy -c "Print:CFBundleVersion" "${APP_BUNDLE_NAME}/Contents/Info.plist"` DMG_NAME_BASE=${APP_BUNDLE_NAME%.*} DMG_NAME_SUFFIX=" ${APP_VERSION}.${APP_BUILD_VERSION}" DMG_NAME="${DMG_NAME_BASE}${DMG_NAME_SUFFIX}.dmg" VOL_NAME=${APP_BUNDLE_NAME%.*}
Здесь мы задаём имя бандла, который будем паковать, и читаем из него версию и билд программы с помощью утилиты PlistBuddy и устанавливаем их как суффикс для имени файла будущего образа диска. Имя же образа при монтировании мы задаём просто как имя бандла без расширения.

Для создания временного образа диска используем программу hdiutil, вызвав её со следующими параметрами

Hdiutil create -ov -srcfolder ${TMP_DIR} -format UDRW -volname "${VOL_NAME}" "${DMG_NAME_TMP}"
Здесь параметры TMP_DIR , VOL_NAME и DMG_NAME_TMP - временная директория, имя образа (которое будет отображаться при монтировании) и имя временного.dmg файла соответственно. Параметр -format UDRW указывает на тип образа: UDIF образ для чтения и записи. Возможность записи на диск нам нужна для кастомизации внешнего вида примонтированного образа. Параметр -ov указывает утилите перезаписать образ, если вдруг мы его не удалили в прошлый раз.

Теперь монтируем полученный образ (и сохраняем имя устройства для последующего использования):

Device=$(hdiutil attach -readwrite -noverify -noautoopen ${DMG_NAME_TMP} | egrep "^/dev/" | sed 1q | awk "{print $1}")
Здесь всё довольно просто: аттачим с правами на чтение и запись, автоматически окно файндера не открываем, а затем получаем имя типа /dev/disk2 с помощью egrep, sed и awk парся вывод hdiutil"а.

Теперь скопируем на образ фоновую картинку и иконку, которые лежат, к примеру, в ресурсах нашего бандла (хотя, конечно, их можно взять и из любого другого места):

BG_FOLDER="/Volumes/${VOL_NAME}/.background" mkdir "${BG_FOLDER}" cp "${APP_BUNDLE_NAME}/Contents/Resources/${BG_IMG_NAME}" "${BG_FOLDER}/" ICON_FOLDER="/Volumes/${VOL_NAME}" cp "${APP_BUNDLE_NAME}/Contents/Resources/${VOL_ICON_NAME}" "${ICON_FOLDER}/.VolumeIcon.icns"
Далее, нам надо подмонтированный образ кастомизировать, сделать это можно через Finder вручную, но мы поступим хитрее: заставим Finder сделать всё автоматически через AppleScript. Для вызова таких скриптов из шелла есть утилита osascript , которой на вход подадим такую заготовку:

APPLESCRIPT=" tell application \"Finder\" tell disk \"${VOL_NAME}\" open -- Setting view options set current view of container window to icon view set toolbar visible of container window to false set statusbar visible of container window to false set the bounds of container window to {${WINDOW_LEFT}, ${WINDOW_TOP}, ${WINDOW_RIGHT}, ${WINDOW_BOTTOM}} set theViewOptions to the icon view options of container window set arrangement of theViewOptions to not arranged set icon size of theViewOptions to 72 -- Settings background set background picture of theViewOptions to file \".background:${BG_IMG_NAME}\" -- Adding symlink to /Applications make new alias file at container window to POSIX file \"/Applications\" with properties {name:\"Applications\"} -- Reopening close open -- Rearranging set the position of item \"Applications\" to {${APPS_X}, ${APPS_Y}} set the position of item \"${APP_BUNDLE_NAME}\" to {${BUNDLE_X}, ${BUNDLE_Y}} -- Updating and sleeping for 5 secs update without registering applications delay 5 end tell end tell " echo "$APPLESCRIPT" | osascript
Разумеется, вместо VOL_NAME и прочего наш shell-скрипт подставит заранее заготовленные строки. Данный AppleScript говорит файндеру открыть наш подмонтированный диск, задать ему нужные параметры отображения: убрать строку адреса и статуса, задать вид «иконки», задать размеры окна, размер иконок. Все эти параметры будут сохранены в файле .DS_Store . Далее мы задаём фоновую картинку, скопированную ранее. Затем - создаём симлинк (алиас в терминах AS) для /Applications, переоткрываем окно для применения изменений. Теперь устанавливаем положение иконок программы и созданного симлинка, обновляем и спим 5 секунд для надёжности.

Теперь установим иконку для образа через утилиту SetFile:

SetFile -c icnC "${ICON_FOLDER}/.VolumeIcon.icns" SetFile -a C "${ICON_FOLDER}"
Далее, устанавливаем нужные права для образа диска, синхронизируемся (два раза для надёжности) и извлекаем образ:

Chmod -Rf go-w /Volumes/"${VOL_NAME}" sync sync hdiutil detach ${device}
Всё, теперь можно делать финальный образ диска!

Hdiutil convert "${DMG_NAME_TMP}" -format UDZO -imagekey zlib-level=9 -o "${DMG_NAME}"
Здесь мы с помощью hdiutil конвертируем временный образ в формат UDZO (UDIF сжатый) с уровнем компрессии 9 (лучшая). И на выходе получаем образ диска для дистрибьюции, имеющий привлекательный внешний вид!

Полный скрипт включён в репозиторий на гитхабе . Замечу, что в полной версии скрипта очень много возможных входных параметров (парсинг которых сильно увеличивает его размер), хардкода нет совсем (ну кроме дефолтных параметров). Ну а картинка, приведённая в начале поста, получается следующим вызовом моего скрипта:

$ make_dmg.sh -V -b habr_logo_big.png -i habr_icon.icns -s "800:500" -c 535:345:253:345 "Hello Habr.app" Enabling version info in resulting dmg Setting background to habr_logo_big.png Setting icon to habr_icon.icns Setting window size to 800:500 Setting coordinates to 535:345:253:345 Bundle name set to Hello Habr.app Defaulting dmg volume name to Hello Habr *** Copying Hello Habr.app to the temporary dir... done! *** Creating temporary dmg disk image......... created: /Users/silvansky/Projects/habr_demo_dmg/Hello Habr_tmp.dmg *** Mounting temporary image... done! (device /dev/disk1) *** Sleeping for 5 seconds... done! *** Setting style for temporary dmg image... * Copying background image... done! * Copying volume icon... done! * Setting volume icon... done! * Executing applescript for further customization... done! *** Converting tempoprary dmg image in compressed readonly final image... * Changing mode and syncing... chmod: /Volumes/Hello Habr/.Trashes: Permission denied * Detaching /dev/disk1... "disk1" unmounted. "disk1" ejected. * Converting... Готовлюсь к созданию образа… Читаю Driver Descriptor Map (DDM: 0)… (CRC32 $AF5ACFAD: Driver Descriptor Map (DDM: 0)) Читаю Apple (Apple_partition_map: 1)… (CRC32 $92261EDC: Apple (Apple_partition_map: 1)) Читаю disk image (Apple_HFS: 2)… ................................................................................................................................................................................... (CRC32 $F59F12B2: disk image (Apple_HFS: 2)) Читаю (Apple_Free: 3)… .................................................................................................................................................................................... (CRC32 $00000000: (Apple_Free: 3)) Добавляю ресурсы… .................................................................................................................................................................................... Прошло: 804.502ms Размер файла: 4132028 байт, сумма: CRC32 $AFE83FC5 Обработано секторов: 13243, 10041 сжато Скорость: 6.1 Mб/с Сохранений: 39.1 % created: /Users/silvansky/Projects/habr_demo_dmg/Hello Habr 1.0.1.dmg done! *** Removing temporary image... done! *** Cleaning up temp folder... done! *** Everything done. DMG disk image is ready for distribution.
Что ж, теперь Вы можете написать свой скрипт для таких целей или же использовать мой, достаточно универсальный. Успешных проектов!

Сколько бы нам опытные хакинтошники не повторяли, что устанавливать Mac OS X на PC – просто, главное, не бояться, данный процесс почти всегда оказывается сложным, долгим и по-настоящему головоломным. Пишу «почти», потому что есть один действительно быстрый метод, требующий наличия всего двух вполне стандартных программ. Отдельные счастливцы радостно говорят, что им удаётся так сделать хакинтош на своём компьютере всего за 10 минут! Не знаю, как 10, но за 30 минут мне это вчера удалось.

Итак, хорош интриговать, мы говорим об обычном разворачивании у вас на компьютере образа готовой OS X , удачно установленной ранее на чьём-то PC. В принципе, на этом одном предложении можно было бы и закончить инструкцию, но мы рассмотрим процесс пошагово.

Первым делом необходимо найти и скачать образ Mac OS X , который бы максимально точно подошёл именно для вашего компьютера. Идеальным будет попадание конфигурации один в один, так, можно встретить готовые установки для распространённых моделей ноутбуков. Но, принципиальным является только совместимость с процессором, всё остальное можно будет наладить потом. Владельцев AMD ждёт небольшое разочарование – маленький выбор годных OSXдля этого семейства процессоров, причём довольно стареньких. Ищем по ключевым словам «OSX» + «установленная система» или «готовый образ», или «быстрая установка».

Ставить желательно на отдельный винчестер , в крайнем случае – на раздел жёсткого диска. В случае с разделом могут быть потом трудности при загрузке, но они в принципе решаемы. Готовим винчестер или выделяем логический диск любой утилитой наподобие Partition Magic.

Далее потребуются программа для монтирования виртуальных iso образов cd, типа Alcohol 120%, и программа для восстановления разделов жесткого диска из резервных копий формата arc. Я использовал в качестве первой Daemon Tools, а второй – R Drive Image, у них есть и бесплатные аналоги. Скачиваем и устанавливаем.

Запускаем Daemon Tools и монтируем скачанный образ MacOSX«имя файла.iso». Тут же в системе появляется новый виртуальным сиди диск, зайдя на который можно увидеть файл резервной копии «имя файла.arc».

Запускаем R Drive Image от имени администратора.

Жмём «Восстановить из образа », выбираем на виртуальном cd файл arc.

Метку оставляем на «Восстановить диски или разделы ».

Выбираем объект в образе с Mac OS X и раздел куда ставить.

Восстановить из образа. Раздел должен быть активным.

Через пару минут процесс завершится и можно перезагружаться, выбрав в бут-меню нужный диск.

Первую загрузку рекомендовал бы проводить с параметром –v. Вводить его можно в загрузчике, это будет Chameleon или что-то типа. Если с конфигурацией повезло, то всё загрузиться нормально и мелкие недочёты типа звука или usb можно будет устранять уже добавлением кекстов в систему. А если нет, то с параметром –v будет видно, на чём застопорились. У меня, например, надо было достать флешку, чтобы прекратилась ошибка EBIOS read error. Для тех, кто ставил на логический диск (надо было всё-таки подсуетить отдельный винчестер!), вероятно появление ошибки «Still waiting for root device». Это можно решить (или не решить, ошибка вероятна и в других случаях) прописыванием параметра rd=disk0s2, где 0 – это порядок винчестера в системе, может быть еще 1, 2 или 3, а s2 – указание номера логического раздела.

Образ диска представляет собой файл в формате ISO, который хранит всё содержимое оригинального носителя. Существуют другие форматы, но этот самый популярный.

Компьютер распознаёт виртуальный образ точно так же, как физический диск. Даже если на оригинальном носителе хранились взаимосвязанные файлы, они будут корректно работать и в виде образа. Поэтому чаще всего создают образы дисков с установочными файлами игр, программ и операционных систем.

Современные ОС читают ISO-файлы без дополнительных программ. На старых операционных системах для этого можно использовать утилиты вроде Daemon Tools . Открыть образ и просмотреть его содержимое можно и с помощью обычного архиватора.

Зачем создавать образы дисков

Допустим, вы купили DVD / Blu-ray с игрой или фильмом. Со временем на нём появляются царапины, отчего можно утратить записанную информацию. Да и сам диск легко потерять. К тому же он шумит, вращаясь в дисководе, и скорость считывания с него данных ниже, чем из памяти компьютера. Все эти проблемы можно решить, создав виртуальный образ диска.

Если диск защищён от копирования, скорее всего, создать его образ не выйдет.

Другой пример: у вас есть диск с дистрибутивом Windows. Его можно использовать для или ОС, но гораздо лучше для этих целей подходит флешка. Тем более многие современные компьютеры вообще не имеют дисководов. Но вы можете создать образ диска и сделать из него .

Как создать образ диска в Windows

Ashampoo Burning Studio FREE - одна из самых удобных утилит для создания образов дисков. Её интерфейс переведён на русский язык, она занимает мало места и к тому же бесплатна. Во время установки программа запрашивает лицензионный ключ, но его можно получить на почту после быстрой регистрации аккаунта.

Сразу после запуска утилиты выберите «Образ диска» → «Создать образ». Затем вставьте в дисковод физический диск и дождитесь, пока программа распознает его, после чего кликните «Далее». Потом укажите папку, в которой будет создан образ, и выберите формат ISO. Опять кликните «Далее» и дождитесь завершения копирования.




Образ диска появится в указанном вами месте в памяти компьютера.

Если по каким-то причинам вас не устраивает эта утилита, можете воспользоваться похожими бесплатными программами вроде BurnAware Free или CDBurnerXP .

На Mac это можно сделать в стандартной «Дисковой утилите», доступной в разделе Finder → «Программы» → «Утилиты». Запустив её, вставьте нужный диск в привод и нажмите в верхнем меню «Файл» → «Новый образ» → «Образ из [имя вашего диска]».

В следующем окне введите латиницей короткое название будущего образа. В качестве места назначения укажите рабочий стол (desktop) и выберите формат «Мастер DVD/CD». После этого нажмите «Сохранить» и дождитесь завершения копирования.

Созданный образ появится на рабочем столе и будет иметь расширение CDR. Если вы планируете использовать его только на , то можно оставить и этот формат. Но чтобы его читали компьютеры с Windows, нужно конвертировать CDR-файл в ISO.

Чтобы изменить формат образа, запустите утилиту «Терминал». Введите команду cd desktop и нажмите Enter. Затем введите вторую команду hdiutil makehybrid -iso -joliet -o [имя 1].iso [имя 2].cdr , предварительно заменив [имя 1] и [имя 2] названиями будущего файла ISO и уже созданного CDR-файла соответственно. Потом снова нажмите Enter - через некоторое время образ ISO появится на рабочем столе.

Допустим, сначала был создан CDR-файл с именем olddisk. Тогда выбираем для будущего образа ISO, например, имя newdisk. В итоге команды для нашего случая будут выглядеть так:

A disk image is a special file that includes data and structure of the physical disk. But to use this virtual copy, you need to mount it first. Mounting is a process that makes a virtual disk – image – available and recognizable by the operating system. After you mount image, Mac OS is able to see the content of the virtual disk and work with it just like with any other physical media. I would like to explain and how to use the images.

To mount a disk image, Mac uses a special utility. With it you can just double-click on the needed image to mount it. However, this application works with a rather narrow range of virtual disk types. If for some reasons the native tool for Mac is not working with your image, then I advise you to install the third-party application – image mounter .

Disk image mounter – Mac program that mounts any types of virtual disks – is a special software that makes an image accessible to the operating system. This operation is similar to the insertion of the ordinary physical disk to the drive. Although to mount image, Mac automatically uses its native tool, I advise you to work with the program that is specially designed for this operation. DAEMON Tools for Mac – a smart and compact tool that "knows" how to mount a disk image regardless of its type.

How to mount an image on Mac, using DAEMON Tools?

Download and install the program on your computer. DAEMON Tools has a trial period, so during the first 20 days you can use the program for free.

After the program is installed, the images on your Mac are associated with it. Now you can double-click on any image – and it will be mounted. Just after you mount image, Mac OS recognizes it, so you are able to use it just like an ordinary physical disk.

However, I advise you to use the program"s interface, because in this case you will be able not only to mount images, but also to organize them.

How to mount a disk image from application window of DAEMON Tools for Mac?

There are several ways of , using DAEMON Tools. Here are they all:


If you still have questions about , visit other articles in the blog. For example, you can read about how to mount an audio disk or how to mount an ISO image . Also, feel free to ask any related question in the comments below.