В яблочко! Краткий обзор ОС Darwin 7.0 на платформе X86 (MAC OS X 10.3 Jaguar)::Журнал СА 8.2004
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
О журнале
Журнал «БИТ»
Подписка
Где купить
Авторам
Рекламодателям
Магазин
Архив номеров
Вакансии
Контакты
   

ЭКСПЕРТНАЯ СЕССИЯ 2019


  Опросы

Какие курсы вы бы выбрали для себя?  

Очные
Онлайновые
Платные
Бесплатные
Я и так все знаю

 Читать далее...

1001 и 1 книга  
28.05.2019г.
Просмотров: 1321
Комментарии: 2
Анализ вредоносных программ

 Читать далее...

28.05.2019г.
Просмотров: 1426
Комментарии: 1
Микросервисы и контейнеры Docker

 Читать далее...

28.05.2019г.
Просмотров: 1099
Комментарии: 0
Django 2 в примерах

 Читать далее...

28.05.2019г.
Просмотров: 850
Комментарии: 0
Введение в анализ алгоритмов

 Читать далее...

27.03.2019г.
Просмотров: 1438
Комментарии: 0
Arduino Uno и Raspberry Pi 3: от схемотехники к интернету вещей

 Читать далее...

Друзья сайта  

Форум системных администраторов  

sysadmins.ru

 В яблочко! Краткий обзор ОС Darwin 7.0 на платформе X86 (MAC OS X 10.3 Jaguar)

Архив номеров / 2004 / Выпуск №8 (21) / В яблочко! Краткий обзор ОС Darwin 7.0 на платформе X86 (MAC OS X 10.3 Jaguar)

Рубрика: Администрирование /  Продукты и решения

АНТОН БОРИСОВ

В яблочко!
Краткий обзор ОС Darwin 7.0 на платформе x86 (Mac OS X 10.3 Jaguar)

Полгода прошло с момента выхода в свет последнего релиза упомянутого в заголовке продукта. Президент Apple Стив Джобс подтвердил, что MacOSX действительно можно запустить на x86-платформе [1]. Давайте разберемся, что же может привлечь потенциального пользователя/администратора, помимо легендарного названия фирмы Apple Computer? В первую очередь, ориентирование компании на постепенное расширение своей продукции. Как известно, на протяжении своей истории операционные системы фирмы Apple работали только на оборудовании самой Apple. Отчасти это правильно. Приходится меньше волноваться о вопросах совместимости аппаратного и программного обеспечения. В то же время это и откровенный тупик в развитии.

Что же из себя представляет Darwin? Если коротко – это некое ядро операционной системы MacOSX, оно состоит из 5 главных компонентов: микроядро Mach, BSD-подсистема, файловая система, сетевая подсистема и система ввода-вывода (I/O Kit).

  • Микроядро Mach занимается распределением вычислительных ресурсов, защитой памяти, обменом сообщений между процессами.
  • Вокруг микроядра существует «обертка» из POSIX API, абстрактная файловая система и сетевая подсистема. Многое в микроядре заимствовано из 4.4 BSD-Lite2, соответственно модель процессов, система безопасности, потоковая поддержка покажутся знакомыми всем, кто работал с BSD-системами.
  • Файловая система поддерживает как UNIX (UFS), так и «родную» маковскую файловую систему (HFS).
  • TCP/IP-стек основан на проверенном временем BSD-коде.
  • Объектно-ориентированная система ввода/вывода представляет развитую инфраструктуру для управления драйверами устройств.

К сожалению, графическая подсистема MacOSX (Quick Time, OpenGL, Quartz), пользовательский интерфейс (Aqua) не присутствуют в системе. Хотя и без них Darwin является уже полноценной ОС. Более подробно об истории возникновения Darwin см. [2].

Дискутировать относительно открытости продуктов самой фирмы Apple можно долго, однако нас в первую очередь должно волновать несколько моментов:

  • списки совместимости с оборудованием (так называемые hardware compatibility list [3]);
  • знание структуры *BSD-систем;
  • потребность в использовании данной ОС в обучающем процессе на производстве.

Насчет первого пункта сильно огорчаться не следует, т.к. система стартует и работает на более-менее современной x86 машине. В общем-то, Intel Celeron 366, 128 Мб памяти должно хватить для ознакомления. Также следует обзавестись одной из следующих сетевых карт: 3Com 3c90x, Intel 8255x, Broadcom 570x, Realtek 8139, Dec 21x4 (она же Tulip). Встроенные сетевые карты, к сожалению, не поддерживаются. Видеокарта должна работать в VESA-режиме.

