Конструктор Дистрибутив OpenSolaris
Автор: Brian Leonard, 6 августа 2010 http://blogs.sun.com/observatory/entry/distribution_constructor
Перевод: Яна Ситникова, 9 августа 2010 http://solaris11.ru/lib/opensolaris_distribution_constructor
Одной из особенностей, включённой в OpenSolaris с версии 2008.11, была возможность создавать собственные дистрибутивы на основе этой операционной системы. Это довольно мощное средство, если вы хотите развернуть OpenSolaris в своей организации согласно потребностям пользователей.
Задача создания нового дистрибутива решается с помощью Конструктора Дистрибутивов. В качестве примера использования Конструктора Дистрибутивов я воскрешу продукт, который некоторые из вас, возможно, помнят: Solaris Express Developer Edition, или SXDE (не путайте с SXCE - Solaris Express Community Edition).
SXDE продержался на протяжении четырёх выпусков, прежде чем встретил свою кончину с первым выпуском OpenSolaris в мае 2008. SXDE был дистрибутивом, нацеленным на разработчиков, и содержит такое программное обеспечение как Apache, MySQL, PHP, NetBeans, Sun Studio и OpenOffice.org. Поэтому моей целью будет создание дистрибутива "OpenSolaris Developer Edition". Конечно, он не поместится на CD, однако в конце статьи будут созданы образы, из которых я смогу создать как LiveDVD, так и LiveUSB.
Прежде чем начать, будет лучше предупредить, что процесс создания дистрибутив может потребовать довольно много времени. Все пакеты необходимо скачать из хранилища, настроить и перепаковать. Я очень рекомендую создать локальное хранилище, чтобы уменьшить хотя бы время установки пакетов.
Шаг 1: Установка файлов Конструктора Дистрибутивов
Первым шагом для использования Конструктора Дистрибутивов является установка пакета SUNWdistro-const:
bleonard@opensolaris:~$ pfexec pkg install SUNWdistro-const DOWNLOAD PKGS FILES XFER (MB) Completed 1/1 75/75 0.19/0.19 PHASE ACTIONS Install Phase 104/104
Шаг 2: Копирование и настройка файлов
Конструктор Дистрибутивов поставляется вместе со всеми инструментами, которые понадобятся для создания точной копии OpenSolaris 2009.06. Конфигурационные файлы и скрипты расположены в /usr/share/distro_const/slim_cd. Поэтому вы можете просто выполнить команду distro_const build /usr/share/distro_constr/slim_cd/all_lang_slim_cd_x86.xml, подождать несколько часов и на выходе получить то же самое, что можно скачать с opensolaris.com.
Чтобы сделать дистрибутив на заказ, мы скопируем файл all_lang_slim_cd_x86.xml в домашнюю директорию. Также я изменю имя файла, чтобы оно отвечало названию дистрибутива:
bleonard@opensolaris:~$ cp /usr/share/distro_const/slim_cd/all_lang_slim_cd_x86.xml all_lang_osde_x86.xml bleonard@opensolaris:~$ chmod +w all_lang_osde_x86.xml
Шаг 3: Правка манифеста
Изменение файлов манифеста хорошо документировано (см. документацию в /usr/share/doc/distro_const). Для нашего дистрибутива нам понадобится отредактировать следующие разделы:
Имя дистрибутива:
<distribution name="OpenSolaris Developer Edition">
Как было сказано в начале, для уменьшения времени скачивания я использую локальное хранилище пакетов:
<pkg_repo_default_authority>
<main
url="http://localhost:81"
authname="opensolaris.org"/>
Я добавлю 4 дополнительных пакета (amp-dev включает в себя большую часть ПО). Вы можете использовать другие пакеты:
<packages>
<pkg name="entire"/>
<pkg name="SUNWcsd"/>
<pkg name="SUNWcs"/>
<pkg name="babel_install"/>
<pkg name="SUNWslim-utils"/>
<pkg name="amp-dev"/>
<pkg name="glassfishv2"/>
<pkg name="sunstudio"/>
<pkg name="openoffice"/>
</packages>
Наконец, я изменю имя в меню grub:
<title>OpenSolaris 2009.06 Developer Edition</title>
Шаг 4: Сборка заказного дистрибутива
Чтобы собрать дистрибутив, мы будем использовать команду distro_const вместе с новым манифестом:
bleonard@opensolaris:~$ pfexec distro_const build all_lang_osde_x86.xml /usr/share/distro_const/DC-manifest.defval.xml validates /tmp/all_lang_osde_x86_temp_5613.xml validates Simple Log: /rpool/dc/logs/simple-log-2010-08-05-14-47-53 Detail Log: /rpool/dc/logs/detail-log-2010-08-05-14-47-53 Build started Thu Aug 5 14:47:53 2010 Distribution name: OpenSolaris Developer Edition Build Area dataset: rpool/dc Build Area mount point: /rpool/dc ==== im-pop: Populate the image with packages Initializing the IPS package image area: /rpool/dc/build_data/pkg_image Setting preferred authority: opensolaris.org Origin repository: http://localhost:81 Verifying the contents of the IPS repository Installing the designated packages
Конструктор Дистрибутивов задержится на шаге "Installing the designated packages" на некоторое время. Я рекомендую использовать команду tail с файлом Detail log, выделенном выше, если вы хотите узнать, что именно там происходит.
После завершения установки сборка продолжится, при этом будет выводиться примерно следующее по мере прохождения различных этапов сборки (контрольных точек):
Uninstalling the designated packages Setting post-install preferred authority: opensolaris.org Origin repository: http://pkg.opensolaris.org/release ==== im-mod: Image area modifications ==== slim-im-mod: Slim CD Image area Modifications 0 blocks WARNING: failed to parse type name `str' WARNING: invalid or missing type for schema (/schemas/apps/packagemanager/preferences/remote_search_error) WARNING: Failed to parse default value `கருப்பொருளை மாற்று ;gtk-theme-selector.desktop, முன்னிருப்பு பயன்பாடுகள் அமை;default-applications.desktop,அச்சுப்பொறி சேர்; gnome-cups-manager.desktop]' for schema (/schemas/apps/control-center/cc_actions_list) gtk-update-icon-cache: Cache file created successfully. gtk-update-icon-cache: Cache file created successfully. gtk-update-icon-cache: Cache file created successfully. gtk-update-icon-cache: Cache file created successfully. gtk-update-icon-cache: Cache file created successfully. gtk-update-icon-cache: Cache file created successfully. gtk-update-icon-cache: Cache file created successfully. gtk-update-icon-cache: Cache file created successfully. gtk-update-icon-cache: Cache file created successfully. gtk-update-icon-cache: Cache file created successfully. gtk-update-icon-cache: Cache file created successfully. gtk-update-icon-cache: Cache file created successfully. ==== br-init: Boot root initialization 235264 blocks 2800 blocks 31040 blocks 0 blocks 92560 blocks 3696 blocks 0 blocks 0 blocks 576 blocks 32 blocks 160 blocks 2832 blocks 272 blocks 384 blocks 11344 blocks 0 blocks 0 blocks ==== slim-br-config: Slim CD boot root configuration ==== br-config: Boot root configuration ==== br-arch: Boot root archiving (64-bit) 397392 blocks 283232 blocks ==== br-arch-32: Boot root archiving (32-bit) 397392 blocks 205552 blocks ==== slim-post-mod: Slim CD post bootroot image area modification ==== grub-setup: Grub menu setup ==== post-mod: Post bootroot image area modification Warning: creating filesystem that does not conform to ISO-9660. Warning: creating filesystem that does not conform to ISO-9660. ==== gen-slim-cont: Generate Slim CD image content list ==== iso: ISO image creation Warning: creating filesystem that does not conform to ISO-9660. Setting input-charset to 'UTF-8' from locale. Size of boot image is 4 sectors -> No emulation 0.68% done, estimate finish Thu Aug 5 17:57:39 2010 1.36% done, estimate finish Thu Aug 5 17:57:39 2010 2.05% done, estimate finish Thu Aug 5 17:57:39 2010 ... 98.20% done, estimate finish Thu Aug 5 17:59:06 2010 98.88% done, estimate finish Thu Aug 5 17:59:05 2010 99.56% done, estimate finish Thu Aug 5 17:59:06 2010 Total translation table size: 2048 Total rockridge attributes bytes: 31523 Total directory bytes: 200704 Path table size(bytes): 1282 Max brk space used 82000 733225 extents written (1432 MB) ==== usb: USB image creation /dev/rlofi/2: 3519000 sectors in 5865 cylinders of 1 tracks, 600 sectors 1718.3MB in 184 cyl groups (32 c/g, 9.38MB/g, 2368 i/g) super-block backups (for fsck -F ufs -o b=#) at: 32, 19232, 38432, 57632, 76832, 96032, 115232, 134432, 153632, 172832, 3340832, 3360032, 3379232, 3398432, 3417632, 3436832, 3456032, 3475232, 3494432, 3513632 2932288 blocks Build completed Thu Aug 5 18:24:38 2010 Build is successful.
Шаг 5: Использование носителя
К этому времени у нас появились образы ISO и USB:
bleonard@opensolaris:~$ ls -lh /rpool/dc/media/ total 2.8G -rw-r--r-- 1 root root 1.4G 2010-08-05 17:59 OpenSolaris Developer Edition.iso -r--r--r-- 1 root root 1.7G 2010-08-05 18:24 OpenSolaris Developer Edition.usb
Образ ISO можно записать на DVD или загрузить в виртуальную машину, такую как VirtualBox. Заметьте изменённое меню grub:

