В яблочко! Краткий обзор ОС Darwin 7.0 на платформе X86 (MAC OS X 10.3 Jaguar)
Архив номеров / 2004 / Выпуск №8 (21) / В яблочко! Краткий обзор ОС Darwin 7.0 на платформе X86 (MAC OS X 10.3 Jaguar)
Пункт 1 предназначен для установки на пустой диск. В случае, когда не надо иметь на диске несколько систем, выбирайте его. Пункт 3 предназначен для случая, когда место заранее выделено и размечено под операционную систему Darwin (ее идентификатор 0xA8, см. далее по тексту). Если вам не подошли пункты 1 или 3, тогда вспоминаем, что настоящие герои всегда идут в обход и выбирают самый легкий путь. В целом разметка вручную не так и страшна, как кажется на первый взгляд. Выбираем пункт 2. Для начала следует ознакомиться с командами fdisk данной системы. Правильно, нажимаем слово «help» и читаем, что есть в меню. Команд немного, поэтому можно набирать не полную версию, а, например, сокращать до 2 начальных букв. То есть вместо «help» писать «he». Команды прочитаны, пора выделить место под наше сегодняшнее яблочко. Распечатаем содержимое MBR диска, на который будем ставить ОС. Для этого подаем команду «print». Видим теперь, где находятся разделы и свободное место. Для редактирования свободного места подадим команду «edit ID», где ID – это номер раздела, предположим под номером 2 (то есть на текущем диске первичный раздел номер 2). Процедура выбора необходимого размера для нового раздела не составит, я надеюсь, особого труда. Отмечу, что размер считается в секторах, а не в килобайтах. Идентификатор файловой системы для Darwin имеет код 0xA8 (Darwin UFS). Затем следует обновить информацию в MBR (Master Boot Record). Если вы ставите на чистый диск, то в MBR никакого загрузчика нет. Поэтому следует записать в него штатный, идущий в комплекте с OpenDarwin. В случае когда вы устанавливаете на отдельный раздел, все равно придется перезаписать MBR. В этом нет ничего страшного, т.к. дальше в статье разъясняется на примере LILO, как сделать загрузку нескольких операционных систем. Для этих целей предусмотрена команда «update». После этого запишем в MBR непосредственно сведения о разделе, в котором будет жить наша «яблочная» операционная система. Сделаем это с помощью команды «write». Следует помнить, что в MBR записывается новый загрузчик, поэтому если у вас стоял LILO, GRUB или что-то аналогичное, то он будет просто-напросто переписан загрузчиком от Darwin. У меня используется LILO, поэтому я просто добавил в /etc/lilo.conf следующую строчку: И запустив /sbin/lilo, перезаписываю MBR. Теперь при старте можно будет выбрать загрузку с раздела hdd2, где обитает OpenDarwin. Всё. Выставим флаг активности раздела (команда «active ID», где ID – опять-таки нужный нам номер раздела). И завершим разметку подав команду «exit». После этого осталось дождаться, чтобы установились пакеты, входящие в состав компакт-диска. Как говорится, возьмите чай, кофе – сахар по вкусу. В ходе установки внимание обращает тот факт, что все пакеты находятся в упакованном виде. Сжаты они с помощью bzip2. После установки истинно «яблочных» пакетов, таких как AppleUSBAudio, следом идут пакеты с до боли знакомыми названиями. Согласитесь, что такие строчки, как apache-670tar.bz2, bind9-7tar.bz2, gcc-1495tar.bz2, вам о чем-то говорят. В этом нет ничего удивительного, т.к. система, как вы, наверное, слышали, базируется на BSD. Большинство утилит, присутствующих в системе, хорошо знакомы людям, постоянно работающим в Open/Net/FreeBSD, да и тем, кто когда-либо занимался сборкой программ под UNIX. Вернемся к нашему яблоку. Перегружаемся, не забываем вытащить из привода компакт-диск. Далее загрузка будет происходить с нашего жесткого диска. Вот несколько интересных, на мой взгляд, строк, которые можно наблюдать при старте системы. Ваше аппаратное обеспечение отличается от моего, но по аналогии можете сами проследить отличия.
Итак, строка externalClock = 0x85 означает, что шина работает на частоте 133 МГц (переведите цифры в десятичное представление). Строка currentClock = 0x5ba разъясняет, что текущая тактовая частота равна 1466 МГц, а максимальная частота для этого типа процессора равна 2250 МГц (maximumClock = 0x8ca). Стоит разъяснить, откуда появляется надпись «hfs_ mount: invalid HFS+ sig 0x0000». Вы помните, когда мы ставили идентификатор раздела, то поставили 0xA8 (Darwin UFS). В связи с чем делаем вывод, что корневой раздел у нас отформатировался в UFS-формате. Ничего страшного, кроме досадного факта, что файловая система у нас получилась нежурналируемая. Для того чтобы корневая файловая система была в HFS+ формате, при начальной разметке диска следует ставить идентификатор 0xAF (вместо 0xA8). Перевести систему из UFS в HFS+ пока не представляется возможным. Процесс загрузки ОС кардинально не отличается от процесса загрузки системы на FreeBSD. Знакомые конфигурационные файлы в /etc (rc, rc.boot, rc.common, fstab, syslog.conf и т. д.). Итак, перед нами приглашение на вход в систему. Заходим под пользователем root (пароль изначально не установлен). Что необходимо сделать на этом этапе? Попробуем поднять сеть? Давайте сделаем!
Ага, вот и наша сетевая карта (интерфейс en0). Есть два пути – правильный и не очень правильный. Чтобы прописать в Darwin IP-адрес для интерфейса, в /etc/ надо создать файл iftab. Структура его следующая: en0 inet 10.0.0.10 netmask 255.255.255.0 up где 10.0.0.10 – IP-адрес, 255.255.255.0 – маска сети, «up» – интерфейс при загрузке поднять. Стоит отметить, что файла /etc/rc.conf в Darwin просто нет. Поэтому вписать информацию о сетевых адресах по аналогии с FreeBSD не получится. Так вот, правильный путь не работает. Поэтому либо пропишем в /etc/rc.common наш сетевой адрес (для этого найдите функцию CheckForNetwork() – в ее теле и надо прописать), либо идем в системный каталог автозагрузки. Его полный путь – /System/Library/StartupItems. Каталог, отвечающий за сеть, именуется Network. Файл, который необходимо отредактировать, совпадает с названием каталога (его имя тоже Network). Обратите внимание, что на нем установлены биты на исполнение. # Configure network interfaces and host name ConsoleMessage «Initializing network» ipconfig waitall > /dev/null 2>&1 sysctl -w net.inet6.ip6.auto_on=0 > /dev/null sysctl -w net.inet.ip.forwarding=1 > /dev/null sysctl -w net.inet.ip.forwarding=0 > /dev/null ifconfig en0 10.0.0.10 netmask 255.255.255.0 Вот так выглядит файл Network на моей машине. Добавленная строка выделена красным цветом. Небольшое уточнение, выясненное в ходе настройки. При переходе на новую систему не надо забывать, что структурно Darwin не отличается от FreeBSD или, скажем, Linux в плане загрузки модулей. Что я хочу этим сказать. Если у вас сетевая карта опознана, то Darwin подгрузит для нее модуль. Как только модуль подгружен, то можно выставлять IP-адрес и маску. В общем, если выставляете IP-адрес в один из rc-файлов, будьте внимательны. Вставляйте строку после загрузки модулей ядра (они загружаются демоном kextd). На этом этапе сеть у нас готова. Правда, развертка монитора может раздражать. Мы ведь работаем в VESA-режиме. Вертикальная развертка 60 Hz. Давайте зададим текстовый режим консоли. Для этого редактируем файл /Library/Preferences/SystemConfiguration/com.apple.Boot.plist. В оригинале он выглядит так. Да, забыл сказать. Почти все конфигурационные файлы в Darwin хранятся в xml-формате. Что мы сейчас и видим. Для текстового режима необходимо поменять параметр Boot Graphics с Yes на No. Со следующей загрузки будет использоваться текстовый режим. Добавим теперь сервисы ftp, telnet. Редактируем файл /etc/inetd.conf, удаляем ненужные символы, ставим комментарии перед нужными нам службами. Посылаем сигнал, чтобы демон inetd перечитал свои настройки. killall -1 inetd Отлично. Службы появились. Теперь задумаемся, а может, нам еще нужен и веб-сервер? А DNS-сервер? Что ж, пробовать, так все и сразу. Чтобы запускать указанные и некоторые другие службы, при старте Darwin существует файл /etc/hostconfig: # This file is maintained by the system control panels Если параметр установлен в -YES-, тогда при старте указанные службы будут запущены. Запуском apache (строка WEBSERVER=-YES-) занимается файл /System/Library/StartupItems/Apache/Apache. Для DNS-сервера выделен файл /System/Library/Startup Items/BIND/BIND. В целом прослеживается аналогия со структурой системных файлов, например, как в Linux Slackware. В последней скрипты, запускающие определенный сервис, называются /etc/rc.d/rc.ServiceName. Строка MAILSERVER предназначена для почтовой службы postfix, TIMESYNC – для синхронизации времени, CUPS – для сервиса, отвечающего за печать, SMBSERVER – samba-сервис, добавим самостоятельно чуть позднее. Картина вырисовывается следующая. Сначала отрабатываются файлы /etc/rc*, а затем – соответствующие файлы в /System/Library/StartupItems. Чтобы запустить свой сервис, необходимо создать в /System/Library/StartupItems директорию с названием сервиса. В ней должны находиться: исполняемый файл, совпадающий с названием только что созданной директории и информационный файл StartupParameters.plist. Давайте посмотрим, как создать скрипт сервиса, отвечающего за старт samba-сервера. # Include system wide configuration options # Start SMB services ConsoleMessage «Starting SMB services» Description = «smb file server»; start = «Starting Samba»; stop = «Stopping Samba»; Вставляем в файл /etc/hostconfig строчку SMBSER-VER=-YES- и в дальнейшем надо будет выделить samba-ресурсы (файл /etc/smb.conf). Так, со службами все понятно. Установим локальное время в системе. ln -s /usr/share/zoneinfo/Europe/Moscow localtime Для необходимого нам hostname следует подправить файл /etc/rc.boot. Вместо строки по умолчанию «hostname localhost» вставим «hostname DarwinOS». Теперь мы рассмотрим концепцию NetInfo, реализованную в Darwin. Система может искать информацию как в файлах службы NetInfo, так и в «плоских» («plain text») файлах (/etc/fstab, /etc/passwd и др.). Для добавления пользователя, существует утилита niutil (NetInfo Util). С помощью этой же утилиты настраивается большая часть системы. niutil -create / /users/Bob niutil -createprop / /users/Bob shell /bin/tcsh niutil -createprop / /users/Bob realname UncleBob niutil -createprop / /users/Bob home /Users/Bob niutil -createprop / /users/Bob _shadow_passwd Комментарии, надеюсь, излишни? Сначала мы создали объект Bob в иерархии /users, а затем добавили этому объекту свойства. Добавить добавили, но надо и создать ему домашний каталог. chown -R Bob:wheel Bob Теперь у Bob домашняя директория, да и сам он получился по умолчанию в группе wheel. Можно переделать, добавив через niutil пользователю uid и gid. Для получения списка объектов в иерархии NetInfo выполним команду: Получим список корневых иерархий. Для просмотра объекта resolver (аналог /etc/resolver): niutil -read . /locations/resolver Создадим запись в объекте resolver: niutil -createprop . /locations/resolver nameserver 10.0.0.100 Всю базу NetInfo можно просмотреть: nidump -r / / > nidump.txt Приступаем к заключительной части нашей статьи. Готовимся к прыжку в окна X-сервера. В Darwin он называется XDarwin (это портированный в Mac OS проект XFree86). В системе обнаруживается только один оконный менеджер. Это twm. Для запуска twm создадим в домашней директории файл .xinitrc:
Не забываем, что он должен иметь установленным исполняемый бит. # chmod +x .xinitrc А теперь в окна! То есть в X-сервер. Как-то непривычно, не правда ли? Давайте поменяем twm на другой менеджер. Например, blackbox. Сказано – сделано. wget -ct0 http://prdownloads.sf.net/blackboxwm/blackbox-0.65.0.tar.gz mv blackbox-0.65.0.tar.gz sources tar xzvf blackbox-0.65.0.tar.gz make && make install
Теперь, как мне кажется, намного симпатичнее. Большую часть приложений придется собирать из исходников. Кому нравится GNOME, нет проблем. Дело вкуса. Для любителей клубнички даже существует проект darwine, запуск windows-приложений под Darwin (небезызвестный родоначальник – проект wine). Пару слов о модулях, упомянутых в начале статьи. Просмотр информации о загруженных модулях:
В списке я оставил упоминания модулей, названия которых отчасти говорят о платформе и используемом оборудовании.
Apache-сервер, которым комплектуется система, идентифицируется следующим образом: sh-2.05b# telnet darwin 80
Настройка ничем оригинальным не отличается. Интересно, как же идентифицируется система со стороны. Сейчас поглядим. Заходим на удаленную машину. И оттуда запускаем наш сканер портов nmap. # /usr/local/nmap/bin/nmap -v -sS -O darwin
Со стороны не отличишь, действительно ли это MacOSX на платформе PPC или x86. Жаль, что ни Aqua, ни Quartz не предусмотрены. Посмотрим на samba-ресурсы удаленной машины. root# smbclient -L fuji -I fuji 2> /dev/null
Посмотрим на геометрию диска из-под ОС Darwin. root# fdisk /dev/rdisk1
Наглядно и просто. Файловых систем не так уж и много.
Файловая система NTFS доступна только на чтение. Для монтирования файловой системы из-под Linux: # mount /dev/hdd2 /mnt/hd -t ufs -o, ufstype=44bsd На момент написания статьи поддержка из-под Linux только на чтение. Напоследок пара строк о средстве фильтрации трафика. Конечно, это ipfw. Полностью похож на своего *BSD-собрата. Впрочем, это не собрат, а скомпилированный под Darwin оригинальный ipfw. Правила задаются и убираются абсолютно так же, как и в FreeBSD. Более подробно см. в статьях: «Ipfw и управление трафиком в FreeBSD» (№6 журнала «Системный администратор» за 2003 год), «Сам себе антихакер. Защита от хакерских атак с помощью ipfw» (№1 журнала «Системный администратор» за 2004 год). В целом из машины на основе OpenDarwin вполне возможно сделать почтовый релей, систему доступа из Интернета по ppp-соединению, веб-сервер. Основные компоненты по созданию сетевой инфраструктуры уже присутствуют в системе: postfix, mysql, php, apache, bind, perl. Относительно сетевой безопасности – код стека TCP/IP, как говорилось в начале статьи, основан на оригинальном BSD-коде. Если каких-либо программ не хватает, то следует обратиться на сайт [7]. Вполне возможно, что эти программы уже портированы и доступны, как ports. Несколько слов о компиляции программ под Darwin. В системе используется GNU Compiler Collection. Поэтому особых проблем при сборке возникнуть не должно. В Darwin я встретил такое понятие, как «толстые» файлы («fat»-files). То есть при сборке файлы компилируются под несколько архитектур, например, под PPC и под x86. И собираются в один бинарный файл. При выполнении файла происходит определение архитектуры и передается управление на необходимый участок кода. В частности, ядро, идущее с системой, собрано с поддержкой как PowerPC (PPC) архитектуры, так и x86. Конечно же, статья не претендует на полное освещение всех нюансов «фруктовой» ОС. Она предназначена в первую очередь для тех, кто собирается расширить свой кругозор, и тех, кто неравнодушен к самой компании Apple Computer. Мечты придуманы для того, чтобы из них делать реальность. И фруктовая компания не забывает об этом. Источник |