Для начала возьмем дистрибутив с сайта OpenDarwin [4]. Он из себя представляет упакованный gzip-образ, который потом надо записать на компакт-диск. Размер упакованного образа составляет 430 Мб.

wget -ct0 http://opendarwin.org/downloads/darwin-701.iso.gz

gzip -d darwin-701.iso.gz

cdrecord -v darwin-701.iso

Для дальнейшей работы потребуется пустой жесткий диск размером не более 2 Гб или такого же объема раздел.

Установленная система занимает примерно 1 Гб. Оставшееся место будем использовать для сборки необходимых пакетов.

Настраиваем загрузку с компакт-диска, и после определения оборудования ядром ОС мы увидим приглашение выбрать тот диск, на который хотим поставить операционную систему.

"1) Auto-partition the disk (Destroys all disk contents)"
"2) Manually partition the disk using fdisk"
"3) Use existing partitions"

Пункт 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 следующую строчку:

# DarwinOS begins

other = /dev/hdd2

label = DarwinOS

# DarwinOS ends

И запустив /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.

Вернемся к нашему яблоку. Перегружаемся, не забываем вытащить из привода компакт-диск. Далее загрузка будет происходить с нашего жесткого диска.

Вот несколько интересных, на мой взгляд, строк, которые можно наблюдать при старте системы. Ваше аппаратное обеспечение отличается от моего, но по аналогии можете сами проследить отличия.

Kernel virtual space from 0x0 to 0x40000000.
Available physical space from 0x727000 to 0x10000000

AppleSMBIOS: socketDesignation = SOCKET A
AppleSMBIOS: processorType     = 0x3
AppleSMBIOS: processorFamily   = 0x1
AppleSMBIOS: manufacturer      = AuthenticAMD
AppleSMBIOS: processorVersion  = AMD Athlon(TM) XP 1700+
AppleSMBIOS: voltage           = 0x8e
AppleSMBIOS: externalClock     = 0x85
AppleSMBIOS: maximumClock      = 0x8ca
AppleSMBIOS: currentClock      = 0x5ba

AppleGenericPCATADriver: Port 0x1f0, IRQ 14
AppleGenericPCATADriver: Port 0x170, IRQ 15

BSD root: disk1s2, major 14, minor 9
hfs_mount: invalid HFS+ sig 0x0000

Apple3Com3C90x: 3Com EtherLink 3C905C Port 0xd800 IRQ 11
Apple3Com3C90x: Ethernet address 00:01:03:d1:f9:7c

Итак, строка 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 (пароль изначально не установлен). Что необходимо сделать на этом этапе? Попробуем поднять сеть? Давайте сделаем!

Даем команду:

# ifconfig

lo0: flags=8049 mtu 16384
        inet6 ::1 prefixlen 128
        inet6 fe80::1 prefixlen 64 scopeid 0x1
        inet 127.0.0.1 netmask 0xff000000
gif0: flags=8010 mtu 1280
stf0: flags=0<> mtu 1280
en0: flags=8863 mtu 1500
        ether 00:01:03:d1:f9:7c
        media: autoselect (100baseTX ) status: active
        supported media: 10baseT/UTP 10baseT/UTP autoselect 10
    0baseTX 100baseTX

Ага, вот и наша сетевая карта (интерфейс 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). Обратите внимание, что на нем установлены биты на исполнение.

# cat Network

#!/bin/sh

##

# Configure network interfaces and host name

##

. /etc/rc.common

StartService ()

{

    ConsoleMessage "Initializing network"

    ipconfig waitall > /dev/null 2>&1

    if [ "${IPV6:=-YES-}" = "-NO-" ]

    then

           sysctl -w net.inet6.ip6.auto_on=0 > /dev/null

           ip6 -x

    fi

    if [ "${IPFORWARDING:=-NO-}" = "-YES-" ]

    then

           sysctl -w net.inet.ip.forwarding=1 > /dev/null

    else

           sysctl -w net.inet.ip.forwarding=0 > /dev/null

    fi

           ifconfig en0 10.0.0.10 netmask 255.255.255.0

}

StopService ()

{

    return 0

}

RestartService ()

{

    return 0

}

RunService "$1"

Вот так выглядит файл Network на моей машине. Добавленная строка выделена красным цветом.