После загрузки LiveDVD вы сможете увидеть наше программное обеспечение:


Шаг 6: Настройки
Во время процесса сборки Конструктор Дистрибутивов проходит контрольные точки. Они видны в выводе в формате:
==== <шаг>: <описание>
Например:
==== grub-setup: Grub menu setup
Вы можете просмотреть контрольные точки таким образом:
bleonard@opensolaris:~$ pfexec distro_const build -l all_lang_osde_x86.xml /usr/share/distro_const/DC-manifest.defval.xml validates /tmp/all_lang_osde_x86_temp_11516.xml validates Step Resumable Description -------------- --------- ------------- im-pop X Populate the image with packages im-mod X Image area modifications slim-im-mod X Slim CD Image area Modifications br-init X Boot root initialization slim-br-config X Slim CD boot root configuration br-config X Boot root configuration br-arch X Boot root archiving (64-bit) br-arch-32 X Boot root archiving (32-bit) slim-post-mod X Slim CD post bootroot image area modification grub-setup X Grub menu setup post-mod X Post bootroot image area modification gen-slim-cont X Generate Slim CD image content list iso X ISO image creation usb X USB image creation
Вы можете видеть, что все контрольные точки обрабатываются с помощью ZFS:
bleonard@opensolaris:~$ zfs list -r -t all -s creation rpool/dc NAME USED AVAIL REFER MOUNTPOINT rpool/dc 7.55G 35.1G 123K /rpool/dc rpool/dc/logs 63K 35.1G 63K /rpool/dc/logs rpool/dc/media 2.80G 35.1G 2.80G /rpool/dc/media rpool/dc/build_data 4.75G 35.1G 1.52G /rpool/dc/build_data rpool/dc/build_data@empty 0 - 23K - rpool/dc/build_data@.step_im-pop 0 - 23K - rpool/dc/build_data@.step_im-mod 0 - 2.97G - rpool/dc/build_data@.step_slim-im-mod 0 - 2.97G - rpool/dc/build_data@.step_br-init 2.64M - 3.00G - rpool/dc/build_data@.step_slim-br-config 95K - 3.11G - rpool/dc/build_data@.step_br-config 75K - 3.11G - rpool/dc/build_data@.step_br-arch 9.33M - 3.12G - rpool/dc/build_data@.step_br-arch-32 15.7M - 3.25G - rpool/dc/build_data@.step_slim-post-mod 21.2M - 3.35G - rpool/dc/build_data@.step_grub-setup 54K - 3.34G - rpool/dc/build_data@.step_post-mod 57K - 3.34G - rpool/dc/build_data@.step_gen-slim-cont 28K - 1.67G - rpool/dc/build_data@.step_iso 13K - 1.67G - rpool/dc/build_data@.step_usb 13K - 1.67G -
Допустим, что вы, например, захотели исправить название опции в меню grub. После редактирования файла манифеста вы можете возобновить сборку на этом этапе:
bleonard@opensolaris:~$ pfexec distro_const build -r grub-setup all_lang_osde_x86.xml /usr/share/distro_const/DC-manifest.defval.xml validates /tmp/all_lang_osde_x86_temp_3244.xml validates WARNING: The manifest file, all_lang_osde_x86.xml, has changed since Step(s) im-pop im-mod slim-im-mod br-init slim-br-config br-config br-arch br-arch-32 slim-post-mod grub-setup was generated. Results may be indeterminate. ...
(необязательно) Шаг 7: Подготовка LiveUSB
Одна из утилит в составе пакета с Конструктором Дистрибутивов, usbcopy, служит для создания LiveUSB:
bleonard@opensolaris:~$ pfexec usbcopy /rpool/dc/media/OpenSolarisDeveloperEdition.usb Found the following USB devices: 0: /dev/rdsk/c4t0d0p0 <Unknown> MATSHITA DVD-RAM UJ-844S 1.11 1: /dev/rdsk/c6t0d0p0 305.2 GB WD 3200BMV External 1.75 2: /dev/rdsk/c8t0d0p0 1.9 GB SMI USB DISK 1100 Enter the number of your choice: 2 WARNING: All data on your USB storage will be lost. Are you sure you want to install to SMI USB DISK 1100, 1900 MB at /dev/rdsk/c8t0d0p0 + (y/n) y Copying and verifying image to USB device Finished 1718 MB in 455 seconds (3.7MB/s) 0 block(s) re-written due to verification failure Installing grub to USB device /dev/rdsk/c8t0d0s0 Completed copy to USB
Заметьте, что я имел проблемы с передачей имени файла с пробелами скрипту usbcopy, поэтому сначала я переименовал файл, удалив пробелы:
bleonard@opensolaris:~$ pfexec mv /rpool/dc/media/OpenSolaris\ Developer\ Edition.usb /rpool/dc/media/OpenSolarisDeveloperEdition.usb
Почему бы вам тоже не создать собственный дистрибутив OpenSolaris?