- PureDarwin
- Moving the Darwin Community in the Right Direction!
- For the Darwin Community!
- Here’s our Beta Build!
- Here’s a ScreenShot and a Video of Our Latest Build!
- Documentation and quick hints
- NEW! Getting the code
- Something to the Open Source Community!
- Here’s a Guide on Building XNU of the 16.7(10.12.6) Kernel!
- Status
- PureDarwin IRC Channel!
- What is Darwin?
- What is PureDarwin?
- How usable is PureDarwin?
- Why spend time on Darwin?
- How does PureDarwin relate to the former OpenDarwin project?
- How does PureDarwin relate to the DarwinBuild project?
- What does the “Pure” in PureDarwin stand for?
- How can I help PureDarwin?
- Follow Us!
- Sponsors
- В яблочко! Краткий обзор ОС Darwin 7.0 на платформе X86 (MAC OS X 10.3 Jaguar)
PureDarwin
Moving the Darwin Community in the Right Direction!
Darwin is the Open Source operating system from Apple that forms the basis for macOS, and PureDarwin is a community project to make Darwin more usable (some people think of it as the informal successor to OpenDarwin).
One current goal of this project is to provide a useful bootable IMG and Virtual of Darwin 10.x Another goal of this project is to provide additional documentation. More…
For the Darwin Community!
Here’s our Beta Build!
Here’s a ScreenShot and a Video of Our Latest Build!
It’s almost there guys. Work in progress but it’s going along and yes all built from OpenSource based on 10.13.3 Released Code.
Documentation and quick hints
Please see the PureDarwin Wiki, it would be very kind if anyone could contribute and fix the wiki as we have links there that are broken.
See the changelog for recent updates to the Wiki.
NEW! Getting the code
We have a GitHub repo, and encourage visitors to use it for both contribution, and checking out the latest build source.
Additionally, as an interim measure, we have a version of PureDarwin Xmas with a fixed boot sector, which is compatible with QEMU.
Something to the Open Source Community!
Here’s a Guide on Building XNU of the 16.7(10.12.6) Kernel!
Status
PureDarwin is currently working on AHCI/NMVe and eMMC family/drivers for Darwin only they will not support/work on Apple’s macOS. We have a PoC(Proof of Concept) of a PureDarwin 17.6 QEMU image that’s based on Apple’s open source code of macOS 10.13.3 that’s only currently available to devs who join our IRC channel (#puredarwin on FreeNode).
Update: Hey, guys, we’re still moving along. We’ll be providing an SDK that is native of an Apple release on opensource.apple.com and a modified version that is PureDarwin targeted, as we are working on a modified XNU kernel with some other BSD/POSIX features that don’t require us to rely on Apple’s Closed sources that they’ll never release.
We are looking for supporters/coders that can help bring about faster Development of PureDarwin while showing Apple that there is still a community of Open Source Darwin Supporters that would like to see more open-ness from them, whether it be from them releasing Binary Drivers for our use as they once did, or open source projects like libxpc/launchd again.
PureDarwin IRC Channel!
Please join us on freenode.net #puredarwin for our info we have USA/Europe Devs who can receive hardware. Due to spam on IRC, please contact bart- or InSaneDarwin on IRC for an invite to the channel
What is Darwin?
Darwin is the Open Source operating system from Apple that forms the basis for macOS.
What is PureDarwin?
The goal of this project is to make Darwin more usable by providing an installation ISO, documentation, and add-on software. You are welcome to join #puredarwin on irc.freenode.net if you would like to join PureDarwin development and to add to www.puredarwin.org
How usable is PureDarwin?
PureDarwin can run on VMware as well as real Intel-based hardware. We are successfully running a web server, have built hundreds of software packages with MacPorts running on PureDarwin, including ssh, apache2, tightvnc, Xfce, and others.
Why spend time on Darwin?
For learning and for fun.
How does PureDarwin relate to the former OpenDarwin project?
Although some people have been seeing PureDarwin as the informal successor to OpenDarwin, there is no official relationship other than the fact that OpenDarwin and PureDarwin are both downstream Darwin projects. It is, of course, no secret that PureDarwin would not exist if OpenDarwin had not closed down. Coming later in time, PureDarwin is in the fortunate position to be able to benefit from the valuable contributions that were rooted in the OpenDarwin project.
How does PureDarwin relate to the DarwinBuild project?
DarwinBuild is one of PureDarwin‘s main upstream projects.
What does the “Pure” in PureDarwin stand for?
Pure as in beer! It means that we just use components specifically released by Apple for use with Darwin, as well as other Open Source components (coll ectively called “upstream code”). Specifically, it means that we do not use any components from macOS. It also means that we try to stay as close as possible to the “outside world” as in macOS (e.g., regarding the choice of compilers, options, etc.). It does not mean, however, that we do not modify and add to the upstream code, to the extent that the respective licenses allow.
How can I help PureDarwin?
Pretty much on all fronts. Especially if you are skilled in C, C++, ObjC, Mac OS X, BSD, etc. you should consider joining #puredarwin on irc.freenode.net
Follow Us!
Sponsors
MacStadium — for use of a Mac Mini for active development!
Источник
В яблочко! Краткий обзор ОС 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. Мечты придуманы для того, чтобы из них делать реальность. И фруктовая компания не забывает об этом. Источник |