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

но на нашей кухне установлена только десктопная версия. Так что припадем к истокам и запустим терминал.
Все нижеперечисленные команды должны быть выполнены от имени пользователя 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, внутре которого находятся неонка файл конфигурации и описания 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 коммент.:
Отправить комментарий