Небольшое уточнение, выясненное в ходе настройки. При переходе на новую систему не надо забывать, что структурно Darwin не отличается от FreeBSD или, скажем, Linux в плане загрузки модулей. Что я хочу этим сказать. Если у вас сетевая карта опознана, то Darwin подгрузит для нее модуль. Как только модуль подгружен, то можно выставлять IP-адрес и маску. В общем, если выставляете IP-адрес в один из rc-файлов, будьте внимательны.

Вставляйте строку после загрузки модулей ядра (они загружаются демоном kextd).

На этом этапе сеть у нас готова. Правда, развертка монитора может раздражать. Мы ведь работаем в VESA-режиме. Вертикальная развертка 60 Hz.

Давайте зададим текстовый режим консоли. Для этого редактируем файл /Library/Preferences/SystemConfiguration/com.apple.Boot.plist.

В оригинале он выглядит так.

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"

"http://www.apple.com/DTDs/P

ropertyList-1.0.dtd">

<plist version="1.0">

<dict>

    <key>Kernel</key>

    <string>mach_kernel</string>

    <key>Kernel Flags</key>

    <string> -v</string>

    <key>Boot Graphics</key>

    <string>Yes</string>

    <key>APM</key>

    <string>Yes</string>

</dict>

</plist>

Да, забыл сказать. Почти все конфигурационные файлы в Darwin хранятся в xml-формате. Что мы сейчас и видим.

Для текстового режима необходимо поменять параметр Boot Graphics с Yes на No. Со следующей загрузки будет использоваться текстовый режим.

Добавим теперь сервисы ftp, telnet. Редактируем файл /etc/inetd.conf, удаляем ненужные символы, ставим комментарии перед нужными нам службами.

Посылаем сигнал, чтобы демон inetd перечитал свои настройки.

killall -1 inetd

Отлично. Службы появились.

Теперь задумаемся, а может, нам еще нужен и веб-сервер? А DNS-сервер? Что ж, пробовать, так все и сразу.

Чтобы запускать указанные и некоторые другие службы, при старте Darwin существует файл /etc/hostconfig:

# cat /etc/hostconfig

# /etc/hostconfig

##

# This file is maintained by the system control panels

##

# Network configuration

HOSTNAME=DarwinOS

# Services

AUTOMOUNT=-NO-

CUPS=-NO-

IPFORWARDING=-NO-

IPV6=-YES-

NETINFOSERVER=-NO-

NISDOMAIN=-NO-

RPCSERVER=-YES-

QTSSERVER=-YES-

WEBSERVER=-YES-

DNSSERVER=-NO-

COREDUMPS=-NO-

VPNSERVER=-NO-

Если параметр установлен в -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-сервера.

#!/bin/sh

#  Include system wide configuration options

. /etc/rc.common

#  Start SMB services

if [ "${SMBSERVER:=-NO-}" = "-YES-" ]; then

    ConsoleMessage "Starting SMB services"

    /usr/sbin/smbd -D

    /usr/sbin/nmbd -D

fi

Файл StartupParameters.plist:

{

    Description             = "smb file server";

    Provides                = ("Samba");

    Requires                = ("Resolver");

    OrderPreference         = "None";

    Messages                =

    {

           start   = "Starting Samba";

           stop    = "Stopping Samba";

    };

}

Вставляем в файл /etc/hostconfig строчку SMBSER-VER=-YES- и в дальнейшем надо будет выделить samba-ресурсы (файл /etc/smb.conf).

Так, со службами все понятно. Установим локальное время в системе.

cd /etc

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, а затем добавили этому объекту свойства. Добавить добавили, но надо и создать ему домашний каталог.

cd /Users

mkdir Bob

chown -R Bob:wheel Bob

Теперь у Bob домашняя директория, да и сам он получился по умолчанию в группе wheel. Можно переделать, добавив через niutil пользователю uid и gid.

Для получения списка объектов в иерархии NetInfo выполним команду:

niutil -list . /

Получим список корневых иерархий. Для просмотра объекта 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:

# cat ~/.xinitrc

/usr/X11R6/bin/xterm &
/usr/X11R6/bin/twm

Не забываем, что он должен иметь установленным исполняемый бит.

# chmod +x .xinitrc

А теперь в окна! То есть в X-сервер.

# startx

Рисунок 1

Как-то непривычно, не правда ли?

Давайте поменяем twm на другой менеджер. Например, blackbox. Сказано – сделано.

wget -ct0 http://prdownloads.sf.net/blackboxwm/blackbox-0.65.0.tar.gz

