Home

воскресенье, 21 февраля 2010 г.

Сетевая загрузка Mac OS X, часть II

Часть вторая, Что в образе тебе моём?

Как мы выяснили в первой части, для передачи клиенту сетевой загрузки нужно приготовить специальный образ по специальному рецепту. В состав серверной версии макоси входит специальная утилита System Image Utility, которая куховарит образы легко и непринужденно,

sysimgutl.png

но на нашей кухне установлена только десктопная версия. Так что припадем к истокам и запустим терминал.

Все нижеперечисленные команды должны быть выполнены от имени пользователя root, так что первым делом получим супер-права, введя по запросу свой пароль

sudo bash

Предварительно мы создадим директории для хранения образов, создадим там, кто они обычно хранятся в серверной версии.

mkdir -p /Library/NetBoot/NetBootSP0
mkdir /Library/NetBoot/NetBootClients0
chown -R root:admin /Library/NetBoot
chmod -R 775 /Library/NetBoot

Сами имена не имеют жесткой привязки где-нибудь в коде программ, но принято их называть таким образом, увеличивая последнюю цифру в имени от образа к образу: NetBootSP0, NetBootSP1

А вот код bootpd сервера жаждет видеть символические ссылки .sharepoint и .clients на каждом из используемых дисков, так что не будем его дразнить:

cd /Library/NetBoot
ln -s NetBootSP0 /Library/NetBoot/.sharepoint
ln -s NetBootClients0 /Library/NetBoot/.clients

Структура образа

Рассмотрим структуру образа сетевой загрузки. Выглядит она следующим образом:

nbi.png

Образ представляет собой каталог с расширением .nbi, внутре которого находятся неонка файл конфигурации и описания NBImageInfo.plist, сам образ NetInstall.dmg (в данном конкретном случае это обычный образ инсталляционного DVD от 10.6). Кроме этого виден каталог, названный соответственно архитектуре клиента, в нашем случае это i386. В этом каталоге виднеется начальный загрузчик booter, 32-битное ядро mach.macosx и кэш расширений ядра mach.macosx.mkext Для 64-битной архитектуры наличествует отдельный каталог со своим ядром и кэшем.

Давайте создадим свой образ инсталляционного Mac OS X 10.6, назовем его XInstall для краткости. Рисуем структуру:

cd /Library/NetBoot/NetBootSP0
mkdir -p XInstall.nbi/i386/x86_64
cd XInstall.nbi

Сначала нам нужен booter, на самом деле это не что иное как boot.efi, расположенный по адресу /usr/standalone/i386/boot.efi Так что просто скопируем его со всеми возможными ресурсами

ditto /usr/standalone/i386/boot.efi i386/booter

Следующим идет ядро системы, на рабочей машине оно лежит как /mach_kernel Однако даже в нежном барсике оно относительно толстое и содержит целых три архитектуры, i386, x86_64 и (sic!) ppc. Так что разделим его на нужные составляющие

lipo -extract i386 -output i386/mach.macosx /mach_kernel
lipo -extract x86_64 -output i386/x86_64/mach.macosx /mach_kernel

В результате из 18Mb исходного ядрища получились ядрышки в 7.4Mb и 5.6Mb соответственно. Теперь сгенерим кэш расширений для наших архитектур

kextcache -a i386 -s -l -n -z -m /tmp/mkext /System/Library/Extensions
ditto /tmp/mkext i386/mach.macosx.mkext
kextcache -a x86_64 -s -l -n -z -m /tmp/mkext /System/Library/Extensions
ditto /tmp/mkext i386/x86_64/mach.macosx.mkext
rm /tmp/mkext

Ахтунг! В нашем случае архитектура и версия системы на текущем маке и на клиентах будет совпадать, в противном случае брать ядро и расширения следует из предварительно смонтированного образа инсталляции

А теперь скопируем dmg инсталляции макоси, путь к исходному образу подставьте свой

cp ~/Downloads/Mac\ OS\ X\ Install\ DVD.dmg ./NetInstall.dmg

Далее создадим файл конфигурации/описания. В принципе, его можно создать заранее в текстовом редакторе или plist редакторе и потом скопировать. Но мы используем для создания несколько команд defaults и сконвертим результат в XML формат. Из названия ключей вполне очевидно их назначение и необходимые значения

defaults write $PWD/NBImageInfo Name -string 'OSX Install'
defaults write $PWD/NBImageInfo BootFile -string booter
defaults write $PWD/NBImageInfo Index -int 4081
defaults write $PWD/NBImageInfo IsEnabled -bool true
defaults write $PWD/NBImageInfo Kind -int 1
defaults write $PWD/NBImageInfo RootPath -string NetInstall.dmg
defaults write $PWD/NBImageInfo IsInstall -bool true
defaults write $PWD/NBImageInfo Type -string NFS
defaults write $PWD/NBImageInfo Architectures -array i386
defaults write $PWD/NBImageInfo IsDefault -bool true
plutil -convert xml1 NBImageInfo.plist

Фуух, с образом покончено. Ой.

0 коммент.:

Отправить комментарий