mkdir ~/sources

mv blackbox-0.65.0.tar.gz sources

tar xzvf blackbox-0.65.0.tar.gz

cd blackbox-0.65.0

./configure --prefix=/usr/local/blackbox

make && make install

Меняем .xinitrc.

echo “/usr/local/blackbox/bin/blackbox” > ~/.xinitrc

Рисунок 2

Теперь, как мне кажется, намного симпатичнее.

Большую часть приложений придется собирать из исходников. Кому нравится GNOME, нет проблем. Дело вкуса. Для любителей клубнички даже существует проект darwine, запуск windows-приложений под Darwin (небезызвестный родоначальник – проект wine).

Пару слов о модулях, упомянутых в начале статьи. Просмотр информации о загруженных модулях:

# kextstat

Index Refs Address    Size       Wired      Name (Version)
    1    1 0x0        0x0        0x0        com.apple.kernel (7.0)
    2    1 0x0        0x0        0x0        com.apple.kpi.bsd (7.0)
    3    1 0x0        0x0        0x0        com.apple.kpi.iokit (7.0)
    4    1 0x0        0x0        0x0        com.apple.kpi.libkern (7.0)
    5    1 0x0        0x0        0x0        com.apple.kpi.mach (7.0)
   10   29 0x0        0x0        0x0        com.apple.kernel.6.0 (6.9.9)
   11    1 0x0        0x0        0x0        com.apple.kernel.bsd (6.9.9)
   12    1 0x0        0x0        0x0        com.apple.kernel.iokit (6.9.9)
   13    1 0x0        0x0        0x0        com.apple.kernel.libkern (6.9.9)
   14    1 0x0        0x0        0x0        com.apple.kernel.mach (6.9.9)
   16    2 0x21279000 0x49000    0x48000    com.apple.driver.AppleACPIPlatform (1.0.0d4) <15 10>
   17    0 0x212c7000 0x5000     0x4000     com.apple.driver.AppleI386GenericPlatform (1.0.0) <10>
   24    3 0x22b8b000 0x4000     0x3000     com.apple.driver.ApplePS2Controller (1.0.2) <10>
   26    0 0x22c0e000 0x3000     0x2000     com.apple.driver.ApplePS2Keyboard (1.0.2) <24 19 10>
   30    0 0x22c9a000 0x5000     0x4000     com.apple.driver.AppleGenericPCATA (1.2) <29 2 7 10>
   31    3 0x22cb5000 0x16000    0x15000    com.apple.iokit.IOUSBFamily (2.0.5) <10>
   34    0 0x22d35000 0x7000     0x6000     com.apple.driver.Apple3Com3C90x (1.2.2) <27 22 10>
   36    0 0x22d69000 0x4000     0x3000     com.apple.iokit.IOATAPIProtocolTransport (1.3.0) <35 29>
   44    1 0x22e5c000 0x18000    0x17000    com.apple.iokit.IOGraphicsFamily (1.3) <27 10>
   45    0 0x22e74000 0xe000     0xd000     com.apple.iokit.IONDRVSupport (1.3) <44 27 10>
   51    0 0x22ea0000 0x3000     0x2000     com.apple.driver.ApplePS2Mouse (1.0.3) <24 19 10>
   52    0 0x22efe000 0xd000     0xc000     com.apple.filesystems.msdosfs (1.3) <10>
   53    0 0x22f0f000 0x7000     0x6000     com.apple.nke.IPFirewall (1.3) <10>
   54    0 0x22f26000 0xc000     0xb000     com.apple.filesystems.ntfs (1.0) <10>

В списке я оставил упоминания модулей, названия которых отчасти говорят о платформе и используемом оборудовании.

  • kextload kextName – загрузка модуля под именем kextName (они находятся в /System/Library/Extensions).
  • kextunload kextName – соответственно выгрузка из памяти модуля kextName.
  • kextxcache – подготовка базы модулей, хранящихся в /System/Library/Extensions.

Apache-сервер, которым комплектуется система, идентифицируется следующим образом:

sh-2.05b# telnet darwin 80

Trying 10.0.0.10...
Connected to darwin.
Escape character is "^]".
HEAD / HTTP/1.0
HTTP/1.1 200 OK
Date: Sun, 23 May 2004 00:53:47 GMT
Server: Apache/1.3.28 (Darwin)
Content-Location: index.html.en
Vary: negotiate,accept-language,accept-charset
TCN: choice
Last-Modified: Wed, 18 Jul 2001 23:44:21 GMT
ETag: "37bce-5b0-3b561f55;3fa2d462"
Accept-Ranges: bytes
Content-Length: 1456
Connection: close
Content-Type: text/html
Content-Language: en
Expires: Sun, 23 May 2004 00:53:47 GMT
Connection closed by foreign host.

Настройка ничем оригинальным не отличается.

Интересно, как же идентифицируется система со стороны. Сейчас поглядим. Заходим на удаленную машину. И оттуда запускаем наш сканер портов nmap.

# /usr/local/nmap/bin/nmap -v -sS -O darwin

Starting nmap 3.50 ( http://www.insecure.org/nmap/ ) at 2004-05-27 23:01 MSD
Host darwin (10.0.0.10) appears to be up ... good.
Initiating SYN Stealth Scan against darwin (10.0.0.10) at 23:01
Adding open port 21/tcp
Adding open port 6000/tcp
Adding open port 80/tcp
Adding open port 23/tcp
The SYN Stealth Scan took 11 seconds to scan 1659 ports.
For OSScan assuming that port 21 is open and port 1 is closed and neither
are firewalled
Interesting ports on darwin (10.0.0.10):
(The 1652 ports scanned but not shown below are in state: closed)
PORT     STATE    SERVICE
21/tcp   open     ftp
23/tcp   open     telnet
70/tcp   filtered gopher
80/tcp   open     http
5050/tcp filtered mmcc
6000/tcp open     X11
8000/tcp filtered http-alt
Device type: general purpose
Running: Apple Mac OS X 10.3.X
OS details: Apple Mac OX X 10.3.0 - 10.3.2 (Panther)
TCP Sequence Prediction: class="truly" random
                         Difficulty=9999999 (Good luck!)
IPID Sequence Generation: Incremental

Nmap run completed -- 1 IP address (1 host up) scanned in 20.452 seconds

Со стороны не отличишь, действительно ли это MacOSX на платформе PPC или x86. Жаль, что ни Aqua, ни Quartz не предусмотрены.

Посмотрим на samba-ресурсы удаленной машины.

DarwinOS:~ root# smbclient -L fuji -I fuji 2> /dev/null

Password:
Anonymous login successful

        Sharename      Type      Comment
        ---------      ----      -------
        Share          Disk      Share
        Media          Disk      Music & Video Share
        Software       Disk      Software Share
        IPC$           IPC       IPC Service (Samba Server)
        ADMIN$         Disk      IPC Service (Samba Server)
Anonymous login successful

        Server               Comment
        ---------            -------
        FUJI                 Samba Server

        Workgroup            Master
        ---------            -------
        MYGROUP              ATHLON

Посмотрим на геометрию диска из-под ОС Darwin.

DarwinOS:~ root# fdisk /dev/rdisk1

Disk: /dev/rdisk1       geometry: 779/128/63 [6281856 sectors]
Signature: 0xAA55
         Starting       Ending
 #: id  cyl  hd sec -  cyl  hd sec [     start -       size]
------------------------------------------------------------------------
 1: 06    0   1   1 -   68 127  63 [        63 -     556353] DOS > 32MB
*2: A8   69   0   1 -  576 127  63 [    556416 -    4096512] Darwin UFS
 3: 00    0   0   0 -    0   0   0 [         0 -          0] unused
 4: 00    0   0   0 -    0   0   0 [         0 -          0] unused

Наглядно и просто. Файловых систем не так уж и много.

# ls /System/Library/Filesystems

cd9660.fs  cddafs.fs  hfs.fs  msdos.fs  ntfs.fs  ufs.fs

Файловая система 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.

Мечты придуманы для того, чтобы из них делать реальность. И фруктовая компания не забывает об этом.

Ссылки:

  1. http://developer.apple.com/darwin/history.html
  2. http://news.com.com/2100-1045_3-5103279.html
  3. http://www.opendarwin.org/hardware
  4. http://blackboxwm.sf.net
  5. http://www.opendarwin.org/documentation
  6. http://www.mymac.ru
  7. http://darwinports.opendarwin.org
  8. Потемкин А. Mac OS X или то, что должен знать каждый про Macintosh, Apple и операционные системы. – Журнал «Системный администратор», №7, июль, 2003 г. – 68-77 с. (http://samag.ru/archive/article/157)

Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-41
Fax: (499) 277-12-45
E-mail: sa@samag.ru